| 4674 | `)+1}}}}catch{}try{let H={file_path:q,offset:A,limit:O};async function J(){if(Y==="compact")return{type:"compact_file_reference",filename:q,displayPath:ma(Z8(),q)};let X=K.getAppState();if(Yh6(q,X.toolPermissionContext))return null;try{let P={file_path:q,offset:A??1,limit:mc6},W=await i_.call(P,K);return d(_,{}),{type:"file",filename:q,content:W.data,truncated:!0,displayPath:ma(Z8(),q)}}catch{return d(z,{}),null}}if(!(await i_.validateInput(H,K)).result)return null;try{let X=await i_.call(H,K);return d(_,{}),{type:"file",filename:q,content:X.data,displayPath:ma(Z8(),q)}}catch(X){if(X instanceof sp8||X instanceof w18)return await J();throw X}}catch{return d(z,{}),null}}function V4(q){return{attachment:q,type:"attachment",uuid:O_Y(),timestamp:new Date().toISOString()}}function i_Y(q){let K=-1,_=-1,z=0,Y=0;for(let $=q.length-1;$>=0;$--){let A=q[$];if(A?.type==="assistant"){if(T17(A))continue;if(K===-1&&"message"in A&&Array.isArray(A.message?.content)&&A.message.content.some((O)=>O.type==="tool_use"&&O.name==="TodoWrite"))K=$;if(K===-1)z++;if(_===-1)Y++}else if(_===-1&&A?.type==="attachment"&&A.attachment.type==="todo_reminder")_=$;if(K!==-1&&_!==-1)break}return{turnsSinceLastTodoWrite:z,turnsSinceLastReminder:Y}}async function r_Y(q,K){if(!K.options.tools.some((Y)=>g_(Y,BC)))return[];if(YB8&&K.options.tools.some((Y)=>g_(Y,YB8)))return[];if(!q||q.length===0)return[];let{turnsSinceLastTodoWrite:_,turnsSinceLastReminder:z}=i_Y(q);if(_>=$B8.TURNS_SINCE_WRITE&&z>=$B8.TURNS_BETWEEN_REMINDERS){let Y=K.agentId??N8(),A=K.getAppState().todos[Y]??[];return[{type:"todo_reminder",content:A,itemCount:A.length}]}return[]}function o_Y(q){let K=-1,_=-1,z=0,Y=0;for(let $=q.length-1;$>=0;$--){let A=q[$];if(A?.type==="assistant"){if(T17(A))continue;if(K===-1&&"message"in A&&Array.isArray(A.message?.content)&&A.message.content.some((O)=>O.type==="tool_use"&&(O.name===TN||O.name===bL)))K=$;if(K===-1)z++;if(_===-1)Y++}else if(_===-1&&A?.type==="attachment"&&A.attachment.type==="task_reminder")_=$;if(K!==-1&&_!==-1)break}return{turnsSinceLastTaskManagement:z,turnsSinceLastReminder:Y}}async function a_Y(q,K){if(!IH())return[];if(YB8&&K.options.tools.some((Y)=>g_(Y,YB8)))return[];if(!K.options.tools.some((Y)=>g_(Y,bL)))return[];if(!q||q.length===0)return[];let{turnsSinceLastTaskManagement:_,turnsSinceLastReminder:z}=o_Y(q);if(_>=$B8.TURNS_SINCE_WRITE&&z>=$B8.TURNS_BETWEEN_REMINDERS){let Y=await LD(cG());return[{type:"task_reminder",content:Y,itemCount:Y.length}]}return[]}async function s_Y(q){let K=q.getAppState(),{attachments:_,updatedTaskOffsets:z,evictedTaskIds:Y}=await Cy4(K);return by4(q.setAppState,z,Y),_.map(($)=>({type:"task_status",taskId:$.taskId,taskType:$.taskType,status:$.status,description:$.description,deltaSummary:$.deltaSummary,outputFilePath:sz($.taskId)}))}async function t_Y(){let q=await OfK();if(q.length===0)return[];N(`Hooks: getAsyncHookResponseAttachments found ${q.length} responses`);let K=q.map(({processId:_,response:z,hookName:Y,hookEvent:$,toolName:A,pluginId:O,stdout:w,stderr:j,exitCode:H})=>{return N(`Hooks: Creating attachment for ${_} (${Y}): ${g6(z)}`),{type:"async_hook_response",processId:_,hookName:Y,hookEvent:$,toolName:A,response:z,stdout:w,stderr:j,exitCode:H}});if(q.length>0){let _=q.map((z)=>z.processId);wfK(_),N(`Hooks: Removed ${_.length} delivered hooks from registry`)}return N(`Hooks: getAsyncHookResponseAttachments found ${K.length} attachments`),K}async function e_Y(q){if(!nq())return[];return[]}function qzY(q){let K=$9(),_=NP(),z=M_();if(!K||!_)return[];if(q.some((w)=>w.type==="assistant"))return[];let $=c1(),A=`${$}/teams/${K}/config.json`,O=`${$}/tasks/${K}/`;return[{type:"team_context",agentId:_,agentName:z||_,teamName:K,teamConfigPath:A,taskListPath:O}]}function KzY(q,K){if(!i6(process.env.CLAUDE_CODE_ENABLE_TOKEN_USAGE_ATTACHMENT))return[];let _=rQ(K),z=NL(q);return[{type:"token_usage",used:z,total:_,remaining:_-z}]}function _zY(){return[]}function zzY(q){if(q===void 0)return[];let K=fW(),_=q-K;return[{type:"budget_usd",used:K,total:q,remaining:_}]}function YzY(q){let K=0;for(let _=q.length-1;_>=0;_--){let z=q[_];if(z&&zh6(z))K++;if(z?.type==="attachment"&&z.attachment.type==="plan_mode_exit")return K}return 0}async function $zY(q,K){return[]}function Yh6(q,K){return VH(q,K,"read","deny")!==null}var ffK,YB8,$B8,JfK,MfK,D17=200,XfK=4096,w_Y,j_Y,J_Y,Z17,OB8=!1;var lP=y(()=>{k8();Bq();$p();sR6();dz();e7();gj();SJ();U2();wM();I7();bE6();E8();_8();y8();Pj6();U1();Uj6();RL();yA();Fu();v8();yO6();fP();IY();A17();NG();B2();y8();bK();SP();Z$();G67();Fj();G7();ok();Tz();J0();Ij();gP();v8();RC();tp8();cC();_B8();OL6();_8();i1();m8();WL();EG();io();o1();y$();l8();cf8();yk6();$17();i$();HfK();rw();pu();RJ();AY();JG();RD();gj();wR1();ffK=Eq(mK6),YB8=(YI(),Eq(Pl)).BRIEF_TOOL_NAME,$B8={TURNS_SINCE_WRITE:10,TURNS_BETWEEN_REMINDERS:10},JfK={TURNS_BETWEEN_ATTACHMENTS:5,FULL_REMINDER_EVERY_N_ATTACHMENTS:5},MfK={TURNS_BETWEEN_ATTACHMENTS:5,FULL_REMINDER_EVERY_N_ATTACHMENTS:5},w_Y={MAX_SESSION_BYTES:61440},j_Y={TURNS_BETWEEN_REMINDERS:10};J_Y=new Set(["prompt","task-notification"]);Z17=new Map});import{basename as Ah6,dirname as pa,join as wB8}from"path";function v17(q){return/^skill\.md$/i.test(Ah6(q))}function AzY(q,K,_){if(v17(q)){let Y=pa(q),$=pa(Y),A=Ah6(Y),O=$.startsWith(K)?$.slice(K.length).replace(/^\//,""):"",w=O?O.split("/").join(":"):"";return w?`${_}:${w}:${A}`:`${_}:${A}`}else{let Y=pa(q),$=Ah6(q).replace(/\.md$/,""),A=Y.startsWith(K)?Y.slice(K.length).replace(/^\//,""):"",O=A?A.split("/").join(":"):"";return O?`${_}:${O}:${$}`:`${_}:${$}`}}async function OzY(q,K,_){let z=[],Y=X8();return await Vk6(q,async($)=>{if(Cc(Y,$,_))return;let A=await Y.readFile($,{encoding:"utf-8"}),{frontmatter:O,content:w}=kH(A,$);z.push({filePath:$,baseDir:K,frontmatter:O,content:w})},{stopAtSkillDir:!0,logLabel:"commands"}),z}function wzY(q){let K=new Map;for(let z of q){let Y=pa(z.filePath),$=K.get(Y)??[];$.push(z),K.set(Y,$)}let _=[];for(let[z,Y]of K){let $=Y.filter((A)=>v17(A.filePath));if($.length>0){let A=$[0];if($.length>1)N(`Multiple skill files found in ${z}, using ${Ah6(A.filePath)}`);_.push(A)}else _.push(...Y)}return _}async function VfK(q,K,_,z,Y,$={isSkillMode:!1},A=new Set){let O=await OzY(q,q,A),w=wzY(O),j=[];for(let H of w){let J=AzY(H.filePath,H.baseDir,K),M=E18(J,H,_,z,Y,v17(H.filePath),$);if(M)j.push(M)}return j}function E18(q,K,_,z,Y,$,A={isSkillMode:!1}){try{let{frontmatter:O,content:w}=K,j=Lu(O.description,q),H=j??z76(w,$?"Plugin skill":"Plugin command"),J=O["allowed-tools"],M=typeof J==="string"?dF(J,{path:Y,source:_}):Array.isArray(J)?J.map((x)=>typeof x==="string"?dF(x,{path:Y,source:_}):x):J,X=RF(M),P=O["argument-hint"],W=AI8(O.arguments),D=O.when_to_use,f=O.version,G=O.name,Z=O.model==="inherit"?void 0:O.model?A5(O.model):void 0,T=O.effort,v=T!==void 0?OC(T):void 0;if(T!==void 0&&v===void 0)N(`Plugin command ${q} has invalid effort '${T}'. Valid options: ${DL.join(", ")} or an integer`);let V=Pv6(O["disable-model-invocation"]),E=O["user-invocable"],S=E===void 0?!0:Pv6(E),R=pG8(O.shell,q);return{type:"prompt",name:q,description:H,hasUserSpecifiedDescription:j!==null,allowedTools:X,argumentHint:P,argNames:W.length>0?W:void 0,whenToUse:D,version:f,model:Z,effort:v,disableModelInvocation:V,userInvocable:S,contentLength:w.length,source:"plugin",loadedFrom:$||A.isSkillMode?"plugin":void 0,pluginInfo:{pluginManifest:z,repository:_},isHidden:!S,progressMessage:$||A.isSkillMode?"loading":"running",userFacingName(){return G||q},async getPromptForCommand(x,I){let B=A.isSkillMode?`Base directory for this skill: ${pa(K.filePath)} |
| 4676 | ${w}`:w;if(B=DL6(B,x,!0,W),B=dF(B,{path:Y,source:_}),z.userConfig)B=Ok8(B,VG(_),z.userConfig);if(A.isSkillMode){let p=pa(K.filePath),C=process.platform==="win32"?p.replace(/\\/g,"/"):p;B=B.replace(/\$\{CLAUDE_SKILL_DIR\}/g,C)}return B=B.replace(/\$\{CLAUDE_SESSION_ID\}/g,N8()),B=await pQ(B,{...I,getAppState(){let p=I.getAppState();return{...p,toolPermissionContext:{...p.toolPermissionContext,alwaysAllowRules:{...p.toolPermissionContext.alwaysAllowRules,command:X}}}}},`/${q}`,R),[{type:"text",text:B}]}}}catch(O){return N(`Failed to create command from ${K.filePath}: ${O}`,{level:"error"}),null}}function jB8(){kH6.cache?.clear?.()}async function NfK(q,K,_,z,Y,$){let A=X8(),O=[],w=wB8(q,"SKILL.md"),j=null;try{j=await A.readFile(w,{encoding:"utf-8"})}catch(J){if(!_7(J))return N(`Failed to load skill from ${w}: ${J}`,{level:"error"}),O}if(j!==null){if(Cc(A,w,$))return O;try{let{frontmatter:J,content:M}=kH(j,w),X=`${K}:${Ah6(q)}`,P={filePath:w,baseDir:pa(w),frontmatter:J,content:M},W=E18(X,P,_,z,Y,!0,{isSkillMode:!0});if(W)O.push(W)}catch(J){N(`Failed to load skill from ${w}: ${J}`,{level:"error"})}return O}let H;try{H=await A.readdir(q)}catch(J){if(!_7(J))N(`Failed to load skills from directory ${q}: ${J}`,{level:"error"});return O}return await Promise.all(H.map(async(J)=>{if(!J.isDirectory()&&!J.isSymbolicLink())return;let M=wB8(q,J.name),X=wB8(M,"SKILL.md"),P;try{P=await A.readFile(X,{encoding:"utf-8"})}catch(W){if(!_7(W))N(`Failed to load skill from ${X}: ${W}`,{level:"error"});return}if(Cc(A,X,$))return;try{let{frontmatter:W,content:D}=kH(P,X),f=`${K}:${J.name}`,G={filePath:X,baseDir:pa(X),frontmatter:W,content:D},Z=E18(f,G,_,z,Y,!0,{isSkillMode:!0});if(Z)O.push(Z)}catch(W){N(`Failed to load skill from ${X}: ${W}`,{level:"error"})}})),O}function yfK(){k17.cache?.clear?.()}var kH6,k17;var L18=y(()=>{F4();v8();S68();_8();q0();m8();y8();rV();e7();ri();aq();uL6();bj();mu();wk8();kH6=_1(async()=>{if(f9()&&ep().length===0)return[];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.commandsPath)try{let O=await VfK(Y.commandsPath,Y.name,Y.source,Y.manifest,Y.path,{isSkillMode:!1},$);if(A.push(...O),O.length>0)N(`Loaded ${O.length} commands from plugin ${Y.name} default directory`)}catch(O){N(`Failed to load commands from plugin ${Y.name} default directory: ${O}`,{level:"error"})}if(Y.commandsPaths){N(`Plugin ${Y.name} has commandsPaths: ${Y.commandsPaths.join(", ")}`);let O=await Promise.all(Y.commandsPaths.map(async(w)=>{try{let j=X8(),H=await j.stat(w);if(N(`Checking commandPath ${w} - isDirectory: ${H.isDirectory()}, isFile: ${H.isFile()}`),H.isDirectory()){let J=await VfK(w,Y.name,Y.source,Y.manifest,Y.path,{isSkillMode:!1},$);if(J.length>0)N(`Loaded ${J.length} commands from plugin ${Y.name} custom path: ${w}`);else N(`Warning: No commands found in plugin ${Y.name} custom directory: ${w}. Expected .md files or SKILL.md in subdirectories.`,{level:"warn"});return J}else if(H.isFile()&&w.endsWith(".md")){if(Cc(j,w,$))return[];let J=await j.readFile(w,{encoding:"utf-8"}),{frontmatter:M,content:X}=kH(J,w),P,W;if(Y.commandsMetadata){for(let[Z,T]of Object.entries(Y.commandsMetadata))if(T.source){let v=wB8(Y.path,T.source);if(w===v){P=`${Y.name}:${Z}`,W=T;break}}}if(!P)P=`${Y.name}:${Ah6(w).replace(/\.md$/,"")}`;let D=W?{...M,...W.description&&{description:W.description},...W.argumentHint&&{"argument-hint":W.argumentHint},...W.model&&{model:W.model},...W.allowedTools&&{"allowed-tools":W.allowedTools.join(",")}}:M,f={filePath:w,baseDir:pa(w),frontmatter:D,content:X},G=E18(P,f,Y.source,Y.manifest,Y.path,!1);if(G)return N(`Loaded command from plugin ${Y.name} custom file: ${w}${W?" (with metadata override)":""}`),[G]}return[]}catch(j){return N(`Failed to load commands from plugin ${Y.name} custom path ${w}: ${j}`,{level:"error"}),[]}}));for(let w of O)A.push(...w)}if(Y.commandsMetadata){for(let[O,w]of Object.entries(Y.commandsMetadata))if(w.content&&!w.source)try{let{frontmatter:j,content:H}=kH(w.content,`<inline:${Y.name}:${O}>`),J={...j,...w.description&&{description:w.description},...w.argumentHint&&{"argument-hint":w.argumentHint},...w.model&&{model:w.model},...w.allowedTools&&{"allowed-tools":w.allowedTools.join(",")}},M=`${Y.name}:${O}`,X={filePath:`<inline:${M}>`,baseDir:Y.path,frontmatter:J,content:H},P=E18(M,X,Y.source,Y.manifest,Y.path,!1);if(P)A.push(P),N(`Loaded inline content command from plugin ${Y.name}: ${M}`)}catch(j){N(`Failed to load inline content command ${O} from plugin ${Y.name}: ${j}`,{level:"error"})}}return A}))).flat();return N(`Total plugin commands loaded: ${z.length}`),z});k17=_1(async()=>{if(f9()&&ep().length===0)return[];let{enabled:q,errors:K}=await ZJ();if(K.length>0)N(`Plugin loading errors: ${K.map((Y)=>$M(Y)).join(", ")}`);N(`getPluginSkills: Processing ${q.length} enabled plugins`);let z=(await Promise.all(q.map(async(Y)=>{let $=new Set,A=[];if(N(`Checking plugin ${Y.name}: skillsPath=${Y.skillsPath?"exists":"none"}, skillsPaths=${Y.skillsPaths?Y.skillsPaths.length:0} paths`),Y.skillsPath){N(`Attempting to load skills from plugin ${Y.name} default skillsPath: ${Y.skillsPath}`);try{let O=await NfK(Y.skillsPath,Y.name,Y.source,Y.manifest,Y.path,$);A.push(...O),N(`Loaded ${O.length} skills from plugin ${Y.name} default directory`)}catch(O){N(`Failed to load skills from plugin ${Y.name} default directory: ${O}`,{level:"error"})}}if(Y.skillsPaths){N(`Attempting to load skills from plugin ${Y.name} skillsPaths: ${Y.skillsPaths.join(", ")}`);let O=await Promise.all(Y.skillsPaths.map(async(w)=>{try{N(`Loading from skillPath: ${w} for plugin ${Y.name}`);let j=await NfK(w,Y.name,Y.source,Y.manifest,Y.path,$);return N(`Loaded ${j.length} skills from plugin ${Y.name} custom path: ${w}`),j}catch(j){return N(`Failed to load skills 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 skills loaded: ${z.length}`),z})});import{randomBytes as LfK}from"crypto";import{chmod as jzY,lstat as HzY,readdir as JzY,readFile as MzY,rename as XzY,rm as N17,stat as EfK,writeFile as V17}from"fs/promises";import{tmpdir as PzY}from"os";import{basename as WzY,dirname as RfK,join as sQ}from"path";function Sb(){return i6(process.env.CLAUDE_CODE_PLUGIN_USE_ZIP_CACHE)}function R18(){if(!Sb())return;let q=process.env.CLAUDE_CODE_PLUGIN_CACHE_DIR;return q?O76(q):void 0}function y17(){let q=R18();if(!q)throw Error("Plugin zip cache is not enabled");return sQ(q,"known_marketplaces.json")}function hfK(){let q=R18();if(!q)throw Error("Plugin zip cache is not enabled");return sQ(q,"marketplaces")}function SfK(){let q=R18();if(!q)throw Error("Plugin zip cache is not enabled");return sQ(q,"plugins")}async function E17(){if(VH6)return VH6;if(!HB8)HB8=(async()=>{let q=LfK(8).toString("hex"),K=sQ(PzY(),`claude-plugin-session-${q}`);return await X8().mkdir(K),VH6=K,N(`Created session plugin cache at ${K}`),K})();return HB8}async function CfK(){if(!VH6)return;try{await N17(VH6,{recursive:!0,force:!0}),N(`Cleaned up session plugin cache at ${VH6}`)}catch(q){N(`Failed to clean up session plugin cache: ${q}`)}finally{VH6=null,HB8=null}}async function JB8(q,K){let _=RfK(q);await X8().mkdir(_);let z=`.${WzY(q)}.tmp.${LfK(4).toString("hex")}`,Y=sQ(_,z);try{if(typeof K==="string")await V17(Y,K,{encoding:"utf-8"});else await V17(Y,K);await XzY(Y,q)}catch($){try{await N17(Y,{force:!0})}catch{}throw $}}async function DzY(q){let K={};await bfK(q,"",K,new Set);let{zipSync:z}=await Promise.resolve().then(() => (zi6(),fC1)),Y=z(K,{level:6});return N(`Created ZIP from ${q}: ${Object.keys(K).length} files, ${Y.length} bytes`),Y}async function bfK(q,K,_,z){let Y=K?sQ(q,K):q,$;try{$=await JzY(Y)}catch{return}try{let A=await EfK(Y,{bigint:!0});if(A.dev!==0n||A.ino!==0n){let O=`${A.dev}:${A.ino}`;if(z.has(O)){N(`Skipping symlink cycle at ${Y}`);return}z.add(O)}}catch{return}for(let A of $){if(A===".git")continue;let O=sQ(Y,A),w=K?`${K}/${A}`:A,j;try{j=await HzY(O)}catch{continue}if(j.isSymbolicLink())try{let H=await EfK(O);if(H.isDirectory())continue;j=H}catch{continue}if(j.isDirectory())await bfK(q,w,_,z);else if(j.isFile())try{let H=await MzY(O);_[w]=[new Uint8Array(H),{os:3,attrs:(j.mode&65535)<<16}]}catch(H){N(`Failed to read file for zip: ${w}: ${H}`)}}}async function L17(q,K){let _=await X8().readFileBytes(q),z=await Gk6(_),Y=Tk6(_);await X8().mkdir(K);for(let[$,A]of Object.entries(z)){if($.endsWith("/")){await X8().mkdir(sQ(K,$));continue}let O=sQ(K,$);await X8().mkdir(RfK(O)),await V17(O,A);let w=Y[$];if(w&&w&73)await jzY(O,w&511).catch(()=>{})}N(`Extracted ZIP to ${K}: ${Object.keys(z).length} entries`)}async function MB8(q,K){let _=await DzY(q);await JB8(K,_),await N17(q,{recursive:!0,force:!0})}function xfK(q){let K=q.replace(/[^a-zA-Z0-9\-_]/g,"-");return sQ("marketplaces",`${K}.json`)}function IfK(q){return["github","git","url","settings"].includes(q.source)}var VH6=null,HB8=null;var Oh6=y(()=>{_8();qk8();m8();e7();xn6()});import{readdir as fzY,rm as mfK,stat as ZzY,unlink as GzY,writeFile as TzY}from"fs/promises";import{join as XB8}from"path";function VzY(){Yk(),jB8(),jk8(),Nx8(),wo1().catch((q)=>H6(q)),Yk8(),S17(),pfK()}function Sz(){VzY(),tQ(),kx1(),Rx1(),$h6()}async function wh6(q){try{await TzY(h17(q),`${Date.now()}`,"utf-8")}catch(K){N(`Failed to write .orphaned_at: ${q}: ${K}`)}}async function R17(){if(Sb())return;try{let q=yzY();if(!q)return;let K=jh6(),_=Date.now();await Promise.all([...q].map((z)=>NzY(z)));for(let z of await PB8(K)){let Y=XB8(K,z);for(let $ of await PB8(Y)){let A=XB8(Y,$);for(let O of await PB8(A)){let w=XB8(A,O);if(q.has(w))continue;await EzY(w,_)}await ufK(A)}await ufK(Y)}}catch(q){N(`Plugin cache cleanup failed: ${q}`)}}function h17(q){return XB8(q,vzY)}async function NzY(q){let K=h17(q);try{await GzY(K)}catch(_){if(s1(_)==="ENOENT")return;N(`Failed to remove .orphaned_at: ${q}: ${_}`)}}function yzY(){try{let q=new Set,K=Mp();for(let _ of Object.values(K.plugins))for(let z of _)q.add(z.installPath);return q}catch(q){return N(`Failed to load installed plugins: ${q}`),null}}async function EzY(q,K){let _=h17(q),z;try{z=(await ZzY(_)).mtimeMs}catch(Y){if(s1(Y)==="ENOENT"){await wh6(q);return}N(`Failed to stat orphaned marker: ${q}: ${Y}`);return}if(K-z>kzY)try{await mfK(q,{recursive:!0,force:!0})}catch(Y){N(`Failed to delete orphaned version: ${q}: ${Y}`)}}async function ufK(q){if((await PB8(q)).length===0)try{await mfK(q,{recursive:!0,force:!0})}catch(K){N(`Failed to remove empty dir: ${q}: ${K}`)}}async function PB8(q){try{return(await fzY(q,{withFileTypes:!0})).filter((_)=>_.isDirectory()).map((_)=>_.name)}catch{return[]}}var vzY=".orphaned_at",kzY=604800000;var Jy=y(()=>{yA();TU();SP();yO6();lP();_8();y8();E8();pX();Hk8();L18();Nj6();WB8();bj();mu();Oh6()});function Hh6(q,K){let z=q.slice(0,2).map((A)=>{let O=A.reason||A.error||"unknown error";return K?`${A.name} (${O})`:A.name}).join(K?"; ":", "),Y=q.length-2,$=Y>0?` and ${Y} more`:"";return`${z}${$}`}function h18(q){switch(q.source){case"github":return q.repo;case"url":return q.url;case"git":return q.url;case"directory":return q.path;case"file":return q.path;case"settings":return`settings:${q.name}`;default:return"Unknown source"}}function eQ(q,K){return`${q}@${K}`}async function Xp(q){let K=[],_=[];for(let[z,Y]of Object.entries(q)){if(!NH6(Y.source))continue;let $=null;try{$=await r0(z)}catch(A){let O=A instanceof Error?A.message:String(A);_.push({name:z,error:O}),H6(x1(A))}K.push({name:z,config:Y,data:$})}return{marketplaces:K,failures:_}}function Jh6(q,K){if(q.length===0)return null;if(K>0)return{type:"warning",message:q.length===1?`Warning: Failed to load marketplace '${q[0].name}': ${q[0].error}`:`Warning: Failed to load ${q.length} marketplaces: ${LzY(q)}`};return{type:"error",message:`Failed to load all marketplaces. Errors: ${RzY(q)}`}}function LzY(q){return q.map((K)=>K.name).join(", ")}function RzY(q){return q.map((K)=>`${K.name}: ${K.error}`).join("; ")}function aK6(){let q=v1("policySettings");if(!q?.strictKnownMarketplaces)return null;return q.strictKnownMarketplaces}function C17(){let q=v1("policySettings");if(!q?.blockedMarketplaces)return null;return q.blockedMarketplaces}function gfK(){return v1("policySettings")?.pluginTrustMessage}function hzY(q,K){if(q.source!==K.source)return!1;switch(q.source){case"url":return q.url===K.url;case"github":return q.repo===K.repo&&(q.ref||void 0)===(K.ref||void 0)&&(q.path||void 0)===(K.path||void 0);case"git":return q.url===K.url&&(q.ref||void 0)===(K.ref||void 0)&&(q.path||void 0)===(K.path||void 0);case"npm":return q.package===K.package;case"file":return q.path===K.path;case"directory":return q.path===K.path;case"settings":return q.name===K.name&&QJ(q.plugins,K.plugins);default:return!1}}function b17(q){switch(q.source){case"github":return"github.com";case"git":{let K=q.url.match(/^[^@]+@([^:]+):/);if(K?.[1])return K[1];try{return new URL(q.url).hostname}catch{return null}}case"url":try{return new URL(q.url).hostname}catch{return null}default:return null}}function SzY(q,K){let _=b17(q);if(!_)return!1;try{return new RegExp(K.hostPattern).test(_)}catch{return H6(Error(`Invalid hostPattern regex: ${K.hostPattern}`)),!1}}function CzY(q,K){if(q.source!=="file"&&q.source!=="directory")return!1;try{return new RegExp(K.pathPattern).test(q.path)}catch{return H6(Error(`Invalid pathPattern regex: ${K.pathPattern}`)),!1}}function FfK(){let q=aK6();if(!q)return[];return q.filter((K)=>K.source==="hostPattern").map((K)=>K.hostPattern)}function BfK(q){let K=q.match(/^git@github\.com:([^/]+\/[^/]+?)(?:\.git)?$/);if(K&&K[1])return K[1];let _=q.match(/^https?:\/\/github\.com\/([^/]+\/[^/]+?)(?:\.git)?$/);if(_&&_[1])return _[1];return null}function oK6(q,K){if(!q)return!0;return(q||void 0)===(K||void 0)}function bzY(q,K){if(q.source===K.source)switch(q.source){case"github":{let _=K;if(q.repo!==_.repo)return!1;return oK6(_.ref,q.ref)&&oK6(_.path,q.path)}case"git":{let _=K;if(q.url!==_.url)return!1;return oK6(_.ref,q.ref)&&oK6(_.path,q.path)}case"url":return q.url===K.url;case"npm":return q.package===K.package;case"file":return q.path===K.path;case"directory":return q.path===K.path;case"settings":return q.name===K.name;default:return!1}if(q.source==="git"&&K.source==="github"){if(BfK(q.url)===K.repo)return oK6(K.ref,q.ref)&&oK6(K.path,q.path)}if(q.source==="github"&&K.source==="git"){if(BfK(K.url)===q.repo)return oK6(K.ref,q.ref)&&oK6(K.path,q.path)}return!1}function S18(q){let K=C17();if(K===null)return!1;return K.some((_)=>bzY(q,_))}function NH6(q){if(S18(q))return!1;let K=aK6();if(K===null)return!0;return K.some((_)=>{if(_.source==="hostPattern")return SzY(q,_);if(_.source==="pathPattern")return CzY(q,_);return hzY(q,_)})}function yH6(q){switch(q.source){case"github":return`github:${q.repo}${q.ref?`@${q.ref}`:""}`;case"url":return q.url;case"git":return`git:${q.url}${q.ref?`@${q.ref}`:""}`;case"npm":return`npm:${q.package}`;case"file":return`file:${q.path}`;case"directory":return`dir:${q.path}`;case"hostPattern":return`hostPattern:${q.hostPattern}`;case"pathPattern":return`pathPattern:${q.pathPattern}`;case"settings":return`settings:${q.name} (${q.plugins.length} ${A7(q.plugins.length,"plugin")})`;default:return"unknown source"}}async function UfK({configuredMarketplaceCount:q,failedMarketplaceCount:K}){if(!await mA6())return"git-not-installed";let z=aK6();if(z!==null){if(z.length===0)return"all-blocked-by-policy";if(q===0)return"policy-restricts-sources"}if(q===0)return"no-marketplaces-configured";if(K>0&&K===q)return"all-marketplaces-failed";return"all-plugins-installed"}var qd=y(()=>{Ee();y8();E8();U1();dG8();Nw()});import{chmod as xzY,mkdir as QfK,readFile as IzY,rename as uzY,rm as dfK,writeFile as cfK}from"fs/promises";import{dirname as mzY,join as x17,resolve as lfK,sep as pzY}from"path";async function C18(q,K){let _=lfK(K),z=lfK(q);if(z!==_&&!z.startsWith(_+pzY))return N(`fetchOfficialMarketplaceFromGcs: refusing path outside cache dir: ${q}`,{level:"error"}),null;await pb6();let Y=performance.now(),$="failed",A,O,w;try{let j=await $1.get(`${nfK}/latest`,{responseType:"text",timeout:1e4});if(A=String(j.data).trim(),!A)throw Error("latest pointer returned empty body");let H=x17(q,".gcs-sha");if(await IzY(H,"utf8").then((f)=>f.trim(),()=>null)===A)return $="noop",A;let M=await $1.get(`${nfK}/${A}.zip`,{responseType:"arraybuffer",timeout:60000}),X=Buffer.from(M.data);O=X.length;let P=await Gk6(X),W=Tk6(X),D=`${q}.staging`;await dfK(D,{recursive:!0,force:!0}),await QfK(D,{recursive:!0});for(let[f,G]of Object.entries(P)){if(!f.startsWith(ifK))continue;let Z=f.slice(ifK.length);if(!Z||Z.endsWith("/"))continue;let T=x17(D,Z);await QfK(mzY(T),{recursive:!0}),await cfK(T,G);let v=W[f];if(v&&v&73)await xzY(T,v&511).catch(()=>{})}return await cfK(x17(D,".gcs-sha"),A),await dfK(q,{recursive:!0,force:!0}),await uzY(D,q),$="updated",A}catch(j){return w=gzY(j),N(`Official marketplace GCS fetch failed: ${d6(j)}`,{level:"warn"}),null}finally{d("tengu_plugin_remote_fetch",{source:"marketplace_gcs",host:"downloads.claude.ai",is_official:!0,outcome:$,duration_ms:Math.round(performance.now()-Y),...O!==void 0&&{bytes:O},...A&&{sha:A},...w&&{error_kind:w}})}}function gzY(q){if($1.isAxiosError(q)){if(q.code==="ECONNABORTED")return"timeout";if(q.response)return`http_${q.response.status}`;return"network"}let K=s1(q);if(K&&/^E[A-Z]+$/.test(K)&&!K.startsWith("ERR_"))return BzY.has(K)?`fs_${K}`:"fs_other";if(typeof q?.code==="number")return"zip_parse";let _=d6(q);if(/unzip|invalid zip|central directory/i.test(_))return"zip_parse";if(/empty body/.test(_))return"empty_latest";return"other"}var nfK="https://downloads.claude.ai/claude-code-releases/plugins/claude-plugins-official",ifK="marketplaces/claude-plugins-official/",BzY;var I17=y(()=>{CK();v8();k8();_8();qk8();y8();BzY=new Set(["ENOSPC","EACCES","EPERM","EXDEV","EBUSY","ENOENT","ENOTDIR","EROFS","EMFILE","ENAMETOOLONG"])});import{writeFile as FzY}from"fs/promises";import{basename as rfK,dirname as u17,isAbsolute as sfK,join as dX,resolve as Kd,sep as fB8}from"path";function ZB8(){return dX(GX(),"known_marketplaces.json")}function sK6(){return dX(GX(),"marketplaces")}function zd(){r0.cache?.clear?.()}function tK6(){let q={},K={...uA6(),...N7().enabledPlugins??{}};for(let[_,z]of Object.entries(K))if(z&&Z4(_).marketplace===C2){q[C2]={source:Dv6,sourceIsFallback:!0};break}return{...q,...PK4(),...N7().extraKnownMarketplaces??{}}}function UzY(q){let K=["localSettings","projectSettings","userSettings"];for(let _ of K)if(v1(_)?.extraKnownMarketplaces?.[q])return _;return null}function I18(q,K,_="userSettings"){let Y={...(v1(_)??{}).extraKnownMarketplaces};Y[q]=K,W7(_,{extraKnownMarketplaces:Y})}async function r_(){let q=X8(),K=ZB8();try{let _=await q.readFile(K,{encoding:"utf-8"}),z=r8(_),Y=OD6().safeParse(z);if(!Y.success){let $=`Marketplace configuration file is corrupted: ${Y.error.issues.map((A)=>`${A.path.join(".")}: ${A.message}`).join(", ")}`;throw N($,{level:"error"}),new hT($,K,z)}return Y.data}catch(_){if(_7(_))return{};if(_ instanceof hT)throw _;let z=`Failed to load marketplace configuration: ${d6(_)}`;throw N(z,{level:"error"}),Error(z)}}async function eK6(){try{return await r_()}catch{return{}}}async function _d(q){let K=OD6().safeParse(q),_=ZB8();if(!K.success)throw new hT(`Invalid marketplace config: ${K.error.message}`,_,q);let z=X8(),Y=dX(_,"..");await z.mkdir(Y),$j(_,g6(K.data,null,2),{encoding:"utf-8",flush:!0})}async function GB8(){let q=w76();if(q.length===0)return!1;let K=await r_(),_=new Set,z=0;for(let Y of q){let $=await QzY(Y);if(!$)continue;for(let[A,O]of Object.entries($)){if(_.has(A))continue;let w=await dzY(Y,A);if(!w){N(`Seed marketplace '${A}' not found under ${Y}/marketplaces/, skipping`,{level:"warn"});continue}_.add(A);let j={source:O.source,installLocation:w,lastUpdated:O.lastUpdated,autoUpdate:!1};if(QJ(K[A],j))continue;K[A]=j,z++}}if(z>0)return await _d(K),N(`Synced ${z} marketplace(s) from seed dir(s)`),!0;return!1}async function QzY(q){let K=dX(q,"known_marketplaces.json");try{let _=await X8().readFile(K,{encoding:"utf-8"}),z=OD6().safeParse(r8(_));if(!z.success)return N(`Seed known_marketplaces.json invalid at ${q}: ${z.error.message}`,{level:"warn"}),null;return z.data}catch(_){if(!_7(_))N(`Failed to read seed known_marketplaces.json at ${q}: ${_}`,{level:"warn"});return null}}async function dzY(q,K){let _=dX(q,"marketplaces",K),z=dX(q,"marketplaces",`${K}.json`);for(let Y of[_,z])try{return await x18(Y),Y}catch{}return null}function u18(q){return w76().find((K)=>q===K||q.startsWith(K+fB8))}function ga(){let q=process.env.CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS;if(q){let K=parseInt(q,10);if(!isNaN(K)&&K>0)return K}return czY}async function lzY(q,K,_){N(`git pull: cwd=${q} ref=${K??"default"}`);let z={...process.env,...b18},Y=_?.disableCredentialHelper?["-c","credential.helper="]:[];if(K){let A=await S7(L7(),[...Y,"fetch","origin",K],{cwd:q,timeout:ga(),stdin:"ignore",env:z});if(A.code!==0)return DB8(A);let O=await S7(L7(),[...Y,"checkout",K],{cwd:q,timeout:ga(),stdin:"ignore",env:z});if(O.code!==0)return DB8(O);let w=await S7(L7(),[...Y,"pull","origin",K],{cwd:q,timeout:ga(),stdin:"ignore",env:z});if(w.code!==0)return DB8(w);return await ofK(q,Y,z,_?.sparsePaths),w}let $=await S7(L7(),[...Y,"pull","origin","HEAD"],{cwd:q,timeout:ga(),stdin:"ignore",env:z});if($.code!==0)return DB8($);return await ofK(q,Y,z,_?.sparsePaths),$}async function ofK(q,K,_,z){if(z&&z.length>0)return;if(!await X8().stat(dX(q,".gitmodules")).then(()=>!0,()=>!1))return;let $=await S7(L7(),["-c","core.sshCommand=ssh -o BatchMode=yes -o StrictHostKeyChecking=yes",...K,"submodule","update","--init","--recursive","--depth","1"],{cwd:q,timeout:ga(),stdin:"ignore",env:_});if($.code!==0)N(`git submodule update failed (non-fatal): ${$.stderr}`,{level:"warn"})}function DB8(q){if(q.code===0)return q;if(q.error?.includes("timed out")){let K=Math.round(ga()/1000);return{...q,stderr:`Git pull timed out after ${K}s. Try increasing the timeout via CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS environment variable. |