| 2218 | ${Z} |
| 2219 | </local-command-stdout>`})],shouldQuery:!1,command:q,resultText:Z}}function sKK(q){return!/[^a-zA-Z0-9:\-_]/.test(q)}async function bUz(q,K,_,z,Y,$,A,O,w){let j=ab8(q);if(!j){d("tengu_input_slash_missing",{});let R="Commands are in the form `/command [args]`";return{messages:[Wb(),...z,U8({content:tL({inputString:R,precedingInputBlocks:K})})],shouldQuery:!1,resultText:R}}let{commandName:H,args:J,isMcp:M}=j,X=M?"mcp":!RQ().has(H)?"custom":H;if(!Gj6(H,Y.options.commands)){let R=!1;try{await X8().stat(`/${H}`),R=!0}catch{}if(sKK(H)&&!R){d("tengu_input_slash_invalid",{input:H});let I=`Unknown skill: ${H}`;return{messages:[Wb(),...z,U8({content:tL({inputString:I,precedingInputBlocks:K})}),...J?[fw(`Args from unknown skill: ${J}`,"warning")]:[]],shouldQuery:!1,resultText:I}}let x=aKK();return _x6(x),d("tengu_input_prompt",{}),EA("user_prompt",{prompt_length:String(q.length),prompt:eV8(q),"prompt.id":x}),{messages:[U8({content:tL({inputString:q,precedingInputBlocks:K}),uuid:A}),...z],shouldQuery:!0}}let{messages:P,shouldQuery:W,allowedTools:D,model:f,effort:G,command:Z,resultText:T,nextInput:v,submitNextInput:V}=await xUz(H,J,$,Y,K,_,O,w,A);if(P.length===0){let R={input:X};if(Z.type==="prompt"&&Z.pluginInfo){let{pluginManifest:x,repository:I}=Z.pluginInfo,{marketplace:B}=Z4(I),p=Ru(B);if(R._PROTO_plugin_name=x.name,B)R._PROTO_marketplace_name=B;if(R.plugin_repository=p?I:"third-party",R.plugin_name=p?x.name:"third-party",p&&x.version)R.plugin_version=x.version;Object.assign(R,Zj6(Z.pluginInfo))}return d("tengu_input_command",{...R,invocation_trigger:"user-slash",...!1}),{messages:[],shouldQuery:!1,model:f,nextInput:v,submitNextInput:V}}if(P.length===2&&P[1].type==="user"&&typeof P[1].message.content==="string"&&P[1].message.content.startsWith("Unknown command:")){if(!(q.startsWith("/var")||q.startsWith("/tmp")||q.startsWith("/private")))d("tengu_input_slash_invalid",{input:H});return{messages:[Wb(),...P],shouldQuery:W,allowedTools:D,model:f}}let E={input:X};if(Z.type==="prompt"&&Z.pluginInfo){let{pluginManifest:R,repository:x}=Z.pluginInfo,{marketplace:I}=Z4(x),B=Ru(I);if(E._PROTO_plugin_name=R.name,I)E._PROTO_marketplace_name=I;if(E.plugin_repository=B?x:"third-party",E.plugin_name=B?R.name:"third-party",B&&R.version)E.plugin_version=R.version;Object.assign(E,Zj6(Z.pluginInfo))}d("tengu_input_command",{...E,invocation_trigger:"user-slash",...!1});let S=P.length>0&&P[0]&&bD(P[0]);return{messages:W||P.every(ur1)||S?P:[Wb(),...P],shouldQuery:W,allowedTools:D,model:f,effort:G,resultText:T,nextInput:v,submitNextInput:V}}async function xUz(q,K,_,z,Y,$,A,O,w){let j=iE6(q,z.options.commands);if(j.type==="prompt"&&j.userInvocable!==!1)sb8(q);if(j.userInvocable===!1)return{messages:[U8({content:tL({inputString:`/${q}`,precedingInputBlocks:Y})}),U8({content:`This skill can only be invoked by Claude, not directly by users. Ask Claude to use the "${q}" skill for you.`})],shouldQuery:!1,command:j};try{switch(j.type){case"local-jsx":return new Promise((H)=>{let J=!1,M=(X,P)=>{if(J=!0,P?.display==="skip"){H({messages:[],shouldQuery:!1,command:j,nextInput:P?.nextInput,submitNextInput:P?.submitNextInput});return}let W=(P?.metaMessages??[]).map((f)=>U8({content:f,isMeta:!0})),D=p4()&&typeof X==="string"&&X.endsWith(" dismissed");H({messages:P?.display==="system"?D?W:[LQ(oe6(j,K)),LQ(`<local-command-stdout>${X}</local-command-stdout>`),...W]:[U8({content:tL({inputString:oe6(j,K),precedingInputBlocks:Y})}),X?U8({content:`<local-command-stdout>${X}</local-command-stdout>`}):U8({content:`<local-command-stdout>${nV}</local-command-stdout>`}),...W],shouldQuery:P?.shouldQuery??!1,command:j,nextInput:P?.nextInput,submitNextInput:P?.submitNextInput})};j.load().then((X)=>X.call(M,{...z,canUseTool:O},K)).then((X)=>{if(X==null)return;if(z.options.isNonInteractiveSession){H({messages:[],shouldQuery:!1,command:j});return}if(J)return;_({jsx:X,shouldHidePromptInput:!0,showSpinner:!1,isLocalJSXCommand:!0,isImmediate:j.immediate===!0})}).catch((X)=>{if(H6(X),J)return;J=!0,_({jsx:null,shouldHidePromptInput:!1,clearLocalJSX:!0}),H({messages:[],shouldQuery:!1,command:j})})});case"local":{let H=j.isSensitive&&K.trim()?"***":K,J=U8({content:tL({inputString:oe6(j,H),precedingInputBlocks:Y})});try{let M=Wb(),P=await(await j.load()).call(K,z);if(P.type==="skip")return{messages:[],shouldQuery:!1,command:j};if(P.type==="compact"){let W=[M,J,...P.displayText?[U8({content:`<local-command-stdout>${P.displayText}</local-command-stdout>`,timestamp:new Date(Date.now()+100).toISOString()})]:[]],D={...P.compactionResult,messagesToKeep:[...P.compactionResult.messagesToKeep??[],...W]};return Xr(),{messages:lo(D),shouldQuery:!1,command:j}}return{messages:[J,LQ(`<local-command-stdout>${P.value}</local-command-stdout>`)],shouldQuery:!1,command:j,resultText:P.value}}catch(M){return H6(M),{messages:[J,LQ(`<local-command-stderr>${String(M)}</local-command-stderr>`)],shouldQuery:!1,command:j}}}case"prompt":try{if(j.context==="fork")return await CUz(j,K,z,Y,_,O??uX);return await eKK(j,K,z,Y,$,w)}catch(H){if(H instanceof Uz)return{messages:[U8({content:tL({inputString:oe6(j,K),precedingInputBlocks:Y})}),Ya({toolUse:!1})],shouldQuery:!1,command:j};return{messages:[U8({content:tL({inputString:oe6(j,K),precedingInputBlocks:Y})}),U8({content:`<local-command-stderr>${String(H)}</local-command-stderr>`})],shouldQuery:!1,command:j}}}}catch(H){if(H instanceof zB)return{messages:[U8({content:tL({inputString:H.message,precedingInputBlocks:Y})})],shouldQuery:!1,command:j};throw H}}function oe6(q,K){return ae6(W_(q),K)}function tKK(q,K="loading"){return[`<${wP}>${q}</${wP}>`,`<${CZ}>${q}</${CZ}>`,"<skill-format>true</skill-format>"].join(` |
| 2220 | `)}function oKK(q,K){return[`<${wP}>${q}</${wP}>`,`<${CZ}>/${q}</${CZ}>`,K?`<command-args>${K}</command-args>`:null].filter(Boolean).join(` |
| 2221 | `)}function IUz(q,K){if(q.userInvocable!==!1)return oKK(q.name,K);if(q.loadedFrom==="skills"||q.loadedFrom==="plugin"||q.loadedFrom==="mcp")return tKK(q.name,q.progressMessage);return oKK(q.name,K)}async function uUz(q,K,_,z,Y=[]){let $=hQ(q,_);if(!$)throw new zB(`Unknown command: ${q}`);if($.type!=="prompt")throw Error(`Unexpected ${$.type} command. Expected 'prompt' command. Use /${q} directly in the main conversation.`);return eKK($,K,z,[],Y)}async function eKK(q,K,_,z=[],Y=[],$){let A=await q.getPromptForCommand(K,_),O=!fG("hooks")||Gn6(q.source);if(q.hooks&&O){let W=N8();QKK(_.setAppState,W,q.hooks,q.name,q.type==="prompt"?q.skillRoot:void 0)}let w=q.source?`${q.source}:${q.name}`:q.name,j=A.filter((W)=>W.type==="text").map((W)=>W.text).join(` |
| 2222 | |
| 2223 | `);pX6(q.name,w,j,Au()?.agentId??null);let H=IUz(q,K),J=_C(q.allowedTools??[]),M=Y.length>0||z.length>0?[...Y,...z,...A]:A,X=await bN8(nE6(A.filter((W)=>W.type==="text").map((W)=>W.text).join(" "),_,null,[],_.messages,"repl_main_thread",{skipSkillDiscovery:!0}));return{messages:[U8({content:H,uuid:$}),U8({content:M,isMeta:!0}),...X,V4({type:"command_permissions",allowedTools:J,model:q.model})],shouldQuery:!0,allowedTools:J,model:q.model,effort:q.effort,command:q}}var qx8=y(()=>{v8();yA();v8();RY();k8();vr();no();EC();i46();ib8();B2();Ou();lP();_8();m8();y8();bK();nv();e7();_M();ww6();dKK();E8();p2();i1();fX();Fj();hP();IA6();tb8();nu();lE6();EG();jm();D$6()});import{randomUUID as mUz}from"crypto";async function pUz(q,K){if(!q.mcpServers?.length)return{clients:K,tools:[],cleanup:async()=>{}};let _=Gn6(q.source);if(fG("mcp")&&!_)return N(`[Agent: ${q.agentType}] Skipping MCP servers: strictPluginOnlyCustomization locks MCP to plugin-only (agent source: ${q.source})`),{clients:K,tools:[],cleanup:async()=>{}};let z=[],Y=[],$=[];for(let O of q.mcpServers){let w=null,j,H=!1;if(typeof O==="string"){if(j=O,w=EN(O),!w){N(`[Agent: ${q.agentType}] MCP server not found: ${O}`,{level:"warn"});continue}}else{let M=Object.entries(O);if(M.length!==1){N(`[Agent: ${q.agentType}] Invalid MCP server spec: expected exactly one key`,{level:"warn"});continue}let[X,P]=M[0];j=X,w={...P,scope:"dynamic"},H=!0}let J=await oC(j,w);if(z.push(J),H)Y.push(J);if(J.type==="connected"){let M=await mL(J);$.push(...M),N(`[Agent: ${q.agentType}] Connected to MCP server '${j}' with ${M.length} tools`)}else N(`[Agent: ${q.agentType}] Failed to connect to MCP server '${j}': ${J.type}`,{level:"warn"})}let A=async()=>{for(let O of Y)if(O.type==="connected")try{await O.cleanup()}catch(w){N(`[Agent: ${q.agentType}] Error cleaning up MCP server '${O.name}': ${w}`,{level:"warn"})}};return{clients:[...K,...z],tools:$,cleanup:A}}function BUz(q){return q.type==="assistant"||q.type==="user"||q.type==="progress"||q.type==="system"&&"subtype"in q&&q.subtype==="compact_boundary"}async function*iN({agentDefinition:q,promptMessages:K,toolUseContext:_,canUseTool:z,isAsync:Y,canShowPermissionPrompts:$,forkContextMessages:A,querySource:O,override:w,model:j,maxTurns:H,preserveToolUseResults:J,availableTools:M,allowedTools:X,onCacheSafeParams:P,contentReplacementState:W,useExactTools:D,worktreePath:f,description:G,transcriptSubdir:Z,onQueryProgress:T}){let v=_.getAppState(),V=v.toolPermissionContext.mode,E=_.setAppStateForTasks??_.setAppState,S=BN6(q.model,_.options.mainLoopModel,j,V),R=w?.agentId?w.agentId:wm();if(Z)pr1(R,Z);if(Yo()){let N6=_.agentId??N8();fL8(R,q.agentType,N6)}let I=[...A?mr1(A):[],...K],B=A!==void 0?gu(_.readFileState):Bu(tF),[p,C]=await Promise.all([w?.userContext??bO(),w?.systemContext??tw()]),g=q.omitClaudeMd&&!w?.userContext&&g8("tengu_slim_subagent_claudemd",!0),{claudeMd:F,...U}=p,c=g?U:p,{gitStatus:K6,...t}=C,q6=q.agentType==="Explore"||q.agentType==="Plan"?t:C,e=q.permissionMode,i=()=>{let N6=_.getAppState(),Z6=N6.toolPermissionContext;if(e&&N6.toolPermissionContext.mode!=="bypassPermissions"&&N6.toolPermissionContext.mode!=="acceptEdits"&&N6.toolPermissionContext.mode!=="auto")Z6={...Z6,mode:e};let V6=$!==void 0?!$:e==="bubble"?!1:Y;if(V6)Z6={...Z6,shouldAvoidPermissionPrompts:!0};if(Y&&!V6)Z6={...Z6,awaitAutomatedChecksBeforeDialog:!0};if(X!==void 0)Z6={...Z6,alwaysAllowRules:{cliArg:N6.toolPermissionContext.alwaysAllowRules.cliArg,session:[...X]}};let y6=q.effort!==void 0?q.effort:N6.effortValue;if(Z6===N6.toolPermissionContext&&y6===N6.effortValue)return N6;return{...N6,toolPermissionContext:Z6,effortValue:y6}},$6=D?M:$o(q,M,Y).resolvedTools,M6=Array.from(v.toolPermissionContext.additionalWorkingDirectories.keys()),j6=w?.systemPrompt?w.systemPrompt:iK(await gUz(q,_,S,M6,$6)),G6=w?.abortController?w.abortController:Y?new AbortController:_.abortController,w6=[];for await(let N6 of gr1(R,q.agentType,G6.signal))if(N6.additionalContexts&&N6.additionalContexts.length>0)w6.push(...N6.additionalContexts);if(w6.length>0){let N6=V4({type:"hook_additional_context",content:w6,hookName:"SubagentStart",toolUseID:mUz(),hookEvent:"SubagentStart"});I.push(N6)}let o=!fG("hooks")||Gn6(q.source);if(q.hooks&&o)vb4(E,R,q.hooks,`agent '${q.agentType}'`,!0);let s=q.skills??[];if(s.length>0){let N6=await NC(Fz()),Z6=[];for(let T6 of s){let n6=FUz(T6,N6,q);if(!n6){N(`[Agent: ${q.agentType}] Warning: Skill '${T6}' specified in frontmatter was not found`,{level:"warn"});continue}let o6=iE6(n6,N6);if(o6.type!=="prompt"){N(`[Agent: ${q.agentType}] Warning: Skill '${T6}' is not a prompt-based skill`,{level:"warn"});continue}Z6.push({skillName:T6,skill:o6})}let{formatSkillLoadingMetadata:V6}=await Promise.resolve().then(() => (qx8(),eb8)),y6=await Promise.all(Z6.map(async({skillName:T6,skill:n6})=>({skillName:T6,skill:n6,content:await n6.getPromptForCommand("",_)})));for(let{skillName:T6,skill:n6,content:o6}of y6){N(`[Agent: ${q.agentType}] Preloaded skill '${T6}'`);let I6=V6(T6,n6.progressMessage);I.push(U8({content:[{type:"text",text:I6},...o6],isMeta:!0}))}}let{clients:a,tools:n,cleanup:l}=await pUz(q,_.options.mcpClients),A6=n.length>0?u2([...$6,...n],"name"):$6,J6={isNonInteractiveSession:D?_.options.isNonInteractiveSession:Y?!0:_.options.isNonInteractiveSession??!1,appendSystemPrompt:_.options.appendSystemPrompt,tools:A6,commands:[],debug:_.options.debug,verbose:_.options.verbose,mainLoopModel:S,thinkingConfig:D?_.options.thinkingConfig:{type:"disabled"},mcpClients:a,mcpResources:_.options.mcpResources,agentDefinitions:_.options.agentDefinitions,...D&&{querySource:O}},X6=te6(_,{options:J6,agentId:R,agentType:q.agentType,messages:I,readFileState:B,abortController:G6,getAppState:i,shareSetAppState:!Y,shareSetResponseLength:!0,criticalSystemReminder_EXPERIMENTAL:q.criticalSystemReminder_EXPERIMENTAL,contentReplacementState:W});if(J)X6.preserveToolUseResults=!0;if(P)P({systemPrompt:j6,userContext:c,systemContext:q6,toolUseContext:X6,forkContextMessages:I});SQ(I,R).catch((N6)=>N(`Failed to record sidechain transcript: ${N6}`)),ee6(R,{agentType:q.agentType,...f&&{worktreePath:f},...G&&{description:G}}).catch((N6)=>N(`Failed to write agent metadata: ${N6}`));let f6=I.at(-1)?.uuid??null;try{for await(let N6 of Db({messages:I,systemPrompt:j6,userContext:c,systemContext:q6,canUseTool:z,toolUseContext:X6,querySource:O,maxTurns:H??q.maxTurns})){if(T?.(),N6.type==="stream_event"&&N6.event.type==="message_start"&&N6.ttftMs!=null){_.pushApiMetricsEntry?.(N6.ttftMs);continue}if(N6.type==="attachment"){if(N6.attachment.type==="max_turns_reached"){N(`[Agent |
| 2224 | : $ |
| 2225 | { |