| 1366 | `+kO6(q,z.memory);return A},source:_,...z.model?{model:z.model}:{},...z.effort!==void 0?{effort:z.effort}:{},...z.permissionMode?{permissionMode:z.permissionMode}:{},...z.mcpServers&&z.mcpServers.length>0?{mcpServers:z.mcpServers}:{},...z.hooks?{hooks:z.hooks}:{},...z.maxTurns!==void 0?{maxTurns:z.maxTurns}:{},...z.skills&&z.skills.length>0?{skills:z.skills}:{},...z.initialPrompt?{initialPrompt:z.initialPrompt}:{},...z.background?{background:z.background}:{},...z.memory?{memory:z.memory}:{},...z.isolation?{isolation:z.isolation}:{}}}catch(z){let Y=z instanceof Error?z.message:String(z);return N(`Error parsing agent '${q}' from JSON: ${Y}`),H6(z),null}}function oi6(q,K="flagSettings"){try{let _=dQ_().parse(q);return Object.entries(_).map(([z,Y])=>o24(z,Y,K)).filter((z)=>z!==null)}catch(_){let z=_ instanceof Error?_.message:String(_);return N(`Error parsing agents from JSON: ${z}`),H6(_),[]}}function a24(q,K,_,z,Y){try{let{name:$,description:A}=_;if(!$||typeof $!=="string")return null;if(!A||typeof A!=="string")return N(`Agent file ${q} is missing required 'description' in frontmatter`),null;A=A.replace(/\\n/g,` |
| 1367 | `);let{color:O,model:w}=_,j;if(typeof w==="string"&&w.trim().length>0){let t=w.trim();j=t.toLowerCase()==="inherit"?"inherit":t}let H=_.background;if(H!==void 0&&H!=="true"&&H!=="false"&&H!==!0&&H!==!1)N(`Agent file ${q} has invalid background value '${H}'. Must be 'true', 'false', or omitted.`);let J=H==="true"||H===!0?!0:void 0,M=["user","project","local"],X=_.memory,P;if(X!==void 0)if(M.includes(X))P=X;else N(`Agent file ${q} has invalid memory value '${X}'. Valid options: ${M.join(", ")}`);let W=["worktree"],D=_.isolation,f;if(D!==void 0)if(W.includes(D))f=D;else N(`Agent file ${q} has invalid isolation value '${D}'. Valid options: ${W.join(", ")}`);let G=_.effort,Z=G!==void 0?OC(G):void 0;if(G!==void 0&&Z===void 0)N(`Agent file ${q} has invalid effort '${G}'. Valid options: ${DL.join(", ")} or an integer`);let T=_.permissionMode,v=T&&pZ.includes(T);if(T&&!v){let t=`Agent file ${q} has invalid permissionMode '${T}'. Valid options: ${pZ.join(", ")}`;N(t)}let V=_.maxTurns,E=mG8(V);if(V!==void 0&&E===void 0)N(`Agent file ${q} has invalid maxTurns '${V}'. Must be a positive integer.`);let S=QQ_(q,".md"),R=Y76(_.tools);if(l3()&&P&&R!==void 0){let t=new Set(R);for(let q6 of[tK,X4,Cq])if(!t.has(q6))R=[...R,q6]}let x=_.disallowedTools,I=x!==void 0?Y76(x):void 0,B=RF(_.skills),p=_.initialPrompt,C=typeof p==="string"&&p.trim()?p:void 0,g=_.mcpServers,F;if(Array.isArray(g))F=g.map((t)=>{let q6=i24().safeParse(t);if(q6.success)return q6.data;return N(`Agent file ${q} has invalid mcpServers item: ${g6(t)}. Error: ${q6.error.message}`),null}).filter((t)=>t!==null);let U=lQ_(_,$),c=z.trim();return{baseDir:K,agentType:$,whenToUse:A,...R!==void 0?{tools:R}:{},...I!==void 0?{disallowedTools:I}:{},...B!==void 0?{skills:B}:{},...C!==void 0?{initialPrompt:C}:{},...F!==void 0&&F.length>0?{mcpServers:F}:{},...U!==void 0?{hooks:U}:{},getSystemPrompt:()=>{if(l3()&&P){let t=kO6($,P);return c+` |
| 1368 | |
| 1369 | `+t}return c},source:Y,filename:S,...O&&typeof O==="string"&&GJ.includes(O)?{color:O}:{},...j!==void 0?{model:j}:{},...Z!==void 0?{effort:Z}:{},...v?{permissionMode:T}:{},...E!==void 0?{maxTurns:E}:{},...J?{background:J}:{},...P?{memory:P}:{},...f?{isolation:f}:{}}}catch($){let A=$ instanceof Error?$.message:String($);return N(`Error parsing agent from ${q}: ${A}`),H6($),null}}var i24,r24,dQ_,VC;var SP=y(()=>{F4();x7();rw();k8();f_6();_8();q0();m8();rV();E8();ri();yW();Hk8();vh();l8();IY();E2();$0();pu();p24();Pk8();i24=B6(()=>L.union([L.string(),L.record(L.string(),hB())])),r24=B6(()=>L.object({description:L.string().min(1,"Description cannot be empty"),tools:L.array(L.string()).optional(),disallowedTools:L.array(L.string()).optional(),prompt:L.string().min(1,"Prompt cannot be empty"),model:L.string().trim().min(1,"Model cannot be empty").transform((q)=>q.toLowerCase()==="inherit"?"inherit":q).optional(),effort:L.union([L.enum(DL),L.number().int()]).optional(),permissionMode:L.enum(pZ).optional(),mcpServers:L.array(i24()).optional(),hooks:Th().optional(),maxTurns:L.number().int().positive().optional(),skills:L.array(L.string()).optional(),initialPrompt:L.string().optional(),memory:L.enum(["user","project","local"]).optional(),background:L.boolean().optional(),isolation:L.enum(["worktree"]).optional()})),dQ_=B6(()=>L.record(L.string(),r24()));VC=_1(async(q)=>{if(i6(process.env.CLAUDE_CODE_SIMPLE)){let K=Xk8();return{activeAgents:K,allAgents:K}}try{let K=await ii("agents",q),_=[],z=K.map(({filePath:j,baseDir:H,frontmatter:J,content:M,source:X})=>{let P=a24(j,H,J,M,X);if(!P){if(!J.name)return null;let W=cQ_(J);return _.push({path:j,error:W}),N(`Failed to parse agent from ${j}: ${W}`),d("tengu_agent_parse_error",{error:W,location:X}),null}return P}).filter((j)=>j!==null),$=await Ui6(),O=[...Xk8(),...$,...z],w=AN(O);for(let j of w)if(j.color)VO6(j.agentType,j.color);return{activeAgents:w,allAgents:O,failedFiles:_.length>0?_:void 0}}catch(K){let _=K instanceof Error?K.message:String(K);N(`Error loading agent definitions: ${_}`),H6(K);let z=Xk8();return{activeAgents:z,allAgents:z,failedFiles:[{path:"unknown",error:_}]}}})});var Kj4={};T8(Kj4,{getSkillToolInfo:()=>Ex1,getSkillInfo:()=>rQ_,getPrompt:()=>fk8,getLimitedSkillToolCommands:()=>Lx1,getCharBudget:()=>Dk8,formatCommandsWithinBudget:()=>yx1,clearPromptCache:()=>Rx1,SKILL_BUDGET_CONTEXT_PERCENT:()=>t24,MAX_LISTING_DESC_CHARS:()=>Vx1,DEFAULT_CHAR_BUDGET:()=>qj4,CHARS_PER_TOKEN:()=>e24});function Dk8(q){if(Number(process.env.SLASH_COMMAND_TOOL_CHAR_BUDGET))return Number(process.env.SLASH_COMMAND_TOOL_CHAR_BUDGET);if(q)return Math.floor(q*e24*t24);return qj4}function Nx1(q){let K=q.whenToUse?`${q.description} - ${q.whenToUse}`:q.description;return K.length>Vx1?K.slice(0,Vx1-1)+"…":K}function nQ_(q){let K=W_(q);if(q.name!==K&&q.type==="prompt"&&q.source==="plugin")N(`Skill prompt: showing "${q.name}" (userFacingName="${K}")`);return`- ${q.name}: ${Nx1(q)}`}function yx1(q,K){if(q.length===0)return"";let _=Dk8(K),z=q.map((X)=>({cmd:X,full:nQ_(X)}));if(z.reduce((X,P)=>X+O1(P.full),0)+(z.length-1)<=_)return z.map((X)=>X.full).join(` |
| 1370 | `);let $=new Set,A=[];for(let X=0;X<q.length;X++){let P=q[X];if(P.type==="prompt"&&P.source==="bundled")$.add(X);else A.push(P)}let O=z.reduce((X,P,W)=>$.has(W)?X+O1(P.full)+1:X,0),w=_-O;if(A.length===0)return z.map((X)=>X.full).join(` |
| 1371 | `);let j=A.reduce((X,P)=>X+O1(P.name)+4,0)+(A.length-1),H=w-j,J=Math.floor(H/A.length);if(J<iQ_)return q.map((X,P)=>$.has(P)?z[P].full:`- ${X.name}`).join(` |
| 1372 | `);let M=$7(A,(X)=>O1(Nx1(X))>J);return q.map((X,P)=>{if($.has(P))return z[P].full;let W=Nx1(X);return`- ${X.name}: ${d5(W,J)}`}).join(` |
| 1373 | `)}async function Ex1(q){let K=await NC(q);return{totalCommands:K.length,includedCommands:K.length}}function Lx1(q){return NC(q)}function Rx1(){fk8.cache?.clear?.()}async function rQ_(q){try{let K=await EO6(q);return{totalSkills:K.length,includedSkills:K.length}}catch(K){return H6(x1(K)),{totalSkills:0,includedSkills:0}}}var t24=0.01,e24=4,qj4=8000,Vx1=250,iQ_=20,fk8;var yO6=y(()=>{VW6();yA();RY();Q5();k8();_8();y8();U7();E8();fk8=_1(async(q)=>{return`Execute a skill within the main conversation |
| 1374 | |
| 1375 | When users ask you to perform tasks, check if any of the available skills match. Skills provide specialized capabilities and domain knowledge. |