@clinebot/agents 0.0.0 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,21 +1,21 @@
1
- import{providers as Pe}from"@clinebot/llms";async function an(n,e,r,o){let i=sr(e),f=await dr(r,o);if(i.length===0&&!f)return n;let s=[{type:"text",text:n},...i];if(f)s.push(...f);return s}function sr(n){if(!n||n.length===0)return[];let e=[];for(let r of n){let o=Er(r);if(o)e.push(o)}return e}function Er(n){let e=n.trim();if(!e)return;let r=e.match(/^data:([^;,]+);base64,(.+)$/);if(r){let o=r[1],i=r[2];if(!o||!i)return;return{type:"image",mediaType:o,data:i}}return{type:"image",mediaType:"image/png",data:e}}async function dr(n,e){if(!n||n.length===0)return;let r=e??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),o=await Promise.all(n.map(async(i)=>{let f=i.replace(/\\/g,"/");try{let s=await r(i);return{type:"file",path:f,content:s}}catch(s){let E=s instanceof Error?s.message:String(s);return{type:"file",path:f,content:`Error fetching content: ${E}`}}}));if(o.length===0)return;return o}var Sr=new Set(["hooks","tools","commands","shortcuts","flags","message_renderers","providers"]),vr=new Set(["input","runtime_event","session_start","run_start","iteration_start","turn_start","before_agent_start","tool_call_before","tool_call_after","turn_end","iteration_end","run_end","session_shutdown","error"]),tn={input:"onInput",runtime_event:"onRuntimeEvent",session_start:"onSessionStart",run_start:"onRunStart",iteration_start:"onIterationStart",turn_start:"onTurnStart",before_agent_start:"onBeforeAgentStart",tool_call_before:"onToolCall",tool_call_after:"onToolResult",turn_end:"onAgentEnd",iteration_end:"onIterationEnd",run_end:"onRunEnd",session_shutdown:"onSessionShutdown",error:"onError"};function hr(n,e){return n.name||`extension_${String(e).padStart(4,"0")}`}function _r(n){return typeof n.onInput==="function"||typeof n.onRuntimeEvent==="function"||typeof n.onSessionStart==="function"||typeof n.onRunStart==="function"||typeof n.onIterationStart==="function"||typeof n.onTurnStart==="function"||typeof n.onBeforeAgentStart==="function"||typeof n.onToolCall==="function"||typeof n.onToolResult==="function"||typeof n.onAgentEnd==="function"||typeof n.onIterationEnd==="function"||typeof n.onRunEnd==="function"||typeof n.onSessionShutdown==="function"||typeof n.onError==="function"}function yr(n,e){let r=hr(n,e),o=n.manifest;if(!o||typeof o!=="object")throw Error(`Invalid manifest for extension "${r}": manifest is required`);if(!Array.isArray(o.capabilities)||o.capabilities.length===0)throw Error(`Invalid manifest for extension "${r}": capabilities must be a non-empty array`);let i=new Set;for(let v of o.capabilities){if(!Sr.has(v))throw Error(`Invalid manifest for extension "${r}": unsupported capability "${String(v)}"`);i.add(v)}let f=o.hookStages??[];if(!Array.isArray(f))throw Error(`Invalid manifest for extension "${r}": hookStages must be an array when provided`);let s=new Set;for(let v of f){if(!vr.has(v))throw Error(`Invalid manifest for extension "${r}": unsupported hook stage "${String(v)}"`);s.add(v)}let E=i.has("hooks");if(_r(n)&&!E)throw Error(`Invalid manifest for extension "${r}": hook handlers require the "hooks" capability`);if(E&&s.size===0)throw Error(`Invalid manifest for extension "${r}": hooks capability requires at least one hook stage`);for(let v of s){let y=tn[v];if(typeof n[y]!=="function")throw Error(`Invalid manifest for extension "${r}": stage "${v}" is declared but handler "${y}" is missing`)}for(let[v,y]of Object.entries(tn))if(typeof n[y]==="function"&&!s.has(v))throw Error(`Invalid manifest for extension "${r}": handler "${y}" must declare stage "${v}"`);return{capabilities:i,hookStages:s,raw:o}}class pn{extensions;registry={tools:[],commands:[],shortcuts:[],flags:[],messageRenderers:[],providers:[]};normalized=[];phase="resolve";constructor(n={}){this.extensions=n.extensions??[]}resolve(){if(this.phase!=="resolve")return;this.normalized=this.extensions.map((n,e)=>({extension:n,order:e,manifest:{capabilities:new Set,hookStages:new Set,raw:n.manifest}})),this.phase="validate"}validate(){if(this.phase==="resolve")this.resolve();if(this.phase!=="validate")return;this.normalized=this.normalized.map((n)=>({...n,manifest:yr(n.extension,n.order)})),this.phase="setup"}async setup(){if(this.phase==="resolve")this.resolve();if(this.phase==="validate")this.validate();if(this.phase!=="setup")return;let n={registerTool:(e)=>this.registry.tools.push(e),registerCommand:(e)=>this.registry.commands.push(e),registerShortcut:(e)=>this.registry.shortcuts.push(e),registerFlag:(e)=>this.registry.flags.push(e),registerMessageRenderer:(e)=>this.registry.messageRenderers.push(e),registerProvider:(e)=>this.registry.providers.push(e)};for(let{extension:e}of this.normalized)await e.setup?.(n);this.phase="activate"}activate(){if(this.phase==="resolve")this.resolve();if(this.phase==="validate")this.validate();if(this.phase==="setup")throw Error("Contribution registry setup must complete before activation");if(this.phase!=="activate")return;this.phase="run"}async initialize(){this.resolve(),this.validate(),await this.setup(),this.activate()}isActivated(){return this.phase==="run"}getRegistrySnapshot(){return{tools:[...this.registry.tools],commands:[...this.registry.commands],shortcuts:[...this.registry.shortcuts],flags:[...this.registry.flags],messageRenderers:[...this.registry.messageRenderers],providers:[...this.registry.providers]}}getRegisteredTools(){return[...this.registry.tools]}getValidatedExtensions(){if(this.phase==="resolve")this.resolve();if(this.phase==="validate")this.validate();return this.normalized.slice().sort((n,e)=>n.order-e.order).map(({extension:n})=>n)}}function ne(n={}){return new pn(n)}function Tr(n,e){let r=(e.priority??0)-(n.priority??0);if(r!==0)return r;return n.name.localeCompare(e.name)}var Rr={input:{mode:"blocking",timeoutMs:2500,retries:0,retryDelayMs:100,failureMode:"fail_open",maxConcurrency:1,queueLimit:100},runtime_event:{mode:"async",timeoutMs:1500,retries:0,retryDelayMs:100,failureMode:"fail_open",maxConcurrency:4,queueLimit:2000},session_start:{mode:"blocking",timeoutMs:2500,retries:0,retryDelayMs:100,failureMode:"fail_open",maxConcurrency:1,queueLimit:100},run_start:{mode:"blocking",timeoutMs:2500,retries:0,retryDelayMs:100,failureMode:"fail_open",maxConcurrency:1,queueLimit:100},iteration_start:{mode:"blocking",timeoutMs:2000,retries:0,retryDelayMs:100,failureMode:"fail_open",maxConcurrency:1,queueLimit:200},turn_start:{mode:"blocking",timeoutMs:2000,retries:0,retryDelayMs:100,failureMode:"fail_open",maxConcurrency:1,queueLimit:200},before_agent_start:{mode:"blocking",timeoutMs:3000,retries:0,retryDelayMs:100,failureMode:"fail_open",maxConcurrency:1,queueLimit:200},tool_call_before:{mode:"blocking",timeoutMs:4000,retries:1,retryDelayMs:150,failureMode:"fail_open",maxConcurrency:1,queueLimit:500},tool_call_after:{mode:"blocking",timeoutMs:3000,retries:1,retryDelayMs:200,failureMode:"fail_open",maxConcurrency:1,queueLimit:1000},turn_end:{mode:"blocking",timeoutMs:3000,retries:1,retryDelayMs:200,failureMode:"fail_open",maxConcurrency:1,queueLimit:500},iteration_end:{mode:"async",timeoutMs:3000,retries:1,retryDelayMs:200,failureMode:"fail_open",maxConcurrency:2,queueLimit:500},run_end:{mode:"async",timeoutMs:3000,retries:1,retryDelayMs:200,failureMode:"fail_open",maxConcurrency:2,queueLimit:500},session_shutdown:{mode:"async",timeoutMs:3000,retries:1,retryDelayMs:200,failureMode:"fail_open",maxConcurrency:2,queueLimit:500},error:{mode:"async",timeoutMs:1500,retries:0,retryDelayMs:100,failureMode:"fail_open",maxConcurrency:2,queueLimit:500}};function lr(n,e){if(!n&&!e)return;let r=[...Array.isArray(n?.appendMessages)?n.appendMessages:[],...Array.isArray(e?.appendMessages)?e.appendMessages:[]],o={cancel:!!(n?.cancel||e?.cancel),review:!!(n?.review||e?.review),context:[n?.context,e?.context].filter((f)=>typeof f==="string"&&!!f).join(`
2
- `),overrideInput:Object.hasOwn(e??{},"overrideInput")?e?.overrideInput:n?.overrideInput},i=typeof e?.systemPrompt==="string"?e.systemPrompt:n?.systemPrompt;if(typeof i==="string")o.systemPrompt=i;if(r.length>0)o.appendMessages=r;return o}function Pn(n,e){return{mode:e?.mode??n.mode,timeoutMs:e?.timeoutMs??n.timeoutMs,retries:e?.retries??n.retries,retryDelayMs:e?.retryDelayMs??n.retryDelayMs,failureMode:e?.failureMode??n.failureMode,maxConcurrency:Math.max(1,e?.maxConcurrency??n.maxConcurrency),queueLimit:Math.max(1,e?.queueLimit??n.queueLimit)}}function Cr(n){return n instanceof Error?n:Error(String(n))}function Pr(n){return!!n&&typeof n==="object"}async function wr(n,e,r,o){if(e<=0)return await n;let i;try{return await Promise.race([n,new Promise((f,s)=>{i=setTimeout(()=>{s(Error(`Hook handler "${r}" timed out after ${e}ms at stage "${o}"`))},e)})])}finally{if(i)clearTimeout(i)}}class I{handlers=new Map;options;sequence=0;eventCounter=0;stageQueues=new Map;inFlight=new Set;constructor(n={}){this.options=n}register(n){let e=this.handlers.get(n.stage)??[];e.push(n),e.sort(Tr),this.handlers.set(n.stage,e)}async dispatch(n){let e={eventId:`hook_evt_${String(++this.eventCounter).padStart(8,"0")}`,stage:n.stage,createdAt:new Date,sequence:++this.sequence,runId:n.runId,agentId:n.agentId,conversationId:n.conversationId,parentAgentId:n.parentAgentId,iteration:n.iteration,parentEventId:n.parentEventId,payload:n.payload},r=this.getHandlers(n.stage);if(r.length===0)return{event:e,queued:!1,dropped:!1,control:void 0,results:[]};let o=this.resolveStagePolicy(n.stage);if(o.mode==="async"){let f=this.getStageQueueState(n.stage);if(f.items.length>=o.queueLimit)return this.options.onDroppedEvent?.(e,o),{event:e,queued:!1,dropped:!0,control:void 0,results:[]};return f.items.push({event:e,stagePolicy:o,handlers:r}),this.kickQueue(n.stage),{event:e,queued:!0,dropped:!1,control:void 0,results:[]}}let i=await this.executeHandlers(e,r,o);return{event:e,queued:!1,dropped:!1,control:this.mergeControlsFromResults(i),results:i}}async shutdown(n=3000){let e=Date.now();while(this.inFlight.size>0){if(Date.now()-e>=n)break;await Promise.race([...this.inFlight])}}getHandlers(n){return[...this.handlers.get(n)??[]]}getStageQueueState(n){let e=this.stageQueues.get(n);if(e)return e;let r={activeCount:0,items:[]};return this.stageQueues.set(n,r),r}kickQueue(n){let e=this.getStageQueueState(n),r=this.resolveStagePolicy(n);while(e.activeCount<r.maxConcurrency&&e.items.length>0){let o=e.items.shift();if(!o)return;e.activeCount+=1;let i=this.executeHandlers(o.event,o.handlers,o.stagePolicy).then(()=>{return}).catch(()=>{}).finally(()=>{e.activeCount-=1,this.inFlight.delete(i),this.kickQueue(n)});this.inFlight.add(i)}}resolveStagePolicy(n){let e=Pn(Rr[n],this.options.policies?.defaultPolicy);return Pn(e,this.options.policies?.stages?.[n])}resolveHandlerPolicy(n,e){let r=this.resolveStagePolicy(n);return Pn(r,this.options.policies?.handlers?.[e])}async executeHandlers(n,e,r){let o=[];for(let i of e){let f=this.resolveHandlerPolicy(n.stage,i.name);if(r.mode==="async"&&f.mode==="blocking"){o.push({handlerName:i.name,stage:n.stage,status:"skipped",attempts:0,durationMs:0});continue}let s=await this.executeHandler(n,i,f);if(o.push(s),(s.status==="error"||s.status==="timeout")&&f.failureMode==="fail_closed")throw s.error??Error(`Hook handler "${i.name}" failed at stage "${n.stage}"`)}return o}async executeHandler(n,e,r){let o=Date.now(),i=0,f,s="error";while(i<=r.retries){i+=1;try{let E=await wr(Promise.resolve(e.handle(n)),r.timeoutMs,e.name,n.stage),d=Pr(E)?E:void 0;return{handlerName:e.name,stage:n.stage,status:"ok",attempts:i,durationMs:Date.now()-o,control:d}}catch(E){if(f=Cr(E),s=/timed out/i.test(f.message)?"timeout":"error",this.options.onDispatchError?.(f,n,e.name),i<=r.retries&&r.retryDelayMs>0)await new Promise((d)=>setTimeout(d,r.retryDelayMs))}}return{handlerName:e.name,stage:n.stage,status:s,attempts:i,durationMs:Date.now()-o,error:f}}mergeControlsFromResults(n){let e;for(let r of n){if(r.status!=="ok")continue;e=lr(e,r.control)}return e}}var Ar={input:{name:"onInput",handler:(n,e)=>n.onInput?.(e.payload)},session_start:{name:"onSessionStart",handler:(n,e)=>n.onSessionStart?.(e.payload)},run_start:{name:"onRunStart",handler:(n,e)=>n.onRunStart?.(e.payload)},iteration_start:{name:"onIterationStart",handler:(n,e)=>n.onIterationStart?.(e.payload)},turn_start:{name:"onTurnStart",handler:(n,e)=>n.onTurnStart?.(e.payload)},before_agent_start:{name:"onBeforeAgentStart",handler:(n,e)=>n.onBeforeAgentStart?.(e.payload)},tool_call_before:{name:"onToolCall",handler:(n,e)=>n.onToolCall?.(e.payload)},tool_call_after:{name:"onToolResult",handler:(n,e)=>n.onToolResult?.(e.payload)},turn_end:{name:"onAgentEnd",handler:(n,e)=>n.onAgentEnd?.(e.payload)},iteration_end:{name:"onIterationEnd",handler:async(n,e)=>{await n.onIterationEnd?.(e.payload);return}},run_end:{name:"onRunEnd",handler:async(n,e)=>{await n.onRunEnd?.(e.payload);return}},session_shutdown:{name:"onSessionShutdown",handler:(n,e)=>n.onSessionShutdown?.(e.payload)},error:{name:"onError",handler:async(n,e)=>{await n.onError?.(e.payload);return}},runtime_event:{name:"onRuntimeEvent",handler:async(n,e)=>{await n.onRuntimeEvent?.(e.payload);return}}};function wn(n,e){let r=(i)=>{n.register(i)},o=e.hooks;if(o?.onSessionStart)r({name:"hooks.onSessionStart",stage:"session_start",handle:(i)=>o.onSessionStart?.(i.payload)});if(o?.onRunStart)r({name:"hooks.onRunStart",stage:"run_start",handle:(i)=>o.onRunStart?.(i.payload)});if(o?.onRunEnd)r({name:"hooks.onRunEnd",stage:"run_end",handle:async(i)=>{await o.onRunEnd?.(i.payload);return}});if(o?.onIterationStart)r({name:"hooks.onIterationStart",stage:"iteration_start",handle:(i)=>o.onIterationStart?.(i.payload)});if(o?.onIterationEnd)r({name:"hooks.onIterationEnd",stage:"iteration_end",handle:async(i)=>{await o.onIterationEnd?.(i.payload);return}});if(o?.onTurnStart)r({name:"hooks.onTurnStart",stage:"turn_start",handle:(i)=>o.onTurnStart?.(i.payload)});if(o?.onTurnEnd)r({name:"hooks.onTurnEnd",stage:"turn_end",handle:(i)=>o.onTurnEnd?.(i.payload)});if(o?.onToolCallStart)r({name:"hooks.onToolCallStart",stage:"tool_call_before",handle:(i)=>o.onToolCallStart?.(i.payload)});if(o?.onToolCallEnd)r({name:"hooks.onToolCallEnd",stage:"tool_call_after",handle:(i)=>o.onToolCallEnd?.(i.payload)});if(o?.onSessionShutdown)r({name:"hooks.onSessionShutdown",stage:"session_shutdown",handle:(i)=>o.onSessionShutdown?.(i.payload)});if(o?.onError)r({name:"hooks.onError",stage:"error",handle:async(i)=>{await o.onError?.(i.payload);return}});for(let[i,f]of(e.extensions??[]).entries()){if(!f.manifest.capabilities.includes("hooks"))continue;let s=String(i).padStart(4,"0"),E=f.name||`extension_${s}`,d=`${s}:${E}`,v=new Set(f.manifest.hookStages??[]);for(let y of v){let P=Ar[y];if(!P)continue;r({name:`${d}.${P.name}`,stage:y,handle:(l)=>P.handler(f,l)})}}}var gr=new Set(["read","read_files","bash","run_commands"]),Hr=new Set(["read","read_files"]);class An{maxToolResultChars;targetToolNames;indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readPathsByToolUseIdCache=new Map;latestReadToolUseByPathCache=new Map;readResultPathCache=new WeakMap;constructor(n=50000,e=gr){this.maxToolResultChars=n;this.targetToolNames=e}buildForApi(n){this.reindex(n);let e=this.toolNameByIdCache,r=this.readPathsByToolUseIdCache,o=this.latestReadToolUseByPathCache;return n.map((i)=>{if(!Array.isArray(i.content))return i;let f=i.content.map((s)=>{if(s.type==="file"){let v=this.truncateMiddle(s.content);if(v===s.content)return s;return{...s,content:v}}if(s.type!=="tool_result")return s;let E=e.get(s.tool_use_id),d=s.content;if(this.isReadTool(E)){let v=this.getReadResultRecord(s,r.get(s.tool_use_id));if(v){let y=v.paths.filter((P)=>o.get(P)!==s.tool_use_id);if(y.length>0)d=this.replaceOutdatedReadContent(d,y)}}if(this.shouldTruncateTool(E))d=this.truncateToolResultContent(d);if(d===s.content)return s;return{...s,content:d}});return{...i,content:f}})}reindex(n){if(n.length<this.indexedMessageCount)this.resetIndexes();if(this.indexedMessageCount>0&&n.length>=this.indexedMessageCount&&n[this.indexedMessageCount-1]!==this.indexedTailRef)this.resetIndexes();for(let e=this.indexedMessageCount;e<n.length;e++){let r=n[e];if(!Array.isArray(r.content))continue;for(let o of r.content){if(o.type==="tool_use"){let i=o.name.toLowerCase();if(this.toolNameByIdCache.set(o.id,i),this.isReadTool(i)){let f=this.extractPathsFromReadToolInput(o.input);if(f.length>0)this.readPathsByToolUseIdCache.set(o.id,f)}continue}if(o.type==="tool_result"){let i=this.toolNameByIdCache.get(o.tool_use_id);if(!this.isReadTool(i))continue;let f=this.getReadResultRecord(o,this.readPathsByToolUseIdCache.get(o.tool_use_id));if(!f)continue;for(let s of f.paths)this.latestReadToolUseByPathCache.set(s,f.toolUseId)}}}this.indexedMessageCount=n.length,this.indexedTailRef=n.length>0?n[n.length-1]:void 0}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readPathsByToolUseIdCache.clear(),this.latestReadToolUseByPathCache.clear(),this.readResultPathCache=new WeakMap}getReadResultRecord(n,e){let r=n,o=this.readResultPathCache.get(r),i=o??this.extractReadPathsFromToolResultContent(n.content);if(!o)this.readResultPathCache.set(r,i);let f=i.length>0?i:e??[];if(f.length===0)return;return{toolUseId:n.tool_use_id,paths:f}}extractPathsFromReadToolInput(n){let e=[],r=n.path,o=n.file_path,i=n.file_paths;if(typeof r==="string"&&r.length>0)e.push(r);if(typeof o==="string"&&o.length>0)e.push(o);if(Array.isArray(i)){for(let f of i)if(typeof f==="string"&&f.length>0)e.push(f)}return Array.from(new Set(e))}extractReadPathsFromToolResultContent(n){if(typeof n!=="string")return[];try{let e=JSON.parse(n);return this.extractPathsFromParsedReadResult(e)}catch{return[]}}extractPathsFromParsedReadResult(n){if(Array.isArray(n)){let r=n.map((o)=>this.extractPathFromResultEntry(o)).filter((o)=>typeof o==="string"&&o.length>0);return Array.from(new Set(r))}let e=this.extractPathFromResultEntry(n);return e?[e]:[]}extractPathFromResultEntry(n){if(!n||typeof n!=="object")return;let e=n,r=[e.path,e.file_path,e.filePath,e.query];for(let o of r)if(typeof o==="string"&&o.length>0)return o;return}replaceOutdatedReadContent(n,e){let r=new Set(e);if(typeof n==="string")return this.replaceOutdatedReadContentInString(n,r)??"[outdated - see the latest file content]";return n.map((o)=>{if(o.type==="file"){if(!r.has(o.path))return o;return{...o,content:"[outdated - see the latest file content]"}}if(o.type!=="text")return o;let i=this.replaceOutdatedReadContentInString(o.text,r);if(i===null)return{...o,text:"[outdated - see the latest file content]"};if(i===o.text)return o;return{...o,text:i}})}replaceOutdatedReadContentInString(n,e){try{let r=JSON.parse(n),o=this.replaceOutdatedReadContentInParsed(r,e);return JSON.stringify(o)}catch{return null}}replaceOutdatedReadContentInParsed(n,e){if(Array.isArray(n))return n.map((r)=>this.replaceOutdatedReadEntry(r,e));return this.replaceOutdatedReadEntry(n,e)}replaceOutdatedReadEntry(n,e){if(!n||typeof n!=="object")return n;let r={...n},o=this.extractPathFromResultEntry(r);if(!o||!e.has(o))return n;if(typeof r.result==="string")r.result="[outdated - see the latest file content]";else if(typeof r.content==="string")r.content="[outdated - see the latest file content]";else r.result="[outdated - see the latest file content]";return r}isReadTool(n){if(!n)return!1;return Hr.has(n.toLowerCase())}shouldTruncateTool(n){if(!n)return!1;return this.targetToolNames.has(n.toLowerCase())}truncateToolResultContent(n){if(typeof n==="string")return this.truncateMiddle(n);return n.map((e)=>{if(e.type==="file"){let o=this.truncateMiddle(e.content);if(o===e.content)return e;return{...e,content:o}}if(e.type!=="text")return e;let r=this.truncateMiddle(e.text);if(r===e.text)return e;return{...e,text:r}})}truncateMiddle(n){if(n.length<=this.maxToolResultChars)return n;let e=1e5,o=`
1
+ import{providers as Or}from"@clinebot/llms";var er="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var or=(n=21)=>{let r="",e=crypto.getRandomValues(new Uint8Array(n|=0));while(n--)r+=er[e[n]&63];return r};async function fr(n,r,e,o){let f=he(r),i=await ve(e,o);if(f.length===0&&!i)return n;let s=[{type:"text",text:n},...f];if(i)s.push(...i);return s}function he(n){if(!n||n.length===0)return[];let r=[];for(let e of n){let o=_e(e);if(o)r.push(o)}return r}function _e(n){let r=n.trim();if(!r)return;let e=r.match(/^data:([^;,]+);base64,(.+)$/);if(e){let o=e[1],f=e[2];if(!o||!f)return;return{type:"image",mediaType:o,data:f}}return{type:"image",mediaType:"image/png",data:r}}async function ve(n,r){if(!n||n.length===0)return;let e=r??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),o=await Promise.all(n.map(async(f)=>{let i=f.replace(/\\/g,"/");try{let s=await e(f);return{type:"file",path:i,content:s}}catch(s){let E=s instanceof Error?s.message:String(s);return{type:"file",path:i,content:`Error fetching content: ${E}`}}}));if(o.length===0)return;return o}var ye=new Set(["hooks","tools","commands","shortcuts","flags","message_renderers","providers"]),Te=new Set(["input","runtime_event","session_start","run_start","iteration_start","turn_start","before_agent_start","tool_call_before","tool_call_after","turn_end","iteration_end","run_end","session_shutdown","error"]),ir={input:"onInput",runtime_event:"onRuntimeEvent",session_start:"onSessionStart",run_start:"onRunStart",iteration_start:"onIterationStart",turn_start:"onTurnStart",before_agent_start:"onBeforeAgentStart",tool_call_before:"onToolCall",tool_call_after:"onToolResult",turn_end:"onAgentEnd",iteration_end:"onIterationEnd",run_end:"onRunEnd",session_shutdown:"onSessionShutdown",error:"onError"};function Re(n,r){return n.name||`extension_${String(r).padStart(4,"0")}`}function Ae(n){return typeof n.onInput==="function"||typeof n.onRuntimeEvent==="function"||typeof n.onSessionStart==="function"||typeof n.onRunStart==="function"||typeof n.onIterationStart==="function"||typeof n.onTurnStart==="function"||typeof n.onBeforeAgentStart==="function"||typeof n.onToolCall==="function"||typeof n.onToolResult==="function"||typeof n.onAgentEnd==="function"||typeof n.onIterationEnd==="function"||typeof n.onRunEnd==="function"||typeof n.onSessionShutdown==="function"||typeof n.onError==="function"}function we(n,r){let e=Re(n,r),o=n.manifest;if(!o||typeof o!=="object")throw Error(`Invalid manifest for extension "${e}": manifest is required`);if(!Array.isArray(o.capabilities)||o.capabilities.length===0)throw Error(`Invalid manifest for extension "${e}": capabilities must be a non-empty array`);let f=new Set;for(let h of o.capabilities){if(!ye.has(h))throw Error(`Invalid manifest for extension "${e}": unsupported capability "${String(h)}"`);f.add(h)}let i=o.hookStages??[];if(!Array.isArray(i))throw Error(`Invalid manifest for extension "${e}": hookStages must be an array when provided`);let s=new Set;for(let h of i){if(!Te.has(h))throw Error(`Invalid manifest for extension "${e}": unsupported hook stage "${String(h)}"`);s.add(h)}let E=f.has("hooks");if(Ae(n)&&!E)throw Error(`Invalid manifest for extension "${e}": hook handlers require the "hooks" capability`);if(E&&s.size===0)throw Error(`Invalid manifest for extension "${e}": hooks capability requires at least one hook stage`);for(let h of s){let y=ir[h];if(typeof n[y]!=="function")throw Error(`Invalid manifest for extension "${e}": stage "${h}" is declared but handler "${y}" is missing`)}for(let[h,y]of Object.entries(ir))if(typeof n[y]==="function"&&!s.has(h))throw Error(`Invalid manifest for extension "${e}": handler "${y}" must declare stage "${h}"`);return{capabilities:f,hookStages:s,raw:o}}class sr{extensions;registry={tools:[],commands:[],shortcuts:[],flags:[],messageRenderers:[],providers:[]};normalized=[];phase="resolve";constructor(n={}){this.extensions=n.extensions??[]}resolve(){if(this.phase!=="resolve")return;this.normalized=this.extensions.map((n,r)=>({extension:n,order:r,manifest:{capabilities:new Set,hookStages:new Set,raw:n.manifest}})),this.phase="validate"}validate(){if(this.phase==="resolve")this.resolve();if(this.phase!=="validate")return;this.normalized=this.normalized.map((n)=>({...n,manifest:we(n.extension,n.order)})),this.phase="setup"}async setup(){if(this.phase==="resolve")this.resolve();if(this.phase==="validate")this.validate();if(this.phase!=="setup")return;let n={registerTool:(r)=>this.registry.tools.push(r),registerCommand:(r)=>this.registry.commands.push(r),registerShortcut:(r)=>this.registry.shortcuts.push(r),registerFlag:(r)=>this.registry.flags.push(r),registerMessageRenderer:(r)=>this.registry.messageRenderers.push(r),registerProvider:(r)=>this.registry.providers.push(r)};for(let{extension:r}of this.normalized)await r.setup?.(n);this.phase="activate"}activate(){if(this.phase==="resolve")this.resolve();if(this.phase==="validate")this.validate();if(this.phase==="setup")throw Error("Contribution registry setup must complete before activation");if(this.phase!=="activate")return;this.phase="run"}async initialize(){this.resolve(),this.validate(),await this.setup(),this.activate()}isActivated(){return this.phase==="run"}getRegistrySnapshot(){return{tools:[...this.registry.tools],commands:[...this.registry.commands],shortcuts:[...this.registry.shortcuts],flags:[...this.registry.flags],messageRenderers:[...this.registry.messageRenderers],providers:[...this.registry.providers]}}getRegisteredTools(){return[...this.registry.tools]}getValidatedExtensions(){if(this.phase==="resolve")this.resolve();if(this.phase==="validate")this.validate();return this.normalized.slice().sort((n,r)=>n.order-r.order).map(({extension:n})=>n)}}function Er(n={}){return new sr(n)}function Ce(n,r){let e=(r.priority??0)-(n.priority??0);if(e!==0)return e;return n.name.localeCompare(r.name)}var Pe={input:{mode:"blocking",timeoutMs:2500,retries:0,retryDelayMs:100,failureMode:"fail_open",maxConcurrency:1,queueLimit:100},runtime_event:{mode:"async",timeoutMs:1500,retries:0,retryDelayMs:100,failureMode:"fail_open",maxConcurrency:4,queueLimit:2000},session_start:{mode:"blocking",timeoutMs:2500,retries:0,retryDelayMs:100,failureMode:"fail_open",maxConcurrency:1,queueLimit:100},run_start:{mode:"blocking",timeoutMs:2500,retries:0,retryDelayMs:100,failureMode:"fail_open",maxConcurrency:1,queueLimit:100},iteration_start:{mode:"blocking",timeoutMs:2000,retries:0,retryDelayMs:100,failureMode:"fail_open",maxConcurrency:1,queueLimit:200},turn_start:{mode:"blocking",timeoutMs:2000,retries:0,retryDelayMs:100,failureMode:"fail_open",maxConcurrency:1,queueLimit:200},before_agent_start:{mode:"blocking",timeoutMs:3000,retries:0,retryDelayMs:100,failureMode:"fail_open",maxConcurrency:1,queueLimit:200},tool_call_before:{mode:"blocking",timeoutMs:4000,retries:1,retryDelayMs:150,failureMode:"fail_open",maxConcurrency:1,queueLimit:500},tool_call_after:{mode:"blocking",timeoutMs:3000,retries:1,retryDelayMs:200,failureMode:"fail_open",maxConcurrency:1,queueLimit:1000},turn_end:{mode:"blocking",timeoutMs:3000,retries:1,retryDelayMs:200,failureMode:"fail_open",maxConcurrency:1,queueLimit:500},iteration_end:{mode:"async",timeoutMs:3000,retries:1,retryDelayMs:200,failureMode:"fail_open",maxConcurrency:2,queueLimit:500},run_end:{mode:"async",timeoutMs:3000,retries:1,retryDelayMs:200,failureMode:"fail_open",maxConcurrency:2,queueLimit:500},session_shutdown:{mode:"async",timeoutMs:3000,retries:1,retryDelayMs:200,failureMode:"fail_open",maxConcurrency:2,queueLimit:500},error:{mode:"async",timeoutMs:1500,retries:0,retryDelayMs:100,failureMode:"fail_open",maxConcurrency:2,queueLimit:500}};function ge(n,r){if(!n&&!r)return;let e=[...Array.isArray(n?.appendMessages)?n.appendMessages:[],...Array.isArray(r?.appendMessages)?r.appendMessages:[]],o={cancel:!!(n?.cancel||r?.cancel),review:!!(n?.review||r?.review),context:[n?.context,r?.context].filter((i)=>typeof i==="string"&&!!i).join(`
2
+ `),overrideInput:Object.hasOwn(r??{},"overrideInput")?r?.overrideInput:n?.overrideInput},f=typeof r?.systemPrompt==="string"?r.systemPrompt:n?.systemPrompt;if(typeof f==="string")o.systemPrompt=f;if(e.length>0)o.appendMessages=e;return o}function Ln(n,r){return{mode:r?.mode??n.mode,timeoutMs:r?.timeoutMs??n.timeoutMs,retries:r?.retries??n.retries,retryDelayMs:r?.retryDelayMs??n.retryDelayMs,failureMode:r?.failureMode??n.failureMode,maxConcurrency:Math.max(1,r?.maxConcurrency??n.maxConcurrency),queueLimit:Math.max(1,r?.queueLimit??n.queueLimit)}}function le(n){return n instanceof Error?n:Error(String(n))}function He(n){return!!n&&typeof n==="object"}async function De(n,r,e,o){if(r<=0)return await n;let f;try{return await Promise.race([n,new Promise((i,s)=>{f=setTimeout(()=>{s(Error(`Hook handler "${e}" timed out after ${r}ms at stage "${o}"`))},r)})])}finally{if(f)clearTimeout(f)}}class en{handlers=new Map;options;sequence=0;eventCounter=0;stageQueues=new Map;inFlight=new Set;constructor(n={}){this.options=n}register(n){let r=this.handlers.get(n.stage)??[];r.push(n),r.sort(Ce),this.handlers.set(n.stage,r)}async dispatch(n){let r={eventId:`hook_evt_${String(++this.eventCounter).padStart(8,"0")}`,stage:n.stage,createdAt:new Date,sequence:++this.sequence,runId:n.runId,agentId:n.agentId,conversationId:n.conversationId,parentAgentId:n.parentAgentId,iteration:n.iteration,parentEventId:n.parentEventId,payload:n.payload},e=this.getHandlers(n.stage);if(e.length===0)return{event:r,queued:!1,dropped:!1,control:void 0,results:[]};let o=this.resolveStagePolicy(n.stage);if(o.mode==="async"){let i=this.getStageQueueState(n.stage);if(i.items.length>=o.queueLimit)return this.options.onDroppedEvent?.(r,o),{event:r,queued:!1,dropped:!0,control:void 0,results:[]};return i.items.push({event:r,stagePolicy:o,handlers:e}),this.kickQueue(n.stage),{event:r,queued:!0,dropped:!1,control:void 0,results:[]}}let f=await this.executeHandlers(r,e,o);return{event:r,queued:!1,dropped:!1,control:this.mergeControlsFromResults(f),results:f}}async shutdown(n=3000){let r=Date.now();while(this.inFlight.size>0){if(Date.now()-r>=n)break;await Promise.race([...this.inFlight])}}getHandlers(n){return[...this.handlers.get(n)??[]]}getStageQueueState(n){let r=this.stageQueues.get(n);if(r)return r;let e={activeCount:0,items:[]};return this.stageQueues.set(n,e),e}kickQueue(n){let r=this.getStageQueueState(n),e=this.resolveStagePolicy(n);while(r.activeCount<e.maxConcurrency&&r.items.length>0){let o=r.items.shift();if(!o)return;r.activeCount+=1;let f=this.executeHandlers(o.event,o.handlers,o.stagePolicy).then(()=>{return}).catch(()=>{}).finally(()=>{r.activeCount-=1,this.inFlight.delete(f),this.kickQueue(n)});this.inFlight.add(f)}}resolveStagePolicy(n){let r=Ln(Pe[n],this.options.policies?.defaultPolicy);return Ln(r,this.options.policies?.stages?.[n])}resolveHandlerPolicy(n,r){let e=this.resolveStagePolicy(n);return Ln(e,this.options.policies?.handlers?.[r])}async executeHandlers(n,r,e){let o=[];for(let f of r){let i=this.resolveHandlerPolicy(n.stage,f.name);if(e.mode==="async"&&i.mode==="blocking"){o.push({handlerName:f.name,stage:n.stage,status:"skipped",attempts:0,durationMs:0});continue}let s=await this.executeHandler(n,f,i);if(o.push(s),(s.status==="error"||s.status==="timeout")&&i.failureMode==="fail_closed")throw s.error??Error(`Hook handler "${f.name}" failed at stage "${n.stage}"`)}return o}async executeHandler(n,r,e){let o=Date.now(),f=0,i,s="error";while(f<=e.retries){f+=1;try{let E=await De(Promise.resolve(r.handle(n)),e.timeoutMs,r.name,n.stage),d=He(E)?E:void 0;return{handlerName:r.name,stage:n.stage,status:"ok",attempts:f,durationMs:Date.now()-o,control:d}}catch(E){if(i=le(E),s=/timed out/i.test(i.message)?"timeout":"error",this.options.onDispatchError?.(i,n,r.name),f<=e.retries&&e.retryDelayMs>0)await new Promise((d)=>setTimeout(d,e.retryDelayMs))}}return{handlerName:r.name,stage:n.stage,status:s,attempts:f,durationMs:Date.now()-o,error:i}}mergeControlsFromResults(n){let r;for(let e of n){if(e.status!=="ok")continue;r=ge(r,e.control)}return r}}var Le={input:{name:"onInput",handler:(n,r)=>n.onInput?.(r.payload)},session_start:{name:"onSessionStart",handler:(n,r)=>n.onSessionStart?.(r.payload)},run_start:{name:"onRunStart",handler:(n,r)=>n.onRunStart?.(r.payload)},iteration_start:{name:"onIterationStart",handler:(n,r)=>n.onIterationStart?.(r.payload)},turn_start:{name:"onTurnStart",handler:(n,r)=>n.onTurnStart?.(r.payload)},before_agent_start:{name:"onBeforeAgentStart",handler:(n,r)=>n.onBeforeAgentStart?.(r.payload)},tool_call_before:{name:"onToolCall",handler:(n,r)=>n.onToolCall?.(r.payload)},tool_call_after:{name:"onToolResult",handler:(n,r)=>n.onToolResult?.(r.payload)},turn_end:{name:"onAgentEnd",handler:(n,r)=>n.onAgentEnd?.(r.payload)},iteration_end:{name:"onIterationEnd",handler:async(n,r)=>{await n.onIterationEnd?.(r.payload);return}},run_end:{name:"onRunEnd",handler:async(n,r)=>{await n.onRunEnd?.(r.payload);return}},session_shutdown:{name:"onSessionShutdown",handler:(n,r)=>n.onSessionShutdown?.(r.payload)},error:{name:"onError",handler:async(n,r)=>{await n.onError?.(r.payload);return}},runtime_event:{name:"onRuntimeEvent",handler:async(n,r)=>{await n.onRuntimeEvent?.(r.payload);return}}};function On(n,r){let e=(f)=>{n.register(f)},o=r.hooks;if(o?.onSessionStart)e({name:"hooks.onSessionStart",stage:"session_start",handle:(f)=>o.onSessionStart?.(f.payload)});if(o?.onRunStart)e({name:"hooks.onRunStart",stage:"run_start",handle:(f)=>o.onRunStart?.(f.payload)});if(o?.onRunEnd)e({name:"hooks.onRunEnd",stage:"run_end",handle:async(f)=>{await o.onRunEnd?.(f.payload);return}});if(o?.onIterationStart)e({name:"hooks.onIterationStart",stage:"iteration_start",handle:(f)=>o.onIterationStart?.(f.payload)});if(o?.onIterationEnd)e({name:"hooks.onIterationEnd",stage:"iteration_end",handle:async(f)=>{await o.onIterationEnd?.(f.payload);return}});if(o?.onTurnStart)e({name:"hooks.onTurnStart",stage:"turn_start",handle:(f)=>o.onTurnStart?.(f.payload)});if(o?.onTurnEnd)e({name:"hooks.onTurnEnd",stage:"turn_end",handle:(f)=>o.onTurnEnd?.(f.payload)});if(o?.onToolCallStart)e({name:"hooks.onToolCallStart",stage:"tool_call_before",handle:(f)=>o.onToolCallStart?.(f.payload)});if(o?.onToolCallEnd)e({name:"hooks.onToolCallEnd",stage:"tool_call_after",handle:(f)=>o.onToolCallEnd?.(f.payload)});if(o?.onSessionShutdown)e({name:"hooks.onSessionShutdown",stage:"session_shutdown",handle:(f)=>o.onSessionShutdown?.(f.payload)});if(o?.onError)e({name:"hooks.onError",stage:"error",handle:async(f)=>{await o.onError?.(f.payload);return}});for(let[f,i]of(r.extensions??[]).entries()){if(!i.manifest.capabilities.includes("hooks"))continue;let s=String(f).padStart(4,"0"),E=i.name||`extension_${s}`,d=`${s}:${E}`,h=new Set(i.manifest.hookStages??[]);for(let y of h){let P=Le[y];if(!P)continue;e({name:`${d}.${P.name}`,stage:y,handle:(R)=>P.handler(i,R)})}}}var Oe=new Set(["read","read_files","bash","run_commands"]),qe=new Set(["read","read_files"]);class qn{maxToolResultChars;targetToolNames;indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readPathsByToolUseIdCache=new Map;latestReadToolUseByPathCache=new Map;readResultPathCache=new WeakMap;constructor(n=50000,r=Oe){this.maxToolResultChars=n;this.targetToolNames=r}buildForApi(n){this.reindex(n);let r=this.toolNameByIdCache,e=this.readPathsByToolUseIdCache,o=this.latestReadToolUseByPathCache;return n.map((f)=>{if(!Array.isArray(f.content))return f;let i=f.content.map((s)=>{if(s.type==="file"){let h=this.truncateMiddle(s.content);if(h===s.content)return s;return{...s,content:h}}if(s.type!=="tool_result")return s;let E=r.get(s.tool_use_id),d=s.content;if(this.isReadTool(E)){let h=this.getReadResultRecord(s,e.get(s.tool_use_id));if(h){let y=h.paths.filter((P)=>o.get(P)!==s.tool_use_id);if(y.length>0)d=this.replaceOutdatedReadContent(d,y)}}if(this.shouldTruncateTool(E))d=this.truncateToolResultContent(d);if(d===s.content)return s;return{...s,content:d}});return{...f,content:i}})}reindex(n){if(n.length<this.indexedMessageCount)this.resetIndexes();if(this.indexedMessageCount>0&&n.length>=this.indexedMessageCount&&n[this.indexedMessageCount-1]!==this.indexedTailRef)this.resetIndexes();for(let r=this.indexedMessageCount;r<n.length;r++){let e=n[r];if(!Array.isArray(e.content))continue;for(let o of e.content){if(o.type==="tool_use"){let f=o.name.toLowerCase();if(this.toolNameByIdCache.set(o.id,f),this.isReadTool(f)){let i=this.extractPathsFromReadToolInput(o.input);if(i.length>0)this.readPathsByToolUseIdCache.set(o.id,i)}continue}if(o.type==="tool_result"){let f=this.toolNameByIdCache.get(o.tool_use_id);if(!this.isReadTool(f))continue;let i=this.getReadResultRecord(o,this.readPathsByToolUseIdCache.get(o.tool_use_id));if(!i)continue;for(let s of i.paths)this.latestReadToolUseByPathCache.set(s,i.toolUseId)}}}this.indexedMessageCount=n.length,this.indexedTailRef=n.length>0?n[n.length-1]:void 0}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readPathsByToolUseIdCache.clear(),this.latestReadToolUseByPathCache.clear(),this.readResultPathCache=new WeakMap}getReadResultRecord(n,r){let e=n,o=this.readResultPathCache.get(e),f=o??this.extractReadPathsFromToolResultContent(n.content);if(!o)this.readResultPathCache.set(e,f);let i=f.length>0?f:r??[];if(i.length===0)return;return{toolUseId:n.tool_use_id,paths:i}}extractPathsFromReadToolInput(n){let r=[],e=n.path,o=n.file_path,f=n.file_paths;if(typeof e==="string"&&e.length>0)r.push(e);if(typeof o==="string"&&o.length>0)r.push(o);if(Array.isArray(f)){for(let i of f)if(typeof i==="string"&&i.length>0)r.push(i)}return Array.from(new Set(r))}extractReadPathsFromToolResultContent(n){if(typeof n!=="string")return[];try{let r=JSON.parse(n);return this.extractPathsFromParsedReadResult(r)}catch{return[]}}extractPathsFromParsedReadResult(n){if(Array.isArray(n)){let e=n.map((o)=>this.extractPathFromResultEntry(o)).filter((o)=>typeof o==="string"&&o.length>0);return Array.from(new Set(e))}let r=this.extractPathFromResultEntry(n);return r?[r]:[]}extractPathFromResultEntry(n){if(!n||typeof n!=="object")return;let r=n,e=[r.path,r.file_path,r.filePath,r.query];for(let o of e)if(typeof o==="string"&&o.length>0)return o;return}replaceOutdatedReadContent(n,r){let e=new Set(r);if(typeof n==="string")return this.replaceOutdatedReadContentInString(n,e)??"[outdated - see the latest file content]";return n.map((o)=>{if(o.type==="file"){if(!e.has(o.path))return o;return{...o,content:"[outdated - see the latest file content]"}}if(o.type!=="text")return o;let f=this.replaceOutdatedReadContentInString(o.text,e);if(f===null)return{...o,text:"[outdated - see the latest file content]"};if(f===o.text)return o;return{...o,text:f}})}replaceOutdatedReadContentInString(n,r){try{let e=JSON.parse(n),o=this.replaceOutdatedReadContentInParsed(e,r);return JSON.stringify(o)}catch{return null}}replaceOutdatedReadContentInParsed(n,r){if(Array.isArray(n))return n.map((e)=>this.replaceOutdatedReadEntry(e,r));return this.replaceOutdatedReadEntry(n,r)}replaceOutdatedReadEntry(n,r){if(!n||typeof n!=="object")return n;let e={...n},o=this.extractPathFromResultEntry(e);if(!o||!r.has(o))return n;if(typeof e.result==="string")e.result="[outdated - see the latest file content]";else if(typeof e.content==="string")e.content="[outdated - see the latest file content]";else e.result="[outdated - see the latest file content]";return e}isReadTool(n){if(!n)return!1;return qe.has(n.toLowerCase())}shouldTruncateTool(n){if(!n)return!1;return this.targetToolNames.has(n.toLowerCase())}truncateToolResultContent(n){if(typeof n==="string")return this.truncateMiddle(n);return n.map((r)=>{if(r.type==="file"){let o=this.truncateMiddle(r.content);if(o===r.content)return r;return{...r,content:o}}if(r.type!=="text")return r;let e=this.truncateMiddle(r.text);if(e===r.text)return r;return{...r,text:e}})}truncateMiddle(n){if(n.length<=this.maxToolResultChars)return n;let r=1e5,o=`
3
3
 
4
- ...[truncated ${Math.max(0,n.length-e)} chars]...
4
+ ...[truncated ${Math.max(0,n.length-r)} chars]...
5
5
 
6
- `,i=n.slice(0,50000),f=n.slice(-50000);return`${i}${o}${f}`}}function ee(){let n=0,e=0,r=new Map,o=new Map;return{subscribeRuntimeEvent:(i)=>{let f=++n;return r.set(f,i),()=>{r.delete(f)}},subscribeLifecycleEvent:(i)=>{let f=++e;return o.set(f,i),()=>{o.delete(f)}},emitRuntimeEvent:(i)=>{for(let f of r.values())f(i)},emitLifecycleEvent:(i)=>{for(let f of o.values())f(i)}}}function gn(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class Hn{messages=[];conversationId=gn();sessionStarted=!1;constructor(n){if((n?.length??0)>0)this.restore(n??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage(n){this.messages.push(n)}appendMessages(n){if(n.length===0)return;this.messages.push(...n)}resetForRun(){this.messages=[],this.conversationId=gn(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=gn(),this.sessionStarted=!1}restore(n){this.messages=[...n],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}class Dn{hookEngine;runtimeBus;getRunId;getAgentId;getConversationId;getParentAgentId;onHookContext;onDispatchError;constructor(n){this.hookEngine=n.hookEngine,this.runtimeBus=n.runtimeBus,this.getRunId=n.getRunId,this.getAgentId=n.getAgentId,this.getConversationId=n.getConversationId,this.getParentAgentId=n.getParentAgentId,this.onHookContext=n.onHookContext,this.onDispatchError=n.onDispatchError}async dispatch(n,e){this.runtimeBus.emitLifecycleEvent({stage:e.stage,iteration:e.iteration,payload:e.payload});let r=await this.hookEngine.dispatch({...e,runId:this.getRunId(),agentId:this.getAgentId(),conversationId:this.getConversationId(),parentAgentId:this.getParentAgentId()});if(r.control?.context)this.onHookContext?.(n,r.control.context);return r.control}dispatchRuntimeEvent(n){this.hookEngine.dispatch({stage:"runtime_event",runId:this.getRunId(),agentId:this.getAgentId(),conversationId:this.getConversationId(),parentAgentId:this.getParentAgentId(),payload:{agentId:this.getAgentId(),conversationId:this.getConversationId(),parentAgentId:this.getParentAgentId(),event:n}}).catch((e)=>{this.onDispatchError?.(e)})}async shutdown(n){await this.hookEngine.shutdown(n)}}import{z as M}from"zod";var re=M.enum(["connector.started","connector.stopping","message.received","message.completed","message.failed","session.started","session.reused","thread.reset","schedule.delivery.started","schedule.delivery.sent","schedule.delivery.failed"]),Dr=M.object({adapter:M.string(),botUserName:M.string().optional(),event:re,payload:M.record(M.string(),M.unknown()),ts:M.string()});var oe=[{modelsDevKey:"openai",generatedProviderId:"openai",runtimeProviderId:"openai-native"},{modelsDevKey:"openai",generatedProviderId:"openai",runtimeProviderId:"openai-codex"},{modelsDevKey:"anthropic",generatedProviderId:"anthropic"},{modelsDevKey:"anthropic",generatedProviderId:"anthropic",runtimeProviderId:"claude-code"},{modelsDevKey:"google",generatedProviderId:"gemini"},{modelsDevKey:"deepseek",generatedProviderId:"deepseek"},{modelsDevKey:"xai",generatedProviderId:"xai"},{modelsDevKey:"togetherai",runtimeProviderId:"together",generatedProviderId:"together"},{modelsDevKey:"sap-ai-core",runtimeProviderId:"sapaicore",generatedProviderId:"sapaicore"},{modelsDevKey:"fireworks-ai",runtimeProviderId:"fireworks",generatedProviderId:"fireworks"},{modelsDevKey:"groq",runtimeProviderId:"groq",generatedProviderId:"groq"},{modelsDevKey:"cerebras",runtimeProviderId:"cerebras",generatedProviderId:"cerebras"},{modelsDevKey:"sambanova",runtimeProviderId:"sambanova",generatedProviderId:"sambanova"},{modelsDevKey:"nebius",runtimeProviderId:"nebius",generatedProviderId:"nebius"},{modelsDevKey:"huggingface",runtimeProviderId:"huggingface",generatedProviderId:"huggingface"},{modelsDevKey:"openrouter",runtimeProviderId:"cline",generatedProviderId:"openrouter"},{modelsDevKey:"ollama",runtimeProviderId:"ollama-cloud"},{modelsDevKey:"ollama-cloud",generatedProviderId:"ollama"},{modelsDevKey:"vercel",runtimeProviderId:"dify",generatedProviderId:"vercel-ai-gateway"},{modelsDevKey:"vercel",generatedProviderId:"vercel-ai-gateway"},{modelsDevKey:"aihubmix",runtimeProviderId:"aihubmix",generatedProviderId:"aihubmix"},{modelsDevKey:"hicap",runtimeProviderId:"hicap"},{modelsDevKey:"nous-research",runtimeProviderId:"nousResearch"},{modelsDevKey:"huawei-cloud-maas",runtimeProviderId:"huawei-cloud-maas"},{modelsDevKey:"baseten",runtimeProviderId:"baseten",generatedProviderId:"baseten"},{modelsDevKey:"google-vertex-anthropic",generatedProviderId:"vertex"},{modelsDevKey:"lmstudio",generatedProviderId:"lmstudio"},{modelsDevKey:"zai",generatedProviderId:"zai"},{modelsDevKey:"requesty",generatedProviderId:"requesty"},{modelsDevKey:"amazon-bedrock",generatedProviderId:"bedrock"},{modelsDevKey:"moonshotai",generatedProviderId:"moonshot"},{modelsDevKey:"minimax",generatedProviderId:"minimax"}];function Lr(n){return Object.fromEntries(oe.flatMap((e)=>{let r=n==="modelsDevKey"?e.modelsDevKey:e.generatedProviderId;return r?[[e.modelsDevKey,r]]:[]}))}var Or=Lr("generatedProviderId");import{z as q}from"zod";var Ln=q.object({agentId:q.string(),conversationId:q.string(),iteration:q.number(),abortSignal:q.custom().optional(),metadata:q.record(q.string(),q.unknown()).optional()}),z=q.object({id:q.string(),name:q.string(),input:q.unknown(),output:q.unknown(),error:q.string().optional(),durationMs:q.number(),startedAt:q.date(),endedAt:q.date()});class X extends Error{constructor(n,e){super(`${n} at position ${e}`);this.position=e}}function ie(n){return/^[0-9A-Fa-f]$/.test(n)}function W(n){return n>="0"&&n<="9"}function fe(n){return n>=" "}function x(n){return`,:[]/{}()
7
- +`.includes(n)}function On(n){return n>="a"&&n<="z"||n>="A"&&n<="Z"||n==="_"||n==="$"}function qn(n){return n>="a"&&n<="z"||n>="A"&&n<="Z"||n==="_"||n==="$"||n>="0"&&n<="9"}var Kn=/^(http|https|ftp|mailto|file|data|irc):\/\/$/,$n=/^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/;function Bn(n){return`,[]/{}
8
- +`.includes(n)}function Nn(n){return a(n)||qr.test(n)}var qr=/^[[{\w-]$/;function se(n){return n===`
9
- `||n==="\r"||n==="\t"||n==="\b"||n==="\f"}function Z(n,e){let r=n.charCodeAt(e);return r===32||r===10||r===9||r===13}function Ee(n,e){let r=n.charCodeAt(e);return r===32||r===9||r===13}function de(n,e){let r=n.charCodeAt(e);return r===160||r===6158||r>=8192&&r<=8203||r===8239||r===8287||r===12288||r===65279}function a(n){return Jn(n)||fn(n)}function Jn(n){return n==='"'||n==="“"||n==="”"}function Yn(n){return n==='"'}function fn(n){return n==="'"||n==="‘"||n==="’"||n==="`"||n==="´"}function kn(n){return n==="'"}function m(n,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,o=n.lastIndexOf(e);return o!==-1?n.substring(0,o)+(r?"":n.substring(o+1)):n}function J(n,e){let r=n.length;if(!Z(n,r-1))return n+e;while(Z(n,r-1))r--;return n.substring(0,r)+e+n.substring(r)}function Se(n,e,r){return n.substring(0,e)+n.substring(e+r)}function ve(n){return/[,\n][ \t\r]*$/.test(n)}var Kr={"\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t"},$r={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:`
10
- `,r:"\r",t:"\t"};function Vn(n){let e=0,r="";if(v(["```","[```","{```"]),!f())or();v(["```","```]","```}"]);let i=P(",");if(i)s();if(Nn(n[e])&&ve(r)){if(!i)r=J(r,",");N()}else if(i)r=m(r,",");while(n[e]==="}"||n[e]==="]")e++,s();if(e>=n.length)return r;rr();function f(){s();let T=k()||$()||A()||Q()||Rn()||nn(!1)||en();return s(),T}function s(){let T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,C=e,g=E(T);do if(g=d(),g)g=E(T);while(g);return e>C}function E(T){let C=T?Z:Ee,g="";while(!0)if(C(n,e))g+=n[e],e++;else if(de(n,e))g+=" ",e++;else break;if(g.length>0)return r+=g,!0;return!1}function d(){if(n[e]==="/"&&n[e+1]==="*"){while(e<n.length&&!Br(n,e))e++;return e+=2,!0}if(n[e]==="/"&&n[e+1]==="/"){while(e<n.length&&n[e]!==`
11
- `)e++;return!0}return!1}function v(T){if(y(T)){if(On(n[e]))while(e<n.length&&qn(n[e]))e++;return s(),!0}return!1}function y(T){E(!0);for(let C of T){let g=e+C.length;if(n.slice(e,g)===C)return e=g,!0}return!1}function P(T){if(n[e]===T)return r+=n[e],e++,!0;return!1}function l(T){if(n[e]===T)return e++,!0;return!1}function L(){return l("\\")}function B(){if(s(),n[e]==="."&&n[e+1]==="."&&n[e+2]===".")return e+=3,s(),l(","),!0;return!1}function k(){if(n[e]==="{"){if(r+="{",e++,s(),l(","))s();let T=!0;while(e<n.length&&n[e]!=="}"){let C;if(!T){if(C=P(","),!C)r=J(r,",");s()}else C=!0,T=!1;if(B(),!(A()||nn(!0))){if(n[e]==="}"||n[e]==="{"||n[e]==="]"||n[e]==="["||n[e]===void 0)r=m(r,",");else ir();break}s();let on=P(":"),F=e>=n.length;if(!on)if(Nn(n[e])||F)r=J(r,":");else zn();if(!f())if(on||F)r+="null";else zn()}if(n[e]==="}")r+="}",e++;else r=J(r,"}");return!0}return!1}function $(){if(n[e]==="["){if(r+="[",e++,s(),l(","))s();let T=!0;while(e<n.length&&n[e]!=="]"){if(!T){if(!P(","))r=J(r,",")}else T=!1;if(B(),!f()){r=m(r,",");break}}if(n[e]==="]")r+="]",e++;else r=J(r,"]");return!0}return!1}function N(){let T=!0,C=!0;while(C){if(!T){if(!P(","))r=J(r,",")}else T=!1;C=f()}if(!C)r=m(r,",");r=`[
12
- ${r}
13
- ]`}function A(){let T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,C=arguments.length>1&&arguments[1]!==void 0?arguments[1]:-1,g=n[e]==="\\";if(g)e++,g=!0;if(a(n[e])){let on=Yn(n[e])?Yn:kn(n[e])?kn:fn(n[e])?fn:Jn,F=e,c=r.length,O='"';e++;while(!0){if(e>=n.length){let K=In(e-1);if(!T&&x(n.charAt(K)))return e=F,r=r.substring(0,c),A(!0);return O=J(O,'"'),r+=O,!0}if(e===C)return O=J(O,'"'),r+=O,!0;if(on(n[e])){let K=e,Cn=O.length;if(O+='"',e++,r+=O,s(!1),T||e>=n.length||x(n[e])||a(n[e])||W(n[e]))return R(),!0;let G=In(K-1),xn=n.charAt(G);if(xn===",")return e=F,r=r.substring(0,c),A(!1,G);if(x(xn))return e=F,r=r.substring(0,c),A(!0);r=r.substring(0,c),e=K+1,O=`${O.substring(0,Cn)}\\${O.substring(Cn)}`}else if(T&&Bn(n[e])){if(n[e-1]===":"&&Kn.test(n.substring(F+1,e+2)))while(e<n.length&&$n.test(n[e]))O+=n[e],e++;return O=J(O,'"'),r+=O,R(),!0}else if(n[e]==="\\"){let K=n.charAt(e+1);if($r[K]!==void 0)O+=n.slice(e,e+2),e+=2;else if(K==="u"){let G=2;while(G<6&&ie(n[e+G]))G++;if(G===6)O+=n.slice(e,e+6),e+=6;else if(e+G>=n.length)e=n.length;else fr()}else O+=K,e+=2}else{let K=n.charAt(e);if(K==='"'&&n[e-1]!=="\\")O+=`\\${K}`,e++;else if(se(K))O+=Kr[K],e++;else{if(!fe(K))er(K);O+=K,e++}}if(g)L()}}return!1}function R(){let T=!1;s();while(n[e]==="+"){T=!0,e++,s(),r=m(r,'"',!0);let C=r.length;if(A())r=Se(r,C,1);else r=J(r,'"')}return T}function Q(){let T=e;if(n[e]==="-"){if(e++,rn())return ln(T),!0;if(!W(n[e]))return e=T,!1}while(W(n[e]))e++;if(n[e]==="."){if(e++,rn())return ln(T),!0;if(!W(n[e]))return e=T,!1;while(W(n[e]))e++}if(n[e]==="e"||n[e]==="E"){if(e++,n[e]==="-"||n[e]==="+")e++;if(rn())return ln(T),!0;if(!W(n[e]))return e=T,!1;while(W(n[e]))e++}if(!rn())return e=T,!1;if(e>T){let C=n.slice(T,e),g=/^0\d/.test(C);return r+=g?`"${C}"`:C,!0}return!1}function Rn(){return V("true","true")||V("false","false")||V("null","null")||V("True","true")||V("False","false")||V("None","null")}function V(T,C){if(n.slice(e,e+T.length)===T)return r+=C,e+=T.length,!0;return!1}function nn(T){let C=e;if(On(n[e])){while(e<n.length&&qn(n[e]))e++;let g=e;while(Z(n,g))g++;if(n[g]==="("){if(e=g+1,f(),n[e]===")"){if(e++,n[e]===";")e++}return!0}}while(e<n.length&&!Bn(n[e])&&!a(n[e])&&(!T||n[e]!==":"))e++;if(n[e-1]===":"&&Kn.test(n.substring(C,e+2)))while(e<n.length&&$n.test(n[e]))e++;if(e>C){while(Z(n,e-1)&&e>0)e--;let g=n.slice(C,e);if(r+=g==="undefined"?"null":JSON.stringify(g),n[e]==='"')e++;return!0}}function en(){if(n[e]==="/"){let T=e;e++;while(e<n.length&&(n[e]!=="/"||n[e-1]==="\\"))e++;return e++,r+=JSON.stringify(n.substring(T,e)),!0}}function In(T){let C=T;while(C>0&&Z(n,C))C--;return C}function rn(){return e>=n.length||x(n[e])||Z(n,e)}function ln(T){r+=`${n.slice(T,e)}0`}function er(T){throw new X(`Invalid character ${JSON.stringify(T)}`,e)}function rr(){throw new X(`Unexpected character ${JSON.stringify(n[e])}`,e)}function or(){throw new X("Unexpected end of json string",n.length)}function ir(){throw new X("Object key expected",e)}function zn(){throw new X("Colon expected",e)}function fr(){let T=n.slice(e,e+6);throw new X(`Invalid unicode character "${T}"`,e)}}function Br(n,e){return n[e]==="*"&&n[e+1]==="/"}function he(n){return JSON.parse(n)}function Qn(n){if(typeof n!=="string")return n;let e=n.trimStart();if(!(e.startsWith("{")||e.startsWith("[")))return n;try{return he(e)}catch{try{return he(Vn(e))}catch{return n}}}import{z as _e}from"zod";function D(n,e){let r=n.safeParse(e);if(!r.success)throw Error(_e.prettifyError(r.error));return r.data}function H(n){return _e.toJSONSchema(n)}function ye(n,e){return`<file_content path="${n}">
6
+ `,f=n.slice(0,50000),i=n.slice(-50000);return`${f}${o}${i}`}}function Sr(){let n=0,r=0,e=new Map,o=new Map;return{subscribeRuntimeEvent:(f)=>{let i=++n;return e.set(i,f),()=>{e.delete(i)}},subscribeLifecycleEvent:(f)=>{let i=++r;return o.set(i,f),()=>{o.delete(i)}},emitRuntimeEvent:(f)=>{for(let i of e.values())i(f)},emitLifecycleEvent:(f)=>{for(let i of o.values())i(f)}}}function Kn(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class $n{messages=[];conversationId=Kn();sessionStarted=!1;constructor(n){if((n?.length??0)>0)this.restore(n??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage(n){this.messages.push(n)}appendMessages(n){if(n.length===0)return;this.messages.push(...n)}resetForRun(){this.messages=[],this.conversationId=Kn(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=Kn(),this.sessionStarted=!1}restore(n){this.messages=[...n],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}class Bn{hookEngine;runtimeBus;getRunId;getAgentId;getConversationId;getParentAgentId;onHookContext;onDispatchError;constructor(n){this.hookEngine=n.hookEngine,this.runtimeBus=n.runtimeBus,this.getRunId=n.getRunId,this.getAgentId=n.getAgentId,this.getConversationId=n.getConversationId,this.getParentAgentId=n.getParentAgentId,this.onHookContext=n.onHookContext,this.onDispatchError=n.onDispatchError}async dispatch(n,r){this.runtimeBus.emitLifecycleEvent({stage:r.stage,iteration:r.iteration,payload:r.payload});let e=await this.hookEngine.dispatch({...r,runId:this.getRunId(),agentId:this.getAgentId(),conversationId:this.getConversationId(),parentAgentId:this.getParentAgentId()});if(e.control?.context)this.onHookContext?.(n,e.control.context);return e.control}dispatchRuntimeEvent(n){this.hookEngine.dispatch({stage:"runtime_event",runId:this.getRunId(),agentId:this.getAgentId(),conversationId:this.getConversationId(),parentAgentId:this.getParentAgentId(),payload:{agentId:this.getAgentId(),conversationId:this.getConversationId(),parentAgentId:this.getParentAgentId(),event:n}}).catch((r)=>{this.onDispatchError?.(r)})}async shutdown(n){await this.hookEngine.shutdown(n)}}import{z as M}from"zod";var dr=M.enum(["connector.started","connector.stopping","message.received","message.completed","message.failed","session.started","session.reused","thread.reset","schedule.delivery.started","schedule.delivery.sent","schedule.delivery.failed"]),Ke=M.object({adapter:M.string(),botUserName:M.string().optional(),event:dr,payload:M.record(M.string(),M.unknown()),ts:M.string()});var hr=[{modelsDevKey:"openai",generatedProviderId:"openai",runtimeProviderId:"openai-native"},{modelsDevKey:"openai",generatedProviderId:"openai",runtimeProviderId:"openai-codex"},{modelsDevKey:"anthropic",generatedProviderId:"anthropic"},{modelsDevKey:"anthropic",generatedProviderId:"anthropic",runtimeProviderId:"claude-code"},{modelsDevKey:"google",generatedProviderId:"gemini"},{modelsDevKey:"deepseek",generatedProviderId:"deepseek"},{modelsDevKey:"xai",generatedProviderId:"xai"},{modelsDevKey:"togetherai",runtimeProviderId:"together",generatedProviderId:"together"},{modelsDevKey:"sap-ai-core",runtimeProviderId:"sapaicore",generatedProviderId:"sapaicore"},{modelsDevKey:"fireworks-ai",runtimeProviderId:"fireworks",generatedProviderId:"fireworks"},{modelsDevKey:"groq",runtimeProviderId:"groq",generatedProviderId:"groq"},{modelsDevKey:"cerebras",runtimeProviderId:"cerebras",generatedProviderId:"cerebras"},{modelsDevKey:"sambanova",runtimeProviderId:"sambanova",generatedProviderId:"sambanova"},{modelsDevKey:"nebius",runtimeProviderId:"nebius",generatedProviderId:"nebius"},{modelsDevKey:"huggingface",runtimeProviderId:"huggingface",generatedProviderId:"huggingface"},{modelsDevKey:"openrouter",runtimeProviderId:"cline",generatedProviderId:"openrouter"},{modelsDevKey:"ollama",runtimeProviderId:"ollama-cloud"},{modelsDevKey:"ollama-cloud",generatedProviderId:"ollama"},{modelsDevKey:"vercel",runtimeProviderId:"dify",generatedProviderId:"vercel-ai-gateway"},{modelsDevKey:"vercel",generatedProviderId:"vercel-ai-gateway"},{modelsDevKey:"aihubmix",runtimeProviderId:"aihubmix",generatedProviderId:"aihubmix"},{modelsDevKey:"hicap",runtimeProviderId:"hicap"},{modelsDevKey:"nous-research",runtimeProviderId:"nousResearch"},{modelsDevKey:"huawei-cloud-maas",runtimeProviderId:"huawei-cloud-maas"},{modelsDevKey:"baseten",runtimeProviderId:"baseten",generatedProviderId:"baseten"},{modelsDevKey:"google-vertex-anthropic",generatedProviderId:"vertex"},{modelsDevKey:"lmstudio",generatedProviderId:"lmstudio"},{modelsDevKey:"zai",generatedProviderId:"zai"},{modelsDevKey:"requesty",generatedProviderId:"requesty"},{modelsDevKey:"amazon-bedrock",generatedProviderId:"bedrock"},{modelsDevKey:"moonshotai",generatedProviderId:"moonshot"},{modelsDevKey:"minimax",generatedProviderId:"minimax"}];function $e(n){return Object.fromEntries(hr.flatMap((r)=>{let e=n==="modelsDevKey"?r.modelsDevKey:r.generatedProviderId;return e?[[r.modelsDevKey,e]]:[]}))}var Be=$e("generatedProviderId");import{z as q}from"zod";var Jn=q.object({agentId:q.string(),conversationId:q.string(),iteration:q.number(),abortSignal:q.custom().optional(),metadata:q.record(q.string(),q.unknown()).optional()}),on=q.object({id:q.string(),name:q.string(),input:q.unknown(),output:q.unknown(),error:q.string().optional(),durationMs:q.number(),startedAt:q.date(),endedAt:q.date()});class F extends Error{constructor(n,r){super(`${n} at position ${r}`);this.position=r}}function _r(n){return/^[0-9A-Fa-f]$/.test(n)}function m(n){return n>="0"&&n<="9"}function vr(n){return n>=" "}function fn(n){return`,:[]/{}()
7
+ +`.includes(n)}function Nn(n){return n>="a"&&n<="z"||n>="A"&&n<="Z"||n==="_"||n==="$"}function Yn(n){return n>="a"&&n<="z"||n>="A"&&n<="Z"||n==="_"||n==="$"||n>="0"&&n<="9"}var Vn=/^(http|https|ftp|mailto|file|data|irc):\/\/$/,Qn=/^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/;function Gn(n){return`,[]/{}
8
+ +`.includes(n)}function Xn(n){return sn(n)||Je.test(n)}var Je=/^[[{\w-]$/;function yr(n){return n===`
9
+ `||n==="\r"||n==="\t"||n==="\b"||n==="\f"}function j(n,r){let e=n.charCodeAt(r);return e===32||e===10||e===9||e===13}function Tr(n,r){let e=n.charCodeAt(r);return e===32||e===9||e===13}function Rr(n,r){let e=n.charCodeAt(r);return e===160||e===6158||e>=8192&&e<=8203||e===8239||e===8287||e===12288||e===65279}function sn(n){return Zn(n)||hn(n)}function Zn(n){return n==='"'||n==="“"||n==="”"}function kn(n){return n==='"'}function hn(n){return n==="'"||n==="‘"||n==="’"||n==="`"||n==="´"}function Wn(n){return n==="'"}function t(n,r){let e=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,o=n.lastIndexOf(r);return o!==-1?n.substring(0,o)+(e?"":n.substring(o+1)):n}function Q(n,r){let e=n.length;if(!j(n,e-1))return n+r;while(j(n,e-1))e--;return n.substring(0,e)+r+n.substring(e)}function Ar(n,r,e){return n.substring(0,r)+n.substring(r+e)}function wr(n){return/[,\n][ \t\r]*$/.test(n)}var Ne={"\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t"},Ye={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:`
10
+ `,r:"\r",t:"\t"};function Un(n){let r=0,e="";if(h(["```","[```","{```"]),!i())pn();h(["```","```]","```}"]);let f=P(",");if(f)s();if(Xn(n[r])&&wr(e)){if(!f)e=Q(e,",");N()}else if(f)e=t(e,",");while(n[r]==="}"||n[r]==="]")r++,s();if(r>=n.length)return e;a();function i(){s();let T=J()||Z()||Y()||V()||C()||W(!1)||ln();return s(),T}function s(){let T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,w=r,l=E(T);do if(l=d(),l)l=E(T);while(l);return r>w}function E(T){let w=T?j:Tr,l="";while(!0)if(w(n,r))l+=n[r],r++;else if(Rr(n,r))l+=" ",r++;else break;if(l.length>0)return e+=l,!0;return!1}function d(){if(n[r]==="/"&&n[r+1]==="*"){while(r<n.length&&!Ve(n,r))r++;return r+=2,!0}if(n[r]==="/"&&n[r+1]==="/"){while(r<n.length&&n[r]!==`
11
+ `)r++;return!0}return!1}function h(T){if(y(T)){if(Nn(n[r]))while(r<n.length&&Yn(n[r]))r++;return s(),!0}return!1}function y(T){E(!0);for(let w of T){let l=r+w.length;if(n.slice(r,l)===w)return r=l,!0}return!1}function P(T){if(n[r]===T)return e+=n[r],r++,!0;return!1}function R(T){if(n[r]===T)return r++,!0;return!1}function O(){return R("\\")}function K(){if(s(),n[r]==="."&&n[r+1]==="."&&n[r+2]===".")return r+=3,s(),R(","),!0;return!1}function J(){if(n[r]==="{"){if(e+="{",r++,s(),R(","))s();let T=!0;while(r<n.length&&n[r]!=="}"){let w;if(!T){if(w=P(","),!w)e=Q(e,",");s()}else w=!0,T=!1;if(K(),!(Y()||W(!0))){if(n[r]==="}"||n[r]==="{"||n[r]==="]"||n[r]==="["||n[r]===void 0)e=t(e,",");else Hn();break}s();let dn=P(":"),u=r>=n.length;if(!dn)if(Xn(n[r])||u)e=Q(e,":");else nr();if(!i())if(dn||u)e+="null";else nr()}if(n[r]==="}")e+="}",r++;else e=Q(e,"}");return!0}return!1}function Z(){if(n[r]==="["){if(e+="[",r++,s(),R(","))s();let T=!0;while(r<n.length&&n[r]!=="]"){if(!T){if(!P(","))e=Q(e,",")}else T=!1;if(K(),!i()){e=t(e,",");break}}if(n[r]==="]")e+="]",r++;else e=Q(e,"]");return!0}return!1}function N(){let T=!0,w=!0;while(w){if(!T){if(!P(","))e=Q(e,",")}else T=!1;w=i()}if(!w)e=t(e,",");e=`[
14
12
  ${e}
15
- </file_content>`}function Te(n){let e=n?.trim();return e?e:void 0}function Gn(n){if(!n)return;let e=typeof n==="function"?n():n;if(!e)return;let r=Te(e.rootSessionId),o=Te(e.hookLogPath);if(!r&&!o)return;return{rootSessionId:r,hookLogPath:o}}import{z as En}from"zod";import{z as Nr}from"zod";function w(n){let e=n.inputSchema instanceof Nr.ZodType?H(n.inputSchema):n.inputSchema;return{name:n.name,description:n.description,inputSchema:e,execute:n.execute,timeoutMs:n.timeoutMs??30000,retryable:n.retryable??!0,maxRetries:n.maxRetries??2}}function Mn(n){return{name:n.name,description:n.description,inputSchema:{type:"object",properties:n.inputSchema.properties,required:n.inputSchema.required,additionalProperties:n.inputSchema.additionalProperties}}}function sn(n){return n.map(Mn)}var dn=En.object({question:En.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:En.array(En.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")});function Jr(n,e,r){return Promise.race([n,new Promise((o,i)=>{setTimeout(()=>i(Error(r)),e)})])}function Re(n,e={}){let r=e.askQuestionTimeoutMs??15000;return w({name:"ask_question",description:"Ask user a question for clarifying or gathering information needed to complete the task. For example, ask the user clarifying questions about a key implementation decision. You should only ask one question. Provide an array of 2-5 options for the user to choose from. Never include an option to toggle to Act mode.",inputSchema:H(dn),timeoutMs:r,retryable:!1,maxRetries:0,execute:async(o,i)=>{let f=D(dn,o);return Jr(n(f.question,f.options,i),r,`ask_question timed out after ${r}ms`)}})}async function le(n,e,r){let o=Date.now(),i=n.timeoutMs??30000,f,s,E=new Promise((v,y)=>{f=setTimeout(()=>{y(Error(`Tool execution timed out after ${i}ms`))},i)}),d=r.abortSignal?new Promise((v,y)=>{if(r.abortSignal?.aborted){y(Error("Tool execution was aborted"));return}s=()=>{y(Error("Tool execution was aborted"))},r.abortSignal?.addEventListener("abort",s)}):null;try{let v=[n.execute(e,r),E];if(d)v.push(d);let y=await Promise.race(v),P=Date.now()-o;return{output:y,durationMs:P}}catch(v){let y=Date.now()-o;return{output:null,error:v instanceof Error?v.message:String(v),durationMs:y}}finally{if(f)clearTimeout(f);if(r.abortSignal&&s)r.abortSignal.removeEventListener("abort",s)}}async function Ce(n,e,r){let o=n.maxRetries??2,i=null;for(let f=0;f<=o;f++){if(r.abortSignal?.aborted)return{output:null,error:"Tool execution was aborted",durationMs:i?.durationMs??0};let s=await le(n,e,r);if(i=s,!s.error)return s;if(!n.retryable||f===o)return s;let E=Math.min(1000*2**f,1e4);await new Promise((d)=>setTimeout(d,E))}return i}async function Xn(n,e,r,o,i,f){let s=async(l)=>{let L=new Date;await o?.onToolCallStart?.(l);let B=n.get(l.name);if(!B){let R=new Date,Q={id:l.id,name:l.name,input:l.input,output:null,error:`Unknown tool: ${l.name}`,durationMs:R.getTime()-L.getTime(),startedAt:L,endedAt:R};return await o?.onToolCallEnd?.(Q),Q}let k=await i?.authorize?.(l,r);if(k&&!k.allowed){let R=new Date,Q={id:l.id,name:l.name,input:l.input,output:null,error:k.reason,durationMs:R.getTime()-L.getTime(),startedAt:L,endedAt:R};return await o?.onToolCallEnd?.(Q),Q}let $=await Ce(B,l.input,r),N=new Date,A={id:l.id,name:l.name,input:l.input,output:$.output,error:$.error,durationMs:$.durationMs,startedAt:L,endedAt:N};return await o?.onToolCallEnd?.(A),A},E=Math.max(1,f?.maxConcurrency??(e.length||1)),d=Array(e.length),v=0,y=Math.min(E,e.length),P=Array.from({length:y},async()=>{while(!0){let l=v++;if(l>=e.length)return;d[l]=await s(e[l])}});return await Promise.all(P),d}function Zn(n,e){if(e)return JSON.stringify({error:e});if(n===null||n===void 0)return"null";if(typeof n==="string")return n;if(typeof n==="number"||typeof n==="boolean")return String(n);try{return JSON.stringify(n)}catch{return String(n)}}function Sn(n){let e=new Map;for(let r of n){if(e.has(r.name))throw Error(`Duplicate tool name: ${r.name}`);e.set(r.name,r)}return e}import{z as Ki}from"zod";function Wn(n){let e=new Set;for(let r of n){if(e.has(r.name))throw Error(`Duplicate tool name: ${r.name}`);e.add(r.name)}}class Un{options;constructor(n){this.options=n}async execute(n,e,r,o,i){let f=!1;return{results:await Xn(n,e,r,{onToolCallStart:async(E)=>{this.options.onLog?.("debug","Tool call started",{agentId:this.options.getAgentId(),conversationId:this.options.getConversationId(),runId:o.runId,iteration:o.iteration,toolCallId:E.id,toolName:E.name}),this.options.emit({type:"content_start",contentType:"tool",toolName:E.name,toolCallId:E.id,input:E.input});let d=await this.options.dispatchLifecycle({source:"hook.tool_call_before",iteration:o.iteration,stage:"tool_call_before",payload:{agentId:this.options.getAgentId(),conversationId:this.options.getConversationId(),parentAgentId:this.options.getParentAgentId(),iteration:o.iteration,call:E}});if(d?.overrideInput!==void 0)E.input=d.overrideInput;if(d?.review)E.review=!0;if(d?.cancel)f=!0,this.options.onCancelRequested?.()},onToolCallEnd:async(E)=>{if(this.options.onLog?.("debug","Tool call finished",{agentId:this.options.getAgentId(),conversationId:this.options.getConversationId(),runId:o.runId,iteration:o.iteration,toolCallId:E.id,toolName:E.name,durationMs:E.durationMs,error:E.error}),this.options.emit({type:"content_end",contentType:"tool",toolName:E.name,toolCallId:E.id,output:E.output,error:E.error,durationMs:E.durationMs}),(await this.options.dispatchLifecycle({source:"hook.tool_call_after",iteration:o.iteration,stage:"tool_call_after",payload:{agentId:this.options.getAgentId(),conversationId:this.options.getConversationId(),parentAgentId:this.options.getParentAgentId(),iteration:o.iteration,record:E}}))?.cancel)f=!0}},{authorize:async(E,d)=>this.options.authorizeToolCall(E,d)},i),cancelRequested:f}}buildToolResultMessage(n,e,r){let o=[];for(let i of n)o.push({type:"tool_result",tool_use_id:i.id,content:Zn(i.output,i.error),is_error:!!i.error});if(r.afterIterations>0&&e>=r.afterIterations)o.push({type:"text",text:r.text});return{role:"user",content:o}}}class vn{handler;messageBuilder;emit;constructor(n){this.handler=n.handler,this.messageBuilder=n.messageBuilder,this.emit=n.emit}async processTurn(n,e,r,o){let i=sn(r),f=this.messageBuilder.buildForApi(n),s=this.handler.createMessage(e,f,i),E="",d,v="",y,P=[],l={inputTokens:0,outputTokens:0,cacheReadTokens:void 0,cacheWriteTokens:void 0,cost:void 0},L=!1,B,k=new Map;for await(let R of s){if(o.aborted)break;switch(B=R.id??B,R.type){case"text":if(E+=R.text,R.signature)d=R.signature;this.emit({type:"content_start",contentType:"text",text:R.text,accumulated:E});break;case"reasoning":if(v+=R.reasoning,R.signature)y=R.signature;if(R.redacted_data)P.push(R.redacted_data);this.emit({type:"content_start",contentType:"reasoning",reasoning:R.reasoning,redacted:!!R.redacted_data});break;case"tool_calls":this.processToolCallChunk(R,k);break;case"usage":l.inputTokens=R.inputTokens,l.outputTokens=R.outputTokens,l.cacheReadTokens=R.cacheReadTokens,l.cacheWriteTokens=R.cacheWriteTokens,l.cost=R.totalCost;break;case"done":if(L=R.incompleteReason==="max_tokens",!R.success&&R.error)throw Error(R.error);break}}let $=this.finalizePendingToolCalls(k),N=[];if(E)this.emit({type:"content_end",contentType:"text",text:E});if(v||P.length>0){this.emit({type:"content_end",contentType:"reasoning",reasoning:v}),N.push({type:"thinking",thinking:v,signature:y});for(let R of P)N.push({type:"redacted_thinking",data:R})}if(E)N.push({type:"text",text:E,signature:d});for(let R of $)N.push({type:"tool_use",id:R.id,name:R.name,input:R.input,signature:R.signature});let A=N.length>0?{role:"assistant",content:N}:void 0;return{turn:{text:E,reasoning:v||void 0,toolCalls:$,usage:l,truncated:L,responseId:B},assistantMessage:A}}processToolCallChunk(n,e){let{tool_call:r}=n,o=r.call_id??r.function.id??`call_${Date.now()}`,i=e.get(o);if(!i)i={name:void 0,arguments:""},e.set(o,i);if(r.function.name)i.name=r.function.name;if(r.function.arguments)if(typeof r.function.arguments==="string"){let f=r.function.arguments,s=f.trimStart();if((s.startsWith("{")||s.startsWith("["))&&this.tryParseJson(f)!==void 0)i.arguments=f;else i.arguments+=f}else i.arguments=JSON.stringify(r.function.arguments);if(n.signature)i.signature=n.signature}finalizePendingToolCalls(n){let e=[];for(let[r,o]of n.entries()){if(!o.name||!o.arguments)continue;let i=this.tryParseJson(o.arguments);if(i===void 0)continue;e.push({id:r,name:o.name,input:i,signature:o.signature})}return e}tryParseJson(n){let e=Qn(n);return e===n?void 0:e}}var Yr="REMINDER: If you have gathered enough information to answer the user's question, please provide your final answer now without using any more tools.";function kr(n){if(n.providerConfig?.knownModels)return n.providerConfig.knownModels;if(n.knownModels)return n.knownModels;try{return Pe.toProviderConfig({provider:n.providerId,model:n.modelId,apiKey:n.apiKey,baseUrl:n.baseUrl,headers:n.headers}).knownModels}catch{return}}class t{config;handler;toolRegistry;abortController=null;contributionRegistry;hookEngine;messageBuilder;logger;extensionsInitialized=!1;activeRunId="";runState="idle";runtimeBus=ee();conversationStore;lifecycle;turnProcessor;toolOrchestrator;agentId;parentAgentId;constructor(n){this.config={...n,maxIterations:n.maxIterations,maxParallelToolCalls:n.maxParallelToolCalls??8,apiTimeoutMs:n.apiTimeoutMs??120000,maxTokensPerTurn:n.maxTokensPerTurn??8192,reminderAfterIterations:n.reminderAfterIterations??50,reminderText:n.reminderText??Yr,hookErrorMode:n.hookErrorMode??"ignore",extensions:n.extensions??[],toolPolicies:n.toolPolicies??{}},this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,9)}`,this.parentAgentId=n.parentAgentId??null,this.conversationStore=new Hn(n.initialMessages??[]),this.logger=n.logger,this.contributionRegistry=ne({extensions:this.config.extensions}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let e=this.config.hookErrorMode==="throw"?"fail_closed":"fail_open";this.hookEngine=new I({policies:{defaultPolicy:{failureMode:e},...this.config.hookPolicies},onDispatchError:(r)=>{this.reportRecoverableError(r)}}),wn(this.hookEngine,{...this.config,extensions:this.contributionRegistry.getValidatedExtensions()}),this.messageBuilder=new An,this.toolRegistry=Sn([]),this.handler=this.createHandlerFromConfig(this.config),this.turnProcessor=new vn({handler:this.handler,messageBuilder:this.messageBuilder,emit:(r)=>this.emit(r)}),this.lifecycle=new Dn({hookEngine:this.hookEngine,runtimeBus:this.runtimeBus,getRunId:()=>this.activeRunId||this.conversationStore.getConversationId(),getAgentId:()=>this.agentId,getConversationId:()=>this.conversationStore.getConversationId(),getParentAgentId:()=>this.parentAgentId,onHookContext:(r,o)=>this.appendHookContext(r,o),onDispatchError:(r)=>this.reportRecoverableError(r)}),this.toolOrchestrator=new Un({getAgentId:()=>this.agentId,getConversationId:()=>this.conversationStore.getConversationId(),getParentAgentId:()=>this.parentAgentId,emit:(r)=>this.emit(r),dispatchLifecycle:({source:r,iteration:o,stage:i,payload:f})=>this.lifecycle.dispatch(r,{stage:i,iteration:o,payload:f}),authorizeToolCall:(r,o)=>this.authorizeToolCall(r,o),onCancelRequested:()=>{this.abortController?.abort()},onLog:(r,o,i)=>{this.log(r,o,i)}}),this.runtimeBus.subscribeRuntimeEvent((r)=>{try{this.config.onEvent?.(r)}catch{}}),this.runtimeBus.subscribeRuntimeEvent((r)=>{this.lifecycle.dispatchRuntimeEvent(r)})}async run(n,e,r){this.assertCanStartRun(),this.log("info","Agent run requested",{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),messageLength:n.length}),await this.ensureExtensionsInitialized(),this.conversationStore.resetForRun();let o=await this.prepareUserInput(n,"run");if(o.cancel)return this.buildAbortedResult(new Date,"");return this.conversationStore.appendMessage({role:"user",content:await this.buildInitialUserContent(o.input,e,r)}),this.executeLoop(o.input)}async continue(n,e,r){this.assertCanStartRun(),this.log("info","Agent continue requested",{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),messageLength:n.length}),await this.ensureExtensionsInitialized();let o=await this.prepareUserInput(n,"continue");if(o.cancel)return this.buildAbortedResult(new Date,"");return this.conversationStore.appendMessage({role:"user",content:await this.buildInitialUserContent(o.input,e,r)}),this.executeLoop(o.input)}getMessages(){return this.conversationStore.getMessages()}clearHistory(){this.conversationStore.clearHistory()}restore(n){this.conversationStore.restore(n)}abort(){this.abortController?.abort()}subscribeEvents(n){return this.runtimeBus.subscribeRuntimeEvent(n)}async shutdown(n){if(this.runState==="running")throw Error("Cannot shutdown agent while a run is in progress");if(this.runState==="shutting_down")return;this.runState="shutting_down";try{await this.lifecycle.dispatch("hook.session_shutdown",{stage:"session_shutdown",payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,reason:n}}),await this.lifecycle.shutdown()}finally{this.runState="idle"}}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}getAgentId(){return this.agentId}getConversationId(){return this.conversationStore.getConversationId()}updateConnection(n){this.config={...this.config,...n},this.handler=this.createHandlerFromConfig(this.config),this.turnProcessor=new vn({handler:this.handler,messageBuilder:this.messageBuilder,emit:(e)=>this.emit(e)})}assertCanStartRun(){if(this.runState==="running")throw Error("Cannot start a new run while another run is already in progress");if(this.runState==="shutting_down")throw Error("Cannot start a run while agent is shutting down")}createHandlerFromConfig(n){let e=n.providerConfig?.providerId===n.providerId?n.providerConfig:void 0,r={...e??{},providerId:n.providerId,modelId:n.modelId,apiKey:n.apiKey??e?.apiKey,baseUrl:n.baseUrl??e?.baseUrl,headers:n.headers??e?.headers,knownModels:kr(n),maxOutputTokens:n.maxTokensPerTurn,reasoningEffort:n.reasoningEffort,thinkingBudgetTokens:n.thinkingBudgetTokens,thinking:n.thinking,abortSignal:n.abortSignal};return Pe.createHandler(r)}async executeLoop(n){if(this.runState!=="idle")throw Error(`Cannot start agent run while state is "${this.runState}"`);this.runState="running";let e=new Date,r=`run_${Date.now()}_${Math.random().toString(36).slice(2,9)}`;this.activeRunId=r,this.abortController=new AbortController,this.log("info","Agent loop started",{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),runId:r,triggerLength:n.length});let o=this.mergeAbortSignals(this.config.abortSignal,this.abortController.signal),i=0,f="completed",s="",E=[],d={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:void 0};try{if(!this.conversationStore.isSessionStarted()){if((await this.lifecycle.dispatch("hook.session_start",{stage:"session_start",payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,schedule:this.config.schedule}}))?.cancel)f="aborted";this.conversationStore.markSessionStarted()}if((await this.lifecycle.dispatch("hook.run_start",{stage:"run_start",payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,userMessage:n}}))?.cancel)f="aborted";while(f!=="aborted"){if(this.config.maxIterations!==void 0&&i>=this.config.maxIterations){f="max_iterations";break}if(o.aborted){f="aborted";break}if(i++,this.log("debug","Agent iteration started",{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),runId:r,iteration:i}),(await this.lifecycle.dispatch("hook.iteration_start",{stage:"iteration_start",iteration:i,payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,iteration:i}}))?.cancel){f="aborted";break}if(this.emit({type:"iteration_start",iteration:i}),(await this.lifecycle.dispatch("hook.turn_start",{stage:"turn_start",iteration:i,payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,iteration:i,messages:this.conversationStore.getMessages()}}))?.cancel){f="aborted";break}let $=await this.lifecycle.dispatch("hook.before_agent_start",{stage:"before_agent_start",iteration:i,payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,iteration:i,systemPrompt:this.config.systemPrompt,messages:this.conversationStore.getMessages()}}),N=typeof $?.systemPrompt==="string"?$.systemPrompt:this.config.systemPrompt;if($?.cancel){f="aborted";break}if($?.appendMessages&&$.appendMessages.length>0)this.conversationStore.appendMessages($.appendMessages);let{turn:A,assistantMessage:R}=await this.turnProcessor.processTurn(this.conversationStore.getMessages(),N,this.config.tools,o);if(R)this.conversationStore.appendMessage(R);if((await this.lifecycle.dispatch("hook.turn_end",{stage:"turn_end",iteration:i,payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,iteration:i,turn:A}}))?.cancel){f="aborted";break}if(s=A.text,d.inputTokens+=A.usage.inputTokens,d.outputTokens+=A.usage.outputTokens,d.cacheReadTokens=(d.cacheReadTokens??0)+(A.usage.cacheReadTokens??0),d.cacheWriteTokens=(d.cacheWriteTokens??0)+(A.usage.cacheWriteTokens??0),typeof A.usage.cost==="number")d.totalCost=(d.totalCost??0)+A.usage.cost;if(this.emit({type:"usage",inputTokens:A.usage.inputTokens,outputTokens:A.usage.outputTokens,cacheReadTokens:A.usage.cacheReadTokens,cacheWriteTokens:A.usage.cacheWriteTokens,cost:A.usage.cost,totalInputTokens:d.inputTokens,totalOutputTokens:d.outputTokens,totalCost:d.totalCost}),A.toolCalls.length===0){let en=this.config.completionGuard?.();if(en){this.log("info","Completion guard prevented early exit",{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),runId:r,iteration:i}),this.conversationStore.appendMessage({role:"user",content:[{type:"text",text:en}]});continue}this.emit({type:"iteration_end",iteration:i,hadToolCalls:!1,toolCallCount:0}),await this.lifecycle.dispatch("hook.iteration_end",{stage:"iteration_end",iteration:i,payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,iteration:i,hadToolCalls:!1,toolCallCount:0}}),f="completed";break}let Rn={agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),iteration:i,abortSignal:o},{results:V,cancelRequested:nn}=await this.toolOrchestrator.execute(this.toolRegistry,A.toolCalls,Rn,{iteration:i,runId:r},{maxConcurrency:this.config.maxParallelToolCalls});if(E.push(...V),this.conversationStore.appendMessage(this.toolOrchestrator.buildToolResultMessage(V,i,{afterIterations:this.config.reminderAfterIterations,text:this.config.reminderText})),this.emit({type:"iteration_end",iteration:i,hadToolCalls:!0,toolCallCount:A.toolCalls.length}),await this.lifecycle.dispatch("hook.iteration_end",{stage:"iteration_end",iteration:i,payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,iteration:i,hadToolCalls:!0,toolCallCount:A.toolCalls.length}}),nn){this.log("warn","Agent iteration cancelled by tool lifecycle",{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),runId:r,iteration:i}),f="aborted";break}this.log("debug","Agent iteration finished",{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),runId:r,iteration:i,toolCalls:A.toolCalls.length})}}catch(L){f="error",this.log("error","Agent loop failed",{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),runId:r,error:L});let B=L instanceof Error?L:Error(String(L));throw await this.lifecycle.dispatch("hook.error",{stage:"error",iteration:i,payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,iteration:i,error:B}}),this.emit({type:"error",error:B,recoverable:!1,iteration:i}),L}finally{if(this.abortController=null,this.activeRunId="",this.runState==="running")this.runState="idle"}let v=new Date,y=v.getTime()-e.getTime(),P=this.handler.getModel();this.emit({type:"done",reason:f,text:s,iterations:i}),this.log("info","Agent loop finished",{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),runId:r,finishReason:f,iterations:i,durationMs:y});let l={text:s,usage:d,messages:this.conversationStore.getMessages(),toolCalls:E,iterations:i,finishReason:f,model:{id:P.id,provider:this.config.providerId,info:P.info},startedAt:e,endedAt:v,durationMs:y};return await this.lifecycle.dispatch("hook.run_end",{stage:"run_end",iteration:i,payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,result:l}}),await this.lifecycle.shutdown(),l}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize()}catch(e){if(this.config.hookErrorMode==="throw")throw e;this.emit({type:"error",error:e instanceof Error?e:Error(String(e)),recoverable:!0,iteration:0})}let n=[...this.config.tools,...this.contributionRegistry.getRegisteredTools()];Wn(n),this.config.tools=n,this.toolRegistry=Sn(n),this.extensionsInitialized=!0}async prepareUserInput(n,e){let r=await this.lifecycle.dispatch("hook.input",{stage:"input",payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,mode:e,input:n}}),o=Object.hasOwn(r??{},"overrideInput")&&typeof r?.overrideInput==="string"?r.overrideInput:n;if(r?.cancel)return{input:o,cancel:!0};return{input:o,cancel:!1}}async buildInitialUserContent(n,e,r){return an(n,e,r,this.config.userFileContentLoader)}buildAbortedResult(n,e){let r=new Date,o=this.handler.getModel();return{text:e,usage:{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:void 0},messages:this.conversationStore.getMessages(),toolCalls:[],iterations:0,finishReason:"aborted",model:{id:o.id,provider:this.config.providerId,info:o.info},startedAt:n,endedAt:r,durationMs:r.getTime()-n.getTime()}}emit(n){this.runtimeBus.emitRuntimeEvent(n)}reportRecoverableError(n){this.log("warn","Recoverable agent error",{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),runId:this.activeRunId||this.conversationStore.getConversationId(),error:n}),this.emit({type:"error",error:n instanceof Error?n:Error(String(n)),recoverable:this.config.hookErrorMode!=="throw",iteration:0})}resolveToolPolicy(n){let e=this.config.toolPolicies?.["*"]??{},r=this.config.toolPolicies?.[n]??{};return{...e,...r}}async requestToolApproval(n,e,r,o,i){let f=this.config.requestToolApproval;if(!f)return{approved:!1,reason:`Tool "${n}" requires approval but no approval handler is configured`};try{return await f({agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),iteration:o.iteration,toolCallId:e,toolName:n,input:r,policy:i})}catch(s){return{approved:!1,reason:s instanceof Error?s.message:String(s)}}}async authorizeToolCall(n,e){let r=this.resolveToolPolicy(n.name);if(r.enabled===!1)return{allowed:!1,reason:`Tool "${n.name}" is disabled by policy`};if(r.autoApprove!==!1&&n.review!==!0)return{allowed:!0};let f=await this.requestToolApproval(n.name,n.id,n.input,e,n.review===!0?{...r,autoApprove:!1}:r);if(!f.approved)return{allowed:!1,reason:f.reason?.trim()||`Tool "${n.name}" was not approved`};return{allowed:!0}}appendHookContext(n,e){let r=e.trim();if(!r)return;let o=r.startsWith("<hook_context")?r:`<hook_context source="${n}">
13
+ ]`}function Y(){let T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,w=arguments.length>1&&arguments[1]!==void 0?arguments[1]:-1,l=n[r]==="\\";if(l)r++,l=!0;if(sn(n[r])){let dn=kn(n[r])?kn:Wn(n[r])?Wn:hn(n[r])?hn:Zn,u=r,rn=e.length,L='"';r++;while(!0){if(r>=n.length){let B=nn(r-1);if(!T&&fn(n.charAt(B)))return r=u,e=e.substring(0,rn),Y(!0);return L=Q(L,'"'),e+=L,!0}if(r===w)return L=Q(L,'"'),e+=L,!0;if(dn(n[r])){let B=r,Dn=L.length;if(L+='"',r++,e+=L,s(!1),T||r>=n.length||fn(n[r])||sn(n[r])||m(n[r]))return A(),!0;let U=nn(B-1),rr=n.charAt(U);if(rr===",")return r=u,e=e.substring(0,rn),Y(!1,U);if(fn(rr))return r=u,e=e.substring(0,rn),Y(!0);e=e.substring(0,rn),r=B+1,L=`${L.substring(0,Dn)}\\${L.substring(Dn)}`}else if(T&&Gn(n[r])){if(n[r-1]===":"&&Vn.test(n.substring(u+1,r+2)))while(r<n.length&&Qn.test(n[r]))L+=n[r],r++;return L=Q(L,'"'),e+=L,A(),!0}else if(n[r]==="\\"){let B=n.charAt(r+1);if(Ye[B]!==void 0)L+=n.slice(r,r+2),r+=2;else if(B==="u"){let U=2;while(U<6&&_r(n[r+U]))U++;if(U===6)L+=n.slice(r,r+6),r+=6;else if(r+U>=n.length)r=n.length;else de()}else L+=B,r+=2}else{let B=n.charAt(r);if(B==='"'&&n[r-1]!=="\\")L+=`\\${B}`,r++;else if(yr(B))L+=Ne[B],r++;else{if(!vr(B))X(B);L+=B,r++}}if(l)O()}}return!1}function A(){let T=!1;s();while(n[r]==="+"){T=!0,r++,s(),e=t(e,'"',!0);let w=e.length;if(Y())e=Ar(e,w,1);else e=Q(e,'"')}return T}function V(){let T=r;if(n[r]==="-"){if(r++,I())return $(T),!0;if(!m(n[r]))return r=T,!1}while(m(n[r]))r++;if(n[r]==="."){if(r++,I())return $(T),!0;if(!m(n[r]))return r=T,!1;while(m(n[r]))r++}if(n[r]==="e"||n[r]==="E"){if(r++,n[r]==="-"||n[r]==="+")r++;if(I())return $(T),!0;if(!m(n[r]))return r=T,!1;while(m(n[r]))r++}if(!I())return r=T,!1;if(r>T){let w=n.slice(T,r),l=/^0\d/.test(w);return e+=l?`"${w}"`:w,!0}return!1}function C(){return k("true","true")||k("false","false")||k("null","null")||k("True","true")||k("False","false")||k("None","null")}function k(T,w){if(n.slice(r,r+T.length)===T)return e+=w,r+=T.length,!0;return!1}function W(T){let w=r;if(Nn(n[r])){while(r<n.length&&Yn(n[r]))r++;let l=r;while(j(n,l))l++;if(n[l]==="("){if(r=l+1,i(),n[r]===")"){if(r++,n[r]===";")r++}return!0}}while(r<n.length&&!Gn(n[r])&&!sn(n[r])&&(!T||n[r]!==":"))r++;if(n[r-1]===":"&&Vn.test(n.substring(w,r+2)))while(r<n.length&&Qn.test(n[r]))r++;if(r>w){while(j(n,r-1)&&r>0)r--;let l=n.slice(w,r);if(e+=l==="undefined"?"null":JSON.stringify(l),n[r]==='"')r++;return!0}}function ln(){if(n[r]==="/"){let T=r;r++;while(r<n.length&&(n[r]!=="/"||n[r-1]==="\\"))r++;return r++,e+=JSON.stringify(n.substring(T,r)),!0}}function nn(T){let w=T;while(w>0&&j(n,w))w--;return w}function I(){return r>=n.length||fn(n[r])||j(n,r)}function $(T){e+=`${n.slice(T,r)}0`}function X(T){throw new F(`Invalid character ${JSON.stringify(T)}`,r)}function a(){throw new F(`Unexpected character ${JSON.stringify(n[r])}`,r)}function pn(){throw new F("Unexpected end of json string",n.length)}function Hn(){throw new F("Object key expected",r)}function nr(){throw new F("Colon expected",r)}function de(){let T=n.slice(r,r+6);throw new F(`Invalid unicode character "${T}"`,r)}}function Ve(n,r){return n[r]==="*"&&n[r+1]==="/"}function Cr(n){return JSON.parse(n)}function Mn(n){if(typeof n!=="string")return n;let r=n.trimStart();if(!(r.startsWith("{")||r.startsWith("[")))return n;try{return Cr(r)}catch{try{return Cr(Un(r))}catch{return n}}}import{z as Pr}from"zod";function D(n,r){let e=n.safeParse(r);if(!e.success)throw Error(Pr.prettifyError(e.error));return e.data}function H(n){return Pr.toJSONSchema(n)}function gr(n,r){return`<file_content path="${n}">
16
14
  ${r}
17
- </hook_context>`;this.conversationStore.appendMessage({role:"user",content:[{type:"text",text:o}]})}log(n,e,r){let o=this.logger?.[n];if(!o)return;try{if(n==="error"){let i=r?.error instanceof Error?{...r,error:{name:r.error.name,message:r.error.message,stack:r.error.stack}}:r;o(e,i);return}o(e,r)}catch{}}mergeAbortSignals(...n){let e=n.filter((i)=>!!i);if(e.length===0)return new AbortController().signal;if(e.length===1)return e[0];let r=AbortSignal;if(r.any)return r.any(e);let o=new AbortController;for(let i of e){if(i.aborted){o.abort();break}i.addEventListener("abort",()=>o.abort(),{once:!0})}return o.signal}}function Fn(n){return new t(n)}import{z as _}from"zod";var{spawn:Vr}=(()=>({}));function Qr(n){let e=n.trim();if(!e)return{};let o=e.split(`
18
- `).map((f)=>f.trim()).filter(Boolean).filter((f)=>f.startsWith("HOOK_CONTROL\t")).map((f)=>f.slice(13)),i=o.length>0?o[o.length-1]:e;try{return{parsedJson:JSON.parse(i)}}catch(f){return{parseError:f instanceof Error?f.message:"Failed to parse subprocess stdout JSON"}}}function we(n,e){let r=n instanceof Error?n:Error(String(n)),o=r,i=e.join(" ");if(o.code==="EACCES")return Error(`Failed to execute hook command "${i}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return Error(`Failed to execute hook command "${i}": ${r.message}`)}async function hn(n,e){let r=e.command;if(!Array.isArray(r)||r.length===0)throw Error("runSubprocessEvent requires a non-empty command");let o=!!e.detached,i=Vr(r[0],r.slice(1),{cwd:e.cwd,env:e.env,stdio:o?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:o});if(!i.stdin)throw Error("runSubprocessEvent failed to create stdin pipe");if(i.stdin.write(JSON.stringify(n)),i.stdin.end(),o){await new Promise((v,y)=>{i.once("error",(P)=>{y(we(P,r))}),i.once("spawn",()=>v())}),i.unref();return}if(!i.stdout||!i.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let f="",s="",E=!1,d;return i.stdout.on("data",(v)=>{f+=v.toString()}),i.stderr.on("data",(v)=>{s+=v.toString()}),await new Promise((v,y)=>{if(i.once("error",(P)=>{y(we(P,r))}),(e.timeoutMs??0)>0)d=setTimeout(()=>{E=!0,i.kill("SIGKILL")},e.timeoutMs);i.once("close",(P)=>{if(d)clearTimeout(d);let{parsedJson:l,parseError:L}=Qr(f);v({exitCode:P,stdout:f,stderr:s,parsedJson:l,parseError:L,timedOut:E})})})}var jn=_.enum(["agent_start","agent_resume","agent_abort","agent_end","tool_call","tool_result","prompt_submit","pre_compact","session_shutdown"]),u=_.record(_.string(),_.string()),Gr=_.object({contextModification:_.string().optional(),cancel:_.boolean().optional(),review:_.boolean().optional(),errorMessage:_.string().optional(),context:_.string().optional(),overrideInput:_.unknown().optional()}).passthrough(),Mr=_.object({toolName:_.string(),parameters:u}),Xr=_.object({toolName:_.string(),parameters:u,result:_.string(),success:_.boolean(),executionTimeMs:_.number()}),Zr=_.object({prompt:_.string(),attachments:_.array(_.string())}),Wr=_.object({taskMetadata:u}),Ur=_.object({taskMetadata:u,previousState:u}),Fr=_.object({taskMetadata:u}),jr=_.object({taskMetadata:u}),ur=_.object({taskId:_.string(),ulid:_.string(),contextSize:_.number(),compactionStrategy:_.string(),previousApiReqIndex:_.number(),tokensIn:_.number(),tokensOut:_.number(),tokensInCache:_.number(),tokensOutCache:_.number(),deletedRangeStart:_.number(),deletedRangeEnd:_.number(),contextJsonPath:_.string(),contextRawPath:_.string()}),un=_.object({clineVersion:_.string(),hookName:jn,timestamp:_.string(),taskId:_.string(),sessionContext:_.object({rootSessionId:_.string().optional(),hookLogPath:_.string().optional()}).optional(),workspaceRoots:_.array(_.string()),userId:_.string(),agent_id:_.string(),parent_agent_id:_.string().nullable(),iteration:_.number().optional(),reason:_.string().optional(),tool_call:_.object({id:_.string(),name:_.string(),input:_.unknown()}).optional(),tool_result:_.custom().optional(),turn:_.custom().optional(),preToolUse:Mr.optional(),postToolUse:Xr.optional(),userPromptSubmit:Zr.optional(),taskStart:Wr.optional(),taskResume:Ur.optional(),taskCancel:Fr.optional(),taskComplete:jr.optional(),preCompact:ur.optional()}).passthrough();function ge(n){let e=un.safeParse(n);if(!e.success)return;return e.data}var mr=["agent","hook"];async function _n(n,e={}){let r=e.command??mr;return await hn(n,{command:r,cwd:e.cwd,env:e.env,detached:e.detached,timeoutMs:e.timeoutMs})}function He(n){return n instanceof Error?n:Error(String(n))}function br(n){if(!n||typeof n!=="object")return;let e=Gr.safeParse(n);if(!e.success)return;let r=e.data;if(!(("cancel"in r)||("review"in r)||("context"in r)||("contextModification"in r)||("overrideInput"in r)||("errorMessage"in r)))return;let i=typeof r.context==="string"?r.context:typeof r.contextModification==="string"?r.contextModification:typeof r.errorMessage==="string"&&r.errorMessage.length>0?r.errorMessage:void 0;return{cancel:typeof r.cancel==="boolean"?r.cancel:void 0,review:typeof r.review==="boolean"?r.review:void 0,context:i,overrideInput:Object.hasOwn(r,"overrideInput")?r.overrideInput:void 0}}function Ae(n){if(!n||typeof n!=="object")return{};let e={};for(let[r,o]of Object.entries(n))if(typeof o==="string")e[r]=o;else e[r]=JSON.stringify(o);return e}function U(n,e,r){let o=r.env??process.env,i=o.CLINE_USER_ID?.trim()||o.USER?.trim()||"unknown",f=r.cwd||process.cwd();return{clineVersion:o.CLINE_VERSION?.trim()||"",hookName:n,timestamp:new Date().toISOString(),taskId:e.conversationId,sessionContext:Gn(r.sessionContext),workspaceRoots:f?[f]:[],userId:i,agent_id:e.agentId,parent_agent_id:e.parentAgentId}}function cr(n){let e=String(n??"").toLowerCase();return e.includes("cancel")||e.includes("abort")||e.includes("interrupt")}async function j(n,e){try{let r=await _n(n,{command:e.command,cwd:e.cwd,env:e.env,detached:!0});e.onDispatch?.({payload:n,result:r,detached:!0})}catch(r){e.onDispatchError?.(He(r),n)}}function De(n={}){let e=async(s)=>{if((n.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let v={...U("agent_resume",s,n),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await j(v,n)}else{let v={...U("agent_start",s,n),hookName:"agent_start",taskStart:{taskMetadata:{}}};await j(v,n)}let d={...U("prompt_submit",s,n),hookName:"prompt_submit",userPromptSubmit:{prompt:s.userMessage,attachments:[]}};await j(d,n);return},r=async(s)=>{let E={...U("tool_call",s,n),hookName:"tool_call",iteration:s.iteration,tool_call:{id:s.call.id,name:s.call.name,input:s.call.input},preToolUse:{toolName:s.call.name,parameters:Ae(s.call.input)}};try{let d=await _n(E,{command:n.command,cwd:n.cwd,env:n.env,detached:!1,timeoutMs:n.timeoutMs});if(n.onDispatch?.({payload:E,result:d,detached:!1}),d?.timedOut)throw Error("tool_call hook command timed out");if(d?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${d.parseError}`);return br(d?.parsedJson)}catch(d){n.onDispatchError?.(He(d),E);return}},o=async(s)=>{let E={...U("tool_result",s,n),hookName:"tool_result",iteration:s.iteration,tool_result:s.record,postToolUse:{toolName:s.record.name,parameters:Ae(s.record.input),result:typeof s.record.output==="string"?s.record.output:JSON.stringify(s.record.output),success:!s.record.error,executionTimeMs:s.record.durationMs}};await j(E,n);return},i=async(s)=>{let E={...U("agent_end",s,n),hookName:"agent_end",iteration:s.iteration,turn:s.turn,taskComplete:{taskMetadata:{}}};await j(E,n);return},f=async(s)=>{if(cr(s.reason)){let d={...U("agent_abort",s,n),hookName:"agent_abort",reason:s.reason,taskCancel:{taskMetadata:{}}};await j(d,n)}let E={...U("session_shutdown",s,n),hookName:"session_shutdown",reason:s.reason};await j(E,n)};return{hooks:{onRunStart:e,onToolCallStart:r,onToolCallEnd:o,onTurnEnd:i,onSessionShutdown:async({agentId:s,conversationId:E,parentAgentId:d,reason:v})=>{await f({agentId:s,conversationId:E,parentAgentId:d,reason:v});return}},shutdown:f}}function yn(n,e,r="",o=""){let i=typeof process<"u"&&process?.platform?process.platform:"unknown";return`You are Cline, an AI coding agent. Your primary goal is to assist users with various coding tasks by leveraging your knowledge and the tools at your disposal. Given the user's prompt, you should use the tools available to you to answer user's question.
15
+ </file_content>`}function lr(n){let r=n?.trim();return r?r:void 0}function Fn(n){if(!n)return;let r=typeof n==="function"?n():n;if(!r)return;let e=lr(r.rootSessionId),o=lr(r.hookLogPath);if(!e&&!o)return;return{rootSessionId:e,hookLogPath:o}}import{z as vn}from"zod";import{z as Qe}from"zod";function g(n){let r=n.inputSchema instanceof Qe.ZodType?H(n.inputSchema):n.inputSchema;return{name:n.name,description:n.description,inputSchema:r,execute:n.execute,timeoutMs:n.timeoutMs??30000,retryable:n.retryable??!0,maxRetries:n.maxRetries??2}}function jn(n){return{name:n.name,description:n.description,inputSchema:{type:"object",properties:n.inputSchema.properties,required:n.inputSchema.required,additionalProperties:n.inputSchema.additionalProperties}}}function _n(n){return n.map(jn)}var yn=vn.object({question:vn.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:vn.array(vn.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")});function Ge(n,r,e){return Promise.race([n,new Promise((o,f)=>{setTimeout(()=>f(Error(e)),r)})])}function Hr(n,r={}){let e=r.askQuestionTimeoutMs??15000;return g({name:"ask_question",description:"Ask user a question for clarifying or gathering information needed to complete the task. For example, ask the user clarifying questions about a key implementation decision. You should only ask one question. Provide an array of 2-5 options for the user to choose from. Never include an option to toggle to Act mode.",inputSchema:H(yn),timeoutMs:e,retryable:!1,maxRetries:0,execute:async(o,f)=>{let i=D(yn,o);return Ge(n(i.question,i.options,f),e,`ask_question timed out after ${e}ms`)}})}async function Dr(n,r,e){let o=Date.now(),f=n.timeoutMs??30000,i,s,E=new Promise((h,y)=>{i=setTimeout(()=>{y(Error(`Tool execution timed out after ${f}ms`))},f)}),d=e.abortSignal?new Promise((h,y)=>{if(e.abortSignal?.aborted){y(Error("Tool execution was aborted"));return}s=()=>{y(Error("Tool execution was aborted"))},e.abortSignal?.addEventListener("abort",s)}):null;try{let h=[n.execute(r,e),E];if(d)h.push(d);let y=await Promise.race(h),P=Date.now()-o;return{output:y,durationMs:P}}catch(h){let y=Date.now()-o;return{output:null,error:h instanceof Error?h.message:String(h),durationMs:y}}finally{if(i)clearTimeout(i);if(e.abortSignal&&s)e.abortSignal.removeEventListener("abort",s)}}async function Lr(n,r,e){let o=n.maxRetries??2,f=null;for(let i=0;i<=o;i++){if(e.abortSignal?.aborted)return{output:null,error:"Tool execution was aborted",durationMs:f?.durationMs??0};let s=await Dr(n,r,e);if(f=s,!s.error)return s;if(!n.retryable||i===o)return s;let E=Math.min(1000*2**i,1e4);await new Promise((d)=>setTimeout(d,E))}return f}async function mn(n,r,e,o,f,i){let s=async(R)=>{let O=new Date;await o?.onToolCallStart?.(R);let K=n.get(R.name);if(!K){let A=new Date,V={id:R.id,name:R.name,input:R.input,output:null,error:`Unknown tool: ${R.name}`,durationMs:A.getTime()-O.getTime(),startedAt:O,endedAt:A};return await o?.onToolCallEnd?.(V),V}let J=await f?.authorize?.(R,e);if(J&&!J.allowed){let A=new Date,V={id:R.id,name:R.name,input:R.input,output:null,error:J.reason,durationMs:A.getTime()-O.getTime(),startedAt:O,endedAt:A};return await o?.onToolCallEnd?.(V),V}let Z=await Lr(K,R.input,e),N=new Date,Y={id:R.id,name:R.name,input:R.input,output:Z.output,error:Z.error,durationMs:Z.durationMs,startedAt:O,endedAt:N};return await o?.onToolCallEnd?.(Y),Y},E=Math.max(1,i?.maxConcurrency??(r.length||1)),d=Array(r.length),h=0,y=Math.min(E,r.length),P=Array.from({length:y},async()=>{while(!0){let R=h++;if(R>=r.length)return;d[R]=await s(r[R])}});return await Promise.all(P),d}function bn(n,r){if(r)return JSON.stringify({error:r});if(n===null||n===void 0)return"null";if(typeof n==="string")return n;if(typeof n==="number"||typeof n==="boolean")return String(n);try{return JSON.stringify(n)}catch{return String(n)}}function Tn(n){let r=new Map;for(let e of n){if(r.has(e.name))throw Error(`Duplicate tool name: ${e.name}`);r.set(e.name,e)}return r}import{z as Mf}from"zod";function In(n){let r=new Set;for(let e of n){if(r.has(e.name))throw Error(`Duplicate tool name: ${e.name}`);r.add(e.name)}}class un{options;constructor(n){this.options=n}async execute(n,r,e,o,f){let i=!1;return{results:await mn(n,r,e,{onToolCallStart:async(E)=>{this.options.onLog?.("debug","Tool call started",{agentId:this.options.getAgentId(),conversationId:this.options.getConversationId(),runId:o.runId,iteration:o.iteration,toolCallId:E.id,toolName:E.name}),this.options.emit({type:"content_start",contentType:"tool",toolName:E.name,toolCallId:E.id,input:E.input});let d=await this.options.dispatchLifecycle({source:"hook.tool_call_before",iteration:o.iteration,stage:"tool_call_before",payload:{agentId:this.options.getAgentId(),conversationId:this.options.getConversationId(),parentAgentId:this.options.getParentAgentId(),iteration:o.iteration,call:E}});if(d?.overrideInput!==void 0)E.input=d.overrideInput;if(d?.review)E.review=!0;if(d?.cancel)i=!0,this.options.onCancelRequested?.()},onToolCallEnd:async(E)=>{if(this.options.onLog?.("debug","Tool call finished",{agentId:this.options.getAgentId(),conversationId:this.options.getConversationId(),runId:o.runId,iteration:o.iteration,toolCallId:E.id,toolName:E.name,durationMs:E.durationMs,error:E.error}),this.options.emit({type:"content_end",contentType:"tool",toolName:E.name,toolCallId:E.id,output:E.output,error:E.error,durationMs:E.durationMs}),(await this.options.dispatchLifecycle({source:"hook.tool_call_after",iteration:o.iteration,stage:"tool_call_after",payload:{agentId:this.options.getAgentId(),conversationId:this.options.getConversationId(),parentAgentId:this.options.getParentAgentId(),iteration:o.iteration,record:E}}))?.cancel)i=!0}},{authorize:async(E,d)=>this.options.authorizeToolCall(E,d)},f),cancelRequested:i}}buildToolResultMessage(n,r,e){let o=[];for(let f of n)o.push({type:"tool_result",tool_use_id:f.id,content:bn(f.output,f.error),is_error:!!f.error});if(Xe(r,e.afterIterations))o.push({type:"text",text:e.text});return{role:"user",content:o}}}function Xe(n,r){return r>0&&n>r&&(n-1)%r===0}class Rn{handler;messageBuilder;emit;constructor(n){this.handler=n.handler,this.messageBuilder=n.messageBuilder,this.emit=n.emit}async processTurn(n,r,e,o){let f=_n(e),i=this.messageBuilder.buildForApi(n),s=this.handler.createMessage(r,i,f),E="",d,h="",y,P=[],R={inputTokens:0,outputTokens:0,cacheReadTokens:void 0,cacheWriteTokens:void 0,cost:void 0},O=!1,K,J=new Map,Z=new Map;for await(let C of s){if(o.aborted)break;switch(K=C.id??K,C.type){case"text":if(E+=C.text,C.signature)d=C.signature;this.emit({type:"content_start",contentType:"text",text:C.text,accumulated:E});break;case"reasoning":if(h+=C.reasoning,C.signature)y=C.signature;if(C.redacted_data)P.push(C.redacted_data);this.emit({type:"content_start",contentType:"reasoning",reasoning:C.reasoning,redacted:!!C.redacted_data});break;case"tool_calls":this.processToolCallChunk(C,J,Z);break;case"usage":R.inputTokens=C.inputTokens,R.outputTokens=C.outputTokens,R.cacheReadTokens=C.cacheReadTokens,R.cacheWriteTokens=C.cacheWriteTokens,R.cost=C.totalCost;break;case"done":if(O=C.incompleteReason==="max_tokens",!C.success&&C.error)throw Error(C.error);break}}let N=this.finalizePendingToolCalls(J),Y=this.collectInvalidToolCalls(J),A=[];if(E)this.emit({type:"content_end",contentType:"text",text:E});if(h||P.length>0){this.emit({type:"content_end",contentType:"reasoning",reasoning:h}),A.push({type:"thinking",thinking:h,signature:y});for(let C of P)A.push({type:"redacted_thinking",data:C})}if(E)A.push({type:"text",text:E,signature:d});for(let C of N)A.push({type:"tool_use",id:C.id,name:C.name,input:C.input,signature:C.signature});let V=A.length>0?{role:"assistant",content:A}:void 0;return{turn:{text:E,reasoning:h||void 0,toolCalls:N,invalidToolCalls:Y,usage:R,truncated:O,responseId:K},assistantMessage:V}}processToolCallChunk(n,r,e){let{tool_call:o}=n,f=o.function.id,i=o.call_id,s=(f?e.get(f):void 0)??(i?e.get(i):void 0)??f??i??`call_${Date.now()}`;if(f)e.set(f,s);if(i)e.set(i,s);let E=r.get(s);if(!E)E={name:void 0,arguments:""},r.set(s,E);if(o.function.name)E.name=o.function.name;if(o.function.arguments)if(typeof o.function.arguments==="string"){let d=o.function.arguments,h=d.trimStart();if((h.startsWith("{")||h.startsWith("["))&&this.tryParseJson(d)!==void 0)E.arguments=d;else E.arguments+=d}else E.arguments=JSON.stringify(o.function.arguments);if(n.signature)E.signature=n.signature}finalizePendingToolCalls(n){let r=[];for(let[e,o]of n.entries()){if(!o.name||!o.arguments)continue;let f=this.tryParseJson(o.arguments);if(f===void 0)continue;r.push({id:e,name:o.name,input:f,signature:o.signature})}return r}collectInvalidToolCalls(n){let r=[];for(let[e,o]of n.entries()){if(!o.name){r.push({id:e,reason:"missing_name"});continue}if(!o.arguments){r.push({id:e,name:o.name,reason:"missing_arguments"});continue}if(this.tryParseJson(o.arguments)===void 0)r.push({id:e,name:o.name,reason:"invalid_arguments"})}return r}tryParseJson(n){let r=Mn(n);return r===n?void 0:r}}var Ze="REMINDER: If you have gathered enough information to answer the user's question, please provide your final answer now without using any more tools.";function ke(n){let r=n.message.toLowerCase();if([400,401,403,404,405,406,409,410,429].some((o)=>new RegExp(`(?:\\b|\\"code\\"\\s*:\\s*)${o}(?:\\b|\\s)`).test(r)))return!0;if(["not found","unsupported for","invalid api key","authentication","unauthorized","forbidden"].some((o)=>r.includes(o)))return!0;return!1}function We(n){if(n.providerConfig?.knownModels)return n.providerConfig.knownModels;if(n.knownModels)return n.knownModels;try{return Or.toProviderConfig({provider:n.providerId,model:n.modelId,apiKey:n.apiKey,baseUrl:n.baseUrl,headers:n.headers}).knownModels}catch{return}}class En{config;handler;toolRegistry;abortController=null;contributionRegistry;hookEngine;messageBuilder;logger;extensionsInitialized=!1;activeRunId="";runState="idle";runtimeBus=Sr();conversationStore;lifecycle;turnProcessor;toolOrchestrator;agentId;parentAgentId;constructor(n){this.config={...n,maxIterations:n.maxIterations,maxParallelToolCalls:n.maxParallelToolCalls??8,apiTimeoutMs:n.apiTimeoutMs??120000,maxConsecutiveMistakes:n.maxConsecutiveMistakes??0,maxTokensPerTurn:n.maxTokensPerTurn??8192,reminderAfterIterations:n.reminderAfterIterations??0,reminderText:n.reminderText??Ze,hookErrorMode:n.hookErrorMode??"ignore",extensions:n.extensions??[],toolPolicies:n.toolPolicies??{}},this.agentId=`agent_${Date.now()}_${or(6)}`,this.parentAgentId=n.parentAgentId??null,this.conversationStore=new $n(n.initialMessages??[]),this.logger=n.logger,this.contributionRegistry=Er({extensions:this.config.extensions}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let r=this.config.hookErrorMode==="throw"?"fail_closed":"fail_open";this.hookEngine=new en({policies:{defaultPolicy:{failureMode:r},...this.config.hookPolicies},onDispatchError:(e)=>{this.reportRecoverableError(e)}}),On(this.hookEngine,{...this.config,extensions:this.contributionRegistry.getValidatedExtensions()}),this.messageBuilder=new qn,this.toolRegistry=Tn([]),this.handler=this.createHandlerFromConfig(this.config),this.turnProcessor=new Rn({handler:this.handler,messageBuilder:this.messageBuilder,emit:(e)=>this.emit(e)}),this.lifecycle=new Bn({hookEngine:this.hookEngine,runtimeBus:this.runtimeBus,getRunId:()=>this.activeRunId||this.conversationStore.getConversationId(),getAgentId:()=>this.agentId,getConversationId:()=>this.conversationStore.getConversationId(),getParentAgentId:()=>this.parentAgentId,onHookContext:(e,o)=>this.appendHookContext(e,o),onDispatchError:(e)=>this.reportRecoverableError(e)}),this.toolOrchestrator=new un({getAgentId:()=>this.agentId,getConversationId:()=>this.conversationStore.getConversationId(),getParentAgentId:()=>this.parentAgentId,emit:(e)=>this.emit(e),dispatchLifecycle:({source:e,iteration:o,stage:f,payload:i})=>this.lifecycle.dispatch(e,{stage:f,iteration:o,payload:i}),authorizeToolCall:(e,o)=>this.authorizeToolCall(e,o),onCancelRequested:()=>{this.abortController?.abort()},onLog:(e,o,f)=>{this.log(e,o,f)}}),this.runtimeBus.subscribeRuntimeEvent((e)=>{try{this.config.onEvent?.(e)}catch{}}),this.runtimeBus.subscribeRuntimeEvent((e)=>{this.lifecycle.dispatchRuntimeEvent(e)})}async run(n,r,e){this.assertCanStartRun(),this.log("info","Agent run requested",{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),messageLength:n.length}),await this.ensureExtensionsInitialized(),this.conversationStore.resetForRun();let o=await this.prepareUserInput(n,"run");if(o.cancel)return this.buildAbortedResult(new Date,"");return this.conversationStore.appendMessage({role:"user",content:await this.buildInitialUserContent(o.input,r,e)}),this.executeLoop(o.input)}async continue(n,r,e){this.assertCanStartRun(),this.log("info","Agent continue requested",{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),messageLength:n.length}),await this.ensureExtensionsInitialized();let o=await this.prepareUserInput(n,"continue");if(o.cancel)return this.buildAbortedResult(new Date,"");return this.conversationStore.appendMessage({role:"user",content:await this.buildInitialUserContent(o.input,r,e)}),this.executeLoop(o.input)}getMessages(){return this.conversationStore.getMessages()}clearHistory(){this.conversationStore.clearHistory()}restore(n){this.conversationStore.restore(n)}abort(){this.abortController?.abort()}subscribeEvents(n){return this.runtimeBus.subscribeRuntimeEvent(n)}async shutdown(n){if(this.runState==="running")throw Error("Cannot shutdown agent while a run is in progress");if(this.runState==="shutting_down")return;this.runState="shutting_down";try{await this.lifecycle.dispatch("hook.session_shutdown",{stage:"session_shutdown",payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,reason:n}}),await this.lifecycle.shutdown()}finally{this.runState="idle"}}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}getAgentId(){return this.agentId}getConversationId(){return this.conversationStore.getConversationId()}updateConnection(n){this.config={...this.config,...n},this.handler=this.createHandlerFromConfig(this.config),this.turnProcessor=new Rn({handler:this.handler,messageBuilder:this.messageBuilder,emit:(r)=>this.emit(r)})}assertCanStartRun(){if(this.runState==="running")throw Error("Cannot start a new run while another run is already in progress");if(this.runState==="shutting_down")throw Error("Cannot start a run while agent is shutting down")}createHandlerFromConfig(n){let r=n.providerConfig?.providerId===n.providerId?n.providerConfig:void 0,e={...r??{},providerId:n.providerId,modelId:n.modelId,apiKey:n.apiKey??r?.apiKey,baseUrl:n.baseUrl??r?.baseUrl,headers:n.headers??r?.headers,knownModels:We(n),maxOutputTokens:n.maxTokensPerTurn,reasoningEffort:n.reasoningEffort,thinkingBudgetTokens:n.thinkingBudgetTokens,thinking:n.thinking,abortSignal:n.abortSignal};return Or.createHandler(e)}async executeLoop(n){if(this.runState!=="idle")throw Error(`Cannot start agent run while state is "${this.runState}"`);this.runState="running";let r=new Date,e=`run_${Date.now()}_${Math.random().toString(36).slice(2,9)}`;this.activeRunId=e,this.abortController=new AbortController,this.log("info","Agent loop started",{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),runId:e,triggerLength:n.length});let o=this.mergeAbortSignals(this.config.abortSignal,this.abortController.signal),f=0,i="completed",s="",E=[],d={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:void 0},h=0;try{if(!this.conversationStore.isSessionStarted()){if((await this.lifecycle.dispatch("hook.session_start",{stage:"session_start",payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,schedule:this.config.schedule}}))?.cancel)i="aborted";this.conversationStore.markSessionStarted()}if((await this.lifecycle.dispatch("hook.run_start",{stage:"run_start",payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,userMessage:n}}))?.cancel)i="aborted";while(i!=="aborted"){if(this.config.maxIterations!==void 0&&f>=this.config.maxIterations){i="max_iterations";break}if(o.aborted){i="aborted";break}if(f++,this.log("debug","Agent iteration started",{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),runId:e,iteration:f}),(await this.lifecycle.dispatch("hook.iteration_start",{stage:"iteration_start",iteration:f,payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,iteration:f}}))?.cancel){i="aborted";break}if(this.emit({type:"iteration_start",iteration:f}),(await this.lifecycle.dispatch("hook.turn_start",{stage:"turn_start",iteration:f,payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,iteration:f,messages:this.conversationStore.getMessages()}}))?.cancel){i="aborted";break}let N=await this.lifecycle.dispatch("hook.before_agent_start",{stage:"before_agent_start",iteration:f,payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,iteration:f,systemPrompt:this.config.systemPrompt,messages:this.conversationStore.getMessages()}}),Y=typeof N?.systemPrompt==="string"?N.systemPrompt:this.config.systemPrompt;if(N?.cancel){i="aborted";break}if(N?.appendMessages&&N.appendMessages.length>0)this.conversationStore.appendMessages(N.appendMessages);let A,V;try{({turn:A,assistantMessage:V}=await this.turnProcessor.processTurn(this.conversationStore.getMessages(),Y,this.config.tools,o))}catch($){let X=$ instanceof Error?$:Error(String($)),a=X.message;if(ke(X))throw X;if(this.conversationStore.appendMessage({role:"user",content:[{type:"text",text:`The previous turn failed with an API/runtime error: ${a}. Retry and continue from the latest state.`}]}),await this.recordMistake({iteration:f,reason:"api_error",details:a,consecutiveMistakes:()=>h,setConsecutiveMistakes:(Hn)=>{h=Hn}}))continue;throw X}if(V)this.conversationStore.appendMessage(V);if((await this.lifecycle.dispatch("hook.turn_end",{stage:"turn_end",iteration:f,payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,iteration:f,turn:A}}))?.cancel){i="aborted";break}if(s=A.text,d.inputTokens+=A.usage.inputTokens,d.outputTokens+=A.usage.outputTokens,d.cacheReadTokens=(d.cacheReadTokens??0)+(A.usage.cacheReadTokens??0),d.cacheWriteTokens=(d.cacheWriteTokens??0)+(A.usage.cacheWriteTokens??0),typeof A.usage.cost==="number")d.totalCost=(d.totalCost??0)+A.usage.cost;if(this.emit({type:"usage",inputTokens:A.usage.inputTokens,outputTokens:A.usage.outputTokens,cacheReadTokens:A.usage.cacheReadTokens,cacheWriteTokens:A.usage.cacheWriteTokens,cost:A.usage.cost,totalInputTokens:d.inputTokens,totalOutputTokens:d.outputTokens,totalCost:d.totalCost}),A.invalidToolCalls.length>0){if(this.conversationStore.appendMessage({role:"user",content:[{type:"text",text:this.buildInvalidToolCallFeedback(A.invalidToolCalls)}]}),await this.recordMistake({iteration:f,reason:"invalid_tool_call",details:`${A.invalidToolCalls.length} invalid tool call(s)`,consecutiveMistakes:()=>h,setConsecutiveMistakes:(X)=>{h=X}}))continue;throw Error(`maximum consecutive mistakes reached (${this.config.maxConsecutiveMistakes})`)}if(A.toolCalls.length===0){h=0;let $=this.config.completionGuard?.();if($){this.log("info","Completion guard prevented early exit",{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),runId:e,iteration:f}),this.conversationStore.appendMessage({role:"user",content:[{type:"text",text:$}]});continue}this.emit({type:"iteration_end",iteration:f,hadToolCalls:!1,toolCallCount:0}),await this.lifecycle.dispatch("hook.iteration_end",{stage:"iteration_end",iteration:f,payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,iteration:f,hadToolCalls:!1,toolCallCount:0}}),i="completed";break}let k={agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),iteration:f,abortSignal:o},{results:W,cancelRequested:ln}=await this.toolOrchestrator.execute(this.toolRegistry,A.toolCalls,k,{iteration:f,runId:e},{maxConcurrency:this.config.maxParallelToolCalls});E.push(...W),this.conversationStore.appendMessage(this.toolOrchestrator.buildToolResultMessage(W,f,{afterIterations:this.config.reminderAfterIterations,text:this.config.reminderText}));let nn=W.filter(($)=>!$.error).length,I=W.length-nn;if(nn>0)h=0;else if(I>0){let $=this.buildFailedToolCallFeedback(W);if(!await this.recordMistake({iteration:f,reason:"tool_execution_failed",details:`${I} tool call(s) failed${$?`: ${$}`:""}`,consecutiveMistakes:()=>h,setConsecutiveMistakes:(a)=>{h=a}}))throw Error(`maximum consecutive mistakes reached (${this.config.maxConsecutiveMistakes})`)}if(this.emit({type:"iteration_end",iteration:f,hadToolCalls:!0,toolCallCount:A.toolCalls.length}),await this.lifecycle.dispatch("hook.iteration_end",{stage:"iteration_end",iteration:f,payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,iteration:f,hadToolCalls:!0,toolCallCount:A.toolCalls.length}}),ln){this.log("warn","Agent iteration cancelled by tool lifecycle",{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),runId:e,iteration:f}),i="aborted";break}this.log("debug","Agent iteration finished",{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),runId:e,iteration:f,toolCalls:A.toolCalls.length})}}catch(K){i="error",this.log("error","Agent loop failed",{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),runId:e,error:K});let J=K instanceof Error?K:Error(String(K));throw await this.lifecycle.dispatch("hook.error",{stage:"error",iteration:f,payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,iteration:f,error:J}}),this.emit({type:"error",error:J,recoverable:!1,iteration:f}),K}finally{if(this.abortController=null,this.activeRunId="",this.runState==="running")this.runState="idle"}let y=new Date,P=y.getTime()-r.getTime(),R=this.handler.getModel();this.emit({type:"done",reason:i,text:s,iterations:f}),this.log("info","Agent loop finished",{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),runId:e,finishReason:i,iterations:f,durationMs:P});let O={text:s,usage:d,messages:this.conversationStore.getMessages(),toolCalls:E,iterations:f,finishReason:i,model:{id:R.id,provider:this.config.providerId,info:R.info},startedAt:r,endedAt:y,durationMs:P};return await this.lifecycle.dispatch("hook.run_end",{stage:"run_end",iteration:f,payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,result:O}}),await this.lifecycle.shutdown(),O}buildInvalidToolCallFeedback(n){return`One or more tool calls were invalid or missing required parameters (${n.map((e)=>{let o=e.name?.trim()||"(unknown tool)",f=e.reason==="missing_name"?"missing tool name":e.reason==="missing_arguments"?"missing arguments":"arguments were invalid JSON";return`${o} [${e.id}]: ${f}`}).join("; ")}). Retry with valid tool names and arguments.`}buildFailedToolCallFeedback(n){let r=n.filter((o)=>!!o.error);if(r.length===0)return"";let e=r.slice(0,3).map((o)=>{let f=String(o.error??"unknown tool error").replace(/\s+/g," ").trim();return`${o.name}: ${f}`}).join("; ");return r.length>3?`${e}; +${r.length-3} more failed tool call(s)`:e}async recordMistake(n){let r=n.consecutiveMistakes()+1;n.setConsecutiveMistakes(r);let e=n.details?.trim()||`consecutive mistake (${n.reason})`;this.emit({type:"error",error:Error(e),recoverable:!0,iteration:n.iteration}),this.log("warn","Recorded consecutive mistake",{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),runId:this.activeRunId||this.conversationStore.getConversationId(),iteration:n.iteration,reason:n.reason,details:n.details,consecutiveMistakes:r,maxConsecutiveMistakes:this.config.maxConsecutiveMistakes});let o=this.config.maxConsecutiveMistakes;if(!o||r<o)return!0;let f=await this.resolveConsecutiveMistakeDecision({iteration:n.iteration,consecutiveMistakes:r,maxConsecutiveMistakes:o,reason:n.reason,details:n.details});if(f.action==="continue"){let i=f.guidance?.trim();if(i)this.conversationStore.appendMessage({role:"user",content:[{type:"text",text:i}]});return n.setConsecutiveMistakes(0),!0}return!1}async resolveConsecutiveMistakeDecision(n){let r=this.config.onConsecutiveMistakeLimitReached;if(!r)return{action:"stop",reason:`maximum consecutive mistakes reached (${n.maxConsecutiveMistakes})`};try{return await r(n)}catch(e){return{action:"stop",reason:e instanceof Error?e.message:`maximum consecutive mistakes reached (${n.maxConsecutiveMistakes})`}}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize()}catch(r){if(this.config.hookErrorMode==="throw")throw r;this.emit({type:"error",error:r instanceof Error?r:Error(String(r)),recoverable:!0,iteration:0})}let n=[...this.config.tools,...this.contributionRegistry.getRegisteredTools()];In(n),this.config.tools=n,this.toolRegistry=Tn(n),this.extensionsInitialized=!0}async prepareUserInput(n,r){let e=await this.lifecycle.dispatch("hook.input",{stage:"input",payload:{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),parentAgentId:this.parentAgentId,mode:r,input:n}}),o=Object.hasOwn(e??{},"overrideInput")&&typeof e?.overrideInput==="string"?e.overrideInput:n;if(e?.cancel)return{input:o,cancel:!0};return{input:o,cancel:!1}}async buildInitialUserContent(n,r,e){return fr(n,r,e,this.config.userFileContentLoader)}buildAbortedResult(n,r){let e=new Date,o=this.handler.getModel();return{text:r,usage:{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:void 0},messages:this.conversationStore.getMessages(),toolCalls:[],iterations:0,finishReason:"aborted",model:{id:o.id,provider:this.config.providerId,info:o.info},startedAt:n,endedAt:e,durationMs:e.getTime()-n.getTime()}}emit(n){this.runtimeBus.emitRuntimeEvent(n)}reportRecoverableError(n){this.log("warn","Recoverable agent error",{agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),runId:this.activeRunId||this.conversationStore.getConversationId(),error:n}),this.emit({type:"error",error:n instanceof Error?n:Error(String(n)),recoverable:this.config.hookErrorMode!=="throw",iteration:0})}resolveToolPolicy(n){let r=this.config.toolPolicies?.["*"]??{},e=this.config.toolPolicies?.[n]??{};return{...r,...e}}async requestToolApproval(n,r,e,o,f){let i=this.config.requestToolApproval;if(!i)return{approved:!1,reason:`Tool "${n}" requires approval but no approval handler is configured`};try{return await i({agentId:this.agentId,conversationId:this.conversationStore.getConversationId(),iteration:o.iteration,toolCallId:r,toolName:n,input:e,policy:f})}catch(s){return{approved:!1,reason:s instanceof Error?s.message:String(s)}}}async authorizeToolCall(n,r){let e=this.resolveToolPolicy(n.name);if(e.enabled===!1)return{allowed:!1,reason:`Tool "${n.name}" is disabled by policy`};if(e.autoApprove!==!1&&n.review!==!0)return{allowed:!0};let i=await this.requestToolApproval(n.name,n.id,n.input,r,n.review===!0?{...e,autoApprove:!1}:e);if(!i.approved)return{allowed:!1,reason:i.reason?.trim()||`Tool "${n.name}" was not approved`};return{allowed:!0}}appendHookContext(n,r){let e=r.trim();if(!e)return;let o=e.startsWith("<hook_context")?e:`<hook_context source="${n}">
16
+ ${e}
17
+ </hook_context>`;this.conversationStore.appendMessage({role:"user",content:[{type:"text",text:o}]})}log(n,r,e){let o=this.logger?.[n];if(!o)return;try{if(n==="error"){let f=e?.error instanceof Error?{...e,error:{name:e.error.name,message:e.error.message,stack:e.error.stack}}:e;o(r,f);return}o(r,e)}catch{}}mergeAbortSignals(...n){let r=n.filter((f)=>!!f);if(r.length===0)return new AbortController().signal;if(r.length===1)return r[0];let e=AbortSignal;if(e.any)return e.any(r);let o=new AbortController;for(let f of r){if(f.aborted){o.abort();break}f.addEventListener("abort",()=>o.abort(),{once:!0})}return o.signal}}function cn(n){return new En(n)}import{z as v}from"zod";var{spawn:Ue}=(()=>({}));function Me(n){let r=n.trim();if(!r)return{};let o=r.split(`
18
+ `).map((i)=>i.trim()).filter(Boolean).filter((i)=>i.startsWith("HOOK_CONTROL\t")).map((i)=>i.slice(13)),f=o.length>0?o[o.length-1]:r;try{return{parsedJson:JSON.parse(f)}}catch(i){return{parseError:i instanceof Error?i.message:"Failed to parse subprocess stdout JSON"}}}function qr(n,r){let e=n instanceof Error?n:Error(String(n)),o=e,f=r.join(" ");if(o.code==="EACCES")return Error(`Failed to execute hook command "${f}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return Error(`Failed to execute hook command "${f}": ${e.message}`)}async function An(n,r){let e=r.command;if(!Array.isArray(e)||e.length===0)throw Error("runSubprocessEvent requires a non-empty command");let o=!!r.detached,f=Ue(e[0],e.slice(1),{cwd:r.cwd,env:r.env,stdio:o?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:o});if(!f.stdin)throw Error("runSubprocessEvent failed to create stdin pipe");if(f.stdin.write(JSON.stringify(n)),f.stdin.end(),o){await new Promise((h,y)=>{f.once("error",(P)=>{y(qr(P,e))}),f.once("spawn",()=>h())}),f.unref();return}if(!f.stdout||!f.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let i="",s="",E=!1,d;return f.stdout.on("data",(h)=>{i+=h.toString()}),f.stderr.on("data",(h)=>{s+=h.toString()}),await new Promise((h,y)=>{if(f.once("error",(P)=>{y(qr(P,e))}),(r.timeoutMs??0)>0)d=setTimeout(()=>{E=!0,f.kill("SIGKILL")},r.timeoutMs);f.once("close",(P)=>{if(d)clearTimeout(d);let{parsedJson:R,parseError:O}=Me(i);h({exitCode:P,stdout:i,stderr:s,parsedJson:R,parseError:O,timedOut:E})})})}var xn=v.enum(["agent_start","agent_resume","agent_abort","agent_end","tool_call","tool_result","prompt_submit","pre_compact","session_shutdown"]),x=v.record(v.string(),v.string()),Fe=v.object({contextModification:v.string().optional(),cancel:v.boolean().optional(),review:v.boolean().optional(),errorMessage:v.string().optional(),context:v.string().optional(),overrideInput:v.unknown().optional()}).passthrough(),je=v.object({toolName:v.string(),parameters:x}),me=v.object({toolName:v.string(),parameters:x,result:v.string(),success:v.boolean(),executionTimeMs:v.number()}),be=v.object({prompt:v.string(),attachments:v.array(v.string())}),Ie=v.object({taskMetadata:x}),ue=v.object({taskMetadata:x,previousState:x}),ce=v.object({taskMetadata:x}),xe=v.object({taskMetadata:x}),ze=v.object({taskId:v.string(),ulid:v.string(),contextSize:v.number(),compactionStrategy:v.string(),previousApiReqIndex:v.number(),tokensIn:v.number(),tokensOut:v.number(),tokensInCache:v.number(),tokensOutCache:v.number(),deletedRangeStart:v.number(),deletedRangeEnd:v.number(),contextJsonPath:v.string(),contextRawPath:v.string()}),zn=v.object({clineVersion:v.string(),hookName:xn,timestamp:v.string(),taskId:v.string(),sessionContext:v.object({rootSessionId:v.string().optional(),hookLogPath:v.string().optional()}).optional(),workspaceRoots:v.array(v.string()),userId:v.string(),agent_id:v.string(),parent_agent_id:v.string().nullable(),iteration:v.number().optional(),reason:v.string().optional(),tool_call:v.object({id:v.string(),name:v.string(),input:v.unknown()}).optional(),tool_result:v.custom().optional(),turn:v.custom().optional(),preToolUse:je.optional(),postToolUse:me.optional(),userPromptSubmit:be.optional(),taskStart:Ie.optional(),taskResume:ue.optional(),taskCancel:ce.optional(),taskComplete:xe.optional(),preCompact:ze.optional()}).passthrough();function $r(n){let r=zn.safeParse(n);if(!r.success)return;return r.data}var ae=["agent","hook"];async function wn(n,r={}){let e=r.command??ae;return await An(n,{command:e,cwd:r.cwd,env:r.env,detached:r.detached,timeoutMs:r.timeoutMs})}function Br(n){return n instanceof Error?n:Error(String(n))}function te(n){if(!n||typeof n!=="object")return;let r=Fe.safeParse(n);if(!r.success)return;let e=r.data;if(!(("cancel"in e)||("review"in e)||("context"in e)||("contextModification"in e)||("overrideInput"in e)||("errorMessage"in e)))return;let f=typeof e.context==="string"?e.context:typeof e.contextModification==="string"?e.contextModification:typeof e.errorMessage==="string"&&e.errorMessage.length>0?e.errorMessage:void 0;return{cancel:typeof e.cancel==="boolean"?e.cancel:void 0,review:typeof e.review==="boolean"?e.review:void 0,context:f,overrideInput:Object.hasOwn(e,"overrideInput")?e.overrideInput:void 0}}function Kr(n){if(!n||typeof n!=="object")return{};let r={};for(let[e,o]of Object.entries(n))if(typeof o==="string")r[e]=o;else r[e]=JSON.stringify(o);return r}function b(n,r,e){let o=e.env??process.env,f=o.CLINE_USER_ID?.trim()||o.USER?.trim()||"unknown",i=e.cwd||process.cwd();return{clineVersion:o.CLINE_VERSION?.trim()||"",hookName:n,timestamp:new Date().toISOString(),taskId:r.conversationId,sessionContext:Fn(e.sessionContext),workspaceRoots:i?[i]:[],userId:f,agent_id:r.agentId,parent_agent_id:r.parentAgentId}}function pe(n){let r=String(n??"").toLowerCase();return r.includes("cancel")||r.includes("abort")||r.includes("interrupt")}async function c(n,r){try{let e=await wn(n,{command:r.command,cwd:r.cwd,env:r.env,detached:!0});r.onDispatch?.({payload:n,result:e,detached:!0})}catch(e){r.onDispatchError?.(Br(e),n)}}function Jr(n={}){let r=async(s)=>{if((n.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let h={...b("agent_resume",s,n),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await c(h,n)}else{let h={...b("agent_start",s,n),hookName:"agent_start",taskStart:{taskMetadata:{}}};await c(h,n)}let d={...b("prompt_submit",s,n),hookName:"prompt_submit",userPromptSubmit:{prompt:s.userMessage,attachments:[]}};await c(d,n);return},e=async(s)=>{let E={...b("tool_call",s,n),hookName:"tool_call",iteration:s.iteration,tool_call:{id:s.call.id,name:s.call.name,input:s.call.input},preToolUse:{toolName:s.call.name,parameters:Kr(s.call.input)}};try{let d=await wn(E,{command:n.command,cwd:n.cwd,env:n.env,detached:!1,timeoutMs:n.timeoutMs});if(n.onDispatch?.({payload:E,result:d,detached:!1}),d?.timedOut)throw Error("tool_call hook command timed out");if(d?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${d.parseError}`);return te(d?.parsedJson)}catch(d){n.onDispatchError?.(Br(d),E);return}},o=async(s)=>{let E={...b("tool_result",s,n),hookName:"tool_result",iteration:s.iteration,tool_result:s.record,postToolUse:{toolName:s.record.name,parameters:Kr(s.record.input),result:typeof s.record.output==="string"?s.record.output:JSON.stringify(s.record.output),success:!s.record.error,executionTimeMs:s.record.durationMs}};await c(E,n);return},f=async(s)=>{let E={...b("agent_end",s,n),hookName:"agent_end",iteration:s.iteration,turn:s.turn,taskComplete:{taskMetadata:{}}};await c(E,n);return},i=async(s)=>{if(pe(s.reason)){let d={...b("agent_abort",s,n),hookName:"agent_abort",reason:s.reason,taskCancel:{taskMetadata:{}}};await c(d,n)}let E={...b("session_shutdown",s,n),hookName:"session_shutdown",reason:s.reason};await c(E,n)};return{hooks:{onRunStart:r,onToolCallStart:e,onToolCallEnd:o,onTurnEnd:f,onSessionShutdown:async({agentId:s,conversationId:E,parentAgentId:d,reason:h})=>{await i({agentId:s,conversationId:E,parentAgentId:d,reason:h});return}},shutdown:i}}function Cn(n,r,e="",o=""){let f=typeof process<"u"&&process?.platform?process.platform:"unknown";return`You are Cline, an AI coding agent. Your primary goal is to assist users with various coding tasks by leveraging your knowledge and the tools at your disposal. Given the user's prompt, you should use the tools available to you to answer user's question.
19
19
 
20
20
  Always gather all the necessary context before starting to work on a task. For example, if you are generating a unit test or new code, make sure you understand the requirement, the naming conventions, frameworks and libraries used and aligned in the current codebase, and the environment and commands used to run and test the code etc. Always validate the new unit test at the end including running the code if possible for live feedback.
21
21
  Review each question carefully and answer it with detailed, accurate information.
@@ -44,6 +44,9 @@ When you have completed the task, please provide a summary of what you did and a
44
44
 
45
45
  If user asked a simple question without any coding context, answer it directly without using any tools.
46
46
  {{CLINE_RULES}}
47
- {{CLINE_METADATA}}`.replace("{{PLATFORM_NAME}}",i).replace("{{CWD}}",e).replace("{{CURRENT_DATE}}",new Date().toLocaleDateString()).replace("{{IDE_NAME}}",n).replace("{{CLINE_METADATA}}",r).replace("{{CLINE_RULES}}",o).trim()}function Le(n){return w({name:"spawn_agent",description:"Spawn a sub-agent with a custom system prompt for specialized tasks. Use when delegating work that benefits from focused expertise.",inputSchema:{type:"object",properties:{systemPrompt:{type:"string",description:"System prompt defining the sub-agent's behavior"},task:{type:"string",description:"Task for the sub-agent to complete"},maxIterations:{type:"integer",description:"Max iterations for the sub-agent",minimum:1}},required:["systemPrompt","task"]},execute:async(e,r)=>{let o=n.createSubAgentTools?await n.createSubAgentTools(e,r):n.subAgentTools??[],i=new t({providerId:n.providerId,modelId:n.modelId,apiKey:n.apiKey,baseUrl:n.baseUrl,providerConfig:n.providerConfig,knownModels:n.knownModels,thinking:n.thinking,systemPrompt:e.systemPrompt,tools:o,maxIterations:e.maxIterations??n.defaultMaxIterations,parentAgentId:r.agentId,abortSignal:r.abortSignal,onEvent:n.onSubAgentEvent,hooks:n.hooks,extensions:n.extensions,hookErrorMode:n.hookErrorMode,toolPolicies:n.toolPolicies,requestToolApproval:n.requestToolApproval,logger:n.logger}),f=i.getAgentId(),s=i.getConversationId(),E=r.agentId;if(n.onSubAgentStart)try{await n.onSubAgentStart({subAgentId:f,conversationId:s,parentAgentId:E,input:e})}catch{}try{let d=await i.run(e.task),v={text:d.text,iterations:d.iterations,finishReason:d.finishReason,usage:{inputTokens:d.usage.inputTokens,outputTokens:d.usage.outputTokens}};if(n.onSubAgentEnd)try{await n.onSubAgentEnd({subAgentId:f,conversationId:s,parentAgentId:E,input:e,result:v})}catch{}return v}catch(d){if(n.onSubAgentEnd)try{await n.onSubAgentEnd({subAgentId:f,conversationId:s,parentAgentId:E,input:e,error:d instanceof Error?d:Error(String(d))})}catch{}throw d}},timeoutMs:300000,retryable:!1})}class mn{teamId;teamName;onTeamEvent;members=new Map;tasks=new Map;missionLog=[];mailbox=[];missionStepCounter=0;taskCounter=0;messageCounter=0;missionCounter=0;runCounter=0;outcomeCounter=0;outcomeFragmentCounter=0;runs=new Map;runQueue=[];outcomes=new Map;outcomeFragments=new Map;missionLogIntervalSteps;missionLogIntervalMs;maxConcurrentRuns;constructor(n){this.teamName=n.teamName,this.teamId=`team_${Ir(n.teamName)}_${Date.now().toString(36)}`,this.onTeamEvent=n.onTeamEvent,this.missionLogIntervalSteps=Math.max(1,n.missionLogIntervalSteps??3),this.missionLogIntervalMs=Math.max(1000,n.missionLogIntervalMs??120000),this.maxConcurrentRuns=Math.max(1,n.maxConcurrentRuns??2);let e=n.leadAgentId??"lead";this.members.set(e,{agentId:e,role:"lead",status:"idle",runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()})}getTeamId(){return this.teamId}getTeamName(){return this.teamName}getMemberRole(n){return this.members.get(n)?.role}getMemberIds(){return Array.from(this.members.keys())}getTeammateIds(){return Array.from(this.members.values()).filter((n)=>n.role==="teammate").map((n)=>n.agentId)}getTask(n){return this.tasks.get(n)}listTasks(){return Array.from(this.tasks.values())}listMissionLog(n){if(!n||n<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-n))}listMailbox(n,e){let r=e?.unreadOnly??!0,o=e?.markRead??!0,i=e?.limit,f=this.mailbox.filter((E)=>E.toAgentId===n&&(!r||!E.readAt)),s=typeof i==="number"&&i>0?f.slice(Math.max(0,f.length-i)):f;if(o){let E=new Date;for(let d of s)if(!d.readAt)d.readAt=E}return s.map((E)=>({...E}))}getSnapshot(){let n={pending:0,in_progress:0,blocked:0,completed:0};for(let r of this.tasks.values())n[r.status]++;let e={draft:0,in_review:0,finalized:0};for(let r of this.outcomes.values())e[r.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((r)=>({agentId:r.agentId,role:r.role,description:r.description,status:r.status})),taskCounts:n,unreadMessages:this.mailbox.filter((r)=>!r.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((r)=>r.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((r)=>r.status==="queued").length,outcomeCounts:e}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((n)=>({agentId:n.agentId,role:n.role,description:n.description,status:n.status})),tasks:Array.from(this.tasks.values()).map((n)=>({...n})),mailbox:this.mailbox.map((n)=>({...n})),missionLog:this.missionLog.map((n)=>({...n})),runs:Array.from(this.runs.values()).map((n)=>({...n})),outcomes:Array.from(this.outcomes.values()).map((n)=>({...n})),outcomeFragments:Array.from(this.outcomeFragments.values()).map((n)=>({...n}))}}hydrateState(n){this.tasks.clear();for(let r of n.tasks)this.tasks.set(r.id,{...r});this.mailbox.length=0,this.mailbox.push(...n.mailbox.map((r)=>({...r}))),this.missionLog.length=0,this.missionLog.push(...n.missionLog.map((r)=>({...r}))),this.runs.clear();for(let r of n.runs??[])this.runs.set(r.id,{...r});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((r)=>r.status==="queued").map((r)=>r.id)),this.outcomes.clear();for(let r of n.outcomes??[])this.outcomes.set(r.id,{...r});this.outcomeFragments.clear();for(let r of n.outcomeFragments??[])this.outcomeFragments.set(r.id,{...r});let e=Array.from(this.members.values()).filter((r)=>r.role==="lead");this.members.clear();for(let r of e)this.members.set(r.agentId,{...r,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let r of n.members){if(r.role!=="teammate")continue;this.members.set(r.agentId,{agentId:r.agentId,role:"teammate",description:r.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,b(n.tasks.map((r)=>r.id),"task_")),this.messageCounter=Math.max(this.messageCounter,b(n.mailbox.map((r)=>r.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,b(n.missionLog.map((r)=>r.id),"log_")),this.runCounter=Math.max(this.runCounter,b((n.runs??[]).map((r)=>r.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,b((n.outcomes??[]).map((r)=>r.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,b((n.outcomeFragments??[]).map((r)=>r.id),"frag_"))}isTeammateActive(n){let e=this.members.get(n);return!!e&&e.role==="teammate"&&!!e.agent}spawnTeammate({agentId:n,config:e}){let r=this.members.get(n);if(r&&r.role!=="teammate")throw Error(`Team member "${n}" already exists and is not a teammate`);if(r&&r.runningCount>0)throw Error(`Teammate "${n}" is currently running and cannot be respawned`);let o={...e,onEvent:(s)=>{e.onEvent?.(s),this.emitEvent({type:"agent_event",agentId:n,event:s}),this.trackMeaningfulEvent(n,s)}},i=Fn(o),f={agentId:n,role:"teammate",description:e.role,status:"idle",agent:i,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set(n,f),this.emitEvent({type:"teammate_spawned",agentId:n,role:e.role,teammate:{rolePrompt:e.systemPrompt,modelId:e.modelId,maxIterations:e.maxIterations}}),{agentId:f.agentId,role:f.role,description:f.description,status:f.status}}shutdownTeammate(n,e){let r=this.members.get(n);if(!r||r.role!=="teammate")throw Error(`Teammate "${n}" was not found`);r.agent?.abort(),r.status="stopped",this.emitEvent({type:"teammate_shutdown",agentId:n,reason:e})}updateTeammateConnections(n){for(let e of this.members.values()){if(e.role!=="teammate"||!e.agent)continue;e.agent.updateConnection(n)}}createTask(n){let e=`task_${String(++this.taskCounter).padStart(4,"0")}`,r=new Date,o={id:e,title:n.title,description:n.description,status:n.assignee?"in_progress":"pending",createdAt:r,updatedAt:r,createdBy:n.createdBy,assignee:n.assignee,dependsOn:n.dependsOn??[]};return this.tasks.set(e,o),this.emitEvent({type:"team_task_updated",task:{...o}}),{...o}}claimTask(n,e){let r=this.requireTask(n);return this.assertDependenciesResolved(r),r.status="in_progress",r.assignee=e,r.updatedAt=new Date,this.emitEvent({type:"team_task_updated",task:{...r}}),this.appendMissionLog({agentId:e,taskId:n,kind:"progress",summary:`Claimed task "${r.title}"`}),{...r}}blockTask(n,e,r){let o=this.requireTask(n);return o.status="blocked",o.updatedAt=new Date,o.summary=r,this.emitEvent({type:"team_task_updated",task:{...o}}),this.appendMissionLog({agentId:e,taskId:n,kind:"blocked",summary:r}),{...o}}completeTask(n,e,r){let o=this.requireTask(n);if(o.status="completed",o.updatedAt=new Date,o.summary=r,!o.assignee)o.assignee=e;return this.emitEvent({type:"team_task_updated",task:{...o}}),this.appendMissionLog({agentId:e,taskId:n,kind:"done",summary:r}),{...o}}async routeToTeammate(n,e,r){let o=this.members.get(n);if(!o||o.role!=="teammate"||!o.agent)throw Error(`Teammate "${n}" was not found`);o.runningCount++,o.status="running",this.emitEvent({type:"task_start",agentId:n,message:e});try{let i=r?.continueConversation?await o.agent.continue(e):await o.agent.run(e);return this.emitEvent({type:"task_end",agentId:n,result:i}),this.recordProgressStep(n,`Completed a delegated run (${i.iterations} iterations)`,r?.taskId,!0),i}catch(i){let f=i instanceof Error?i:Error(String(i));throw this.emitEvent({type:"task_end",agentId:n,error:f}),this.appendMissionLog({agentId:n,taskId:r?.taskId,kind:"error",summary:f.message}),f}finally{if(o.runningCount--,o.runningCount<=0&&this.members.get(n)?.status!=="stopped")o.status="idle"}}startTeammateRun(n,e,r){let o=`run_${String(++this.runCounter).padStart(5,"0")}`,i={id:o,agentId:n,taskId:r?.taskId,status:"queued",message:e,priority:r?.priority??0,retryCount:0,maxRetries:Math.max(0,r?.maxRetries??0),continueConversation:r?.continueConversation,startedAt:new Date(0),leaseOwner:r?.leaseOwner,heartbeatAt:void 0};return this.runs.set(o,i),this.runQueue.push(o),this.emitEvent({type:"run_queued",run:{...i}}),this.dispatchQueuedRuns(),{...i}}dispatchQueuedRuns(){while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let n=this.selectNextQueuedRunIndex(),[e]=this.runQueue.splice(n,1),r=e?this.runs.get(e):void 0;if(!r||r.status!=="queued")continue;this.executeQueuedRun(r)}}selectNextQueuedRunIndex(){let n=0,e=Number.NEGATIVE_INFINITY;for(let r=0;r<this.runQueue.length;r++){let o=this.runs.get(this.runQueue[r]);if(!o||o.status!=="queued")continue;if(o.priority>e)e=o.priority,n=r}return n}countActiveRuns(){let n=0;for(let e of this.runs.values())if(e.status==="running")n++;return n}async executeQueuedRun(n){n.status="running",n.startedAt=new Date,n.heartbeatAt=new Date,this.emitEvent({type:"run_started",run:{...n}});let e=setInterval(()=>{if(n.status!=="running")return;n.heartbeatAt=new Date,this.emitEvent({type:"run_progress",run:{...n},message:"heartbeat"})},2000);try{let r=await this.routeToTeammate(n.agentId,n.message,{taskId:n.taskId,continueConversation:n.continueConversation});n.status="completed",n.result=r,n.endedAt=new Date,this.emitEvent({type:"run_completed",run:{...n}})}catch(r){let o=r instanceof Error?r.message:String(r??"Unknown error");if(n.error=o,n.endedAt=new Date,n.retryCount<n.maxRetries)n.retryCount++,n.status="queued",n.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**n.retryCount)),this.runQueue.push(n.id),this.emitEvent({type:"run_progress",run:{...n},message:`retry_scheduled_${n.retryCount}`});else n.status="failed",this.emitEvent({type:"run_failed",run:{...n}})}finally{clearInterval(e),this.dispatchQueuedRuns()}}listRuns(n){let e=n?.includeCompleted??!0;return Array.from(this.runs.values()).filter((r)=>{if(!e&&!["running","queued"].includes(r.status))return!1;if(n?.status&&r.status!==n.status)return!1;if(n?.agentId&&r.agentId!==n.agentId)return!1;return!0}).map((r)=>({...r}))}getRun(n){let e=this.runs.get(n);return e?{...e}:void 0}async awaitRun(n,e=250){let r=this.runs.get(n);if(!r)throw Error(`Run "${n}" was not found`);while(r.status==="running")await Oe(e);return{...r}}async awaitAllRuns(n=250){while(Array.from(this.runs.values()).some((e)=>["queued","running"].includes(e.status)))await Oe(n);return this.listRuns()}cancelRun(n,e){let r=this.runs.get(n);if(!r)throw Error(`Run "${n}" was not found`);if(r.status==="completed"||r.status==="failed")return{...r};r.status="cancelled",r.error=e,r.endedAt=new Date;let o=this.runQueue.indexOf(n);if(o>=0)this.runQueue.splice(o,1);return this.emitEvent({type:"run_cancelled",run:{...r},reason:e}),{...r}}markStaleRunsInterrupted(n="runtime_recovered"){let e=[];for(let r of this.runs.values()){if(!["queued","running"].includes(r.status))continue;r.status="interrupted",r.error=n,r.endedAt=new Date,e.push({...r}),this.emitEvent({type:"run_interrupted",run:{...r},reason:n})}return this.runQueue.length=0,e}sendMessage(n,e,r,o,i){if(!this.members.has(n))throw Error(`Unknown sender "${n}"`);if(!this.members.has(e))throw Error(`Unknown recipient "${e}"`);let f={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:n,toAgentId:e,subject:r,body:o,taskId:i,sentAt:new Date};return this.mailbox.push(f),this.emitEvent({type:"team_message",message:{...f}}),{...f}}broadcast(n,e,r,o){let i=o?.includeLead??!1,f=[];for(let s of this.members.values()){if(s.agentId===n)continue;if(!i&&s.role==="lead")continue;f.push(this.sendMessage(n,s.agentId,e,r,o?.taskId))}return f}appendMissionLog(n){if(!this.members.has(n.agentId))throw Error(`Unknown team member "${n.agentId}"`);let e={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:n.agentId,taskId:n.taskId,kind:n.kind,summary:n.summary,evidence:n.evidence,nextAction:n.nextAction};this.missionLog.push(e);let r=this.members.get(n.agentId);if(r)r.lastMissionAt=Date.now(),r.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:"team_mission_log",entry:{...e}}),{...e}}createOutcome(n){let e={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:n.title,status:"draft",requiredSections:[...new Set(n.requiredSections)],createdBy:n.createdBy,createdAt:new Date};return this.outcomes.set(e.id,e),this.emitEvent({type:"outcome_created",outcome:{...e}}),{...e}}listOutcomes(){return Array.from(this.outcomes.values()).map((n)=>({...n}))}attachOutcomeFragment(n){let e=this.outcomes.get(n.outcomeId);if(!e)throw Error(`Outcome "${n.outcomeId}" was not found`);if(!e.requiredSections.includes(n.section))throw Error(`Section "${n.section}" is not part of outcome "${n.outcomeId}"`);let r={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:n.outcomeId,section:n.section,sourceAgentId:n.sourceAgentId,sourceRunId:n.sourceRunId,content:n.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(r.id,r),e.status==="draft")e.status="in_review";return this.emitEvent({type:"outcome_fragment_attached",fragment:{...r}}),{...r}}reviewOutcomeFragment(n){let e=this.outcomeFragments.get(n.fragmentId);if(!e)throw Error(`Fragment "${n.fragmentId}" was not found`);return e.status=n.approved?"reviewed":"rejected",e.reviewedBy=n.reviewedBy,e.reviewedAt=new Date,this.emitEvent({type:"outcome_fragment_reviewed",fragment:{...e}}),{...e}}listOutcomeFragments(n){return Array.from(this.outcomeFragments.values()).filter((e)=>e.outcomeId===n).map((e)=>({...e}))}finalizeOutcome(n){let e=this.outcomes.get(n);if(!e)throw Error(`Outcome "${n}" was not found`);let r=this.listOutcomeFragments(n);for(let o of e.requiredSections)if(!r.some((f)=>f.section===o&&f.status==="reviewed"))throw Error(`Outcome "${n}" cannot be finalized. Section "${o}" is missing a reviewed fragment.`);return e.status="finalized",e.finalizedAt=new Date,this.emitEvent({type:"outcome_finalized",outcome:{...e}}),{...e}}cleanup(){for(let n of this.members.values())if(n.role==="teammate"&&n.runningCount>0)throw Error(`Cannot cleanup team while teammate "${n.agentId}" is still running`);if(Array.from(this.runs.values()).some((n)=>["queued","running"].includes(n.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let n of this.members.values())if(n.role==="teammate")n.agent?.abort();this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.outcomes.clear(),this.outcomeFragments.clear();for(let[n,e]of this.members.entries())if(e.role==="teammate")this.members.delete(n)}requireTask(n){let e=this.tasks.get(n);if(!e)throw Error(`Task "${n}" was not found`);return e}assertDependenciesResolved(n){for(let e of n.dependsOn){let r=this.tasks.get(e);if(!r||r.status!=="completed")throw Error(`Task "${n.id}" is blocked by "${e}"`)}}trackMeaningfulEvent(n,e){if(e.type==="iteration_end"&&e.hadToolCalls){this.recordProgressStep(n,`Completed iteration ${e.iteration} with ${e.toolCallCount} tool call(s)`);return}if(e.type==="content_end"&&e.contentType==="tool"&&!e.error){this.recordProgressStep(n,`Finished tool "${e.toolName??"unknown"}"`);return}if(e.type==="done"){this.appendMissionLog({agentId:n,kind:"done",summary:`Run completed after ${e.iterations} iteration(s)`});return}if(e.type==="error")this.appendMissionLog({agentId:n,kind:"error",summary:e.error.message})}recordProgressStep(n,e,r,o=!1){this.missionStepCounter++;let i=this.members.get(n);if(!i)return;let f=this.missionStepCounter-i.lastMissionStep,s=Date.now()-i.lastMissionAt;if(!o&&f<this.missionLogIntervalSteps&&s<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:n,taskId:r,kind:"progress",summary:e})}emitEvent(n){try{this.onTeamEvent?.(n)}catch{}}}function Ir(n){return n.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,24)}function Oe(n){return new Promise((e)=>setTimeout(e,n))}function b(n,e){let r=0;for(let o of n){if(!o.startsWith(e))continue;let i=Number.parseInt(o.slice(e.length),10);if(Number.isFinite(i))r=Math.max(r,i)}return r}function Y(n){if(typeof n!=="string")throw TypeError("Path must be a string. Received "+JSON.stringify(n))}function qe(n,e){var r="",o=0,i=-1,f=0,s;for(var E=0;E<=n.length;++E){if(E<n.length)s=n.charCodeAt(E);else if(s===47)break;else s=47;if(s===47){if(i===E-1||f===1);else if(i!==E-1&&f===2){if(r.length<2||o!==2||r.charCodeAt(r.length-1)!==46||r.charCodeAt(r.length-2)!==46){if(r.length>2){var d=r.lastIndexOf("/");if(d!==r.length-1){if(d===-1)r="",o=0;else r=r.slice(0,d),o=r.length-1-r.lastIndexOf("/");i=E,f=0;continue}}else if(r.length===2||r.length===1){r="",o=0,i=E,f=0;continue}}if(e){if(r.length>0)r+="/..";else r="..";o=2}}else{if(r.length>0)r+="/"+n.slice(i+1,E);else r=n.slice(i+1,E);o=E-i-1}i=E,f=0}else if(s===46&&f!==-1)++f;else f=-1}return r}function zr(n,e){var r=e.dir||e.root,o=e.base||(e.name||"")+(e.ext||"");if(!r)return o;if(r===e.root)return r+o;return r+n+o}function p(){var n="",e=!1,r;for(var o=arguments.length-1;o>=-1&&!e;o--){var i;if(o>=0)i=arguments[o];else{if(r===void 0)r=process.cwd();i=r}if(Y(i),i.length===0)continue;n=i+"/"+n,e=i.charCodeAt(0)===47}if(n=qe(n,!e),e)if(n.length>0)return"/"+n;else return"/";else if(n.length>0)return n;else return"."}function Ke(n){if(Y(n),n.length===0)return".";var e=n.charCodeAt(0)===47,r=n.charCodeAt(n.length-1)===47;if(n=qe(n,!e),n.length===0&&!e)n=".";if(n.length>0&&r)n+="/";if(e)return"/"+n;return n}function xr(n){return Y(n),n.length>0&&n.charCodeAt(0)===47}function ar(){if(arguments.length===0)return".";var n;for(var e=0;e<arguments.length;++e){var r=arguments[e];if(Y(r),r.length>0)if(n===void 0)n=r;else n+="/"+r}if(n===void 0)return".";return Ke(n)}function tr(n,e){if(Y(n),Y(e),n===e)return"";if(n=p(n),e=p(e),n===e)return"";var r=1;for(;r<n.length;++r)if(n.charCodeAt(r)!==47)break;var o=n.length,i=o-r,f=1;for(;f<e.length;++f)if(e.charCodeAt(f)!==47)break;var s=e.length,E=s-f,d=i<E?i:E,v=-1,y=0;for(;y<=d;++y){if(y===d){if(E>d){if(e.charCodeAt(f+y)===47)return e.slice(f+y+1);else if(y===0)return e.slice(f+y)}else if(i>d){if(n.charCodeAt(r+y)===47)v=y;else if(y===0)v=0}break}var P=n.charCodeAt(r+y),l=e.charCodeAt(f+y);if(P!==l)break;else if(P===47)v=y}var L="";for(y=r+v+1;y<=o;++y)if(y===o||n.charCodeAt(y)===47)if(L.length===0)L+="..";else L+="/..";if(L.length>0)return L+e.slice(f+v);else{if(f+=v,e.charCodeAt(f)===47)++f;return e.slice(f)}}function pr(n){return n}function no(n){if(Y(n),n.length===0)return".";var e=n.charCodeAt(0),r=e===47,o=-1,i=!0;for(var f=n.length-1;f>=1;--f)if(e=n.charCodeAt(f),e===47){if(!i){o=f;break}}else i=!1;if(o===-1)return r?"/":".";if(r&&o===1)return"//";return n.slice(0,o)}function bn(n,e){if(e!==void 0&&typeof e!=="string")throw TypeError('"ext" argument must be a string');Y(n);var r=0,o=-1,i=!0,f;if(e!==void 0&&e.length>0&&e.length<=n.length){if(e.length===n.length&&e===n)return"";var s=e.length-1,E=-1;for(f=n.length-1;f>=0;--f){var d=n.charCodeAt(f);if(d===47){if(!i){r=f+1;break}}else{if(E===-1)i=!1,E=f+1;if(s>=0)if(d===e.charCodeAt(s)){if(--s===-1)o=f}else s=-1,o=E}}if(r===o)o=E;else if(o===-1)o=n.length;return n.slice(r,o)}else{for(f=n.length-1;f>=0;--f)if(n.charCodeAt(f)===47){if(!i){r=f+1;break}}else if(o===-1)i=!1,o=f+1;if(o===-1)return"";return n.slice(r,o)}}function eo(n){Y(n);var e=-1,r=0,o=-1,i=!0,f=0;for(var s=n.length-1;s>=0;--s){var E=n.charCodeAt(s);if(E===47){if(!i){r=s+1;break}continue}if(o===-1)i=!1,o=s+1;if(E===46){if(e===-1)e=s;else if(f!==1)f=1}else if(e!==-1)f=-1}if(e===-1||o===-1||f===0||f===1&&e===o-1&&e===r+1)return"";return n.slice(e,o)}function ro(n){if(n===null||typeof n!=="object")throw TypeError('The "pathObject" argument must be of type Object. Received type '+typeof n);return zr("/",n)}function oo(n){Y(n);var e={root:"",dir:"",base:"",ext:"",name:""};if(n.length===0)return e;var r=n.charCodeAt(0),o=r===47,i;if(o)e.root="/",i=1;else i=0;var f=-1,s=0,E=-1,d=!0,v=n.length-1,y=0;for(;v>=i;--v){if(r=n.charCodeAt(v),r===47){if(!d){s=v+1;break}continue}if(E===-1)d=!1,E=v+1;if(r===46){if(f===-1)f=v;else if(y!==1)y=1}else if(f!==-1)y=-1}if(f===-1||E===-1||y===0||y===1&&f===E-1&&f===s+1){if(E!==-1)if(s===0&&o)e.base=e.name=n.slice(1,E);else e.base=e.name=n.slice(s,E)}else{if(s===0&&o)e.name=n.slice(1,f),e.base=n.slice(1,E);else e.name=n.slice(s,f),e.base=n.slice(s,E);e.ext=n.slice(f,E)}if(s>0)e.dir=n.slice(0,s-1);else if(o)e.dir="/";return e}var io="/",fo=":",qf=((n)=>(n.posix=n,n))({resolve:p,normalize:Ke,isAbsolute:xr,join:ar,relative:tr,_makeLong:pr,dirname:no,basename:bn,extname:eo,format:ro,parse:oo,sep:io,delimiter:fo,win32:null,posix:null});import{z as h}from"zod";var $e=h.object({agentId:h.string().min(1).describe("Teammate identifier"),rolePrompt:h.string().min(1).describe("System prompt describing teammate role"),maxIterations:h.number().int().min(1).optional().describe("Max iterations per teammate run for spawn")}).strict(),Be=h.object({agentId:h.string().min(1).describe("Teammate identifier"),reason:h.string().min(1).optional().describe("Optional shutdown reason")}),Ne=h.object({}),Je=h.object({title:h.string().min(1).describe("Task title"),description:h.string().min(1).describe("Task details"),dependsOn:h.array(h.string()).optional().describe("Dependency task IDs"),assignee:h.string().min(1).optional().describe("Optional assignee")}),Ye=h.object({taskId:h.string().describe("Task ID")}),ke=h.object({taskId:h.string().describe("Task ID"),summary:h.string().min(1).describe("Completion summary")}),Ve=h.object({taskId:h.string().describe("Task ID"),reason:h.string().min(1).describe("Blocking reason")}),Qe=h.object({agentId:h.string().describe("Teammate agent ID"),task:h.string().min(1).describe("Task instructions for the teammate"),taskId:h.string().optional().describe("Optional shared task list ID"),runMode:h.enum(["sync","async"]).optional().describe("Execution mode: sync waits for result; async returns a runId immediately"),continueConversation:h.boolean().optional().describe("If true, continue the teammate conversation; otherwise start fresh")}),Ge=h.object({status:h.enum(["queued","running","completed","failed","cancelled","interrupted"]).optional(),agentId:h.string().min(1).optional().describe("Filter by teammate ID"),includeCompleted:h.boolean().optional().describe("Include completed/failed runs (default true)")}),Me=h.object({runId:h.string().min(1).describe("Run ID"),reason:h.string().min(1).optional().describe("Optional cancellation reason")}),Xe=h.object({runId:h.string().min(1).describe("Async run ID to await")}),Ze=h.object({}),We=h.object({toAgentId:h.string().min(1).describe("Recipient agent ID"),subject:h.string().min(1).describe("Message subject"),body:h.string().min(1).describe("Message body"),taskId:h.string().min(1).optional().describe("Optional task ID context")}),Ue=h.object({subject:h.string().min(1).describe("Message subject"),body:h.string().min(1).describe("Message body"),taskId:h.string().min(1).optional().describe("Optional task ID context"),includeLead:h.boolean().optional().describe("Include the lead agent in broadcast recipients")}),Fe=h.object({unreadOnly:h.boolean().optional().describe("Only unread messages for read action (default true)"),limit:h.number().int().min(1).max(100).optional().describe("Optional max number of messages for read action")}),je=h.object({kind:h.enum(["progress","handoff","blocked","decision","done","error"]),summary:h.string().min(1).describe("Update summary"),taskId:h.string().min(1).optional().describe("Optional task ID context"),evidence:h.array(h.string().min(1)).optional().describe("Optional evidence links/snippets"),nextAction:h.string().min(1).optional().describe("Planned next step")}),ue=h.object({}),so=["current_state","boundary_analysis","interface_proposal"],me=h.object({title:h.string().describe("Outcome title"),requiredSections:h.array(h.string()).default(so).describe("Required sections for finalization gate (defaults to current_state,boundary_analysis,interface_proposal)")}),be=h.object({outcomeId:h.string().describe("Outcome ID"),section:h.string().describe("Section name"),sourceRunId:h.string().optional().describe("Optional source run ID"),content:h.string().describe("Section fragment content")}),ce=h.object({fragmentId:h.string().describe("Fragment ID"),approved:h.boolean().describe("Review decision")}),Ie=h.object({outcomeId:h.string().describe("Outcome ID")}),ze=h.object({});function Eo(n){let e=p(n);return`# Workspace Configuration
48
- ${JSON.stringify({workspaces:{[e]:{hint:bn(e)}}},null,2)}`}function So(n,e){if(e.providerId!=="cline")return n.rolePrompt;let r=e.cwd?.trim()||process.cwd(),o=e.clineWorkspaceMetadata?.trim()||Eo(r),i=n.rolePrompt.trim(),f=i?`# Team Teammate Role
49
- ${i}`:"";return yn(e.clineIdeName?.trim()||"Terminal Shell",r,o,f)}function xe(n){let e=[];if(n.createBaseTools)e.push(...n.createBaseTools());e.push(...Tn({runtime:n.runtime,requesterId:n.spec.agentId,teammateRuntime:n.teammateRuntime,createBaseTools:n.createBaseTools,allowSpawn:!1})),n.runtime.spawnTeammate({agentId:n.spec.agentId,config:{providerId:n.teammateRuntime.providerId,modelId:n.spec.modelId??n.teammateRuntime.modelId,apiKey:n.teammateRuntime.apiKey,baseUrl:n.teammateRuntime.baseUrl,headers:n.teammateRuntime.headers,providerConfig:n.teammateRuntime.providerConfig,knownModels:n.teammateRuntime.knownModels,thinking:n.teammateRuntime.thinking,systemPrompt:So(n.spec,n.teammateRuntime),maxIterations:n.spec.maxIterations??n.teammateRuntime.maxIterations,tools:e,hooks:n.teammateRuntime.hooks,extensions:n.teammateRuntime.extensions,logger:n.teammateRuntime.logger}})}function ae(n){let e=n.leadAgentId??"lead",r=n.restoredFromPersistence===!0,o=Tn({runtime:n.runtime,requesterId:e,teammateRuntime:n.teammateRuntime,createBaseTools:n.createBaseTools,allowSpawn:!0}),i=[];for(let f of n.restoredTeammates??[]){if(n.runtime.isTeammateActive(f.agentId))continue;xe({runtime:n.runtime,requesterId:e,teammateRuntime:n.teammateRuntime,createBaseTools:n.createBaseTools,spec:f}),i.push(f.agentId)}return{tools:o,restoredFromPersistence:r,restoredTeammates:i}}function Tn(n){let e=n.allowSpawn??!0,r=[];return r.push(w({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:H($e),execute:async(o)=>{let i=D($e,o);if(n.runtime.getMemberRole(n.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!e)throw Error("Spawning teammates is disabled in this context.");let f={agentId:i.agentId,rolePrompt:i.rolePrompt,maxIterations:i.maxIterations};return xe({runtime:n.runtime,requesterId:n.requesterId,teammateRuntime:n.teammateRuntime,createBaseTools:n.createBaseTools,spec:f}),{agentId:i.agentId,status:"spawned"}}})),r.push(w({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:H(Be),execute:async(o)=>{let i=D(Be,o);if(n.runtime.getMemberRole(n.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return n.runtime.shutdownTeammate(i.agentId,i.reason),{agentId:i.agentId,status:"stopped"}}})),r.push(w({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:H(Ne),execute:async(o)=>{return D(Ne,o),n.runtime.getSnapshot()}})),r.push(w({name:"team_create_task",description:"Create a shared team task with title and description.",inputSchema:H(Je),execute:async(o)=>{let i=D(Je,o),f=n.runtime.createTask({title:i.title,description:i.description,dependsOn:i.dependsOn,assignee:i.assignee,createdBy:n.requesterId});return{taskId:f.id,status:f.status}}})),r.push(w({name:"team_claim_task",description:"Claim a task by taskId.",inputSchema:H(Ye),execute:async(o)=>{let i=D(Ye,o),f=n.runtime.claimTask(i.taskId,n.requesterId);return{taskId:f.id,status:f.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_complete_task when done."}}})),r.push(w({name:"team_complete_task",description:"Complete a task by taskId and provide a summary.",inputSchema:H(ke),execute:async(o)=>{let i=D(ke,o),f=n.runtime.completeTask(i.taskId,n.requesterId,i.summary);return{taskId:f.id,status:f.status}}})),r.push(w({name:"team_block_task",description:"Block a task by taskId with a reason.",inputSchema:H(Ve),execute:async(o)=>{let i=D(Ve,o),f=n.runtime.blockTask(i.taskId,n.requesterId,i.reason);return{taskId:f.id,status:f.status}}})),r.push(w({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:H(Qe),execute:async(o)=>{let i=D(Qe,o);if(i.runMode==="async"){let s=n.runtime.startTeammateRun(i.agentId,i.task,{taskId:i.taskId,fromAgentId:n.requesterId,continueConversation:i.continueConversation});return{agentId:i.agentId,mode:"async",runId:s.id}}let f=await n.runtime.routeToTeammate(i.agentId,i.task,{taskId:i.taskId,fromAgentId:n.requesterId,continueConversation:i.continueConversation});return{agentId:i.agentId,mode:"sync",text:f.text,iterations:f.iterations}}})),r.push(w({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:H(Me),execute:async(o)=>{let i=D(Me,o),f=n.runtime.cancelRun(i.runId,i.reason);return{runId:f.id,status:f.status}}})),r.push(w({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode.",inputSchema:H(Ge),execute:async(o)=>n.runtime.listRuns(D(Ge,o))})),r.push(w({name:"team_await_run",description:"Wait for one async run by runId.",inputSchema:H(Xe),execute:async(o)=>{let i=D(Xe,o),f=await n.runtime.awaitRun(i.runId);if(f.status==="failed")throw Error(`Run "${f.id}" failed${f.error?`: ${f.error}`:""}`);if(f.status==="cancelled")throw Error(`Run "${f.id}" was cancelled${f.error?`: ${f.error}`:""}`);if(f.status==="interrupted")throw Error(`Run "${f.id}" was interrupted${f.error?`: ${f.error}`:""}`);return f}})),r.push(w({name:"team_await_all_runs",description:"Wait for all active async runs to complete.",inputSchema:H(Ze),execute:async(o)=>{D(Ze,o);let i=await n.runtime.awaitAllRuns(),f=i.filter((s)=>["failed","cancelled","interrupted"].includes(s.status));if(f.length>0){let s=f.map((E)=>`${E.id}:${E.status}${E.error?`(${E.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${s}`)}return i}})),r.push(w({name:"team_send_message",description:"Send a direct mailbox message to one teammate.",inputSchema:H(We),execute:async(o)=>{let i=D(We,o),f=n.runtime.sendMessage(n.requesterId,i.toAgentId,i.subject,i.body,i.taskId);return{id:f.id,toAgentId:f.toAgentId}}})),r.push(w({name:"team_broadcast",description:"Broadcast a mailbox message to all teammates.",inputSchema:H(Ue),execute:async(o)=>{let i=D(Ue,o);return{delivered:n.runtime.broadcast(n.requesterId,i.subject,i.body,{taskId:i.taskId,includeLead:i.includeLead}).length}}})),r.push(w({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:H(Fe),execute:async(o)=>{let i=D(Fe,o);return n.runtime.listMailbox(n.requesterId,{unreadOnly:i.unreadOnly,limit:i.limit,markRead:!0})}})),r.push(w({name:"team_log_update",description:"Append a mission log update for this agent.",inputSchema:H(je),execute:async(o)=>{let i=D(je,o);return{id:n.runtime.appendMissionLog({agentId:n.requesterId,taskId:i.taskId,kind:i.kind,summary:i.summary,evidence:i.evidence,nextAction:i.nextAction}).id}}})),r.push(w({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:H(ue),execute:async(o)=>{if(D(ue,o),n.runtime.getMemberRole(n.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return n.runtime.cleanup(),{status:"cleaned"}}})),r.push(w({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:H(me),execute:async(o)=>{let i=D(me,o),f=n.runtime.createOutcome({title:i.title,requiredSections:i.requiredSections,createdBy:n.requesterId});return{outcomeId:f.id,status:f.status}}})),r.push(w({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:H(be),execute:async(o)=>{let i=D(be,o),f=n.runtime.attachOutcomeFragment({outcomeId:i.outcomeId,section:i.section,sourceAgentId:n.requesterId,sourceRunId:i.sourceRunId,content:i.content});return{fragmentId:f.id,status:f.status}}})),r.push(w({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:H(ce),execute:async(o)=>{let i=D(ce,o),f=n.runtime.reviewOutcomeFragment({fragmentId:i.fragmentId,reviewedBy:n.requesterId,approved:i.approved});return{fragmentId:f.id,status:f.status}}})),r.push(w({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:H(Ie),execute:async(o)=>{let i=D(Ie,o),f=n.runtime.finalizeOutcome(i.outcomeId);return{outcomeId:f.id,status:f.status}}})),r.push(w({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:H(ze),execute:async(o)=>{return D(ze,o),n.runtime.listOutcomes()}})),r}function vo(n){return`${n.serverName}__${n.toolName}`}function cn(n){return{[(n.nameTransform??vo)({serverName:n.serverName,toolName:n.toolName})]:{enabled:!1}}}function te(n){let e={};for(let r of n.toolNames)Object.assign(e,cn({serverName:n.serverName,toolName:r,nameTransform:n.nameTransform}));return e}function ho(n){return`${n.serverName}__${n.toolName}`}function _o(n,e){let r=e.description?.trim();if(r)return r;return`Execute MCP tool "${e.name}" from server "${n}".`}async function pe(n){let e=await n.provider.listTools(n.serverName),r=n.nameTransform??ho;return e.map((o)=>{let i=r({serverName:n.serverName,toolName:o.name});return w({name:i,description:_o(n.serverName,o),inputSchema:o.inputSchema,timeoutMs:n.timeoutMs,retryable:n.retryable,maxRetries:n.maxRetries,execute:async(f,s)=>n.provider.callTool({serverName:n.serverName,toolName:o.name,arguments:f&&typeof f==="object"&&!Array.isArray(f)?f:void 0,context:s})})})}import{z as S}from"zod";var yo=S.enum(["completed","max_iterations","aborted","error"]),nr=S.object({inputTokens:S.number(),outputTokens:S.number(),cacheReadTokens:S.number().optional(),cacheWriteTokens:S.number().optional(),totalCost:S.number().optional()}),To=S.object({text:S.string(),usage:nr,messages:S.array(S.custom()),toolCalls:S.array(z),iterations:S.number(),finishReason:yo,model:S.object({id:S.string(),provider:S.string(),info:S.custom().optional()}),startedAt:S.date(),endedAt:S.date(),durationMs:S.number()}),Ro=S.enum(["low","medium","high"]),lo=S.object({providerId:S.string(),modelId:S.string(),apiKey:S.string().optional(),baseUrl:S.string().url().optional(),headers:S.record(S.string(),S.string()).optional(),knownModels:S.record(S.string(),S.custom()).optional(),providerConfig:S.custom().optional(),initialMessages:S.array(S.custom()).optional(),systemPrompt:S.string(),tools:S.array(S.custom()),maxIterations:S.number().positive().optional(),maxParallelToolCalls:S.number().int().positive().default(8),maxTokensPerTurn:S.number().positive().optional(),apiTimeoutMs:S.number().positive().default(120000),userFileContentLoader:S.function().input([S.string()]).output(S.promise(S.string())).optional(),reminderAfterIterations:S.number().nonnegative().default(6),reminderText:S.string().optional(),reasoningEffort:Ro.optional(),thinkingBudgetTokens:S.number().positive().optional(),thinking:S.boolean().optional(),onEvent:S.function().input([S.custom()]).output(S.void()).optional(),hooks:S.custom().optional(),parentAgentId:S.string().optional(),extensions:S.array(S.custom()).optional(),hookErrorMode:S.enum(["ignore","throw"]).default("ignore"),hookPolicies:S.custom().optional(),toolPolicies:S.record(S.string(),S.object({enabled:S.boolean().optional(),autoApprove:S.boolean().optional()})).optional(),requestToolApproval:S.function().input([S.object({agentId:S.string(),conversationId:S.string(),iteration:S.number(),toolCallId:S.string(),toolName:S.string(),input:S.unknown(),policy:S.object({enabled:S.boolean().optional(),autoApprove:S.boolean().optional()}).default({})})]).output(S.union([S.object({approved:S.boolean(),reason:S.string().optional()}),S.promise(S.object({approved:S.boolean(),reason:S.string().optional()}))])).optional(),logger:S.custom().optional(),abortSignal:S.custom().optional()});export{sn as toToolDefinitions,Mn as toToolDefinition,hn as runSubprocessEvent,_n as runHook,ge as parseHookEventPayload,yn as getClineDefaultSystemPrompt,ye as formatFileContentBlock,w as createTool,De as createSubprocessHooks,Le as createSpawnAgentTool,pe as createMcpTools,cn as createDisabledMcpToolPolicy,te as createDisabledMcpToolPolicies,Re as createAskQuestionTool,Tn as createAgentTeamsTools,Fn as createAgent,ae as bootstrapAgentTeams,Ln as ToolContextSchema,z as ToolCallRecordSchema,un as HookEventPayloadSchema,jn as HookEventNameSchema,I as HookEngine,dn as AskQuestionInputSchema,nr as AgentUsageSchema,mn as AgentTeamsRuntime,To as AgentResultSchema,lo as AgentConfigSchema,t as Agent};
47
+ {{CLINE_METADATA}}`.replace("{{PLATFORM_NAME}}",f).replace("{{CWD}}",r).replace("{{CURRENT_DATE}}",new Date().toLocaleDateString()).replace("{{IDE_NAME}}",n).replace("{{CLINE_METADATA}}",e).replace("{{CLINE_RULES}}",o).trim()}function G(n){if(typeof n!=="string")throw TypeError("Path must be a string. Received "+JSON.stringify(n))}function Nr(n,r){var e="",o=0,f=-1,i=0,s;for(var E=0;E<=n.length;++E){if(E<n.length)s=n.charCodeAt(E);else if(s===47)break;else s=47;if(s===47){if(f===E-1||i===1);else if(f!==E-1&&i===2){if(e.length<2||o!==2||e.charCodeAt(e.length-1)!==46||e.charCodeAt(e.length-2)!==46){if(e.length>2){var d=e.lastIndexOf("/");if(d!==e.length-1){if(d===-1)e="",o=0;else e=e.slice(0,d),o=e.length-1-e.lastIndexOf("/");f=E,i=0;continue}}else if(e.length===2||e.length===1){e="",o=0,f=E,i=0;continue}}if(r){if(e.length>0)e+="/..";else e="..";o=2}}else{if(e.length>0)e+="/"+n.slice(f+1,E);else e=n.slice(f+1,E);o=E-f-1}f=E,i=0}else if(s===46&&i!==-1)++i;else i=-1}return e}function no(n,r){var e=r.dir||r.root,o=r.base||(r.name||"")+(r.ext||"");if(!e)return o;if(e===r.root)return e+o;return e+n+o}function z(){var n="",r=!1,e;for(var o=arguments.length-1;o>=-1&&!r;o--){var f;if(o>=0)f=arguments[o];else{if(e===void 0)e=process.cwd();f=e}if(G(f),f.length===0)continue;n=f+"/"+n,r=f.charCodeAt(0)===47}if(n=Nr(n,!r),r)if(n.length>0)return"/"+n;else return"/";else if(n.length>0)return n;else return"."}function Yr(n){if(G(n),n.length===0)return".";var r=n.charCodeAt(0)===47,e=n.charCodeAt(n.length-1)===47;if(n=Nr(n,!r),n.length===0&&!r)n=".";if(n.length>0&&e)n+="/";if(r)return"/"+n;return n}function ro(n){return G(n),n.length>0&&n.charCodeAt(0)===47}function eo(){if(arguments.length===0)return".";var n;for(var r=0;r<arguments.length;++r){var e=arguments[r];if(G(e),e.length>0)if(n===void 0)n=e;else n+="/"+e}if(n===void 0)return".";return Yr(n)}function oo(n,r){if(G(n),G(r),n===r)return"";if(n=z(n),r=z(r),n===r)return"";var e=1;for(;e<n.length;++e)if(n.charCodeAt(e)!==47)break;var o=n.length,f=o-e,i=1;for(;i<r.length;++i)if(r.charCodeAt(i)!==47)break;var s=r.length,E=s-i,d=f<E?f:E,h=-1,y=0;for(;y<=d;++y){if(y===d){if(E>d){if(r.charCodeAt(i+y)===47)return r.slice(i+y+1);else if(y===0)return r.slice(i+y)}else if(f>d){if(n.charCodeAt(e+y)===47)h=y;else if(y===0)h=0}break}var P=n.charCodeAt(e+y),R=r.charCodeAt(i+y);if(P!==R)break;else if(P===47)h=y}var O="";for(y=e+h+1;y<=o;++y)if(y===o||n.charCodeAt(y)===47)if(O.length===0)O+="..";else O+="/..";if(O.length>0)return O+r.slice(i+h);else{if(i+=h,r.charCodeAt(i)===47)++i;return r.slice(i)}}function fo(n){return n}function io(n){if(G(n),n.length===0)return".";var r=n.charCodeAt(0),e=r===47,o=-1,f=!0;for(var i=n.length-1;i>=1;--i)if(r=n.charCodeAt(i),r===47){if(!f){o=i;break}}else f=!1;if(o===-1)return e?"/":".";if(e&&o===1)return"//";return n.slice(0,o)}function Sn(n,r){if(r!==void 0&&typeof r!=="string")throw TypeError('"ext" argument must be a string');G(n);var e=0,o=-1,f=!0,i;if(r!==void 0&&r.length>0&&r.length<=n.length){if(r.length===n.length&&r===n)return"";var s=r.length-1,E=-1;for(i=n.length-1;i>=0;--i){var d=n.charCodeAt(i);if(d===47){if(!f){e=i+1;break}}else{if(E===-1)f=!1,E=i+1;if(s>=0)if(d===r.charCodeAt(s)){if(--s===-1)o=i}else s=-1,o=E}}if(e===o)o=E;else if(o===-1)o=n.length;return n.slice(e,o)}else{for(i=n.length-1;i>=0;--i)if(n.charCodeAt(i)===47){if(!f){e=i+1;break}}else if(o===-1)f=!1,o=i+1;if(o===-1)return"";return n.slice(e,o)}}function so(n){G(n);var r=-1,e=0,o=-1,f=!0,i=0;for(var s=n.length-1;s>=0;--s){var E=n.charCodeAt(s);if(E===47){if(!f){e=s+1;break}continue}if(o===-1)f=!1,o=s+1;if(E===46){if(r===-1)r=s;else if(i!==1)i=1}else if(r!==-1)i=-1}if(r===-1||o===-1||i===0||i===1&&r===o-1&&r===e+1)return"";return n.slice(r,o)}function Eo(n){if(n===null||typeof n!=="object")throw TypeError('The "pathObject" argument must be of type Object. Received type '+typeof n);return no("/",n)}function So(n){G(n);var r={root:"",dir:"",base:"",ext:"",name:""};if(n.length===0)return r;var e=n.charCodeAt(0),o=e===47,f;if(o)r.root="/",f=1;else f=0;var i=-1,s=0,E=-1,d=!0,h=n.length-1,y=0;for(;h>=f;--h){if(e=n.charCodeAt(h),e===47){if(!d){s=h+1;break}continue}if(E===-1)d=!1,E=h+1;if(e===46){if(i===-1)i=h;else if(y!==1)y=1}else if(i!==-1)y=-1}if(i===-1||E===-1||y===0||y===1&&i===E-1&&i===s+1){if(E!==-1)if(s===0&&o)r.base=r.name=n.slice(1,E);else r.base=r.name=n.slice(s,E)}else{if(s===0&&o)r.name=n.slice(1,i),r.base=n.slice(1,E);else r.name=n.slice(s,i),r.base=n.slice(s,E);r.ext=n.slice(i,E)}if(s>0)r.dir=n.slice(0,s-1);else if(o)r.dir="/";return r}var ho="/",_o=":",Gi=((n)=>(n.posix=n,n))({resolve:z,normalize:Yr,isAbsolute:ro,join:eo,relative:oo,_makeLong:fo,dirname:io,basename:Sn,extname:so,format:Eo,parse:So,sep:ho,delimiter:_o,win32:null,posix:null});import{z as Pn}from"zod";var vo=Pn.object({systemPrompt:Pn.string().describe("System prompt defining the sub-agent's behavior"),task:Pn.string().describe("Task for the sub-agent to complete"),maxIterations:Pn.number().int().min(1).optional().describe("Max iterations for the sub-agent")}),yo="# Workspace Configuration";function To(n){let r=z(n);return`# Workspace Configuration
48
+ ${JSON.stringify({workspaces:{[r]:{hint:Sn(r)}}},null,2)}`}function Ro(n,r){if(r.providerId!=="cline")return n;let e=n.trim();if(e.includes(yo))return e;let o=r.cwd?.trim()||process.cwd(),f=r.clineWorkspaceMetadata?.trim()||To(o);if(!f)return e;return`${e}
49
+
50
+ ${f}`}function Vr(n){return g({name:"spawn_agent",description:"Spawn a sub-agent with a custom system prompt for specialized tasks. Use when delegating work that benefits from focused expertise.",inputSchema:H(vo),execute:async(r,e)=>{let o=n.createSubAgentTools?await n.createSubAgentTools(r,e):n.subAgentTools??[],f=new En({providerId:n.providerId,modelId:n.modelId,apiKey:n.apiKey,baseUrl:n.baseUrl,providerConfig:n.providerConfig,knownModels:n.knownModels,thinking:n.thinking,systemPrompt:Ro(r.systemPrompt,n),tools:o,maxIterations:r.maxIterations??n.defaultMaxIterations,parentAgentId:e.agentId,abortSignal:e.abortSignal,onEvent:n.onSubAgentEvent,hooks:n.hooks,extensions:n.extensions,hookErrorMode:n.hookErrorMode,toolPolicies:n.toolPolicies,requestToolApproval:n.requestToolApproval,logger:n.logger}),i=f.getAgentId(),s=f.getConversationId(),E=e.agentId;if(n.onSubAgentStart)try{await n.onSubAgentStart({subAgentId:i,conversationId:s,parentAgentId:E,input:r})}catch{}try{let d=await f.run(r.task),h={text:d.text,iterations:d.iterations,finishReason:d.finishReason,usage:{inputTokens:d.usage.inputTokens,outputTokens:d.usage.outputTokens}};if(n.onSubAgentEnd)try{await n.onSubAgentEnd({subAgentId:i,conversationId:s,parentAgentId:E,input:r,result:h})}catch{}return h}catch(d){if(n.onSubAgentEnd)try{await n.onSubAgentEnd({subAgentId:i,conversationId:s,parentAgentId:E,input:r,error:d instanceof Error?d:Error(String(d))})}catch{}throw d}},timeoutMs:300000,retryable:!1})}class an{teamId;teamName;onTeamEvent;members=new Map;tasks=new Map;missionLog=[];mailbox=[];missionStepCounter=0;taskCounter=0;messageCounter=0;missionCounter=0;runCounter=0;outcomeCounter=0;outcomeFragmentCounter=0;runs=new Map;runQueue=[];outcomes=new Map;outcomeFragments=new Map;missionLogIntervalSteps;missionLogIntervalMs;maxConcurrentRuns;constructor(n){this.teamName=n.teamName,this.teamId=`team_${Ao(n.teamName)}_${Date.now().toString(36)}`,this.onTeamEvent=n.onTeamEvent,this.missionLogIntervalSteps=Math.max(1,n.missionLogIntervalSteps??3),this.missionLogIntervalMs=Math.max(1000,n.missionLogIntervalMs??120000),this.maxConcurrentRuns=Math.max(1,n.maxConcurrentRuns??2);let r=n.leadAgentId??"lead";this.members.set(r,{agentId:r,role:"lead",status:"idle",runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()})}getTeamId(){return this.teamId}getTeamName(){return this.teamName}getMemberRole(n){return this.members.get(n)?.role}getMemberIds(){return Array.from(this.members.keys())}getTeammateIds(){return Array.from(this.members.values()).filter((n)=>n.role==="teammate").map((n)=>n.agentId)}getTask(n){return this.tasks.get(n)}listTasks(){return Array.from(this.tasks.values())}listMissionLog(n){if(!n||n<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-n))}listMailbox(n,r){let e=r?.unreadOnly??!0,o=r?.markRead??!0,f=r?.limit,i=this.mailbox.filter((E)=>E.toAgentId===n&&(!e||!E.readAt)),s=typeof f==="number"&&f>0?i.slice(Math.max(0,i.length-f)):i;if(o){let E=new Date;for(let d of s)if(!d.readAt)d.readAt=E}return s.map((E)=>({...E}))}getSnapshot(){let n={pending:0,in_progress:0,blocked:0,completed:0};for(let e of this.tasks.values())n[e.status]++;let r={draft:0,in_review:0,finalized:0};for(let e of this.outcomes.values())r[e.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((e)=>({agentId:e.agentId,role:e.role,description:e.description,status:e.status})),taskCounts:n,unreadMessages:this.mailbox.filter((e)=>!e.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((e)=>e.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((e)=>e.status==="queued").length,outcomeCounts:r}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((n)=>({agentId:n.agentId,role:n.role,description:n.description,status:n.status})),tasks:Array.from(this.tasks.values()).map((n)=>({...n})),mailbox:this.mailbox.map((n)=>({...n})),missionLog:this.missionLog.map((n)=>({...n})),runs:Array.from(this.runs.values()).map((n)=>({...n})),outcomes:Array.from(this.outcomes.values()).map((n)=>({...n})),outcomeFragments:Array.from(this.outcomeFragments.values()).map((n)=>({...n}))}}hydrateState(n){this.tasks.clear();for(let e of n.tasks)this.tasks.set(e.id,{...e});this.mailbox.length=0,this.mailbox.push(...n.mailbox.map((e)=>({...e}))),this.missionLog.length=0,this.missionLog.push(...n.missionLog.map((e)=>({...e}))),this.runs.clear();for(let e of n.runs??[])this.runs.set(e.id,{...e});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((e)=>e.status==="queued").map((e)=>e.id)),this.outcomes.clear();for(let e of n.outcomes??[])this.outcomes.set(e.id,{...e});this.outcomeFragments.clear();for(let e of n.outcomeFragments??[])this.outcomeFragments.set(e.id,{...e});let r=Array.from(this.members.values()).filter((e)=>e.role==="lead");this.members.clear();for(let e of r)this.members.set(e.agentId,{...e,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let e of n.members){if(e.role!=="teammate")continue;this.members.set(e.agentId,{agentId:e.agentId,role:"teammate",description:e.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,p(n.tasks.map((e)=>e.id),"task_")),this.messageCounter=Math.max(this.messageCounter,p(n.mailbox.map((e)=>e.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,p(n.missionLog.map((e)=>e.id),"log_")),this.runCounter=Math.max(this.runCounter,p((n.runs??[]).map((e)=>e.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,p((n.outcomes??[]).map((e)=>e.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,p((n.outcomeFragments??[]).map((e)=>e.id),"frag_"))}isTeammateActive(n){let r=this.members.get(n);return!!r&&r.role==="teammate"&&!!r.agent}spawnTeammate({agentId:n,config:r}){let e=this.members.get(n);if(e&&e.role!=="teammate")throw Error(`Team member "${n}" already exists and is not a teammate`);if(e&&e.runningCount>0)throw Error(`Teammate "${n}" is currently running and cannot be respawned`);let o={...r,onEvent:(s)=>{r.onEvent?.(s),this.emitEvent({type:"agent_event",agentId:n,event:s}),this.trackMeaningfulEvent(n,s)}},f=cn(o),i={agentId:n,role:"teammate",description:r.role,status:"idle",agent:f,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set(n,i),this.emitEvent({type:"teammate_spawned",agentId:n,role:r.role,teammate:{rolePrompt:r.systemPrompt,modelId:r.modelId,maxIterations:r.maxIterations}}),{agentId:i.agentId,role:i.role,description:i.description,status:i.status}}shutdownTeammate(n,r){let e=this.members.get(n);if(!e||e.role!=="teammate")throw Error(`Teammate "${n}" was not found`);e.agent?.abort(),e.status="stopped",this.emitEvent({type:"teammate_shutdown",agentId:n,reason:r})}updateTeammateConnections(n){for(let r of this.members.values()){if(r.role!=="teammate"||!r.agent)continue;r.agent.updateConnection(n)}}createTask(n){let r=`task_${String(++this.taskCounter).padStart(4,"0")}`,e=new Date,o={id:r,title:n.title,description:n.description,status:n.assignee?"in_progress":"pending",createdAt:e,updatedAt:e,createdBy:n.createdBy,assignee:n.assignee,dependsOn:n.dependsOn??[]};return this.tasks.set(r,o),this.emitEvent({type:"team_task_updated",task:{...o}}),{...o}}claimTask(n,r){let e=this.requireTask(n);return this.assertDependenciesResolved(e),e.status="in_progress",e.assignee=r,e.updatedAt=new Date,this.emitEvent({type:"team_task_updated",task:{...e}}),this.appendMissionLog({agentId:r,taskId:n,kind:"progress",summary:`Claimed task "${e.title}"`}),{...e}}blockTask(n,r,e){let o=this.requireTask(n);return o.status="blocked",o.updatedAt=new Date,o.summary=e,this.emitEvent({type:"team_task_updated",task:{...o}}),this.appendMissionLog({agentId:r,taskId:n,kind:"blocked",summary:e}),{...o}}completeTask(n,r,e){let o=this.requireTask(n);if(o.status="completed",o.updatedAt=new Date,o.summary=e,!o.assignee)o.assignee=r;return this.emitEvent({type:"team_task_updated",task:{...o}}),this.appendMissionLog({agentId:r,taskId:n,kind:"done",summary:e}),{...o}}async routeToTeammate(n,r,e){let o=this.members.get(n);if(!o||o.role!=="teammate"||!o.agent)throw Error(`Teammate "${n}" was not found`);o.runningCount++,o.status="running",this.emitEvent({type:"task_start",agentId:n,message:r});try{let f=e?.continueConversation?await o.agent.continue(r):await o.agent.run(r);return this.emitEvent({type:"task_end",agentId:n,result:f}),this.recordProgressStep(n,`Completed a delegated run (${f.iterations} iterations)`,e?.taskId,!0),f}catch(f){let i=f instanceof Error?f:Error(String(f));throw this.emitEvent({type:"task_end",agentId:n,error:i,messages:o.agent.getMessages()}),this.appendMissionLog({agentId:n,taskId:e?.taskId,kind:"error",summary:i.message}),i}finally{if(o.runningCount--,o.runningCount<=0&&this.members.get(n)?.status!=="stopped")o.status="idle"}}startTeammateRun(n,r,e){let o=`run_${String(++this.runCounter).padStart(5,"0")}`,f={id:o,agentId:n,taskId:e?.taskId,status:"queued",message:r,priority:e?.priority??0,retryCount:0,maxRetries:Math.max(0,e?.maxRetries??0),continueConversation:e?.continueConversation,startedAt:new Date(0),leaseOwner:e?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(o,f),this.runQueue.push(o),this.emitEvent({type:"run_queued",run:{...f}}),this.dispatchQueuedRuns(),{...f}}dispatchQueuedRuns(){while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let n=this.selectNextQueuedRunIndex(),[r]=this.runQueue.splice(n,1),e=r?this.runs.get(r):void 0;if(!e||e.status!=="queued")continue;this.executeQueuedRun(e)}}selectNextQueuedRunIndex(){let n=0,r=Number.NEGATIVE_INFINITY;for(let e=0;e<this.runQueue.length;e++){let o=this.runs.get(this.runQueue[e]);if(!o||o.status!=="queued")continue;if(o.priority>r)r=o.priority,n=e}return n}countActiveRuns(){let n=0;for(let r of this.runs.values())if(r.status==="running")n++;return n}async executeQueuedRun(n){n.status="running",n.startedAt=new Date,n.heartbeatAt=new Date,n.currentActivity="run_started",this.emitEvent({type:"run_started",run:{...n}});let r=setInterval(()=>{if(n.status!=="running")return;this.recordRunProgress(n,"heartbeat")},2000);try{let e=await this.routeToTeammate(n.agentId,n.message,{taskId:n.taskId,continueConversation:n.continueConversation});n.status="completed",n.result=e,n.endedAt=new Date,n.currentActivity="completed",this.emitEvent({type:"run_completed",run:{...n}})}catch(e){let o=e instanceof Error?e.message:String(e??"Unknown error");if(n.error=o,n.endedAt=new Date,n.retryCount<n.maxRetries)n.retryCount++,n.status="queued",n.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**n.retryCount)),this.runQueue.push(n.id),this.recordRunProgress(n,`retry_scheduled_${n.retryCount}`);else n.status="failed",n.currentActivity="failed",this.emitEvent({type:"run_failed",run:{...n}})}finally{clearInterval(r),this.dispatchQueuedRuns()}}listRuns(n){let r=n?.includeCompleted??!0;return Array.from(this.runs.values()).filter((e)=>{if(!r&&!["running","queued"].includes(e.status))return!1;if(n?.status&&e.status!==n.status)return!1;if(n?.agentId&&e.agentId!==n.agentId)return!1;return!0}).map((e)=>({...e}))}getRun(n){let r=this.runs.get(n);return r?{...r}:void 0}async awaitRun(n,r=250){let e=this.runs.get(n);if(!e)throw Error(`Run "${n}" was not found`);while(e.status==="running")await Qr(r);return{...e}}async awaitAllRuns(n=250){while(Array.from(this.runs.values()).some((r)=>["queued","running"].includes(r.status)))await Qr(n);return this.listRuns()}cancelRun(n,r){let e=this.runs.get(n);if(!e)throw Error(`Run "${n}" was not found`);if(e.status==="completed"||e.status==="failed")return{...e};e.status="cancelled",e.error=r,e.endedAt=new Date,e.currentActivity="cancelled";let o=this.runQueue.indexOf(n);if(o>=0)this.runQueue.splice(o,1);return this.emitEvent({type:"run_cancelled",run:{...e},reason:r}),{...e}}markStaleRunsInterrupted(n="runtime_recovered"){let r=[];for(let e of this.runs.values()){if(!["queued","running"].includes(e.status))continue;e.status="interrupted",e.error=n,e.endedAt=new Date,e.currentActivity="interrupted",r.push({...e}),this.emitEvent({type:"run_interrupted",run:{...e},reason:n})}return this.runQueue.length=0,r}sendMessage(n,r,e,o,f){if(!this.members.has(n))throw Error(`Unknown sender "${n}"`);if(!this.members.has(r))throw Error(`Unknown recipient "${r}"`);let i={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:n,toAgentId:r,subject:e,body:o,taskId:f,sentAt:new Date};return this.mailbox.push(i),this.emitEvent({type:"team_message",message:{...i}}),{...i}}broadcast(n,r,e,o){let f=o?.includeLead??!1,i=[];for(let s of this.members.values()){if(s.agentId===n)continue;if(!f&&s.role==="lead")continue;i.push(this.sendMessage(n,s.agentId,r,e,o?.taskId))}return i}appendMissionLog(n){if(!this.members.has(n.agentId))throw Error(`Unknown team member "${n.agentId}"`);let r={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:n.agentId,taskId:n.taskId,kind:n.kind,summary:n.summary,evidence:n.evidence,nextAction:n.nextAction};this.missionLog.push(r);let e=this.members.get(n.agentId);if(e)e.lastMissionAt=Date.now(),e.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:"team_mission_log",entry:{...r}}),{...r}}createOutcome(n){let r={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:n.title,status:"draft",requiredSections:[...new Set(n.requiredSections)],createdBy:n.createdBy,createdAt:new Date};return this.outcomes.set(r.id,r),this.emitEvent({type:"outcome_created",outcome:{...r}}),{...r}}listOutcomes(){return Array.from(this.outcomes.values()).map((n)=>({...n}))}attachOutcomeFragment(n){let r=this.outcomes.get(n.outcomeId);if(!r)throw Error(`Outcome "${n.outcomeId}" was not found`);if(!r.requiredSections.includes(n.section))throw Error(`Section "${n.section}" is not part of outcome "${n.outcomeId}"`);let e={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:n.outcomeId,section:n.section,sourceAgentId:n.sourceAgentId,sourceRunId:n.sourceRunId,content:n.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(e.id,e),r.status==="draft")r.status="in_review";return this.emitEvent({type:"outcome_fragment_attached",fragment:{...e}}),{...e}}reviewOutcomeFragment(n){let r=this.outcomeFragments.get(n.fragmentId);if(!r)throw Error(`Fragment "${n.fragmentId}" was not found`);return r.status=n.approved?"reviewed":"rejected",r.reviewedBy=n.reviewedBy,r.reviewedAt=new Date,this.emitEvent({type:"outcome_fragment_reviewed",fragment:{...r}}),{...r}}listOutcomeFragments(n){return Array.from(this.outcomeFragments.values()).filter((r)=>r.outcomeId===n).map((r)=>({...r}))}finalizeOutcome(n){let r=this.outcomes.get(n);if(!r)throw Error(`Outcome "${n}" was not found`);let e=this.listOutcomeFragments(n);for(let o of r.requiredSections)if(!e.some((i)=>i.section===o&&i.status==="reviewed"))throw Error(`Outcome "${n}" cannot be finalized. Section "${o}" is missing a reviewed fragment.`);return r.status="finalized",r.finalizedAt=new Date,this.emitEvent({type:"outcome_finalized",outcome:{...r}}),{...r}}cleanup(){for(let n of this.members.values())if(n.role==="teammate"&&n.runningCount>0)throw Error(`Cannot cleanup team while teammate "${n.agentId}" is still running`);if(Array.from(this.runs.values()).some((n)=>["queued","running"].includes(n.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let n of this.members.values())if(n.role==="teammate")n.agent?.abort();this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.outcomes.clear(),this.outcomeFragments.clear();for(let[n,r]of this.members.entries())if(r.role==="teammate")this.members.delete(n)}requireTask(n){let r=this.tasks.get(n);if(!r)throw Error(`Task "${n}" was not found`);return r}assertDependenciesResolved(n){for(let r of n.dependsOn){let e=this.tasks.get(r);if(!e||e.status!=="completed")throw Error(`Task "${n.id}" is blocked by "${r}"`)}}trackMeaningfulEvent(n,r){if(this.recordRunActivityFromAgentEvent(n,r),r.type==="iteration_end"&&r.hadToolCalls){this.recordProgressStep(n,`Completed iteration ${r.iteration} with ${r.toolCallCount} tool call(s)`);return}if(r.type==="content_end"&&r.contentType==="tool"&&!r.error){this.recordProgressStep(n,`Finished tool "${r.toolName??"unknown"}"`);return}if(r.type==="done"){this.appendMissionLog({agentId:n,kind:"done",summary:`Run completed after ${r.iterations} iteration(s)`});return}if(r.type==="error")this.appendMissionLog({agentId:n,kind:"error",summary:r.error.message})}recordRunActivityFromAgentEvent(n,r){let e;switch(r.type){case"iteration_start":e=`iteration_${r.iteration}_started`;break;case"content_start":if(r.contentType==="tool")e=`running_tool_${r.toolName??"unknown"}`;break;case"content_end":if(r.contentType==="tool")e=r.error?`tool_${r.toolName??"unknown"}_error`:`finished_tool_${r.toolName??"unknown"}`;break;case"done":e="finalizing_response";break;case"error":e="run_error";break;default:break}if(!e)return;for(let o of this.runs.values()){if(o.agentId!==n||o.status!=="running")continue;this.recordRunProgress(o,e)}}recordRunProgress(n,r){let e=new Date;n.heartbeatAt=e,n.lastProgressAt=e,n.lastProgressMessage=r,n.currentActivity=r,this.emitEvent({type:"run_progress",run:{...n},message:r})}recordProgressStep(n,r,e,o=!1){this.missionStepCounter++;let f=this.members.get(n);if(!f)return;let i=this.missionStepCounter-f.lastMissionStep,s=Date.now()-f.lastMissionAt;if(!o&&i<this.missionLogIntervalSteps&&s<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:n,taskId:e,kind:"progress",summary:r})}emitEvent(n){try{this.onTeamEvent?.(n)}catch{}}}function Ao(n){return n.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,24)}function Qr(n){return new Promise((r)=>setTimeout(r,n))}function p(n,r){let e=0;for(let o of n){if(!o.startsWith(r))continue;let f=Number.parseInt(o.slice(r.length),10);if(Number.isFinite(f))e=Math.max(e,f)}return e}import{z as _}from"zod";var Gr=_.object({agentId:_.string().min(1).describe("Teammate identifier"),rolePrompt:_.string().min(1).describe("System prompt describing teammate role"),maxIterations:_.number().int().min(1).optional().describe("Max iterations per teammate run for spawn")}).strict(),Xr=_.object({agentId:_.string().min(1).describe("Teammate identifier"),reason:_.string().min(1).optional().describe("Optional shutdown reason")}),Zr=_.object({}),kr=_.object({title:_.string().min(1).describe("Task title"),description:_.string().min(1).describe("Task details"),dependsOn:_.array(_.string().describe("Dependency task ID")).optional().describe("Array of the dependency task IDs"),assignee:_.string().min(1).optional().describe("Optional assignee")}),Wr=_.object({taskId:_.string().describe("Task ID")}),Ur=_.object({taskId:_.string().describe("Task ID"),summary:_.string().min(1).describe("Completion summary")}),Mr=_.object({taskId:_.string().describe("Task ID"),reason:_.string().min(1).describe("Blocking reason")}),Fr=_.object({agentId:_.string().describe("Teammate agent ID"),task:_.string().min(1).describe("Task instructions for the teammate"),taskId:_.string().optional().describe("Optional shared task list ID"),runMode:_.enum(["sync","async"]).optional().describe("Execution mode: sync waits for result; async returns a runId immediately"),continueConversation:_.boolean().optional().describe("If true, continue the teammate conversation; otherwise start fresh")}),jr=_.object({status:_.enum(["queued","running","completed","failed","cancelled","interrupted"]).optional(),agentId:_.string().min(1).optional().describe("Filter by teammate ID"),includeCompleted:_.boolean().optional().describe("Include completed/failed runs (default true)")}),mr=_.object({runId:_.string().min(1).describe("Run ID"),reason:_.string().min(1).optional().describe("Optional cancellation reason")}),br=_.object({runId:_.string().min(1).describe("Async run ID to await")}),Ir=_.object({}),ur=_.object({toAgentId:_.string().min(1).describe("Recipient agent ID"),subject:_.string().min(1).describe("Message subject"),body:_.string().min(1).describe("Message body"),taskId:_.string().min(1).optional().describe("Optional task ID context")}),cr=_.object({subject:_.string().min(1).describe("Message subject"),body:_.string().min(1).describe("Message body"),taskId:_.string().min(1).optional().describe("Optional task ID context"),includeLead:_.boolean().optional().describe("Include the lead agent in broadcast recipients")}),xr=_.object({unreadOnly:_.boolean().optional().describe("Only unread messages for read action (default true)"),limit:_.number().int().min(1).max(100).optional().describe("Optional max number of messages for read action")}),zr=_.object({kind:_.enum(["progress","handoff","blocked","decision","done","error"]),summary:_.string().min(1).describe("Update summary"),taskId:_.string().min(1).optional().describe("Optional task ID context"),evidence:_.array(_.string().min(1)).optional().describe("Optional evidence links/snippets"),nextAction:_.string().min(1).optional().describe("Planned next step")}),ar=_.object({}),wo=["current_state","boundary_analysis","interface_proposal"],tr=3600000,pr=_.object({title:_.string().describe("Outcome title"),requiredSections:_.array(_.string()).default(wo).describe("Required sections for finalization gate (defaults to current_state,boundary_analysis,interface_proposal)")}),ne=_.object({outcomeId:_.string().describe("Outcome ID"),section:_.string().describe("Section name"),sourceRunId:_.string().optional().describe("Optional source run ID"),content:_.string().describe("Section fragment content")}),re=_.object({fragmentId:_.string().describe("Fragment ID"),approved:_.boolean().describe("Review decision")}),ee=_.object({outcomeId:_.string().describe("Outcome ID")}),oe=_.object({});function Co(n){let r=z(n);return`# Workspace Configuration
51
+ ${JSON.stringify({workspaces:{[r]:{hint:Sn(r)}}},null,2)}`}function Po(n,r){if(r.providerId!=="cline")return n.rolePrompt;let e=r.cwd?.trim()||process.cwd(),o=r.clineWorkspaceMetadata?.trim()||Co(e),f=n.rolePrompt.trim(),i=f?`# Team Teammate Role
52
+ ${f}`:"";return Cn(r.clineIdeName?.trim()||"Terminal Shell",e,o,i)}function fe(n){let r=[];if(n.createBaseTools)r.push(...n.createBaseTools());r.push(...gn({runtime:n.runtime,requesterId:n.spec.agentId,teammateRuntime:n.teammateRuntime,createBaseTools:n.createBaseTools,allowSpawn:!1})),n.runtime.spawnTeammate({agentId:n.spec.agentId,config:{providerId:n.teammateRuntime.providerId,modelId:n.spec.modelId??n.teammateRuntime.modelId,apiKey:n.teammateRuntime.apiKey,baseUrl:n.teammateRuntime.baseUrl,headers:n.teammateRuntime.headers,providerConfig:n.teammateRuntime.providerConfig,knownModels:n.teammateRuntime.knownModels,thinking:n.teammateRuntime.thinking,systemPrompt:Po(n.spec,n.teammateRuntime),maxIterations:n.spec.maxIterations??n.teammateRuntime.maxIterations,tools:r,hooks:n.teammateRuntime.hooks,extensions:n.teammateRuntime.extensions,logger:n.teammateRuntime.logger}})}function ie(n){let r=n.leadAgentId??"lead",e=n.restoredFromPersistence===!0,o=gn({runtime:n.runtime,requesterId:r,teammateRuntime:n.teammateRuntime,createBaseTools:n.createBaseTools,allowSpawn:!0}),f=[];for(let i of n.restoredTeammates??[]){if(n.runtime.isTeammateActive(i.agentId))continue;fe({runtime:n.runtime,requesterId:r,teammateRuntime:n.teammateRuntime,createBaseTools:n.createBaseTools,spec:i}),f.push(i.agentId)}return{tools:o,restoredFromPersistence:e,restoredTeammates:f}}function gn(n){let r=n.allowSpawn??!0,e=[];return e.push(g({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:H(Gr),execute:async(o)=>{let f=D(Gr,o);if(n.runtime.getMemberRole(n.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!r)throw Error("Spawning teammates is disabled in this context.");let i={agentId:f.agentId,rolePrompt:f.rolePrompt,maxIterations:f.maxIterations};return fe({runtime:n.runtime,requesterId:n.requesterId,teammateRuntime:n.teammateRuntime,createBaseTools:n.createBaseTools,spec:i}),{agentId:f.agentId,status:"spawned"}}})),e.push(g({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:H(Xr),execute:async(o)=>{let f=D(Xr,o);if(n.runtime.getMemberRole(n.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return n.runtime.shutdownTeammate(f.agentId,f.reason),{agentId:f.agentId,status:"stopped"}}})),e.push(g({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:H(Zr),execute:async(o)=>{return D(Zr,o),n.runtime.getSnapshot()}})),e.push(g({name:"team_create_task",description:"Create a shared team task with title and description.",inputSchema:H(kr),execute:async(o)=>{let f=D(kr,o),i=n.runtime.createTask({title:f.title,description:f.description,dependsOn:f.dependsOn,assignee:f.assignee,createdBy:n.requesterId});return{taskId:i.id,status:i.status}}})),e.push(g({name:"team_claim_task",description:"Claim a task by taskId.",inputSchema:H(Wr),execute:async(o)=>{let f=D(Wr,o),i=n.runtime.claimTask(f.taskId,n.requesterId);return{taskId:i.id,status:i.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_complete_task when done."}}})),e.push(g({name:"team_complete_task",description:"Complete a task by taskId and provide a summary.",inputSchema:H(Ur),execute:async(o)=>{let f=D(Ur,o),i=n.runtime.completeTask(f.taskId,n.requesterId,f.summary);return{taskId:i.id,status:i.status}}})),e.push(g({name:"team_block_task",description:"Block a task by taskId with a reason.",inputSchema:H(Mr),execute:async(o)=>{let f=D(Mr,o),i=n.runtime.blockTask(f.taskId,n.requesterId,f.reason);return{taskId:i.id,status:i.status}}})),e.push(g({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:H(Fr),execute:async(o)=>{let f=D(Fr,o);if(f.runMode==="async"){let s=n.runtime.startTeammateRun(f.agentId,f.task,{taskId:f.taskId,fromAgentId:n.requesterId,continueConversation:f.continueConversation});return{agentId:f.agentId,mode:"async",runId:s.id}}let i=await n.runtime.routeToTeammate(f.agentId,f.task,{taskId:f.taskId,fromAgentId:n.requesterId,continueConversation:f.continueConversation});return{agentId:f.agentId,mode:"sync",text:i.text,iterations:i.iterations}}})),e.push(g({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:H(mr),execute:async(o)=>{let f=D(mr,o),i=n.runtime.cancelRun(f.runId,f.reason);return{runId:i.id,status:i.status}}})),e.push(g({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:H(jr),execute:async(o)=>n.runtime.listRuns(D(jr,o))})),e.push(g({name:"team_await_run",description:"Wait for one async run by runId. Uses a long timeout for legitimate teammate work.",inputSchema:H(br),timeoutMs:tr,execute:async(o)=>{let f=D(br,o),i=await n.runtime.awaitRun(f.runId);if(i.status==="failed")throw Error(`Run "${i.id}" failed${i.error?`: ${i.error}`:""}`);if(i.status==="cancelled")throw Error(`Run "${i.id}" was cancelled${i.error?`: ${i.error}`:""}`);if(i.status==="interrupted")throw Error(`Run "${i.id}" was interrupted${i.error?`: ${i.error}`:""}`);return i}})),e.push(g({name:"team_await_all_runs",description:"Wait for all active async runs to complete. Uses a long timeout for legitimate teammate work.",inputSchema:H(Ir),timeoutMs:tr,execute:async(o)=>{D(Ir,o);let f=await n.runtime.awaitAllRuns(),i=f.filter((s)=>["failed","cancelled","interrupted"].includes(s.status));if(i.length>0){let s=i.map((E)=>`${E.id}:${E.status}${E.error?`(${E.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${s}`)}return f}})),e.push(g({name:"team_send_message",description:"Send a direct mailbox message to one teammate.",inputSchema:H(ur),execute:async(o)=>{let f=D(ur,o),i=n.runtime.sendMessage(n.requesterId,f.toAgentId,f.subject,f.body,f.taskId);return{id:i.id,toAgentId:i.toAgentId}}})),e.push(g({name:"team_broadcast",description:"Broadcast a mailbox message to all teammates.",inputSchema:H(cr),execute:async(o)=>{let f=D(cr,o);return{delivered:n.runtime.broadcast(n.requesterId,f.subject,f.body,{taskId:f.taskId,includeLead:f.includeLead}).length}}})),e.push(g({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:H(xr),execute:async(o)=>{let f=D(xr,o);return n.runtime.listMailbox(n.requesterId,{unreadOnly:f.unreadOnly,limit:f.limit,markRead:!0})}})),e.push(g({name:"team_log_update",description:"Append a mission log update for this agent.",inputSchema:H(zr),execute:async(o)=>{let f=D(zr,o);return{id:n.runtime.appendMissionLog({agentId:n.requesterId,taskId:f.taskId,kind:f.kind,summary:f.summary,evidence:f.evidence,nextAction:f.nextAction}).id}}})),e.push(g({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:H(ar),execute:async(o)=>{if(D(ar,o),n.runtime.getMemberRole(n.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return n.runtime.cleanup(),{status:"cleaned"}}})),e.push(g({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:H(pr),execute:async(o)=>{let f=D(pr,o),i=n.runtime.createOutcome({title:f.title,requiredSections:f.requiredSections,createdBy:n.requesterId});return{outcomeId:i.id,status:i.status}}})),e.push(g({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:H(ne),execute:async(o)=>{let f=D(ne,o),i=n.runtime.attachOutcomeFragment({outcomeId:f.outcomeId,section:f.section,sourceAgentId:n.requesterId,sourceRunId:f.sourceRunId,content:f.content});return{fragmentId:i.id,status:i.status}}})),e.push(g({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:H(re),execute:async(o)=>{let f=D(re,o),i=n.runtime.reviewOutcomeFragment({fragmentId:f.fragmentId,reviewedBy:n.requesterId,approved:f.approved});return{fragmentId:i.id,status:i.status}}})),e.push(g({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:H(ee),execute:async(o)=>{let f=D(ee,o),i=n.runtime.finalizeOutcome(f.outcomeId);return{outcomeId:i.id,status:i.status}}})),e.push(g({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:H(oe),execute:async(o)=>{return D(oe,o),n.runtime.listOutcomes()}})),e}function go(n){return`${n.serverName}__${n.toolName}`}function tn(n){return{[(n.nameTransform??go)({serverName:n.serverName,toolName:n.toolName})]:{enabled:!1}}}function se(n){let r={};for(let e of n.toolNames)Object.assign(r,tn({serverName:n.serverName,toolName:e,nameTransform:n.nameTransform}));return r}function lo(n){return`${n.serverName}__${n.toolName}`}function Ho(n,r){let e=r.description?.trim();if(e)return e;return`Execute MCP tool "${r.name}" from server "${n}".`}async function Ee(n){let r=await n.provider.listTools(n.serverName),e=n.nameTransform??lo;return r.map((o)=>{let f=e({serverName:n.serverName,toolName:o.name});return g({name:f,description:Ho(n.serverName,o),inputSchema:o.inputSchema,timeoutMs:n.timeoutMs,retryable:n.retryable,maxRetries:n.maxRetries,execute:async(i,s)=>n.provider.callTool({serverName:n.serverName,toolName:o.name,arguments:i&&typeof i==="object"&&!Array.isArray(i)?i:void 0,context:s})})})}import{z as S}from"zod";var Do=S.enum(["completed","max_iterations","aborted","error"]),Se=S.object({inputTokens:S.number(),outputTokens:S.number(),cacheReadTokens:S.number().optional(),cacheWriteTokens:S.number().optional(),totalCost:S.number().optional()}),Lo=S.object({text:S.string(),usage:Se,messages:S.array(S.custom()),toolCalls:S.array(on),iterations:S.number(),finishReason:Do,model:S.object({id:S.string(),provider:S.string(),info:S.custom().optional()}),startedAt:S.date(),endedAt:S.date(),durationMs:S.number()}),Oo=S.enum(["low","medium","high","xhigh"]),qo=S.object({providerId:S.string(),modelId:S.string(),apiKey:S.string().optional(),baseUrl:S.string().url().optional(),headers:S.record(S.string(),S.string()).optional(),knownModels:S.record(S.string(),S.custom()).optional(),providerConfig:S.custom().optional(),initialMessages:S.array(S.custom()).optional(),systemPrompt:S.string(),tools:S.array(S.custom()),maxIterations:S.number().positive().optional(),maxParallelToolCalls:S.number().int().positive().default(8),maxTokensPerTurn:S.number().positive().optional(),apiTimeoutMs:S.number().positive().default(120000),maxConsecutiveMistakes:S.number().int().positive().default(3),userFileContentLoader:S.function().input([S.string()]).output(S.promise(S.string())).optional(),reminderAfterIterations:S.number().nonnegative().default(6),reminderText:S.string().optional(),reasoningEffort:Oo.optional(),thinkingBudgetTokens:S.number().positive().optional(),thinking:S.boolean().optional(),onEvent:S.function().input([S.custom()]).output(S.void()).optional(),hooks:S.custom().optional(),parentAgentId:S.string().optional(),extensions:S.array(S.custom()).optional(),hookErrorMode:S.enum(["ignore","throw"]).default("ignore"),hookPolicies:S.custom().optional(),toolPolicies:S.record(S.string(),S.object({enabled:S.boolean().optional(),autoApprove:S.boolean().optional()})).optional(),requestToolApproval:S.function().input([S.object({agentId:S.string(),conversationId:S.string(),iteration:S.number(),toolCallId:S.string(),toolName:S.string(),input:S.unknown(),policy:S.object({enabled:S.boolean().optional(),autoApprove:S.boolean().optional()}).default({})})]).output(S.union([S.object({approved:S.boolean(),reason:S.string().optional()}),S.promise(S.object({approved:S.boolean(),reason:S.string().optional()}))])).optional(),onConsecutiveMistakeLimitReached:S.function().input([S.object({iteration:S.number().int().positive(),consecutiveMistakes:S.number().int().positive(),maxConsecutiveMistakes:S.number().int().positive(),reason:S.enum(["api_error","invalid_tool_call","tool_execution_failed"]),details:S.string().optional()})]).output(S.union([S.object({action:S.literal("continue"),guidance:S.string().optional()}),S.object({action:S.literal("stop"),reason:S.string().optional()}),S.promise(S.union([S.object({action:S.literal("continue"),guidance:S.string().optional()}),S.object({action:S.literal("stop"),reason:S.string().optional()})]))])).optional(),logger:S.custom().optional(),abortSignal:S.custom().optional()});export{_n as toToolDefinitions,jn as toToolDefinition,An as runSubprocessEvent,wn as runHook,$r as parseHookEventPayload,Cn as getClineDefaultSystemPrompt,gr as formatFileContentBlock,g as createTool,Jr as createSubprocessHooks,Vr as createSpawnAgentTool,Ee as createMcpTools,tn as createDisabledMcpToolPolicy,se as createDisabledMcpToolPolicies,Hr as createAskQuestionTool,gn as createAgentTeamsTools,cn as createAgent,ie as bootstrapAgentTeams,Jn as ToolContextSchema,on as ToolCallRecordSchema,zn as HookEventPayloadSchema,xn as HookEventNameSchema,en as HookEngine,yn as AskQuestionInputSchema,Se as AgentUsageSchema,an as AgentTeamsRuntime,Lo as AgentResultSchema,qo as AgentConfigSchema,En as Agent};