({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})
| 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 | { |
| 2226 | agentDefinition.agentType |
| 2227 | } |
| 2228 | ] Reached max turns limit ($ |
| 2229 | { |
| 2230 | message.attachment.maxTurns |
| 2231 | } |
| 2232 | )`);break}yield N6;continue}if(BUz(N6)){if(await SQ([N6],R,f6).catch((Z6)=>N(`Failed to record sidechain transcript: ${Z6}`)),N6.type!=="progress")f6=N6.uuid;yield N6}}if(G6.signal.aborted)throw new Uz;if(I2(q)&&q.callback)q.callback()}finally{if(await l(),q.hooks)pN6(E,R);X6.readFileState.clear(),I.length=0,Qw6(R),Br1(R),E((N6)=>{if(!(R in N6.todos))return N6;let{[R]:Z6,...V6}=N6.todos;return{...N6,todos:V6}}),Jb4(R,_.getAppState,E)}}function mr1(q){let K=new Set;for(let _ of q)if(_?.type==="user"){let Y=_.message.content;if(Array.isArray(Y)){for(let $ of Y)if($.type==="tool_result"&&$.tool_use_id)K.add($.tool_use_id)}}return q.filter((_)=>{if(_?.type==="assistant"){let Y=_.message.content;if(Array.isArray(Y))return!Y.some((A)=>A.type==="tool_use"&&A.id&&!K.has(A.id))}return!0})}async function gUz(q,K,_,z,Y){let $=new Set(Y.map((A)=>A.name));try{let O=[q.getSystemPrompt({toolUseContext:K})];return await se6(O,_,z,$)}catch(A){return se6([K5K],_,z,$)}}function FUz(q,K,_){if(Gj6(q,K))return q;let z=_.agentType.split(":")[0];if(z){let A=`${z}:${q}`;if(Gj6(A,K))return A}let Y=`:${q}`,$=K.find((A)=>A.name.endsWith(Y));if($)return $.name;return null}var i46=y(()=>{Fu();_8();v8();yA();rL();jN();Tj6();o1();vr();Q76();PD();f0();$F1();lP();y8();bK();NG();nv();kb4();zo();y$();i1();cq6();_K();IA6();gN6();jm();rq6();SP()});function QUz(q){return`Describe your most recent action in 3-5 words using present tense (-ing). Name the file or function, not the branch. Do not use tools. |
| 2233 | ${q?` |
| 2234 | Previous: "${q}" — say something NEW. |
no test coverage detected