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

Function kJY

package/cli.js:6080–6084  ·  view source on GitHub ↗
(q)

Source from the content-addressed store, hash-verified

6078Need help? Common issues:
6079`+`· Permission denied → Run: gh auth refresh -h github.com -s repo
6080`+`· Not authorized → Ensure you have admin access to the repository
6081`+"· For manual setup → Visit: https://github.com/anthropics/claude-code-action";throw Error(`Failed to set API key secret: ${P.stderr||"Unknown error"}${W}`)}}if(!Y&&X){z();let P=`https://github.com/${q}/compare/${H}...${X}?quick_pull=1&title=${encodeURIComponent(uVK)}&body=${encodeURIComponent(pVK)}`;await m3(P)}d("tengu_setup_github_actions_completed",{skip_workflow:Y,has_api_key:!!K,auth_type:A,using_default_secret_name:_==="ANTHROPIC_API_KEY",selected_claude_workflow:$.includes("claude"),selected_claude_review_workflow:$.includes("claude-review"),...O}),b8((P)=>({...P,githubActionSetupCount:(P.githubActionSetupCount??0)+1}))}catch(w){if(!w||!(w instanceof Error)||!w.message.includes("Failed to"))d("tengu_setup_github_actions_failed",{reason:"unexpected_error",...O});if(w instanceof Error)H6(w);throw w}}var wNK=y(()=>{k8();V1();hH();XK();E8()});function jNK(q){let K=z6(8),{warnings:_,onContinue:z}=q,Y;if(K[0]===Symbol.for("react.memo_cache_sentinel"))Y={context:"Confirmation"},K[0]=Y;else Y=K[0];P1("confirm:yes",z,Y);let $;if(K[1]===Symbol.for("react.memo_cache_sentinel"))$=a0.default.createElement(u,{flexDirection:"column",marginBottom:1},a0.default.createElement(k,{bold:!0},t6.warning," Setup Warnings"),a0.default.createElement(k,{dimColor:!0},"We found some potential issues, but you can continue anyway")),K[1]=$;else $=K[1];let A;if(K[2]!==_)A=_.map(GJY),K[2]=_,K[3]=A;else A=K[3];let O;if(K[4]===Symbol.for("react.memo_cache_sentinel"))O=a0.default.createElement(u,{marginTop:1},a0.default.createElement(k,{bold:!0,color:"permission"},"Press Enter to continue anyway, or Ctrl+C to exit and fix issues")),K[4]=O;else O=K[4];let w;if(K[5]===Symbol.for("react.memo_cache_sentinel"))w=a0.default.createElement(u,{marginTop:1},a0.default.createElement(k,{dimColor:!0},"You can also try the manual setup steps if needed:"," ",a0.default.createElement(k,{color:"claude"},fd))),K[5]=w;else w=K[5];let j;if(K[6]!==A)j=a0.default.createElement(a0.default.Fragment,null,a0.default.createElement(u,{flexDirection:"column",borderStyle:"round",paddingX:1},$,A,O,w)),K[6]=A,K[7]=j;else j=K[7];return j}function GJY(q,K){return a0.default.createElement(u,{key:K,flexDirection:"column",marginBottom:1},a0.default.createElement(k,{color:"warning",bold:!0},q.title),a0.default.createElement(k,null,q.message),q.instructions.length>0&&a0.default.createElement(u,{flexDirection:"column",marginLeft:2,marginTop:1},q.instructions.map(TJY)))}function TJY(q,K){return a0.default.createElement(k,{key:K,dimColor:!0},"• ",q)}var a0;var HNK=y(()=>{q8();bq();s6();Oq();a0=O6(D6(),1)});var JNK={};T8(JNK,{call:()=>VJY});function kJY(q){let[K]=yw.useState(()=>zv()),[_,z]=yw.useState({...vJY,useExistingKey:!!K,selectedApiKeyOption:K?"existing":WJ()?"oauth":"new"});o5(),yw.default.useEffect(()=>{d("tengu_install_github_app_started",{})},[]);let Y=yw.useCallback(async()=>{let E=[];if((await m_("gh --version",{shell:!0,reject:!1})).exitCode!==0)E.push({title:"GitHub CLI not found",message:"GitHub CLI (gh) does not appear to be installed or accessible.",instructions:["Install GitHub CLI from https://cli.github.com/","macOS: brew install gh","Windows: winget install --id GitHub.cli","Linux: See installation instructions at https://github.com/cli/cli#installation"]});let R=await m_("gh auth status -a",{shell:!0,reject:!1});if(R.exitCode!==0)E.push({title:"GitHub CLI not authenticated",message:"GitHub CLI does not appear to be authenticated.",instructions:["Run: gh auth login","Follow the prompts to authenticate with GitHub","Or set up authentication using environment variables or other methods"]});else{let I=R.stdout.match(/Token scopes:.*$/m);if(I){let B=I[0],p=[];if(!B.includes("repo"))p.push("repo");if(!B.includes("workflow"))p.push("workflow");if(p.length>0){z((C)=>({...C,step:"error",error:`GitHub CLI is missing required permissions: ${p.join(", ")}.`,errorReason:"Missing required scopes",errorInstructions:[`Your GitHub CLI authentication is missing the "${p.join('" and "')}" ${A7(p.length,"scope")} needed to manage GitHub Actions and secrets.`,"","To fix this, run:"," gh auth refresh -h github.com -s repo,workflow","","This will add the necessary permissions to manage workflows and secrets."]}));return}}}let x=await Fe()??"";d("tengu_install_github_app_step_completed",{step:"check-gh"}),z((I)=>({...I,warnings:E,currentRepo:x,selectedRepoName:x,useCurrentRepo:!!x,step:E.length>0?"warnings":"choose-repo"}))},[]);yw.default.useEffect(()=>{if(_.step==="check-gh")Y()},[_.step,Y]);let $=yw.useCallback(async(E,S)=>{z((R)=>({...R,step:"creating",currentWorkflowInstallStep:0}));try{await ONK(_.selectedRepoName,E,S,()=>{z((R)=>({...R,currentWorkflowInstallStep:R.currentWorkflowInstallStep+1}))},_.workflowAction==="skip",_.selectedWorkflows,_.authType,{useCurrentRepo:_.useCurrentRepo,workflowExists:_.workflowExists,secretExists:_.secretExists}),d("tengu_install_github_app_step_completed",{step:"creating"}),z((R)=>({...R,step:"success"}))}catch(R){let x=R instanceof Error?R.message:"Failed to set up GitHub Actions";if(x.includes("workflow file already exists"))d("tengu_install_github_app_error",{reason:"workflow_file_exists"}),z((I)=>({...I,step:"error",error:"A Claude workflow file already exists in this repository.",errorReason:"Workflow file conflict",errorInstructions:["The file .github/workflows/claude.yml already exists","You can either:"," 1. Delete the existing file and run this command again"," 2. Update the existing file manually using the template from:",` ${fd}`]}));else d("tengu_install_github_app_error",{reason:"setup_github_actions_failed"}),z((I)=>({...I,step:"error",error:x,errorReason:"GitHub Actions setup failed",errorInstructions:[]}))}},[_.selectedRepoName,_.workflowAction,_.selectedWorkflows,_.useCurrentRepo,_.workflowExists,_.secretExists,_.authType]);async function A(){await m3("https://github.com/apps/claude")}async function O(E){try{let S=await a8("gh",["api",`repos/${E}`,"--jq",".permissions.admin"]);if(S.code===0)return{hasAccess:S.stdout.trim()==="true"};if(S.stderr.includes("404")||S.stderr.includes("Not Found"))return{hasAccess:!1,error:"repository_not_found"};return{hasAccess:!1}}catch{return{hasAccess:!1}}}async function w(E){return(await a8("gh",["api",`repos/${E}/contents/.github/workflows/claude.yml`,"--jq",".sha"])).code===0}async function j(){let E=await a8("gh",["secret","list","--app","actions","--repo",_.selectedRepoName]);if(E.code===0)if(E.stdout.split(`
6082`).some((x)=>{return/^ANTHROPIC_API_KEY\s+/.test(x)}))z((x)=>({...x,secretExists:!0,step:"check-existing-secret"}));else if(K)z((x)=>({...x,apiKeyOrOAuthToken:K,useExistingKey:!0})),await $(K,_.secretName);else z((x)=>({...x,step:"api-key"}));else if(K)z((S)=>({...S,apiKeyOrOAuthToken:K,useExistingKey:!0})),await $(K,_.secretName);else z((S)=>({...S,step:"api-key"}))}let H=async()=>{if(_.step==="warnings")d("tengu_install_github_app_step_completed",{step:"warnings"}),z((E)=>({...E,step:"install-app"})),setTimeout(A,0);else if(_.step==="choose-repo"){let E=_.useCurrentRepo?_.currentRepo:_.selectedRepoName;if(!E.trim())return;let S=[];if(E.includes("github.com")){let I=E.match(/github\.com[:/]([^/]+\/[^/]+)(\.git)?$/);if(!I)S.push({title:"Invalid GitHub URL format",message:"The repository URL format appears to be invalid.",instructions:["Use format: owner/repo or https://github.com/owner/repo","Example: anthropics/claude-cli"]});else E=I[1]?.replace(/\.git$/,"")||""}if(!E.includes("/"))S.push({title:"Repository format warning",message:'Repository should be in format "owner/repo"',instructions:["Use format: owner/repo","Example: anthropics/claude-cli"]});let R=await O(E);if(R.error==="repository_not_found")S.push({title:"Repository not found",message:`Repository ${E} was not found or you don't have access.`,instructions:[`Check that the repository name is correct: ${E}`,"Ensure you have access to this repository",'For private repositories, make sure your GitHub token has the "repo" scope',"You can add the repo scope with: gh auth refresh -h github.com -s repo,workflow"]});else if(!R.hasAccess)S.push({title:"Admin permissions required",message:`You might need admin permissions on ${E} to set up GitHub Actions.`,instructions:["Repository admins can install GitHub Apps and set secrets","Ask a repository admin to run this command if setup fails","Alternatively, you can use the manual setup instructions"]});let x=await w(E);if(S.length>0){let I=[..._.warnings,...S];z((B)=>({...B,selectedRepoName:E,workflowExists:x,warnings:I,step:"warnings"}))}else d("tengu_install_github_app_step_completed",{step:"choose-repo"}),z((I)=>({...I,selectedRepoName:E,workflowExists:x,step:"install-app"})),setTimeout(A,0)}else if(_.step==="install-app")if(d("tengu_install_github_app_step_completed",{step:"install-app"}),_.workflowExists)z((E)=>({...E,step:"check-existing-workflow"}));else z((E)=>({...E,step:"select-workflows"}));else if(_.step==="check-existing-workflow")return;else if(_.step==="select-workflows")return;else if(_.step==="check-existing-secret")if(d("tengu_install_github_app_step_completed",{step:"check-existing-secret"}),_.useExistingSecret)await $(null,_.secretName);else await $(_.apiKeyOrOAuthToken,_.secretName);else if(_.step==="api-key"){if(_.selectedApiKeyOption==="oauth")return;let E=_.selectedApiKeyOption==="existing"?K:_.apiKeyOrOAuthToken;if(!E){d("tengu_install_github_app_error",{reason:"api_key_missing"}),z((R)=>({...R,step:"error",error:"API key is required"}));return}z((R)=>({...R,apiKeyOrOAuthToken:E,useExistingKey:_.selectedApiKeyOption==="existing"}));let S=await a8("gh",["secret","list","--app","actions","--repo",_.selectedRepoName]);if(S.code===0)if(S.stdout.split(`
6083`).some((I)=>{return/^ANTHROPIC_API_KEY\s+/.test(I)}))d("tengu_install_github_app_step_completed",{step:"api-key"}),z((I)=>({...I,secretExists:!0,step:"check-existing-secret"}));else d("tengu_install_github_app_step_completed",{step:"api-key"}),await $(E,_.secretName);else d("tengu_install_github_app_step_completed",{step:"api-key"}),await $(E,_.secretName)}},J=(E)=>{z((S)=>({...S,selectedRepoName:E}))},M=(E)=>{z((S)=>({...S,apiKeyOrOAuthToken:E}))},X=(E)=>{z((S)=>({...S,selectedApiKeyOption:E}))},P=yw.useCallback(()=>{d("tengu_install_github_app_step_completed",{step:"api-key"}),z((E)=>({...E,step:"oauth-flow"}))},[]),W=yw.useCallback((E)=>{d("tengu_install_github_app_step_completed",{step:"oauth-flow"}),z((S)=>({...S,apiKeyOrOAuthToken:E,useExistingKey:!1,secretName:"CLAUDE_CODE_OAUTH_TOKEN",authType:"oauth_token"})),$(E,"CLAUDE_CODE_OAUTH_TOKEN")},[$]),D=yw.useCallback(()=>{z((E)=>({...E,step:"api-key"}))},[]),f=(E)=>{if(E&&!/^[a-zA-Z0-9_]+$/.test(E))return;z((S)=>({...S,secretName:E}))},G=(E)=>{z((S)=>({...S,useCurrentRepo:E,selectedRepoName:E?S.currentRepo:""}))},Z=(E)=>{z((S)=>({...S,useExistingKey:E}))},T=(E)=>{z((S)=>({...S,useExistingSecret:E,secretName:E?"ANTHROPIC_API_KEY":""}))},v=async(E)=>{if(E==="exit"){q.onDone("Installation cancelled by user");return}if(d("tengu_install_github_app_step_completed",{step:"check-existing-workflow"}),z((S)=>({...S,workflowAction:E})),E==="skip"||E==="update")if(K)await j();else z((S)=>({...S,step:"api-key"}))};function V(E){if(E.preventDefault(),_.step==="success")d("tengu_install_github_app_completed",{});q.onDone(_.step==="success"?"GitHub Actions setup complete!":_.error?`Couldn't install GitHub App: ${_.error}
6084For manual setup instructions, see: ${fd}`:`GitHub App installation failed
6085For manual setup instructions, see: ${fd}`)}switch(_.step){case"check-gh":return yw.default.createElement(cVK,null);case"warnings":return yw.default.createElement(jNK,{warnings:_.warnings,onContinue:H});case"choose-repo":return yw.default.createElement(nVK,{currentRepo:_.currentRepo,useCurrentRepo:_.useCurrentRepo,repoUrl:_.selectedRepoName,onRepoUrlChange:J,onToggleUseCurrentRepo:G,onSubmit:H});case"install-app":return yw.default.createElement(qNK,{repoUrl:_.selectedRepoName,onSubmit:H});case"check-existing-workflow":return yw.default.createElement(tVK,{repoName:_.selectedRepoName,onSelectAction:v});case"check-existing-secret":return yw.default.createElement(UVK,{useExistingSecret:_.useExistingSecret,secretName:_.secretName,onToggleUseExistingSecret:T,onSecretNameChange:f,onSubmit:H});case"api-key":return yw.default.createElement(gVK,{existingApiKey:K,useExistingKey:_.useExistingKey,apiKeyOrOAuthToken:_.apiKeyOrOAuthToken,onApiKeyChange:M,onToggleUseExistingKey:Z,onSubmit:H,onCreateOAuthToken:WJ()?P:void 0,selectedOption:_.selectedApiKeyOption,onSelectOption:X});case"creating":return yw.default.createElement(rVK,{currentWorkflowInstallStep:_.currentWorkflowInstallStep,secretExists:_.secretExists,useExistingSecret:_.useExistingSecret,secretName:_.secretName,skipWorkflow:_.workflowAction==="skip",selectedWorkflows:_.selectedWorkflows});case"success":return yw.default.createElement(u,{tabIndex:0,autoFocus:!0,onKeyDown:V},yw.default.createElement($NK,{secretExists:_.secretExists,useExistingSecret:_.useExistingSecret,secretName:_.secretName,skipWorkflow:_.workflowAction==="skip"}));case"error":return yw.default.createElement(u,{tabIndex:0,autoFocus:!0,onKeyDown:V},yw.default.createElement(aVK,{error:_.error,errorReason:_.errorReason,errorInstructions:_.errorInstructions}));case"select-workflows":return yw.default.createElement(xVK,{defaultSelections:_.selectedWorkflows,onSubmit:(E)=>{if(d("tengu_install_github_app_step_completed",{step:"select-workflows"}),z((S)=>({...S,selectedWorkflows:E})),K)j();else z((S)=>({...S,step:"api-key"}))}});case"oauth-flow":return yw.default.createElement(zNK,{onSuccess:W,onCancel:D})}}async function VJY(q){return yw.default.createElement(kJY,{onDone:q})}var yw,vJY;var MNK=y(()=>{Df();k8();IVK();z2();s6();G7();hH();XK();E5();FVK();QVK();lVK();iVK();oVK();sVK();eVK();KNK();YNK();ANK();wNK();HNK();yw=O6(D6(),1),vJY={step:"check-gh",selectedRepoName:"",currentRepo:"",useCurrentRepo:!1,apiKeyOrOAuthToken:"",useExistingKey:!0,currentWorkflowInstallStep:0,warnings:[],secretExists:!1,secretName:"ANTHROPIC_API_KEY",useExistingSecret:!0,workflowExists:!1,selectedWorkflows:["claude","claude-review"],selectedApiKeyOption:"new",authType:"api_key"}});var NJY,XNK;var PNK=y(()=>{m8();NJY={type:"local-jsx",name:"install-github-app",description:"Set up Claude GitHub Actions for a repository",availability:["claude-ai","console"],isEnabled:()=>!i6(process.env.DISABLE_INSTALL_GITHUB_APP_COMMAND),load:()=>Promise.resolve().then(() => (MNK(),JNK))},XNK=NJY});var DNK={};T8(DNK,{call:()=>yJY});async function yJY(){if(d("tengu_install_slack_app_clicked",{}),b8((K)=>({...K,slackAppInstallCount:(K.slackAppInstallCount??0)+1})),await m3(WNK))return{type:"text",value:"Opening Slack app installation page in browser…"};else return{type:"text",value:`Couldn't open browser. Visit: ${WNK}`}}var WNK="https://slack.com/marketplace/A08SF47R6P4-claude";var fNK=y(()=>{k8();hH();V1()});var EJY,ZNK;var GNK=y(()=>{EJY={type:"local",name:"install-slack-app",description:"Install the Claude Slack app",availability:["claude-ai"],supportsNonInteractive:!1,load:()=>Promise.resolve().then(() => (fNK(),DNK))},ZNK=EJY});var TNK;var vNK=y(()=>{TNK={isEnabled:()=>!1,isHidden:!0,name:"stub"}});function v47({agentServer:q,onCancel:K,onComplete:_}){let[z]=Aq(),[Y,$]=J5.useState(!1),[A,O]=J5.useState(null),[w,j]=J5.useState(null),H=J5.useRef(null);J5.useEffect(()=>()=>H.current?.abort(),[]);let J=J5.useCallback(()=>{if(Y)H.current?.abort(),H.current=null,$(!1),j(null)},[Y]);P1("confirm:no",J,{context:"Confirmation",isActive:Y});let M=J5.useCallback(async()=>{if(!q.needsAuth||!q.url)return;$(!0),O(null);let W=new AbortController;H.current=W;try{let D={type:q.transport,url:q.url};await pq6(q.name,D,j,W.signal),_?.(`Authentication successful for ${q.name}. The server will connect when the agent runs.`)}catch(D){if(D instanceof Error&&!(D instanceof hU))O(D.message)}finally{$(!1),H.current=null}},[q,_]),X=Tf(String(q.name));if(Y)return J5.default.createElement(u,{flexDirection:"column",gap:1,padding:1},J5.default.createElement(k,{color:"claude"},"Authenticating with ",q.name,"…"),J5.default.createElement(u,null,J5.default.createElement(IK,null),J5.default.createElement(k,null," A browser window will open for authentication")),w&&J5.default.createElement(u,{flexDirection:"column"},J5.default.createElement(k,{dimColor:!0},"If your browser doesn't open automatically, copy this URL manually:"),J5.default.createElement(hq,{url:w})),J5.default.createElement(u,{marginLeft:3},J5.default.createElement(k,{dimColor:!0},"Return here after authenticating in your browser."," ",J5.default.createElement(W1,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"go back"}))));let P=[];if(q.needsAuth)P.push({label:q.isAuthenticated?"Re-authenticate":"Authenticate",value:"auth"});return P.push({label:"Back",value:"back"}),J5.default.createElement(R1,{title:`${X} MCP Server`,subtitle:"agent-only",onCancel:K,inputGuide:(W)=>W.pending?J5.default.createElement(k,null,"Press ",W.keyName," again to exit"):J5.default.createElement(I1,null,J5.default.createElement(t8,{shortcut:"↑↓",action:"navigate"}),J5.default.createElement(t8,{shortcut:"Enter",action:"confirm"}),J5.default.createElement(W1,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"go back"}))},J5.default.createElement(u,{flexDirection:"column",gap:0},J5.default.createElement(u,null,J5.default.createElement(k,{bold:!0},"Type: "),J5.default.createElement(k,{dimColor:!0},q.transport)),q.url&&J5.default.createElement(u,null,J5.default.createElement(k,{bold:!0},"URL: "),J5.default.createElement(k,{dimColor:!0},q.url)),q.command&&J5.default.createElement(u,null,J5.default.createElement(k,{bold:!0},"Command: "),J5.default.createElement(k,{dimColor:!0},q.command)),J5.default.createElement(u,null,J5.default.createElement(k,{bold:!0},"Used by: "),J5.default.createElement(k,{dimColor:!0},q.sourceAgents.join(", "))),J5.default.createElement(u,{marginTop:1},J5.default.createElement(k,{bold:!0},"Status: "),J5.default.createElement(k,null,h7("inactive",z)(t6.radioOff)," not connected (agent-only)")),q.needsAuth&&J5.default.createElement(u,null,J5.default.createElement(k,{bold:!0},"Auth: "),q.isAuthenticated?J5.default.createElement(k,null,h7("success",z)(t6.tick)," authenticated"):J5.default.createElement(k,null,h7("warning",z)(t6.triangleUpOutline)," may need authentication"))),J5.default.createElement(u,null,J5.default.createElement(k,{dimColor:!0},"This server connects only when running the agent.")),A&&J5.default.createElement(u,null,J5.default.createElement(k,{color:"error"},"Error: ",A)),J5.default.createElement(u,null,J5.default.createElement(H1,{options:P,onChange:async(W)=>{switch(W){case"auth":await M();break;case"back":K();break}},onCancel:K})))}var J5;var k47=y(()=>{bq();s6();Oq();or();a5();d_();QK();e4();rK();Q2();J5=O6(D6(),1)});function VNK(q){switch(q){case"project":return{label:"Project MCPs",path:xG(q)};case"user":return{label:"User MCPs",path:xG(q)};case"local":return{label:"Local MCPs",path:xG(q)};case"enterprise":return{label:"Enterprise MCPs"};case"dynamic":return{label:"Built-in MCPs",path:"always available"};default:return{label:q}}}function LJY(q){let K=new Map;for(let _ of q){let z=_.scope;if(!K.has(z))K.set(z,[]);K.get(z).push(_)}for(let[,_]of K)_.sort((z,Y)=>z.name.localeCompare(Y.name));return K}function V47(q){let K=z6(78),{servers:_,agentServers:z,onSelectServer:Y,onSelectAgentServer:$,onComplete:A}=q,O;if(K[0]!==z)O=z===void 0?[]:z,K[0]=z,K[1]=O;else O=K[1];let w=O,[j]=Aq(),[H,J]=N9.useState(0),M;if(K[2]!==_){let y6=_.filter(xJY);M=LJY(y6),K[2]=_,K[3]=M}else M=K[3];let X=M,P;if(K[4]!==_)P=_.filter(bJY).sort(CJY),K[4]=_,K[5]=P;else P=K[5];let W=P,D;if(K[6]!==X)D=(X.get("dynamic")??[]).sort(SJY),K[6]=X,K[7]=D;else D=K[7];let f=D,G;if(K[8]===Symbol.for("react.memo_cache_sentinel"))G=VNK("dynamic"),K[8]=G;else G=K[8];let Z=G,T;if(K[9]!==w||K[10]!==W||K[11]!==f||K[12]!==X){T=[];for(let y6 of kNK){let T6=X.get(y6)??[];for(let n6 of T6)T.push({type:"server",server:n6})}for(let y6 of W)T.push({type:"server",server:y6});for(let y6 of w)T.push({type:"agent-server",agentServer:y6});for(let y6 of f)T.push({type:"server",server:y6});K[9]=w,K[10]=W,K[11]=f,K[12]=X,K[13]=T}else T=K[13];let v=T,V;if(K[14]!==A)V=()=>{A("MCP dialog dismissed",{display:"system"})},K[14]=A,K[15]=V;else V=K[15];let E=V,S;if(K[16]!==$||K[17]!==Y||K[18]!==v||K[19]!==H)S=()=>{let y6=v[H];if(!y6)return;if(y6.type==="server")Y(y6.server);else if(y6.type==="agent-server"&&$)$(y6.agentServer)},K[16]=$,K[17]=Y,K[18]=v,K[19]=H,K[20]=S;else S=K[20];let R=S,x,I;if(K[21]!==v)I=()=>J((y6)=>y6===0?v.length-1:y6-1),x=()=>J((y6)=>y6===v.length-1?0:y6+1),K[21]=v,K[22]=x,K[23]=I;else x=K[22],I=K[23];let B;if(K[24]!==E||K[25]!==R||K[26]!==x||K[27]!==I)B={"confirm:previous":I,"confirm:next":x,"confirm:yes":R,"confirm:no":E},K[24]=E,K[25]=R,K[26]=x,K[27]=I,K[28]=B;else B=K[28];let p;if(K[29]===Symbol.for("react.memo_cache_sentinel"))p={context:"Confirmation"},K[29]=p;else p=K[29];o7(B,p);let C;if(K[30]!==v)C=(y6)=>v.findIndex((T6)=>T6.type==="server"&&T6.server===y6),K[30]=v,K[31]=C;else C=K[31];let g=C,F;if(K[32]!==v)F=(y6)=>v.findIndex((T6)=>T6.type==="agent-server"&&T6.agentServer===y6),K[32]=v,K[33]=F;else F=K[33];let U=F,c;if(K[34]===Symbol.for("react.memo_cache_sentinel"))c=ST(),K[34]=c;else c=K[34];let K6=c,t;if(K[35]!==_)t=_.some(hJY),K[35]=_,K[36]=t;else t=K[36];let q6=t;if(_.length===0&&w.length===0)return null;let e;if(K[37]!==g||K[38]!==H||K[39]!==j)e=(y6)=>{let T6=g(y6),n6=H===T6,o6,I6;if(y6.client.type==="disabled")o6=h7("inactive",j)(t6.radioOff),I6="disabled";else if(y6.client.type==="connected")o6=h7("success",j)(t6.tick),I6="connected";else if(y6.client.type==="pending"){o6=h7("inactive",j)(t6.radioOff);let{reconnectAttempt:C6,maxReconnectAttempts:l6}=y6.client;if(C6&&l6)I6=`reconnecting (${C6}/${l6})…`;else I6="connecting…"}else if(y6.client.type==="needs-auth")o6=h7("warning",j)(t6.triangleUpOutline),I6="needs authentication";else o6=h7("error",j)(t6.cross),I6="failed";return N9.default.createElement(u,{key:`${y6.name}-${T6}`},N9.default.createElement(k,{color:n6?"suggestion":void 0},n6?`${t6.pointer} `:" "),N9.default.createElement(k,{color:n6?"suggestion":void 0},y6.name),N9.default.createElement(k,{dimColor:!n6}," · ",o6," "),N9.default.createElement(k,{dimColor:!n6},I6))},K[37]=g,K[38]=H,K[39]=j,K[40]=e;else e=K[40];let i=e,$6;if(K[41]!==U||K[42]!==H||K[43]!==j)$6=(y6)=>{let T6=U(y6),n6=H===T6,o6=y6.needsAuth?h7("warning",j)(t6.triangleUpOutline):h7("inactive",j)(t6.radioOff),I6=y6.needsAuth?"may need auth":"agent-only";return N9.default.createElement(u,{key:`agent-${y6.name}-${T6}`},N9.default.createElement(k,{color:n6?"suggestion":void 0},n6?`${t6.pointer} `:" "),N9.default.createElement(k,{color:n6?"suggestion":void 0},y6.name),N9.default.createElement(k,{dimColor:!n6}," · ",o6," "),N9.default.createElement(k,{dimColor:!n6},I6))},K[41]=U,K[42]=H,K[43]=j,K[44]=$6;else $6=K[44];let M6=$6,j6=_.length+w.length,G6;if(K[45]===Symbol.for("react.memo_cache_sentinel"))G6=N9.default.createElement(Ug8,null),K[45]=G6;else G6=K[45];let w6;if(K[46]!==j6)w6=A7(j6,"server"),K[46]=j6,K[47]=w6;else w6=K[47];let o=`${j6} ${w6}`,s;if(K[48]!==i||K[49]!==X)s=kNK.map((y6)=>{let T6=X.get(y6);if(!T6||T6.length===0)return null;let n6=VNK(y6);return N9.default.createElement(u,{key:y6,flexDirection:"column",marginBottom:1},N9.default.createElement(u,{paddingLeft:2},N9.default.createElement(k,{bold:!0},n6.label),n6.path&&N9.default.createElement(k,{dimColor:!0}," (",n6.path,")")),T6.map((o6)=>i(o6)))}),K[48]=i,K[49]=X,K[50]=s;else s=K[50];let a;if(K[51]!==W||K[52]!==i)a=W.length>0&&N9.default.createElement(u,{flexDirection:"column",marginBottom:1},N9.default.createElement(u,{paddingLeft:2},N9.default.createElement(k,{bold:!0},"claude.ai")),W.map((y6)=>i(y6))),K[51]=W,K[52]=i,K[53]=a;else a=K[53];let n;if(K[54]!==w||K[55]!==M6)n=w.length>0&&N9.default.createElement(u,{flexDirection:"column",marginBottom:1},N9.default.createElement(u,{paddingLeft:2},N9.default.createElement(k,{bold:!0},"Agent MCPs")),[...new Set(w.flatMap(RJY))].map((y6)=>N9.default.createElement(u,{key:y6,flexDirection:"column",marginTop:1},N9.default.createElement(u,{paddingLeft:2},N9.default.createElement(k,{dimColor:!0},"@",y6)),w.filter((T6)=>T6.sourceAgents.includes(y6)).map((T6)=>M6(T6))))),K[54]=w,K[55]=M6,K[56]=n;else n=K[56];let l;if(K[57]!==f||K[58]!==i)l=f.length>0&&N9.default.createElement(u,{flexDirection:"column",marginBottom:1},N9.default.createElement(u,{paddingLeft:2},N9.default.createElement(k,{bold:!0},Z.label),Z.path&&N9.default.createElement(k,{dimColor:!0}," (",Z.path,")")),f.map((y6)=>i(y6))),K[57]=f,K[58]=i,K[59]=l;else l=K[59];let A6;if(K[60]!==q6)A6=q6&&N9.default.createElement(k,{dimColor:!0},K6?"※ Error logs shown inline with --debug":"※ Run claude --debug to see error logs"),K[60]=q6,K[61]=A6;else A6=K[61];let J6;if(K[62]===Symbol.for("react.memo_cache_sentinel"))J6=N9.default.createElement(k,{dimColor:!0},N9.default.createElement(hq,{url:"https://code.claude.com/docs/en/mcp"},"https://code.claude.com/docs/en/mcp")," ","for help"),K[62]=J6;else J6=K[62];let X6;if(K[63]!==A6)X6=N9.default.createElement(u,{flexDirection:"column"},A6,J6),K[63]=A6,K[64]=X6;else X6=K[64];let f6;if(K[65]!==s||K[66]!==a||K[67]!==n||K[68]!==l||K[69]!==X6)f6=N9.default.createElement(u,{flexDirection:"column"},s,a,n,l,X6),K[65]=s,K[66]=a,K[67]=n,K[68]=l,K[69]=X6,K[70]=f6;else f6=K[70];let N6;if(K[71]!==E||K[72]!==o||K[73]!==f6)N6=N9.default.createElement(R1,{title:"Manage MCP servers",subtitle:o,onCancel:E,hideInputGuide:!0},f6),K[71]=E,K[72]=o,K[73]=f6,K[74]=N6;else N6=K[74];let Z6;if(K[75]===Symbol.for("react.memo_cache_sentinel"))Z6=N9.default.createElement(u,{paddingX:1},N9.default.createElement(k,{dimColor:!0,italic:!0},N9.default.createElement(I1,null,N9.default.createElement(t8,{shortcut:"↑↓",action:"navigate"}),N9.default.createElement(t8,{shortcut:"Enter",action:"confirm"}),N9.default.createElement(W1,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"cancel"})))),K[75]=Z6;else Z6=K[75];let V6;if(K[76]!==N6)V6=N9.default.createElement(u,{flexDirection:"column"},G6,N6,Z6),K[76]=N6,K[77]=V6;else V6=K[77];return V6}function RJY(q){return q.sourceAgents}function hJY(q){return q.client.type==="failed"}function SJY(q,K){return q.name.localeCompare(K.name)}function CJY(q,K){return q.name.localeCompare(K.name)}function bJY(q){return q.client.config.type==="claudeai-proxy"}function xJY(q){return q.client.config.type!=="claudeai-proxy"}var N9,kNK;var N47=y(()=>{q8();bq();s6();Oq();NJ();_8();a5();QK();e4();rK();A47();N9=O6(D6(),1),kNK=["project","local","user","enterprise"]});function IJY(q,K){return K.length<2?q:Ct(q,GE8(K,0,-1))}var NNK;var yNK=y(()=>{Sb6();dB1();NNK=IJY});function pJY(q,K){K=iR(K,q);var _=-1,z=K.length;if(!z)return!0;var Y=q==null||typeof q!=="object"&&typeof q!=="function";while(++_<z){var $=K[_];if(typeof $!=="string")continue;if($==="__proto__"&&!mJY.call(q,"__proto__"))return!1;if($==="constructor"&&_+1<z&&typeof K[_+1]==="string"&&K[_+1]==="prototype"){if(Y&&_===0)continue;return!1}}var A=NNK(q,K);return A==null||delete A[rR(tS(K))]}var uJY,mJY,ENK;var LNK=y(()=>{g36();cl6();yNK();F36();uJY=Object.prototype,mJY=uJY.hasOwnProperty;ENK=pJY});function BJY(q){return IW6(q)?void 0:q}var RNK;var hNK=y(()=>{E$8();RNK=BJY});function gJY(q){return MA(q)||Dc(q)||!!(SNK&&q&&q[SNK])}var SNK,CNK;var bNK=y(()=>{I36();kb6();yT();SNK=WW?WW.isConcatSpreadable:void 0;CNK=gJY});function xNK(q,K,_,z,Y){var $=-1,A=q.length;_||(_=CNK),Y||(Y=[]);while(++$<A){var O=q[$];if(K>0&&_(O))if(K>1)xNK(O,K-1,_,z,Y);else DX6(Y,O);else if(!z)Y[Y.length]=O}return Y}var INK;var uNK=y(()=>{T58();bNK();INK=xNK});function FJY(q){var K=q==null?0:q.length;return K?INK(q,1):[]}var mNK;var pNK=y(()=>{uNK();mNK=FJY});function UJY(q){return R$8(L$8(q,void 0,mNK),q+"")}var BNK;var gNK=y(()=>{pNK();A41();O41();BNK=UJY});var QJY=1,dJY=2,cJY=4,lJY,W56;var y47=y(()=>{hb6();Mo8();LNK();g36();w96();hNK();gNK();z98();lJY=BNK(function(q,K){var _={};if(q==null)return _;var z=!1;if(K=St(K,function($){return $=iR($,q),z||(z=$.length>1),$}),qh(q,KP6(q),_),z)_=w98(_,QJY|dJY|cJY,RNK);var Y=K.length;while(Y--)ENK(_,K[Y]);return _}),W56=lJY});var FNK={};T8(FNK,{isChannelsEnabled:()=>QH6,isChannelAllowlisted:()=>E47,getChannelAllowlist:()=>sg8});function sg8(){let q=g8("tengu_harbor_ledger",[]),K=nJY().safeParse(q);return K.success?K.data:[]}function QH6(){return g8("tengu_harbor",!1)}function E47(q){if(!q)return!1;let{name:K,marketplace:_}=Z4(q);if(!_)return!1;return sg8().some((z)=>z.plugin===K&&z.marketplace===_)}var nJY;var y78=y(()=>{x7();hP();o1();nJY=B6(()=>L.array(L.object({marketplace:L.string(),plugin:L.string()})))});function L78(q,K,_){let z=Object.entries(_??{}).filter(([Y])=>iJY.test(Y)).map(([Y,$])=>` ${Y}="${e9($)}"`).join("");return`<${RW6} source="${e9(q)}"${z}>
6086${K}
6087</${RW6}>`}function R47(q,K){if((q==="team"||q==="enterprise")&&K)return{entries:K,source:"org"};return{entries:sg8(),source:"ledger"}}function dH6(q,K){let _=q.split(":");return K.find((z)=>z.kind==="server"?q===z.name:_[0]==="plugin"&&_[1]===z.name)}function R78(q,K,_){if(!K?.experimental?.["claude/channel"])return{action:"skip",kind:"capability",reason:"server did not declare claude/channel capability"};if(!QH6())return{action:"skip",kind:"disabled",reason:"channels feature is not currently available"};if(!Kq()?.accessToken)return{action:"skip",kind:"auth",reason:"channels requires claude.ai authentication (run /login)"};let z=yK(),Y=z==="team"||z==="enterprise",$=Y?v1("policySettings"):void 0;if(Y&&$?.channelsEnabled!==!0)return{action:"skip",kind:"policy",reason:"channels not enabled by org policy (set channelsEnabled: true in managed settings)"};let A=dH6(q,eH());if(!A)return{action:"skip",kind:"session",reason:`server ${q} not in --channels list for this session`};if(A.kind==="plugin"){let O=_?Z4(_).marketplace:void 0;if(O!==A.marketplace)return{action:"skip",kind:"marketplace",reason:`you asked for plugin:${A.name}@${A.marketplace} but the installed ${A.name} plugin is from ${O??"an unknown source"}`};if(!A.dev){let{entries:w,source:j}=R47(z,$?.allowedChannelPlugins);if(!w.some((H)=>H.plugin===A.name&&H.marketplace===A.marketplace))return{action:"skip",kind:"allowlist",reason:j==="org"?`plugin ${A.name}@${A.marketplace} is not on your org's approved channels list (set allowedChannelPlugins in managed settings)`:`plugin ${A.name}@${A.marketplace} is not on the approved channels allowlist (use --dangerously-load-development-channels for local dev)`}}}else if(!A.dev)return{action:"skip",kind:"allowlist",reason:`server ${A.name} is not on the approved channels allowlist (use --dangerously-load-development-channels for local dev)`};return{action:"register"}}var E78,L47="notifications/claude/channel/permission",UNK,QNK="notifications/claude/channel/permission_request",iJY;var h78=y(()=>{x7();v8();RY();G7();hP();U1();y78();E78=B6(()=>L.object({method:L.literal("notifications/claude/channel"),params:L.object({content:L.string(),meta:L.record(L.string(),L.string()).optional()})})),UNK=B6(()=>L.object({method:L.literal(L47),params:L.object({request_id:L.string(),behavior:L.enum(["allow","deny"])})})),iJY=/^[a-zA-Z_][a-zA-Z0-9_]*$/});function cNK(){return g8("tengu_harbor_permissions",!1)}function dNK(q){let K=2166136261;for(let z=0;z<q.length;z++)K^=q.charCodeAt(z),K=Math.imul(K,16777619);K=K>>>0;let _="";for(let z=0;z<5;z++)_+=rJY[K%25],K=Math.floor(K/25);return _}function lNK(q){let K=dNK(q);for(let _=0;_<10;_++){if(!oJY.some((z)=>K.includes(z)))return K;K=dNK(`${q}:${_}`)}return K}function nNK(q){try{let K=g6(q);return K.length>200?K.slice(0,200)+"…":K}catch{return"(unserializable)"}}function iNK(q,K){return q.filter((_)=>_.type==="connected"&&K(_.name)&&_.capabilities?.experimental?.["claude/channel"]!==void 0&&_.capabilities?.experimental?.["claude/channel/permission"]!==void 0)}function rNK(){let q=new Map;return{onResponse(K,_){let z=K.toLowerCase();return q.set(z,_),()=>{q.delete(z)}},resolve(K,_,z){let Y=K.toLowerCase(),$=q.get(Y);if(!$)return!1;return q.delete(Y),$({behavior:_,fromServer:z}),!0}}}var rJY="abcdefghijkmnopqrstuvwxyz",oJY;var h47=y(()=>{l8();o1();oJY=["fuck","shit","cunt","cock","dick","twat","piss","crap","bitch","whore","ass","tit","cum","fag","dyke","nig","kike","rape","nazi","damn","poo","pee","wank","anus"]});function oNK(q){let K="plugin"in q?q.plugin:"no-plugin";return`${q.type}:${q.source}:${K}`}function aNK(q,K){if(K.length===0)return;q((_)=>{let z=new Set(_.plugins.errors.map(($)=>oNK($))),Y=K.filter(($)=>!z.has(oNK($)));if(Y.length===0)return _;return{..._,plugins:{..._.plugins,errors:[..._.plugins.errors,...Y]}}})}function sNK(q,K=!1){let _=jz(),z=P8((Z)=>Z.authVersion),Y=P8((Z)=>Z.mcp.pluginReconnectKey),$=s7(),A=s0.useRef(new Map),O=s0.useRef(new Set),w=s0.useRef(null);if(w.current===null)w.current=rNK();s0.useEffect(()=>{{let Z=w.current;if(!Z)return;if(!cNK())return;return $((T)=>{if(T.channelPermissionCallbacks===Z)return T;return{...T,channelPermissionCallbacks:Z}}),()=>{$((T)=>{if(T.channelPermissionCallbacks===void 0)return T;return{...T,channelPermissionCallbacks:void 0}})}}},[$]);let{addNotification:j}=PK(),H=16,J=s0.useRef([]),M=s0.useRef(null),X=s0.useCallback(()=>{M.current=null;let Z=J.current;if(Z.length===0)return;J.current=[],$((T)=>{let v=T.mcp;for(let V of Z){let{tools:E,commands:S,resources:R,...x}=V,I=x.type==="disabled"||x.type==="failed"?E??[]:E,B=x.type==="disabled"||x.type==="failed"?S??[]:S,p=x.type==="disabled"||x.type==="failed"?R??[]:R,C=kE(x.name),F=v.clients.findIndex((t)=>t.name===x.name)===-1?[...v.clients,x]:v.clients.map((t)=>t.name===x.name?x:t),U=I===void 0?v.tools:[...D0(v.tools,(t)=>t.name?.startsWith(C)),...I],c=B===void 0?v.commands:[...D0(v.commands,(t)=>LU(t,x.name)),...B],K6=p===void 0?v.resources:{...v.resources,...p.length>0?{[x.name]:p}:W56(v.resources,x.name)};v={...v,clients:F,tools:U,commands:c,resources:K6}}return{...T,mcp:v}})},[$]),P=s0.useCallback((Z)=>{if(J.current.push(Z),M.current===null)M.current=setTimeout(X,H)},[X]),W=s0.useCallback(({client:Z,tools:T,commands:v,resources:V})=>{switch(P({...Z,tools:T,commands:v,resources:V}),Z.type){case"connected":{AS4(Z.client,Z.name,$),Z.client.onclose=()=>{let E=Z.config.type??"stdio";if(pG(Z.name,Z.config).catch(()=>{N(`Failed to invalidate the server cache: ${Z.name}`)}),bG(Z.name)){C8(Z.name,"Server is disabled, skipping automatic reconnection");return}if(E!=="stdio"&&E!=="sdk"){let S=eJY(E);C8(Z.name,`${S} transport closed/disconnected, attempting automatic reconnection`);let R=A.current.get(Z.name);if(R)clearTimeout(R),A.current.delete(Z.name);(async()=>{for(let I=1;I<=ch6;I++){if(bG(Z.name)){C8(Z.name,"Server disabled during reconnection, stopping retry"),A.current.delete(Z.name);return}P({...Z,type:"pending",reconnectAttempt:I,maxReconnectAttempts:ch6});let B=Date.now();try{let C=await qm(Z.name,Z.config),g=Date.now()-B;if(C.client.type==="connected"){C8(Z.name,`${S} reconnection successful after ${g}ms (attempt ${I})`),A.current.delete(Z.name),W(C);return}if(C8(Z.name,`${S} reconnection attempt ${I} completed with status: ${C.client.type}`),I===ch6){C8(Z.name,`Max reconnection attempts (${ch6}) reached, giving up`),A.current.delete(Z.name),W(C);return}}catch(C){let g=Date.now()-B;if(Qz(Z.name,`${S} reconnection attempt ${I} failed after ${g}ms: ${C}`),I===ch6){C8(Z.name,`Max reconnection attempts (${ch6}) reached, giving up`),A.current.delete(Z.name),P({...Z,type:"failed"});return}}let p=Math.min(sJY*Math.pow(2,I-1),tJY);C8(Z.name,`Scheduling reconnection attempt ${I+1} in ${p}ms`),await new Promise((C)=>{let g=setTimeout(C,p);A.current.set(Z.name,g)})}})()}else P({...Z,type:"failed"})};{let E=R78(Z.name,Z.capabilities,Z.config.pluginSource),S=dH6(Z.name,eH()),R=S?.kind==="plugin"?`${S.name}@${S.marketplace}`:void 0;if(E.action==="register"||E.kind!=="capability")d("tengu_mcp_channel_gate",{registered:E.action==="register",skip_kind:E.action==="skip"?E.kind:void 0,entry_kind:S?.kind,is_dev:S?.dev??!1,plugin:R});switch(E.action){case"register":if(C8(Z.name,"Channel notifications registered"),Z.client.setNotificationHandler(E78(),async(x)=>{let{content:I,meta:B}=x.params;C8(Z.name,`notifications/claude/channel: ${I.slice(0,80)}`),d("tengu_mcp_channel_message",{content_length:I.length,meta_key_count:Object.keys(B??{}).length,entry_kind:S?.kind,is_dev:S?.dev??!1,plugin:R}),jM({mode:"prompt",value:L78(Z.name,I,B),priority:"next",isMeta:!0,origin:{kind:"channel",server:Z.name},skipSlashCommands:!0})}),Z.capabilities?.experimental?.["claude/channel/permission"]!==void 0)Z.client.setNotificationHandler(UNK(),async(x)=>{let{request_id:I,behavior:B}=x.params,p=w.current?.resolve(I,B,Z.name)??!1;C8(Z.name,`notifications/claude/channel/permission: ${I} → ${B} (${p?"matched pending":"no pending entry — stale or unknown ID"})`)});break;case"skip":if(Z.client.removeNotificationHandler("notifications/claude/channel"),Z.client.removeNotificationHandler(L47),C8(Z.name,`Channel notifications skipped: ${E.reason}`),E.kind!=="capability"&&E.kind!=="session"&&!O.current.has(E.kind)&&(E.kind==="marketplace"||E.kind==="allowlist"||S!==void 0)){O.current.add(E.kind);let x=E.kind==="disabled"?"Channels are not currently available":E.kind==="auth"?"Channels require claude.ai authentication · run /login":E.kind==="policy"?"Channels are not enabled for your org · have an administrator set channelsEnabled: true in managed settings":E.reason;j({key:`channels-blocked-${E.kind}`,priority:"high",text:x,color:"warning",timeoutMs:12000})}break}}if(Z.capabilities?.tools?.listChanged)Z.client.setNotificationHandler(Lu6,async()=>{C8(Z.name,"Received tools/list_changed notification, refreshing tools");try{let E=mL.cache.get(Z.name);mL.cache.delete(Z.name);let S=await mL(Z),R=S.length;if(E)E.then((x)=>{d("tengu_mcp_list_changed",{type:"tools",previousCount:x.length,newCount:R})},()=>{d("tengu_mcp_list_changed",{type:"tools",newCount:R})});else d("tengu_mcp_list_changed",{type:"tools",newCount:R});P({...Z,tools:S})}catch(E){Qz(Z.name,`Failed to refresh tools after list_changed notification: ${d6(E)}`)}});if(Z.capabilities?.prompts?.listChanged)Z.client.setNotificationHandler(yu6,async()=>{C8(Z.name,"Received prompts/list_changed notification, refreshing prompts"),d("tengu_mcp_list_changed",{type:"prompts"});try{Fw6.cache.delete(Z.name);let[E,S]=await Promise.all([Fw6(Z),Promise.resolve([])]);P({...Z,commands:[...E,...S]}),aJY?.()}catch(E){Qz(Z.name,`Failed to refresh prompts after list_changed notification: ${d6(E)}`)}});if(Z.capabilities?.resources?.listChanged)Z.client.setNotificationHandler(Vu6,async()=>{C8(Z.name,"Received resources/list_changed notification, refreshing resources"),d("tengu_mcp_list_changed",{type:"resources"});try{lr.cache.delete(Z.name);{let E=await lr(Z);P({...Z,resources:E})}}catch(E){Qz(Z.name,`Failed to refresh resources after list_changed notification: ${d6(E)}`)}});break}case"needs-auth":case"failed":case"pending":case"disabled":break}},[P]),D=N8();s0.useEffect(()=>{async function Z(){let{servers:T,errors:v}=K?{servers:{},errors:[]}:await Rw6(q),V={...T,...q};aNK($,v),$((E)=>{let{stale:S,...R}=VR4(E.mcp,V);for(let B of S){let p=A.current.get(B.name);if(p)clearTimeout(p),A.current.delete(B.name);if(B.type==="connected")B.client.onclose=void 0,pG(B.name,B.config).catch(()=>{})}let x=new Set(R.clients.map((B)=>B.name)),I=Object.entries(V).filter(([B])=>!x.has(B)).map(([B,p])=>({name:B,type:bG(B)?"disabled":"pending",config:p}));if(I.length===0&&S.length===0)return E;return{...E,mcp:{...E.mcp,...R,clients:[...R.clients,...I]}}})}Z().catch((T)=>{Qz("useManageMCPConnections",`Failed to initialize servers as pending: ${d6(T)}`)})},[K,q,$,D,Y]),s0.useEffect(()=>{let Z=!1;async function T(){let v;if(K||uq6())v=Promise.resolve({});else PR4(),v=Ew6();let{servers:V,errors:E}=K?{servers:{},errors:[]}:await Rw6(q,v);if(Z)return;aNK($,E);let S={...V,...q},R=Object.fromEntries(Object.entries(S).filter(([C])=>!bG(C)));mN6(W,R).catch((C)=>{Qz("useManageMcpConnections",`Failed to get MCP resources: ${d6(C)}`)});let x={};if(!K){if(x=bq6(await v).allowed,Z)return;if(Object.keys(x).length>0){let{servers:C}=Ya6(x,S);x=C}if(Object.keys(x).length>0){$((g)=>{let F=new Set(g.mcp.clients.map((c)=>c.name)),U=Object.entries(x).filter(([c])=>!F.has(c)).map(([c,K6])=>({name:c,type:bG(c)?"disabled":"pending",config:K6}));if(U.length===0)return g;return{...g,mcp:{...g.mcp,clients:[...g.mcp.clients,...U]}}});let C=Object.fromEntries(Object.entries(x).filter(([g])=>!bG(g)));mN6(W,C).catch((g)=>{Qz("useManageMcpConnections",`Failed to get claude.ai MCP resources: ${d6(g)}`)})}}let I={...S,...x},B={enterprise:0,global:0,project:0,user:0,plugin:0,claudeai:0},p=[];for(let[C,g]of Object.entries(I))if(g.scope==="enterprise")B.enterprise++;else if(g.scope==="user")B.global++;else if(g.scope==="project")B.project++;else if(g.scope==="local")B.user++;else if(g.scope==="dynamic")B.plugin++;else if(g.scope==="claudeai")B.claudeai++;d("tengu_mcp_servers",{...B,...{}})}return T(),()=>{Z=!0}},[K,q,W,$,z,D,Y]),s0.useEffect(()=>{let Z=A.current;return()=>{for(let T of Z.values())clearTimeout(T);if(Z.clear(),M.current!==null)clearTimeout(M.current),M.current=null,X()}},[X]);let f=s0.useCallback(async(Z)=>{let T=_.getState().mcp.clients.find((E)=>E.name===Z);if(!T)throw Error(`MCP server ${Z} not found`);let v=A.current.get(Z);if(v)clearTimeout(v),A.current.delete(Z);let V=await qm(Z,T.config);return W(V),V},[_,W]),G=s0.useCallback(async(Z)=>{let T=_.getState().mcp.clients.find((V)=>V.name===Z);if(!T)throw Error(`MCP server ${Z} not found`);if(T.type!=="disabled"){let V=A.current.get(Z);if(V)clearTimeout(V),A.current.delete(Z);if(HN6(Z,!1),T.type==="connected")await pG(Z,T.config);P({name:Z,type:"disabled",config:T.config})}else{HN6(Z,!0),P({name:Z,type:"pending",config:T.config});let V=await qm(Z,T.config);W(V)}},[_,P,W]);return{reconnectMcpServer:f,toggleMcpServer:G}}function eJY(q){switch(q){case"http":return"HTTP";case"ws":case"ws-ide":return"WebSocket";default:return"SSE"}}var s0,aJY=null,ch6=5,sJY=1000,tJY=30000;var tNK=y(()=>{v8();PD();lM();y47();By8();k8();f0();_8();v8();h$();C7();y8();E8();p2();h78();h47();ON6();CE8();ok();NJ();s0=O6(D6(),1)});function lh6(){let q=cH6.useContext(S47);if(!q)throw Error("useMcpReconnect must be used within MCPConnectionManager");return q.reconnectMcpServer}function f56(){let q=cH6.useContext(S47);if(!q)throw Error("useMcpToggleEnabled must be used within MCPConnectionManager");return q.toggleMcpServer}function tg8(q){let K=z6(6),{children:_,dynamicMcpConfig:z,isStrictMcpConfig:Y}=q,{reconnectMcpServer:$,toggleMcpServer:A}=sNK(z,Y),O;if(K[0]!==$||K[1]!==A)O={reconnectMcpServer:$,toggleMcpServer:A},K[0]=$,K[1]=A,K[2]=O;else O=K[2];let w=O,j;if(K[3]!==_||K[4]!==w)j=cH6.default.createElement(S47.Provider,{value:w},_),K[3]=_,K[4]=w,K[5]=j;else j=K[5];return j}var cH6,S47;var Z56=y(()=>{q8();tNK();cH6=O6(D6(),1),S47=cH6.createContext(null)});function C47(q){let K=z6(25),{serverName:_,onComplete:z}=q,[Y]=Aq(),$=jz(),A=lh6(),[O,w]=t0.useState(!0),[j,H]=t0.useState(null),J,M;if(K[0]!==z||K[1]!==A||K[2]!==_||K[3]!==$)J=()=>{(async function(){try{if(!$.getState().mcp.clients.find((f)=>f.name===_)){H(`MCP server "${_}" not found`),w(!1),z(`MCP server "${_}" not found`);return}let D=await A(_);q:switch(D.client.type){case"connected":{w(!1),z(`Successfully reconnected to ${_}`);break q}case"needs-auth":{H(`${_} requires authentication`),w(!1),z(`${_} requires authentication. Use /mcp to authenticate.`);break q}case"pending":case"failed":case"disabled":H(`Failed to reconnect to ${_}`),w(!1),z(`Failed to reconnect to ${_}`)}}catch(W){let D=W,f=D instanceof Error?D.message:String(D);H(f),w(!1),z(`Error: ${f}`)}})()},M=[_,A,$,z],K[0]=z,K[1]=A,K[2]=_,K[3]=$,K[4]=J,K[5]=M;else J=K[4],M=K[5];if(t0.useEffect(J,M),O){let X;if(K[6]!==_)X=t0.default.createElement(k,{color:"text"},"Reconnecting to ",t0.default.createElement(k,{bold:!0},_)),K[6]=_,K[7]=X;else X=K[7];let P;if(K[8]===Symbol.for("react.memo_cache_sentinel"))P=t0.default.createElement(u,null,t0.default.createElement(IK,null),t0.default.createElement(k,null," Establishing connection to MCP server")),K[8]=P;else P=K[8];let W;if(K[9]!==X)W=t0.default.createElement(u,{flexDirection:"column",gap:1,padding:1},X,P),K[9]=X,K[10]=W;else W=K[10];return W}if(j){let X;if(K[11]!==Y)X=h7("error",Y)(t6.cross),K[11]=Y,K[12]=X;else X=K[12];let P;if(K[13]!==X)P=t0.default.createElement(k,null,X," "),K[13]=X,K[14]=P;else P=K[14];let W;if(K[15]!==_)W=t0.default.createElement(k,{color:"error"},"Failed to reconnect to ",_),K[15]=_,K[16]=W;else W=K[16];let D;if(K[17]!==P||K[18]!==W)D=t0.default.createElement(u,null,P,W),K[17]=P,K[18]=W,K[19]=D;else D=K[19];let f;if(K[20]!==j)f=t0.default.createElement(k,{dimColor:!0},"Error: ",j),K[20]=j,K[21]=f;else f=K[21];let G;if(K[22]!==D||K[23]!==f)G=t0.default.createElement(u,{flexDirection:"column",gap:1,padding:1},D,f),K[22]=D,K[23]=f,K[24]=G;else G=K[24];return G}return null}var t0;var b47=y(()=>{q8();bq();s6();Z56();C7();Q2();t0=O6(D6(),1)});function eg8(q){let K=z6(9),{serverToolsCount:_,serverPromptsCount:z,serverResourcesCount:Y}=q,$;if(K[0]!==z||K[1]!==Y||K[2]!==_){if($=[],_>0)$.push("tools");if(Y>0)$.push("resources");if(z>0)$.push("prompts");K[0]=z,K[1]=Y,K[2]=_,K[3]=$}else $=K[3];let A;if(K[4]===Symbol.for("react.memo_cache_sentinel"))A=S78.default.createElement(k,{bold:!0},"Capabilities: "),K[4]=A;else A=K[4];let O;if(K[5]!==$)O=$.length>0?S78.default.createElement(I1,null,$):"none",K[5]=$,K[6]=O;else O=K[6];let w;if(K[7]!==O)w=S78.default.createElement(u,null,A,S78.default.createElement(k,{color:"text"},O)),K[7]=O,K[8]=w;else w=K[8];return w}var S78;var x47=y(()=>{q8();s6();QK();S78=O6(D6(),1)});function qF8(q,K){switch(q.client.type){case"connected":return{message:`Reconnected to ${K}.`,success:!0};case"needs-auth":return{message:`${K} requires authentication. Use the 'Authenticate' option.`,success:!1};case"failed":return{message:`Failed to reconnect to ${K}.`,success:!1};default:return{message:`Unknown result when reconnecting to ${K}.`,success:!1}}}function C78(q,K){let _=q instanceof Error?q.message:String(q);return`Error reconnecting to ${K}: ${_}`}function lH6({server:q,serverToolsCount:K,onViewTools:_,onCancel:z,onComplete:Y,borderless:$=!1}){let[A]=Aq(),O=o5(),{columns:w}=t1(),[j,H]=l1.default.useState(!1),[J,M]=l1.default.useState(null),X=P8((f6)=>f6.mcp),P=s7(),[W,D]=l1.default.useState(null),[f,G]=l1.useState(!1),Z=l1.useRef(null),[T,v]=l1.useState(!1),[V,E]=l1.useState(null),[S,R]=l1.useState(!1),[x,I]=l1.useState(null),[B,p]=l1.useState(!1),[C,g]=l1.useState(!1),F=l1.useRef(void 0),U=l1.useRef(!1),[c,K6]=l1.useState(""),[t,q6]=l1.useState(0),[e,i]=l1.useState(null);l1.useEffect(()=>()=>{if(U.current=!0,Z.current?.abort(),F.current!==void 0)clearTimeout(F.current)},[]);let $6=q.isAuthenticated||q.client.type==="connected"&&K>0,M6=lh6(),j6=l1.default.useCallback(async()=>{v(!1),E(null),G(!0);try{let f6=await M6(q.name),N6=f6.client.type==="connected";if(d("tengu_claudeai_mcp_auth_completed",{success:N6}),N6)Y?.(`Authentication successful. Connected to ${q.name}.`);else if(f6.client.type==="needs-auth")Y?.("Authentication successful, but server still requires authentication. You may need to manually restart Claude Code.");else Y?.("Authentication successful, but server reconnection failed. You may need to manually restart Claude Code for the changes to take effect.")}catch(f6){d("tengu_claudeai_mcp_auth_completed",{success:!1}),Y?.(C78(f6,q.name))}finally{G(!1)}},[M6,q.name,Y]),G6=l1.default.useCallback(async()=>{await pG(q.name,{...q.config,scope:q.scope}),P((f6)=>{let N6=f6.mcp.clients.map((T6)=>T6.name===q.name?{...T6,type:"needs-auth"}:T6),Z6=$E8(f6.mcp.tools,q.name),V6=JN6(f6.mcp.commands,q.name),y6=MN6(f6.mcp.resources,q.name);return{...f6,mcp:{...f6.mcp,clients:N6,tools:Z6,commands:V6,resources:y6}}}),d("tengu_claudeai_mcp_clear_auth_completed",{}),Y?.(`Disconnected from ${q.name}.`),R(!1),I(null),p(!1)},[q.name,q.config,q.scope,P,Y]);P1("confirm:no",()=>{Z.current?.abort(),Z.current=null,H(!1),D(null)},{context:"Confirmation",isActive:j}),P1("confirm:no",()=>{v(!1),E(null)},{context:"Confirmation",isActive:T}),P1("confirm:no",()=>{R(!1),I(null),p(!1)},{context:"Confirmation",isActive:S}),k4((f6,N6)=>{if(N6.return&&T)j6();if(N6.return&&S)if(B)G6();else{let Z6=`${u7().CLAUDE_AI_ORIGIN}/settings/connectors`;I(Z6),p(!0),m3(Z6)}if(f6==="c"&&!C){let Z6=W||V||x;if(Z6)XX(Z6).then((V6)=>{if(U.current)return;if(V6)process.stdout.write(V6);if(g(!0),F.current!==void 0)clearTimeout(F.current);F.current=setTimeout(g,2000,!1)})}});let w6=Tf(String(q.name)),o=YE8(X.commands,q.name).length,s=f56(),a=l1.default.useCallback(async()=>{let f6=u7().CLAUDE_AI_ORIGIN,Z6=B_()?.organizationUuid,V6;if(Z6&&q.config.type==="claudeai-proxy"&&q.config.id){let y6=q.config.id.startsWith("mcprs")?"mcpsrv"+q.config.id.slice(5):q.config.id,T6=encodeURIComponent(process.env.CLAUDE_CODE_ENTRYPOINT||"cli");V6=`${f6}/api/organizations/${Z6}/mcp/start-auth/${y6}?product_surface=${T6}`}else V6=`${f6}/settings/connectors`;E(V6),v(!0),d("tengu_claudeai_mcp_auth_started",{}),await m3(V6)},[q.config]),n=l1.default.useCallback(()=>{R(!0),d("tengu_claudeai_mcp_clear_auth_started",{})},[]),l=l1.default.useCallback(async()=>{let f6=q.client.type!=="disabled";try{if(await s(q.name),q.config.type==="claudeai-proxy")d("tengu_claudeai_mcp_toggle",{new_state:f6?"disabled":"enabled"});z()}catch(N6){Y?.(`Failed to ${f6?"disable":"enable"} MCP server '${q.name}': ${d6(N6)}`)}},[q.client.type,q.config.type,q.name,s,z,Y]),A6=l1.default.useCallback(async()=>{if(q.config.type==="claudeai-proxy")return;H(!0),M(null);let f6=new AbortController;Z.current=f6;try{if(q.isAuthenticated&&q.config)await wa6(q.name,q.config,{preserveStepUpState:!0});if(q.config){await pq6(q.name,q.config,D,f6.signal,{onWaitingForCallback:(Z6)=>{i(()=>Z6)}}),d("tengu_mcp_auth_config_authenticate",{wasAuthenticated:q.isAuthenticated});let N6=await M6(q.name);if(N6.client.type==="connected"){let Z6=$6?`Authentication successful. Reconnected to ${q.name}.`:`Authentication successful. Connected to ${q.name}.`;Y?.(Z6)}else if(N6.client.type==="needs-auth")Y?.("Authentication successful, but server still requires authentication. You may need to manually restart Claude Code.");else C8(q.name,"Reconnection failed after authentication"),Y?.("Authentication successful, but server reconnection failed. You may need to manually restart Claude Code for the changes to take effect.")}}catch(N6){if(N6 instanceof Error&&!(N6 instanceof hU))M(N6.message)}finally{H(!1),Z.current=null,i(null),K6("")}},[q.isAuthenticated,q.config,q.name,Y,M6,$6]),J6=async()=>{if(q.config.type==="claudeai-proxy")return;if(q.config)await wa6(q.name,q.config),d("tengu_mcp_auth_config_clear",{}),await pG(q.name,{...q.config,scope:q.scope}),P((f6)=>{let N6=f6.mcp.clients.map((T6)=>T6.name===q.name?{...T6,type:"failed"}:T6),Z6=$E8(f6.mcp.tools,q.name),V6=JN6(f6.mcp.commands,q.name),y6=MN6(f6.mcp.resources,q.name);return{...f6,mcp:{...f6.mcp,clients:N6,tools:Z6,commands:V6,resources:y6}}}),Y?.(`Authentication cleared for ${q.name}.`)};if(j){let f6=q.config.type!=="claudeai-proxy"&&q.config.oauth?.xaa?" Authenticating via your identity provider":" A browser window will open for authentication";return l1.default.createElement(u,{flexDirection:"column",gap:1,padding:1},l1.default.createElement(k,{color:"claude"},"Authenticating with ",q.name,"…"),l1.default.createElement(u,null,l1.default.createElement(IK,null),l1.default.createElement(k,null,f6)),W&&l1.default.createElement(u,{flexDirection:"column"},l1.default.createElement(u,null,l1.default.createElement(k,{dimColor:!0},"If your browser doesn't open automatically, copy this URL manually"," "),C?l1.default.createElement(k,{color:"success"},"(Copied!)"):l1.default.createElement(k,{dimColor:!0},l1.default.createElement(t8,{shortcut:"c",action:"copy",parens:!0}))),l1.default.createElement(hq,{url:W})),j&&W&&e&&l1.default.createElement(u,{flexDirection:"column",marginTop:1},l1.default.createElement(k,{dimColor:!0},"If the redirect page shows a connection error, paste the URL from your browser's address bar:"),l1.default.createElement(u,null,l1.default.createElement(k,{dimColor:!0},"URL ",">"," "),l1.default.createElement(r3,{value:c,onChange:K6,onSubmit:(N6)=>{e(N6.trim()),K6("")},cursorOffset:t,onChangeCursorOffset:q6,columns:w-8}))),l1.default.createElement(u,{marginLeft:3},l1.default.createElement(k,{dimColor:!0},"Return here after authenticating in your browser. Press Esc to go back.")))}if(T)return l1.default.createElement(u,{flexDirection:"column",gap:1,padding:1},l1.default.createElement(k,{color:"claude"},"Authenticating with ",q.name,"…"),l1.default.createElement(u,null,l1.default.createElement(IK,null),l1.default.createElement(k,null," A browser window will open for authentication")),V&&l1.default.createElement(u,{flexDirection:"column"},l1.default.createElement(u,null,l1.default.createElement(k,{dimColor:!0},"If your browser doesn't open automatically, copy this URL manually"," "),C?l1.default.createElement(k,{color:"success"},"(Copied!)"):l1.default.createElement(k,{dimColor:!0},l1.default.createElement(t8,{shortcut:"c",action:"copy",parens:!0}))),l1.default.createElement(hq,{url:V})),l1.default.createElement(u,{marginLeft:3,flexDirection:"column"},l1.default.createElement(k,{color:"permission"},"Press ",l1.default.createElement(k,{bold:!0},"Enter")," after authenticating in your browser."),l1.default.createElement(k,{dimColor:!0,italic:!0},l1.default.createElement(W1,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"back"}))));if(S)return l1.default.createElement(u,{flexDirection:"column",gap:1,padding:1},l1.default.createElement(k,{color:"claude"},"Clear authentication for ",q.name),B?l1.default.createElement(l1.default.Fragment,null,l1.default.createElement(k,null,'Find the MCP server in the browser and click "Disconnect".'),x&&l1.default.createElement(u,{flexDirection:"column"},l1.default.createElement(u,null,l1.default.createElement(k,{dimColor:!0},"If your browser didn't open automatically, copy this URL manually"," "),C?l1.default.createElement(k,{color:"success"},"(Copied!)"):l1.default.createElement(k,{dimColor:!0},l1.default.createElement(t8,{shortcut:"c",action:"copy",parens:!0}))),l1.default.createElement(hq,{url:x})),l1.default.createElement(u,{marginLeft:3,flexDirection:"column"},l1.default.createElement(k,{color:"permission"},"Press ",l1.default.createElement(k,{bold:!0},"Enter")," when done."),l1.default.createElement(k,{dimColor:!0,italic:!0},l1.default.createElement(W1,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"back"})))):l1.default.createElement(l1.default.Fragment,null,l1.default.createElement(k,null,'This will open claude.ai in the browser. Find the MCP server in the list and click "Disconnect".'),l1.default.createElement(u,{marginLeft:3,flexDirection:"column"},l1.default.createElement(k,{color:"permission"},"Press ",l1.default.createElement(k,{bold:!0},"Enter")," to open the browser."),l1.default.createElement(k,{dimColor:!0,italic:!0},l1.default.createElement(W1,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"back"})))));if(f)return l1.default.createElement(u,{flexDirection:"column",gap:1,padding:1},l1.default.createElement(k,{color:"text"},"Connecting to ",l1.default.createElement(k,{bold:!0},q.name),"…"),l1.default.createElement(u,null,l1.default.createElement(IK,null),l1.default.createElement(k,null," Establishing connection to MCP server")),l1.default.createElement(k,{dimColor:!0},"This may take a few moments."));let X6=[];if(q.client.type==="disabled")X6.push({label:"Enable",value:"toggle-enabled"});if(q.client.type==="connected"&&K>0)X6.push({label:"View tools",value:"tools"});if(q.config.type==="claudeai-proxy"){if(q.client.type==="connected")X6.push({label:"Clear authentication",value:"claudeai-clear-auth"});else if(q.client.type!=="disabled")X6.push({label:"Authenticate",value:"claudeai-auth"})}else{if($6)X6.push({label:"Re-authenticate",value:"reauth"}),X6.push({label:"Clear authentication",value:"clear-auth"});if(!$6)X6.push({label:"Authenticate",value:"auth"})}if(q.client.type!=="disabled"){if(q.client.type!=="needs-auth")X6.push({label:"Reconnect",value:"reconnectMcpServer"});X6.push({label:"Disable",value:"toggle-enabled"})}if(X6.length===0)X6.push({label:"Back",value:"back"});return l1.default.createElement(u,{flexDirection:"column"},l1.default.createElement(u,{flexDirection:"column",paddingX:1,borderStyle:$?void 0:"round"},l1.default.createElement(u,{marginBottom:1},l1.default.createElement(k,{bold:!0},w6," MCP Server")),l1.default.createElement(u,{flexDirection:"column",gap:0},l1.default.createElement(u,null,l1.default.createElement(k,{bold:!0},"Status: "),q.client.type==="disabled"?l1.default.createElement(k,null,h7("inactive",A)(t6.radioOff)," disabled"):q.client.type==="connected"?l1.default.createElement(k,null,h7("success",A)(t6.tick)," connected"):q.client.type==="pending"?l1.default.createElement(l1.default.Fragment,null,l1.default.createElement(k,{dimColor:!0},t6.radioOff),l1.default.createElement(k,null," connecting…")):q.client.type==="needs-auth"?l1.default.createElement(k,null,h7("warning",A)(t6.triangleUpOutline)," needs authentication"):l1.default.createElement(k,null,h7("error",A)(t6.cross)," failed")),q.transport!=="claudeai-proxy"&&l1.default.createElement(u,null,l1.default.createElement(k,{bold:!0},"Auth: "),$6?l1.default.createElement(k,null,h7("success",A)(t6.tick)," authenticated"):l1.default.createElement(k,null,h7("error",A)(t6.cross)," not authenticated")),l1.default.createElement(u,null,l1.default.createElement(k,{bold:!0},"URL: "),l1.default.createElement(k,{dimColor:!0},q.config.url)),l1.default.createElement(u,null,l1.default.createElement(k,{bold:!0},"Config location: "),l1.default.createElement(k,{dimColor:!0},xG(q.scope))),q.client.type==="connected"&&l1.default.createElement(eg8,{serverToolsCount:K,serverPromptsCount:o,serverResourcesCount:X.resources[q.name]?.length||0}),q.client.type==="connected"&&K>0&&l1.default.createElement(u,null,l1.default.createElement(k,{bold:!0},"Tools: "),l1.default.createElement(k,{dimColor:!0},K," tools"))),J&&l1.default.createElement(u,{marginTop:1},l1.default.createElement(k,{color:"error"},"Error: ",J)),X6.length>0&&l1.default.createElement(u,{marginTop:1},l1.default.createElement(H1,{options:X6,onChange:async(f6)=>{switch(f6){case"tools":_();break;case"auth":case"reauth":await A6();break;case"clear-auth":await J6();break;case"claudeai-auth":await a();break;case"claudeai-clear-auth":n();break;case"reconnectMcpServer":G(!0);try{let N6=await M6(q.name);if(q.config.type==="claudeai-proxy")d("tengu_claudeai_mcp_reconnect",{success:N6.client.type==="connected"});let{message:Z6}=qF8(N6,q.name);Y?.(Z6)}catch(N6){if(q.config.type==="claudeai-proxy")d("tengu_claudeai_mcp_reconnect",{success:!1});Y?.(C78(N6,q.name))}finally{G(!1)}break;case"toggle-enabled":await l();break;case"back":z();break}},onCancel:z}))),l1.default.createElement(u,{marginTop:1},l1.default.createElement(k,{dimColor:!0,italic:!0},O.pending?l1.default.createElement(l1.default.Fragment,null,"Press ",O.keyName," again to exit"):l1.default.createElement(I1,null,l1.default.createElement(t8,{shortcut:"↑↓",action:"navigate"}),l1.default.createElement(t8,{shortcut:"Enter",action:"select"}),l1.default.createElement(W1,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"back"})))))}var l1;var KF8=y(()=>{bq();k8();H3();z2();t4();YM();s6();Oq();or();PD();Z56();NJ();C7();G7();hH();y8();E8();a5();d_();QK();rK();Q2();CH();x47();l1=O6(D6(),1)});function b78({server:q,serverToolsCount:K,onViewTools:_,onCancel:z,onComplete:Y,borderless:$=!1}){let[A]=Aq(),O=o5(),w=P8((f)=>f.mcp),j=lh6(),H=f56(),[J,M]=R3.useState(!1),X=R3.default.useCallback(async()=>{let f=q.client.type!=="disabled";try{await H(q.name),z()}catch(G){Y(`Failed to ${f?"disable":"enable"} MCP server '${q.name}': ${d6(G)}`)}},[q.client.type,q.name,H,z,Y]),P=Tf(String(q.name)),W=YE8(w.commands,q.name).length,D=[];if(q.client.type!=="disabled"&&K>0)D.push({label:"View tools",value:"tools"});if(q.client.type!=="disabled")D.push({label:"Reconnect",value:"reconnectMcpServer"});if(D.push({label:q.client.type!=="disabled"?"Disable":"Enable",value:"toggle-enabled"}),D.length===0)D.push({label:"Back",value:"back"});if(J)return R3.default.createElement(u,{flexDirection:"column",gap:1,padding:1},R3.default.createElement(k,{color:"text"},"Reconnecting to ",R3.default.createElement(k,{bold:!0},q.name)),R3.default.createElement(u,null,R3.default.createElement(IK,null),R3.default.createElement(k,null," Restarting MCP server process")),R3.default.createElement(k,{dimColor:!0},"This may take a few moments."));return R3.default.createElement(u,{flexDirection:"column"},R3.default.createElement(u,{flexDirection:"column",paddingX:1,borderStyle:$?void 0:"round"},R3.default.createElement(u,{marginBottom:1},R3.default.createElement(k,{bold:!0},P," MCP Server")),R3.default.createElement(u,{flexDirection:"column",gap:0},R3.default.createElement(u,null,R3.default.createElement(k,{bold:!0},"Status: "),q.client.type==="disabled"?R3.default.createElement(k,null,h7("inactive",A)(t6.radioOff)," disabled"):q.client.type==="connected"?R3.default.createElement(k,null,h7("success",A)(t6.tick)," connected"):q.client.type==="pending"?R3.default.createElement(R3.default.Fragment,null,R3.default.createElement(k,{dimColor:!0},t6.radioOff),R3.default.createElement(k,null," connecting…")):R3.default.createElement(k,null,h7("error",A)(t6.cross)," failed")),R3.default.createElement(u,null,R3.default.createElement(k,{bold:!0},"Command: "),R3.default.createElement(k,{dimColor:!0},q.config.command)),q.config.args&&q.config.args.length>0&&R3.default.createElement(u,null,R3.default.createElement(k,{bold:!0},"Args: "),R3.default.createElement(k,{dimColor:!0},q.config.args.join(" "))),R3.default.createElement(u,null,R3.default.createElement(k,{bold:!0},"Config location: "),R3.default.createElement(k,{dimColor:!0},xG(EN(q.name)?.scope??"dynamic"))),q.client.type==="connected"&&R3.default.createElement(eg8,{serverToolsCount:K,serverPromptsCount:W,serverResourcesCount:w.resources[q.name]?.length||0}),q.client.type==="connected"&&K>0&&R3.default.createElement(u,null,R3.default.createElement(k,{bold:!0},"Tools: "),R3.default.createElement(k,{dimColor:!0},K," tools"))),D.length>0&&R3.default.createElement(u,{marginTop:1},R3.default.createElement(H1,{options:D,onChange:async(f)=>{if(f==="tools")_();else if(f==="reconnectMcpServer"){M(!0);try{let G=await j(q.name),{message:Z}=qF8(G,q.name);Y?.(Z)}catch(G){Y?.(C78(G,q.name))}finally{M(!1)}}else if(f==="toggle-enabled")await X();else if(f==="back")z()},onCancel:z}))),R3.default.createElement(u,{marginTop:1},R3.default.createElement(k,{dimColor:!0,italic:!0},O.pending?R3.default.createElement(R3.default.Fragment,null,"Press ",O.keyName," again to exit"):R3.default.createElement(I1,null,R3.default.createElement(t8,{shortcut:"↑↓",action:"navigate"}),R3.default.createElement(t8,{shortcut:"Enter",action:"select"}),R3.default.createElement(W1,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"back"})))))}var R3;var _F8=y(()=>{bq();z2();s6();f0();Z56();NJ();C7();y8();a5();d_();QK();rK();Q2();x47();R3=O6(D6(),1)});function x78(q){let K=z6(44),{tool:_,server:z,onBack:Y}=q,[$,A]=lO.default.useState(""),O,w;if(K[0]!==z.name||K[1]!==_){w=GA8(_.name,z.name);let g=_.userFacingName?_.userFacingName({}):w;O=TA8(g),K[0]=z.name,K[1]=_,K[2]=O,K[3]=w}else O=K[2],w=K[3];let j=O,H;if(K[4]!==_)H=_.isReadOnly?.({})??!1,K[4]=_,K[5]=H;else H=K[5];let J=H,M;if(K[6]!==_)M=_.isDestructive?.({})??!1,K[6]=_,K[7]=M;else M=K[7];let X=M,P;if(K[8]!==_)P=_.isOpenWorld?.({})??!1,K[8]=_,K[9]=P;else P=K[9];let W=P,D,f;if(K[10]!==_)D=()=>{(async function(){try{let U=await _.description({},{isNonInteractiveSession:!1,toolPermissionContext:{mode:"default",additionalWorkingDirectories:new Map,alwaysAllowRules:{},alwaysDenyRules:{},alwaysAskRules:{},isBypassPermissionsModeAvailable:!1},tools:[]});A(U)}catch{A("Failed to load description")}})()},f=[_],K[10]=_,K[11]=D,K[12]=f;else D=K[11],f=K[12];lO.default.useEffect(D,f);let G;if(K[13]!==J)G=J&&lO.default.createElement(k,{color:"success"}," [read-only]"),K[13]=J,K[14]=G;else G=K[14];let Z;if(K[15]!==X)Z=X&&lO.default.createElement(k,{color:"error"}," [destructive]"),K[15]=X,K[16]=Z;else Z=K[16];let T;if(K[17]!==W)T=W&&lO.default.createElement(k,{dimColor:!0}," [open-world]"),K[17]=W,K[18]=T;else T=K[18];let v;if(K[19]!==j||K[20]!==G||K[21]!==Z||K[22]!==T)v=lO.default.createElement(lO.default.Fragment,null,j,G,Z,T),K[19]=j,K[20]=G,K[21]=Z,K[22]=T,K[23]=v;else v=K[23];let V=v,E;if(K[24]===Symbol.for("react.memo_cache_sentinel"))E=lO.default.createElement(k,{bold:!0},"Tool name: "),K[24]=E;else E=K[24];let S;if(K[25]!==w)S=lO.default.createElement(u,null,E,lO.default.createElement(k,{dimColor:!0},w)),K[25]=w,K[26]=S;else S=K[26];let R;if(K[27]===Symbol.for("react.memo_cache_sentinel"))R=lO.default.createElement(k,{bold:!0},"Full name: "),K[27]=R;else R=K[27];let x;if(K[28]!==_.name)x=lO.default.createElement(u,null,R,lO.default.createElement(k,{dimColor:!0},_.name)),K[28]=_.name,K[29]=x;else x=K[29];let I;if(K[30]!==$)I=$&&lO.default.createElement(u,{flexDirection:"column",marginTop:1},lO.default.createElement(k,{bold:!0},"Description:"),lO.default.createElement(k,{wrap:"wrap"},$)),K[30]=$,K[31]=I;else I=K[31];let B;if(K[32]!==_.inputJSONSchema)B=_.inputJSONSchema&&_.inputJSONSchema.properties&&Object.keys(_.inputJSONSchema.properties).length>0&&lO.default.createElement(u,{flexDirection:"column",marginTop:1},lO.default.createElement(k,{bold:!0},"Parameters:"),lO.default.createElement(u,{marginLeft:2,flexDirection:"column"},Object.entries(_.inputJSONSchema.properties).map((g)=>{let[F,U]=g,K6=_.inputJSONSchema?.required?.includes(F);return lO.default.createElement(k,{key:F},"• ",F,K6&&lO.default.createElement(k,{dimColor:!0}," (required)"),":"," ",lO.default.createElement(k,{dimColor:!0},typeof U==="object"&&U&&"type"in U?String(U.type):"unknown"),typeof U==="object"&&U&&"description"in U&&lO.default.createElement(k,{dimColor:!0}," - ",String(U.description)))}))),K[32]=_.inputJSONSchema,K[33]=B;else B=K[33];let p;if(K[34]!==S||K[35]!==x||K[36]!==I||K[37]!==B)p=lO.default.createElement(u,{flexDirection:"column"},S,x,I,B),K[34]=S,K[35]=x,K[36]=I,K[37]=B,K[38]=p;else p=K[38];let C;if(K[39]!==Y||K[40]!==z.name||K[41]!==p||K[42]!==V)C=lO.default.createElement(R1,{title:V,subtitle:z.name,onCancel:Y,inputGuide:qMY},p),K[39]=Y,K[40]=z.name,K[41]=p,K[42]=V,K[43]=C;else C=K[43];return C}function qMY(q){return q.pending?lO.default.createElement(k,null,"Press ",q.keyName," again to exit"):lO.default.createElement(W1,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"go back"})}var lO;var zF8=y(()=>{q8();s6();ok();a5();e4();lO=O6(D6(),1)});function I78(q){let K=z6(21),{server:_,onSelectTool:z,onBack:Y}=q,$=P8(_MY),A;q:{if(_.client.type!=="connected"){let f;if(K[0]===Symbol.for("react.memo_cache_sentinel"))f=[],K[0]=f;else f=K[0];A=f;break q}let D;if(K[1]!==$||K[2]!==_.name)D=EU($,_.name),K[1]=$,K[2]=_.name,K[3]=D;else D=K[3];A=D}let O=A,w;if(K[4]!==_.name||K[5]!==O){let D;if(K[7]!==_.name)D=(f,G)=>{let Z=GA8(f.name,_.name),T=f.userFacingName?f.userFacingName({}):Z,v=TA8(T),V=f.isReadOnly?.({})??!1,E=f.isDestructive?.({})??!1,S=f.isOpenWorld?.({})??!1,R=[];if(V)R.push("read-only");if(E)R.push("destructive");if(S)R.push("open-world");return{label:v,value:G.toString(),description:R.length>0?R.join(", "):void 0,descriptionColor:E?"error":V?"success":void 0}},K[7]=_.name,K[8]=D;else D=K[8];w=O.map(D),K[4]=_.name,K[5]=O,K[6]=w}else w=K[6];let j=w,H=`Tools for ${_.name}`,J=O.length,M;if(K[9]!==O.length)M=A7(O.length,"tool"),K[9]=O.length,K[10]=M;else M=K[10];let X=`${J} ${M}`,P;if(K[11]!==Y||K[12]!==z||K[13]!==O||K[14]!==j)P=O.length===0?Ks.default.createElement(k,{dimColor:!0},"No tools available"):Ks.default.createElement(H1,{options:j,onChange:(D)=>{let f=parseInt(D),G=O[f];if(G)z(G,f)},onCancel:Y}),K[11]=Y,K[12]=z,K[13]=O,K[14]=j,K[15]=P;else P=K[15];let W;if(K[16]!==Y||K[17]!==H||K[18]!==X||K[19]!==P)W=Ks.default.createElement(R1,{title:H,subtitle:X,onCancel:Y,inputGuide:KMY},P),K[16]=Y,K[17]=H,K[18]=X,K[19]=P,K[20]=W;else W=K[20];return W}function KMY(q){return q.pending?Ks.default.createElement(k,null,"Press ",q.keyName," again to exit"):Ks.default.createElement(I1,null,Ks.default.createElement(t8,{shortcut:"↑↓",action:"navigate"}),Ks.default.createElement(t8,{shortcut:"Enter",action:"select"}),Ks.default.createElement(W1,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"back"}))}function _MY(q){return q.mcp.tools}var Ks;var YF8=y(()=>{q8();s6();ok();NJ();C7();a5();d_();QK();e4();rK();Ks=O6(D6(),1)});function $F8(q){let K=z6(66),{onComplete:_}=q,z=P8(AMY),Y=P8($MY),$=z.clients,A;if(K[0]===Symbol.for("react.memo_cache_sentinel"))A={type:"list"},K[0]=A;else A=K[0];let[O,w]=Fb.default.useState(A),j;if(K[1]===Symbol.for("react.memo_cache_sentinel"))j=[],K[1]=j;else j=K[1];let[H,J]=Fb.default.useState(j),M;if(K[2]!==Y.allAgents)M=ER4(Y.allAgents),K[2]=Y.allAgents,K[3]=M;else M=K[3];let X=M,P;if(K[4]!==$)P=$.filter(YMY).sort(zMY),K[4]=$,K[5]=P;else P=K[5];let W=P,D,f;if(K[6]!==W||K[7]!==z.tools)D=()=>{let T=!1;return async function(){let E=await Promise.all(W.map(async(S)=>{let R=S.config.scope,x=S.config.type==="sse",I=S.config.type==="http",B=S.config.type==="claudeai-proxy",p=void 0;if(x||I){let F=await new Sw6(S.name,S.config).tokens(),U=WD()!==null&&S.type==="connected",c=S.type==="connected"&&EU(z.tools,S.name).length>0;p=Boolean(F)||U||c}let C={name:S.name,client:S,scope:R};if(B)return{...C,transport:"claudeai-proxy",isAuthenticated:!1,config:S.config};else if(x)return{...C,transport:"sse",isAuthenticated:p,config:S.config};else if(I)return{...C,transport:"http",isAuthenticated:p,config:S.config};else return{...C,transport:"stdio",config:S.config}}));if(T)return;J(E)}(),()=>{T=!0}},f=[W,z.tools],K[6]=W,K[7]=z.tools,K[8]=D,K[9]=f;else D=K[8],f=K[9];Fb.default.useEffect(D,f);let G,Z;if(K[10]!==X.length||K[11]!==W.length||K[12]!==_||K[13]!==H.length)G=()=>{if(H.length===0&&W.length>0)return;if(H.length===0&&X.length===0)_("No MCP servers configured. Please run /doctor if this is unexpected. Otherwise, run `claude mcp --help` or visit https://code.claude.com/docs/en/mcp to learn more.")},Z=[H.length,W.length,X.length,_],K[10]=X.length,K[11]=W.length,K[12]=_,K[13]=H.length,K[14]=G,K[15]=Z;else G=K[14],Z=K[15];switch(Fb.useEffect(G,Z),O.type){case"list":{let T,v;if(K[16]===Symbol.for("react.memo_cache_sentinel"))v=(E)=>w({type:"server-menu",server:E}),T=(E)=>w({type:"agent-server-menu",agentServer:E}),K[16]=T,K[17]=v;else T=K[16],v=K[17];let V;if(K[18]!==X||K[19]!==_||K[20]!==H||K[21]!==O.defaultTab)V=Fb.default.createElement(V47,{servers:H,agentServers:X,onSelectServer:v,onSelectAgentServer:T,onComplete:_,defaultTab:O.defaultTab}),K[18]=X,K[19]=_,K[20]=H,K[21]=O.defaultTab,K[22]=V;else V=K[22];return V}case"server-menu":{let T;if(K[23]!==z.tools||K[24]!==O.server.name)T=EU(z.tools,O.server.name),K[23]=z.tools,K[24]=O.server.name,K[25]=T;else T=K[25];let v=T,V=O.server.transport==="claudeai-proxy"?"claude.ai":"Claude Code";if(O.server.transport==="stdio"){let E;if(K[26]!==O.server)E=()=>w({type:"server-tools",server:O.server}),K[26]=O.server,K[27]=E;else E=K[27];let S;if(K[28]!==V)S=()=>w({type:"list",defaultTab:V}),K[28]=V,K[29]=S;else S=K[29];let R;if(K[30]!==_||K[31]!==v.length||K[32]!==E||K[33]!==S||K[34]!==O.server)R=Fb.default.createElement(b78,{server:O.server,serverToolsCount:v.length,onViewTools:E,onCancel:S,onComplete:_}),K[30]=_,K[31]=v.length,K[32]=E,K[33]=S,K[34]=O.server,K[35]=R;else R=K[35];return R}else{let E;if(K[36]!==O.server)E=()=>w({type:"server-tools",server:O.server}),K[36]=O.server,K[37]=E;else E=K[37];let S;if(K[38]!==V)S=()=>w({type:"list",defaultTab:V}),K[38]=V,K[39]=S;else S=K[39];let R;if(K[40]!==_||K[41]!==v.length||K[42]!==E||K[43]!==S||K[44]!==O.server)R=Fb.default.createElement(lH6,{server:O.server,serverToolsCount:v.length,onViewTools:E,onCancel:S,onComplete:_}),K[40]=_,K[41]=v.length,K[42]=E,K[43]=S,K[44]=O.server,K[45]=R;else R=K[45];return R}}case"server-tools":{let T,v;if(K[46]!==O.server)v=(E,S)=>w({type:"server-tool-detail",server:O.server,toolIndex:S}),T=()=>w({type:"server-menu",server:O.server}),K[46]=O.server,K[47]=T,K[48]=v;else T=K[47],v=K[48];let V;if(K[49]!==T||K[50]!==v||K[51]!==O.server)V=Fb.default.createElement(I78,{server:O.server,onSelectTool:v,onBack:T}),K[49]=T,K[50]=v,K[51]=O.server,K[52]=V;else V=K[52];return V}case"server-tool-detail":{let T;if(K[53]!==z.tools||K[54]!==O.server.name)T=EU(z.tools,O.server.name),K[53]=z.tools,K[54]=O.server.name,K[55]=T;else T=K[55];let V=T[O.toolIndex];if(!V)return w({type:"server-tools",server:O.server}),null;let E;if(K[56]!==O.server)E=()=>w({type:"server-tools",server:O.server}),K[56]=O.server,K[57]=E;else E=K[57];let S;if(K[58]!==E||K[59]!==V||K[60]!==O.server)S=Fb.default.createElement(x78,{tool:V,server:O.server,onBack:E}),K[58]=E,K[59]=V,K[60]=O.server,K[61]=S;else S=K[61];return S}case"agent-server-menu":{let T;if(K[62]===Symbol.for("react.memo_cache_sentinel"))T=()=>w({type:"list",defaultTab:"Agents"}),K[62]=T;else T=K[62];let v;if(K[63]!==_||K[64]!==O.agentServer)v=Fb.default.createElement(v47,{agentServer:O.agentServer,onCancel:T,onComplete:_}),K[63]=_,K[64]=O.agentServer,K[65]=v;else v=K[65];return v}}}function zMY(q,K){return q.name.localeCompare(K.name)}function YMY(q){return q.name!=="ide"}function $MY(q){return q.agentDefinitions}function AMY(q){return q.mcp}var Fb;var eNK=y(()=>{q8();or();NJ();C7();nC();k47();N47();KF8();_F8();zF8();YF8();Fb=O6(D6(),1)});var qyK=y(()=>{k47();N47();b47();KF8();eNK();_F8();zF8();YF8()});var _yK={};T8(_yK,{settingSourceToScope:()=>HMY,isPersistableScope:()=>jMY,installSelectedPlugins:()=>I47,getPluginEditableScopes:()=>G56,getInstalledPlugins:()=>KyK,findMissingPlugins:()=>JMY,checkEnabledPlugins:()=>wMY});import{join as OMY}from"path";async function wMY(){let q=N7(),K=[],_=uA6();for(let[z,Y]of Object.entries(_))if(z.includes("@")&&Y)K.push(z);if(q.enabledPlugins)for(let[z,Y]of Object.entries(q.enabledPlugins)){if(!z.includes("@"))continue;let $=K.indexOf(z);if(Y){if($===-1)K.push(z)}else if($!==-1)K.splice($,1)}return K}function G56(){let q=new Map,K=uA6();for(let[z,Y]of Object.entries(K)){if(!z.includes("@"))continue;if(Y===!0)q.set(z,"flag");else if(Y===!1)q.delete(z)}let _=[{scope:"managed",source:"policySettings"},{scope:"user",source:"userSettings"},{scope:"project",source:"projectSettings"},{scope:"local",source:"localSettings"},{scope:"flag",source:"flagSettings"}];for(let{scope:z,source:Y}of _){let $=v1(Y);if(!$?.enabledPlugins)continue;for(let[A,O]of Object.entries($.enabledPlugins)){if(!A.includes("@"))continue;if(A in K&&K[A]!==O)N(`Plugin ${A} from --add-dir (${K[A]}) overridden by ${Y} (${O})`);if(O===!0)q.set(A,z);else if(O===!1)q.delete(A)}}return N(`Found ${q.size} enabled plugins with scopes: ${Array.from(q.entries()).map(([z,Y])=>`${z}(${Y})`).join(", ")}`),q}function jMY(q){return q!=="flag"}function HMY(q){return yh1[q]}async function KyK(){l17().catch((_)=>{H6(_)});let q=g18(),K=Object.keys(q.plugins);return N(`Found ${K.length} installed plugins`),K}async function JMY(q){try{let K=await KyK(),_=q.filter(($)=>!K.includes($));return(await Promise.all(_.map(async($)=>{try{let A=await aG($);return{pluginId:$,found:A!==null&&A!==void 0}}catch(A){return N(`Failed to check plugin ${$} in marketplace: ${A}`),{pluginId:$,found:!1}}}))).filter(({found:$})=>$).map(({pluginId:$})=>$)}catch(K){return H6(K),[]}}async function I47(q,K,_="user"){let z=_!=="user"?Z8():void 0,Y=hF(_),$=v1(Y),A={...$?.enabledPlugins},O=[],w=[];for(let j=0;j<q.length;j++){let H=q[j];if(!H)continue;if(K)K(H,j+1,q.length);try{let J=await aG(H);if(!J){w.push({name:H,error:"Plugin not found in any marketplace"});continue}let{entry:M,marketplaceInstallLocation:X}=J;if(!Gp6(M.source))await U18(H,M,_,z);else w0K({pluginId:H,installPath:OMY(X,M.source),version:M.version},_,z);A[H]=!0,O.push(H)}catch(J){let M=J instanceof Error?J.message:String(J);w.push({name:H,error:M}),H6(J)}}return W7(Y,{...$,enabledPlugins:A}),{installed:O,failed:w}}var nh6=y(()=>{I7();_8();E8();U1();UG8();pX();Nw();hP();_56();BZ()});import{homedir as MMY}from"os";import{resolve as XMY}from"path";async function AF8(q){let K=q.trim(),_=X8(),z=K.match(/^([a-zA-Z0-9._-]+@[^:]+:.+?(?:\.git)?)(#(.+))?$/);if(z?.[1]){let A=z[1],O=z[3];return O?{source:"git",url:A,ref:O}:{source:"git",url:A}}if(K.startsWith("http://")||K.startsWith("https://")){let A=K.match(/^([^#]+)(#(.+))?$/),O=A?.[1]||K,w=A?.[3];if(O.endsWith(".git")||O.includes("/_git/"))return w?{source:"git",url:O,ref:w}:{source:"git",url:O};let j;try{j=new URL(O)}catch(H){return{source:"url",url:O}}if(j.hostname==="github.com"||j.hostname==="www.github.com"){if(j.pathname.match(/^\/([^/]+\/[^/]+?)(\/|\.git|$)/)?.[1]){let J=O.endsWith(".git")?O:`${O}.git`;return w?{source:"git",url:J,ref:w}:{source:"git",url:J}}}return{source:"url",url:O}}let $=process.platform==="win32"&&(K.startsWith(".\\")||K.startsWith("..\\")||/^[a-zA-Z]:[/\\]/.test(K));if(K.startsWith("./")||K.startsWith("../")||K.startsWith("/")||K.startsWith("~")||$){let A=XMY(K.startsWith("~")?K.replace(/^~/,MMY()):K),O;try{O=await _.stat(A)}catch(w){let j=s1(w);return{error:j==="ENOENT"?`Path does not exist: ${A}`:`Cannot access path: ${A} (${j??w})`}}if(O.isFile())if(A.endsWith(".json"))return{source:"file",path:A};else return{error:`File path must point to a .json file (marketplace.json), but got: ${A}`};else if(O.isDirectory())return{source:"directory",path:A};else return{error:`Path is neither a file nor a directory: ${A}`}}if(K.includes("/")&&!K.startsWith("@")){if(K.includes(":"))return null;let A=K.match(/^([^#@]+)(?:[#@](.+))?$/),O=A?.[1]||K,w=A?.[2];return w?{source:"github",repo:O,ref:w}:{source:"github",repo:O}}return null}var u47=y(()=>{y8();e7()});function zyK({inputValue:q,setInputValue:K,cursorOffset:_,setCursorOffset:z,error:Y,setError:$,result:A,setResult:O,setViewState:w,onAddComplete:j,cliMode:H=!1}){let J=nH6.useRef(!1),[M,X]=nH6.useState(!1),[P,W]=nH6.useState(""),D=async()=>{let f=q.trim();if(!f){$("Please enter a marketplace source");return}let G=await AF8(f);if(!G){$("Invalid marketplace source format. Try: owner/repo, https://..., or ./path");return}if("error"in G){$(G.error);return}$(null);try{X(!0),W("");let{name:Z,resolvedSource:T}=await Yd(G,(V)=>{W(V)});I18(Z,{source:T}),Sz();let v=G.source;if(G.source==="github")v=G.repo;if(d("tengu_marketplace_added",{source_type:v}),j)await j();if(W(""),X(!1),H)O(`Successfully added marketplace: ${Z}`);else w({type:"browse-marketplace",targetMarketplace:Z})}catch(Z){let T=x1(Z);if(H6(T),$(T.message),W(""),X(!1),H)O(`Error: ${T.message}`);else O(null)}};return nH6.useEffect(()=>{if(q&&!J.current&&!Y&&!A)J.current=!0,D()},[]),s5.createElement(u,{flexDirection:"column"},s5.createElement(u,{flexDirection:"column",paddingX:1,borderStyle:"round"},s5.createElement(u,{marginBottom:1},s5.createElement(k,{bold:!0},"Add Marketplace")),s5.createElement(u,{flexDirection:"column"},s5.createElement(k,null,"Enter marketplace source:"),s5.createElement(k,{dimColor:!0},"Examples:"),s5.createElement(k,{dimColor:!0}," · owner/repo (GitHub)"),s5.createElement(k,{dimColor:!0}," · git@github.com:owner/repo.git (SSH)"),s5.createElement(k,{dimColor:!0}," · https://example.com/marketplace.json"),s5.createElement(k,{dimColor:!0}," · ./path/to/marketplace"),s5.createElement(u,{marginTop:1},s5.createElement(r3,{value:q,onChange:K,onSubmit:D,columns:80,cursorOffset:_,onChangeCursorOffset:z,focus:!0,showCursor:!0}))),M&&s5.createElement(u,{marginTop:1},s5.createElement(IK,null),s5.createElement(k,null,P||"Adding marketplace to configuration…")),Y&&s5.createElement(u,{marginTop:1},s5.createElement(k,{color:"error"},Y)),A&&s5.createElement(u,{marginTop:1},s5.createElement(k,null,A))),s5.createElement(u,{marginLeft:3},s5.createElement(k,{dimColor:!0,italic:!0},s5.createElement(I1,null,s5.createElement(t8,{shortcut:"Enter",action:"add"}),s5.createElement(W1,{action:"confirm:no",context:"Settings",fallback:"Esc",description:"cancel"})))))}var s5,nH6;var YyK=y(()=>{k8();a5();QK();rK();Q2();CH();s6();y8();E8();Jy();Nw();u47();s5=O6(D6(),1),nH6=O6(D6(),1)});import{randomBytes as PMY}from"crypto";import{readFile as WMY,rename as DMY,unlink as fMY,writeFile as ZMY}from"fs/promises";import{join as GMY}from"path";function $yK(){return GMY(GX(),TMY)}async function kMY(){let q=$yK();try{let K=await WMY(q,{encoding:"utf-8"}),_=r8(K);if(typeof _!=="object"||_===null||!("version"in _)||!("fetchedAt"in _)||!("counts"in _))return N("Install counts cache has invalid structure"),null;let z=_;if(z.version!==m47)return N(`Install counts cache version mismatch (got ${z.version}, expected ${m47})`),null;if(typeof z.fetchedAt!=="string"||!Array.isArray(z.counts))return N("Install counts cache has invalid structure"),null;let Y=new Date(z.fetchedAt).getTime();if(Number.isNaN(Y))return N("Install counts cache has invalid fetchedAt timestamp"),null;if(!z.counts.every((O)=>typeof O==="object"&&O!==null&&typeof O.plugin==="string"&&typeof O.unique_installs==="number"))return N("Install counts cache has malformed entries"),null;if(Date.now()-Y>vMY)return N("Install counts cache is stale (>24h old)"),null;return{version:z.version,fetchedAt:z.fetchedAt,counts:z.counts}}catch(K){if(s1(K)!=="ENOENT")N(`Failed to load install counts cache: ${d6(K)}`);return null}}async function VMY(q){let K=$yK(),_=`${K}.${PMY(8).toString("hex")}.tmp`;try{let z=GX();await X8().mkdir(z);let Y=g6(q,null,2);await ZMY(_,Y,{encoding:"utf-8",mode:384}),await DMY(_,K),N("Install counts cache saved successfully")}catch(z){H6(z);try{await fMY(_)}catch{}}}async function NMY(){N(`Fetching install counts from ${u78}`);let q=performance.now();try{let K=await $1.get(u78,{timeout:1e4});if(!K.data?.plugins||!Array.isArray(K.data.plugins))throw Error("Invalid response format from install counts API");return KD("install_counts",u78,"success",performance.now()-q),K.data.plugins}catch(K){throw KD("install_counts",u78,"failure",performance.now()-q,zC(K)),K}}async function ih6(){let q=await kMY();if(q){N("Using cached install counts"),KD("install_counts",u78,"cache_hit",0);let K=new Map;for(let _ of q.counts)K.set(_.plugin,_.unique_installs);return K}try{let K=await NMY(),_={version:m47,fetchedAt:new Date().toISOString(),counts:K};await VMY(_);let z=new Map;for(let Y of K)z.set(Y.plugin,Y.unique_installs);return z}catch(K){return H6(K),N(`Failed to fetch install counts: ${d6(K)}`),null}}function OF8(q){if(q<1000)return String(q);if(q<1e6){let Y=(q/1000).toFixed(1);return Y.endsWith(".0")?`${Y.slice(0,-2)}K`:`${Y}K`}let _=(q/1e6).toFixed(1);return _.endsWith(".0")?`${_.slice(0,-2)}M`:`${_}M`}var m47=1,TMY="install-counts-cache.json",u78="https://raw.githubusercontent.com/anthropics/claude-plugins-official/refs/heads/stats/stats/plugin-installs.json",vMY=86400000;var wF8=y(()=>{CK();_8();y8();e7();E8();l8();kn6();aV()});function yMY(q,K,_,z){let Y={};for(let $ of q){let A=_[$],O=K[$]??"";if(A?.sensitive===!0&&O===""&&z?.[$]!==void 0)continue;if(A?.type==="number"){if(O.trim()==="")continue;let w=Number(O);Y[$]=Number.isNaN(w)?O:w}else if(A?.type==="boolean")Y[$]=i6(O);else Y[$]=O}return Y}function m78(q){let K=z6(70),{title:_,subtitle:z,configSchema:Y,initialValues:$,onSave:A,onCancel:O}=q,w;if(K[0]!==Y)w=Object.keys(Y),K[0]=Y,K[1]=w;else w=K[1];let j=w,H;if(K[2]!==Y||K[3]!==$)H=(l)=>{if(Y[l]?.sensitive===!0)return"";let A6=$?.[l];return A6===void 0?"":String(A6)},K[2]=Y,K[3]=$,K[4]=H;else H=K[4];let J=H,[M,X]=cD.useState(0),P;if(K[5]===Symbol.for("react.memo_cache_sentinel"))P={},K[5]=P;else P=K[5];let[W,D]=cD.useState(P),f;if(K[6]!==j[0]||K[7]!==J)f=()=>j[0]?J(j[0]):"",K[6]=j[0],K[7]=J,K[8]=f;else f=K[8];let[G,Z]=cD.useState(f),T=j[M],v=T?Y[T]:null,V;if(K[9]===Symbol.for("react.memo_cache_sentinel"))V={context:"Settings"},K[9]=V;else V=K[9];P1("confirm:no",O,V);let E;if(K[10]!==T||K[11]!==M||K[12]!==G||K[13]!==j||K[14]!==J)E=()=>{if(M<j.length-1&&T){D((A6)=>({...A6,[T]:G})),X(RMY);let l=j[M+1];Z(l?J(l):"")}},K[10]=T,K[11]=M,K[12]=G,K[13]=j,K[14]=J,K[15]=E;else E=K[15];let S=E,R;if(K[16]!==Y||K[17]!==T||K[18]!==M||K[19]!==G||K[20]!==j||K[21]!==J||K[22]!==$||K[23]!==A||K[24]!==W)R=()=>{if(!T)return;let l={...W,[T]:G};if(M===j.length-1)A(yMY(j,l,Y,$));else{D(l),X(LMY);let A6=j[M+1];Z(A6?J(A6):"")}},K[16]=Y,K[17]=T,K[18]=M,K[19]=G,K[20]=j,K[21]=J,K[22]=$,K[23]=A,K[24]=W,K[25]=R;else R=K[25];let x=R,I;if(K[26]!==x||K[27]!==S)I={"confirm:nextField":S,"confirm:yes":x},K[26]=x,K[27]=S,K[28]=I;else I=K[28];let B;if(K[29]===Symbol.for("react.memo_cache_sentinel"))B={context:"Confirmation"},K[29]=B;else B=K[29];o7(I,B);let p;if(K[30]===Symbol.for("react.memo_cache_sentinel"))p=(l,A6)=>{if(A6.backspace||A6.delete){Z(EMY);return}if(l&&!A6.ctrl&&!A6.meta&&!A6.tab&&!A6.return)Z((J6)=>J6+l)},K[30]=p;else p=K[30];if(k4(p),!v||!T)return null;let C=v.sensitive===!0,g=v.required===!0,F;if(K[31]!==G||K[32]!==C)F=C?"*".repeat(O1(G)):G,K[31]=G,K[32]=C,K[33]=F;else F=K[33];let U=F,c=v.title||T,K6;if(K[34]!==g)K6=g&&cD.default.createElement(k,{color:"error"}," *"),K[34]=g,K[35]=K6;else K6=K[35];let t;if(K[36]!==c||K[37]!==K6)t=cD.default.createElement(k,{bold:!0},c,K6),K[36]=c,K[37]=K6,K[38]=t;else t=K[38];let q6;if(K[39]!==v.description)q6=v.description&&cD.default.createElement(k,{dimColor:!0},v.description),K[39]=v.description,K[40]=q6;else q6=K[40];let e;if(K[41]===Symbol.for("react.memo_cache_sentinel"))e=cD.default.createElement(k,null,t6.pointerSmall," "),K[41]=e;else e=K[41];let i;if(K[42]!==U)i=cD.default.createElement(k,null,U),K[42]=U,K[43]=i;else i=K[43];let $6;if(K[44]===Symbol.for("react.memo_cache_sentinel"))$6=cD.default.createElement(k,null,"█"),K[44]=$6;else $6=K[44];let M6;if(K[45]!==i)M6=cD.default.createElement(u,{marginTop:1},e,i,$6),K[45]=i,K[46]=M6;else M6=K[46];let j6;if(K[47]!==t||K[48]!==q6||K[49]!==M6)j6=cD.default.createElement(u,{flexDirection:"column"},t,q6,M6),K[47]=t,K[48]=q6,K[49]=M6,K[50]=j6;else j6=K[50];let G6=M+1,w6;if(K[51]!==j.length||K[52]!==G6)w6=cD.default.createElement(k,{dimColor:!0},"Field ",G6," of ",j.length),K[51]=j.length,K[52]=G6,K[53]=w6;else w6=K[53];let o;if(K[54]!==M||K[55]!==j.length)o=M<j.length-1&&cD.default.createElement(k,{dimColor:!0},"Tab: Next field · Enter: Save and continue"),K[54]=M,K[55]=j.length,K[56]=o;else o=K[56];let s;if(K[57]!==M||K[58]!==j.length)s=M===j.length-1&&cD.default.createElement(k,{dimColor:!0},"Enter: Save configuration"),K[57]=M,K[58]=j.length,K[59]=s;else s=K[59];let a;if(K[60]!==w6||K[61]!==o||K[62]!==s)a=cD.default.createElement(u,{flexDirection:"column"},w6,o,s),K[60]=w6,K[61]=o,K[62]=s,K[63]=a;else a=K[63];let n;if(K[64]!==O||K[65]!==z||K[66]!==j6||K[67]!==a||K[68]!==_)n=cD.default.createElement(R1,{title:_,subtitle:z,onCancel:O,isCancelActive:!1},j6,a),K[64]=O,K[65]=z,K[66]=j6,K[67]=a,K[68]=_,K[69]=n;else n=K[69];return n}function EMY(q){return q.slice(0,-1)}function LMY(q){return q+1}function RMY(q){return q+1}var cD;var p47=y(()=>{q8();bq();e4();Q5();s6();Oq();m8();cD=O6(D6(),1)});async function jF8(q){let{enabled:K,disabled:_}=await LM();return[...K,..._].find((z)=>z.repository===q||z.source===q)}function rh6({plugin:q,pluginId:K,onDone:_}){let[z]=Zd.useState(()=>{let j=[],H=b24(q);if(Object.keys(H).length>0)j.push({key:"top-level",title:`Configure ${q.name}`,subtitle:"Plugin options",schema:H,load:()=>VG(K),save:(M)=>$k8(K,M,q.manifest.userConfig)});let J=MR4(q);for(let M of J)j.push({key:`channel:${M.server}`,title:`Configure ${M.displayName}`,subtitle:`Plugin: ${q.name}`,schema:M.configSchema,load:()=>TO6(K,M.server)??void 0,save:(X)=>zk8(K,M.server,X,M.configSchema)});return j}),[Y,$]=Zd.useState(0),A=Zd.useRef(_);if(A.current=_,Zd.useEffect(()=>{if(z.length===0)A.current("skipped")},[z.length]),z.length===0)return null;let O=z[Y];function w(j){try{O.save(j)}catch(J){_("error",d6(J));return}let H=Y+1;if(H<z.length)$(H);else _("configured")}return Zd.createElement(m78,{key:O.key,title:O.title,subtitle:O.subtitle,configSchema:O.schema,initialValues:O.load(),onSave:w,onCancel:()=>_("skipped")})}var Zd;var HF8=y(()=>{y8();gi6();AN6();bj();mu();p47();Zd=O6(D6(),1)});function JF8(){let q=z6(3),K;if(q[0]===Symbol.for("react.memo_cache_sentinel"))K=gfK(),q[0]=K;else K=q[0];let _=K,z;if(q[1]===Symbol.for("react.memo_cache_sentinel"))z=iH6.createElement(k,{color:"claude"},t6.warning," "),q[1]=z;else z=q[1];let Y;if(q[2]===Symbol.for("react.memo_cache_sentinel"))Y=iH6.createElement(u,{marginBottom:1},z,iH6.createElement(k,{dimColor:!0,italic:!0},"Make sure you trust a plugin before installing, updating, or using it. Anthropic does not control what MCP servers, files, or other software are included in plugins and cannot verify that they will work as intended or that they won't change. See each plugin's homepage for more information.",_?` ${_}`:"")),q[2]=Y;else Y=q[2];return Y}var iH6;var B47=y(()=>{q8();bq();s6();qd();iH6=O6(D6(),1)});function T56(q){if(q.entry.source&&typeof q.entry.source==="object"&&"source"in q.entry.source&&q.entry.source.source==="github"&&typeof q.entry.source==="object"&&"repo"in q.entry.source)return q.entry.source.repo;return null}function oh6(q,K){let _=[{label:"Install for you (user scope)",action:"install-user"},{label:"Install for all collaborators on this repository (project scope)",action:"install-project"},{label:"Install for you, in this repo only (local scope)",action:"install-local"}];if(q)_.push({label:"Open homepage",action:"homepage"});if(K)_.push({label:"View on GitHub",action:"github"});return _.push({label:"Back to plugin list",action:"back"}),_}function AyK(q){let K=z6(7),{hasSelection:_}=q,z;if(K[0]!==_)z=_&&wk.createElement(W1,{action:"plugin:install",context:"Plugin",fallback:"i",description:"install",bold:!0}),K[0]=_,K[1]=z;else z=K[1];let Y,$,A;if(K[2]===Symbol.for("react.memo_cache_sentinel"))Y=wk.createElement(W1,{action:"plugin:toggle",context:"Plugin",fallback:"Space",description:"toggle"}),$=wk.createElement(W1,{action:"select:accept",context:"Select",fallback:"Enter",description:"details"}),A=wk.createElement(W1,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"back"}),K[2]=Y,K[3]=$,K[4]=A;else Y=K[2],$=K[3],A=K[4];let O;if(K[5]!==z)O=wk.createElement(u,{marginTop:1},wk.createElement(k,{dimColor:!0,italic:!0},wk.createElement(I1,null,z,Y,$,A))),K[5]=z,K[6]=O;else O=K[6];return O}var wk;var g47=y(()=>{q8();a5();QK();s6();wk=O6(D6(),1)});function ah6({totalItems:q,maxVisible:K=hMY,selectedIndex:_=0}){let z=q>K,Y=fR.useRef(0),$=fR.useMemo(()=>{if(!z)return 0;let G=Y.current;if(_<G)return Y.current=_,_;if(_>=G+K){let v=_-K+1;return Y.current=v,v}let Z=Math.max(0,q-K),T=Math.min(G,Z);return Y.current=T,T},[_,K,z,q]),A=$,O=Math.min($+K,q),w=fR.useCallback((G)=>{if(!z)return G;return G.slice(A,O)},[z,A,O]),j=fR.useCallback((G)=>{return A+G},[A]),H=fR.useCallback((G)=>{return G>=A&&G<O},[A,O]),J=fR.useCallback((G)=>{},[]),M=fR.useCallback(()=>{},[]),X=fR.useCallback(()=>{},[]),P=fR.useCallback((G,Z)=>{let T=Math.max(0,Math.min(G,q-1));Z(T)},[q]),W=fR.useCallback((G,Z)=>{return!1},[]),D=Math.max(1,Math.ceil(q/K));return{currentPage:Math.floor($/K),totalPages:D,startIndex:A,endIndex:O,needsPagination:z,pageSize:K,getVisibleItems:w,toActualIndex:j,isOnCurrentPage:H,goToPage:J,nextPage:M,prevPage:X,handleSelectionChange:P,handlePageNavigation:W,scrollPosition:{current:_+1,total:q,canScrollUp:$>0,canScrollDown:$+K<q}}}var fR,hMY=5;var MF8=y(()=>{fR=O6(D6(),1)});function OyK({error:q,setError:K,result:_,setResult:z,setViewState:Y,onInstallComplete:$,targetMarketplace:A,targetPlugin:O}){let[w,j]=_W.useState("marketplace-list"),[H,J]=_W.useState(null),[M,X]=_W.useState(null),[P,W]=_W.useState([]),[D,f]=_W.useState([]),[G,Z]=_W.useState(!0),[T,v]=_W.useState(null),[V,E]=_W.useState(0),[S,R]=_W.useState(new Set),[x,I]=_W.useState(new Set),B=ah6({totalItems:D.length,selectedIndex:V}),[p,C]=_W.useState(0),[g,F]=_W.useState(!1),[U,c]=_W.useState(null),[K6,t]=_W.useState(null),q6=w1.useCallback(()=>{if(w==="plugin-list")if(A)Y({type:"manage-marketplaces",targetMarketplace:A});else if(P.length===1)Y({type:"menu"});else j("marketplace-list"),J(null),R(new Set);else if(w==="plugin-details")j("plugin-list"),X(null);else Y({type:"menu"})},[w,A,Y,P.length]);P1("confirm:no",q6,{context:"Confirmation"}),_W.useEffect(()=>{async function j6(){try{let G6=await r_(),{marketplaces:w6,failures:o}=await Xp(G6),s=[];for(let{name:l,config:A6,data:J6}of w6)if(J6){let X6=$7(J6.plugins,(f6)=>Zb(eQ(f6.name,l)));s.push({name:l,totalPlugins:J6.plugins.length,installedCount:X6,source:h18(A6.source)})}s.sort((l,A6)=>{if(l.name==="claude-plugin-directory")return-1;if(A6.name==="claude-plugin-directory")return 1;return 0}),W(s);let a=$7(w6,(l)=>l.data!==null),n=Jh6(o,a);if(n)if(n.type==="warning")t(n.message+". Showing available marketplaces.");else throw Error(n.message);if(s.length===1&&!A&&!O){let l=s[0];if(l)J(l.name),j("plugin-list")}if(O){let l=null,A6=null;for(let[J6]of Object.entries(G6)){let X6=await r0(J6);if(X6){let f6=X6.plugins.find((N6)=>N6.name===O);if(f6){let N6=eQ(f6.name,J6);l={entry:f6,marketplaceName:J6,pluginId:N6,isInstalled:Xh6(N6)},A6=J6;break}}}if(l&&A6){let J6=l.pluginId;if(Xh6(J6))K(`Plugin '${J6}' is already installed globally. Use '/plugin' to manage existing plugins.`);else J(A6),X(l),j("plugin-details")}else K(`Plugin "${O}" not found in any marketplace`)}else if(A)if(s.some((A6)=>A6.name===A))J(A),j("plugin-list");else K(`Marketplace "${A}" not found`)}catch(G6){K(G6 instanceof Error?G6.message:"Failed to load marketplaces")}finally{Z(!1)}}j6()},[K,A,O]),_W.useEffect(()=>{if(!H)return;let j6=!1;async function G6(w6){Z(!0);try{let o=await r0(w6);if(j6)return;if(!o)throw Error(`Failed to load marketplace: ${w6}`);let s=[];for(let a of o.plugins){let n=eQ(a.name,w6);if(zR(n))continue;s.push({entry:a,marketplaceName:w6,pluginId:n,isInstalled:Xh6(n)})}try{let a=await ih6();if(j6)return;if(v(a),a)s.sort((n,l)=>{let A6=a.get(n.pluginId)??0,J6=a.get(l.pluginId)??0;if(A6!==J6)return J6-A6;return n.entry.name.localeCompare(l.entry.name)});else s.sort((n,l)=>n.entry.name.localeCompare(l.entry.name))}catch(a){if(j6)return;N(`Failed to fetch install counts: ${d6(a)}`),s.sort((n,l)=>n.entry.name.localeCompare(l.entry.name))}f(s),E(0),R(new Set)}catch(o){if(j6)return;K(o instanceof Error?o.message:"Failed to load plugins")}finally{Z(!1)}}return G6(H),()=>{j6=!0}},[H,K]);let e=async()=>{if(S.size===0)return;let j6=D.filter((s)=>S.has(s.pluginId));I(new Set(j6.map((s)=>s.pluginId)));let G6=0,w6=0,o=[];for(let s of j6){let a=await K56({pluginId:s.pluginId,entry:s.entry,marketplaceName:s.marketplaceName,scope:"user"});if(a.success)G6++;else w6++,o.push({name:s.entry.name,reason:a.error})}if(I(new Set),R(new Set),Sz(),w6===0){let s=`✓ Installed ${G6} ${A7(G6,"plugin")}. Run /reload-plugins to activate.`;z(s)}else if(G6===0)K(`Failed to install: ${Hh6(o,!0)}`);else{let s=`✓ Installed ${G6} of ${G6+w6} plugins. Failed: ${Hh6(o,!1)}. Run /reload-plugins to activate successfully installed plugins.`;z(s)}if(G6>0){if($)await $()}Y({type:"menu"})},i=async(j6,G6="user")=>{F(!0),c(null);let w6=await K56({pluginId:j6.pluginId,entry:j6.entry,marketplaceName:j6.marketplaceName,scope:G6});if(w6.success){let o=await jF8(j6.pluginId);if(o){F(!1),j({type:"plugin-options",plugin:o,pluginId:j6.pluginId});return}if(z(w6.message),$)await $();Y({type:"menu"})}else F(!1),c(w6.error)};_W.useEffect(()=>{if(q)z(q)},[q,z]),o7({"select:previous":()=>{if(V>0)E(V-1)},"select:next":()=>{if(V<P.length-1)E(V+1)},"select:accept":()=>{let j6=P[V];if(j6)J(j6.name),j("plugin-list")}},{context:"Select",isActive:w==="marketplace-list"}),o7({"select:previous":()=>{if(V>0)B.handleSelectionChange(V-1,E)},"select:next":()=>{if(V<D.length-1)B.handleSelectionChange(V+1,E)},"select:accept":()=>{if(V===D.length&&S.size>0)e();else if(V<D.length){let j6=D[V];if(j6)if(j6.isInstalled)Y({type:"manage-plugins",targetPlugin:j6.entry.name,targetMarketplace:j6.marketplaceName});else X(j6),j("plugin-details"),C(0),c(null)}}},{context:"Select",isActive:w==="plugin-list"}),o7({"plugin:toggle":()=>{if(V<D.length){let j6=D[V];if(j6&&!j6.isInstalled){let G6=new Set(S);if(G6.has(j6.pluginId))G6.delete(j6.pluginId);else G6.add(j6.pluginId);R(G6)}}},"plugin:install":()=>{if(S.size>0)e()}},{context:"Plugin",isActive:w==="plugin-list"});let $6=w1.useMemo(()=>{if(!M)return[];let j6=M.entry.homepage,G6=T56(M);return oh6(j6,G6)},[M]);if(o7({"select:previous":()=>{if(p>0)C(p-1)},"select:next":()=>{if(p<$6.length-1)C(p+1)},"select:accept":()=>{if(!M)return;let j6=$6[p]?.action,G6=M.entry.homepage,w6=T56(M);if(j6==="install-user")i(M,"user");else if(j6==="install-project")i(M,"project");else if(j6==="install-local")i(M,"local");else if(j6==="homepage"&&G6)m3(G6);else if(j6==="github"&&w6)m3(`https://github.com/${w6}`);else if(j6==="back")j("plugin-list"),X(null)}},{context:"Select",isActive:w==="plugin-details"&&!!M}),typeof w==="object"&&w.type==="plugin-options"){let w6=function(o){if(z(o),$)$();Y({type:"menu"})},{plugin:j6,pluginId:G6}=w;return w1.createElement(rh6,{plugin:j6,pluginId:G6,onDone:(o,s)=>{switch(o){case"configured":w6(`✓ Installed and configured ${j6.name}. Run /reload-plugins to apply.`);break;case"skipped":w6(`✓ Installed ${j6.name}. Run /reload-plugins to apply.`);break;case"error":w6(`Installed but failed to save config: ${s}`);break}}})}if(G)return w1.createElement(k,null,"Loading…");if(q)return w1.createElement(k,{color:"error"},q);if(w==="marketplace-list"){if(P.length===0)return w1.createElement(u,{flexDirection:"column"},w1.createElement(u,{marginBottom:1},w1.createElement(k,{bold:!0},"Select marketplace")),w1.createElement(k,null,"No marketplaces configured."),w1.createElement(k,{dimColor:!0},"Add a marketplace first using ","'Add marketplace'","."),w1.createElement(u,{marginTop:1,paddingLeft:1},w1.createElement(k,{dimColor:!0},w1.createElement(W1,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"go back"}))));return w1.createElement(u,{flexDirection:"column"},w1.createElement(u,{marginBottom:1},w1.createElement(k,{bold:!0},"Select marketplace")),K6&&w1.createElement(u,{marginBottom:1,flexDirection:"column"},w1.createElement(k,{color:"warning"},t6.warning," ",K6)),P.map((j6,G6)=>w1.createElement(u,{key:j6.name,flexDirection:"column",marginBottom:G6<P.length-1?1:0},w1.createElement(u,null,w1.createElement(k,{color:V===G6?"suggestion":void 0},V===G6?t6.pointer:" "," ",j6.name)),w1.createElement(u,{marginLeft:2},w1.createElement(k,{dimColor:!0},j6.totalPlugins," ",A7(j6.totalPlugins,"plugin")," available",j6.installedCount>0&&` · ${j6.installedCount} already installed`,j6.source&&` · ${j6.source}`)))),w1.createElement(u,{marginTop:1},w1.createElement(k,{dimColor:!0,italic:!0},w1.createElement(I1,null,w1.createElement(W1,{action:"select:accept",context:"Select",fallback:"Enter",description:"select"}),w1.createElement(W1,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"go back"})))))}if(w==="plugin-details"&&M){let j6=M.entry.homepage,G6=T56(M),w6=oh6(j6,G6);return w1.createElement(u,{flexDirection:"column"},w1.createElement(u,{marginBottom:1},w1.createElement(k,{bold:!0},"Plugin Details")),w1.createElement(u,{flexDirection:"column",marginBottom:1},w1.createElement(k,{bold:!0},M.entry.name),M.entry.version&&w1.createElement(k,{dimColor:!0},"Version: ",M.entry.version),M.entry.description&&w1.createElement(u,{marginTop:1},w1.createElement(k,null,M.entry.description)),M.entry.author&&w1.createElement(u,{marginTop:1},w1.createElement(k,{dimColor:!0},"By:"," ",typeof M.entry.author==="string"?M.entry.author:M.entry.author.name))),w1.createElement(u,{flexDirection:"column",marginBottom:1},w1.createElement(k,{bold:!0},"Will install:"),M.entry.commands&&w1.createElement(k,{dimColor:!0},"· Commands:"," ",Array.isArray(M.entry.commands)?M.entry.commands.join(", "):Object.keys(M.entry.commands).join(", ")),M.entry.agents&&w1.createElement(k,{dimColor:!0},"· Agents:"," ",Array.isArray(M.entry.agents)?M.entry.agents.join(", "):Object.keys(M.entry.agents).join(", ")),M.entry.hooks&&w1.createElement(k,{dimColor:!0},"· Hooks: ",Object.keys(M.entry.hooks).join(", ")),M.entry.mcpServers&&w1.createElement(k,{dimColor:!0},"· MCP Servers:"," ",Array.isArray(M.entry.mcpServers)?M.entry.mcpServers.join(", "):typeof M.entry.mcpServers==="object"?Object.keys(M.entry.mcpServers).join(", "):"configured"),!M.entry.commands&&!M.entry.agents&&!M.entry.hooks&&!M.entry.mcpServers&&w1.createElement(w1.Fragment,null,typeof M.entry.source==="object"&&"source"in M.entry.source&&(M.entry.source.source==="github"||M.entry.source.source==="url"||M.entry.source.source==="npm"||M.entry.source.source==="pip")?w1.createElement(k,{dimColor:!0},"· Component summary not available for remote plugin"):w1.createElement(k,{dimColor:!0},"· Components will be discovered at installation"))),w1.createElement(JF8,null),U&&w1.createElement(u,{marginBottom:1},w1.createElement(k,{color:"error"},"Error: ",U)),w1.createElement(u,{flexDirection:"column"},w6.map((o,s)=>w1.createElement(u,{key:o.action},p===s&&w1.createElement(k,null,"> "),p!==s&&w1.createElement(k,null," "),w1.createElement(k,{bold:p===s},g&&o.action==="install"?"Installing…":o.label)))),w1.createElement(u,{marginTop:1,paddingLeft:1},w1.createElement(k,{dimColor:!0},w1.createElement(I1,null,w1.createElement(W1,{action:"select:accept",context:"Select",fallback:"Enter",description:"select"}),w1.createElement(W1,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"back"})))))}if(D.length===0)return w1.createElement(u,{flexDirection:"column"},w1.createElement(u,{marginBottom:1},w1.createElement(k,{bold:!0},"Install plugins")),w1.createElement(k,{dimColor:!0},"No new plugins available to install."),w1.createElement(k,{dimColor:!0},"All plugins from this marketplace are already installed."),w1.createElement(u,{marginLeft:3},w1.createElement(k,{dimColor:!0,italic:!0},w1.createElement(W1,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"go back"}))));let M6=B.getVisibleItems(D);return w1.createElement(u,{flexDirection:"column"},w1.createElement(u,{marginBottom:1},w1.createElement(k,{bold:!0},"Install Plugins")),B.scrollPosition.canScrollUp&&w1.createElement(u,null,w1.createElement(k,{dimColor:!0}," ",t6.arrowUp," more above")),M6.map((j6,G6)=>{let w6=B.toActualIndex(G6),o=V===w6,s=S.has(j6.pluginId),a=x.has(j6.pluginId),n=G6===M6.length-1;return w1.createElement(u,{key:j6.pluginId,flexDirection:"column",marginBottom:n&&!q?0:1},w1.createElement(u,null,w1.createElement(k,{color:o?"suggestion":void 0},o?t6.pointer:" "," "),w1.createElement(k,{color:j6.isInstalled?"success":void 0},j6.isInstalled?t6.tick:a?t6.ellipsis:s?t6.radioOn:t6.radioOff," ",j6.entry.name,j6.entry.category&&w1.createElement(k,{dimColor:!0}," [",j6.entry.category,"]"),j6.entry.tags?.includes("community-managed")&&w1.createElement(k,{dimColor:!0}," [Community Managed]"),j6.isInstalled&&w1.createElement(k,{dimColor:!0}," (installed)"),T&&H===C2&&w1.createElement(k,{dimColor:!0}," · ",OF8(T.get(j6.pluginId)??0)," ","installs"))),j6.entry.description&&w1.createElement(u,{marginLeft:4},w1.createElement(k,{dimColor:!0},T4(j6.entry.description,60)),j6.entry.version&&w1.createElement(k,{dimColor:!0}," · v",j6.entry.version)))}),B.scrollPosition.canScrollDown&&w1.createElement(u,null,w1.createElement(k,{dimColor:!0}," ",t6.arrowDown," more below")),q&&w1.createElement(u,{marginTop:1},w1.createElement(k,{color:"error"},t6.cross," ",q)),w1.createElement(AyK,{hasSelection:S.size>0}))}var w1,_W;var wyK=y(()=>{bq();a5();QK();s6();Oq();hH();_8();y8();Jy();wF8();pX();qd();Nw();oi();_56();Sj6();P98();HF8();B47();g47();MF8();w1=O6(D6(),1),_W=O6(D6(),1)});function jyK({error:q,setError:K,result:_,setResult:z,setViewState:Y,onInstallComplete:$,onSearchModeChange:A,targetPlugin:O}){let[w,j]=lH.useState("plugin-list"),[H,J]=lH.useState(null),[M,X]=lH.useState([]),[P,W]=lH.useState(!0),[D,f]=lH.useState(null),[G,Z]=lH.useState(!1),T=lH.useCallback((n)=>{Z(n),A?.(n)},[A]),{query:v,setQuery:V,cursorOffset:E}=XR({isActive:w==="plugin-list"&&G&&!P,onExit:()=>{T(!1)}}),S=CO(),{columns:R}=t1(),x=lH.useMemo(()=>{if(!v)return M;let n=v.toLowerCase();return M.filter((l)=>l.entry.name.toLowerCase().includes(n)||l.entry.description?.toLowerCase().includes(n)||l.marketplaceName.toLowerCase().includes(n))},[M,v]),[I,B]=lH.useState(0),[p,C]=lH.useState(new Set),[g,F]=lH.useState(new Set),U=ah6({totalItems:x.length,selectedIndex:I});lH.useEffect(()=>{B(0)},[v]);let[c,K6]=lH.useState(0),[t,q6]=lH.useState(!1),[e,i]=lH.useState(null),[$6,M6]=lH.useState(null),[j6,G6]=lH.useState(null);lH.useEffect(()=>{async function n(){try{let l=await r_(),{marketplaces:A6,failures:J6}=await Xp(l),X6=[];for(let{name:y6,data:T6}of A6)if(T6)for(let n6 of T6.plugins){let o6=eQ(n6.name,y6);X6.push({entry:n6,marketplaceName:y6,pluginId:o6,isInstalled:Xh6(o6)})}let f6=X6.filter((y6)=>!y6.isInstalled&&!zR(y6.pluginId));try{let y6=await ih6();if(f(y6),y6)f6.sort((T6,n6)=>{let o6=y6.get(T6.pluginId)??0,I6=y6.get(n6.pluginId)??0;if(o6!==I6)return I6-o6;return T6.entry.name.localeCompare(n6.entry.name)});else f6.sort((T6,n6)=>T6.entry.name.localeCompare(n6.entry.name))}catch(y6){N(`Failed to fetch install counts: ${d6(y6)}`),f6.sort((T6,n6)=>T6.entry.name.localeCompare(n6.entry.name))}X(f6);let N6=Object.keys(l).length;if(f6.length===0){let y6=await UfK({configuredMarketplaceCount:N6,failedMarketplaceCount:J6.length});G6(y6)}let Z6=$7(A6,(y6)=>y6.data!==null),V6=Jh6(J6,Z6);if(V6)if(V6.type==="warning")M6(V6.message+". Showing available plugins.");else throw Error(V6.message);if(O){let y6=X6.find((T6)=>T6.entry.name===O);if(y6)if(y6.isInstalled)K(`Plugin '${y6.pluginId}' is already installed. Use '/plugin' to manage existing plugins.`);else J(y6),j("plugin-details");else K(`Plugin "${O}" not found in any marketplace`)}}catch(l){K(l instanceof Error?l.message:"Failed to load plugins")}finally{W(!1)}}n()},[K,O]);let w6=async()=>{if(p.size===0)return;let n=M.filter((X6)=>p.has(X6.pluginId));F(new Set(n.map((X6)=>X6.pluginId)));let l=0,A6=0,J6=[];for(let X6 of n){let f6=await K56({pluginId:X6.pluginId,entry:X6.entry,marketplaceName:X6.marketplaceName,scope:"user"});if(f6.success)l++;else A6++,J6.push({name:X6.entry.name,reason:f6.error})}if(F(new Set),C(new Set),Sz(),A6===0){let X6=`✓ Installed ${l} ${A7(l,"plugin")}. Run /reload-plugins to activate.`;z(X6)}else if(l===0)K(`Failed to install: ${Hh6(J6,!0)}`);else{let X6=`✓ Installed ${l} of ${l+A6} plugins. Failed: ${Hh6(J6,!1)}. Run /reload-plugins to activate successfully installed plugins.`;z(X6)}if(l>0){if($)await $()}Y({type:"menu"})},o=async(n,l="user")=>{q6(!0),i(null);let A6=await K56({pluginId:n.pluginId,entry:n.entry,marketplaceName:n.marketplaceName,scope:l});if(A6.success){let J6=await jF8(n.pluginId);if(J6){q6(!1),j({type:"plugin-options",plugin:J6,pluginId:n.pluginId});return}if(z(A6.message),$)await $();Y({type:"menu"})}else q6(!1),i(A6.error)};lH.useEffect(()=>{if(q)z(q)},[q,z]),P1("confirm:no",()=>{j("plugin-list"),J(null)},{context:"Confirmation",isActive:w==="plugin-details"}),P1("confirm:no",()=>{Y({type:"menu"})},{context:"Confirmation",isActive:w==="plugin-list"&&!G}),k4((n,l)=>{let A6=!l.ctrl&&!l.meta;if(!G){if(n==="/"&&A6)T(!0),V("");else if(A6&&n.length>0&&!/^\s+$/.test(n)&&n!=="j"&&n!=="k"&&n!=="i")T(!0),V(n)}},{isActive:w==="plugin-list"&&!P}),o7({"select:previous":()=>{if(I===0)T(!0);else U.handleSelectionChange(I-1,B)},"select:next":()=>{if(I<x.length-1)U.handleSelectionChange(I+1,B)},"select:accept":()=>{if(I===x.length&&p.size>0)w6();else if(I<x.length){let n=x[I];if(n)if(n.isInstalled)Y({type:"manage-plugins",targetPlugin:n.entry.name,targetMarketplace:n.marketplaceName});else J(n),j("plugin-details"),K6(0),i(null)}}},{context:"Select",isActive:w==="plugin-list"&&!G}),o7({"plugin:toggle":()=>{if(I<x.length){let n=x[I];if(n&&!n.isInstalled){let l=new Set(p);if(l.has(n.pluginId))l.delete(n.pluginId);else l.add(n.pluginId);C(l)}}},"plugin:install":()=>{if(p.size>0)w6()}},{context:"Plugin",isActive:w==="plugin-list"&&!G});let s=A1.useMemo(()=>{if(!H)return[];let n=H.entry.homepage,l=T56(H);return oh6(n,l)},[H]);if(o7({"select:previous":()=>{if(c>0)K6(c-1)},"select:next":()=>{if(c<s.length-1)K6(c+1)},"select:accept":()=>{if(!H)return;let n=s[c]?.action,l=H.entry.homepage,A6=T56(H);if(n==="install-user")o(H,"user");else if(n==="install-project")o(H,"project");else if(n==="install-local")o(H,"local");else if(n==="homepage"&&l)m3(l);else if(n==="github"&&A6)m3(`https://github.com/${A6}`);else if(n==="back")j("plugin-list"),J(null)}},{context:"Select",isActive:w==="plugin-details"&&!!H}),typeof w==="object"&&w.type==="plugin-options"){let A6=function(J6){if(z(J6),$)$();Y({type:"menu"})},{plugin:n,pluginId:l}=w;return A1.createElement(rh6,{plugin:n,pluginId:l,onDone:(J6,X6)=>{switch(J6){case"configured":A6(`✓ Installed and configured ${n.name}. Run /reload-plugins to apply.`);break;case"skipped":A6(`✓ Installed ${n.name}. Run /reload-plugins to apply.`);break;case"error":A6(`Installed but failed to save config: ${X6}`);break}}})}if(P)return A1.createElement(k,null,"Loading…");if(q)return A1.createElement(k,{color:"error"},q);if(w==="plugin-details"&&H){let n=H.entry.homepage,l=T56(H),A6=oh6(n,l);return A1.createElement(u,{flexDirection:"column"},A1.createElement(u,{marginBottom:1},A1.createElement(k,{bold:!0},"Plugin details")),A1.createElement(u,{flexDirection:"column",marginBottom:1},A1.createElement(k,{bold:!0},H.entry.name),A1.createElement(k,{dimColor:!0},"from ",H.marketplaceName),H.entry.version&&A1.createElement(k,{dimColor:!0},"Version: ",H.entry.version),H.entry.description&&A1.createElement(u,{marginTop:1},A1.createElement(k,null,H.entry.description)),H.entry.author&&A1.createElement(u,{marginTop:1},A1.createElement(k,{dimColor:!0},"By:"," ",typeof H.entry.author==="string"?H.entry.author:H.entry.author.name))),A1.createElement(JF8,null),e&&A1.createElement(u,{marginBottom:1},A1.createElement(k,{color:"error"},"Error: ",e)),A1.createElement(u,{flexDirection:"column"},A6.map((J6,X6)=>A1.createElement(u,{key:J6.action},c===X6&&A1.createElement(k,null,"> "),c!==X6&&A1.createElement(k,null," "),A1.createElement(k,{bold:c===X6},t&&J6.action.startsWith("install-")?"Installing…":J6.label)))),A1.createElement(u,{marginTop:1},A1.createElement(k,{dimColor:!0},A1.createElement(I1,null,A1.createElement(W1,{action:"select:accept",context:"Select",fallback:"Enter",description:"select"}),A1.createElement(W1,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"back"})))))}if(M.length===0)return A1.createElement(u,{flexDirection:"column"},A1.createElement(u,{marginBottom:1},A1.createElement(k,{bold:!0},"Discover plugins")),A1.createElement(CMY,{reason:j6}),A1.createElement(u,{marginTop:1},A1.createElement(k,{dimColor:!0,italic:!0},"Esc to go back")));let a=U.getVisibleItems(x);return A1.createElement(u,{flexDirection:"column"},A1.createElement(u,null,A1.createElement(k,{bold:!0},"Discover plugins"),U.needsPagination&&A1.createElement(k,{dimColor:!0}," ","(",U.scrollPosition.current,"/",U.scrollPosition.total,")")),A1.createElement(u,{marginBottom:1},A1.createElement(Tp,{query:v,isFocused:G,isTerminalFocused:S,width:R-4,cursorOffset:E})),$6&&A1.createElement(u,{marginBottom:1},A1.createElement(k,{color:"warning"},t6.warning," ",$6)),x.length===0&&v&&A1.createElement(u,{marginBottom:1},A1.createElement(k,{dimColor:!0},'No plugins match "',v,'"')),U.scrollPosition.canScrollUp&&A1.createElement(u,null,A1.createElement(k,{dimColor:!0}," ",t6.arrowUp," more above")),a.map((n,l)=>{let A6=U.toActualIndex(l),J6=I===A6,X6=p.has(n.pluginId),f6=g.has(n.pluginId),N6=l===a.length-1;return A1.createElement(u,{key:`${U.startIndex}-${n.pluginId}`,flexDirection:"column",marginBottom:N6&&!q?0:1},A1.createElement(u,null,A1.createElement(k,{color:J6&&!G?"suggestion":void 0},J6&&!G?t6.pointer:" "," "),A1.createElement(k,null,f6?t6.ellipsis:X6?t6.radioOn:t6.radioOff," ",n.entry.name,A1.createElement(k,{dimColor:!0}," · ",n.marketplaceName),n.entry.tags?.includes("community-managed")&&A1.createElement(k,{dimColor:!0}," [Community Managed]"),D&&n.marketplaceName===C2&&A1.createElement(k,{dimColor:!0}," · ",OF8(D.get(n.pluginId)??0)," ","installs"))),n.entry.description&&A1.createElement(u,{marginLeft:4},A1.createElement(k,{dimColor:!0},T4(n.entry.description,60))))}),U.scrollPosition.canScrollDown&&A1.createElement(u,null,A1.createElement(k,{dimColor:!0}," ",t6.arrowDown," more below")),q&&A1.createElement(u,{marginTop:1},A1.createElement(k,{color:"error"},t6.cross," ",q)),A1.createElement(SMY,{hasSelection:p.size>0,canToggle:I<x.length&&!x[I]?.isInstalled}))}function SMY(q){let K=z6(10),{hasSelection:_,canToggle:z}=q,Y;if(K[0]!==_)Y=_&&A1.createElement(W1,{action:"plugin:install",context:"Plugin",fallback:"i",description:"install",bold:!0}),K[0]=_,K[1]=Y;else Y=K[1];let $;if(K[2]===Symbol.for("react.memo_cache_sentinel"))$=A1.createElement(k,null,"type to search"),K[2]=$;else $=K[2];let A;if(K[3]!==z)A=z&&A1.createElement(W1,{action:"plugin:toggle",context:"Plugin",fallback:"Space",description:"toggle"}),K[3]=z,K[4]=A;else A=K[4];let O,w;if(K[5]===Symbol.for("react.memo_cache_sentinel"))O=A1.createElement(W1,{action:"select:accept",context:"Select",fallback:"Enter",description:"details"}),w=A1.createElement(W1,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"back"}),K[5]=O,K[6]=w;else O=K[5],w=K[6];let j;if(K[7]!==Y||K[8]!==A)j=A1.createElement(u,{marginTop:1},A1.createElement(k,{dimColor:!0,italic:!0},A1.createElement(I1,null,Y,$,A,O,w))),K[7]=Y,K[8]=A,K[9]=j;else j=K[9];return j}function CMY(q){let K=z6(6),{reason:_}=q;switch(_){case"git-not-installed":{let z;if(K[0]===Symbol.for("react.memo_cache_sentinel"))z=A1.createElement(A1.Fragment,null,A1.createElement(k,{dimColor:!0},"Git is required to install marketplaces."),A1.createElement(k,{dimColor:!0},"Please install git and restart Claude Code.")),K[0]=z;else z=K[0];return z}case"all-blocked-by-policy":{let z;if(K[1]===Symbol.for("react.memo_cache_sentinel"))z=A1.createElement(A1.Fragment,null,A1.createElement(k,{dimColor:!0},"Your organization policy does not allow any external marketplaces."),A1.createElement(k,{dimColor:!0},"Contact your administrator.")),K[1]=z;else z=K[1];return z}case"policy-restricts-sources":{let z;if(K[2]===Symbol.for("react.memo_cache_sentinel"))z=A1.createElement(A1.Fragment,null,A1.createElement(k,{dimColor:!0},"Your organization restricts which marketplaces can be added."),A1.createElement(k,{dimColor:!0},"Switch to the Marketplaces tab to view allowed sources.")),K[2]=z;else z=K[2];return z}case"all-marketplaces-failed":{let z;if(K[3]===Symbol.for("react.memo_cache_sentinel"))z=A1.createElement(A1.Fragment,null,A1.createElement(k,{dimColor:!0},"Failed to load marketplace data."),A1.createElement(k,{dimColor:!0},"Check your network connection.")),K[3]=z;else z=K[3];return z}case"all-plugins-installed":{let z;if(K[4]===Symbol.for("react.memo_cache_sentinel"))z=A1.createElement(A1.Fragment,null,A1.createElement(k,{dimColor:!0},"All available plugins are already installed."),A1.createElement(k,{dimColor:!0},"Check for new plugins later or add more marketplaces.")),K[4]=z;else z=K[4];return z}case"no-marketplaces-configured":default:{let z;if(K[5]===Symbol.for("react.memo_cache_sentinel"))z=A1.createElement(A1.Fragment,null,A1.createElement(k,{dimColor:!0},"No plugins available."),A1.createElement(k,{dimColor:!0},"Add a marketplace first using the Marketplaces tab.")),K[5]=z;else z=K[5];return z}}}var A1,lH;var HyK=y(()=>{q8();bq();a5();QK();gH6();H56();t4();s6();Oq();hH();_8();y8();Jy();wF8();pX();qd();Nw();oi();_56();Sj6();P98();HF8();B47();g47();MF8();A1=O6(D6(),1),lH=O6(D6(),1)});import{dirname as bMY,join as JyK}from"path";function F47(q){if(!e0.includes(q))throw Error(`Invalid scope "${q}". Must be one of: ${e0.join(", ")}`)}function sh6(q){return e0.includes(q)}function MyK(q){return q==="project"||q==="local"?r1():void 0}function XyK(q){return v1("projectSettings")?.enabledPlugins?.[q]===!0}function xMY(q){let K=q.includes("@"),_=["local","project","user"];for(let z of _){let Y=v1(hF(z))?.enabledPlugins;if(!Y)continue;for(let $ of Object.keys(Y))if(K?$===q:$.startsWith(`${q}@`))return{pluginId:$,scope:z}}return null}function IMY(q,K){let{name:_,marketplace:z}=Z4(q);return K.find((Y)=>{if(Y.name===q||Y.name===_)return!0;if(z&&Y.source)return Y.name===_&&Y.source.includes(`@${z}`);return!1})}function uMY(q){let{name:K}=Z4(q),_=cX();if(_.plugins[q]?.length)return{pluginId:q,pluginName:K};let z=Object.keys(_.plugins).find((Y)=>{let{name:$}=Z4(Y);return $===K&&(_.plugins[Y]?.length??0)>0});if(z)return{pluginId:z,pluginName:K};return null}function XF8(q){let _=cX().plugins[q];if(!_||_.length===0)return{scope:"user"};let z=r1(),Y=_.find((O)=>O.scope==="local"&&O.projectPath===z);if(Y)return{scope:Y.scope,projectPath:Y.projectPath};let $=_.find((O)=>O.scope==="project"&&O.projectPath===z);if($)return{scope:$.scope,projectPath:$.projectPath};let A=_.find((O)=>O.scope==="user");if(A)return{scope:A.scope};return{scope:_[0].scope,projectPath:_[0].projectPath}}async function PyK(q,K="user"){F47(K);let{name:_,marketplace:z}=Z4(q),Y,$,A;if(z){let H=await aG(q);if(H)Y=H.entry,$=z,A=H.marketplaceInstallLocation}else{let H=await r_();for(let[J,M]of Object.entries(H))try{let P=(await r0(J)).plugins.find((W)=>W.name===_);if(P){Y=P,$=J,A=M.installLocation;break}}catch(X){H6(x1(X));continue}}if(!Y||!$){let H=z?`marketplace "${z}"`:"any configured marketplace";return{success:!1,message:`Plugin "${_}" not found in ${H}`}}let O=Y,w=`${O.name}@${$}`,j=await s17({pluginId:w,entry:O,scope:K,marketplaceInstallLocation:A});if(!j.ok)switch(j.reason){case"local-source-no-location":return{success:!1,message:`Cannot install local plugin "${j.pluginName}" without marketplace install location`};case"settings-write-failed":return{success:!1,message:`Failed to update settings: ${j.message}`};case"resolution-failed":return{success:!1,message:a17(j.resolution)};case"blocked-by-policy":return{success:!1,message:`Plugin "${j.pluginName}" is blocked by your organization's policy and cannot be installed`};case"dependency-blocked-by-policy":return{success:!1,message:`Plugin "${j.pluginName}" depends on "${j.blockedDependency}", which is blocked by your organization's policy`}}return{success:!0,message:`Successfully installed plugin: ${w} (scope: ${K})${j.depNote}`,pluginId:w,pluginName:O.name,scope:K}}async function _s(q,K="user",_=!0){F47(K);let{enabled:z,disabled:Y}=await LM(),$=[...z,...Y],A=IMY(q,$),O=hF(K),w=v1(O),j,H;if(A)j=Object.keys(w?.enabledPlugins??{}).find((V)=>V===q||V===A.name||V.startsWith(`${A.name}@`))??(q.includes("@")?q:A.name),H=A.name;else{let V=uMY(q);if(!V)return{success:!1,message:`Plugin "${q}" not found in installed plugins`};j=V.pluginId,H=V.pluginName}let J=MyK(K),X=cX().plugins[j],P=X?.find((V)=>V.scope===K&&V.projectPath===J);if(!P){let{scope:V}=XF8(j);if(V!==K&&X&&X.length>0){if(V==="project")return{success:!1,message:`Plugin "${q}" is enabled at project scope (.claude/settings.json, shared with your team). To disable just for you: claude plugin disable ${q} --scope local`};return{success:!1,message:`Plugin "${q}" is installed in ${V} scope, not ${K}. Use --scope ${V} to uninstall.`}}return{success:!1,message:`Plugin "${q}" is not installed in ${K} scope. Use --scope to specify the correct scope.`}}let W=P.installPath,D={...w?.enabledPlugins};D[j]=void 0,W7(O,{enabledPlugins:D}),Sz(),$0K(j,K,J);let G=cX().plugins[j],Z=!G||G.length===0;if(Z&&W)await wh6(W);if(Z){if(Ak8(j),_)await WT8(j)}let T=Lh1(j,$),v=Rh1(T);return{success:!0,message:`Successfully uninstalled plugin: ${H} (scope: ${K})${v}`,pluginId:j,pluginName:H,scope:K,reverseDependents:T.length>0?T:void 0}}async function U47(q,K,_){let z=K?"enable":"disable";if(jK4(q)){let{error:D}=W7("userSettings",{enabledPlugins:{...v1("userSettings")?.enabledPlugins,[q]:K}});if(D)return{success:!1,message:`Failed to ${z} built-in plugin: ${D.message}`};Sz();let{name:f}=Z4(q);return{success:!0,message:`Successfully ${z}d built-in plugin: ${f}`,pluginId:q,pluginName:f,scope:"user"}}if(_)F47(_);let Y,$,A=xMY(q);if(_)if($=_,A)Y=A.pluginId;else if(q.includes("@"))Y=q;else return{success:!1,message:`Plugin "${q}" not found in settings. Use plugin@marketplace format.`};else if(A)Y=A.pluginId,$=A.scope;else if(q.includes("@"))Y=q,$="user";else return{success:!1,message:`Plugin "${q}" not found in any editable settings scope. Use plugin@marketplace format.`};if(K&&zR(Y))return{success:!1,message:`Plugin "${Y}" is blocked by your organization's policy and cannot be enabled`};let O=hF($),w=v1(O)?.enabledPlugins?.[Y],j={user:0,project:1,local:2},H=_&&A&&j[_]>j[A.scope];if(_&&w===void 0&&A&&A.scope!==_&&!H)return{success:!1,message:`Plugin "${q}" is installed at ${A.scope} scope, not ${_}. Use --scope ${A.scope} or omit --scope to auto-detect.`};let J=_&&!H?w===!0:G56().has(Y);if(K===J)return{success:!1,message:`Plugin "${q}" is already ${K?"enabled":"disabled"}${_?` at ${_} scope`:""}`};let M;if(!K){let{enabled:D,disabled:f}=await LM(),G=Lh1(Y,[...D,...f]);if(G.length>0)M=G}let{error:X}=W7(O,{enabledPlugins:{...v1(O)?.enabledPlugins,[Y]:K}});if(X)return{success:!1,message:`Failed to ${z} plugin: ${X.message}`};Sz();let{name:P}=Z4(Y),W=Rh1(M);return{success:!0,message:`Successfully ${z}d plugin: ${P} (scope: ${$})${W}`,pluginId:Y,pluginName:P,scope:$,reverseDependents:M}}async function v56(q,K){return U47(q,!0,K)}async function th6(q,K){return U47(q,!1,K)}async function WyK(){let q=G56();if(q.size===0)return{success:!0,message:"No enabled plugins to disable"};let K=[],_=[];for(let[z]of q){let Y=await U47(z,!1);if(Y.success)K.push(z);else _.push(`${z}: ${Y.message}`)}if(_.length>0)return{success:!1,message:`Disabled ${K.length} ${A7(K.length,"plugin")}, ${_.length} failed:

Callers

nothing calls this directly

Calls 15

zvFunction · 0.85
WJFunction · 0.85
o5Function · 0.85
dFunction · 0.85
m_Function · 0.85
A7Function · 0.85
FeFunction · 0.85
ONKFunction · 0.85
includesMethod · 0.80
createElementMethod · 0.80
zFunction · 0.70
YFunction · 0.70

Tested by

no test coverage detected