@cline/core 0.0.60-nightly.1784085310 → 0.0.61

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,7 +1,7 @@
1
- import{createRequire as E_}from"node:module";var{defineProperty:M7,getOwnPropertyNames:M_}=Object;var IY=Object.prototype.hasOwnProperty;function xY($){return this[$]}var R=($,W,Z)=>{var Q=M_(W);for(let J of Q)if(!IY.call($,J)&&J!=="default")M7($,J,{get:xY.bind(W,J),enumerable:!0});if(Z){for(let J of Q)if(!IY.call(Z,J)&&J!=="default")M7(Z,J,{get:xY.bind(W,J),enumerable:!0});return Z}};var R_=($)=>$;function N_($,W){this[$]=R_.bind(null,W)}var E=($,W)=>{for(var Z in W)M7($,Z,{get:W[Z],enumerable:!0,configurable:!0,set:N_.bind(W,Z)})};var W2=($,W)=>()=>($&&(W=$($=0)),W);var gY=E_(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as P_,captureAgentUnexpectedReasoningTokens as cY,SDK_ERROR_TELEMETRY_EVENT as S_}from"@cline/shared";function i($,W,Z){$?.capture({event:W,properties:Z})}function xW($){if(!$)return;return $.substring(0,b_)}function y_($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function h_($){return typeof $==="string"?$:$.message}function vY($,W){return $.some((Z)=>W.has(Z.trim().toLowerCase()))}function uY($){i($,v.CLIENT.EXTENSION_ACTIVATED)}function gW($,W){let Z=[...W.vcs_types],Q={root_count:W.root_count,vcs_types:Z,is_multi_root:W.root_count>1,has_git:vY(Z,new Set(["git"])),has_mercurial:vY(Z,new Set(["mercurial","hg"]))};if(W.init_duration_ms!==void 0)Q.init_duration_ms=W.init_duration_ms;if(W.feature_flag_enabled!==void 0)Q.feature_flag_enabled=W.feature_flag_enabled;if(W.is_remote_workspace!==void 0)Q.is_remote_workspace=W.is_remote_workspace;i($,v.WORKSPACE.INITIALIZED,Q)}function mW($,W,Z){i($,v.WORKSPACE.INIT_ERROR,{error_type:y_(W),error_message:xW(h_(W)),fallback_to_single_root:Z.fallback_to_single_root,workspace_count:Z.workspace_count??0})}function dY($,W){i($,v.WORKSPACE.PATH_RESOLVED,{...W})}function I1($,W){i($,v.USER.AUTH_STARTED,{provider:W})}function x1($,W){i($,v.USER.AUTH_SUCCEEDED,{provider:W})}function g1($,W,Z){i($,v.USER.AUTH_FAILED,{provider:W,errorMessage:xW(Z)})}function A$($,W,Z,Q){i($,v.USER.AUTH_LOGGED_OUT,{provider:W,reason:Z,status:Q?.status,errorCode:Q?.errorCode})}function E7($,W,Z){i($,v.USER.AUTH_REFRESH_SOFT_FAILURE,{provider:W,status:Z?.status,errorCode:Z?.errorCode,errorName:Z?.errorName,tokenExpired:Z?.tokenExpired})}function lY($,W){i($,v.USER.PROVIDER_CONFIGURED,{provider:W})}function pY($,W){$?.captureRequired(v.USER.TELEMETRY_OPT_OUT,W)}function B1($,W){let Z=W.id?.trim();if(Z)$?.setDistinctId(Z);$?.updateCommonProperties({user_id:Z||W.id,account_id:W.id,account_email:W.email,provider:W.provider,organization_id:W.organizationId,organization_name:W.organizationName,member_id:W.memberId})}function vW($,W){i($,v.TASK.CREATED,W)}function cW($,W){i($,v.TASK.RESTARTED,W)}function o6($,W){i($,v.TASK.COMPLETED,W)}function F8($,W){i($,v.TASK.CONVERSATION_TURN,{...W,timestamp:new Date().toISOString()})}function uW($,W){i($,v.TASK.TOKEN_USAGE,W)}function dW($,W,Z){i($,v.TASK.MODE_SWITCH,{ulid:W,mode:Z})}function A8($,W){i($,v.TASK.TOOL_USED,W)}function lW($,W){i($,v.TASK.SKILL_USED,W)}function pW($,W){i($,v.TASK.DIFF_EDIT_FAILED,W)}function s6($,W){i($,v.TASK.PROVIDER_API_ERROR,{...W,errorMessage:xW(W.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function rY($,W){i($,v.SDK.TOOL_TIMEOUT,k_(W))}function k_($){let W={};for(let[Z,Q]of Object.entries($))if(Q!==void 0)W[Z]=Q;return W}function rW($,W,Z){i($,v.TASK.MENTION_USED,{mentionType:W,contentLength:Z,timestamp:new Date().toISOString()})}function iW($,W,Z,Q){i($,v.TASK.MENTION_FAILED,{mentionType:W,errorType:Z,errorMessage:xW(Q),timestamp:new Date().toISOString()})}function nW($,W,Z,Q,J){i($,v.TASK.MENTION_SEARCH_RESULTS,{queryLength:W.length,resultCount:Z,searchType:Q,isEmpty:J,timestamp:new Date().toISOString()})}function U$($,W){i($,v.TASK.AGENT_CREATED,{...W,timestamp:new Date().toISOString()})}function aW($,W){i($,v.TASK.AGENT_TEAM_CREATED,{...W,timestamp:new Date().toISOString()})}function t6($,W){i($,W.event==="ended"?v.TASK.SUBAGENT_COMPLETED:v.TASK.SUBAGENT_STARTED,{...W,timestamp:new Date().toISOString()})}function oW($,W,Z,Q){i($,v.HOOKS.DISCOVERY_COMPLETED,{hookName:W,globalCount:Z,workspaceCount:Q,totalCount:Z+Q,timestamp:new Date().toISOString()})}function sW($,W){i($,v.TASK.COMPACTION_EXECUTED,{...W,timestamp:new Date().toISOString()})}function tW($,W){i($,v.TASK.COMPACTION_SKIPPED,{...W,timestamp:new Date().toISOString()})}function iY($,W){i($,v.TASK.COMPACTION_BUDGET_EMERGENCY,{...W,timestamp:new Date().toISOString()})}var b_=500,v;var O0=W2(()=>{v={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:P_},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",AUTH_REFRESH_SOFT_FAILURE:"user.auth_refresh_soft_failure",PROVIDER_CONFIGURED:"user.provider_configured",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed",COMPACTION_EXECUTED:"task.compaction_executed",COMPACTION_SKIPPED:"task.compaction_skipped",COMPACTION_BUDGET_EMERGENCY:"task.compaction_budget_emergency"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:S_,TOOL_TIMEOUT:"sdk.tool_timeout"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as NT,readFileSync as ET,statSync as wT,writeFileSync as CT}from"node:fs";import{dirname as PT}from"node:path";import{resolveGlobalSettingsPath as uB}from"@cline/shared/storage";import{z as _2}from"zod";function N9(){return y4.parse({})}function bT(){E9=void 0}function yT($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function hT($){let W;try{W=ET($,"utf8")}catch{return N9()}try{let Z=y4.safeParse(JSON.parse(W));return Z.success?Z.data:N9()}catch{return N9()}}function kT(){let $=uB(),W=wT($,{throwIfNoEntry:!1}),Z=W?.mtimeMs??0,Q=W?.size??0,J=E9;if(J&&J.path===$&&J.mtimeMs===Z&&J.size===Q)return J;let j=yT(W?hT($):N9());return E9={path:$,mtimeMs:Z,size:Q,value:j},E9}function R0(){return kT().value}function q1($,W={}){let Z=uB(),Q=R0();NT(PT(Z),{recursive:!0});let J=y4.parse($);if(!Q.telemetryOptOut&&J.telemetryOptOut)pY(W.telemetry);CT(Z,`${JSON.stringify(J,null,2)}
2
- `,"utf8"),bT()}function w9(){return R0().telemetryOptOut}function dB($,W={}){q1({...R0(),telemetryOptOut:$},W)}function lB(){return R0().autoUpdateEnabled}function pB($,W={}){q1({...R0(),autoUpdateEnabled:$},W)}function rB(){return R0().compactionStrategy??"basic"}function iB($){q1({...R0(),compactionStrategy:$})}function M1($){return new Set($??R0().disabledTools??[])}function h4($){return new Set($??R0().disabledPlugins??[])}function nB($){return M1().has($)}function C9($){let W=R0(),Z=new Set(W.disabledTools??[]),Q=Z.has($);if(Q)Z.delete($);else Z.add($);return q1({...W,disabledTools:[...Z]}),!Q}function H3($,W){let Z=[...new Set($.map((j)=>j.trim()).filter(Boolean))];if(Z.length===0)return;let Q=R0(),J=M1(Q.disabledTools);for(let j of Z)if(W)J.add(j);else J.delete(j);q1({...Q,disabledTools:[...J]})}function aB($,W){return H3([$],W),W}function oB($){return h4().has($)}function sB($,W){let Z=$.trim();if(!Z)return;let Q=R0(),J=h4(Q.disabledPlugins);if(W)J.add(Z);else J.delete(Z);q1({...Q,disabledPlugins:[...J]})}function P9($,W){let Z=h4(W);if(Z.size===0)return[...$];return $.filter((Q)=>!Z.has(Q))}function p1($,W){let Z=M1(W);if(Z.size===0)return[...$];return $.filter((Q)=>!Z.has(Q.name))}function S9($,W){if(!$||$.length===0)return $;let Z=M1(W);if(Z.size===0)return $;return $.map((Q)=>{if(!Q.setup)return Q;return{...Q,setup:(J,j)=>Q.setup?.({...J,registerTool:(X)=>{if(!Z.has(X.name))J.registerTool(X)}},j)}})}var cB,ST,y4,E9;var A1=W2(()=>{O0();cB=_2.preprocess(($)=>Array.isArray($)?$.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter(Boolean):void 0,_2.array(_2.string()).optional()).transform(($)=>{if(!$)return;let W=[...new Set($)].sort((Z,Q)=>Z.localeCompare(Q));return W.length>0?W:void 0}),ST=_2.enum(["basic","agentic"]).catch("basic"),y4=_2.object({telemetryOptOut:_2.boolean().default(!1).catch(!1),autoUpdateEnabled:_2.boolean().default(!0).catch(!0),compactionStrategy:ST.optional(),disabledTools:cB.optional(),disabledPlugins:cB.optional()}).strip().transform(($)=>{let W={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.compactionStrategy)W.compactionStrategy=$.compactionStrategy;if($.disabledTools?.length)W.disabledTools=$.disabledTools;if($.disabledPlugins?.length)W.disabledPlugins=$.disabledPlugins;return W})});var DH={};E(DH,{normalizeUserMessage:()=>kz,buildInitialUserContent:()=>hz});async function hz($,W,Z,Q){let J=Iz(W),j=await gz(Z,Q);if(J.length===0&&!j)return $;let X=[{type:"text",text:$},...J];if(j)X.push(...j);return X}function kz($){if($==null)return"";if(typeof $==="string")return $;let W=$.content;if(typeof W==="string")return W;if(!Array.isArray(W))return"";let Z=[];for(let Q of W)if(Q&&typeof Q==="object"&&Q.type==="text"){let J=Q.text;if(typeof J==="string")Z.push(J)}return Z.join(`
3
- `)}function Iz($){if(!$||$.length===0)return[];let W=[];for(let Z of $){let Q=xz(Z);if(Q)W.push(Q)}return W}function xz($){let W=$.trim();if(!W)return;let Z=W.match(/^data:([^;,]+);base64,(.+)$/);if(Z){let Q=Z[1],J=Z[2];if(!Q||!J)return;return{type:"image",mediaType:Q,data:J}}return{type:"image",mediaType:"image/png",data:W}}async function gz($,W){if(!$||$.length===0)return;let Z=W??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),Q=await Promise.all($.map(async(J)=>{let j=J.replace(/\\/g,"/");try{let X=await Z(J);return{type:"file",path:j,content:X}}catch(X){let Y=X instanceof Error?X.message:String(X);return{type:"file",path:j,content:`Error fetching content: ${Y}`}}}));if(Q.length===0)return;return Q}var oK={};E(oK,{updateMcpSettingsFileSync:()=>U1,updateMcpSettingsFile:()=>H6,updateMcpServerOAuthStateAsync:()=>S5,updateMcpServerOAuthState:()=>m2,setMcpServerDisabled:()=>x2,resolveMcpServerRegistrations:()=>e0,resolveDefaultMcpSettingsPath:()=>Q0,registerMcpServersFromSettingsFile:()=>v2,normalizeMcpServerOAuthState:()=>G6,loadMcpSettingsFile:()=>I2,listMcpServerOAuthStatuses:()=>b5,hasMcpSettingsFile:()=>t1,getMcpServerOAuthState:()=>g2,McpSettingsUpdateSkippedError:()=>B6,McpSettingsMutatorPurityError:()=>x$,McpSettingsLockTimeoutError:()=>g$});import{existsSync as kK,mkdirSync as TJ,readFileSync as IK,renameSync as MJ,rmdirSync as gN,rmSync as zJ,statSync as mN,unlinkSync as xK,writeFileSync as gK}from"node:fs";import{randomUUID as vN}from"node:crypto";import{dirname as mK,join as hK}from"node:path";import{setTimeout as cN}from"node:timers/promises";import{resolveMcpSettingsPath as uN}from"@cline/shared/storage";import{z as S}from"zod";function qJ($){if(!$)return;if($==="http")return"streamableHttp";return $}function Q0(){return uN()}function eN($,W){TJ(mK($),{recursive:!0});let Z=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{gK(Z,W,{encoding:"utf8",flag:"wx"}),MJ(Z,$)}catch(Q){try{xK(Z)}catch{}throw Q}}function WE($){Atomics.wait($E,0,0,$)}function ZE($){return`${$}.lock`}function dK(){return`${process.pid}.${Date.now()}.${vN()}`}function lK($,W){TJ(mK($),{recursive:!0});let Z=`${$}.tmp.${W}`;zJ(Z,{recursive:!0,force:!0}),TJ(Z,{recursive:!0}),gK(hK(Z,`owner.${W}`),W,{encoding:"utf8",flag:"wx"});try{return MJ(Z,$),{lockDir:$,ownerFile:hK($,`owner.${W}`)}}catch(Q){if(zJ(Z,{recursive:!0,force:!0}),kK($))return;throw Q}}function pK($,W){let Z;try{Z=Date.now()-mN($).mtimeMs}catch(J){if(J.code==="ENOENT")return;throw J}if(Z<NJ)return;W.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Z}ms); reclaiming.`,{severity:"warn"});let Q=`${$}.stale.${dK()}`;try{MJ($,Q)}catch(J){if(J.code==="ENOENT")return;throw J}zJ(Q,{recursive:!0,force:!0})}function QE($){try{xK($.ownerFile)}catch(W){if(W.code!=="ENOENT")throw W}try{gN($.lockDir)}catch(W){let Z=W.code;if(Z!=="ENOENT"&&Z!=="ENOTEMPTY"&&Z!=="EEXIST")throw W}}function rK($){let W=ZE($);if(IZ.has(W))throw Error(`Reentrant MCP settings update for ${$}. Keep mutators pure: compute values up front and do not call back into the settings API.`);return{lockDir:W,token:dK()}}function JE($,W){let{lockDir:Z,token:Q}=rK($),J=W.timeoutMs??NJ,j=Date.now();while(!0){let X=lK(Z,Q);if(X)return IZ.add(Z),X;if(Date.now()-j>J)throw new g$(`Timed out waiting for MCP settings lock at ${Z} after ${J}ms.`);pK(Z,W),WE(uK)}}async function jE($,W){let{lockDir:Z,token:Q}=rK($),J=W.timeoutMs??NJ,j=Date.now();while(!0){let X=lK(Z,Q);if(X)return IZ.add(Z),X;if(Date.now()-j>J)throw new g$(`Timed out waiting for MCP settings lock at ${Z} after ${J}ms.`);pK(Z,W),await cN(uK)}}function iK($,W,Z){try{let Q=XE(W),J=YE(Q,Z);return eN(W,`${JSON.stringify(Q,null,2)}
4
- `),J}finally{IZ.delete($.lockDir),QE($)}}function U1($,W,Z={}){let Q=JE($,Z);return iK(Q,$,W)}async function H6($,W,Z={}){let Q=await jE($,Z);return iK(Q,$,W)}function XE($){let W=BE($);if(!W.mcpServers||typeof W.mcpServers!=="object"||Array.isArray(W.mcpServers))W.mcpServers={};return W}function YE($,W){let Z=JSON.stringify($),Q=JSON.parse(Z),J=W(Q),j=JSON.stringify(Q),X=W($);if(JSON.stringify($)!==j)throw new x$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(X)!==JSON.stringify(J))throw new x$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return X}function VE($){let W=IK($,"utf8"),Z;try{Z=JSON.parse(W)}catch(Q){let J=Q instanceof Error?Q.message:String(Q);throw Error(`Failed to parse MCP settings JSON at "${$}": ${J}`)}if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Z}function BE($){try{return VE($)}catch(W){if(W.code==="ENOENT")return{};throw W}}function nK($,W){if(!Object.hasOwn($,W))return;let Z=$[W];if(!Z||typeof Z!=="object"||Array.isArray(Z))return;return Z}function HE($,W,Z){Object.defineProperty($,W,{value:Z,enumerable:!0,configurable:!0,writable:!0})}function I2($={}){let W=$.filePath??Q0(),Z=IK(W,"utf8"),Q;try{Q=JSON.parse(Z)}catch(j){let X=j instanceof Error?j.message:String(j);throw Error(`Failed to parse MCP settings JSON at "${W}": ${X}`)}let J=tN.safeParse(Q);if(!J.success){let j=J.error.issues.map((X)=>{let Y=X.path.join(".");return Y?`${Y}: ${X.message}`:X.message}).join("; ");throw Error(`Invalid MCP settings at "${W}": ${j}`)}return J.data}function G6($){if(!$)return;let W={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(W).length>0?W:void 0}function GE($){if($===void 0)return;let W=RJ.safeParse($);if(!W.success)return;return G6(W.data)}function t1($={}){let W=$.filePath??Q0();return kK(W)}function e0($={}){let W=I2($);return Object.entries(W.mcpServers).map(([Z,Q])=>({name:Z,transport:Q.transport,disabled:Q.disabled,metadata:Q.metadata,oauth:Q.oauth}))}function x2($){let W=$.filePath??Q0(),Z=$.name.trim();if(!Z)throw Error("MCP server settings toggle requires a server name.");U1(W,(Q)=>{let J=Q.mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${W}": mcpServers must be an object.`);let j={...J},X=nK(j,Z);if(!X)throw Error(`Unknown MCP server: ${Z}`);let Y={...X};if($.disabled)Y.disabled=!0;else delete Y.disabled;HE(j,Z,Y),Q.mcpServers=j})}function g2($,W={}){let Z=I2(W);if(!Object.hasOwn(Z.mcpServers,$))return;return G6(Z.mcpServers[$]?.oauth)}function aK($,W){return(Z)=>{let Q=Z.mcpServers,J=nK(Q,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let j=GE(J.oauth)??{},X=G6(W(j));if(X)J.oauth=X;else delete J.oauth;return X??{}}}function m2($,W,Z={}){let Q=Z.filePath??Q0();return U1(Q,aK($,W))}async function S5($,W,Z={}){let Q=Z.filePath??Q0();return H6(Q,aK($,W))}function b5($={}){return e0($).map((Z)=>{let Q=Z.transport.type!=="stdio",J=Z.oauth?.tokens?.access_token;return{serverName:Z.name,oauthSupported:Q,oauthConfigured:Q&&typeof J==="string"&&J.trim().length>0,lastError:Z.oauth?.lastError,lastAuthenticatedAt:Z.oauth?.lastAuthenticatedAt}}).sort((Z,Q)=>Z.serverName.localeCompare(Q.serverName))}async function v2($,W={}){let Z=e0(W);for(let Q of Z)await $.registerServer(Q);return Z}var P5,vK,RJ,dN,lN,pN,rN,iN,nN,cK,aN,oN,sN,tN,B6,g$,x$,NJ=1e4,uK=25,$E,IZ;var xZ=W2(()=>{P5=S.record(S.string(),S.string()),vK=S.record(S.string(),S.unknown()),RJ=S.object({clientInformation:S.record(S.string(),S.unknown()).optional(),tokens:S.record(S.string(),S.unknown()).optional(),codeVerifier:S.string().optional(),discoveryState:S.record(S.string(),S.unknown()).optional(),redirectUrl:S.string().url().optional(),lastError:S.string().optional(),lastAuthenticatedAt:S.number().int().positive().optional()}).strip(),dN=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:P5.optional()}),lN=S.object({type:S.literal("sse"),url:S.string().url(),headers:P5.optional()}),pN=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:P5.optional()}),rN=S.discriminatedUnion("type",[dN,lN,pN]),iN=S.object({transport:rN,disabled:S.boolean().optional(),metadata:vK.optional(),oauth:RJ.optional()}),nN=S.enum(["stdio","sse","http","streamableHttp"]).optional(),cK=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:nN,disabled:S.boolean().optional(),metadata:vK.optional(),oauth:RJ.optional()});aN=cK.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:P5.optional()}).superRefine(($,W)=>{let Z=$.type??qJ($.transportType);if(Z&&Z!=="stdio")W.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth})),oN=cK.extend({url:S.string().url(),headers:P5.optional()}).superRefine(($,W)=>{let Z=$.type??qJ($.transportType)??"sse";if(Z!=="sse"&&Z!=="streamableHttp")W.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??qJ($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth}}),sN=S.union([iN,aN,oN]),tN=S.object({mcpServers:S.record(S.string(),sN)}).passthrough();B6=class B6 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};g$=class g$ extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};x$=class x$ extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};$E=new Int32Array(new SharedArrayBuffer(4)),IZ=new Set});import{existsSync as MS,mkdirSync as RS,readFileSync as NS,writeFileSync as ES}from"node:fs";import{resolve as wS}from"node:path";import{resolveSessionDataDir as CS}from"@cline/shared/storage";import{nanoid as PS}from"nanoid";import*as SS from"node-machine-id";function u0($){let W=$?.trim();if(W)return W;let Z=hS();if(Z)return Z;return kS()}function yS(){let $=SS;return $.machineIdSync??$.default?.machineIdSync}function hS(){try{let $=yS();if(!$)return;return $().trim()||void 0}catch{return}}function kS(){let $=CS(),W=wS($,bS);try{if(MS(W)){let Q=NS(W,"utf8").trim();if(Q.length>0)return Q}}catch{}let Z=`cl-${PS()}`;try{RS($,{recursive:!0}),ES(W,Z,"utf8")}catch{}return Z}var bS="machine-id";var T6=()=>{};class HW{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,W){if(!this.isEnabled())return;this.emitLog($,W,!1)}emitRequired($,W){this.emitLog($,W,!0)}recordCounter($,W,Z,Q,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let j=this.counters.get($);if(!j)j=this.meter.createCounter($,Q?{description:Q}:void 0),this.counters.set($,j);j.add(W,this.flattenProperties(this.buildAttributes(Z)))}recordHistogram($,W,Z,Q,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let j=this.histograms.get($);if(!j)j=this.meter.createHistogram($,Q?{description:Q}:void 0),this.histograms.set($,j);j.record(W,this.flattenProperties(this.buildAttributes(Z)))}recordGauge($,W,Z,Q,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let j=this.buildAttributes(Z),X=JSON.stringify(j),Y=this.gaugeValues.get($);if(W===null){if(Y){if(Y.delete(X),Y.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=Y;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let B=this.meter.createObservableGauge($,Q?{description:Q}:void 0);B.addCallback((H)=>{for(let G of this.snapshotGaugeSeries($))H.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set($,B)}V.set(X,{value:W,attributes:j})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,W,Z){if(!this.logger)return;let Q=this.flattenProperties(this.buildAttributes(W,Z));this.logger.emit({severityText:"INFO",body:$,attributes:Q})}buildAttributes($,W=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...W?{_required:!0}:{}}}snapshotGaugeSeries($){let W=this.gaugeValues.get($);if(!W)return[];return Array.from(W.values(),(Z)=>({value:Z.value,attributes:Z.attributes?{...Z.attributes}:void 0}))}flattenProperties($,W="",Z=new WeakSet,Q=0){if(!$)return{};let J={},j=100,X=10;for(let[Y,V]of Object.entries($)){if(Y==="__proto__"||Y==="constructor"||Y==="prototype")continue;let B=W?`${W}.${Y}`:Y;if(V===null||V===void 0){J[B]=String(V);continue}if(Array.isArray(V)){let H=V.length>j?V.slice(0,j):V;try{J[B]=JSON.stringify(H)}catch{J[B]="[UnserializableArray]"}if(V.length>j)J[`${B}_truncated`]=!0,J[`${B}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){J[B]=V.toISOString();continue}if(V instanceof Error){J[B]=V.message;continue}if(Z.has(V)){J[B]="[Circular]";continue}if(Q>=X){J[B]="[MaxDepthExceeded]";continue}Z.add(V),Object.assign(J,this.flattenProperties(V,B,Z,Q+1));continue}if(Fy(V)){J[B]=V;continue}try{J[B]=JSON.stringify(V)}catch{J[B]=String(V)}}return J}}function Fy($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class GW{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,W){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:W})}emitRequired($,W){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:W})}recordCounter($,W,Z,Q,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:W,attributes:Z,description:Q,required:J===!0})}recordHistogram($,W,Z,Q,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:W,attributes:Z,description:Q,required:J===!0})}recordGauge($,W,Z,Q,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:W,attributes:Z,description:Q,required:J===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class x6{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new GW({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let W=this.buildAttributes($.properties);for(let Z of this.adapters)Z.emit($.event,W)}captureRequired($,W){let Z=this.buildAttributes(W);for(let Q of this.adapters)Q.emitRequired($,Z)}recordCounter($,W,Z,Q,J=!1){let j=this.buildAttributes(Z);for(let X of this.adapters)X.recordCounter($,W,j,Q,J)}recordHistogram($,W,Z,Q,J=!1){let j=this.buildAttributes(Z);for(let X of this.adapters)X.recordHistogram($,W,j,Q,J)}recordGauge($,W,Z,Q,J=!1){let j=this.buildAttributes(Z);for(let X of this.adapters)X.recordGauge($,W,j,Q,J)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var dj=()=>{};import{metrics as Ay,trace as Uy}from"@opentelemetry/api";import{logs as fy}from"@opentelemetry/api-logs";import{OTLPLogExporter as Dy}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as _y}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as Ly}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as Oy}from"@opentelemetry/resources";import{BatchLogRecordProcessor as Ty,ConsoleLogRecordExporter as zy,LoggerProvider as qy}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as My,MeterProvider as Ry,PeriodicExportingMetricReader as EU}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as Ny,ConsoleSpanExporter as Ey,SimpleSpanProcessor as wy}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as Cy}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as Py,ATTR_SERVICE_VERSION as Sy}from"@opentelemetry/semantic-conventions";class wU{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,W){this.resolveProperties(W)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class g6{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let W=Oy({[Py]:$.serviceName??"cline",...$.serviceVersion?{[Sy]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(W),this.loggerProvider=this.createLoggerProvider(W),this.tracerProvider=this.createTracerProvider(W),this.meterProvider)Ay.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)fy.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",W){return Uy.getTracer($,W??this.options.serviceVersion)}createAdapter($){return new HW({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let W=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new x6({...$,adapters:[W],distinctId:u0($.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider($){let W=lj(this.options.metricsExporter);if(W.length===0)return null;let Z=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),Q=Math.min(30000,Math.floor(Z*0.8)),J=W.map((j)=>hy(j,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Z,timeout:Q})).filter((j)=>j!==null);if(J.length===0)return null;return new Ry({resource:$,readers:J})}createTracerProvider($){let W=lj(this.options.tracesExporter);if(W.length===0)return null;let Z=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,Q=this.options.otlpTracesHeaders??this.options.otlpHeaders,J=[];for(let j of W){let X=yy(j,{endpoint:Z,headers:Q,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(X)J.push(X)}if(J.length===0)return null;return new Cy({resource:$,spanProcessors:J})}createLoggerProvider($){let W=lj(this.options.logsExporter);if(W.length===0)return null;let Z=W.map((Q)=>{let J=by(Q,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new Ty(J,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((Q)=>Q!==null);if(Z.length===0)return null;return new qy({resource:$,processors:Z})}}function KW($){let W=new g6($),Z=W.createTelemetryService($);return Z.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion}),{provider:W,telemetry:Z}}function Y$($){if(w9())return{telemetry:new wU($)};if($.enabled!==!0)return{telemetry:new x6({...$,distinctId:u0($.distinctId)})};return KW($)}function i$($){let{telemetry:W,provider:Z}=Y$($);return{telemetry:W,provider:Z,flush:async()=>{let j=Z;if(j&&typeof j.forceFlush==="function")try{await j.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([W.dispose(),Z?.dispose()])}}}function lj($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Z)=>Z.trim()).filter((Z)=>Z==="console"||Z==="otlp")}function by($,W){if($==="console")return new zy;if(!W.endpoint)return null;let Z=pj(W.endpoint,"/v1/logs");return new Dy({url:Z,headers:W.headers})}function yy($,W){if($==="console")return new wy(new Ey);if(!W.endpoint)return null;let Z=pj(W.endpoint,"/v1/traces");return new Ny(new Ly({url:Z,headers:W.headers}))}function hy($,W){if($==="console")return new EU({exporter:new My,exportIntervalMillis:W.interval,exportTimeoutMillis:W.timeout});if(!W.endpoint)return null;let Z=pj(W.endpoint,"/v1/metrics");return new EU({exporter:new _y({url:Z,headers:W.headers}),exportIntervalMillis:W.interval,exportTimeoutMillis:W.timeout})}function pj($,W){let Z=new URL($),Q=Z.pathname.endsWith("/")?Z.pathname.slice(0,-1):Z.pathname;return Z.pathname=Q.endsWith(W)?Q:`${Q}${W}`,Z.toString()}var FW=W2(()=>{A1();T6();dj()});var cf={};E(cf,{resolveCoreDistinctId:()=>u0,createOpenTelemetryTelemetryService:()=>KW,createConfiguredTelemetryService:()=>Y$,createConfiguredTelemetryHandle:()=>i$,OpenTelemetryProvider:()=>g6,OpenTelemetryAdapter:()=>HW});var PQ=W2(()=>{T6();FW()});import{AgentRuntimeAbortError as qv}from"@cline/agents";import{initVcr as Mv,resolveClineBuildEnv as Rv}from"@cline/shared";import{normalizeProviderId as fv}from"@cline/llms";var G_={};E(G_,{LocalRuntimeHost:()=>b1});import{readdirSync as Yv}from"node:fs";import{homedir as Vv}from"node:os";import{isAbsolute as Bv,join as bY,resolve as yY}from"node:path";import{captureSdkError as e$,createSessionId as Hv,isLikelyAuthError as Gv,normalizeUserInput as Kv}from"@cline/shared";import{setHomeDirIfUnset as Fv}from"@cline/shared/storage";var zV={};E(zV,{saveProviderOAuthCredentials:()=>J2,resolveProviderApiKeyFromSettings:()=>v7,loginAndSaveProviderOAuthCredentials:()=>Y4,isOAuthProvider:()=>Q2,getProviderOAuthCredentialsFromSettings:()=>V4,getProviderAuthStorageId:()=>m7,getProviderAuthHandler:()=>G0,getPersistedProviderApiKey:()=>O8,formatProviderOAuthApiKey:()=>c7});import{decodeJwtPayload as KL,getClineEnvironmentConfig as OV}from"@cline/shared";var QV={};E(QV,{startClineDeviceAuth:()=>y7,refreshClineToken:()=>Z9,loginClineOAuth:()=>e6,getValidClineCredentials:()=>$4,completeClineDeviceAuth:()=>h7});import{getClineEnvironmentConfig as w7}from"@cline/shared";var mY={};E(mY,{setSdkLogger:()=>N7,sdkDebug:()=>Z0,hashSecret:()=>M0,getSdkLogger:()=>C_});import{createHash as w_}from"node:crypto";var R7;function N7($){R7=$}function C_(){return R7}function M0($){if(typeof $!=="string"||$.length===0)return"unset";return w_("sha256").update($).digest("hex").slice(0,8)}function Z0($){try{R7?.debug($)}catch{}}O0();var nY={};E(nY,{startLocalOAuthServer:()=>H1});function I_(){let $;return{promise:new Promise((Z)=>{$=Z}),resolve:$}}async function H1($){let W=await import("node:http"),Z=$.host??"127.0.0.1",Q=$.timeoutMs??300000,J=$.successHtml??x_,j=I_(),X=!1,Y=null,V=null,B=null,H=(F)=>{if(X)return;X=!0,j.resolve(F)},G=()=>{if(Y)clearTimeout(Y),Y=null;let F=B;if(B=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Z,port:F})).catch(()=>{})},K=async()=>{return Y=setTimeout(()=>{G(),H(null)},Q),j.promise};for(let F of $.ports){let A=W.createServer((U,_)=>{try{let D=new URL(U.url||"",`http://${Z}:${F}`);if(D.pathname!==$.callbackPath){_.statusCode=404,_.end("Not found");return}let M={url:D,code:D.searchParams.get("code")??void 0,state:D.searchParams.get("state")??void 0,provider:D.searchParams.get("provider")??void 0,error:D.searchParams.get("error")??void 0};if(M.error){_.statusCode=400,_.end(`Authentication failed: ${M.error}`),G(),H(M);return}if(!M.code){_.statusCode=400,_.end("Missing authorization code");return}if($.expectedState&&M.state!==$.expectedState){_.statusCode=400,_.end("State mismatch");return}_.statusCode=200,_.setHeader("Content-Type","text/html; charset=utf-8"),_.end(J),G(),H(M)}catch{_.statusCode=500,_.end("Internal error")}}),f=await new Promise((U)=>{let _=(D)=>{A.off("error",_),U({bound:!1,error:D})};A.once("error",_),A.listen(F,Z,()=>{A.off("error",_),V=A,U({bound:!0})})});if(f.error){if(f.error.code==="EADDRINUSE")continue;throw G(),f.error}if(f.bound){B=F;let U=`http://${Z}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Z,port:F,callbackUrl:U})).catch(()=>{});return{callbackUrl:U,waitForCallback:K,cancelWait:()=>{G(),H(null)},close:()=>{G(),H(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var x_=`<!DOCTYPE html>
1
+ import{createRequire as y_}from"node:module";var{defineProperty:N7,getOwnPropertyNames:P_}=Object;var mY=Object.prototype.hasOwnProperty;function vY($){return this[$]}var N=($,W,Z)=>{var Q=P_(W);for(let J of Q)if(!mY.call($,J)&&J!=="default")N7($,J,{get:vY.bind(W,J),enumerable:!0});if(Z){for(let J of Q)if(!mY.call(Z,J)&&J!=="default")N7(Z,J,{get:vY.bind(W,J),enumerable:!0});return Z}};var S_=($)=>$;function b_($,W){this[$]=S_.bind(null,W)}var w=($,W)=>{for(var Z in W)N7($,Z,{get:W[Z],enumerable:!0,configurable:!0,set:b_.bind(W,Z)})};var W2=($,W)=>()=>($&&(W=$($=0)),W);var cY=y_(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as I_,captureAgentUnexpectedReasoningTokens as lY,SDK_ERROR_TELEMETRY_EVENT as x_}from"@cline/shared";function a($,W,Z){$?.capture({event:W,properties:Z})}function gW($){if(!$)return;return $.substring(0,g_)}function m_($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function v_($){return typeof $==="string"?$:$.message}function dY($,W){return $.some((Z)=>W.has(Z.trim().toLowerCase()))}function pY($){a($,v.CLIENT.EXTENSION_ACTIVATED)}function mW($,W){let Z=[...W.vcs_types],Q={root_count:W.root_count,vcs_types:Z,is_multi_root:W.root_count>1,has_git:dY(Z,new Set(["git"])),has_mercurial:dY(Z,new Set(["mercurial","hg"]))};if(W.init_duration_ms!==void 0)Q.init_duration_ms=W.init_duration_ms;if(W.feature_flag_enabled!==void 0)Q.feature_flag_enabled=W.feature_flag_enabled;if(W.is_remote_workspace!==void 0)Q.is_remote_workspace=W.is_remote_workspace;a($,v.WORKSPACE.INITIALIZED,Q)}function vW($,W,Z){a($,v.WORKSPACE.INIT_ERROR,{error_type:m_(W),error_message:gW(v_(W)),fallback_to_single_root:Z.fallback_to_single_root,workspace_count:Z.workspace_count??0})}function rY($,W){a($,v.WORKSPACE.PATH_RESOLVED,{...W})}function g1($,W){a($,v.USER.AUTH_STARTED,{provider:W})}function m1($,W){a($,v.USER.AUTH_SUCCEEDED,{provider:W})}function v1($,W,Z){a($,v.USER.AUTH_FAILED,{provider:W,errorMessage:gW(Z)})}function U$($,W,Z,Q){a($,v.USER.AUTH_LOGGED_OUT,{provider:W,reason:Z,status:Q?.status,errorCode:Q?.errorCode})}function w7($,W,Z){a($,v.USER.AUTH_REFRESH_SOFT_FAILURE,{provider:W,status:Z?.status,errorCode:Z?.errorCode,errorName:Z?.errorName,tokenExpired:Z?.tokenExpired})}function iY($,W){a($,v.USER.PROVIDER_CONFIGURED,{provider:W})}function nY($,W){$?.captureRequired(v.USER.TELEMETRY_OPT_OUT,W)}function H1($,W){let Z=W.id?.trim();if(Z)$?.setDistinctId(Z);$?.updateCommonProperties({user_id:Z||W.id,account_id:W.id,account_email:W.email,provider:W.provider,organization_id:W.organizationId,organization_name:W.organizationName,member_id:W.memberId})}function cW($,W){a($,v.TASK.CREATED,W)}function uW($,W){a($,v.TASK.RESTARTED,W)}function t6($,W){a($,v.TASK.COMPLETED,W)}function A8($,W){a($,v.TASK.CONVERSATION_TURN,{...W,timestamp:new Date().toISOString()})}function dW($,W){a($,v.TASK.TOKEN_USAGE,W)}function lW($,W,Z){a($,v.TASK.MODE_SWITCH,{ulid:W,mode:Z})}function U8($,W){a($,v.TASK.TOOL_USED,W)}function pW($,W){a($,v.TASK.SKILL_USED,W)}function rW($,W){a($,v.TASK.DIFF_EDIT_FAILED,W)}function e6($,W){a($,v.TASK.PROVIDER_API_ERROR,{...W,errorMessage:gW(W.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function aY($,W){a($,v.SDK.TOOL_TIMEOUT,c_(W))}function c_($){let W={};for(let[Z,Q]of Object.entries($))if(Q!==void 0)W[Z]=Q;return W}function iW($,W,Z){a($,v.TASK.MENTION_USED,{mentionType:W,contentLength:Z,timestamp:new Date().toISOString()})}function nW($,W,Z,Q){a($,v.TASK.MENTION_FAILED,{mentionType:W,errorType:Z,errorMessage:gW(Q),timestamp:new Date().toISOString()})}function aW($,W,Z,Q,J){a($,v.TASK.MENTION_SEARCH_RESULTS,{queryLength:W.length,resultCount:Z,searchType:Q,isEmpty:J,timestamp:new Date().toISOString()})}function f$($,W){a($,v.TASK.AGENT_CREATED,{...W,timestamp:new Date().toISOString()})}function oW($,W){a($,v.TASK.AGENT_TEAM_CREATED,{...W,timestamp:new Date().toISOString()})}function $4($,W){a($,W.event==="ended"?v.TASK.SUBAGENT_COMPLETED:v.TASK.SUBAGENT_STARTED,{...W,timestamp:new Date().toISOString()})}function sW($,W,Z,Q){a($,v.HOOKS.DISCOVERY_COMPLETED,{hookName:W,globalCount:Z,workspaceCount:Q,totalCount:Z+Q,timestamp:new Date().toISOString()})}function tW($,W){a($,v.TASK.COMPACTION_EXECUTED,{...W,timestamp:new Date().toISOString()})}function eW($,W){a($,v.TASK.COMPACTION_SKIPPED,{...W,timestamp:new Date().toISOString()})}function oY($,W){a($,v.TASK.COMPACTION_BUDGET_EMERGENCY,{...W,timestamp:new Date().toISOString()})}var g_=500,v;var O0=W2(()=>{v={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:I_},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",AUTH_REFRESH_SOFT_FAILURE:"user.auth_refresh_soft_failure",PROVIDER_CONFIGURED:"user.provider_configured",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed",COMPACTION_EXECUTED:"task.compaction_executed",COMPACTION_SKIPPED:"task.compaction_skipped",COMPACTION_BUDGET_EMERGENCY:"task.compaction_budget_emergency"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:x_,TOOL_TIMEOUT:"sdk.tool_timeout"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as bT,readFileSync as yT,statSync as hT,writeFileSync as kT}from"node:fs";import{dirname as IT}from"node:path";import{resolveGlobalSettingsPath as pB}from"@cline/shared/storage";import{z as _2}from"zod";function E9(){return k4.parse({})}function gT(){w9=void 0}function mT($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function vT($){let W;try{W=yT($,"utf8")}catch{return E9()}try{let Z=k4.safeParse(JSON.parse(W));return Z.success?Z.data:E9()}catch{return E9()}}function cT(){let $=pB(),W=hT($,{throwIfNoEntry:!1}),Z=W?.mtimeMs??0,Q=W?.size??0,J=w9;if(J&&J.path===$&&J.mtimeMs===Z&&J.size===Q)return J;let j=mT(W?vT($):E9());return w9={path:$,mtimeMs:Z,size:Q,value:j},w9}function N0(){return cT().value}function M1($,W={}){let Z=pB(),Q=N0();bT(IT(Z),{recursive:!0});let J=k4.parse($);if(!Q.telemetryOptOut&&J.telemetryOptOut)nY(W.telemetry);kT(Z,`${JSON.stringify(J,null,2)}
2
+ `,"utf8"),gT()}function C9(){return N0().telemetryOptOut}function rB($,W={}){M1({...N0(),telemetryOptOut:$},W)}function iB(){return N0().autoUpdateEnabled}function nB($,W={}){M1({...N0(),autoUpdateEnabled:$},W)}function aB(){return N0().compactionStrategy??"basic"}function oB($){M1({...N0(),compactionStrategy:$})}function N1($){return new Set($??N0().disabledTools??[])}function I4($){return new Set($??N0().disabledPlugins??[])}function sB($){return N1().has($)}function P9($){let W=N0(),Z=new Set(W.disabledTools??[]),Q=Z.has($);if(Q)Z.delete($);else Z.add($);return M1({...W,disabledTools:[...Z]}),!Q}function G3($,W){let Z=[...new Set($.map((j)=>j.trim()).filter(Boolean))];if(Z.length===0)return;let Q=N0(),J=N1(Q.disabledTools);for(let j of Z)if(W)J.add(j);else J.delete(j);M1({...Q,disabledTools:[...J]})}function tB($,W){return G3([$],W),W}function eB($){return I4().has($)}function $H($,W){let Z=$.trim();if(!Z)return;let Q=N0(),J=I4(Q.disabledPlugins);if(W)J.add(Z);else J.delete(Z);M1({...Q,disabledPlugins:[...J]})}function S9($,W){let Z=I4(W);if(Z.size===0)return[...$];return $.filter((Q)=>!Z.has(Q))}function i1($,W){let Z=N1(W);if(Z.size===0)return[...$];return $.filter((Q)=>!Z.has(Q.name))}function b9($,W){if(!$||$.length===0)return $;let Z=N1(W);if(Z.size===0)return $;return $.map((Q)=>{if(!Q.setup)return Q;return{...Q,setup:(J,j)=>Q.setup?.({...J,registerTool:(X)=>{if(!Z.has(X.name))J.registerTool(X)}},j)}})}var lB,xT,k4,w9;var U1=W2(()=>{O0();lB=_2.preprocess(($)=>Array.isArray($)?$.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter(Boolean):void 0,_2.array(_2.string()).optional()).transform(($)=>{if(!$)return;let W=[...new Set($)].sort((Z,Q)=>Z.localeCompare(Q));return W.length>0?W:void 0}),xT=_2.enum(["basic","agentic"]).catch("basic"),k4=_2.object({telemetryOptOut:_2.boolean().default(!1).catch(!1),autoUpdateEnabled:_2.boolean().default(!0).catch(!0),compactionStrategy:xT.optional(),disabledTools:lB.optional(),disabledPlugins:lB.optional()}).strip().transform(($)=>{let W={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.compactionStrategy)W.compactionStrategy=$.compactionStrategy;if($.disabledTools?.length)W.disabledTools=$.disabledTools;if($.disabledPlugins?.length)W.disabledPlugins=$.disabledPlugins;return W})});var OH={};w(OH,{normalizeUserMessage:()=>cz,buildInitialUserContent:()=>vz});async function vz($,W,Z,Q){let J=uz(W),j=await lz(Z,Q);if(J.length===0&&!j)return $;let X=[{type:"text",text:$},...J];if(j)X.push(...j);return X}function cz($){if($==null)return"";if(typeof $==="string")return $;let W=$.content;if(typeof W==="string")return W;if(!Array.isArray(W))return"";let Z=[];for(let Q of W)if(Q&&typeof Q==="object"&&Q.type==="text"){let J=Q.text;if(typeof J==="string")Z.push(J)}return Z.join(`
3
+ `)}function uz($){if(!$||$.length===0)return[];let W=[];for(let Z of $){let Q=dz(Z);if(Q)W.push(Q)}return W}function dz($){let W=$.trim();if(!W)return;let Z=W.match(/^data:([^;,]+);base64,(.+)$/);if(Z){let Q=Z[1],J=Z[2];if(!Q||!J)return;return{type:"image",mediaType:Q,data:J}}return{type:"image",mediaType:"image/png",data:W}}async function lz($,W){if(!$||$.length===0)return;let Z=W??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),Q=await Promise.all($.map(async(J)=>{let j=J.replace(/\\/g,"/");try{let X=await Z(J);return{type:"file",path:j,content:X}}catch(X){let Y=X instanceof Error?X.message:String(X);return{type:"file",path:j,content:`Error fetching content: ${Y}`}}}));if(Q.length===0)return;return Q}var ZF={};w(ZF,{updateMcpSettingsFileSync:()=>f1,updateMcpSettingsFile:()=>G6,updateMcpServerOAuthStateAsync:()=>y5,updateMcpServerOAuthState:()=>m2,setMcpServerDisabled:()=>x2,resolveMcpServerRegistrations:()=>t0,resolveDefaultMcpSettingsPath:()=>Q0,registerMcpServersFromSettingsFile:()=>v2,normalizeMcpServerOAuthState:()=>K6,loadMcpSettingsFile:()=>I2,listMcpServerOAuthStatuses:()=>h5,hasMcpSettingsFile:()=>$$,getMcpServerOAuthState:()=>g2,McpSettingsUpdateSkippedError:()=>H6,McpSettingsMutatorPurityError:()=>x$,McpSettingsLockTimeoutError:()=>g$});import{existsSync as cK,mkdirSync as MJ,readFileSync as uK,renameSync as EJ,rmdirSync as dR,rmSync as NJ,statSync as lR,unlinkSync as dK,writeFileSync as lK}from"node:fs";import{randomUUID as pR}from"node:crypto";import{dirname as pK,join as vK}from"node:path";import{setTimeout as rR}from"node:timers/promises";import{resolveMcpSettingsPath as iR}from"@cline/shared/storage";import{z as S}from"zod";function RJ($){if(!$)return;if($==="http")return"streamableHttp";return $}function Q0(){return iR()}function JE($,W){MJ(pK($),{recursive:!0});let Z=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{lK(Z,W,{encoding:"utf8",flag:"wx"}),EJ(Z,$)}catch(Q){try{dK(Z)}catch{}throw Q}}function XE($){Atomics.wait(jE,0,0,$)}function YE($){return`${$}.lock`}function aK(){return`${process.pid}.${Date.now()}.${pR()}`}function oK($,W){MJ(pK($),{recursive:!0});let Z=`${$}.tmp.${W}`;NJ(Z,{recursive:!0,force:!0}),MJ(Z,{recursive:!0}),lK(vK(Z,`owner.${W}`),W,{encoding:"utf8",flag:"wx"});try{return EJ(Z,$),{lockDir:$,ownerFile:vK($,`owner.${W}`)}}catch(Q){if(NJ(Z,{recursive:!0,force:!0}),cK($))return;throw Q}}function sK($,W){let Z;try{Z=Date.now()-lR($).mtimeMs}catch(J){if(J.code==="ENOENT")return;throw J}if(Z<CJ)return;W.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Z}ms); reclaiming.`,{severity:"warn"});let Q=`${$}.stale.${aK()}`;try{EJ($,Q)}catch(J){if(J.code==="ENOENT")return;throw J}NJ(Q,{recursive:!0,force:!0})}function VE($){try{dK($.ownerFile)}catch(W){if(W.code!=="ENOENT")throw W}try{dR($.lockDir)}catch(W){let Z=W.code;if(Z!=="ENOENT"&&Z!=="ENOTEMPTY"&&Z!=="EEXIST")throw W}}function tK($){let W=YE($);if(gZ.has(W))throw Error(`Reentrant MCP settings update for ${$}. Keep mutators pure: compute values up front and do not call back into the settings API.`);return{lockDir:W,token:aK()}}function BE($,W){let{lockDir:Z,token:Q}=tK($),J=W.timeoutMs??CJ,j=Date.now();while(!0){let X=oK(Z,Q);if(X)return gZ.add(Z),X;if(Date.now()-j>J)throw new g$(`Timed out waiting for MCP settings lock at ${Z} after ${J}ms.`);sK(Z,W),XE(nK)}}async function HE($,W){let{lockDir:Z,token:Q}=tK($),J=W.timeoutMs??CJ,j=Date.now();while(!0){let X=oK(Z,Q);if(X)return gZ.add(Z),X;if(Date.now()-j>J)throw new g$(`Timed out waiting for MCP settings lock at ${Z} after ${J}ms.`);sK(Z,W),await rR(nK)}}function eK($,W,Z){try{let Q=GE(W),J=KE(Q,Z);return JE(W,`${JSON.stringify(Q,null,2)}
4
+ `),J}finally{gZ.delete($.lockDir),VE($)}}function f1($,W,Z={}){let Q=BE($,Z);return eK(Q,$,W)}async function G6($,W,Z={}){let Q=await HE($,Z);return eK(Q,$,W)}function GE($){let W=AE($);if(!W.mcpServers||typeof W.mcpServers!=="object"||Array.isArray(W.mcpServers))W.mcpServers={};return W}function KE($,W){let Z=JSON.stringify($),Q=JSON.parse(Z),J=W(Q),j=JSON.stringify(Q),X=W($);if(JSON.stringify($)!==j)throw new x$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(X)!==JSON.stringify(J))throw new x$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return X}function FE($){let W=uK($,"utf8"),Z;try{Z=JSON.parse(W)}catch(Q){let J=Q instanceof Error?Q.message:String(Q);throw Error(`Failed to parse MCP settings JSON at "${$}": ${J}`)}if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Z}function AE($){try{return FE($)}catch(W){if(W.code==="ENOENT")return{};throw W}}function $F($,W){if(!Object.hasOwn($,W))return;let Z=$[W];if(!Z||typeof Z!=="object"||Array.isArray(Z))return;return Z}function UE($,W,Z){Object.defineProperty($,W,{value:Z,enumerable:!0,configurable:!0,writable:!0})}function I2($={}){let W=$.filePath??Q0(),Z=uK(W,"utf8"),Q;try{Q=JSON.parse(Z)}catch(j){let X=j instanceof Error?j.message:String(j);throw Error(`Failed to parse MCP settings JSON at "${W}": ${X}`)}let J=QE.safeParse(Q);if(!J.success){let j=J.error.issues.map((X)=>{let Y=X.path.join(".");return Y?`${Y}: ${X.message}`:X.message}).join("; ");throw Error(`Invalid MCP settings at "${W}": ${j}`)}return J.data}function K6($){if(!$)return;let W={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(W).length>0?W:void 0}function fE($){if($===void 0)return;let W=wJ.safeParse($);if(!W.success)return;return K6(W.data)}function $$($={}){let W=$.filePath??Q0();return cK(W)}function t0($={}){let W=I2($);return Object.entries(W.mcpServers).map(([Z,Q])=>({name:Z,transport:Q.transport,disabled:Q.disabled,metadata:Q.metadata,oauth:Q.oauth}))}function x2($){let W=$.filePath??Q0(),Z=$.name.trim();if(!Z)throw Error("MCP server settings toggle requires a server name.");f1(W,(Q)=>{let J=Q.mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${W}": mcpServers must be an object.`);let j={...J},X=$F(j,Z);if(!X)throw Error(`Unknown MCP server: ${Z}`);let Y={...X};if($.disabled)Y.disabled=!0;else delete Y.disabled;UE(j,Z,Y),Q.mcpServers=j})}function g2($,W={}){let Z=I2(W);if(!Object.hasOwn(Z.mcpServers,$))return;return K6(Z.mcpServers[$]?.oauth)}function WF($,W){return(Z)=>{let Q=Z.mcpServers,J=$F(Q,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let j=fE(J.oauth)??{},X=K6(W(j));if(X)J.oauth=X;else delete J.oauth;return X??{}}}function m2($,W,Z={}){let Q=Z.filePath??Q0();return f1(Q,WF($,W))}async function y5($,W,Z={}){let Q=Z.filePath??Q0();return G6(Q,WF($,W))}function h5($={}){return t0($).map((Z)=>{let Q=Z.transport.type!=="stdio",J=Z.oauth?.tokens?.access_token;return{serverName:Z.name,oauthSupported:Q,oauthConfigured:Q&&typeof J==="string"&&J.trim().length>0,lastError:Z.oauth?.lastError,lastAuthenticatedAt:Z.oauth?.lastAuthenticatedAt}}).sort((Z,Q)=>Z.serverName.localeCompare(Q.serverName))}async function v2($,W={}){let Z=t0(W);for(let Q of Z)await $.registerServer(Q);return Z}var b5,rK,wJ,nR,aR,oR,sR,tR,eR,iK,$E,WE,ZE,QE,H6,g$,x$,CJ=1e4,nK=25,jE,gZ;var mZ=W2(()=>{b5=S.record(S.string(),S.string()),rK=S.record(S.string(),S.unknown()),wJ=S.object({clientInformation:S.record(S.string(),S.unknown()).optional(),tokens:S.record(S.string(),S.unknown()).optional(),codeVerifier:S.string().optional(),discoveryState:S.record(S.string(),S.unknown()).optional(),redirectUrl:S.string().url().optional(),lastError:S.string().optional(),lastAuthenticatedAt:S.number().int().positive().optional()}).strip(),nR=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:b5.optional()}),aR=S.object({type:S.literal("sse"),url:S.string().url(),headers:b5.optional()}),oR=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:b5.optional()}),sR=S.discriminatedUnion("type",[nR,aR,oR]),tR=S.object({transport:sR,disabled:S.boolean().optional(),metadata:rK.optional(),oauth:wJ.optional()}),eR=S.enum(["stdio","sse","http","streamableHttp"]).optional(),iK=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:eR,disabled:S.boolean().optional(),metadata:rK.optional(),oauth:wJ.optional()});$E=iK.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:b5.optional()}).superRefine(($,W)=>{let Z=$.type??RJ($.transportType);if(Z&&Z!=="stdio")W.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth})),WE=iK.extend({url:S.string().url(),headers:b5.optional()}).superRefine(($,W)=>{let Z=$.type??RJ($.transportType)??"sse";if(Z!=="sse"&&Z!=="streamableHttp")W.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??RJ($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth}}),ZE=S.union([tR,$E,WE]),QE=S.object({mcpServers:S.record(S.string(),ZE)}).passthrough();H6=class H6 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};g$=class g$ extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};x$=class x$ extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};jE=new Int32Array(new SharedArrayBuffer(4)),gZ=new Set});import{existsSync as CS,mkdirSync as PS,readFileSync as SS,writeFileSync as bS}from"node:fs";import{resolve as yS}from"node:path";import{resolveSessionDataDir as hS}from"@cline/shared/storage";import{nanoid as kS}from"nanoid";import*as IS from"node-machine-id";function v0($){let W=$?.trim();if(W)return W;let Z=mS();if(Z)return Z;return vS()}function gS(){let $=IS;return $.machineIdSync??$.default?.machineIdSync}function mS(){try{let $=gS();if(!$)return;return $().trim()||void 0}catch{return}}function vS(){let $=hS(),W=yS($,xS);try{if(CS(W)){let Q=SS(W,"utf8").trim();if(Q.length>0)return Q}}catch{}let Z=`cl-${kS()}`;try{PS($,{recursive:!0}),bS(W,Z,"utf8")}catch{}return Z}var xS="machine-id";var z6=()=>{};class KW{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,W){if(!this.isEnabled())return;this.emitLog($,W,!1)}emitRequired($,W){this.emitLog($,W,!0)}recordCounter($,W,Z,Q,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let j=this.counters.get($);if(!j)j=this.meter.createCounter($,Q?{description:Q}:void 0),this.counters.set($,j);j.add(W,this.flattenProperties(this.buildAttributes(Z)))}recordHistogram($,W,Z,Q,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let j=this.histograms.get($);if(!j)j=this.meter.createHistogram($,Q?{description:Q}:void 0),this.histograms.set($,j);j.record(W,this.flattenProperties(this.buildAttributes(Z)))}recordGauge($,W,Z,Q,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let j=this.buildAttributes(Z),X=JSON.stringify(j),Y=this.gaugeValues.get($);if(W===null){if(Y){if(Y.delete(X),Y.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=Y;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let B=this.meter.createObservableGauge($,Q?{description:Q}:void 0);B.addCallback((H)=>{for(let G of this.snapshotGaugeSeries($))H.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set($,B)}V.set(X,{value:W,attributes:j})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,W,Z){if(!this.logger)return;let Q=this.flattenProperties(this.buildAttributes(W,Z));this.logger.emit({severityText:"INFO",body:$,attributes:Q})}buildAttributes($,W=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...W?{_required:!0}:{}}}snapshotGaugeSeries($){let W=this.gaugeValues.get($);if(!W)return[];return Array.from(W.values(),(Z)=>({value:Z.value,attributes:Z.attributes?{...Z.attributes}:void 0}))}flattenProperties($,W="",Z=new WeakSet,Q=0){if(!$)return{};let J={},j=100,X=10;for(let[Y,V]of Object.entries($)){if(Y==="__proto__"||Y==="constructor"||Y==="prototype")continue;let B=W?`${W}.${Y}`:Y;if(V===null||V===void 0){J[B]=String(V);continue}if(Array.isArray(V)){let H=V.length>j?V.slice(0,j):V;try{J[B]=JSON.stringify(H)}catch{J[B]="[UnserializableArray]"}if(V.length>j)J[`${B}_truncated`]=!0,J[`${B}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){J[B]=V.toISOString();continue}if(V instanceof Error){J[B]=V.message;continue}if(Z.has(V)){J[B]="[Circular]";continue}if(Q>=X){J[B]="[MaxDepthExceeded]";continue}Z.add(V),Object.assign(J,this.flattenProperties(V,B,Z,Q+1));continue}if(_y(V)){J[B]=V;continue}try{J[B]=JSON.stringify(V)}catch{J[B]=String(V)}}return J}}function _y($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class FW{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,W){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:W})}emitRequired($,W){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:W})}recordCounter($,W,Z,Q,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:W,attributes:Z,description:Q,required:J===!0})}recordHistogram($,W,Z,Q,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:W,attributes:Z,description:Q,required:J===!0})}recordGauge($,W,Z,Q,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:W,attributes:Z,description:Q,required:J===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class g6{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new FW({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let W=this.buildAttributes($.properties);for(let Z of this.adapters)Z.emit($.event,W)}captureRequired($,W){let Z=this.buildAttributes(W);for(let Q of this.adapters)Q.emitRequired($,Z)}recordCounter($,W,Z,Q,J=!1){let j=this.buildAttributes(Z);for(let X of this.adapters)X.recordCounter($,W,j,Q,J)}recordHistogram($,W,Z,Q,J=!1){let j=this.buildAttributes(Z);for(let X of this.adapters)X.recordHistogram($,W,j,Q,J)}recordGauge($,W,Z,Q,J=!1){let j=this.buildAttributes(Z);for(let X of this.adapters)X.recordGauge($,W,j,Q,J)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var rj=()=>{};import{metrics as Ly,trace as Oy}from"@opentelemetry/api";import{logs as Ty}from"@opentelemetry/api-logs";import{OTLPLogExporter as zy}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as qy}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as My}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as Ny}from"@opentelemetry/resources";import{BatchLogRecordProcessor as Ry,ConsoleLogRecordExporter as Ey,LoggerProvider as wy}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as Cy,MeterProvider as Py,PeriodicExportingMetricReader as yU}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as Sy,ConsoleSpanExporter as by,SimpleSpanProcessor as yy}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as hy}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as ky,ATTR_SERVICE_VERSION as Iy}from"@opentelemetry/semantic-conventions";class hU{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,W){this.resolveProperties(W)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class m6{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let W=Ny({[ky]:$.serviceName??"cline",...$.serviceVersion?{[Iy]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(W),this.loggerProvider=this.createLoggerProvider(W),this.tracerProvider=this.createTracerProvider(W),this.meterProvider)Ly.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)Ty.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",W){return Oy.getTracer($,W??this.options.serviceVersion)}createAdapter($){return new KW({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let W=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new g6({...$,adapters:[W],distinctId:v0($.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider($){let W=ij(this.options.metricsExporter);if(W.length===0)return null;let Z=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),Q=Math.min(30000,Math.floor(Z*0.8)),J=W.map((j)=>my(j,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Z,timeout:Q})).filter((j)=>j!==null);if(J.length===0)return null;return new Py({resource:$,readers:J})}createTracerProvider($){let W=ij(this.options.tracesExporter);if(W.length===0)return null;let Z=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,Q=this.options.otlpTracesHeaders??this.options.otlpHeaders,J=[];for(let j of W){let X=gy(j,{endpoint:Z,headers:Q,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(X)J.push(X)}if(J.length===0)return null;return new hy({resource:$,spanProcessors:J})}createLoggerProvider($){let W=ij(this.options.logsExporter);if(W.length===0)return null;let Z=W.map((Q)=>{let J=xy(Q,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new Ry(J,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((Q)=>Q!==null);if(Z.length===0)return null;return new wy({resource:$,processors:Z})}}function AW($){let W=new m6($),Z=W.createTelemetryService($);return Z.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion}),{provider:W,telemetry:Z}}function B$($){if(C9())return{telemetry:new hU($)};if($.enabled!==!0)return{telemetry:new g6({...$,distinctId:v0($.distinctId)})};return AW($)}function i$($){let{telemetry:W,provider:Z}=B$($);return{telemetry:W,provider:Z,flush:async()=>{let j=Z;if(j&&typeof j.forceFlush==="function")try{await j.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([W.dispose(),Z?.dispose()])}}}function ij($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Z)=>Z.trim()).filter((Z)=>Z==="console"||Z==="otlp")}function xy($,W){if($==="console")return new Ey;if(!W.endpoint)return null;let Z=nj(W.endpoint,"/v1/logs");return new zy({url:Z,headers:W.headers})}function gy($,W){if($==="console")return new yy(new by);if(!W.endpoint)return null;let Z=nj(W.endpoint,"/v1/traces");return new Sy(new My({url:Z,headers:W.headers}))}function my($,W){if($==="console")return new yU({exporter:new Cy,exportIntervalMillis:W.interval,exportTimeoutMillis:W.timeout});if(!W.endpoint)return null;let Z=nj(W.endpoint,"/v1/metrics");return new yU({exporter:new qy({url:Z,headers:W.headers}),exportIntervalMillis:W.interval,exportTimeoutMillis:W.timeout})}function nj($,W){let Z=new URL($),Q=Z.pathname.endsWith("/")?Z.pathname.slice(0,-1):Z.pathname;return Z.pathname=Q.endsWith(W)?Q:`${Q}${W}`,Z.toString()}var UW=W2(()=>{U1();z6();rj()});var nf={};w(nf,{resolveCoreDistinctId:()=>v0,createOpenTelemetryTelemetryService:()=>AW,createConfiguredTelemetryService:()=>B$,createConfiguredTelemetryHandle:()=>i$,OpenTelemetryProvider:()=>m6,OpenTelemetryAdapter:()=>KW});var bQ=W2(()=>{z6();UW()});import{AgentRuntimeAbortError as wv}from"@cline/agents";import{initVcr as Cv,resolveClineBuildEnv as Pv}from"@cline/shared";import{normalizeProviderId as Tv}from"@cline/llms";var D_={};w(D_,{LocalRuntimeHost:()=>h1});import{readdirSync as Kv}from"node:fs";import{homedir as Fv}from"node:os";import{isAbsolute as Av,join as kY,resolve as IY}from"node:path";import{captureSdkError as e$,createSessionId as Uv,isLikelyAuthError as fv,normalizeUserInput as Dv}from"@cline/shared";import{setHomeDirIfUnset as _v}from"@cline/shared/storage";var NV={};w(NV,{saveProviderOAuthCredentials:()=>J2,resolveProviderApiKeyFromSettings:()=>c7,loginAndSaveProviderOAuthCredentials:()=>B4,isOAuthProvider:()=>Q2,getProviderOAuthCredentialsFromSettings:()=>H4,getProviderAuthStorageId:()=>v7,getProviderAuthHandler:()=>H0,getPersistedProviderApiKey:()=>T8,formatProviderOAuthApiKey:()=>u7});import{decodeJwtPayload as _L,getClineEnvironmentConfig as qV}from"@cline/shared";var XV={};w(XV,{startClineDeviceAuth:()=>h7,refreshClineToken:()=>Q9,loginClineOAuth:()=>W4,getValidClineCredentials:()=>Z4,completeClineDeviceAuth:()=>k7});import{getClineEnvironmentConfig as C7}from"@cline/shared";var uY={};w(uY,{setSdkLogger:()=>E7,sdkDebug:()=>Z0,hashSecret:()=>M0,getSdkLogger:()=>k_});import{createHash as h_}from"node:crypto";var R7;function E7($){R7=$}function k_(){return R7}function M0($){if(typeof $!=="string"||$.length===0)return"unset";return h_("sha256").update($).digest("hex").slice(0,8)}function Z0($){try{R7?.debug($)}catch{}}O0();var sY={};w(sY,{startLocalOAuthServer:()=>G1});function u_(){let $;return{promise:new Promise((Z)=>{$=Z}),resolve:$}}async function G1($){let W=await import("node:http"),Z=$.host??"127.0.0.1",Q=$.timeoutMs??300000,J=$.successHtml??d_,j=u_(),X=!1,Y=null,V=null,B=null,H=(F)=>{if(X)return;X=!0,j.resolve(F)},G=()=>{if(Y)clearTimeout(Y),Y=null;let F=B;if(B=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Z,port:F})).catch(()=>{})},K=async()=>{return Y=setTimeout(()=>{G(),H(null)},Q),j.promise};for(let F of $.ports){let A=W.createServer((U,_)=>{try{let D=new URL(U.url||"",`http://${Z}:${F}`);if(D.pathname!==$.callbackPath){_.statusCode=404,_.end("Not found");return}let M={url:D,code:D.searchParams.get("code")??void 0,state:D.searchParams.get("state")??void 0,provider:D.searchParams.get("provider")??void 0,error:D.searchParams.get("error")??void 0};if(M.error){_.statusCode=400,_.end(`Authentication failed: ${M.error}`),G(),H(M);return}if(!M.code){_.statusCode=400,_.end("Missing authorization code");return}if($.expectedState&&M.state!==$.expectedState){_.statusCode=400,_.end("State mismatch");return}_.statusCode=200,_.setHeader("Content-Type","text/html; charset=utf-8"),_.end(J),G(),H(M)}catch{_.statusCode=500,_.end("Internal error")}}),f=await new Promise((U)=>{let _=(D)=>{A.off("error",_),U({bound:!1,error:D})};A.once("error",_),A.listen(F,Z,()=>{A.off("error",_),V=A,U({bound:!0})})});if(f.error){if(f.error.code==="EADDRINUSE")continue;throw G(),f.error}if(f.bound){B=F;let U=`http://${Z}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Z,port:F,callbackUrl:U})).catch(()=>{});return{callbackUrl:U,waitForCallback:K,cancelWait:()=>{G(),H(null)},close:()=>{G(),H(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var d_=`<!DOCTYPE html>
5
5
  <html lang="en">
6
6
  <head>
7
7
  <meta charset="utf-8">
@@ -42,27 +42,27 @@ import{createRequire as E_}from"node:module";var{defineProperty:M7,getOwnPropert
42
42
  </div>
43
43
  <script>setTimeout(() => window.close(), 3000);</script>
44
44
  </body>
45
- </html>`;function aY($){let W="";for(let Z=0;Z<$.length;Z+=1)W+=String.fromCharCode($[Z]??0);return btoa(W).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function g_($){let Z=new TextEncoder().encode($),Q=await crypto.subtle.digest("SHA-256",Z);return new Uint8Array(Q)}function m_($=32){let W=new Uint8Array($);return crypto.getRandomValues(W),aY(W)}async function eW(){let $=m_(),W=aY(await g_($));return{verifier:$,challenge:W}}function $9($){return $.endsWith("/")?$.slice(0,-1):$}function Z2($,W){return new URL(W,`${$9($)}/`).toString()}function U8($,W={}){let Z=$.trim();if(!Z)return{};try{let Q=new URL(Z);return{code:Q.searchParams.get("code")??void 0,state:Q.searchParams.get("state")??void 0,provider:W.includeProvider?Q.searchParams.get("provider")??void 0:void 0}}catch{}if(W.allowHashCodeState&&Z.includes("#")){let[Q,J]=Z.split("#",2);return{code:Q||void 0,state:J||void 0}}if(Z.includes("code=")){let Q=new URLSearchParams(Z);return{code:Q.get("code")??void 0,state:Q.get("state")??void 0,provider:W.includeProvider?Q.get("provider")??void 0:void 0}}return{code:Z}}function f8($){try{let W=JSON.parse($),Z=W.error,Q=typeof Z==="string"?Z:Z&&typeof Z==="object"&&typeof Z.type==="string"?Z.type:void 0,J=typeof W.error_description==="string"?W.error_description:typeof W.message==="string"?W.message:Z&&typeof Z==="object"&&typeof Z.message==="string"?Z.message:void 0;return{code:Q,message:J}}catch{return{}}}function D8($,W){return Date.now()>=$.expires-W}async function _8($){if(!$.onManualCodeInput){let j=await $.waitForCallback();return{code:j?.code,state:j?.state,provider:j?.provider,error:j?.error}}let W,Z,Q=$.onManualCodeInput().then((j)=>{W=j,$.cancelWait()}).catch((j)=>{Z=j instanceof Error?j:Error(String(j)),$.cancelWait()}),J=await $.waitForCallback();if(Z)throw Z;if(J?.code||J?.error)return{code:J.code,state:J.state,provider:J.provider,error:J.error};if(W)return U8(W,$.parseOptions);if(await Q,Z)throw Z;if(W)return U8(W,$.parseOptions);return{}}var W9={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},eY={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},C7="https://api.workos.com",v_="/auth",oY=Array.from({length:11},($,W)=>48801+W),c_=300000,u_=30000,L8=30000,d_=300,l_=5;class O1 extends Error{status;errorCode;constructor($,W){super($);this.name="ClineOAuthTokenError",this.status=W?.status,this.errorCode=W?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function p_($){let W=Date.parse($);if(Number.isNaN(W))throw Error(`Invalid expiresAt value: ${$}`);return W}function P7($,W,Z={}){let Q=$.userInfo.clineUserId??Z.accountId,J=$.refreshToken??Z.refresh;if(!J)throw Error("Token response did not include a refresh token");let j={...Z.metadata??{},provider:W,tokenType:$.tokenType,userInfo:$.userInfo};return delete j.startedAt,{access:$.accessToken,refresh:J,expires:p_($.expiresAt),accountId:Q??void 0,email:$.userInfo.email||Z.email,metadata:j}}async function S7($){if(!$)return{};return typeof $==="function"?await $():$}function sY($,W){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return W;return Math.floor($)}async function tY($){await new Promise((W)=>setTimeout(W,$))}function b7($,W){if(!$.success||!$.data?.accessToken)throw Error(W);return $.data}async function $V($,W){let Z=await fetch(Z2(C7,eY.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(W?.requestTimeoutMs??L8)}),Q=await Z.json().catch(()=>({}));if(!Z.ok)throw new O1(`Device authorization failed: ${Z.status}${Q.error_description?` - ${Q.error_description}`:""}`,{status:Z.status,errorCode:Q.error});if(!Q.device_code||!Q.user_code||!Q.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:Q.device_code,userCode:Q.user_code,verificationUri:Q.verification_uri,verificationUriComplete:Q.verification_uri_complete,expiresInSeconds:sY(Q.expires_in,d_),pollIntervalSeconds:sY(Q.interval,l_)}}async function WV($){let W=Date.now()+$.expiresInSeconds*1000,Z=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=W){let Q=await fetch(Z2($.workosApiBaseUrl,eY.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),J=await Q.json().catch(()=>({}));if(Q.ok){if(!J.access_token||!J.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:J.access_token,refreshToken:J.refresh_token,tokenType:J.token_type??"Bearer"}}switch(J.error){case"authorization_pending":{await tY(Z*1000);break}case"slow_down":{Z+=1,await tY(Z*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new O1(J.error_description||"WorkOS authorization failed",{status:Q.status,errorCode:J.error});default:throw new O1(`WorkOS token polling failed: ${Q.status}${J.error_description?` - ${J.error_description}`:""}`,{status:Q.status,errorCode:J.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function ZV($,W,Z){let Q={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(Z2(W.apiBaseUrl,W9.register),{method:"POST",headers:{"Content-Type":"application/json",...await S7(W.headers)},body:JSON.stringify(Q),signal:AbortSignal.timeout(W.requestTimeoutMs??L8)});if(!J.ok){let X=await J.text().catch(()=>""),Y=f8(X);throw new O1(`Token registration failed: ${J.status}${Y.message?` - ${Y.message}`:""}`,{status:J.status,errorCode:Y.code})}let j=await J.json();return P7(b7(j,"Invalid token exchange response"),Z??W.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function r_($,W,Z,Q){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:W,provider:Q??Z.provider},j=await fetch(Z2(Z.apiBaseUrl,W9.token),{method:"POST",headers:{"Content-Type":"application/json",...await S7(Z.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Z.requestTimeoutMs??L8)});if(!j.ok){let Y=await j.text().catch(()=>""),V=f8(Y);throw new O1(`Token exchange failed: ${j.status}${V.message?` - ${V.message}`:""}`,{status:j.status,errorCode:V.code})}let X=await j.json();return P7(b7(X,"Invalid token exchange response"),Q??Z.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function e6($){I1($.telemetry,$.provider??"cline");let W=$.useWorkOSDeviceAuth??!0,Z=$.callbackPorts?.length?$.callbackPorts:oY,Q=$.callbackPath??v_,J=W?null:await H1({ports:Z,callbackPath:Q,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=J?.callbackUrl||`http://127.0.0.1:${Z[0]??oY[0]}${Q}`;try{let X;if(W){let Y=w7().workOsClientId,V=await $V(Y,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let B=await WV({clientId:Y,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??L8,workosApiBaseUrl:C7,onProgress:$.callbacks.onProgress});X=await ZV(B,$,$.provider)}else{let Y=new URL(Z2($.apiBaseUrl,W9.authorize));Y.searchParams.set("client_type","extension"),Y.searchParams.set("callback_url",j),Y.searchParams.set("redirect_uri",j),$.callbacks.onAuth({url:Y.toString(),instructions:"Continue the authentication process in your browser."});let V,B=$.provider,H=await _8({waitForCallback:J?.waitForCallback??(async()=>null),cancelWait:J?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(H.error)throw Error(`OAuth error: ${H.error}`);if(V=H.code,B=H.provider??B,!V){let G=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=U8(G,{includeProvider:!0});V=K.code,B=K.provider??B}if(!V)throw Error("Missing authorization code");X=await r_(V,j,$,B)}return x1($.telemetry,$.provider??"cline"),B1($.telemetry,{id:X.accountId,email:X.email,provider:$.provider??"cline"}),X}catch(X){throw g1($.telemetry,$.provider??"cline",X instanceof Error?X.message:String(X)),X}finally{J?.close()}}async function y7($){return await $V(w7().workOsClientId,$)}async function h7($){let W=$.provider??"cline";I1($.telemetry,W);try{let Z=await WV({clientId:w7().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??L8,workosApiBaseUrl:C7}),Q=await ZV(Z,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return x1($.telemetry,W),B1($.telemetry,{id:Q.accountId,email:Q.email,provider:W}),Q}catch(Z){throw g1($.telemetry,W,Z instanceof Error?Z.message:String(Z)),Z}}async function Z9($,W){let Z=Z2(W.apiBaseUrl,W9.refresh);Z0(`cline.refresh.request url=${Z} refreshTokenHash=${M0($.refresh)}`);let Q=await fetch(Z,{method:"POST",headers:{"Content-Type":"application/json",...await S7(W.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(W.requestTimeoutMs??L8)});if(!Q.ok){let Y=await Q.text().catch(()=>""),V=f8(Y);throw Z0(`cline.refresh.error status=${Q.status} errorCode=${V.code??"none"} message=${V.message??"none"}`),new O1(`Token refresh failed: ${Q.status}${V.message?` - ${V.message}`:""}`,{status:Q.status,errorCode:V.code})}let J=await Q.json(),j=$.metadata?.provider??W.provider,X=P7(b7(J,"Invalid token refresh response"),j,$);return Z0(`cline.refresh.success newAccessTokenHash=${M0(X.access)} newRefreshTokenHash=${M0(X.refresh)} expires=${X.expires}`),X}async function $4($,W,Z){if(!$)return Z0("cline.getCredentials outcome=no_current_credentials"),null;let Q=Z?.refreshBufferMs??c_,J=Z?.retryableTokenGraceMs??u_,j=Z?.forceRefresh===!0;if(!j&&!D8($,Q))return Z0(`cline.getCredentials outcome=still_valid forceRefresh=${j}`),$;Z0(`cline.getCredentials outcome=needs_refresh forceRefresh=${j} accessTokenHash=${M0($.access)}`);try{return await Z9($,W)}catch(X){let Y={status:X instanceof O1?X.status:void 0,errorCode:X instanceof O1?X.errorCode:void 0,errorName:X instanceof Error?X.name:void 0};if(X instanceof O1&&X.isLikelyInvalidGrant())return Z0(`cline.getCredentials outcome=invalid_grant status=${X.status} errorCode=${X.errorCode??"none"}`),A$(W.telemetry,W.provider??"cline","invalid_grant",{status:X.status,errorCode:X.errorCode}),null;if($.expires-Date.now()>J)return Z0(`cline.getCredentials outcome=transient_failure_kept_current error=${X instanceof Error?X.message:String(X)}`),E7(W.telemetry,W.provider??"cline",{...Y,tokenExpired:!1}),$;throw Z0(`cline.getCredentials outcome=transient_failure_rethrown error=${X instanceof Error?X.message:String(X)}`),E7(W.telemetry,W.provider??"cline",{...Y,tokenExpired:!0}),X}}O0();var jV={};E(jV,{refreshOpenAICodexToken:()=>J9,loginOpenAICodex:()=>W4,getValidOpenAICodexCredentials:()=>Z4,OPENAI_CODEX_OAUTH_CONFIG:()=>Y0});import{decodeJwtPayload as k7}from"@cline/shared";import{nanoid as i_}from"nanoid";var Y0={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class Q9 extends Error{status;errorCode;constructor($,W){super($);this.name="OpenAICodexOAuthTokenError",this.status=W?.status,this.errorCode=W?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function n_($,W,Z=Y0.redirectUri){let Q=await fetch(Y0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:Y0.clientId,code:$,code_verifier:W,redirect_uri:Z}),signal:AbortSignal.timeout(Y0.httpTimeoutMs)});if(!Q.ok)return{type:"failed"};let J=await Q.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}async function a_($){try{let W=await fetch(Y0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:Y0.clientId}),signal:AbortSignal.timeout(Y0.httpTimeoutMs)});if(!W.ok){let Q=await W.text().catch(()=>""),J=f8(Q);throw new Q9(`Token refresh failed: ${W.status}${J.message?` - ${J.message}`:""}`,{status:W.status,errorCode:J.code})}let Z=await W.json();if(!Z.access_token||!Z.refresh_token||typeof Z.expires_in!=="number")return{type:"failed"};return{type:"success",access:Z.access_token,refresh:Z.refresh_token,expires:Date.now()+Z.expires_in*1000,email:Z.email,idToken:Z.id_token}}catch(W){if(W instanceof Q9)throw W;return{type:"failed"}}}async function o_($="pi"){let{verifier:W,challenge:Z}=await eW(),Q=i_(32),J=new URL(Y0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",Y0.clientId),J.searchParams.set("redirect_uri",Y0.redirectUri),J.searchParams.set("scope",Y0.scopes),J.searchParams.set("code_challenge",Z),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("state",Q),J.searchParams.set("id_token_add_organizations","true"),J.searchParams.set("codex_cli_simplified_flow","true"),J.searchParams.set("originator",$),{verifier:W,state:Q,url:J.toString()}}function s_(){try{let $=new URL(Y0.redirectUri),W=$.port.length>0?Number.parseInt($.port,10):Y0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(W)?W:Y0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:Y0.callbackPort,callbackPath:"/auth/callback",redirectUri:Y0.redirectUri}}}function t_($,W){let Z=W?k7(W):k7($),Q=Z?Z:k7($),j=Q?.[Y0.jwtClaimPath]?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;let X=Q?.organizations;if(Array.isArray(X)&&X.length>0){let V=X[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let Y=Q?.chatgpt_account_id;if(typeof Y==="string"&&Y.length>0)return Y;return null}function JV($,W){let Z=t_($.access,$.idToken)??W?.accountId;if(!Z)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||W?.refresh||"",expires:$.expires,accountId:Z,email:$.email??W?.email,metadata:{...W?.metadata??{},provider:"openai-codex"}}}async function W4($){I1($.telemetry,"openai-codex");let W=s_(),{verifier:Z,state:Q,url:J}=await o_($.originator),j=await H1({host:W.host,ports:[W.port],callbackPath:W.callbackPath,expectedState:Q});$.onAuth({url:J,instructions:"Continue the authentication process in your browser."});let X;try{let Y=await _8({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(Y.state&&Y.state!==Q)throw Error("State mismatch");if(X=Y.code,!X){let H=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=U8(H,{allowHashCodeState:!0});if(G.state&&G.state!==Q)throw Error("State mismatch");X=G.code}if(!X)throw Error("Missing authorization code");let V=await n_(X,Z,W.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let B=JV(V);return x1($.telemetry,"openai-codex"),B1($.telemetry,{id:B.accountId,email:B.email,provider:"openai-codex"}),B}catch(Y){throw g1($.telemetry,"openai-codex",Y instanceof Error?Y.message:String(Y)),Y}finally{j.close()}}async function J9($,W){let Z=await a_($);if(Z.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let Q=JV(Z,W);if(!Q.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return Q}async function Z4($,W){if(!$)return null;let Z=W?.refreshBufferMs??Y0.refreshBufferMs,Q=W?.retryableTokenGraceMs??Y0.retryableTokenGraceMs;if(W?.forceRefresh!==!0&&!D8($,Z))return $;try{return await J9($.refresh,$)}catch(j){if(j instanceof Q9&&j.isLikelyInvalidGrant())return A$(W?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>Q)return $;return null}}O0();var LV={};E(LV,{refreshOcaToken:()=>V9,loginOcaOAuth:()=>j4,getValidOcaCredentials:()=>X4,OCI_HEADER_OPC_REQUEST_ID:()=>e_,DEFAULT_INTERNAL_OCA_BASE_URL:()=>j9,DEFAULT_INTERNAL_IDCS_URL:()=>VV,DEFAULT_INTERNAL_IDCS_SCOPES:()=>BV,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>YV,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>X9,DEFAULT_EXTERNAL_IDCS_URL:()=>GV,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>KV,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>HV});import{decodeJwtPayload as Q4}from"@cline/shared";import{nanoid as XV}from"nanoid";class I7{ttlMs;maxEntries;entries=new Map;constructor($,W){this.ttlMs=$;this.maxEntries=W}get($,W=Date.now()){this.pruneExpired(W);let Z=this.entries.get($);if(!Z)return;return this.entries.delete($),this.entries.set($,Z),Z.value}set($,W,Z=Date.now(),Q=this.ttlMs){this.pruneExpired(Z),this.entries.delete($);while(this.entries.size>=this.maxEntries){let J=this.entries.keys().next().value;if(J===void 0)break;this.entries.delete(J)}this.entries.set($,{value:W,expiresAt:Z+Q})}pruneExpired($){for(let[W,Z]of this.entries)if(Z.expiresAt<=$)this.entries.delete(W)}}var YV="a8331954c0cf48ba99b5dd223a14c6ea",VV="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",BV="openid offline_access",j9="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",HV="c1aba3deed5740659981a752714eba33",GV="https://login-ext.identity.oraclecloud.com",KV="openid offline_access",X9="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",e_="opc-request-id",$L="/auth/oca",WL=Array.from({length:11},($,W)=>48801+W),ZL=300000,QL=30000,FV=30000,JL=600000;class Y9 extends Error{status;errorCode;constructor($,W){super($);this.name="OcaOAuthTokenError",this.status=W?.status,this.errorCode=W?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var f$={internal:{clientId:YV,idcsUrl:VV,scopes:BV,baseUrl:j9},external:{clientId:HV,idcsUrl:GV,scopes:KV,baseUrl:X9}},J4=new Map,jL=86400000,XL=300000,YL=32,x7=new I7(jL,YL);function AV($){if(typeof $==="function")return $();return $??"internal"}function UV($){return{internal:{clientId:$?.internal?.clientId??f$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??f$.internal.idcsUrl,scopes:$?.internal?.scopes??f$.internal.scopes,baseUrl:$?.internal?.baseUrl??f$.internal.baseUrl},external:{clientId:$?.external?.clientId??f$.external.clientId,idcsUrl:$?.external?.idcsUrl??f$.external.idcsUrl,scopes:$?.external?.scopes??f$.external.scopes,baseUrl:$?.external?.baseUrl??f$.external.baseUrl}}}function VL($=Date.now()){let W=$-JL;for(let[Z,Q]of J4.entries())if(Q.createdAt<W)J4.delete(Z)}function BL($,W,Z){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=Q4(W)?.exp;if(typeof J==="number"&&J>0)return J*1000;let X=Q4(Z)?.exp;if(typeof X==="number"&&X>0)return X*1000;return Date.now()+3600000}function fV($,W,Z){let Q=$.access_token;if(!Q)throw Error("Token response did not include an access token");let J=$.refresh_token??Z?.refresh;if(!J)throw Error("Token response did not include a refresh token");let j=Q4($.id_token),X=Q4(Q),Y=j?.sub??X?.sub,V=j?.email??X?.email;return{access:Q,refresh:J,expires:BL($,Q,$.id_token),accountId:Y??Z?.accountId,email:V??Z?.email,metadata:{...Z?.metadata??{},provider:"oca",mode:W,subject:Y,idToken:$.id_token}}}async function DV($,W){let Z=$9($),Q=x7.get(Z);if(Q)return Q;let J=`${Z}/.well-known/openid-configuration`,j=await fetch(J,{method:"GET",signal:AbortSignal.timeout(W)});if(!j.ok){let V=`${Z}/oauth2/v1/token`;return x7.set(Z,V,Date.now(),XL),V}let Y=(await j.json()).token_endpoint||`${Z}/oauth2/v1/token`;return x7.set(Z,Y),Y}function _V($){return{code:$.error,message:$.error_description}}async function HL($){let W=J4.get($.state);if(!W)throw Error("No PKCE verifier found for this state");J4.delete($.state);let Z=$.mode==="external"?$.config.external:$.config.internal,Q=await DV(Z.idcsUrl,$.requestTimeoutMs),J=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:W.redirectUri,client_id:Z.clientId,code_verifier:W.verifier}),j=await fetch(Q,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:J,signal:AbortSignal.timeout($.requestTimeoutMs)}),X=await j.json();if(!j.ok){let V=_V(X);throw new Y9(`Token exchange failed: ${j.status}${V.message?` - ${V.message}`:""}`,{status:j.status,errorCode:V.code})}let Y=Q4(X.id_token);if(!X.id_token||!Y)throw Error("No ID token received from OCA");if(Y.nonce!==W.nonce)throw Error("OIDC nonce verification failed");return fV(X,$.mode)}function GL($){let W=$.mode==="external"?$.config.external:$.config.internal,Z=new URL(`${$9(W.idcsUrl)}/oauth2/v1/authorize`);return Z.searchParams.set("client_id",W.clientId),Z.searchParams.set("response_type","code"),Z.searchParams.set("scope",W.scopes),Z.searchParams.set("code_challenge",$.challenge),Z.searchParams.set("code_challenge_method","S256"),Z.searchParams.set("redirect_uri",$.callbackUrl),Z.searchParams.set("state",$.state),Z.searchParams.set("nonce",$.nonce),Z.toString()}async function j4($){I1($.telemetry,"oca");let W=UV($.config),Z=AV($.mode),Q=$.callbackPorts?.length?$.callbackPorts:WL,J=$.callbackPath??$L,j=$.requestTimeoutMs??FV,X=await H1({ports:Q,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),Y=X.callbackUrl;if(!Y)throw Error("Unable to bind local OAuth callback server");let V=XV(16),B=XV(16),{verifier:H,challenge:G}=await eW();VL(),J4.set(V,{verifier:H,nonce:B,mode:Z,redirectUri:Y,createdAt:Date.now()});let K=GL({callbackUrl:Y,mode:Z,state:V,nonce:B,challenge:G,config:W});$.callbacks.onAuth({url:K,instructions:"Continue the authentication process in your browser."});try{let F=await _8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),A=F.code,f=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!A){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!f||f!==V)throw Error("State mismatch");let U=await HL({code:A,state:f,mode:Z,config:W,requestTimeoutMs:j});return x1($.telemetry,"oca"),B1($.telemetry,{id:U.accountId,email:U.email,provider:"oca"}),U}catch(F){throw g1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{X.close()}}async function V9($,W={}){let Z=UV(W.config),Q=W.requestTimeoutMs??FV,J=$.metadata?.mode,j=J==="internal"||J==="external"?J:AV(W.mode),X=j==="external"?Z.external:Z.internal,Y=await DV(X.idcsUrl,Q),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:X.clientId}),B=await fetch(Y,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(Q)}),H=await B.json();if(!B.ok){let G=_V(H);throw new Y9(`Token refresh failed: ${B.status}${G.message?` - ${G.message}`:""}`,{status:B.status,errorCode:G.code})}return fV(H,j,$)}async function X4($,W,Z){if(!$)return null;let Q=W?.refreshBufferMs??Z?.refreshBufferMs??ZL,J=W?.retryableTokenGraceMs??Z?.retryableTokenGraceMs??QL;if(W?.forceRefresh!==!0&&!D8($,Q))return $;try{return await V9($,Z)}catch(X){if(X instanceof Y9&&X.isLikelyInvalidGrant())return A$(Z?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}var B9="workos:";function FL($){let W=$.trim();return W.toLowerCase().startsWith(B9)?W:`${B9}${W}`}function AL($){let W=$.trim();return W.toLowerCase().startsWith(B9)?W.slice(B9.length):W}function UL($){let Z=KL($)?.exp;if(typeof Z==="number"&&Z>0)return Z*1000;return null}function fL($,W){let Z=$.auth?.expiresAt;if(typeof Z==="number"&&Number.isFinite(Z)&&Z>0)return Z;let Q=UL(W);if(Q)return Q;return Date.now()-1}function DL($,W){let Z=$.auth?.accessToken?.trim(),Q=$.auth?.refreshToken?.trim();if(!Z||!Q)return null;let J=W?.normalizeAccessToken?.(Z)??Z;if(!J)return null;return{access:J,refresh:Q,expires:fL($,J),accountId:$.auth?.accountId,metadata:$.auth?.metadata}}function _L($){let W=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Z={...$.settings?.auth??{},accessToken:W,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},Q=Object.fromEntries(Object.entries($.credentials.metadata??{}).filter(([,X])=>X!==void 0)),J={...$.settings?.auth?.metadata??{},...Q};if(Object.keys(J).length>0)Z.metadata=J;let j={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Z};if($.save!==!1)$.manager.saveProviderSettings(j,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return j}function g7($){let W=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:W,getApiKey(Z){let Q=Z?.auth?.accessToken?.trim();if(Q)return $.formatAccessToken?.(Q)??Q;return Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Z){return _L({...Z,storageProviderId:W,formatAccessToken:$.formatAccessToken})},isConfigured(Z){return!!Z?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function TV($){return g7({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:FL,normalizeStoredAccessToken:AL,login:({settings:W,callbacks:Z,telemetry:Q})=>e6({apiBaseUrl:W?.baseUrl?.trim()||OV().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Z,telemetry:Q}),refresh:({settings:W,credentials:Z,forceRefresh:Q,telemetry:J})=>$4(Z,{apiBaseUrl:W.baseUrl?.trim()||OV().apiBaseUrl,telemetry:J},{forceRefresh:Q})})}var LL=[TV({providerId:"cline"}),TV({providerId:"cline-pass",storageProviderId:"cline"}),g7({providerId:"oca",login:({settings:$,callbacks:W,telemetry:Z})=>j4({mode:$?.oca?.mode,callbacks:W,telemetry:Z}),refresh:({settings:$,credentials:W,forceRefresh:Z,telemetry:Q})=>X4(W,{forceRefresh:Z,telemetry:Q},{mode:$.oca?.mode,telemetry:Q})}),g7({providerId:"openai-codex",login:({callbacks:$,telemetry:W})=>W4({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:W}),refresh:({credentials:$,forceRefresh:W,telemetry:Z})=>Z4($,{forceRefresh:W,telemetry:Z})})],OL=new Map(LL.map(($)=>[$.providerId,$]));function G0($){return OL.get($.trim().toLowerCase())}function Q2($){return G0($)!==void 0}function m7($){return G0($)?.storageProviderId}function v7($,W){let Z=G0(W),Q=Z?.storageProviderId??W,J=$.getProviderSettings(Q);return Z?.getApiKey(J)??O8(W,J)}async function Y4($,W,Z){let Q=G0(W);if(!Q)throw Error(`Provider "${W}" does not support OAuth login`);let J=$.getProviderSettings(Q.storageProviderId),j=await Q.login({settings:J,callbacks:Z.callbacks,telemetry:Z.telemetry});return Q.saveCredentials({manager:$,settings:J,credentials:j})}function V4($,W){let Z=G0($);if(!Z)return null;return DL(W,{normalizeAccessToken:Z.normalizeStoredAccessToken})}function J2($){let W=G0($.providerId);if(!W)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return W.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function O8($,W){let Z=G0($);if(Z)return Z.getApiKey(W);return W?.auth?.accessToken?.trim()||W?.apiKey?.trim()||W?.auth?.apiKey?.trim()||void 0}function c7($,W){let Z=G0($);if(!Z)return W.access;return Z.getApiKey({provider:Z.storageProviderId,auth:{accessToken:W.access}})??W.access}O0();var YB={};E(YB,{createContextCompactionPrepareTurn:()=>D4,createCompactionStateAwarePrepareTurn:()=>_4});import{estimateRequestInputTokens as JO}from"@cline/shared";var wV={};E(wV,{projectSessionCompactionState:()=>j2,parseSessionCompactionState:()=>G1,createSessionCompactionState:()=>T8,SessionCompactionStateSchema:()=>B4});import{createHash as TL}from"node:crypto";import{formatDisplayUserInput as qV}from"@cline/shared";import{z as T1}from"zod";function zL($){if(!$||typeof $!=="object"||Array.isArray($))return!1;let W=$;if(W.role!=="user"&&W.role!=="assistant")return!1;return typeof W.content==="string"||Array.isArray(W.content)}var qL=T1.custom(zL),B4=T1.object({version:T1.literal(1),updated_at:T1.string().datetime(),conversation_id:T1.string().min(1).optional(),source_message_count:T1.number().int().nonnegative(),source_prefix_hash:T1.string().min(1).optional(),source_last_message_key:T1.string().min(1).optional(),messages:T1.array(qL),system_prompt:T1.string().optional()});function u7($){return JSON.parse(JSON.stringify($))}function MV($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:qV($.content)};return{...$,content:$.content.map((W)=>W.type==="text"?{...W,text:qV(W.text)}:W)}}function RV($){if($.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function ML($){let W=MV($);return RV(W.role),[["role",W.role],["content",W.content],["id",W.id??null],["agent",W.agent??null],["sessionId",W.sessionId??null],["metadata",W.metadata??null],["modelInfo",W.modelInfo??null],["metrics",W.metrics??null],["ts",W.ts??null]]}function NV($){if(!$)return"";let W=MV($);if(typeof W.id==="string"&&W.id.trim())return`id:${W.id.trim()}`;if(RV(W.role),typeof W.ts==="number"&&Number.isFinite(W.ts))return`ts:${W.role}:${W.ts}`;return`content:${W.role}:${JSON.stringify(W.content)}`}function EV($,W=$.length){let Z=TL("sha256");Z.update(`cline-session-compaction-source-v1
45
+ </html>`;function tY($){let W="";for(let Z=0;Z<$.length;Z+=1)W+=String.fromCharCode($[Z]??0);return btoa(W).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function l_($){let Z=new TextEncoder().encode($),Q=await crypto.subtle.digest("SHA-256",Z);return new Uint8Array(Q)}function p_($=32){let W=new Uint8Array($);return crypto.getRandomValues(W),tY(W)}async function $9(){let $=p_(),W=tY(await l_($));return{verifier:$,challenge:W}}function W9($){return $.endsWith("/")?$.slice(0,-1):$}function Z2($,W){return new URL(W,`${W9($)}/`).toString()}function f8($,W={}){let Z=$.trim();if(!Z)return{};try{let Q=new URL(Z);return{code:Q.searchParams.get("code")??void 0,state:Q.searchParams.get("state")??void 0,provider:W.includeProvider?Q.searchParams.get("provider")??void 0:void 0}}catch{}if(W.allowHashCodeState&&Z.includes("#")){let[Q,J]=Z.split("#",2);return{code:Q||void 0,state:J||void 0}}if(Z.includes("code=")){let Q=new URLSearchParams(Z);return{code:Q.get("code")??void 0,state:Q.get("state")??void 0,provider:W.includeProvider?Q.get("provider")??void 0:void 0}}return{code:Z}}function D8($){try{let W=JSON.parse($),Z=W.error,Q=typeof Z==="string"?Z:Z&&typeof Z==="object"&&typeof Z.type==="string"?Z.type:void 0,J=typeof W.error_description==="string"?W.error_description:typeof W.message==="string"?W.message:Z&&typeof Z==="object"&&typeof Z.message==="string"?Z.message:void 0;return{code:Q,message:J}}catch{return{}}}function _8($,W){return Date.now()>=$.expires-W}async function L8($){if(!$.onManualCodeInput){let j=await $.waitForCallback();return{code:j?.code,state:j?.state,provider:j?.provider,error:j?.error}}let W,Z,Q=$.onManualCodeInput().then((j)=>{W=j,$.cancelWait()}).catch((j)=>{Z=j instanceof Error?j:Error(String(j)),$.cancelWait()}),J=await $.waitForCallback();if(Z)throw Z;if(J?.code||J?.error)return{code:J.code,state:J.state,provider:J.provider,error:J.error};if(W)return f8(W,$.parseOptions);if(await Q,Z)throw Z;if(W)return f8(W,$.parseOptions);return{}}var Z9={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},ZV={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},P7="https://api.workos.com",r_="/auth",eY=Array.from({length:11},($,W)=>48801+W),i_=300000,n_=30000,O8=30000,a_=300,o_=5;class T1 extends Error{status;errorCode;constructor($,W){super($);this.name="ClineOAuthTokenError",this.status=W?.status,this.errorCode=W?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function s_($){let W=Date.parse($);if(Number.isNaN(W))throw Error(`Invalid expiresAt value: ${$}`);return W}function S7($,W,Z={}){let Q=$.userInfo.clineUserId??Z.accountId,J=$.refreshToken??Z.refresh;if(!J)throw Error("Token response did not include a refresh token");let j={...Z.metadata??{},provider:W,tokenType:$.tokenType,userInfo:$.userInfo};return delete j.startedAt,{access:$.accessToken,refresh:J,expires:s_($.expiresAt),accountId:Q??void 0,email:$.userInfo.email||Z.email,metadata:j}}async function b7($){if(!$)return{};return typeof $==="function"?await $():$}function $V($,W){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return W;return Math.floor($)}async function WV($){await new Promise((W)=>setTimeout(W,$))}function y7($,W){if(!$.success||!$.data?.accessToken)throw Error(W);return $.data}async function QV($,W){let Z=await fetch(Z2(P7,ZV.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(W?.requestTimeoutMs??O8)}),Q=await Z.json().catch(()=>({}));if(!Z.ok)throw new T1(`Device authorization failed: ${Z.status}${Q.error_description?` - ${Q.error_description}`:""}`,{status:Z.status,errorCode:Q.error});if(!Q.device_code||!Q.user_code||!Q.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:Q.device_code,userCode:Q.user_code,verificationUri:Q.verification_uri,verificationUriComplete:Q.verification_uri_complete,expiresInSeconds:$V(Q.expires_in,a_),pollIntervalSeconds:$V(Q.interval,o_)}}async function JV($){let W=Date.now()+$.expiresInSeconds*1000,Z=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=W){let Q=await fetch(Z2($.workosApiBaseUrl,ZV.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),J=await Q.json().catch(()=>({}));if(Q.ok){if(!J.access_token||!J.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:J.access_token,refreshToken:J.refresh_token,tokenType:J.token_type??"Bearer"}}switch(J.error){case"authorization_pending":{await WV(Z*1000);break}case"slow_down":{Z+=1,await WV(Z*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new T1(J.error_description||"WorkOS authorization failed",{status:Q.status,errorCode:J.error});default:throw new T1(`WorkOS token polling failed: ${Q.status}${J.error_description?` - ${J.error_description}`:""}`,{status:Q.status,errorCode:J.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function jV($,W,Z){let Q={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(Z2(W.apiBaseUrl,Z9.register),{method:"POST",headers:{"Content-Type":"application/json",...await b7(W.headers)},body:JSON.stringify(Q),signal:AbortSignal.timeout(W.requestTimeoutMs??O8)});if(!J.ok){let X=await J.text().catch(()=>""),Y=D8(X);throw new T1(`Token registration failed: ${J.status}${Y.message?` - ${Y.message}`:""}`,{status:J.status,errorCode:Y.code})}let j=await J.json();return S7(y7(j,"Invalid token exchange response"),Z??W.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function t_($,W,Z,Q){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:W,provider:Q??Z.provider},j=await fetch(Z2(Z.apiBaseUrl,Z9.token),{method:"POST",headers:{"Content-Type":"application/json",...await b7(Z.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Z.requestTimeoutMs??O8)});if(!j.ok){let Y=await j.text().catch(()=>""),V=D8(Y);throw new T1(`Token exchange failed: ${j.status}${V.message?` - ${V.message}`:""}`,{status:j.status,errorCode:V.code})}let X=await j.json();return S7(y7(X,"Invalid token exchange response"),Q??Z.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function W4($){g1($.telemetry,$.provider??"cline");let W=$.useWorkOSDeviceAuth??!0,Z=$.callbackPorts?.length?$.callbackPorts:eY,Q=$.callbackPath??r_,J=W?null:await G1({ports:Z,callbackPath:Q,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=J?.callbackUrl||`http://127.0.0.1:${Z[0]??eY[0]}${Q}`;try{let X;if(W){let Y=C7().workOsClientId,V=await QV(Y,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let B=await JV({clientId:Y,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??O8,workosApiBaseUrl:P7,onProgress:$.callbacks.onProgress});X=await jV(B,$,$.provider)}else{let Y=new URL(Z2($.apiBaseUrl,Z9.authorize));Y.searchParams.set("client_type","extension"),Y.searchParams.set("callback_url",j),Y.searchParams.set("redirect_uri",j),$.callbacks.onAuth({url:Y.toString(),instructions:"Continue the authentication process in your browser."});let V,B=$.provider,H=await L8({waitForCallback:J?.waitForCallback??(async()=>null),cancelWait:J?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(H.error)throw Error(`OAuth error: ${H.error}`);if(V=H.code,B=H.provider??B,!V){let G=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=f8(G,{includeProvider:!0});V=K.code,B=K.provider??B}if(!V)throw Error("Missing authorization code");X=await t_(V,j,$,B)}return m1($.telemetry,$.provider??"cline"),H1($.telemetry,{id:X.accountId,email:X.email,provider:$.provider??"cline"}),X}catch(X){throw v1($.telemetry,$.provider??"cline",X instanceof Error?X.message:String(X)),X}finally{J?.close()}}async function h7($){return await QV(C7().workOsClientId,$)}async function k7($){let W=$.provider??"cline";g1($.telemetry,W);try{let Z=await JV({clientId:C7().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??O8,workosApiBaseUrl:P7}),Q=await jV(Z,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return m1($.telemetry,W),H1($.telemetry,{id:Q.accountId,email:Q.email,provider:W}),Q}catch(Z){throw v1($.telemetry,W,Z instanceof Error?Z.message:String(Z)),Z}}async function Q9($,W){let Z=Z2(W.apiBaseUrl,Z9.refresh);Z0(`cline.refresh.request url=${Z} refreshTokenHash=${M0($.refresh)}`);let Q=await fetch(Z,{method:"POST",headers:{"Content-Type":"application/json",...await b7(W.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(W.requestTimeoutMs??O8)});if(!Q.ok){let Y=await Q.text().catch(()=>""),V=D8(Y);throw Z0(`cline.refresh.error status=${Q.status} errorCode=${V.code??"none"} message=${V.message??"none"}`),new T1(`Token refresh failed: ${Q.status}${V.message?` - ${V.message}`:""}`,{status:Q.status,errorCode:V.code})}let J=await Q.json(),j=$.metadata?.provider??W.provider,X=S7(y7(J,"Invalid token refresh response"),j,$);return Z0(`cline.refresh.success newAccessTokenHash=${M0(X.access)} newRefreshTokenHash=${M0(X.refresh)} expires=${X.expires}`),X}async function Z4($,W,Z){if(!$)return Z0("cline.getCredentials outcome=no_current_credentials"),null;let Q=Z?.refreshBufferMs??i_,J=Z?.retryableTokenGraceMs??n_,j=Z?.forceRefresh===!0;if(!j&&!_8($,Q))return Z0(`cline.getCredentials outcome=still_valid forceRefresh=${j}`),$;Z0(`cline.getCredentials outcome=needs_refresh forceRefresh=${j} accessTokenHash=${M0($.access)}`);try{return await Q9($,W)}catch(X){let Y={status:X instanceof T1?X.status:void 0,errorCode:X instanceof T1?X.errorCode:void 0,errorName:X instanceof Error?X.name:void 0};if(X instanceof T1&&X.isLikelyInvalidGrant())return Z0(`cline.getCredentials outcome=invalid_grant status=${X.status} errorCode=${X.errorCode??"none"}`),U$(W.telemetry,W.provider??"cline","invalid_grant",{status:X.status,errorCode:X.errorCode}),null;if($.expires-Date.now()>J)return Z0(`cline.getCredentials outcome=transient_failure_kept_current error=${X instanceof Error?X.message:String(X)}`),w7(W.telemetry,W.provider??"cline",{...Y,tokenExpired:!1}),$;throw Z0(`cline.getCredentials outcome=transient_failure_rethrown error=${X instanceof Error?X.message:String(X)}`),w7(W.telemetry,W.provider??"cline",{...Y,tokenExpired:!0}),X}}O0();var VV={};w(VV,{refreshOpenAICodexToken:()=>j9,loginOpenAICodex:()=>Q4,getValidOpenAICodexCredentials:()=>J4,OPENAI_CODEX_OAUTH_CONFIG:()=>Y0});import{decodeJwtPayload as I7}from"@cline/shared";import{nanoid as e_}from"nanoid";var Y0={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class J9 extends Error{status;errorCode;constructor($,W){super($);this.name="OpenAICodexOAuthTokenError",this.status=W?.status,this.errorCode=W?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function $L($,W,Z=Y0.redirectUri){let Q=await fetch(Y0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:Y0.clientId,code:$,code_verifier:W,redirect_uri:Z}),signal:AbortSignal.timeout(Y0.httpTimeoutMs)});if(!Q.ok)return{type:"failed"};let J=await Q.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}async function WL($){try{let W=await fetch(Y0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:Y0.clientId}),signal:AbortSignal.timeout(Y0.httpTimeoutMs)});if(!W.ok){let Q=await W.text().catch(()=>""),J=D8(Q);throw new J9(`Token refresh failed: ${W.status}${J.message?` - ${J.message}`:""}`,{status:W.status,errorCode:J.code})}let Z=await W.json();if(!Z.access_token||!Z.refresh_token||typeof Z.expires_in!=="number")return{type:"failed"};return{type:"success",access:Z.access_token,refresh:Z.refresh_token,expires:Date.now()+Z.expires_in*1000,email:Z.email,idToken:Z.id_token}}catch(W){if(W instanceof J9)throw W;return{type:"failed"}}}async function ZL($="pi"){let{verifier:W,challenge:Z}=await $9(),Q=e_(32),J=new URL(Y0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",Y0.clientId),J.searchParams.set("redirect_uri",Y0.redirectUri),J.searchParams.set("scope",Y0.scopes),J.searchParams.set("code_challenge",Z),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("state",Q),J.searchParams.set("id_token_add_organizations","true"),J.searchParams.set("codex_cli_simplified_flow","true"),J.searchParams.set("originator",$),{verifier:W,state:Q,url:J.toString()}}function QL(){try{let $=new URL(Y0.redirectUri),W=$.port.length>0?Number.parseInt($.port,10):Y0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(W)?W:Y0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:Y0.callbackPort,callbackPath:"/auth/callback",redirectUri:Y0.redirectUri}}}function JL($,W){let Z=W?I7(W):I7($),Q=Z?Z:I7($),j=Q?.[Y0.jwtClaimPath]?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;let X=Q?.organizations;if(Array.isArray(X)&&X.length>0){let V=X[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let Y=Q?.chatgpt_account_id;if(typeof Y==="string"&&Y.length>0)return Y;return null}function YV($,W){let Z=JL($.access,$.idToken)??W?.accountId;if(!Z)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||W?.refresh||"",expires:$.expires,accountId:Z,email:$.email??W?.email,metadata:{...W?.metadata??{},provider:"openai-codex"}}}async function Q4($){g1($.telemetry,"openai-codex");let W=QL(),{verifier:Z,state:Q,url:J}=await ZL($.originator),j=await G1({host:W.host,ports:[W.port],callbackPath:W.callbackPath,expectedState:Q});$.onAuth({url:J,instructions:"Continue the authentication process in your browser."});let X;try{let Y=await L8({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(Y.state&&Y.state!==Q)throw Error("State mismatch");if(X=Y.code,!X){let H=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=f8(H,{allowHashCodeState:!0});if(G.state&&G.state!==Q)throw Error("State mismatch");X=G.code}if(!X)throw Error("Missing authorization code");let V=await $L(X,Z,W.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let B=YV(V);return m1($.telemetry,"openai-codex"),H1($.telemetry,{id:B.accountId,email:B.email,provider:"openai-codex"}),B}catch(Y){throw v1($.telemetry,"openai-codex",Y instanceof Error?Y.message:String(Y)),Y}finally{j.close()}}async function j9($,W){let Z=await WL($);if(Z.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let Q=YV(Z,W);if(!Q.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return Q}async function J4($,W){if(!$)return null;let Z=W?.refreshBufferMs??Y0.refreshBufferMs,Q=W?.retryableTokenGraceMs??Y0.retryableTokenGraceMs;if(W?.forceRefresh!==!0&&!_8($,Z))return $;try{return await j9($.refresh,$)}catch(j){if(j instanceof J9&&j.isLikelyInvalidGrant())return U$(W?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>Q)return $;return null}}O0();var zV={};w(zV,{refreshOcaToken:()=>B9,loginOcaOAuth:()=>Y4,getValidOcaCredentials:()=>V4,OCI_HEADER_OPC_REQUEST_ID:()=>jL,DEFAULT_INTERNAL_OCA_BASE_URL:()=>X9,DEFAULT_INTERNAL_IDCS_URL:()=>GV,DEFAULT_INTERNAL_IDCS_SCOPES:()=>KV,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>HV,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>Y9,DEFAULT_EXTERNAL_IDCS_URL:()=>AV,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>UV,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>FV});import{decodeJwtPayload as j4}from"@cline/shared";import{nanoid as BV}from"nanoid";class x7{ttlMs;maxEntries;entries=new Map;constructor($,W){this.ttlMs=$;this.maxEntries=W}get($,W=Date.now()){this.pruneExpired(W);let Z=this.entries.get($);if(!Z)return;return this.entries.delete($),this.entries.set($,Z),Z.value}set($,W,Z=Date.now(),Q=this.ttlMs){this.pruneExpired(Z),this.entries.delete($);while(this.entries.size>=this.maxEntries){let J=this.entries.keys().next().value;if(J===void 0)break;this.entries.delete(J)}this.entries.set($,{value:W,expiresAt:Z+Q})}pruneExpired($){for(let[W,Z]of this.entries)if(Z.expiresAt<=$)this.entries.delete(W)}}var HV="a8331954c0cf48ba99b5dd223a14c6ea",GV="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",KV="openid offline_access",X9="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",FV="c1aba3deed5740659981a752714eba33",AV="https://login-ext.identity.oraclecloud.com",UV="openid offline_access",Y9="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",jL="opc-request-id",XL="/auth/oca",YL=Array.from({length:11},($,W)=>48801+W),VL=300000,BL=30000,fV=30000,HL=600000;class V9 extends Error{status;errorCode;constructor($,W){super($);this.name="OcaOAuthTokenError",this.status=W?.status,this.errorCode=W?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var D$={internal:{clientId:HV,idcsUrl:GV,scopes:KV,baseUrl:X9},external:{clientId:FV,idcsUrl:AV,scopes:UV,baseUrl:Y9}},X4=new Map,GL=86400000,KL=300000,FL=32,g7=new x7(GL,FL);function DV($){if(typeof $==="function")return $();return $??"internal"}function _V($){return{internal:{clientId:$?.internal?.clientId??D$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??D$.internal.idcsUrl,scopes:$?.internal?.scopes??D$.internal.scopes,baseUrl:$?.internal?.baseUrl??D$.internal.baseUrl},external:{clientId:$?.external?.clientId??D$.external.clientId,idcsUrl:$?.external?.idcsUrl??D$.external.idcsUrl,scopes:$?.external?.scopes??D$.external.scopes,baseUrl:$?.external?.baseUrl??D$.external.baseUrl}}}function AL($=Date.now()){let W=$-HL;for(let[Z,Q]of X4.entries())if(Q.createdAt<W)X4.delete(Z)}function UL($,W,Z){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=j4(W)?.exp;if(typeof J==="number"&&J>0)return J*1000;let X=j4(Z)?.exp;if(typeof X==="number"&&X>0)return X*1000;return Date.now()+3600000}function LV($,W,Z){let Q=$.access_token;if(!Q)throw Error("Token response did not include an access token");let J=$.refresh_token??Z?.refresh;if(!J)throw Error("Token response did not include a refresh token");let j=j4($.id_token),X=j4(Q),Y=j?.sub??X?.sub,V=j?.email??X?.email;return{access:Q,refresh:J,expires:UL($,Q,$.id_token),accountId:Y??Z?.accountId,email:V??Z?.email,metadata:{...Z?.metadata??{},provider:"oca",mode:W,subject:Y,idToken:$.id_token}}}async function OV($,W){let Z=W9($),Q=g7.get(Z);if(Q)return Q;let J=`${Z}/.well-known/openid-configuration`,j=await fetch(J,{method:"GET",signal:AbortSignal.timeout(W)});if(!j.ok){let V=`${Z}/oauth2/v1/token`;return g7.set(Z,V,Date.now(),KL),V}let Y=(await j.json()).token_endpoint||`${Z}/oauth2/v1/token`;return g7.set(Z,Y),Y}function TV($){return{code:$.error,message:$.error_description}}async function fL($){let W=X4.get($.state);if(!W)throw Error("No PKCE verifier found for this state");X4.delete($.state);let Z=$.mode==="external"?$.config.external:$.config.internal,Q=await OV(Z.idcsUrl,$.requestTimeoutMs),J=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:W.redirectUri,client_id:Z.clientId,code_verifier:W.verifier}),j=await fetch(Q,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:J,signal:AbortSignal.timeout($.requestTimeoutMs)}),X=await j.json();if(!j.ok){let V=TV(X);throw new V9(`Token exchange failed: ${j.status}${V.message?` - ${V.message}`:""}`,{status:j.status,errorCode:V.code})}let Y=j4(X.id_token);if(!X.id_token||!Y)throw Error("No ID token received from OCA");if(Y.nonce!==W.nonce)throw Error("OIDC nonce verification failed");return LV(X,$.mode)}function DL($){let W=$.mode==="external"?$.config.external:$.config.internal,Z=new URL(`${W9(W.idcsUrl)}/oauth2/v1/authorize`);return Z.searchParams.set("client_id",W.clientId),Z.searchParams.set("response_type","code"),Z.searchParams.set("scope",W.scopes),Z.searchParams.set("code_challenge",$.challenge),Z.searchParams.set("code_challenge_method","S256"),Z.searchParams.set("redirect_uri",$.callbackUrl),Z.searchParams.set("state",$.state),Z.searchParams.set("nonce",$.nonce),Z.toString()}async function Y4($){g1($.telemetry,"oca");let W=_V($.config),Z=DV($.mode),Q=$.callbackPorts?.length?$.callbackPorts:YL,J=$.callbackPath??XL,j=$.requestTimeoutMs??fV,X=await G1({ports:Q,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),Y=X.callbackUrl;if(!Y)throw Error("Unable to bind local OAuth callback server");let V=BV(16),B=BV(16),{verifier:H,challenge:G}=await $9();AL(),X4.set(V,{verifier:H,nonce:B,mode:Z,redirectUri:Y,createdAt:Date.now()});let K=DL({callbackUrl:Y,mode:Z,state:V,nonce:B,challenge:G,config:W});$.callbacks.onAuth({url:K,instructions:"Continue the authentication process in your browser."});try{let F=await L8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),A=F.code,f=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!A){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!f||f!==V)throw Error("State mismatch");let U=await fL({code:A,state:f,mode:Z,config:W,requestTimeoutMs:j});return m1($.telemetry,"oca"),H1($.telemetry,{id:U.accountId,email:U.email,provider:"oca"}),U}catch(F){throw v1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{X.close()}}async function B9($,W={}){let Z=_V(W.config),Q=W.requestTimeoutMs??fV,J=$.metadata?.mode,j=J==="internal"||J==="external"?J:DV(W.mode),X=j==="external"?Z.external:Z.internal,Y=await OV(X.idcsUrl,Q),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:X.clientId}),B=await fetch(Y,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(Q)}),H=await B.json();if(!B.ok){let G=TV(H);throw new V9(`Token refresh failed: ${B.status}${G.message?` - ${G.message}`:""}`,{status:B.status,errorCode:G.code})}return LV(H,j,$)}async function V4($,W,Z){if(!$)return null;let Q=W?.refreshBufferMs??Z?.refreshBufferMs??VL,J=W?.retryableTokenGraceMs??Z?.retryableTokenGraceMs??BL;if(W?.forceRefresh!==!0&&!_8($,Q))return $;try{return await B9($,Z)}catch(X){if(X instanceof V9&&X.isLikelyInvalidGrant())return U$(Z?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}var H9="workos:";function LL($){let W=$.trim();return W.toLowerCase().startsWith(H9)?W:`${H9}${W}`}function OL($){let W=$.trim();return W.toLowerCase().startsWith(H9)?W.slice(H9.length):W}function TL($){let Z=_L($)?.exp;if(typeof Z==="number"&&Z>0)return Z*1000;return null}function zL($,W){let Z=$.auth?.expiresAt;if(typeof Z==="number"&&Number.isFinite(Z)&&Z>0)return Z;let Q=TL(W);if(Q)return Q;return Date.now()-1}function qL($,W){let Z=$.auth?.accessToken?.trim(),Q=$.auth?.refreshToken?.trim();if(!Z||!Q)return null;let J=W?.normalizeAccessToken?.(Z)??Z;if(!J)return null;return{access:J,refresh:Q,expires:zL($,J),accountId:$.auth?.accountId,metadata:$.auth?.metadata}}function ML($){let W=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Z={...$.settings?.auth??{},accessToken:W,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},Q=Object.fromEntries(Object.entries($.credentials.metadata??{}).filter(([,X])=>X!==void 0)),J={...$.settings?.auth?.metadata??{},...Q};if(Object.keys(J).length>0)Z.metadata=J;let j={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Z};if($.save!==!1)$.manager.saveProviderSettings(j,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return j}function m7($){let W=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:W,getApiKey(Z){let Q=Z?.auth?.accessToken?.trim();if(Q)return $.formatAccessToken?.(Q)??Q;return Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Z){return ML({...Z,storageProviderId:W,formatAccessToken:$.formatAccessToken})},isConfigured(Z){return!!Z?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function MV($){return m7({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:LL,normalizeStoredAccessToken:OL,login:({settings:W,callbacks:Z,telemetry:Q})=>W4({apiBaseUrl:W?.baseUrl?.trim()||qV().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Z,telemetry:Q}),refresh:({settings:W,credentials:Z,forceRefresh:Q,telemetry:J})=>Z4(Z,{apiBaseUrl:W.baseUrl?.trim()||qV().apiBaseUrl,telemetry:J},{forceRefresh:Q})})}var NL=[MV({providerId:"cline"}),MV({providerId:"cline-pass",storageProviderId:"cline"}),m7({providerId:"oca",login:({settings:$,callbacks:W,telemetry:Z})=>Y4({mode:$?.oca?.mode,callbacks:W,telemetry:Z}),refresh:({settings:$,credentials:W,forceRefresh:Z,telemetry:Q})=>V4(W,{forceRefresh:Z,telemetry:Q},{mode:$.oca?.mode,telemetry:Q})}),m7({providerId:"openai-codex",login:({callbacks:$,telemetry:W})=>Q4({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:W}),refresh:({credentials:$,forceRefresh:W,telemetry:Z})=>J4($,{forceRefresh:W,telemetry:Z})})],RL=new Map(NL.map(($)=>[$.providerId,$]));function H0($){return RL.get($.trim().toLowerCase())}function Q2($){return H0($)!==void 0}function v7($){return H0($)?.storageProviderId}function c7($,W){let Z=H0(W),Q=Z?.storageProviderId??W,J=$.getProviderSettings(Q);return Z?.getApiKey(J)??T8(W,J)}async function B4($,W,Z){let Q=H0(W);if(!Q)throw Error(`Provider "${W}" does not support OAuth login`);let J=$.getProviderSettings(Q.storageProviderId),j=await Q.login({settings:J,callbacks:Z.callbacks,telemetry:Z.telemetry});return Q.saveCredentials({manager:$,settings:J,credentials:j})}function H4($,W){let Z=H0($);if(!Z)return null;return qL(W,{normalizeAccessToken:Z.normalizeStoredAccessToken})}function J2($){let W=H0($.providerId);if(!W)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return W.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function T8($,W){let Z=H0($);if(Z)return Z.getApiKey(W);return W?.auth?.accessToken?.trim()||W?.apiKey?.trim()||W?.auth?.apiKey?.trim()||void 0}function u7($,W){let Z=H0($);if(!Z)return W.access;return Z.getApiKey({provider:Z.storageProviderId,auth:{accessToken:W.access}})??W.access}O0();var HB={};w(HB,{createContextCompactionPrepareTurn:()=>L4,createCompactionStateAwarePrepareTurn:()=>O4});import{estimateRequestInputTokens as HO}from"@cline/shared";var SV={};w(SV,{projectSessionCompactionState:()=>j2,parseSessionCompactionState:()=>K1,createSessionCompactionState:()=>z8,SessionCompactionStateSchema:()=>G4});import{createHash as EL}from"node:crypto";import{formatDisplayUserInput as RV}from"@cline/shared";import{z as z1}from"zod";function wL($){if(!$||typeof $!=="object"||Array.isArray($))return!1;let W=$;if(W.role!=="user"&&W.role!=="assistant")return!1;return typeof W.content==="string"||Array.isArray(W.content)}var CL=z1.custom(wL),G4=z1.object({version:z1.literal(1),updated_at:z1.string().datetime(),conversation_id:z1.string().min(1).optional(),source_message_count:z1.number().int().nonnegative(),source_prefix_hash:z1.string().min(1).optional(),source_last_message_key:z1.string().min(1).optional(),messages:z1.array(CL),system_prompt:z1.string().optional()});function d7($){return JSON.parse(JSON.stringify($))}function EV($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:RV($.content)};return{...$,content:$.content.map((W)=>W.type==="text"?{...W,text:RV(W.text)}:W)}}function wV($){if($.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function PL($){let W=EV($);return wV(W.role),[["role",W.role],["content",W.content],["id",W.id??null],["agent",W.agent??null],["sessionId",W.sessionId??null],["metadata",W.metadata??null],["modelInfo",W.modelInfo??null],["metrics",W.metrics??null],["ts",W.ts??null]]}function CV($){if(!$)return"";let W=EV($);if(typeof W.id==="string"&&W.id.trim())return`id:${W.id.trim()}`;if(wV(W.role),typeof W.ts==="number"&&Number.isFinite(W.ts))return`ts:${W.role}:${W.ts}`;return`content:${W.role}:${JSON.stringify(W.content)}`}function PV($,W=$.length){let Z=EL("sha256");Z.update(`cline-session-compaction-source-v1
46
46
  `),Z.update(`${W}
47
- `);for(let Q of $.slice(0,W))Z.update(JSON.stringify(ML(Q))),Z.update(`
48
- `);return`sha256:${Z.digest("hex")}`}function T8($){let W=$.sourceMessages.at(-1),Z=NV(W);return B4.parse({version:1,updated_at:$.updatedAt??new Date().toISOString(),...$.conversationId?.trim()?{conversation_id:$.conversationId.trim()}:{},source_message_count:$.sourceMessages.length,source_prefix_hash:EV($.sourceMessages),...Z?{source_last_message_key:Z}:{},messages:u7($.compactedMessages),...$.systemPrompt!==void 0?{system_prompt:$.systemPrompt}:{}})}function j2($,W){if(!($.source_message_count<=W.length))return;let Q=!!$.source_prefix_hash&&EV(W,$.source_message_count)===$.source_prefix_hash,J=W[$.source_message_count-1],j=!$.source_prefix_hash&&$.source_message_count>0&&!!$.source_last_message_key&&NV(J)===$.source_last_message_key;if(!(Q||j))return;return[...u7($.messages),...u7(W.slice($.source_message_count))]}function G1($){let W=B4.safeParse($);return W.success?W.data:void 0}import{createHandlerAsync as lL}from"@cline/llms";function RL($){switch($){case"agentic_summary":case"basic_compaction_projection":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!0,dropThinkingBlocks:!0};case"normal_provider_request":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!1,dropThinkingBlocks:!1}}}function CV($){return $.map((W)=>({...W,content:Array.isArray(W.content)?W.content.map((Z)=>({...Z})):W.content,...W.metadata?{metadata:{...W.metadata}}:{}}))}function z1($){try{return JSON.stringify($).length}catch{return String($).length}}function H9($,W){return $.reduce((Z,Q)=>Z+W(Q),0)}function yV($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((W)=>W.type==="tool_result")}function G9($){for(let W=$.length-1;W>=0;W-=1){let Z=$[W];if(Z.role==="user"&&!yV(Z))return W}return-1}function NL($){for(let W=0;W<$.length;W+=1){let Z=$[W];if(Z.role==="user"&&!yV(Z))return W}return-1}function l7($){let W=new Set;if(!Array.isArray($.content))return W;for(let Z of $.content)if(Z.type==="tool_use")W.add(Z.id);else if(Z.type==="tool_result")W.add(Z.tool_use_id);return W}function EL($){let W=new Map;for(let Z=0;Z<$.length;Z+=1)for(let Q of l7($[Z])){let J=W.get(Q);if(J)J.add(Z);else W.set(Q,new Set([Z]))}return W}function d7($){let W=new Set;for(let Z of $){if(!Array.isArray(Z.content))continue;for(let Q of Z.content)if(Q.type==="tool_result")W.add(Q.tool_use_id)}for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(!Array.isArray(Q.content))continue;if(Q.content.some((J)=>J.type==="tool_use"&&!W.has(J.id)))return Z}return $.length}function wL($,W){let Z=EL($),Q=new Set,J=[W];while(J.length>0){let j=J.shift();if(j===void 0||Q.has(j))continue;Q.add(j);for(let X of l7($[j]))for(let Y of Z.get(X)??[])if(!Q.has(Y))J.push(Y)}return Q}function CL($){return $.type==="image"||$.type==="redacted_thinking"}function PL($){return $.type==="image"}function SL($,W,Z){if(W.dropThinkingBlocks&&$.type==="thinking")return!0;return W.dropUnsafeOutsideLiveTail&&!Z&&CL($)}function PV($,W,Z,Q="over_budget"){let J=[],j=[];for(let X=0;X<$.length;X+=1){let Y=$[X];if(Array.isArray(Y.content)&&Y.content.length===0){Z.push({kind:"dropped_message",path:{messageIndex:W[X]},reason:Q,originalSize:z1(Y),finalSize:0});continue}J.push(Y),j.push(W[X])}return{messages:J,originalIndexes:j}}function bL($,W,Z,Q,J,j){return $.map((X,Y)=>{if(!Array.isArray(X.content))return X;let V=!1,B=Y===Q||Y>=J,H=X.content.flatMap((G,K)=>{if(SL(G,j,B))return V=!0,Z.push({kind:"dropped_block",path:{messageIndex:W[Y],blockIndex:K},reason:"unsafe_to_truncate",originalSize:z1(G),finalSize:0}),[];if(G.type==="tool_result"&&Array.isArray(G.content)){let F=G.content.filter((A)=>{if(j.dropUnsafeOutsideLiveTail&&!B&&PL(A))return!1;return!0});if(F.length!==G.content.length){V=!0;let A={...G,content:F};return Z.push({kind:"dropped_block",path:{messageIndex:W[Y],blockIndex:K},reason:"unsafe_to_truncate",originalSize:z1(G),finalSize:z1(A)}),[A]}}return[G]});return V?{...X,content:H}:X})}function yL($,W,Z){return $.map((Q,J)=>{if(!Array.isArray(Q.content))return Q;let j=!1,X=Q.content.filter((Y,V)=>{if(Y.type!=="thinking")return!0;return j=!0,Z.push({kind:"dropped_block",path:{messageIndex:W[J],blockIndex:V},reason:"unsafe_to_truncate",originalSize:z1(Y),finalSize:0}),!1});return j?{...Q,content:X}:Q})}function z8($,W){if(W<=0)return"";if($.length<=W)return $;if(W<=16)return $.slice(0,Math.max(1,W));let Z=`
47
+ `);for(let Q of $.slice(0,W))Z.update(JSON.stringify(PL(Q))),Z.update(`
48
+ `);return`sha256:${Z.digest("hex")}`}function z8($){let W=$.sourceMessages.at(-1),Z=CV(W);return G4.parse({version:1,updated_at:$.updatedAt??new Date().toISOString(),...$.conversationId?.trim()?{conversation_id:$.conversationId.trim()}:{},source_message_count:$.sourceMessages.length,source_prefix_hash:PV($.sourceMessages),...Z?{source_last_message_key:Z}:{},messages:d7($.compactedMessages),...$.systemPrompt!==void 0?{system_prompt:$.systemPrompt}:{}})}function j2($,W){if(!($.source_message_count<=W.length))return;let Q=!!$.source_prefix_hash&&PV(W,$.source_message_count)===$.source_prefix_hash,J=W[$.source_message_count-1],j=!$.source_prefix_hash&&$.source_message_count>0&&!!$.source_last_message_key&&CV(J)===$.source_last_message_key;if(!(Q||j))return;return[...d7($.messages),...d7(W.slice($.source_message_count))]}function K1($){let W=G4.safeParse($);return W.success?W.data:void 0}import{createHandlerAsync as oL}from"@cline/llms";function SL($){switch($){case"agentic_summary":case"basic_compaction_projection":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!0,dropThinkingBlocks:!0};case"normal_provider_request":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!1,dropThinkingBlocks:!1}}}function bV($){return $.map((W)=>({...W,content:Array.isArray(W.content)?W.content.map((Z)=>({...Z})):W.content,...W.metadata?{metadata:{...W.metadata}}:{}}))}function q1($){try{return JSON.stringify($).length}catch{return String($).length}}function G9($,W){return $.reduce((Z,Q)=>Z+W(Q),0)}function IV($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((W)=>W.type==="tool_result")}function K9($){for(let W=$.length-1;W>=0;W-=1){let Z=$[W];if(Z.role==="user"&&!IV(Z))return W}return-1}function bL($){for(let W=0;W<$.length;W+=1){let Z=$[W];if(Z.role==="user"&&!IV(Z))return W}return-1}function p7($){let W=new Set;if(!Array.isArray($.content))return W;for(let Z of $.content)if(Z.type==="tool_use")W.add(Z.id);else if(Z.type==="tool_result")W.add(Z.tool_use_id);return W}function yL($){let W=new Map;for(let Z=0;Z<$.length;Z+=1)for(let Q of p7($[Z])){let J=W.get(Q);if(J)J.add(Z);else W.set(Q,new Set([Z]))}return W}function l7($){let W=new Set;for(let Z of $){if(!Array.isArray(Z.content))continue;for(let Q of Z.content)if(Q.type==="tool_result")W.add(Q.tool_use_id)}for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(!Array.isArray(Q.content))continue;if(Q.content.some((J)=>J.type==="tool_use"&&!W.has(J.id)))return Z}return $.length}function hL($,W){let Z=yL($),Q=new Set,J=[W];while(J.length>0){let j=J.shift();if(j===void 0||Q.has(j))continue;Q.add(j);for(let X of p7($[j]))for(let Y of Z.get(X)??[])if(!Q.has(Y))J.push(Y)}return Q}function kL($){return $.type==="image"||$.type==="redacted_thinking"}function IL($){return $.type==="image"}function xL($,W,Z){if(W.dropThinkingBlocks&&$.type==="thinking")return!0;return W.dropUnsafeOutsideLiveTail&&!Z&&kL($)}function yV($,W,Z,Q="over_budget"){let J=[],j=[];for(let X=0;X<$.length;X+=1){let Y=$[X];if(Array.isArray(Y.content)&&Y.content.length===0){Z.push({kind:"dropped_message",path:{messageIndex:W[X]},reason:Q,originalSize:q1(Y),finalSize:0});continue}J.push(Y),j.push(W[X])}return{messages:J,originalIndexes:j}}function gL($,W,Z,Q,J,j){return $.map((X,Y)=>{if(!Array.isArray(X.content))return X;let V=!1,B=Y===Q||Y>=J,H=X.content.flatMap((G,K)=>{if(xL(G,j,B))return V=!0,Z.push({kind:"dropped_block",path:{messageIndex:W[Y],blockIndex:K},reason:"unsafe_to_truncate",originalSize:q1(G),finalSize:0}),[];if(G.type==="tool_result"&&Array.isArray(G.content)){let F=G.content.filter((A)=>{if(j.dropUnsafeOutsideLiveTail&&!B&&IL(A))return!1;return!0});if(F.length!==G.content.length){V=!0;let A={...G,content:F};return Z.push({kind:"dropped_block",path:{messageIndex:W[Y],blockIndex:K},reason:"unsafe_to_truncate",originalSize:q1(G),finalSize:q1(A)}),[A]}}return[G]});return V?{...X,content:H}:X})}function mL($,W,Z){return $.map((Q,J)=>{if(!Array.isArray(Q.content))return Q;let j=!1,X=Q.content.filter((Y,V)=>{if(Y.type!=="thinking")return!0;return j=!0,Z.push({kind:"dropped_block",path:{messageIndex:W[J],blockIndex:V},reason:"unsafe_to_truncate",originalSize:q1(Y),finalSize:0}),!1});return j?{...Q,content:X}:Q})}function q8($,W){if(W<=0)return"";if($.length<=W)return $;if(W<=16)return $.slice(0,Math.max(1,W));let Z=`
49
49
  ...[truncated ${$.length-W} chars]`,Q=Math.max(1,W-Z.length),J=`
50
- ...[truncated ${$.length-Q} chars]`;return`${$.slice(0,Q)}${J}`}function SV($,W){if(typeof $==="string")return z8($,W);let Z=W;return $.map((Q)=>{if(Z<=0){if(Q.type==="text")return{...Q,text:""};if(Q.type==="file")return{...Q,content:""};return Q}if(Q.type==="text"){let J=z8(Q.text,Z);return Z-=J.length,{...Q,text:J}}if(Q.type==="file"){let J=z8(Q.content,Z);return Z-=J.length,{...Q,content:J}}return Q})}function hL($){if(typeof $==="string")return $.length;return $.reduce((W,Z)=>{if(Z.type==="text")return W+Z.text.length;if(Z.type==="file")return W+Z.content.length;return W},0)}function kL($,W){if(typeof $.content==="string")return{...$,content:z8($.content,W)};let Z=W;return{...$,content:$.content.map((Q)=>{if(Z<=0){if(Q.type==="text")return{...Q,text:""};if(Q.type==="file")return{...Q,content:""};if(Q.type==="tool_result")return{...Q,content:SV(Q.content,0)};return Q}if(Q.type==="text"){let J=z8(Q.text,Z);return Z-=J.length,{...Q,text:J}}if(Q.type==="file"){let J=z8(Q.content,Z);return Z-=J.length,{...Q,content:J}}if(Q.type==="tool_result"){let J=SV(Q.content,Z);return Z-=hL(J),{...Q,content:J}}return Q})}}function IL($){if(typeof $.content==="string")return $.content.length>0;return $.content.some((W)=>W.type==="text"||W.type==="file"||W.type==="tool_result")}function xL($,W,Z){return{messages:$.filter((Q,J)=>!Z.has(J)),originalIndexes:W.filter((Q,J)=>!Z.has(J))}}function gL($,W){if(W<0)return!1;for(let Z of $)if(Z>=W)return!0;return!1}function bV($,W){return W>=0&&$.has(W)}function H4($){let W=[],Z=[],Q=RL($.policyIntent);if($.targetTokens<=0)return{status:"failed",messages:CV($.messages),actions:W,liveTailHandling:"preserved_out_of_band",estimatedTokens:H9($.messages,$.estimateMessageTokens),warnings:[{code:"budget_impossible",message:"Target budget must be greater than zero."}]};let J=CV($.messages),j=J.map((B,H)=>H);if(Q.dropThinkingBlocks){let B=PV(yL(J,j,W),j,W,"unsafe_to_truncate");J=B.messages,j=B.originalIndexes}let X=Q.protectLatestTypedUser?G9(J):-1,Y=Q.protectLiveTailFromDrop?d7(J):J.length;if(Q.dropUnsafeOutsideLiveTail){let B=PV(bL(J,j,W,X,Y,Q),j,W);J=B.messages,j=B.originalIndexes}let V=H9(J,$.estimateMessageTokens);if(V<=$.targetTokens)return{status:"ok",messages:J,actions:W,liveTailHandling:W.length>0?"included_degraded":"included_verbatim",estimatedTokens:V,warnings:Z};for(let B=J.length-1;B>=0&&V>$.targetTokens;B-=1){let H=G9(J);if(B===H)continue;if(Q.protectLiveTailFromDrop&&B>=d7(J))continue;if(!IL(J[B]))continue;let G=z1(J[B]),K=Math.max(1,G/Math.max(1,$.estimateMessageTokens(J[B]))),F=Math.max(16,Math.floor($.targetTokens*K/Math.max(1,J.length)));J[B]=kL(J[B],F),W.push({kind:"truncated_text",path:{messageIndex:j[B]},reason:"over_budget",originalSize:G,finalSize:z1(J[B])}),V=H9(J,$.estimateMessageTokens)}for(let B=0;B<J.length&&V>$.targetTokens;){let H=NL(J),G=G9(J),K=Q.protectLiveTailFromDrop?d7(J):J.length;if(B===H||B===G){W.push({kind:"preserved",path:{messageIndex:j[B]},reason:"protected_live_tail",originalSize:z1(J[B]),finalSize:z1(J[B])}),B+=1;continue}let F=wL(J,B);if(bV(F,H)){B+=1;continue}if(bV(F,G)){B+=1;continue}if(gL(F,K)){B+=1;continue}for(let f of F)W.push({kind:"dropped_message",path:{messageIndex:j[f]},reason:F.size>1||l7(J[f]).size>0?"tool_pair_boundary":"over_budget",originalSize:z1(J[f]),finalSize:0});let A=xL(J,j,F);J=A.messages,j=A.originalIndexes,V=H9(J,$.estimateMessageTokens)}if(V>$.targetTokens)return Z.push({code:"budget_unachievable_with_protections",message:"Projection could not reach budget without violating protected content."}),{status:"failed",messages:J,actions:W,liveTailHandling:"included_degraded",estimatedTokens:V,warnings:Z};return{status:"ok",messages:J,actions:W,liveTailHandling:W.length>0?"included_degraded":"included_verbatim",estimatedTokens:V,warnings:Z}}import{CHARS_PER_TOKEN as Vc,estimateTokens as K9}from"@cline/shared";var xV=128000,mL=0.9,X2=0.9,gV=0.7,mV=20000,hV=1024,kV=2000,vV=2000,cV=8;function IV($){return typeof $==="number"&&Number.isFinite($)&&$>0}function A4($){let W=IV($.contextWindow)?$.contextWindow:void 0,Z=IV($.maxInputTokens)?$.maxInputTokens:void 0;if(Z!==void 0)return W===void 0?Z:Math.min(Z,W);return W===void 0?void 0:W*mL}function F4($,W){if($.length<=W)return $;return`${$.slice(0,W)}
51
- ...[truncated ${$.length-W} chars]`}function vL($){let W=p7($);if(typeof W==="string")return W;return W.map((Z)=>{switch(Z.type){case"text":return Z.text;case"file":return`<file path="${Z.path}">
50
+ ...[truncated ${$.length-Q} chars]`;return`${$.slice(0,Q)}${J}`}function hV($,W){if(typeof $==="string")return q8($,W);let Z=W;return $.map((Q)=>{if(Z<=0){if(Q.type==="text")return{...Q,text:""};if(Q.type==="file")return{...Q,content:""};return Q}if(Q.type==="text"){let J=q8(Q.text,Z);return Z-=J.length,{...Q,text:J}}if(Q.type==="file"){let J=q8(Q.content,Z);return Z-=J.length,{...Q,content:J}}return Q})}function vL($){if(typeof $==="string")return $.length;return $.reduce((W,Z)=>{if(Z.type==="text")return W+Z.text.length;if(Z.type==="file")return W+Z.content.length;return W},0)}function cL($,W){if(typeof $.content==="string")return{...$,content:q8($.content,W)};let Z=W;return{...$,content:$.content.map((Q)=>{if(Z<=0){if(Q.type==="text")return{...Q,text:""};if(Q.type==="file")return{...Q,content:""};if(Q.type==="tool_result")return{...Q,content:hV(Q.content,0)};return Q}if(Q.type==="text"){let J=q8(Q.text,Z);return Z-=J.length,{...Q,text:J}}if(Q.type==="file"){let J=q8(Q.content,Z);return Z-=J.length,{...Q,content:J}}if(Q.type==="tool_result"){let J=hV(Q.content,Z);return Z-=vL(J),{...Q,content:J}}return Q})}}function uL($){if(typeof $.content==="string")return $.content.length>0;return $.content.some((W)=>W.type==="text"||W.type==="file"||W.type==="tool_result")}function dL($,W,Z){return{messages:$.filter((Q,J)=>!Z.has(J)),originalIndexes:W.filter((Q,J)=>!Z.has(J))}}function lL($,W){if(W<0)return!1;for(let Z of $)if(Z>=W)return!0;return!1}function kV($,W){return W>=0&&$.has(W)}function K4($){let W=[],Z=[],Q=SL($.policyIntent);if($.targetTokens<=0)return{status:"failed",messages:bV($.messages),actions:W,liveTailHandling:"preserved_out_of_band",estimatedTokens:G9($.messages,$.estimateMessageTokens),warnings:[{code:"budget_impossible",message:"Target budget must be greater than zero."}]};let J=bV($.messages),j=J.map((B,H)=>H);if(Q.dropThinkingBlocks){let B=yV(mL(J,j,W),j,W,"unsafe_to_truncate");J=B.messages,j=B.originalIndexes}let X=Q.protectLatestTypedUser?K9(J):-1,Y=Q.protectLiveTailFromDrop?l7(J):J.length;if(Q.dropUnsafeOutsideLiveTail){let B=yV(gL(J,j,W,X,Y,Q),j,W);J=B.messages,j=B.originalIndexes}let V=G9(J,$.estimateMessageTokens);if(V<=$.targetTokens)return{status:"ok",messages:J,actions:W,liveTailHandling:W.length>0?"included_degraded":"included_verbatim",estimatedTokens:V,warnings:Z};for(let B=J.length-1;B>=0&&V>$.targetTokens;B-=1){let H=K9(J);if(B===H)continue;if(Q.protectLiveTailFromDrop&&B>=l7(J))continue;if(!uL(J[B]))continue;let G=q1(J[B]),K=Math.max(1,G/Math.max(1,$.estimateMessageTokens(J[B]))),F=Math.max(16,Math.floor($.targetTokens*K/Math.max(1,J.length)));J[B]=cL(J[B],F),W.push({kind:"truncated_text",path:{messageIndex:j[B]},reason:"over_budget",originalSize:G,finalSize:q1(J[B])}),V=G9(J,$.estimateMessageTokens)}for(let B=0;B<J.length&&V>$.targetTokens;){let H=bL(J),G=K9(J),K=Q.protectLiveTailFromDrop?l7(J):J.length;if(B===H||B===G){W.push({kind:"preserved",path:{messageIndex:j[B]},reason:"protected_live_tail",originalSize:q1(J[B]),finalSize:q1(J[B])}),B+=1;continue}let F=hL(J,B);if(kV(F,H)){B+=1;continue}if(kV(F,G)){B+=1;continue}if(lL(F,K)){B+=1;continue}for(let f of F)W.push({kind:"dropped_message",path:{messageIndex:j[f]},reason:F.size>1||p7(J[f]).size>0?"tool_pair_boundary":"over_budget",originalSize:q1(J[f]),finalSize:0});let A=dL(J,j,F);J=A.messages,j=A.originalIndexes,V=G9(J,$.estimateMessageTokens)}if(V>$.targetTokens)return Z.push({code:"budget_unachievable_with_protections",message:"Projection could not reach budget without violating protected content."}),{status:"failed",messages:J,actions:W,liveTailHandling:"included_degraded",estimatedTokens:V,warnings:Z};return{status:"ok",messages:J,actions:W,liveTailHandling:W.length>0?"included_degraded":"included_verbatim",estimatedTokens:V,warnings:Z}}import{CHARS_PER_TOKEN as Fc,estimateTokens as F9}from"@cline/shared";var vV=128000,pL=0.9,X2=0.9,cV=0.7,uV=20000,xV=1024,gV=2000,dV=2000,lV=8;function mV($){return typeof $==="number"&&Number.isFinite($)&&$>0}function f4($){let W=mV($.contextWindow)?$.contextWindow:void 0,Z=mV($.maxInputTokens)?$.maxInputTokens:void 0;if(Z!==void 0)return W===void 0?Z:Math.min(Z,W);return W===void 0?void 0:W*pL}function U4($,W){if($.length<=W)return $;return`${$.slice(0,W)}
51
+ ...[truncated ${$.length-W} chars]`}function rL($){let W=r7($);if(typeof W==="string")return W;return W.map((Z)=>{switch(Z.type){case"text":return Z.text;case"file":return`<file path="${Z.path}">
52
52
  ${Z.content}
53
53
  </file>`;case"image":return`[image:${Z.mediaType}]`;default:return""}}).join(`
54
- `)}function p7($){if(typeof $==="string")return F4($,kV);return $.map((W)=>{switch(W.type){case"text":return{...W,text:F4(W.text,kV)};case"file":return{...W,content:F4(W.content,vV)};case"image":return W;default:return W}})}function cL($){return Object.entries($).map(([W,Z])=>`${W}=${JSON.stringify(Z)}`).join(", ")}function uV($){if(typeof $.content==="string")return`[${$.role==="user"?"User":"Bot"}]: ${$.content}`;let W=[];for(let Z of $.content)switch(Z.type){case"text":W.push(`[${$.role==="user"?"User":"Bot"}]: ${Z.text}`);break;case"thinking":W.push(`[Bot thinking]: ${F4(Z.thinking,2000)}`);break;case"redacted_thinking":W.push("[Bot thinking]: [redacted]");break;case"tool_use":W.push(`[Bot tool calls]: ${Z.name}(${cL(Z.input)})`);break;case"tool_result":W.push(`[Tool result]: ${vL(Z.content)}`);break;case"file":W.push(`[${$.role==="user"?"User":"Bot"} file ${Z.path}]: ${F4(Z.content,vV)}`);break;case"image":W.push(`[${$.role==="user"?"User":"Bot"} image]: ${Z.mediaType}`);break}return W.join(`
55
- `)}function dV($){return $.map(uV).join(`
54
+ `)}function r7($){if(typeof $==="string")return U4($,gV);return $.map((W)=>{switch(W.type){case"text":return{...W,text:U4(W.text,gV)};case"file":return{...W,content:U4(W.content,dV)};case"image":return W;default:return W}})}function iL($){return Object.entries($).map(([W,Z])=>`${W}=${JSON.stringify(Z)}`).join(", ")}function pV($){if(typeof $.content==="string")return`[${$.role==="user"?"User":"Bot"}]: ${$.content}`;let W=[];for(let Z of $.content)switch(Z.type){case"text":W.push(`[${$.role==="user"?"User":"Bot"}]: ${Z.text}`);break;case"thinking":W.push(`[Bot thinking]: ${U4(Z.thinking,2000)}`);break;case"redacted_thinking":W.push("[Bot thinking]: [redacted]");break;case"tool_use":W.push(`[Bot tool calls]: ${Z.name}(${iL(Z.input)})`);break;case"tool_result":W.push(`[Tool result]: ${rL(Z.content)}`);break;case"file":W.push(`[${$.role==="user"?"User":"Bot"} file ${Z.path}]: ${U4(Z.content,dV)}`);break;case"image":W.push(`[${$.role==="user"?"User":"Bot"} image]: ${Z.mediaType}`);break}return W.join(`
55
+ `)}function rV($){return $.map(pV).join(`
56
56
 
57
- `).trim()}function lV(){let $=new WeakMap;return(W)=>{let Z=W,Q=$.get(Z);if(typeof Q==="number")return Q;let J;try{J=JSON.stringify(W)}catch{J=uV(W)}let j=K9(J.length);return $.set(Z,j),j}}function U4($){return $.metadata?.kind==="compaction_summary"}function r7($){if(!U4($))return;let W=$.metadata;if(!W)return;let Z=W.details;return{kind:"compaction_summary",summary:String(W.summary??""),details:{readFiles:Array.isArray(Z?.readFiles)?Z.readFiles.filter((Q)=>typeof Q==="string").map((Q)=>Q.trim()).filter((Q)=>Q.length>0):[],modifiedFiles:Array.isArray(Z?.modifiedFiles)?Z.modifiedFiles.filter((Q)=>typeof Q==="string").map((Q)=>Q.trim()).filter((Q)=>Q.length>0):[]},tokensBefore:Number(W.tokensBefore??0),generatedAt:Number(W.generatedAt??0)}}function uL($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((W)=>W.type==="tool_result")}function f4($){return $.role==="user"&&!uL($)&&!U4($)}function pV($){for(let W=0;W<$.length;W+=1)if(f4($[W]))return W;return-1}function F9($){for(let W=$.length-1;W>=0;W-=1)if(f4($[W]))return W;return 0}function rV($){for(let W=$.length-1;W>=0;W-=1)if($[W].role==="assistant")return W;return-1}function iV($){for(let W=$.length-1;W>=0;W-=1)if(U4($[W]))return W;return-1}function nV($,W,Z){let Q=F9($);if(Q<=0)return 0;let J=0,j=$.length;for(let Y=$.length-1;Y>=0;Y-=1)if(J+=Z($[Y]),j=Y,J>=W)break;if(j<=0)return 0;let X=Math.min(j,Q);while(X>0&&!f4($[X]))X-=1;return X}function K4($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((W)=>K4(W));if($&&typeof $==="object"){let W=$,Z=[];for(let Q of["path","file_path","target_file","new_file_path","old_file_path"])Z.push(...K4(W[Q]));if(Array.isArray(W.files)){for(let Q of W.files)if(Q&&typeof Q==="object")Z.push(...K4(Q.path))}if(Array.isArray(W.file_paths))Z.push(...K4(W.file_paths));return Z}return[]}function G4($,W){let Z=new Set($);for(let Q of W){let J=Q.trim();if(!J)continue;Z.add(J)}return[...Z].sort((Q,J)=>Q.localeCompare(J))}function i7($){let W=[],Z=[];for(let Q of $){let J=r7(Q);if(J){W=G4(W,J.details.readFiles),Z=G4(Z,J.details.modifiedFiles);continue}if(!Array.isArray(Q.content))continue;for(let j of Q.content){if(j.type==="file"){W=G4(W,[j.path]);continue}if(j.type!=="tool_use")continue;let X=K4(j.input);if(j.name==="read_files"){W=G4(W,X);continue}if(j.name==="editor"||j.name==="apply_patch")Z=G4(Z,X)}}return{readFiles:W,modifiedFiles:Z}}function dL($){let W=$.readFiles.length>0?$.readFiles.map((Q)=>`- ${Q}`).join(`
57
+ `).trim()}function iV(){let $=new WeakMap;return(W)=>{let Z=W,Q=$.get(Z);if(typeof Q==="number")return Q;let J;try{J=JSON.stringify(W)}catch{J=pV(W)}let j=F9(J.length);return $.set(Z,j),j}}function D4($){return $.metadata?.kind==="compaction_summary"}function i7($){if(!D4($))return;let W=$.metadata;if(!W)return;let Z=W.details;return{kind:"compaction_summary",summary:String(W.summary??""),details:{readFiles:Array.isArray(Z?.readFiles)?Z.readFiles.filter((Q)=>typeof Q==="string").map((Q)=>Q.trim()).filter((Q)=>Q.length>0):[],modifiedFiles:Array.isArray(Z?.modifiedFiles)?Z.modifiedFiles.filter((Q)=>typeof Q==="string").map((Q)=>Q.trim()).filter((Q)=>Q.length>0):[]},tokensBefore:Number(W.tokensBefore??0),generatedAt:Number(W.generatedAt??0)}}function nL($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((W)=>W.type==="tool_result")}function _4($){return $.role==="user"&&!nL($)&&!D4($)}function nV($){for(let W=0;W<$.length;W+=1)if(_4($[W]))return W;return-1}function A9($){for(let W=$.length-1;W>=0;W-=1)if(_4($[W]))return W;return 0}function aV($){for(let W=$.length-1;W>=0;W-=1)if($[W].role==="assistant")return W;return-1}function oV($){for(let W=$.length-1;W>=0;W-=1)if(D4($[W]))return W;return-1}function sV($,W,Z){let Q=A9($);if(Q<=0)return 0;let J=0,j=$.length;for(let Y=$.length-1;Y>=0;Y-=1)if(J+=Z($[Y]),j=Y,J>=W)break;if(j<=0)return 0;let X=Math.min(j,Q);while(X>0&&!_4($[X]))X-=1;return X}function A4($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((W)=>A4(W));if($&&typeof $==="object"){let W=$,Z=[];for(let Q of["path","file_path","target_file","new_file_path","old_file_path"])Z.push(...A4(W[Q]));if(Array.isArray(W.files)){for(let Q of W.files)if(Q&&typeof Q==="object")Z.push(...A4(Q.path))}if(Array.isArray(W.file_paths))Z.push(...A4(W.file_paths));return Z}return[]}function F4($,W){let Z=new Set($);for(let Q of W){let J=Q.trim();if(!J)continue;Z.add(J)}return[...Z].sort((Q,J)=>Q.localeCompare(J))}function n7($){let W=[],Z=[];for(let Q of $){let J=i7(Q);if(J){W=F4(W,J.details.readFiles),Z=F4(Z,J.details.modifiedFiles);continue}if(!Array.isArray(Q.content))continue;for(let j of Q.content){if(j.type==="file"){W=F4(W,[j.path]);continue}if(j.type!=="tool_use")continue;let X=A4(j.input);if(j.name==="read_files"){W=F4(W,X);continue}if(j.name==="editor"||j.name==="apply_patch")Z=F4(Z,X)}}return{readFiles:W,modifiedFiles:Z}}function aL($){let W=$.readFiles.length>0?$.readFiles.map((Q)=>`- ${Q}`).join(`
58
58
  `):"- none",Z=$.modifiedFiles.length>0?$.modifiedFiles.map((Q)=>`- ${Q}`).join(`
59
59
  `):"- none";return`## Files
60
60
  Read:
61
61
  ${W}
62
62
  Modified:
63
- ${Z}`}function aV($,W){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
63
+ ${Z}`}function tV($,W){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
64
64
 
65
- ${dL(W)}`.trim()}function n7($){let W=[`Summarize this session for continuation. Be concise and factual.
65
+ ${aL(W)}`.trim()}function a7($){let W=[`Summarize this session for continuation. Be concise and factual.
66
66
 
67
67
  ## Goal
68
68
  One sentence: what is being built or fixed.
@@ -84,20 +84,20 @@ Edited: ${$.fileOps.modifiedFiles.join(", ")||"none"}`];if($.previousSummary?.tr
84
84
  ${$.previousSummary.trim()}`);return W.push(`Conversation:
85
85
  ${$.conversationText||"(empty)"}`),W.join(`
86
86
 
87
- `)}function oV($){let W=$.summarizer,Z=(J)=>{if(J.providerId==="openai-codex"){let{maxOutputTokens:j,...X}=J;return{...X,thinking:!1}}return{...J,maxOutputTokens:J.maxOutputTokens??hV,thinking:!1}};if(!W)return Z($.activeProviderConfig);let Q=W.providerConfig?.providerId===W.providerId?W.providerConfig:void 0;return Z({...Q??{},providerId:W.providerId,modelId:W.modelId,apiKey:W.apiKey??Q?.apiKey,baseUrl:W.baseUrl??Q?.baseUrl,headers:W.headers??Q?.headers,modelInfo:W.modelInfo??Q?.modelInfo,knownModels:W.knownModels??Q?.knownModels,maxOutputTokens:W.maxOutputTokens??hV})}function sV($){return{role:"user",content:`Context summary:
87
+ `)}function eV($){let W=$.summarizer,Z=(J)=>{if(J.providerId==="openai-codex"){let{maxOutputTokens:j,...X}=J;return{...X,thinking:!1}}return{...J,maxOutputTokens:J.maxOutputTokens??xV,thinking:!1}};if(!W)return Z($.activeProviderConfig);let Q=W.providerConfig?.providerId===W.providerId?W.providerConfig:void 0;return Z({...Q??{},providerId:W.providerId,modelId:W.modelId,apiKey:W.apiKey??Q?.apiKey,baseUrl:W.baseUrl??Q?.baseUrl,headers:W.headers??Q?.headers,modelInfo:W.modelInfo??Q?.modelInfo,knownModels:W.knownModels??Q?.knownModels,maxOutputTokens:W.maxOutputTokens??xV})}function $B($){return{role:"user",content:`Context summary:
88
88
 
89
- ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}var a7=1024;function pL($){let W=A4({maxInputTokens:$.maxInputTokens??$.modelInfo?.maxInputTokens,contextWindow:$.modelInfo?.contextWindow});if(W!==void 0)return W;let Z=$.knownModels?.[$.modelId];return A4({maxInputTokens:Z?.maxInputTokens,contextWindow:Z?.contextWindow})}function rL($){return H4({messages:$.messages,targetTokens:Math.max(1,$.targetTokens),policyIntent:"agentic_summary",estimateMessageTokens:$.estimateMessageTokens})}async function iL($){let W=await lL($.providerConfig),Z="";for await(let Q of W.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(Q.type==="text"){Z+=Q.text;continue}if(Q.type==="done"&&!Q.success&&Q.error)throw Error(Q.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Z.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Z.trim()}function nL($){try{return JSON.stringify($).length}catch{return String($).length}}async function tV($){let W=$.context.messages;if(W.length<2)return;let Z=nV(W,$.preserveRecentTokens,$.estimateMessageTokens);if(Z<=0||Z>=W.length)return;let Q=W.slice(0,Z),J=iV(Q),j=J>=0?r7(Q[J])?.summary:void 0,X=J>=0?Q.slice(J+1):Q;if(X.length===0)return;let Y=i7(Q),V=oV({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),B=pL(V),H=$.summarizer===void 0,G=Math.max($.context.budget.request.maxInputTokens,$.context.budget.request.triggerTokens,a7);if(B===void 0&&!H)$.logger?.log("Agentic compaction summarizer has no known input limit; using conservative summary budget",{severity:"warn",summarizerProviderId:V.providerId,summarizerModelId:V.modelId,fallbackInputLimit:a7});let K=B??(H?G:a7),F=K9(n7({previousSummary:j,conversationText:"",fileOps:Y}).length),A=K-F;if(A<=0){$.logger?.debug("Skipped agentic compaction: summarizer budget exhausted",{summarizerProviderId:V.providerId,summarizerModelId:V.modelId,summarizerInputLimit:K,summaryRequestOverheadTokens:F});return}let f=rL({messages:X,targetTokens:A,estimateMessageTokens:$.estimateMessageTokens});if(f.status==="failed"){$.logger?.log("Skipped agentic compaction: summary input budget failed",{severity:"warn",budgetWarnings:f.warnings.map((y)=>y.code),summaryInputEstimatedTokens:f.estimatedTokens,targetTokens:A,summarizerProviderId:V.providerId,summarizerModelId:V.modelId});return}let U=i7(f.messages),_=dV(f.messages),D=n7({previousSummary:j,conversationText:_,fileOps:U});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:Q.length,newMessagesToFold:X.length,preservedMessages:W.length-Z,previousSummaryChars:j?.length??0,conversationTextChars:_.length,summaryRequestChars:D.length,summaryRequestEstimatedTokens:K9(D.length),newMessagesJsonChars:nL(X),summaryInputEstimatedTokens:f.estimatedTokens,summaryInputActions:f.actions.length,summaryInputWarnings:f.warnings.map((y)=>y.code),summaryRequestOverheadTokens:F,summarizerProviderId:V.providerId,summarizerModelId:V.modelId,summarizerInputLimit:K,maxInputTokens:$.context.budget.request.maxInputTokens,triggerTokens:$.context.budget.request.triggerTokens});let M=await iL({providerConfig:V,request:D,logger:$.logger});if(!M.trim())return;let T=aV(M,U),O=W.reduce((y,P)=>y+$.estimateMessageTokens(P),0),L=[sV({summary:T,fileOps:U,tokensBefore:O}),...W.slice(Z)],C=L.reduce((y,P)=>y+$.estimateMessageTokens(P),0);$.logger?.debug("Performed agentic compaction",{messagesBefore:W.length,messagesAfter:L.length,messagesSummarized:Z,messagesPreserved:W.length-Z,tokensBefore:O,tokensAfter:C,maxInputTokens:$.context.budget.request.maxInputTokens});let N=f.actions.filter((y)=>y.reason==="over_budget"||y.reason==="tool_pair_boundary").length;return{messages:L,budget:{policyIntent:"agentic_summary",actionCount:N,warningCount:f.warnings.length,liveTailHandling:f.liveTailHandling}}}import{CHARS_PER_TOKEN as aL}from"@cline/shared";function oL($){if(U4($))return;if(typeof $.content==="string"){let Z=$.content.trim();return Z?{...$,content:Z}:void 0}let W=$.content.filter((Z)=>Z.type!=="text"||Z.text.trim());if(W.length===0)return;return{...$,content:W.map((Z)=>Z.type==="text"?{...Z,text:Z.text.trim()}:Z.type==="tool_result"?{...Z,content:p7(Z.content)}:Z)}}function eV($,W){return $.reduce((Z,Q)=>Z+W(Q),0)}function $B($,W){if($.length<=W)return $;let Z=`
90
- ...`,Q=Math.max(1,W-Z.length);return`${$.slice(0,Q)}${Z}`}function WB($,W){let Z=Number.isFinite(W)?Math.max(1,W):1,Q=Math.max(16,Z*aL);if(typeof $.content==="string"){let X=$B($.content,Q).trim();return{...$,content:X||"..."}}let J=Q,j=$.content.map((X)=>{if(X.type!=="text"||J<=0)return X;let Y=$B(X.text,J).trim();return J-=Y.length,{...X,text:Y||"..."}});return{...$,content:j}}function sL($,W){let Z=pV($),Q=F9($),J=rV($),j=[],X=0;for(let Y=0;Y<$.length;Y+=1){let V=oL($[Y]);if(!V)continue;let B=W(V);X+=B,j.push({index:Y,message:V,estimatedTokens:B,toolPairIds:QB(V),isFirstUser:Y===Z,isLastUser:Y===Q,isLastAssistant:Y===J})}return{candidates:j,totalTokens:X}}function ZB($,W,Z,Q){let J=$[W],j=J.estimatedTokens;return J.message=Z,J.estimatedTokens=Q(Z),J.toolPairIds=QB(Z),J.estimatedTokens-j}function QB($){if(!Array.isArray($.content))return[];let W=[];for(let Z of $.content)if(Z.type==="tool_use")W.push(Z.id);else if(Z.type==="tool_result")W.push(Z.tool_use_id);return W}function tL($){let W=new Map;for(let Z of $)for(let Q of Z.toolPairIds){let J=W.get(Q);if(J)J.add(Z);else W.set(Q,new Set([Z]))}return W}function eL($,W,Z){let Q=new Set,J=[Z],j=0;while(j<J.length){let X=J[j];if(j+=1,X===void 0||!$.has(X)||Q.has(X))continue;Q.add(X);for(let Y of X.toolPairIds)for(let V of W.get(Y)??[])if(!Q.has(V))J.push(V)}return Q}function $O($,W){let Z=0;for(let Q of $){if(W.has(Q))continue;$[Z]=Q,Z+=1}$.length=Z}function A9($,W,Z,Q){let J=new Set($),j=tL($);for(let X=0;X<$.length&&Q>Z;){if(!W($[X])){X+=1;continue}let Y=eL(J,j,$[X]);if(Y.size===0){X+=1;continue}let V=0;for(let B of Y)V+=B.estimatedTokens,J.delete(B);Q-=V,$O($,Y)}return Q}function WO($,W,Z,Q,J){if(Z<=W)return Z;for(let X=$.length-1;X>=0&&Z>W;X-=1){let Y=$[X];if(Y.isFirstUser)continue;let V=Math.max(cV,Y.estimatedTokens-(Z-W));if(V>=Y.estimatedTokens)continue;Z+=ZB($,X,WB(Y.message,V),J)}if(Z<=W)return Z;let j=$.findIndex((X)=>X.isFirstUser);if(j>=0){if($[j].estimatedTokens<=Q)return Z;while(Z>W){let Y=$[j],V=Math.max(1,Y.estimatedTokens-(Z-W));if(V>=Y.estimatedTokens)break;let B=Y.estimatedTokens;if(Z+=ZB($,j,WB(Y.message,V),J),Y.estimatedTokens>=B)break}}return Z}function ZO($,W){return JSON.stringify($)!==JSON.stringify(W)}function QO($){let W=F9($);if(W<0||W===0&&!f4($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,W),protectedTail:$.slice(W)}}function JB($){let W=Math.max(1,Math.min($.context.budget.messages.targetTokens,$.context.budget.messages.triggerTokens)),{compactable:Z,protectedTail:Q}=QO($.context.messages);if(Z.length===0)return;let J=eV(Q,$.estimateMessageTokens),j=Math.max(1,W-J),X=sL(Z,$.estimateMessageTokens),{candidates:Y}=X;if(Y.length===0)return;let V=X.totalTokens,B=V;B=A9(Y,(U)=>U.message.role==="assistant"&&!U.isLastAssistant,j,B),B=A9(Y,(U)=>U.message.role==="user"&&!U.isFirstUser&&!U.isLastUser,j,B),B=A9(Y,(U)=>U.message.role==="assistant"&&U.isLastAssistant,j,B),B=A9(Y,(U)=>U.message.role==="user"&&U.isLastUser&&!U.isFirstUser,j,B),B=WO(Y,j,B,$.context.budget.messages.triggerTokens,$.estimateMessageTokens);let H=[...Y.map((U)=>U.message),...Q],G=H4({messages:H,targetTokens:W,policyIntent:"basic_compaction_projection",estimateMessageTokens:$.estimateMessageTokens});if(G.status==="failed")$.logger?.debug("Basic compaction returned best-effort projection",{budgetWarnings:G.warnings.map((U)=>U.code),projectedTokens:G.estimatedTokens,targetTokens:W,maxInputTokens:$.context.budget.request.maxInputTokens});let K=G.messages;if(!ZO($.context.messages,K))return;let F=V+J,A=eV(K,$.estimateMessageTokens),f=G.actions.filter((U)=>U.reason==="over_budget"||U.reason==="tool_pair_boundary").length;return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:K.length,messagesRemoved:$.context.messages.length-K.length,tokensBefore:F,tokensAfter:A,budgetStatus:G.status,budgetActions:f,budgetWarnings:G.warnings.map((U)=>U.code),targetTokens:W,maxInputTokens:$.context.budget.request.maxInputTokens}),{messages:K,budget:{policyIntent:"basic_compaction_projection",actionCount:f,warningCount:G.warnings.length,liveTailHandling:G.liveTailHandling}}}var jO=0.5;function XB($){try{return JSON.stringify($).length}catch{return String($).length}}function XO($){let W=0,Z=0,Q=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let j of J.content){if(j.type!=="tool_result")continue;let X=XB(j.content);W+=1,Z+=X,Q=Math.max(Q,X)}}return{toolResultCount:W,toolResultSerializedChars:Z,maxToolResultSerializedChars:Q}}var YO={basic:({context:$,estimateMessageTokens:W,logger:Z})=>JB({context:$,estimateMessageTokens:W,logger:Z}),agentic:({context:$,providerConfig:W,compaction:Z,estimateMessageTokens:Q,logger:J})=>tV({context:$,providerConfig:W,summarizer:Z?.summarizer,preserveRecentTokens:Math.min(Z?.preserveRecentTokens??mV,$.budget.messages.targetTokens),estimateMessageTokens:Q,logger:J})};function VO($){let W=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Z=Math.min(0.95,Math.max(0.05,W));return Math.max(1,Math.floor(Math.min($.messageTriggerTokens,$.messageInputTokens*Z)))}function BO($){let W=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*jO):Math.floor($.triggerTokens*gV),Z=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(W,$.maxInputTokens,Z))}function jB($,W){return Math.max(1,Math.floor($-W))}function HO($){let W=0,Z=!1;for(let Q of $)if(Q.role==="user")Z=!0;else if(Q.role==="assistant"&&Z)W+=1,Z=!1;return W}function D4($,W={}){let Z=$.compaction;if(Z?.enabled!==!0)return;let Q=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=lV(),j=Z?.strategy??"basic",X=YO[j],Y=W.mode??"auto",V=Z?.compact?"custom":j;return async(B)=>{let H=B.apiMessages.reduce((n,o)=>n+J(o),0),G=JO({systemPrompt:B.systemPrompt,messages:B.apiMessages,tools:B.tools}),K=B.messages.reduce((n,o)=>n+J(o),0),F=Math.max(0,G-H),A=A4({maxInputTokens:B.model.info?.maxInputTokens,contextWindow:B.model.info?.contextWindow})??xV,f=A*X2,U=jB(f,F),_=G>=f;if($.logger?.debug("Context compaction diagnostics",{mode:Y,strategy:j,iteration:B.iteration,providerId:$.providerId,modelId:$.modelId,requestInputTokens:G,apiMessageTokens:H,messageInputTokens:K,requestOverheadTokens:F,maxInputTokens:A,requestTriggerTokens:f,messageTriggerTokens:U,thresholdRatio:X2,shouldCompact:_,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:XB(B.apiMessages),...XO(B.apiMessages)}),Y==="auto"&&!_)return;let D,M;if(Y==="auto")D=BO({maxInputTokens:A,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:f,messagePairCount:HO(B.messages)}),M=jB(D,F);else M=VO({messageInputTokens:K,messageTriggerTokens:U,manualTargetRatio:W.manualTargetRatio}),D=F+M;let T={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId,iteration:B.iteration,messages:B.messages,model:B.model,mode:Y,budget:{request:{inputTokens:G,maxInputTokens:A,triggerTokens:f,targetTokens:D,overheadTokens:F,thresholdRatio:X2,utilizationRatio:A>0?G/A:0},messages:{inputTokens:K,triggerTokens:U,targetTokens:M}}},O=Y==="manual"?"manual_compaction":"auto_compaction";B.emitStatusNotice?.(Y==="manual"?"compacting":"auto-compacting",{kind:O,reason:O,iteration:B.iteration,triggerTokens:f,targetTokens:D,maxInputTokens:A,messageTargetTokens:M});let L=B.messages.length,C=Date.now(),N=Z?.compact?await Z.compact(T):await X({context:T,providerConfig:{...Q,abortSignal:B.abortSignal},compaction:Z,estimateMessageTokens:J,logger:$.logger}),y=Date.now()-C,P=$.sessionId??B.conversationId,d={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId??void 0};if(N?.messages){let n=N.messages.reduce((G$,h1)=>G$+J(h1),0),o=F+n;if($.logger?.log("Context compaction completed",{severity:"info",strategy:j,maxInputTokens:A,messageInputTokens:K,apiInputTokens:H,requestInputTokens:G,requestOverheadTokens:F,afterMessageTokens:n,afterRequestTokens:o,tokensSaved:G-o,utilizationBefore:`${(G/A*100).toFixed(1)}%`,utilizationAfter:`${(o/A*100).toFixed(1)}%`,thresholdTrigger:`${(X2*100).toFixed(1)}%`,messagesBefore:L,messagesAfter:N.messages.length,messagesRemoved:L-N.messages.length}),sW($.telemetry,{ulid:P,strategy:V,mode:Y,messagesBefore:L,messagesAfter:N.messages.length,messagesRemoved:L-N.messages.length,tokensBefore:G,tokensAfter:o,tokensSaved:G-o,triggerTokens:f,maxInputTokens:A,thresholdRatio:X2,durationMs:y,provider:$.providerId,modelId:$.modelId,...d}),N.budget&&(N.budget.actionCount>0||N.budget.warningCount>0))iY($.telemetry,{ulid:P,strategy:V,mode:Y,policyIntent:N.budget.policyIntent,actionCount:N.budget.actionCount,warningCount:N.budget.warningCount,liveTailHandling:N.budget.liveTailHandling,provider:$.providerId,modelId:$.modelId,...d}),B.emitStatusNotice?.("compaction-budget-adjusted",{kind:"compaction_budget_emergency",reason:"compaction_budget_emergency",iteration:B.iteration,policyIntent:N.budget.policyIntent,actionCount:N.budget.actionCount,warningCount:N.budget.warningCount})}else tW($.telemetry,{ulid:P,strategy:V,mode:Y,reason:"no_result",tokensBefore:G,triggerTokens:f,maxInputTokens:A,thresholdRatio:X2,durationMs:y,provider:$.providerId,modelId:$.modelId,...d});return N}}function _4($){return async(W)=>{let Z=$.getState?.(),Q=Z?j2(Z,W.messages):void 0;if(Z&&Q){let j=$.compact?await $.compact({...W,messages:Q,apiMessages:Q}):void 0;if(j?.messages){let X=j.systemPrompt??Z.system_prompt,Y=T8({sourceMessages:W.messages,compactedMessages:j.messages,conversationId:W.conversationId,systemPrompt:X});return await $.saveState?.(Y),{...j,...X!==void 0?{systemPrompt:X}:{}}}return{messages:Q,...j?.systemPrompt!==void 0?{systemPrompt:j.systemPrompt}:Z.system_prompt!==void 0?{systemPrompt:Z.system_prompt}:{}}}let J=$.compact?await $.compact(W):void 0;if(J?.messages){let j=T8({sourceMessages:W.messages,compactedMessages:J.messages,conversationId:W.conversationId,systemPrompt:J.systemPrompt});await $.saveState?.(j)}return J}}var nH={};E(nH,{zodToJsonSchema:()=>Tq,validateWithZod:()=>Oq,truncateCommandOutput:()=>H2,resolveToolRoutingConfig:()=>b8,resolveToolPresetName:()=>l1,resolveCoreSelectedToolIds:()=>v9,getCoreHeadlessToolNames:()=>v4,getCoreDefaultEnabledToolIds:()=>m9,getCoreBuiltinToolCatalog:()=>M2,getCoreAcpToolNames:()=>c9,createWebFetchTool:()=>W3,createWebFetchExecutor:()=>S4,createToolPoliciesWithPreset:()=>M9,createSubmitAndExitTool:()=>j3,createSkillsTool:()=>K2,createShellTool:()=>w4,createShellExecutor:()=>G2,createSearchTool:()=>$3,createSearchExecutor:()=>P4,createReadFilesTool:()=>e7,createFileReadExecutor:()=>C4,createEditorTool:()=>Q3,createEditorExecutor:()=>U2,createDefaultToolsWithPreset:()=>R9,createDefaultTools:()=>T$,createDefaultShellExecutor:()=>b4,createDefaultExecutors:()=>P8,createBuiltinTools:()=>R2,createAskQuestionTool:()=>J3,createApplyPatchTool:()=>Z3,createApplyPatchExecutor:()=>A2,computePatchChanges:()=>E8,WebFetchRequestSchema:()=>o7,ToolPresets:()=>o0,TEAM_TOOL_NAMES:()=>k8,SubmitInputSchema:()=>E4,StructuredCommandInputSchema:()=>V2,SkillsInputSchema:()=>R4,SearchCodebaseInputSchema:()=>O4,RunCommandsInputSchema:()=>T4,ReadFilesInputSchema:()=>L4,ReadFileRequestSchema:()=>D9,PatchActionType:()=>F2,MAX_COMMAND_OUTPUT_CHARS:()=>v1,FetchWebContentInputSchema:()=>z4,EditFileInputSchema:()=>q4,DefaultToolNames:()=>T0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>S8,CommandExitError:()=>c1,AskQuestionInputSchema:()=>N4,ApplyPatchInputSchema:()=>M4,ALL_DEFAULT_TOOL_NAMES:()=>D$});import{validateWithZod as Oq,zodToJsonSchema as Tq}from"@cline/shared";var T0={READ_FILES:"read_files",SEARCH_CODEBASE:"search_codebase",RUN_COMMANDS:"run_commands",FETCH_WEB_CONTENT:"fetch_web_content",APPLY_PATCH:"apply_patch",EDITOR:"editor",SKILLS:"skills",ASK:"ask_question",SUBMIT_AND_EXIT:"submit_and_exit"},D$=[T0.READ_FILES,T0.SEARCH_CODEBASE,T0.RUN_COMMANDS,T0.FETCH_WEB_CONTENT,T0.APPLY_PATCH,T0.EDITOR,T0.SKILLS,T0.ASK,T0.SUBMIT_AND_EXIT];O0();import{createTool as L$,validateWithZod as O$,zodToJsonSchema as u1}from"@cline/shared";var VB="__clineInternalTelemetry";function BB($){let W=$?.__clineInternalTelemetry;return W&&typeof W==="object"&&"capture"in W&&typeof W.capture==="function"?W:void 0}import{spawn as zB}from"node:child_process";import{StringDecoder as fO}from"node:string_decoder";import{getDefaultShell as DO,getShellArgs as _O}from"@cline/shared";import{validateWithZod as KO}from"@cline/shared";import{z}from"zod";var _$=6000,Y2=z.string().describe("The absolute path of a text file to read content from"),U9=z.object({start_line:z.number().int().positive().nullable().optional().describe("Optional one-based starting line number to read from; use null or omit for the start of the file"),end_line:z.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit to read to the end of the file or the read cap, whichever comes first")}).describe("Optional inclusive one-based file line range"),D9=z.object({path:Y2,start_line:U9.shape.start_line,end_line:U9.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds. Always include path; start_line/end_line must be on the same object as the path they apply to, never in a separate array element"),L4=z.object({files:z.array(D9).describe("Array of file read requests; each element is one file and must include path. Omit start_line/end_line or set them to null to read from the start; provide integers on the same object as the path to return only that inclusive one-based line range — never emit a range as its own array element. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),HB={start_line:U9.shape.start_line,end_line:U9.shape.end_line},q8=z.union([D9,z.object({file_path:Y2,...HB}).transform(({file_path:$,...W})=>({path:$,...W})),z.object({filePath:Y2,...HB}).transform(({filePath:$,...W})=>({path:$,...W}))]),GB=z.union([L4,q8,z.array(q8),z.array(z.string()),z.string(),z.object({files:z.array(z.union([Y2,q8]))}),z.object({files:q8}),z.object({files:Y2}),z.object({file_paths:z.array(Y2)}),z.object({file_paths:z.string()}),z.object({paths:z.array(z.union([Y2,q8]))}),z.object({paths:q8}),z.object({paths:z.string()})]),O4=z.object({queries:z.array(z.string()).describe("Array of regex search queries to execute")}),KB=z.union([O4,z.array(z.string()),z.string(),z.object({queries:z.string()})]),f9=z.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${_$*2} characters) to avoid timeouts.`),V2=z.object({command:z.string().min(1).describe("The executable to run directly without shell parsing."),args:z.array(z.string()).optional().describe("Optional argv list passed directly to the executable.")}),FB=z.union([f9,V2]),T4=z.object({commands:z.array(f9).describe("Array of complete shell command strings to execute.")}),GO=z.object({commands:z.array(FB)}),AB=z.union([T4,GO,z.object({commands:FB}),z.array(V2),V2,z.object({command:f9}),z.object({cmd:f9}),z.array(z.string()),z.string()]),o7=z.object({url:z.string().describe("The URL to fetch"),prompt:z.string().min(2).describe("Analysis prompt for the fetched content")}),z4=z.object({requests:z.array(o7).describe("Array of the URLs for the web fetch requests")}),q4=z.object({path:z.string().min(1).describe("The absolute path for the action to be performed on"),old_text:z.string().nullable().optional().describe(`Exact text to replace (must match exactly once). Omit this when creating a missing file or inserting via insert_line. Keep this at or below ${_$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:z.string().describe(`The new content to write when creating a missing file, the replacement text for edits, or the inserted text when insert_line is provided. Keep this at or below ${_$} characters when possible; for large edits, use multiple calls with small chunks of old_text and new_text to iteratively edit the file.`),insert_line:z.number().int().nullable().optional().describe("Optional positive one-based boundary line. When provided, the tool inserts new_text before that line instead of performing a replacement edit; use line_count + 1 to append at EOF.")}).describe("Edit a text file by replacing old_text with new_text, create the file with new_text if it does not exist, or insert new_text at insert_line when insert_line is provided. Prefer using this tool for file edits over shell commands. IMPORTANT: large edits can time out, so use small chunks and multiple calls when possible."),M4=z.object({input:z.string().min(1).describe("The freeform apply_patch payload in the canonical patch grammar (e.g *** Begin Patch, *** Update File:, @@, and *** End Patch).")}).describe("Modify or create a text file by applying patches using the canonical apply_patch diff grammar. Prefer sending the patch body directly rather than wrapping it in shell syntax. IMPORTANT: large patches can time out, so use small chunks and multiple calls when possible."),UB=z.union([M4,z.string()]),R4=z.object({skill:z.string().min(1).describe("Name of the skill to execute."),args:z.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),N4=z.object({question:z.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:z.array(z.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),E4=z.object({summary:z.string().min(10).describe("Summarization of the investigation, steps taken, and resolution status to submit at the end of the session. Before submitting, read the problem again along with any provided test's assertions carefully and confirm your fix produces the expected output."),verified:z.boolean().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and taken all necessary steps to resolve the issue.
89
+ ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}var o7=1024;function sL($){let W=f4({maxInputTokens:$.maxInputTokens??$.modelInfo?.maxInputTokens,contextWindow:$.modelInfo?.contextWindow});if(W!==void 0)return W;let Z=$.knownModels?.[$.modelId];return f4({maxInputTokens:Z?.maxInputTokens,contextWindow:Z?.contextWindow})}function tL($){return K4({messages:$.messages,targetTokens:Math.max(1,$.targetTokens),policyIntent:"agentic_summary",estimateMessageTokens:$.estimateMessageTokens})}async function eL($){let W=await oL($.providerConfig),Z="";for await(let Q of W.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(Q.type==="text"){Z+=Q.text;continue}if(Q.type==="done"&&!Q.success&&Q.error)throw Error(Q.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Z.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Z.trim()}function $O($){try{return JSON.stringify($).length}catch{return String($).length}}async function WB($){let W=$.context.messages;if(W.length<2)return;let Z=sV(W,$.preserveRecentTokens,$.estimateMessageTokens);if(Z<=0||Z>=W.length)return;let Q=W.slice(0,Z),J=oV(Q),j=J>=0?i7(Q[J])?.summary:void 0,X=J>=0?Q.slice(J+1):Q;if(X.length===0)return;let Y=n7(Q),V=eV({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),B=sL(V),H=$.summarizer===void 0,G=Math.max($.context.budget.request.maxInputTokens,$.context.budget.request.triggerTokens,o7);if(B===void 0&&!H)$.logger?.log("Agentic compaction summarizer has no known input limit; using conservative summary budget",{severity:"warn",summarizerProviderId:V.providerId,summarizerModelId:V.modelId,fallbackInputLimit:o7});let K=B??(H?G:o7),F=F9(a7({previousSummary:j,conversationText:"",fileOps:Y}).length),A=K-F;if(A<=0){$.logger?.debug("Skipped agentic compaction: summarizer budget exhausted",{summarizerProviderId:V.providerId,summarizerModelId:V.modelId,summarizerInputLimit:K,summaryRequestOverheadTokens:F});return}let f=tL({messages:X,targetTokens:A,estimateMessageTokens:$.estimateMessageTokens});if(f.status==="failed"){$.logger?.log("Skipped agentic compaction: summary input budget failed",{severity:"warn",budgetWarnings:f.warnings.map((p)=>p.code),summaryInputEstimatedTokens:f.estimatedTokens,targetTokens:A,summarizerProviderId:V.providerId,summarizerModelId:V.modelId});return}let U=n7(f.messages),_=rV(f.messages),D=a7({previousSummary:j,conversationText:_,fileOps:U});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:Q.length,newMessagesToFold:X.length,preservedMessages:W.length-Z,previousSummaryChars:j?.length??0,conversationTextChars:_.length,summaryRequestChars:D.length,summaryRequestEstimatedTokens:F9(D.length),newMessagesJsonChars:$O(X),summaryInputEstimatedTokens:f.estimatedTokens,summaryInputActions:f.actions.length,summaryInputWarnings:f.warnings.map((p)=>p.code),summaryRequestOverheadTokens:F,summarizerProviderId:V.providerId,summarizerModelId:V.modelId,summarizerInputLimit:K,maxInputTokens:$.context.budget.request.maxInputTokens,triggerTokens:$.context.budget.request.triggerTokens});let M=await eL({providerConfig:V,request:D,logger:$.logger});if(!M.trim())return;let T=tV(M,U),O=W.reduce((p,x)=>p+$.estimateMessageTokens(x),0),L=[$B({summary:T,fileOps:U,tokensBefore:O}),...W.slice(Z)],C=L.reduce((p,x)=>p+$.estimateMessageTokens(x),0);$.logger?.debug("Performed agentic compaction",{messagesBefore:W.length,messagesAfter:L.length,messagesSummarized:Z,messagesPreserved:W.length-Z,tokensBefore:O,tokensAfter:C,maxInputTokens:$.context.budget.request.maxInputTokens});let R=f.actions.filter((p)=>p.reason==="over_budget"||p.reason==="tool_pair_boundary").length;return{messages:L,budget:{policyIntent:"agentic_summary",actionCount:R,warningCount:f.warnings.length,liveTailHandling:f.liveTailHandling}}}import{CHARS_PER_TOKEN as WO}from"@cline/shared";function ZO($){if(D4($))return;if(typeof $.content==="string"){let Z=$.content.trim();return Z?{...$,content:Z}:void 0}let W=$.content.filter((Z)=>Z.type!=="text"||Z.text.trim());if(W.length===0)return;return{...$,content:W.map((Z)=>Z.type==="text"?{...Z,text:Z.text.trim()}:Z.type==="tool_result"?{...Z,content:r7(Z.content)}:Z)}}function ZB($,W){return $.reduce((Z,Q)=>Z+W(Q),0)}function QB($,W){if($.length<=W)return $;let Z=`
90
+ ...`,Q=Math.max(1,W-Z.length);return`${$.slice(0,Q)}${Z}`}function JB($,W){let Z=Number.isFinite(W)?Math.max(1,W):1,Q=Math.max(16,Z*WO);if(typeof $.content==="string"){let X=QB($.content,Q).trim();return{...$,content:X||"..."}}let J=Q,j=$.content.map((X)=>{if(X.type!=="text"||J<=0)return X;let Y=QB(X.text,J).trim();return J-=Y.length,{...X,text:Y||"..."}});return{...$,content:j}}function QO($,W){let Z=nV($),Q=A9($),J=aV($),j=[],X=0;for(let Y=0;Y<$.length;Y+=1){let V=ZO($[Y]);if(!V)continue;let B=W(V);X+=B,j.push({index:Y,message:V,estimatedTokens:B,toolPairIds:XB(V),isFirstUser:Y===Z,isLastUser:Y===Q,isLastAssistant:Y===J})}return{candidates:j,totalTokens:X}}function jB($,W,Z,Q){let J=$[W],j=J.estimatedTokens;return J.message=Z,J.estimatedTokens=Q(Z),J.toolPairIds=XB(Z),J.estimatedTokens-j}function XB($){if(!Array.isArray($.content))return[];let W=[];for(let Z of $.content)if(Z.type==="tool_use")W.push(Z.id);else if(Z.type==="tool_result")W.push(Z.tool_use_id);return W}function JO($){let W=new Map;for(let Z of $)for(let Q of Z.toolPairIds){let J=W.get(Q);if(J)J.add(Z);else W.set(Q,new Set([Z]))}return W}function jO($,W,Z){let Q=new Set,J=[Z],j=0;while(j<J.length){let X=J[j];if(j+=1,X===void 0||!$.has(X)||Q.has(X))continue;Q.add(X);for(let Y of X.toolPairIds)for(let V of W.get(Y)??[])if(!Q.has(V))J.push(V)}return Q}function XO($,W){let Z=0;for(let Q of $){if(W.has(Q))continue;$[Z]=Q,Z+=1}$.length=Z}function U9($,W,Z,Q){let J=new Set($),j=JO($);for(let X=0;X<$.length&&Q>Z;){if(!W($[X])){X+=1;continue}let Y=jO(J,j,$[X]);if(Y.size===0){X+=1;continue}let V=0;for(let B of Y)V+=B.estimatedTokens,J.delete(B);Q-=V,XO($,Y)}return Q}function YO($,W,Z,Q,J){if(Z<=W)return Z;for(let X=$.length-1;X>=0&&Z>W;X-=1){let Y=$[X];if(Y.isFirstUser)continue;let V=Math.max(lV,Y.estimatedTokens-(Z-W));if(V>=Y.estimatedTokens)continue;Z+=jB($,X,JB(Y.message,V),J)}if(Z<=W)return Z;let j=$.findIndex((X)=>X.isFirstUser);if(j>=0){if($[j].estimatedTokens<=Q)return Z;while(Z>W){let Y=$[j],V=Math.max(1,Y.estimatedTokens-(Z-W));if(V>=Y.estimatedTokens)break;let B=Y.estimatedTokens;if(Z+=jB($,j,JB(Y.message,V),J),Y.estimatedTokens>=B)break}}return Z}function VO($,W){return JSON.stringify($)!==JSON.stringify(W)}function BO($){let W=A9($);if(W<0||W===0&&!_4($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,W),protectedTail:$.slice(W)}}function YB($){let W=Math.max(1,Math.min($.context.budget.messages.targetTokens,$.context.budget.messages.triggerTokens)),{compactable:Z,protectedTail:Q}=BO($.context.messages);if(Z.length===0)return;let J=ZB(Q,$.estimateMessageTokens),j=Math.max(1,W-J),X=QO(Z,$.estimateMessageTokens),{candidates:Y}=X;if(Y.length===0)return;let V=X.totalTokens,B=V;B=U9(Y,(U)=>U.message.role==="assistant"&&!U.isLastAssistant,j,B),B=U9(Y,(U)=>U.message.role==="user"&&!U.isFirstUser&&!U.isLastUser,j,B),B=U9(Y,(U)=>U.message.role==="assistant"&&U.isLastAssistant,j,B),B=U9(Y,(U)=>U.message.role==="user"&&U.isLastUser&&!U.isFirstUser,j,B),B=YO(Y,j,B,$.context.budget.messages.triggerTokens,$.estimateMessageTokens);let H=[...Y.map((U)=>U.message),...Q],G=K4({messages:H,targetTokens:W,policyIntent:"basic_compaction_projection",estimateMessageTokens:$.estimateMessageTokens});if(G.status==="failed")$.logger?.debug("Basic compaction returned best-effort projection",{budgetWarnings:G.warnings.map((U)=>U.code),projectedTokens:G.estimatedTokens,targetTokens:W,maxInputTokens:$.context.budget.request.maxInputTokens});let K=G.messages;if(!VO($.context.messages,K))return;let F=V+J,A=ZB(K,$.estimateMessageTokens),f=G.actions.filter((U)=>U.reason==="over_budget"||U.reason==="tool_pair_boundary").length;return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:K.length,messagesRemoved:$.context.messages.length-K.length,tokensBefore:F,tokensAfter:A,budgetStatus:G.status,budgetActions:f,budgetWarnings:G.warnings.map((U)=>U.code),targetTokens:W,maxInputTokens:$.context.budget.request.maxInputTokens}),{messages:K,budget:{policyIntent:"basic_compaction_projection",actionCount:f,warningCount:G.warnings.length,liveTailHandling:G.liveTailHandling}}}var GO=0.5;function BB($){try{return JSON.stringify($).length}catch{return String($).length}}function KO($){let W=0,Z=0,Q=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let j of J.content){if(j.type!=="tool_result")continue;let X=BB(j.content);W+=1,Z+=X,Q=Math.max(Q,X)}}return{toolResultCount:W,toolResultSerializedChars:Z,maxToolResultSerializedChars:Q}}var FO={basic:({context:$,estimateMessageTokens:W,logger:Z})=>YB({context:$,estimateMessageTokens:W,logger:Z}),agentic:({context:$,providerConfig:W,compaction:Z,estimateMessageTokens:Q,logger:J})=>WB({context:$,providerConfig:W,summarizer:Z?.summarizer,preserveRecentTokens:Math.min(Z?.preserveRecentTokens??uV,$.budget.messages.targetTokens),estimateMessageTokens:Q,logger:J})};function AO($){let W=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Z=Math.min(0.95,Math.max(0.05,W));return Math.max(1,Math.floor(Math.min($.messageTriggerTokens,$.messageInputTokens*Z)))}function UO($){let W=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*GO):Math.floor($.triggerTokens*cV),Z=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(W,$.maxInputTokens,Z))}function VB($,W){return Math.max(1,Math.floor($-W))}function fO($){let W=0,Z=!1;for(let Q of $)if(Q.role==="user")Z=!0;else if(Q.role==="assistant"&&Z)W+=1,Z=!1;return W}function L4($,W={}){let Z=$.compaction;if(Z?.enabled!==!0)return;let Q=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=iV(),j=Z?.strategy??"basic",X=FO[j],Y=W.mode??"auto",V=Z?.compact?"custom":j;return async(B)=>{let H=B.apiMessages.reduce((r,d)=>r+J(d),0),G=HO({systemPrompt:B.systemPrompt,messages:B.apiMessages,tools:B.tools}),K=B.messages.reduce((r,d)=>r+J(d),0),F=Math.max(0,G-H),A=f4({maxInputTokens:B.model.info?.maxInputTokens,contextWindow:B.model.info?.contextWindow})??vV,f=A*X2,U=VB(f,F),_=G>=f;if($.logger?.debug("Context compaction diagnostics",{mode:Y,strategy:j,iteration:B.iteration,providerId:$.providerId,modelId:$.modelId,requestInputTokens:G,apiMessageTokens:H,messageInputTokens:K,requestOverheadTokens:F,maxInputTokens:A,requestTriggerTokens:f,messageTriggerTokens:U,thresholdRatio:X2,shouldCompact:_,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:BB(B.apiMessages),...KO(B.apiMessages)}),Y==="auto"&&!_)return;let D,M;if(Y==="auto")D=UO({maxInputTokens:A,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:f,messagePairCount:fO(B.messages)}),M=VB(D,F);else M=AO({messageInputTokens:K,messageTriggerTokens:U,manualTargetRatio:W.manualTargetRatio}),D=F+M;let T={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId,iteration:B.iteration,messages:B.messages,model:B.model,mode:Y,budget:{request:{inputTokens:G,maxInputTokens:A,triggerTokens:f,targetTokens:D,overheadTokens:F,thresholdRatio:X2,utilizationRatio:A>0?G/A:0},messages:{inputTokens:K,triggerTokens:U,targetTokens:M}}},O=Y==="manual"?"manual_compaction":"auto_compaction";B.emitStatusNotice?.(Y==="manual"?"compacting":"auto-compacting",{kind:O,reason:O,phase:"started",iteration:B.iteration,triggerTokens:f,targetTokens:D,maxInputTokens:A,messageTargetTokens:M});let L=B.messages.length,C=Date.now(),R=Z?.compact?await Z.compact(T):await X({context:T,providerConfig:{...Q,abortSignal:B.abortSignal},compaction:Z,estimateMessageTokens:J,logger:$.logger}),p=Date.now()-C,x=$.sessionId??B.conversationId,P={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId??void 0};if(R?.messages){let r=R.messages.reduce((I1,$2)=>I1+J($2),0),d=F+r;if($.logger?.log("Context compaction completed",{severity:"info",strategy:j,maxInputTokens:A,messageInputTokens:K,apiInputTokens:H,requestInputTokens:G,requestOverheadTokens:F,afterMessageTokens:r,afterRequestTokens:d,tokensSaved:G-d,utilizationBefore:`${(G/A*100).toFixed(1)}%`,utilizationAfter:`${(d/A*100).toFixed(1)}%`,thresholdTrigger:`${(X2*100).toFixed(1)}%`,messagesBefore:L,messagesAfter:R.messages.length,messagesRemoved:L-R.messages.length}),B.emitStatusNotice?.(Y==="manual"?"compacted":"auto-compacted",{kind:O,reason:O,phase:"completed",iteration:B.iteration,tokensBefore:G,tokensAfter:d,messagesBefore:L,messagesAfter:R.messages.length,maxInputTokens:A}),tW($.telemetry,{ulid:x,strategy:V,mode:Y,messagesBefore:L,messagesAfter:R.messages.length,messagesRemoved:L-R.messages.length,tokensBefore:G,tokensAfter:d,tokensSaved:G-d,triggerTokens:f,maxInputTokens:A,thresholdRatio:X2,durationMs:p,provider:$.providerId,modelId:$.modelId,...P}),R.budget&&(R.budget.actionCount>0||R.budget.warningCount>0))oY($.telemetry,{ulid:x,strategy:V,mode:Y,policyIntent:R.budget.policyIntent,actionCount:R.budget.actionCount,warningCount:R.budget.warningCount,liveTailHandling:R.budget.liveTailHandling,provider:$.providerId,modelId:$.modelId,...P}),B.emitStatusNotice?.("compaction-budget-adjusted",{kind:"compaction_budget_emergency",reason:"compaction_budget_emergency",iteration:B.iteration,policyIntent:R.budget.policyIntent,actionCount:R.budget.actionCount,warningCount:R.budget.warningCount})}else B.emitStatusNotice?.(Y==="manual"?"compaction-skipped":"auto-compaction-skipped",{kind:O,reason:O,phase:"skipped",iteration:B.iteration,maxInputTokens:A}),eW($.telemetry,{ulid:x,strategy:V,mode:Y,reason:"no_result",tokensBefore:G,triggerTokens:f,maxInputTokens:A,thresholdRatio:X2,durationMs:p,provider:$.providerId,modelId:$.modelId,...P});return R}}function O4($){return async(W)=>{let Z=$.getState?.(),Q=Z?j2(Z,W.messages):void 0;if(Z&&Q){let j=$.compact?await $.compact({...W,messages:Q,apiMessages:Q}):void 0;if(j?.messages){let X=j.systemPrompt??Z.system_prompt,Y=z8({sourceMessages:W.messages,compactedMessages:j.messages,conversationId:W.conversationId,systemPrompt:X});return await $.saveState?.(Y),{...j,...X!==void 0?{systemPrompt:X}:{}}}return{messages:Q,...j?.systemPrompt!==void 0?{systemPrompt:j.systemPrompt}:Z.system_prompt!==void 0?{systemPrompt:Z.system_prompt}:{}}}let J=$.compact?await $.compact(W):void 0;if(J?.messages){let j=z8({sourceMessages:W.messages,compactedMessages:J.messages,conversationId:W.conversationId,systemPrompt:J.systemPrompt});await $.saveState?.(j)}return J}}var sH={};w(sH,{zodToJsonSchema:()=>Eq,validateWithZod:()=>Rq,truncateCommandOutput:()=>H2,resolveToolRoutingConfig:()=>y8,resolveToolPresetName:()=>r1,resolveCoreSelectedToolIds:()=>c9,getCoreHeadlessToolNames:()=>u4,getCoreDefaultEnabledToolIds:()=>v9,getCoreBuiltinToolCatalog:()=>M2,getCoreAcpToolNames:()=>u9,createWebFetchTool:()=>Z3,createWebFetchExecutor:()=>y4,createToolPoliciesWithPreset:()=>N9,createSubmitAndExitTool:()=>X3,createSkillsTool:()=>K2,createShellTool:()=>P4,createShellExecutor:()=>G2,createSearchTool:()=>W3,createSearchExecutor:()=>b4,createReadFilesTool:()=>$3,createFileReadExecutor:()=>S4,createEditorTool:()=>J3,createEditorExecutor:()=>U2,createDefaultToolsWithPreset:()=>R9,createDefaultTools:()=>z$,createDefaultShellExecutor:()=>h4,createDefaultExecutors:()=>S8,createBuiltinTools:()=>N2,createAskQuestionTool:()=>j3,createApplyPatchTool:()=>Q3,createApplyPatchExecutor:()=>A2,computePatchChanges:()=>w8,WebFetchRequestSchema:()=>s7,ToolPresets:()=>a0,TEAM_TOOL_NAMES:()=>I8,SubmitInputSchema:()=>C4,StructuredCommandInputSchema:()=>V2,SkillsInputSchema:()=>E4,SearchCodebaseInputSchema:()=>z4,RunCommandsInputSchema:()=>q4,ReadFilesInputSchema:()=>T4,ReadFileRequestSchema:()=>_9,PatchActionType:()=>F2,MAX_COMMAND_OUTPUT_CHARS:()=>u1,FetchWebContentInputSchema:()=>M4,EditFileInputSchema:()=>N4,DefaultToolNames:()=>T0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>b8,CommandExitError:()=>d1,AskQuestionInputSchema:()=>w4,ApplyPatchInputSchema:()=>R4,ALL_DEFAULT_TOOL_NAMES:()=>_$});import{validateWithZod as Rq,zodToJsonSchema as Eq}from"@cline/shared";var T0={READ_FILES:"read_files",SEARCH_CODEBASE:"search_codebase",RUN_COMMANDS:"run_commands",FETCH_WEB_CONTENT:"fetch_web_content",APPLY_PATCH:"apply_patch",EDITOR:"editor",SKILLS:"skills",ASK:"ask_question",SUBMIT_AND_EXIT:"submit_and_exit"},_$=[T0.READ_FILES,T0.SEARCH_CODEBASE,T0.RUN_COMMANDS,T0.FETCH_WEB_CONTENT,T0.APPLY_PATCH,T0.EDITOR,T0.SKILLS,T0.ASK,T0.SUBMIT_AND_EXIT];O0();import{createTool as O$,validateWithZod as T$,zodToJsonSchema as l1}from"@cline/shared";var GB="__clineInternalTelemetry";function KB($){let W=$?.__clineInternalTelemetry;return W&&typeof W==="object"&&"capture"in W&&typeof W.capture==="function"?W:void 0}import{spawn as NB}from"node:child_process";import{StringDecoder as zO}from"node:string_decoder";import{getDefaultShell as qO,getShellArgs as MO}from"@cline/shared";import{validateWithZod as _O}from"@cline/shared";import{z}from"zod";var L$=6000,Y2=z.string().describe("The absolute path of a text file to read content from"),f9=z.object({start_line:z.number().int().positive().nullable().optional().describe("Optional one-based starting line number to read from; use null or omit for the start of the file"),end_line:z.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit to read to the end of the file or the read cap, whichever comes first")}).describe("Optional inclusive one-based file line range"),_9=z.object({path:Y2,start_line:f9.shape.start_line,end_line:f9.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds. Always include path; start_line/end_line must be on the same object as the path they apply to, never in a separate array element"),T4=z.object({files:z.array(_9).describe("Array of file read requests; each element is one file and must include path. Omit start_line/end_line or set them to null to read from the start; provide integers on the same object as the path to return only that inclusive one-based line range — never emit a range as its own array element. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),FB={start_line:f9.shape.start_line,end_line:f9.shape.end_line},M8=z.union([_9,z.object({file_path:Y2,...FB}).transform(({file_path:$,...W})=>({path:$,...W})),z.object({filePath:Y2,...FB}).transform(({filePath:$,...W})=>({path:$,...W}))]),AB=z.union([T4,M8,z.array(M8),z.array(z.string()),z.string(),z.object({files:z.array(z.union([Y2,M8]))}),z.object({files:M8}),z.object({files:Y2}),z.object({file_paths:z.array(Y2)}),z.object({file_paths:z.string()}),z.object({paths:z.array(z.union([Y2,M8]))}),z.object({paths:M8}),z.object({paths:z.string()})]),z4=z.object({queries:z.array(z.string()).describe("Array of regex search queries to execute")}),UB=z.union([z4,z.array(z.string()),z.string(),z.object({queries:z.string()})]),D9=z.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${L$*2} characters) to avoid timeouts.`),V2=z.object({command:z.string().min(1).describe("The executable to run directly without shell parsing."),args:z.array(z.string()).optional().describe("Optional argv list passed directly to the executable.")}),fB=z.union([D9,V2]),q4=z.object({commands:z.array(D9).describe("Array of complete shell command strings to execute.")}),DO=z.object({commands:z.array(fB)}),DB=z.union([q4,DO,z.object({commands:fB}),z.array(V2),V2,z.object({command:D9}),z.object({cmd:D9}),z.array(z.string()),z.string()]),s7=z.object({url:z.string().describe("The URL to fetch"),prompt:z.string().min(2).describe("Analysis prompt for the fetched content")}),M4=z.object({requests:z.array(s7).describe("Array of the URLs for the web fetch requests")}),N4=z.object({path:z.string().min(1).describe("The absolute path for the action to be performed on"),old_text:z.string().nullable().optional().describe(`Exact text to replace (must match exactly once). Omit this when creating a missing file or inserting via insert_line. Keep this at or below ${L$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:z.string().describe(`The new content to write when creating a missing file, the replacement text for edits, or the inserted text when insert_line is provided. Keep this at or below ${L$} characters when possible; for large edits, use multiple calls with small chunks of old_text and new_text to iteratively edit the file.`),insert_line:z.number().int().nullable().optional().describe("Optional positive one-based boundary line. When provided, the tool inserts new_text before that line instead of performing a replacement edit; use line_count + 1 to append at EOF.")}).describe("Edit a text file by replacing old_text with new_text, create the file with new_text if it does not exist, or insert new_text at insert_line when insert_line is provided. Prefer using this tool for file edits over shell commands. IMPORTANT: large edits can time out, so use small chunks and multiple calls when possible."),R4=z.object({input:z.string().min(1).describe("The freeform apply_patch payload in the canonical patch grammar (e.g *** Begin Patch, *** Update File:, @@, and *** End Patch).")}).describe("Modify or create a text file by applying patches using the canonical apply_patch diff grammar. Prefer sending the patch body directly rather than wrapping it in shell syntax. IMPORTANT: large patches can time out, so use small chunks and multiple calls when possible."),_B=z.union([R4,z.string()]),E4=z.object({skill:z.string().min(1).describe("Name of the skill to execute."),args:z.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),w4=z.object({question:z.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:z.array(z.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),C4=z.object({summary:z.string().min(10).describe("Summarization of the investigation, steps taken, and resolution status to submit at the end of the session. Before submitting, read the problem again along with any provided test's assertions carefully and confirm your fix produces the expected output."),verified:z.boolean().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and taken all necessary steps to resolve the issue.
91
91
  'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
92
- IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function B2($){if($ instanceof Error)return $.message;return String($)}function DB($){if(typeof $.old_text==="string"&&$.old_text.length>_$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${_$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>_$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${_$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class M8 extends Error{timeoutMs;constructor($,W){super($);this.name="TimeoutError",this.timeoutMs=W}}function m1($,W,Z){return Promise.race([$,new Promise((Q,J)=>{setTimeout(()=>J(new M8(Z,W)),W)})])}function _9($){let{path:W,start_line:Z,end_line:Q}=$;if(Z==null&&Q==null)return W;return`${W}:${Z??1}-${Q??"EOF"}`}function _B($){let{start_line:W,end_line:Z}=$;if(W==null||Z==null||W<=Z)return null;return`start_line must be less than or equal to end_line (received start_line: ${W}, end_line: ${Z})`}var FO=new Set(["start_line","end_line"]);function AO($){if($===null||typeof $!=="object"||Array.isArray($))return!1;let W=Object.keys($);return W.length>0&&W.every((Z)=>FO.has(Z))}function fB($){let W=[];for(let Z of $){if(AO(Z)){let Q=W[W.length-1];if(typeof Q==="string"){W[W.length-1]={path:Q,...Z};continue}if(Q!==null&&typeof Q==="object"&&!Array.isArray(Q)&&"path"in Q&&Object.keys(Z).every((J)=>!(J in Q))){W[W.length-1]={...Q,...Z};continue}}W.push(Z)}return W}function LB($){if(Array.isArray($))return fB($);if($!==null&&typeof $==="object")for(let W of["files","paths"]){let Z=$[W];if(Array.isArray(Z))return{...$,[W]:fB(Z)}}return $}function OB($){let W=KO(AB,$);if(typeof W==="string")return[W];if(Array.isArray(W))return W;if("commands"in W)return Array.isArray(W.commands)?W.commands:[W.commands];if("command"in W)return"args"in W?[W]:[W.command];if("cmd"in W)return[W.cmd];return[W]}function UO($){if(typeof $==="string")return $;let W=$.args??[];if(W.length===0)return $.command;let Z=W.map((Q)=>/[\s"]/u.test(Q)?JSON.stringify(Q):Q);return`${$.command} ${Z.join(" ")}`}var s7=200;function TB($){let W=UO($);if(W.length<=s7)return W;let Z=W.length-s7;return`${W.slice(0,s7)} ... [command truncated: ${Z} more chars; full command is in the tool call input]`}var v1=48000;function H2($,W={}){let Z=W.maxChars??48000,Q=W.totalChars??$.length;if($.length<=Z&&Q<=Z)return $;let J=Math.ceil(Z/2),j=Math.max(1,Z-J);return`${$.slice(0,J)}
92
+ IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function B2($){if($ instanceof Error)return $.message;return String($)}function OB($){if(typeof $.old_text==="string"&&$.old_text.length>L$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${L$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>L$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${L$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class N8 extends Error{timeoutMs;constructor($,W){super($);this.name="TimeoutError",this.timeoutMs=W}}function c1($,W,Z){return Promise.race([$,new Promise((Q,J)=>{setTimeout(()=>J(new N8(Z,W)),W)})])}function L9($){let{path:W,start_line:Z,end_line:Q}=$;if(Z==null&&Q==null)return W;return`${W}:${Z??1}-${Q??"EOF"}`}function TB($){let{start_line:W,end_line:Z}=$;if(W==null||Z==null||W<=Z)return null;return`start_line must be less than or equal to end_line (received start_line: ${W}, end_line: ${Z})`}var LO=new Set(["start_line","end_line"]);function OO($){if($===null||typeof $!=="object"||Array.isArray($))return!1;let W=Object.keys($);return W.length>0&&W.every((Z)=>LO.has(Z))}function LB($){let W=[];for(let Z of $){if(OO(Z)){let Q=W[W.length-1];if(typeof Q==="string"){W[W.length-1]={path:Q,...Z};continue}if(Q!==null&&typeof Q==="object"&&!Array.isArray(Q)&&"path"in Q&&Object.keys(Z).every((J)=>!(J in Q))){W[W.length-1]={...Q,...Z};continue}}W.push(Z)}return W}function zB($){if(Array.isArray($))return LB($);if($!==null&&typeof $==="object")for(let W of["files","paths"]){let Z=$[W];if(Array.isArray(Z))return{...$,[W]:LB(Z)}}return $}function qB($){let W=_O(DB,$);if(typeof W==="string")return[W];if(Array.isArray(W))return W;if("commands"in W)return Array.isArray(W.commands)?W.commands:[W.commands];if("command"in W)return"args"in W?[W]:[W.command];if("cmd"in W)return[W.cmd];return[W]}function TO($){if(typeof $==="string")return $;let W=$.args??[];if(W.length===0)return $.command;let Z=W.map((Q)=>/[\s"]/u.test(Q)?JSON.stringify(Q):Q);return`${$.command} ${Z.join(" ")}`}var t7=200;function MB($){let W=TO($);if(W.length<=t7)return W;let Z=W.length-t7;return`${W.slice(0,t7)} ... [command truncated: ${Z} more chars; full command is in the tool call input]`}var u1=48000;function H2($,W={}){let Z=W.maxChars??48000,Q=W.totalChars??$.length;if($.length<=Z&&Q<=Z)return $;let J=Math.ceil(Z/2),j=Math.max(1,Z-J);return`${$.slice(0,J)}
93
93
  [... output truncated: ${Q} chars total. Refine the command (grep, head, tail) to view the elided middle ...]
94
- `+$.slice(-j)}var R8=2000,t7=2000,L9=48000,N8=48000;class c1 extends Error{exitCode;output;constructor($,W){super(`Command exited with code ${$}`);this.exitCode=$;this.output=W;this.name="CommandExitError"}}function qB($){let W=Math.ceil($/2),Z=Math.max(1,$-W),Q=new fO("utf8"),J="",j="",X=0,Y=(V)=>{if(!V)return;X+=V.length;let B=W-J.length;if(B>0){J+=V.slice(0,B),j=(j+V.slice(B)).slice(-Z);return}j=(j+V).slice(-Z)};return{append(V){Y(Q.write(V))},snapshot(){return Y(Q.end()),{text:J+j,totalChars:X,dropped:X>J.length+j.length}}}}function LO($,W,Z,Q,J){return new Promise((j,X)=>{let Y=process.platform==="win32",V=zB($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!Y,windowsHide:!0}),B=V.pid,H=qB(Q),G=qB(Q),K=!1,F=!1,A=(T)=>{if(F)return;F=!0,T()},f=()=>{if(!B)return;if(Y){zB("taskkill",["/pid",String(B),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-B,"SIGKILL")}catch{V.kill("SIGKILL")}},U=(T)=>{K=!0,f(),A(()=>X(T))},_=setTimeout(()=>U(new M8(`Command timed out after ${Z}ms`,Z)),Z),D=()=>U(Error("Command was aborted"));if(W.signal)W.signal.addEventListener("abort",D);let M=()=>{clearTimeout(_),W.signal?.removeEventListener("abort",D)};V.stdout?.on("data",(T)=>{H.append(T)}),V.stderr?.on("data",(T)=>{G.append(T)}),V.on("close",(T)=>{if(M(),K)return;let O=H.snapshot(),L=G.snapshot();if(T!==0){let C=T??1,N=J?O.text+(L.text?`
94
+ `+$.slice(-j)}var R8=2000,e7=2000,O9=48000,E8=48000;class d1 extends Error{exitCode;output;constructor($,W){super(`Command exited with code ${$}`);this.exitCode=$;this.output=W;this.name="CommandExitError"}}function RB($){let W=Math.ceil($/2),Z=Math.max(1,$-W),Q=new zO("utf8"),J="",j="",X=0,Y=(V)=>{if(!V)return;X+=V.length;let B=W-J.length;if(B>0){J+=V.slice(0,B),j=(j+V.slice(B)).slice(-Z);return}j=(j+V).slice(-Z)};return{append(V){Y(Q.write(V))},snapshot(){return Y(Q.end()),{text:J+j,totalChars:X,dropped:X>J.length+j.length}}}}function NO($,W,Z,Q,J){return new Promise((j,X)=>{let Y=process.platform==="win32",V=NB($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!Y,windowsHide:!0}),B=V.pid,H=RB(Q),G=RB(Q),K=!1,F=!1,A=(T)=>{if(F)return;F=!0,T()},f=()=>{if(!B)return;if(Y){NB("taskkill",["/pid",String(B),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-B,"SIGKILL")}catch{V.kill("SIGKILL")}},U=(T)=>{K=!0,f(),A(()=>X(T))},_=setTimeout(()=>U(new N8(`Command timed out after ${Z}ms`,Z)),Z),D=()=>U(Error("Command was aborted"));if(W.signal)W.signal.addEventListener("abort",D);let M=()=>{clearTimeout(_),W.signal?.removeEventListener("abort",D)};V.stdout?.on("data",(T)=>{H.append(T)}),V.stderr?.on("data",(T)=>{G.append(T)}),V.on("close",(T)=>{if(M(),K)return;let O=H.snapshot(),L=G.snapshot();if(T!==0){let C=T??1,R=J?O.text+(L.text?`
95
95
  [stderr]
96
- ${L.text}`:""):O.text,y=O.dropped||J&&L.dropped,P=J?O.totalChars+L.totalChars:O.totalChars;if(y||N.length>Q)N=H2(N,{maxChars:Q,totalChars:P});let d=N.length>0?`[Command exited with code ${C}]
97
- ${N}`:`[Command exited with code ${C}]`;A(()=>X(new c1(C,d)))}else{let C=J?O.text+(L.text?`
96
+ ${L.text}`:""):O.text,p=O.dropped||J&&L.dropped,x=J?O.totalChars+L.totalChars:O.totalChars;if(p||R.length>Q)R=H2(R,{maxChars:Q,totalChars:x});let P=R.length>0?`[Command exited with code ${C}]
97
+ ${R}`:`[Command exited with code ${C}]`;A(()=>X(new d1(C,P)))}else{let C=J?O.text+(L.text?`
98
98
  [stderr]
99
- ${L.text}`:""):O.text;if(O.dropped||J&&L.dropped||C.length>Q){let y=J?O.totalChars+L.totalChars:O.totalChars;C=H2(C,{maxChars:Q,totalChars:y})}A(()=>j(C))}}),V.on("error",(T)=>{M(),A(()=>X(Error(`Failed to execute command: ${T.message}`)))})})}function G2($={}){let{shell:W=DO(process.platform),timeoutMs:Z=30000,env:Q={},combineOutput:J=!0}=$,j=$.maxOutputChars??$.maxOutputBytes??v1;return(X,Y,V)=>{let B=typeof X!=="string";return LO({executable:B?X.command:W,args:B?X.args??[]:_O(W,X),cwd:Y,env:Q},V,Z,j,J)}}function MB($,W){let Z=$.metadata?.[W];return typeof Z==="string"?Z:void 0}function OO($,W){rY(BB($.metadata),{tool_name:"run_commands",effective_timeout_ms:W.effectiveTimeoutMs,timeout_source:W.timeoutSource,command_count:W.commandCount,duration_ms:W.durationMs,ulid:$.sessionId,mode:MB($,"mode"),source:MB($,"source"),session_id:$.sessionId,agent_id:$.agentId,conversation_id:$.conversationId,run_id:$.runId,iteration:$.iteration,tool_call_id:$.toolCallId})}function TO($){let W=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return W?.[1]??W?.[2]??W?.[3]}function zO($){let W=[];for(let Z=0;Z<$.length;Z+=1){let Q=$[Z],J=TO(Q);if(!J){W.push(Q);continue}let j=$.findIndex((Y,V)=>V>Z&&Y.trim()===J);if(j===-1){W.push(Q);continue}let X=[Q];while(Z<j){Z+=1;let Y=$[Z];X.push(Y)}W.push(X.join(`
100
- `))}return W}function qO($){let W=[],Z=[],Q=()=>{if(Z.length>0)W.push(...zO(Z)),Z=[]};for(let J of $){if(typeof J==="string"){Z.push(J);continue}Q(),W.push(J)}return Q(),W}async function MO($,W){let{executor:Z,cwd:Q,context:J,timeoutMs:j,timeoutSource:X}=W;return Promise.all($.map(async(Y)=>{let V=Date.now(),B=TB(Y);try{let H=await m1(Z(Y,Q,J),j,`Command timed out after ${j}ms`);return{query:B,result:H,success:!0}}catch(H){if(H instanceof M8)OO(J,{effectiveTimeoutMs:H.timeoutMs,timeoutSource:X,commandCount:$.length,durationMs:Date.now()-V});if(H instanceof c1)return{query:B,result:H.output,error:H.message,success:!1};let G=B2(H);return{query:B,result:"",error:`Command failed: ${G}`,success:!1}}}))}function e7($,W={}){let Z=W.fileReadTimeoutMs??1e4;return L$({name:"read_files",description:`Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided on the same file entry as its path. When you already know multiple files you need, read them together in one call, and call this tool in the same response as other independent tool calls. Each read returns at most ${R8} lines / ~${Math.round(L9/1024)}k characters; longer files report their total line count, page through them with start_line/end_line on that file's entry. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. `,inputSchema:u1(L4),timeoutMs:Z*2,retryable:!0,maxRetries:1,execute:async(Q,J)=>{let j=O$(GB,LB(Q)),X;if(typeof j==="string")X=[{path:j}];else if(Array.isArray(j))X=j.map((Y)=>typeof Y==="string"?{path:Y}:Y);else if("files"in j)X=(Array.isArray(j.files)?j.files:[j.files]).map((V)=>typeof V==="string"?{path:V}:V);else if("file_paths"in j)X=(Array.isArray(j.file_paths)?j.file_paths:[j.file_paths]).map((V)=>({path:V}));else if("paths"in j)X=(Array.isArray(j.paths)?j.paths:[j.paths]).map((V)=>typeof V==="string"?{path:V}:V);else X=[j];return Promise.all(X.map(async(Y)=>{let V=_B(Y);if(V)return{query:_9(Y),result:"",error:`Invalid file range: ${V}`,success:!1};try{let B=await m1($(Y,J),Z,`File read timed out after ${Z}ms`);return{query:_9(Y),result:B,success:!0}}catch(B){let H=B2(B);return{query:_9(Y),result:"",error:`Error reading file: ${H}`,success:!1}}}))}})}function $3($,W={}){let Z=W.searchTimeoutMs??30000,Q=W.cwd??process.cwd();return L$({name:"search_codebase",description:`Perform regex pattern searches across the codebase. Supports multiple parallel searches. When several search patterns could be useful and do not depend on each other, run them together in one call, and call this tool in the same response as other independent tool calls. Use for finding code patterns, function definitions, class names, imports, etc. Output beyond ~${Math.round(N8/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:u1(O4),timeoutMs:Z*2,retryable:!0,maxRetries:1,execute:async(J,j)=>{let X=O$(KB,J),Y=Array.isArray(X)?X:typeof X==="object"?Array.isArray(X.queries)?X.queries:[X.queries]:[X];return Promise.all(Y.map(async(V)=>{try{let B=await m1($(V,Q,j),Z,`Search timed out after ${Z}ms`);return{query:V,result:B,success:!0}}catch(B){let H=B2(B);return{query:V,result:"",error:`Search failed: ${H}`,success:!1}}}))}})}var RB="Use for listing files, checking git status, running builds, executing tests, etc. Commands must be non-interactive. Commands that require follow-up input like pagers should be skipped or used with supported flags/env (e.g. git --no-pager, --non-interactive) to bypass the interaction steps. ";function w4($,W={}){let Z=W.bashTimeoutMs??30000,Q=W.bashTimeoutMs===void 0?"default_setting":"configured_setting",J=W.cwd??process.cwd(),j=process.platform==="win32";return L$({name:"run_commands",description:j?"Run non-interactive shell commands from the root of the workspace in Windows environment. "+RB+`Output beyond ~${Math.round(v1/1000)}k characters is middle-truncated (start and end preserved); filter output when you need specific sections. Commands run through PowerShell; quote paths and arguments for PowerShell and use ';' to sequence commands. Include multiple commands in the same call when they are independent and safe to run concurrently. When independent reads, searches, or edits are also needed, call those tools in the same response.`:"Run non-interactive shell commands from the root of the workspace. "+RB+`Commands should be properly shell-escaped and targeted to avoid error or timeout. Include multiple commands in the same call when they are independent complete shell commands and safe to run concurrently; multiline scripts and heredocs must be a single command string. When independent reads, searches, or edits are also needed, call those tools in the same response. Output beyond ~${Math.round(v1/1000)}k characters is middle-truncated (start and end preserved); pipe through grep/head/tail when you need specific sections of large output. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.`,inputSchema:u1(T4),timeoutMs:Z*2,retryable:!1,maxRetries:0,execute:async(X,Y)=>{let V=qO(OB(X));return MO(V,{executor:$,cwd:J,context:Y,timeoutMs:Z,timeoutSource:Q})}})}function W3($,W={}){let Z=W.webFetchTimeoutMs??30000;return L$({name:"fetch_web_content",description:"Fetch content from URLs and analyze them using the provided prompts. Use for retrieving documentation, API references, or any web content. Each request includes a URL and a prompt describing what information to extract. Fetch independent URLs together in one call, and call this tool in the same response as other independent tool calls.",inputSchema:u1(z4),timeoutMs:Z*2,retryable:!0,maxRetries:2,execute:async(Q,J)=>{let j=O$(z4,Q);return Promise.all(j.requests.map(async(X)=>{try{let Y=await m1($(X.url,X.prompt,J),Z,`Web fetch timed out after ${Z}ms`);return{query:X.url,result:Y,success:!0}}catch(Y){let V=B2(Y);return{query:X.url,result:"",error:`Error fetching web content: ${V}`,success:!1}}}))}})}var RO=`Use \`apply_patch\` to edit files with the canonical freeform patch grammar. Pass the patch text directly as the \`input\` string. Prefer the exact format below:
99
+ ${L.text}`:""):O.text;if(O.dropped||J&&L.dropped||C.length>Q){let p=J?O.totalChars+L.totalChars:O.totalChars;C=H2(C,{maxChars:Q,totalChars:p})}A(()=>j(C))}}),V.on("error",(T)=>{M(),A(()=>X(Error(`Failed to execute command: ${T.message}`)))})})}function G2($={}){let{shell:W=qO(process.platform),timeoutMs:Z=30000,env:Q={},combineOutput:J=!0}=$,j=$.maxOutputChars??$.maxOutputBytes??u1;return(X,Y,V)=>{let B=typeof X!=="string";return NO({executable:B?X.command:W,args:B?X.args??[]:MO(W,X),cwd:Y,env:Q},V,Z,j,J)}}function EB($,W){let Z=$.metadata?.[W];return typeof Z==="string"?Z:void 0}function RO($,W){aY(KB($.metadata),{tool_name:"run_commands",effective_timeout_ms:W.effectiveTimeoutMs,timeout_source:W.timeoutSource,command_count:W.commandCount,duration_ms:W.durationMs,ulid:$.sessionId,mode:EB($,"mode"),source:EB($,"source"),session_id:$.sessionId,agent_id:$.agentId,conversation_id:$.conversationId,run_id:$.runId,iteration:$.iteration,tool_call_id:$.toolCallId})}function EO($){let W=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return W?.[1]??W?.[2]??W?.[3]}function wO($){let W=[];for(let Z=0;Z<$.length;Z+=1){let Q=$[Z],J=EO(Q);if(!J){W.push(Q);continue}let j=$.findIndex((Y,V)=>V>Z&&Y.trim()===J);if(j===-1){W.push(Q);continue}let X=[Q];while(Z<j){Z+=1;let Y=$[Z];X.push(Y)}W.push(X.join(`
100
+ `))}return W}function CO($){let W=[],Z=[],Q=()=>{if(Z.length>0)W.push(...wO(Z)),Z=[]};for(let J of $){if(typeof J==="string"){Z.push(J);continue}Q(),W.push(J)}return Q(),W}async function PO($,W){let{executor:Z,cwd:Q,context:J,timeoutMs:j,timeoutSource:X}=W;return Promise.all($.map(async(Y)=>{let V=Date.now(),B=MB(Y);try{let H=await c1(Z(Y,Q,J),j,`Command timed out after ${j}ms`);return{query:B,result:H,success:!0}}catch(H){if(H instanceof N8)RO(J,{effectiveTimeoutMs:H.timeoutMs,timeoutSource:X,commandCount:$.length,durationMs:Date.now()-V});if(H instanceof d1)return{query:B,result:H.output,error:H.message,success:!1};let G=B2(H);return{query:B,result:"",error:`Command failed: ${G}`,success:!1}}}))}function $3($,W={}){let Z=W.fileReadTimeoutMs??1e4;return O$({name:"read_files",description:`Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided on the same file entry as its path. When you already know multiple files you need, read them together in one call, and call this tool in the same response as other independent tool calls. Each read returns at most ${R8} lines / ~${Math.round(O9/1024)}k characters; longer files report their total line count, page through them with start_line/end_line on that file's entry. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. `,inputSchema:l1(T4),timeoutMs:Z*2,retryable:!0,maxRetries:1,execute:async(Q,J)=>{let j=T$(AB,zB(Q)),X;if(typeof j==="string")X=[{path:j}];else if(Array.isArray(j))X=j.map((Y)=>typeof Y==="string"?{path:Y}:Y);else if("files"in j)X=(Array.isArray(j.files)?j.files:[j.files]).map((V)=>typeof V==="string"?{path:V}:V);else if("file_paths"in j)X=(Array.isArray(j.file_paths)?j.file_paths:[j.file_paths]).map((V)=>({path:V}));else if("paths"in j)X=(Array.isArray(j.paths)?j.paths:[j.paths]).map((V)=>typeof V==="string"?{path:V}:V);else X=[j];return Promise.all(X.map(async(Y)=>{let V=TB(Y);if(V)return{query:L9(Y),result:"",error:`Invalid file range: ${V}`,success:!1};try{let B=await c1($(Y,J),Z,`File read timed out after ${Z}ms`);return{query:L9(Y),result:B,success:!0}}catch(B){let H=B2(B);return{query:L9(Y),result:"",error:`Error reading file: ${H}`,success:!1}}}))}})}function W3($,W={}){let Z=W.searchTimeoutMs??30000,Q=W.cwd??process.cwd();return O$({name:"search_codebase",description:`Perform regex pattern searches across the codebase. Supports multiple parallel searches. When several search patterns could be useful and do not depend on each other, run them together in one call, and call this tool in the same response as other independent tool calls. Use for finding code patterns, function definitions, class names, imports, etc. Output beyond ~${Math.round(E8/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:l1(z4),timeoutMs:Z*2,retryable:!0,maxRetries:1,execute:async(J,j)=>{let X=T$(UB,J),Y=Array.isArray(X)?X:typeof X==="object"?Array.isArray(X.queries)?X.queries:[X.queries]:[X];return Promise.all(Y.map(async(V)=>{try{let B=await c1($(V,Q,j),Z,`Search timed out after ${Z}ms`);return{query:V,result:B,success:!0}}catch(B){let H=B2(B);return{query:V,result:"",error:`Search failed: ${H}`,success:!1}}}))}})}var wB="Use for listing files, checking git status, running builds, executing tests, etc. Commands must be non-interactive. Commands that require follow-up input like pagers should be skipped or used with supported flags/env (e.g. git --no-pager, --non-interactive) to bypass the interaction steps. ";function P4($,W={}){let Z=W.bashTimeoutMs??30000,Q=W.bashTimeoutMs===void 0?"default_setting":"configured_setting",J=W.cwd??process.cwd(),j=process.platform==="win32";return O$({name:"run_commands",description:j?"Run non-interactive shell commands from the root of the workspace in Windows environment. "+wB+`Output beyond ~${Math.round(u1/1000)}k characters is middle-truncated (start and end preserved); filter output when you need specific sections. Commands run through PowerShell; quote paths and arguments for PowerShell and use ';' to sequence commands. Include multiple commands in the same call when they are independent and safe to run concurrently. When independent reads, searches, or edits are also needed, call those tools in the same response.`:"Run non-interactive shell commands from the root of the workspace. "+wB+`Commands should be properly shell-escaped and targeted to avoid error or timeout. Include multiple commands in the same call when they are independent complete shell commands and safe to run concurrently; multiline scripts and heredocs must be a single command string. When independent reads, searches, or edits are also needed, call those tools in the same response. Output beyond ~${Math.round(u1/1000)}k characters is middle-truncated (start and end preserved); pipe through grep/head/tail when you need specific sections of large output. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.`,inputSchema:l1(q4),timeoutMs:Z*2,retryable:!1,maxRetries:0,execute:async(X,Y)=>{let V=CO(qB(X));return PO(V,{executor:$,cwd:J,context:Y,timeoutMs:Z,timeoutSource:Q})}})}function Z3($,W={}){let Z=W.webFetchTimeoutMs??30000;return O$({name:"fetch_web_content",description:"Fetch content from URLs and analyze them using the provided prompts. Use for retrieving documentation, API references, or any web content. Each request includes a URL and a prompt describing what information to extract. Fetch independent URLs together in one call, and call this tool in the same response as other independent tool calls.",inputSchema:l1(M4),timeoutMs:Z*2,retryable:!0,maxRetries:2,execute:async(Q,J)=>{let j=T$(M4,Q);return Promise.all(j.requests.map(async(X)=>{try{let Y=await c1($(X.url,X.prompt,J),Z,`Web fetch timed out after ${Z}ms`);return{query:X.url,result:Y,success:!0}}catch(Y){let V=B2(Y);return{query:X.url,result:"",error:`Error fetching web content: ${V}`,success:!1}}}))}})}var SO=`Use \`apply_patch\` to edit files with the canonical freeform patch grammar. Pass the patch text directly as the \`input\` string. Prefer the exact format below:
101
101
 
102
102
  *** Begin Patch
103
103
  *** Update File: path/to/file.ts
@@ -133,109 +133,109 @@ Example:
133
133
  </div>
134
134
  );
135
135
  }
136
- *** End Patch`;function Z3($,W={}){let Z=W.applyPatchTimeoutMs??30000,Q=W.cwd??process.cwd();return L$({name:"apply_patch",description:RO,inputSchema:u1(M4),timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(J,j)=>{let X=O$(UB,J),Y=typeof X==="string"?X:X.input;try{return{query:"apply_patch",result:await m1($({input:Y},Q,j),Z,`apply_patch timed out after ${Z}ms`),success:!0}}catch(V){return{query:"apply_patch",result:"",error:`apply_patch failed: ${B2(V)}`,success:!1}}}})}function Q3($,W={}){let Z=W.editorTimeoutMs??30000,Q=W.cwd??process.cwd();return L$({name:"editor",description:"An editor for controlled filesystem edits on the text file at the provided path. Provide `insert_line` to insert `new_text` at a specific line number. Otherwise, the tool replaces `old_text` with `new_text`, or creates the file with `new_text` if file does not exist. Use this tool for making small, precise edits to existing files or creating new files over shell commands. If several edits to different files or non-overlapping regions are already known, emit multiple editor tool calls in the same response instead of serializing them across turns.",inputSchema:u1(q4),timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(J,j)=>{let X=O$(q4,J),Y=X.insert_line==null?"edit":"insert",V=DB(X);if(V)return{query:`${Y}:${X.path}`,result:"",error:V,success:!1};try{let B=await m1($(X,Q,j),Z,`Editor operation timed out after ${Z}ms`);return{query:`${Y}:${X.path}`,result:B,success:!0}}catch(B){let H=B2(B);return{query:`${Y}:${X.path}`,result:"",error:`Editor operation failed: ${H}`,success:!1}}}})}function K2($,W={}){let Z=W.skillsTimeoutMs??15000,Q='Execute a skill within the main conversation. When users ask you to perform tasks, check if any available skills match. When users reference a slash command, invoke it with this tool. Input: `skill` (required) and optional `args`. Example: `skill: "pdf"`, `skill: "commit", args: "-m \\"Fix bug\\""`, `skill: "review-pr", args: "123"`, `skill: "ms-office-suite:pdf"`. When a skill matches the user\'s request, invoking this tool is a blocking requirement before any other response. Never mention a skill without invoking this tool.',J=L$({name:"skills",description:Q,inputSchema:u1(R4),timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(j,X)=>{let Y=O$(R4,j);return m1($(Y.skill,Y.args||void 0,X),Z,`Skills operation timed out after ${Z}ms`)}});return Object.defineProperty(J,"description",{get(){let j=$.configuredSkills?.filter((X)=>!X.disabled).map((X)=>X.name);if(j&&j.length>0)return`${Q} Available skills: ${j.join(", ")}.`;return Q},enumerable:!0,configurable:!0}),J}function J3($){return{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:u1(N4),retryable:!1,maxRetries:0,execute:async(W,Z)=>{let Q=O$(N4,W);return $(Q.question,Q.options,Z)}}}function j3($,W={}){let Z=W.submitTimeoutMs??15000;return L$({name:"submit_and_exit",description:"Submit the final answer and exit the conversation. For example, submit a summary of the investigation and confirm the issue is resolved. You should only submit once all necessary steps are completed. Make sure to verify your output matches the expected format, data types, and file locations specified. Provide a summary of the investigation and confirm the issue is resolved.",inputSchema:u1(E4),lifecycle:{completesRun:!0},timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(Q,J)=>{let j=O$(E4,Q);return m1($(j.summary,j.verified,J),Z,`submit_and_exit timed out after ${Z}ms`)}})}function T$($){let{executors:W,enableReadFiles:Z=!0,enableSearch:Q=!0,enableBash:J=!0,enableWebFetch:j=!0,enableApplyPatch:X=!1,enableEditor:Y=!0,enableSkills:V=!0,enableAskQuestion:B=!0,enableSubmitAndExit:H=!1,...G}=$,K=[];if(Z&&W.readFile)K.push(e7(W.readFile,G));if(Q&&W.search)K.push($3(W.search,G));if(J&&W.bash)K.push(w4(W.bash,G));if(j&&W.webFetch)K.push(W3(W.webFetch,G));if(Y&&W.editor)K.push(Q3(W.editor,G));else if(X&&W.applyPatch)K.push(Z3(W.applyPatch,G));if(V&&W.skills)K.push(K2(W.skills,G));let F=H?W.submit:void 0;if(B&&W.askQuestion&&!F)K.push(J3(W.askQuestion));if(F)K.push(j3(F,G));return K}import*as n0 from"node:fs/promises";import*as a0 from"node:path";var r={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},EB=["%%bash","apply_patch","EOF","```"],F2;((Q)=>{Q.ADD="add";Q.DELETE="delete";Q.UPDATE="update"})(F2||={});class K0 extends Error{constructor($){super($);this.name="DiffError"}}function i0($){let W={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(Z)=>W[Z]??Z).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class X3{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor($,W){this.lines=$;this.currentFiles=W}parse(){this.skipBeginSentinel();while(this.hasMoreLines()&&!this.isEndMarker())this.parseNextAction();if(this.patch.warnings?.length===0)delete this.patch.warnings;return{patch:this.patch,fuzz:this.fuzz}}addWarning($){if(!this.patch.warnings)this.patch.warnings=[];this.patch.warnings.push($)}skipBeginSentinel(){if(this.lines[this.index]?.startsWith(r.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(r.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(r.UPDATE)){this.parseUpdate($.substring(r.UPDATE.length).trim());return}if($?.startsWith(r.DELETE)){this.parseDelete($.substring(r.DELETE.length).trim());return}if($?.startsWith(r.ADD)){this.parseAdd($.substring(r.ADD.length).trim());return}throw new K0(`Unknown line while parsing: ${$}`)}checkDuplicate($,W){if($ in this.patch.actions)throw new K0(`Duplicate ${W} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let W=this.lines[this.index]?.startsWith(r.MOVE)?(this.lines[this.index++]??"").substring(r.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new K0(`Update File Error: Missing File: ${$}`);let Z=this.currentFiles[$]??"",Q=this.parseUpdateFile(Z,$);Q.movePath=W,this.patch.actions[$]=Q,this.currentPath=void 0}parseUpdateFile($,W){let Z={type:"update",chunks:[]},Q=$.split(`
137
- `),J=0,j=[r.END,r.UPDATE,r.DELETE,r.ADD,r.END_FILE];while(!j.some((X)=>this.lines[this.index]?.startsWith(X.trim()))){let X=this.lines[this.index],Y=X?.startsWith("@@ ")?X.substring(3):void 0;if(Y!==void 0||(X==="@@"?X:void 0)!==void 0)this.index++;else if(J!==0)throw new K0(`Invalid Line:
138
- ${this.lines[this.index]}`);if(Y?.trim()){let U=i0(Y.trim());for(let _=J;_<Q.length;_++){let D=Q[_];if(D&&(i0(D)===U||i0(D.trim())===U)){if(J=_+1,i0(D.trim())===U&&i0(D)!==U)this.fuzz++;break}}}let[B,H,G,K]=wO(this.lines,this.index),[F,A,f]=EO(Q,B,J,K);if(F===-1){let U=B.join(`
139
- `);this.addWarning({path:this.currentPath||W,chunkIndex:Z.chunks.length,message:`Could not find matching context (similarity: ${f.toFixed(2)}). Chunk skipped.`,context:U.length>200?`${U.substring(0,200)}...`:U}),this.index=G}else{this.fuzz+=A;for(let U of H)U.origIndex+=F,Z.chunks.push(U);J=F+B.length,this.index=G}}return Z}parseDelete($){if(this.checkDuplicate($,"delete"),!($ in this.currentFiles))throw new K0(`Delete File Error: Missing File: ${$}`);this.patch.actions[$]={type:"delete",chunks:[]},this.index++}parseAdd($){if(this.checkDuplicate($,"add"),$ in this.currentFiles)throw new K0(`Add File Error: File already exists: ${$}`);this.index++;let W=[],Z=[r.END,r.UPDATE,r.DELETE,r.ADD];while(this.hasMoreLines()&&!Z.some((Q)=>this.lines[this.index]?.startsWith(Q.trim()))){let Q=this.lines[this.index++];if(Q===void 0)break;if(!Q.startsWith("+"))throw new K0(`Invalid Add File line (missing '+'): ${Q}`);W.push(Q.substring(1))}this.patch.actions[$]={type:"add",newFile:W.join(`
140
- `),chunks:[]}}}function NB($,W){let Z=$.length>W.length?$:W,Q=$.length>W.length?W:$;if(Z.length===0)return 1;let J=NO(Q,Z);return(Z.length-J)/Z.length}function NO($,W){let Z=W.length+1,Q=$.length+1,J=Array(Z*Q).fill(0),j=(Y,V)=>J[Y*Q+V]??0,X=(Y,V,B)=>{J[Y*Q+V]=B};for(let Y=0;Y<=W.length;Y++)X(Y,0,Y);for(let Y=0;Y<=$.length;Y++)X(0,Y,Y);for(let Y=1;Y<=W.length;Y++)for(let V=1;V<=$.length;V++)if(W[Y-1]===$[V-1])X(Y,V,j(Y-1,V-1));else X(Y,V,1+Math.min(j(Y-1,V-1),j(Y,V-1),j(Y-1,V)));return j(W.length,$.length)}function EO($,W,Z,Q){if(W.length===0)return[Z,0,1];let J=0,j=(X)=>{let Y=i0(W.join(`
141
- `));for(let B=X;B<$.length;B++){let H=i0($.slice(B,B+W.length).join(`
142
- `));if(H===Y)return[B,0,1];let G=NB(H,Y);if(G>J)J=G}for(let B=X;B<$.length;B++){let H=i0($.slice(B,B+W.length).map((K)=>K.trimEnd()).join(`
143
- `)),G=i0(W.map((K)=>K.trimEnd()).join(`
144
- `));if(H===G)return[B,1,1]}for(let B=X;B<$.length;B++){let H=i0($.slice(B,B+W.length).map((K)=>K.trim()).join(`
145
- `)),G=i0(W.map((K)=>K.trim()).join(`
146
- `));if(H===G)return[B,100,1]}let V=0.66;for(let B=X;B<$.length;B++){let H=i0($.slice(B,B+W.length).join(`
147
- `)),G=NB(H,Y);if(G>=V)return[B,1000,G];if(G>J)J=G}return[-1,0,J]};if(Q){let[X,Y,V]=j($.length-W.length);if(X!==-1)return[X,Y,V];return[X,Y,V]=j(Z),[X,Y+1e4,V]}return j(Z)}function wO($,W){let Z=W,Q=[],J=[],j=[],X=[],Y="keep",V=["@@",r.END,r.UPDATE,r.DELETE,r.ADD,r.END_FILE];while(Z<$.length){let B=$[Z];if(!B||V.some((K)=>B.startsWith(K.trim())))break;if(B==="***")break;if(B.startsWith("***"))throw new K0(`Invalid line: ${B}`);Z++;let H=Y,G=B;if(G[0]==="+")Y="add";else if(G[0]==="-")Y="delete";else if(G[0]===" ")Y="keep";else Y="keep",G=` ${G}`;if(G=G.slice(1),Y==="keep"&&H!==Y){if(j.length||J.length)X.push({origIndex:Q.length-J.length,delLines:J,insLines:j});J=[],j=[]}if(Y==="delete")J.push(G),Q.push(G);else if(Y==="add")j.push(G);else Q.push(G)}if(j.length||J.length)X.push({origIndex:Q.length-J.length,delLines:J,insLines:j});if(Z<$.length&&$[Z]===r.END_FILE)return Z++,[Q,X,Z,!0];return[Q,X,Z,!1]}function Y3($,W,Z){let Q=a0.isAbsolute(W),J=Q?a0.normalize(W):a0.resolve($,W);if(!Z||Q)return J;let j=a0.relative($,J);if(j.startsWith("..")||a0.isAbsolute(j))throw new K0(`Path must stay within cwd: ${W}`);return J}function CO($){return $.split(`
148
- `).map((W)=>W.replace(/\r$/,""))}function wB($){if($.trim()==="")return!1;return EB.some((W)=>$.startsWith(W))}function PO($){let W=0,Z=$.length;while(W<Z&&wB($[W]??""))W++;while(Z>W&&wB($[Z-1]??""))Z--;return $.slice(W,Z)}function SO($){let W=CO($),Z=W.findIndex((X)=>X.startsWith(r.BEGIN)),Q=-1;for(let X=W.length-1;X>=0;X--)if(W[X]?.startsWith(r.END)){Q=X;break}if(Z!==-1||Q!==-1){if(Z===-1||Q===-1||Q<Z)throw new K0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:W.slice(Z,Q+1)}}let J=PO(W);while(J.length>0&&J[0]==="")J.shift();while(J.length>0&&J[J.length-1]==="")J.pop();return{lines:[r.BEGIN,...J,r.END]}}function bO($,W){let Z=new Set;for(let Q of $)for(let J of W)if(Q.startsWith(J)){Z.add(Q.substring(J.length).trim());break}return[...Z]}function yO($,W,Z){if(W.length===0)return $;let Q=$.split(`
149
- `),J=[],j=0;for(let X of W){if(X.origIndex>Q.length)throw new K0(`${Z}: chunk.origIndex ${X.origIndex} > lines.length ${Q.length}`);if(j>X.origIndex)throw new K0(`${Z}: currentIndex ${j} > chunk.origIndex ${X.origIndex}`);J.push(...Q.slice(j,X.origIndex)),J.push(...X.insLines),j=X.origIndex+X.delLines.length}return J.push(...Q.slice(j)),J.join(`
150
- `)}async function hO($,W,Z,Q){let J=bO($,[r.UPDATE,r.DELETE]),j={};for(let X of J){let Y=Y3(W,X,Q),V;try{V=await n0.readFile(Y,Z)}catch{throw new K0(`File not found: ${X}`)}j[X]=V.replace(/\r\n/g,`
151
- `)}return j}function kO($,W){let Z={};for(let[Q,J]of Object.entries($.actions))switch(J.type){case"delete":Z[Q]={type:"delete",oldContent:W[Q]};break;case"add":if(J.newFile===void 0)throw new K0("ADD action without file content");Z[Q]={type:"add",newContent:J.newFile};break;case"update":Z[Q]={type:"update",oldContent:W[Q],newContent:yO(W[Q]??"",J.chunks,Q),movePath:J.movePath};break}return Z}function IO($){let W=[`Patch could not be applied because ${$.length} hunk${$.length===1?"":"s"} did not match the current file content.`];for(let Z of $){let Q=Z.chunkIndex===void 0?"unknown":String(Z.chunkIndex+1);if(W.push(`${Z.path}: hunk ${Q}: ${Z.message}`),Z.context)W.push(`Context:
136
+ *** End Patch`;function Q3($,W={}){let Z=W.applyPatchTimeoutMs??30000,Q=W.cwd??process.cwd();return O$({name:"apply_patch",description:SO,inputSchema:l1(R4),timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(J,j)=>{let X=T$(_B,J),Y=typeof X==="string"?X:X.input;try{return{query:"apply_patch",result:await c1($({input:Y},Q,j),Z,`apply_patch timed out after ${Z}ms`),success:!0}}catch(V){return{query:"apply_patch",result:"",error:`apply_patch failed: ${B2(V)}`,success:!1}}}})}function J3($,W={}){let Z=W.editorTimeoutMs??30000,Q=W.cwd??process.cwd();return O$({name:"editor",description:"An editor for controlled filesystem edits on the text file at the provided path. Provide `insert_line` to insert `new_text` at a specific line number. Otherwise, the tool replaces `old_text` with `new_text`, or creates the file with `new_text` if file does not exist. Use this tool for making small, precise edits to existing files or creating new files over shell commands. If several edits to different files or non-overlapping regions are already known, emit multiple editor tool calls in the same response instead of serializing them across turns.",inputSchema:l1(N4),timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(J,j)=>{let X=T$(N4,J),Y=X.insert_line==null?"edit":"insert",V=OB(X);if(V)return{query:`${Y}:${X.path}`,result:"",error:V,success:!1};try{let B=await c1($(X,Q,j),Z,`Editor operation timed out after ${Z}ms`);return{query:`${Y}:${X.path}`,result:B,success:!0}}catch(B){let H=B2(B);return{query:`${Y}:${X.path}`,result:"",error:`Editor operation failed: ${H}`,success:!1}}}})}function K2($,W={}){let Z=W.skillsTimeoutMs??15000,Q='Execute a skill within the main conversation. When users ask you to perform tasks, check if any available skills match. When users reference a slash command, invoke it with this tool. Input: `skill` (required) and optional `args`. Example: `skill: "pdf"`, `skill: "commit", args: "-m \\"Fix bug\\""`, `skill: "review-pr", args: "123"`, `skill: "ms-office-suite:pdf"`. When a skill matches the user\'s request, invoking this tool is a blocking requirement before any other response. Never mention a skill without invoking this tool.',J=O$({name:"skills",description:Q,inputSchema:l1(E4),timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(j,X)=>{let Y=T$(E4,j);return c1($(Y.skill,Y.args||void 0,X),Z,`Skills operation timed out after ${Z}ms`)}});return Object.defineProperty(J,"description",{get(){let j=$.configuredSkills?.filter((X)=>!X.disabled).map((X)=>X.name);if(j&&j.length>0)return`${Q} Available skills: ${j.join(", ")}.`;return Q},enumerable:!0,configurable:!0}),J}function j3($){return{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:l1(w4),retryable:!1,maxRetries:0,execute:async(W,Z)=>{let Q=T$(w4,W);return $(Q.question,Q.options,Z)}}}function X3($,W={}){let Z=W.submitTimeoutMs??15000;return O$({name:"submit_and_exit",description:"Submit the final answer and exit the conversation. For example, submit a summary of the investigation and confirm the issue is resolved. You should only submit once all necessary steps are completed. Make sure to verify your output matches the expected format, data types, and file locations specified. Provide a summary of the investigation and confirm the issue is resolved.",inputSchema:l1(C4),lifecycle:{completesRun:!0},timeoutMs:Z,retryable:!1,maxRetries:0,execute:async(Q,J)=>{let j=T$(C4,Q);return c1($(j.summary,j.verified,J),Z,`submit_and_exit timed out after ${Z}ms`)}})}function z$($){let{executors:W,enableReadFiles:Z=!0,enableSearch:Q=!0,enableBash:J=!0,enableWebFetch:j=!0,enableApplyPatch:X=!1,enableEditor:Y=!0,enableSkills:V=!0,enableAskQuestion:B=!0,enableSubmitAndExit:H=!1,...G}=$,K=[];if(Z&&W.readFile)K.push($3(W.readFile,G));if(Q&&W.search)K.push(W3(W.search,G));if(J&&W.bash)K.push(P4(W.bash,G));if(j&&W.webFetch)K.push(Z3(W.webFetch,G));if(Y&&W.editor)K.push(J3(W.editor,G));else if(X&&W.applyPatch)K.push(Q3(W.applyPatch,G));if(V&&W.skills)K.push(K2(W.skills,G));let F=H?W.submit:void 0;if(B&&W.askQuestion&&!F)K.push(j3(W.askQuestion));if(F)K.push(X3(F,G));return K}import*as i0 from"node:fs/promises";import*as n0 from"node:path";var n={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},PB=["%%bash","apply_patch","EOF","```"],F2;((Q)=>{Q.ADD="add";Q.DELETE="delete";Q.UPDATE="update"})(F2||={});class G0 extends Error{constructor($){super($);this.name="DiffError"}}function r0($){let W={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(Z)=>W[Z]??Z).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class Y3{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor($,W){this.lines=$;this.currentFiles=W}parse(){this.skipBeginSentinel();while(this.hasMoreLines()&&!this.isEndMarker())this.parseNextAction();if(this.patch.warnings?.length===0)delete this.patch.warnings;return{patch:this.patch,fuzz:this.fuzz}}addWarning($){if(!this.patch.warnings)this.patch.warnings=[];this.patch.warnings.push($)}skipBeginSentinel(){if(this.lines[this.index]?.startsWith(n.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(n.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(n.UPDATE)){this.parseUpdate($.substring(n.UPDATE.length).trim());return}if($?.startsWith(n.DELETE)){this.parseDelete($.substring(n.DELETE.length).trim());return}if($?.startsWith(n.ADD)){this.parseAdd($.substring(n.ADD.length).trim());return}throw new G0(`Unknown line while parsing: ${$}`)}checkDuplicate($,W){if($ in this.patch.actions)throw new G0(`Duplicate ${W} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let W=this.lines[this.index]?.startsWith(n.MOVE)?(this.lines[this.index++]??"").substring(n.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new G0(`Update File Error: Missing File: ${$}`);let Z=this.currentFiles[$]??"",Q=this.parseUpdateFile(Z,$);Q.movePath=W,this.patch.actions[$]=Q,this.currentPath=void 0}parseUpdateFile($,W){let Z={type:"update",chunks:[]},Q=$.split(`
137
+ `),J=0,j=[n.END,n.UPDATE,n.DELETE,n.ADD,n.END_FILE];while(!j.some((X)=>this.lines[this.index]?.startsWith(X.trim()))){let X=this.lines[this.index],Y=X?.startsWith("@@ ")?X.substring(3):void 0;if(Y!==void 0||(X==="@@"?X:void 0)!==void 0)this.index++;else if(J!==0)throw new G0(`Invalid Line:
138
+ ${this.lines[this.index]}`);if(Y?.trim()){let U=r0(Y.trim());for(let _=J;_<Q.length;_++){let D=Q[_];if(D&&(r0(D)===U||r0(D.trim())===U)){if(J=_+1,r0(D.trim())===U&&r0(D)!==U)this.fuzz++;break}}}let[B,H,G,K]=hO(this.lines,this.index),[F,A,f]=yO(Q,B,J,K);if(F===-1){let U=B.join(`
139
+ `);this.addWarning({path:this.currentPath||W,chunkIndex:Z.chunks.length,message:`Could not find matching context (similarity: ${f.toFixed(2)}). Chunk skipped.`,context:U.length>200?`${U.substring(0,200)}...`:U}),this.index=G}else{this.fuzz+=A;for(let U of H)U.origIndex+=F,Z.chunks.push(U);J=F+B.length,this.index=G}}return Z}parseDelete($){if(this.checkDuplicate($,"delete"),!($ in this.currentFiles))throw new G0(`Delete File Error: Missing File: ${$}`);this.patch.actions[$]={type:"delete",chunks:[]},this.index++}parseAdd($){if(this.checkDuplicate($,"add"),$ in this.currentFiles)throw new G0(`Add File Error: File already exists: ${$}`);this.index++;let W=[],Z=[n.END,n.UPDATE,n.DELETE,n.ADD];while(this.hasMoreLines()&&!Z.some((Q)=>this.lines[this.index]?.startsWith(Q.trim()))){let Q=this.lines[this.index++];if(Q===void 0)break;if(!Q.startsWith("+"))throw new G0(`Invalid Add File line (missing '+'): ${Q}`);W.push(Q.substring(1))}this.patch.actions[$]={type:"add",newFile:W.join(`
140
+ `),chunks:[]}}}function CB($,W){let Z=$.length>W.length?$:W,Q=$.length>W.length?W:$;if(Z.length===0)return 1;let J=bO(Q,Z);return(Z.length-J)/Z.length}function bO($,W){let Z=W.length+1,Q=$.length+1,J=Array(Z*Q).fill(0),j=(Y,V)=>J[Y*Q+V]??0,X=(Y,V,B)=>{J[Y*Q+V]=B};for(let Y=0;Y<=W.length;Y++)X(Y,0,Y);for(let Y=0;Y<=$.length;Y++)X(0,Y,Y);for(let Y=1;Y<=W.length;Y++)for(let V=1;V<=$.length;V++)if(W[Y-1]===$[V-1])X(Y,V,j(Y-1,V-1));else X(Y,V,1+Math.min(j(Y-1,V-1),j(Y,V-1),j(Y-1,V)));return j(W.length,$.length)}function yO($,W,Z,Q){if(W.length===0)return[Z,0,1];let J=0,j=(X)=>{let Y=r0(W.join(`
141
+ `));for(let B=X;B<$.length;B++){let H=r0($.slice(B,B+W.length).join(`
142
+ `));if(H===Y)return[B,0,1];let G=CB(H,Y);if(G>J)J=G}for(let B=X;B<$.length;B++){let H=r0($.slice(B,B+W.length).map((K)=>K.trimEnd()).join(`
143
+ `)),G=r0(W.map((K)=>K.trimEnd()).join(`
144
+ `));if(H===G)return[B,1,1]}for(let B=X;B<$.length;B++){let H=r0($.slice(B,B+W.length).map((K)=>K.trim()).join(`
145
+ `)),G=r0(W.map((K)=>K.trim()).join(`
146
+ `));if(H===G)return[B,100,1]}let V=0.66;for(let B=X;B<$.length;B++){let H=r0($.slice(B,B+W.length).join(`
147
+ `)),G=CB(H,Y);if(G>=V)return[B,1000,G];if(G>J)J=G}return[-1,0,J]};if(Q){let[X,Y,V]=j($.length-W.length);if(X!==-1)return[X,Y,V];return[X,Y,V]=j(Z),[X,Y+1e4,V]}return j(Z)}function hO($,W){let Z=W,Q=[],J=[],j=[],X=[],Y="keep",V=["@@",n.END,n.UPDATE,n.DELETE,n.ADD,n.END_FILE];while(Z<$.length){let B=$[Z];if(!B||V.some((K)=>B.startsWith(K.trim())))break;if(B==="***")break;if(B.startsWith("***"))throw new G0(`Invalid line: ${B}`);Z++;let H=Y,G=B;if(G[0]==="+")Y="add";else if(G[0]==="-")Y="delete";else if(G[0]===" ")Y="keep";else Y="keep",G=` ${G}`;if(G=G.slice(1),Y==="keep"&&H!==Y){if(j.length||J.length)X.push({origIndex:Q.length-J.length,delLines:J,insLines:j});J=[],j=[]}if(Y==="delete")J.push(G),Q.push(G);else if(Y==="add")j.push(G);else Q.push(G)}if(j.length||J.length)X.push({origIndex:Q.length-J.length,delLines:J,insLines:j});if(Z<$.length&&$[Z]===n.END_FILE)return Z++,[Q,X,Z,!0];return[Q,X,Z,!1]}function V3($,W,Z){let Q=n0.isAbsolute(W),J=Q?n0.normalize(W):n0.resolve($,W);if(!Z||Q)return J;let j=n0.relative($,J);if(j.startsWith("..")||n0.isAbsolute(j))throw new G0(`Path must stay within cwd: ${W}`);return J}function kO($){return $.split(`
148
+ `).map((W)=>W.replace(/\r$/,""))}function SB($){if($.trim()==="")return!1;return PB.some((W)=>$.startsWith(W))}function IO($){let W=0,Z=$.length;while(W<Z&&SB($[W]??""))W++;while(Z>W&&SB($[Z-1]??""))Z--;return $.slice(W,Z)}function xO($){let W=kO($),Z=W.findIndex((X)=>X.startsWith(n.BEGIN)),Q=-1;for(let X=W.length-1;X>=0;X--)if(W[X]?.startsWith(n.END)){Q=X;break}if(Z!==-1||Q!==-1){if(Z===-1||Q===-1||Q<Z)throw new G0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:W.slice(Z,Q+1)}}let J=IO(W);while(J.length>0&&J[0]==="")J.shift();while(J.length>0&&J[J.length-1]==="")J.pop();return{lines:[n.BEGIN,...J,n.END]}}function gO($,W){let Z=new Set;for(let Q of $)for(let J of W)if(Q.startsWith(J)){Z.add(Q.substring(J.length).trim());break}return[...Z]}function mO($,W,Z){if(W.length===0)return $;let Q=$.split(`
149
+ `),J=[],j=0;for(let X of W){if(X.origIndex>Q.length)throw new G0(`${Z}: chunk.origIndex ${X.origIndex} > lines.length ${Q.length}`);if(j>X.origIndex)throw new G0(`${Z}: currentIndex ${j} > chunk.origIndex ${X.origIndex}`);J.push(...Q.slice(j,X.origIndex)),J.push(...X.insLines),j=X.origIndex+X.delLines.length}return J.push(...Q.slice(j)),J.join(`
150
+ `)}async function vO($,W,Z,Q){let J=gO($,[n.UPDATE,n.DELETE]),j={};for(let X of J){let Y=V3(W,X,Q),V;try{V=await i0.readFile(Y,Z)}catch{throw new G0(`File not found: ${X}`)}j[X]=V.replace(/\r\n/g,`
151
+ `)}return j}function cO($,W){let Z={};for(let[Q,J]of Object.entries($.actions))switch(J.type){case"delete":Z[Q]={type:"delete",oldContent:W[Q]};break;case"add":if(J.newFile===void 0)throw new G0("ADD action without file content");Z[Q]={type:"add",newContent:J.newFile};break;case"update":Z[Q]={type:"update",oldContent:W[Q],newContent:mO(W[Q]??"",J.chunks,Q),movePath:J.movePath};break}return Z}function uO($){let W=[`Patch could not be applied because ${$.length} hunk${$.length===1?"":"s"} did not match the current file content.`];for(let Z of $){let Q=Z.chunkIndex===void 0?"unknown":String(Z.chunkIndex+1);if(W.push(`${Z.path}: hunk ${Q}: ${Z.message}`),Z.context)W.push(`Context:
152
152
  ${Z.context}`)}return W.join(`
153
- `)}async function xO($,W,Z,Q){let J=[];for(let[j,X]of Object.entries($)){let Y=Y3(W,j,Q);switch(X.type){case"delete":await n0.rm(Y,{force:!0}),J.push(`${j}: [deleted]`);break;case"add":if(X.newContent===void 0)throw new K0(`Cannot create ${j} with no content`);await n0.mkdir(a0.dirname(Y),{recursive:!0}),await n0.writeFile(Y,X.newContent,{encoding:Z}),J.push(j);break;case"update":{if(X.newContent===void 0)throw new K0(`UPDATE change for ${j} has no new content`);if(X.movePath){let V=Y3(W,X.movePath,Q);await n0.mkdir(a0.dirname(V),{recursive:!0}),await n0.writeFile(V,X.newContent,{encoding:Z}),await n0.rm(Y,{force:!0}),J.push(`${j} -> ${X.movePath}`)}else await n0.writeFile(Y,X.newContent,{encoding:Z}),J.push(j);break}}}return J}async function E8($,W,Z={}){let{encoding:Q="utf-8",restrictToCwd:J=!0}=Z,j=SO($),X=await hO(j.lines,W,Q,J),Y=new X3(j.lines,X),{patch:V,fuzz:B}=Y.parse();if(V.warnings&&V.warnings.length>0)throw new K0(IO(V.warnings));return{changes:kO(V,X),fuzz:B}}function A2($={}){let{encoding:W="utf-8",restrictToCwd:Z=!0}=$;return async(Q,J,j)=>{let{changes:X,fuzz:Y}=await E8(Q.input,J,{encoding:W,restrictToCwd:Z}),V=await xO(X,J,W,Z),B=["Successfully applied patch to the following files:"];for(let H of V)B.push(H);if(Y>0)B.push(`Note: Patch applied with fuzz factor ${Y}`);return B.join(`
154
- `)}}import*as F1 from"node:fs/promises";import*as K1 from"node:path";function gO($,W,Z){let Q=K1.isAbsolute(W),J=Q?K1.normalize(W):K1.resolve($,W);if(!Z)return J;if(Q)return J;let j=K1.relative($,J);if(j.startsWith("..")||K1.isAbsolute(j))throw Error(`Path must stay within cwd: ${W}`);return J}function mO($,W){if(W.length===0)return 0;return $.split(W).length-1}function vO($,W,Z){let Q=$.split(`
153
+ `)}async function dO($,W,Z,Q){let J=[];for(let[j,X]of Object.entries($)){let Y=V3(W,j,Q);switch(X.type){case"delete":await i0.rm(Y,{force:!0}),J.push(`${j}: [deleted]`);break;case"add":if(X.newContent===void 0)throw new G0(`Cannot create ${j} with no content`);await i0.mkdir(n0.dirname(Y),{recursive:!0}),await i0.writeFile(Y,X.newContent,{encoding:Z}),J.push(j);break;case"update":{if(X.newContent===void 0)throw new G0(`UPDATE change for ${j} has no new content`);if(X.movePath){let V=V3(W,X.movePath,Q);await i0.mkdir(n0.dirname(V),{recursive:!0}),await i0.writeFile(V,X.newContent,{encoding:Z}),await i0.rm(Y,{force:!0}),J.push(`${j} -> ${X.movePath}`)}else await i0.writeFile(Y,X.newContent,{encoding:Z}),J.push(j);break}}}return J}async function w8($,W,Z={}){let{encoding:Q="utf-8",restrictToCwd:J=!0}=Z,j=xO($),X=await vO(j.lines,W,Q,J),Y=new Y3(j.lines,X),{patch:V,fuzz:B}=Y.parse();if(V.warnings&&V.warnings.length>0)throw new G0(uO(V.warnings));return{changes:cO(V,X),fuzz:B}}function A2($={}){let{encoding:W="utf-8",restrictToCwd:Z=!0}=$;return async(Q,J,j)=>{let{changes:X,fuzz:Y}=await w8(Q.input,J,{encoding:W,restrictToCwd:Z}),V=await dO(X,J,W,Z),B=["Successfully applied patch to the following files:"];for(let H of V)B.push(H);if(Y>0)B.push(`Note: Patch applied with fuzz factor ${Y}`);return B.join(`
154
+ `)}}import*as A1 from"node:fs/promises";import*as F1 from"node:path";function lO($,W,Z){let Q=F1.isAbsolute(W),J=Q?F1.normalize(W):F1.resolve($,W);if(!Z)return J;if(Q)return J;let j=F1.relative($,J);if(j.startsWith("..")||F1.isAbsolute(j))throw Error(`Path must stay within cwd: ${W}`);return J}function pO($,W){if(W.length===0)return 0;return $.split(W).length-1}function rO($,W,Z){let Q=$.split(`
155
155
  `),J=W.split(`
156
156
  `),j=0;while(j<Q.length&&j<J.length&&Q[j]===J[j])j++;let X=Q.length,Y=J.length;while(X>j&&Y>j&&Q[X-1]===J[Y-1])X--,Y--;let V=X-j,B=Y-j,H=V,G=B;if(V+B>Z)H=Math.min(V,Math.max(Math.ceil(Z/2),Z-B)),G=Math.min(B,Z-H);let K=["```diff"];for(let f=j;f<j+H;f++)K.push(`-${f+1}: ${Q[f]}`);for(let f=j;f<j+G;f++)K.push(`+${f+1}: ${J[f]}`);let F=V-H,A=B-G;if(F>0||A>0)K.push(`... diff truncated (${F} more removed, ${A} more added lines) ...`);return K.push("```"),K.join(`
157
- `)}async function cO($,W,Z){return await F1.mkdir(K1.dirname($),{recursive:!0}),await F1.writeFile($,W,{encoding:Z}),`File created successfully at: ${$}`}async function uO($){try{return await F1.access($),!0}catch{return!1}}async function dO($,W,Z,Q,J){let j=await F1.readFile($,Q),X=mO(j,W);if(X===0)throw Error(`No replacement performed: text not found in ${$}.`);if(X>1)throw Error(`No replacement performed: multiple occurrences of text found in ${$}.`);let Y=j.replace(W,Z??"");await F1.writeFile($,Y,{encoding:Q});let V=vO(j,Y,J);return`Edited ${$}
158
- ${V}`}async function lO($,W,Z,Q){let j=(await F1.readFile($,Q)).split(`
157
+ `)}async function iO($,W,Z){return await A1.mkdir(F1.dirname($),{recursive:!0}),await A1.writeFile($,W,{encoding:Z}),`File created successfully at: ${$}`}async function nO($){try{return await A1.access($),!0}catch{return!1}}async function aO($,W,Z,Q,J){let j=await A1.readFile($,Q),X=pO(j,W);if(X===0)throw Error(`No replacement performed: text not found in ${$}.`);if(X>1)throw Error(`No replacement performed: multiple occurrences of text found in ${$}.`);let Y=j.replace(W,Z??"");await A1.writeFile($,Y,{encoding:Q});let V=rO(j,Y,J);return`Edited ${$}
158
+ ${V}`}async function oO($,W,Z,Q){let j=(await A1.readFile($,Q)).split(`
159
159
  `),X=j.length+1;if(W<1||W>X)throw Error(`Invalid insert_line: ${W}. insert_line must be a positive one-based boundary line in the range 1-${X}. Use ${X} to append at EOF.`);let Y=W-1;return j.splice(Y,0,...Z.split(`
160
- `)),await F1.writeFile($,j.join(`
161
- `),{encoding:Q}),`Inserted content at line ${W} in ${$}.`}function U2($={}){let{encoding:W="utf-8",restrictToCwd:Z=!0,maxDiffLines:Q=200}=$;return async(J,j,X)=>{let Y=gO(j,J.path,Z);if(J.insert_line!=null)return lO(Y,J.insert_line,J.new_text,W);if(!await uO(Y))return cO(Y,J.new_text,W);if(J.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return dO(Y,J.old_text,J.new_text,W,Q)}}import{createReadStream as pO}from"node:fs";import*as O9 from"node:fs/promises";import*as z$ from"node:path";import{createInterface as rO}from"node:readline";import{resolveExistingFilePath as iO}from"@cline/shared/storage";var nO=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),aO={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},CB=1e8,oO=50000;function PB($){let{reason:W}=$;if(W instanceof Error)return W;if(W!==void 0)return Error(String(W));return Error("File read was aborted")}async function sO($,W,Z,Q,J,j){if(j?.aborted)throw PB(j);let X=Math.max(Q??1,1),Y=J??Number.POSITIVE_INFINITY,V=Number.isFinite(Y),B=V?Y:X+oO-1,H=[],G=0,K=0,F=!1,A=!1,f=Number.isFinite(Y)?Math.min(Y,X+R8-1):X+R8-1,U=Z?String(f).length+3:0,_=pO($,{encoding:W}),D=rO({input:_,crlfDelay:Number.POSITIVE_INFINITY}),M=j?()=>_.destroy(PB(j)):void 0;if(j&&M)j.addEventListener("abort",M,{once:!0});try{for await(let y of D){if(K+=1,K>Y){K=Y;break}if(!V&&F&&K>=B){A=!0;break}if(K<X||F)continue;if(H.length>=R8){F=!0;continue}let P=y;if(P.length>t7)P=`${P.slice(0,t7)} [line truncated]`;let d=G+P.length+U+1;if(d>L9&&H.length>0){F=!0;continue}H.push({lineNumber:K,text:P}),G=d}}finally{if(j&&M)j.removeEventListener("abort",M);D.close(),_.destroy()}let T=String(H[H.length-1]?.lineNumber??K).length,O=H.map(({lineNumber:y,text:P})=>Z?`${String(y).padStart(T," ")} | ${P}`:P).join(`
162
- `),L=H[H.length-1]?.lineNumber;if(L===void 0)return O;let C=Math.min(Y,K);if(L>=C)return O;let N=A?`${K}+ lines`:C;return`${O}
163
-
164
- [Showing lines ${X}-${L} of ${N}. Use start_line/end_line to read other sections.]`}function C4($={}){let{maxFileSizeBytes:W,encoding:Z,includeLineNumbers:Q}={...aO,...$};return async(J,j)=>{let{path:X,start_line:Y,end_line:V}=J,B=z$.isAbsolute(X)?z$.normalize(X):z$.resolve(process.cwd(),X),H=iO(B)??B,G=z$.extname(H).toLowerCase(),K=nO.get(G),F=await O9.stat(H);if(!F.isFile())throw Error(`Path is not a file: ${H}`);if(K){if(F.size>W)throw Error(`Image file too large: ${F.size} bytes (max: ${W} bytes).`);if(j.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let A=await O9.readFile(H);return[{type:"text",text:"Successfully read image"},{type:"image",data:A.toString("base64"),mediaType:K}]}if(F.size>CB)throw Error(`Text file too large to stream safely: ${F.size} bytes (max: ${CB} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return sO(H,Z,Q,Y,V,j.signal)}}import{spawn as gB}from"node:child_process";import*as mB from"node:fs/promises";import*as q9 from"node:path";var IB={};E(IB,{prewarmFileIndex:()=>z9,getFileIndex:()=>d1,enrichPromptWithMentions:()=>C8});import{spawn as tO}from"node:child_process";import{readdir as eO}from"node:fs/promises";import B3 from"node:path";import{isMainThread as yB,parentPort as SB,Worker as $T}from"node:worker_threads";var WT=15000,ZT=600000,QT=1000,JT=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function bB($){let W=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return W==="EACCES"||W==="EPERM"||W==="ENOENT"}var w8=new Map;function jT(){if(!yB)return!1;return!0}function XT($){if(w8.size<=1)return;for(let[W,Z]of w8.entries()){if(Z.pending)continue;if($-Z.lastAccessedAt>ZT)w8.delete(W)}}function YT($,W){return B3.relative($,W).split(B3.sep).join("/")}async function VT($){let Z=(await new Promise((Q,J)=>{let j=tO("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"],windowsHide:!0}),X="",Y="";j.stdout.on("data",(V)=>{X+=V.toString()}),j.stderr.on("data",(V)=>{Y+=V.toString()}),j.on("error",J),j.on("close",(V)=>{if(V===0){Q(X);return}J(Error(Y||`rg exited with code ${V}`))})})).split(/\r?\n/).map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>Q.replace(/\\/g,"/"));return new Set(Z)}async function hB($,W,Z){let Q;try{Q=await eO(W,{withFileTypes:!0})}catch(J){if(bB(J))return;throw J}for(let J of Q){let j=B3.join(W,J.name);if(J.isDirectory()){if(JT.has(J.name))continue;try{await hB($,j,Z)}catch(X){if(bB(X))continue;throw X}continue}if(J.isFile())Z.add(YT($,j))}}async function BT($){let W=new Set;return await hB($,$,W),W}async function T9($){try{return await VT($)}catch{return BT($)}}function HT(){if(yB||!SB)return;let $=SB;$.on("message",(W)=>{if(W.type!=="index")return;T9(W.cwd).then((Z)=>{let Q={type:"indexResult",requestId:W.requestId,files:Array.from(Z)};$.postMessage(Q)}).catch((Z)=>{let Q={type:"indexResult",requestId:W.requestId,error:Z instanceof Error?Z.message:"Failed to build file index"};$.postMessage(Q)})})}class kB{worker=new $T(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",($)=>{if($.type!=="indexResult")return;let W=this.pending.get($.requestId);if(!W)return;if(this.pending.delete($.requestId),$.error){W.reject(Error($.error));return}W.resolve($.files??[])}),this.worker.on("error",($)=>{this.flushPending($)}),this.worker.on("exit",($)=>{if($!==0)this.flushPending(Error(`File index worker exited with code ${$}`))})}requestIndex($){let W=++this.nextRequestId,Z=new Promise((J,j)=>{let X=setTimeout(()=>{this.pending.delete(W),J(null)},QT);X.unref(),this.pending.set(W,{resolve:(Y)=>{clearTimeout(X),J(Y)},reject:(Y)=>{clearTimeout(X),j(Y)}})}),Q={type:"index",requestId:W,cwd:$};return this.worker.postMessage(Q),Z}flushPending($){for(let[W,Z]of this.pending.entries())Z.reject($),this.pending.delete(W)}}HT();var V3;function GT(){if(!jT())return null;if(V3===void 0)V3=new kB;return V3}async function KT($){let W=GT();if(!W)return T9($);try{let Z=await W.requestIndex($);if(Z===null)return T9($);return new Set(Z)}catch{return T9($)}}async function d1($,W={}){let Z=W.ttlMs??WT,Q=Date.now();XT(Q);let J=w8.get($);if(J&&Z>0&&Q-J.lastBuiltAt<=Z&&J.files.size>0)return J.lastAccessedAt=Q,J.files;if(J?.pending)return J.lastAccessedAt=Q,J.pending;let j=KT($).then((X)=>{return w8.set($,{files:X,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),X});return w8.set($,{files:J?.files??new Set,lastBuiltAt:J?.lastBuiltAt??0,lastAccessedAt:Q,pending:j}),j}async function z9($,W={}){await d1($,{...W,ttlMs:0})}import{stat as FT}from"node:fs/promises";import f2 from"node:path";var AT=/[),.:;!?`'"]+$/,UT=/^[(`'"]+/;function fT($){let W=$.matchAll(/(^|[\s])@([^\s]+)/g),Z=[];for(let Q of W){let J=(Q[2]??"").trim();if(J.length===0)continue;let j=J.replace(UT,"").replace(AT,"");if(j.length===0||j.includes("@"))continue;Z.push(j)}return Array.from(new Set(Z))}function DT($,W){let Z=$.replace(/\\/g,"/"),Q=f2.isAbsolute(Z)?f2.resolve(Z):f2.resolve(W,Z),J=f2.relative(W,Q);if(J.startsWith("..")||f2.isAbsolute(J))return;return J.split(f2.sep).join("/")}async function C8($,W,Z={}){let Q=fT($);if(Q.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:J,maxFileBytes:j,maxTotalBytes:X}=Z,Y=await d1(W,{ttlMs:Z.ttlMs}),V=[],B=[],H=[],G=0;for(let K of Q){if(J&&H.length>=J){B.push(K);continue}let F=DT(K,W);if(!F||!Y.has(F)){B.push(K);continue}if(!j||!X){V.push(F);continue}let A=f2.join(W,F);try{if(!(await FT(A)).isFile()){B.push(K);continue}let U=G+j;if(U>X){B.push(K);continue}G=U,V.push(F)}catch{B.push(K)}}return{prompt:$,mentions:Q,matchedFiles:V,ignoredMentions:B}}var _T=["ts","tsx","js","jsx","mjs","cjs","json","md","mdx","txt","yaml","yml","toml","py","rb","go","rs","java","kt","swift","c","cpp","h","hpp","css","scss","less","html","vue","svelte","sql","sh","bash","zsh","fish","ps1","env","gitignore","dockerignore","editorconfig"],LT=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],D2=null;function OT(){if(D2!==null)return Promise.resolve(D2);return new Promise(($)=>{let W=gB("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});W.on("close",(Z)=>{D2=Z===0,$(D2)}),W.on("error",()=>{D2=!1,$(!1)}),setTimeout(()=>{if(!W.killed)W.kill("SIGTERM");if(D2===null)D2=!1,$(!1)},1000)})}function TT($,W,Z,Q,J=5000,j){return new Promise((X)=>{let Y=gB("rg",["--json",`--context=${Q}`,"--max-count=1","-i",$],{cwd:W,stdio:["ignore","pipe","pipe"],windowsHide:!0}),V="",B=!1,H=()=>{if(!Y.killed)Y.kill("SIGTERM")},G=setTimeout(()=>{if(!B)B=!0,H(),X(null)},J),K=(F)=>{if(!B)B=!0,clearTimeout(G),H(),X(F)};if(j?.aborted){H(),X(null);return}j?.addEventListener("abort",()=>{K(null)}),Y.stdout.on("data",(F)=>{V+=F.toString()}),Y.stderr.on("data",()=>{}),Y.on("close",(F)=>{if(F===0||F===1){try{let A=[],f=V.split(`
165
- `).filter((U)=>U.trim());for(let U of f){if(A.length>=Z)break;let _=JSON.parse(U);if(_.type==="match"){let D=_.data,M=[];if(_.data.submatches&&_.data.submatches.length>0){let T=_.data.submatches[0];A.push({file:D.path.text,line:D.line_number,column:(T?.start??0)+1,match:T?.match?.text??"",context:M})}}else if(_.type==="context"&&A.length>0){let D=A[A.length-1],M=_.data.line_number===D.line?">":" ";D.context.push(`${M} ${_.data.line_number}: ${_.data.lines?.text??_.data.line?.text??""}`)}}K(A.length>0?A:null)}catch{K(null)}return}K(null)}),Y.on("error",()=>{K(null)})})}function zT($,W,Z,Q){let J=$.split("/"),j=J[J.length-1]??"";if(J.length-1>Q)return!1;for(let V=0;V<J.length-1;V++)if(W.has(J[V]??""))return!1;let Y=q9.posix.extname(j).slice(1).toLowerCase();return Z.has(Y)||!Y&&!j.startsWith(".")}function P4($={}){let{includeExtensions:W=_T,excludeDirs:Z=LT,maxResults:Q=100,contextLines:J=2,maxDepth:j=20}=$,X=new Set(Z),Y=new Set(W.map((V)=>V.toLowerCase()));return async(V,B,H)=>{if(H.signal?.aborted)throw Error("Search operation aborted");let G=await OT(),K=null;if(G)K=await TT(V,B,Q,J,5000,H.signal);if(K){let D=[`Found ${K.length} result${K.length===1?"":"s"} for pattern: ${V}`,""];for(let M of K)D.push(`${M.file}:${M.line}:${M.column}`),D.push(...M.context),D.push("");if(K.length>=Q)D.push(`(Showing first ${Q} results. Refine your search for more specific results.)`);return xB(D.join(`
166
- `))}let F;try{F=new RegExp(V,"gim")}catch(D){throw Error(`Invalid regex pattern: ${V}. ${D instanceof Error?D.message:""}`)}let A=[],f=0,U=await d1(B);for(let D of U){if(H.signal?.aborted)throw Error("Search operation aborted");if(!zT(D,X,Y,j))continue;if(A.length>=Q)break;f++;let M=q9.join(B,D);try{let O=(await mB.readFile(M,"utf-8")).split(`
167
- `);for(let L=0;L<O.length;L++){let C=O[L];F.lastIndex=0;let N=F.exec(C);while(N!==null){if(A.length>=Q)break;let y=Math.max(0,L-J),P=Math.min(O.length-1,L+J),d=[];for(let n=y;n<=P;n++){let o=n===L?">":" ";d.push(`${o} ${n+1}: ${O[n]}`)}if(A.push({file:D,line:L+1,column:N.index+1,match:N[0],context:d}),N.index===F.lastIndex)F.lastIndex++;N=F.exec(C)}}}catch{}}if(A.length===0)return`No results found for pattern: ${V}
168
- Searched ${f} files.`;let _=[`Found ${A.length} result${A.length===1?"":"s"} for pattern: ${V}`,`Searched ${f} files.`,""];for(let D of A)_.push(`${D.file}:${D.line}:${D.column}`),_.push(...D.context),_.push("");if(A.length>=Q)_.push(`(Showing first ${Q} results. Refine your search for more specific results.)`);return xB(_.join(`
169
- `))}}function xB($){if($.length<=N8)return $;let W=Math.ceil(N8/2),Z=Math.max(1,N8-W);return`${$.slice(0,W)}
160
+ `)),await A1.writeFile($,j.join(`
161
+ `),{encoding:Q}),`Inserted content at line ${W} in ${$}.`}function U2($={}){let{encoding:W="utf-8",restrictToCwd:Z=!0,maxDiffLines:Q=200}=$;return async(J,j,X)=>{let Y=lO(j,J.path,Z);if(J.insert_line!=null)return oO(Y,J.insert_line,J.new_text,W);if(!await nO(Y))return iO(Y,J.new_text,W);if(J.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return aO(Y,J.old_text,J.new_text,W,Q)}}import{createReadStream as sO}from"node:fs";import*as T9 from"node:fs/promises";import*as q$ from"node:path";import{createInterface as tO}from"node:readline";import{resolveExistingFilePath as eO}from"@cline/shared/storage";var $T=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),WT={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},bB=1e8,ZT=50000;function yB($){let{reason:W}=$;if(W instanceof Error)return W;if(W!==void 0)return Error(String(W));return Error("File read was aborted")}async function QT($,W,Z,Q,J,j){if(j?.aborted)throw yB(j);let X=Math.max(Q??1,1),Y=J??Number.POSITIVE_INFINITY,V=Number.isFinite(Y),B=V?Y:X+ZT-1,H=[],G=0,K=0,F=!1,A=!1,f=Number.isFinite(Y)?Math.min(Y,X+R8-1):X+R8-1,U=Z?String(f).length+3:0,_=sO($,{encoding:W}),D=tO({input:_,crlfDelay:Number.POSITIVE_INFINITY}),M=j?()=>_.destroy(yB(j)):void 0;if(j&&M)j.addEventListener("abort",M,{once:!0});try{for await(let p of D){if(K+=1,K>Y){K=Y;break}if(!V&&F&&K>=B){A=!0;break}if(K<X||F)continue;if(H.length>=R8){F=!0;continue}let x=p;if(x.length>e7)x=`${x.slice(0,e7)} [line truncated]`;let P=G+x.length+U+1;if(P>O9&&H.length>0){F=!0;continue}H.push({lineNumber:K,text:x}),G=P}}finally{if(j&&M)j.removeEventListener("abort",M);D.close(),_.destroy()}let T=String(H[H.length-1]?.lineNumber??K).length,O=H.map(({lineNumber:p,text:x})=>Z?`${String(p).padStart(T," ")} | ${x}`:x).join(`
162
+ `),L=H[H.length-1]?.lineNumber;if(L===void 0)return O;let C=Math.min(Y,K);if(L>=C)return O;let R=A?`${K}+ lines`:C;return`${O}
163
+
164
+ [Showing lines ${X}-${L} of ${R}. Use start_line/end_line to read other sections.]`}function S4($={}){let{maxFileSizeBytes:W,encoding:Z,includeLineNumbers:Q}={...WT,...$};return async(J,j)=>{let{path:X,start_line:Y,end_line:V}=J,B=q$.isAbsolute(X)?q$.normalize(X):q$.resolve(process.cwd(),X),H=eO(B)??B,G=q$.extname(H).toLowerCase(),K=$T.get(G),F=await T9.stat(H);if(!F.isFile())throw Error(`Path is not a file: ${H}`);if(K){if(F.size>W)throw Error(`Image file too large: ${F.size} bytes (max: ${W} bytes).`);if(j.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let A=await T9.readFile(H);return[{type:"text",text:"Successfully read image"},{type:"image",data:A.toString("base64"),mediaType:K}]}if(F.size>bB)throw Error(`Text file too large to stream safely: ${F.size} bytes (max: ${bB} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return QT(H,Z,Q,Y,V,j.signal)}}import{spawn as cB}from"node:child_process";import*as uB from"node:fs/promises";import*as M9 from"node:path";var mB={};w(mB,{prewarmFileIndex:()=>q9,getFileIndex:()=>p1,enrichPromptWithMentions:()=>P8});import{spawn as JT}from"node:child_process";import{readdir as jT}from"node:fs/promises";import H3 from"node:path";import{isMainThread as IB,parentPort as hB,Worker as XT}from"node:worker_threads";var YT=15000,VT=600000,BT=1000,HT=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function kB($){let W=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return W==="EACCES"||W==="EPERM"||W==="ENOENT"}var C8=new Map;function GT(){if(!IB)return!1;return!0}function KT($){if(C8.size<=1)return;for(let[W,Z]of C8.entries()){if(Z.pending)continue;if($-Z.lastAccessedAt>VT)C8.delete(W)}}function FT($,W){return H3.relative($,W).split(H3.sep).join("/")}async function AT($){let Z=(await new Promise((Q,J)=>{let j=JT("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"],windowsHide:!0}),X="",Y="";j.stdout.on("data",(V)=>{X+=V.toString()}),j.stderr.on("data",(V)=>{Y+=V.toString()}),j.on("error",J),j.on("close",(V)=>{if(V===0){Q(X);return}J(Error(Y||`rg exited with code ${V}`))})})).split(/\r?\n/).map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>Q.replace(/\\/g,"/"));return new Set(Z)}async function xB($,W,Z){let Q;try{Q=await jT(W,{withFileTypes:!0})}catch(J){if(kB(J))return;throw J}for(let J of Q){let j=H3.join(W,J.name);if(J.isDirectory()){if(HT.has(J.name))continue;try{await xB($,j,Z)}catch(X){if(kB(X))continue;throw X}continue}if(J.isFile())Z.add(FT($,j))}}async function UT($){let W=new Set;return await xB($,$,W),W}async function z9($){try{return await AT($)}catch{return UT($)}}function fT(){if(IB||!hB)return;let $=hB;$.on("message",(W)=>{if(W.type!=="index")return;z9(W.cwd).then((Z)=>{let Q={type:"indexResult",requestId:W.requestId,files:Array.from(Z)};$.postMessage(Q)}).catch((Z)=>{let Q={type:"indexResult",requestId:W.requestId,error:Z instanceof Error?Z.message:"Failed to build file index"};$.postMessage(Q)})})}class gB{worker=new XT(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",($)=>{if($.type!=="indexResult")return;let W=this.pending.get($.requestId);if(!W)return;if(this.pending.delete($.requestId),$.error){W.reject(Error($.error));return}W.resolve($.files??[])}),this.worker.on("error",($)=>{this.flushPending($)}),this.worker.on("exit",($)=>{if($!==0)this.flushPending(Error(`File index worker exited with code ${$}`))})}requestIndex($){let W=++this.nextRequestId,Z=new Promise((J,j)=>{let X=setTimeout(()=>{this.pending.delete(W),J(null)},BT);X.unref(),this.pending.set(W,{resolve:(Y)=>{clearTimeout(X),J(Y)},reject:(Y)=>{clearTimeout(X),j(Y)}})}),Q={type:"index",requestId:W,cwd:$};return this.worker.postMessage(Q),Z}flushPending($){for(let[W,Z]of this.pending.entries())Z.reject($),this.pending.delete(W)}}fT();var B3;function DT(){if(!GT())return null;if(B3===void 0)B3=new gB;return B3}async function _T($){let W=DT();if(!W)return z9($);try{let Z=await W.requestIndex($);if(Z===null)return z9($);return new Set(Z)}catch{return z9($)}}async function p1($,W={}){let Z=W.ttlMs??YT,Q=Date.now();KT(Q);let J=C8.get($);if(J&&Z>0&&Q-J.lastBuiltAt<=Z&&J.files.size>0)return J.lastAccessedAt=Q,J.files;if(J?.pending)return J.lastAccessedAt=Q,J.pending;let j=_T($).then((X)=>{return C8.set($,{files:X,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),X});return C8.set($,{files:J?.files??new Set,lastBuiltAt:J?.lastBuiltAt??0,lastAccessedAt:Q,pending:j}),j}async function q9($,W={}){await p1($,{...W,ttlMs:0})}import{stat as LT}from"node:fs/promises";import f2 from"node:path";var OT=/[),.:;!?`'"]+$/,TT=/^[(`'"]+/;function zT($){let W=$.matchAll(/(^|[\s])@([^\s]+)/g),Z=[];for(let Q of W){let J=(Q[2]??"").trim();if(J.length===0)continue;let j=J.replace(TT,"").replace(OT,"");if(j.length===0||j.includes("@"))continue;Z.push(j)}return Array.from(new Set(Z))}function qT($,W){let Z=$.replace(/\\/g,"/"),Q=f2.isAbsolute(Z)?f2.resolve(Z):f2.resolve(W,Z),J=f2.relative(W,Q);if(J.startsWith("..")||f2.isAbsolute(J))return;return J.split(f2.sep).join("/")}async function P8($,W,Z={}){let Q=zT($);if(Q.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:J,maxFileBytes:j,maxTotalBytes:X}=Z,Y=await p1(W,{ttlMs:Z.ttlMs}),V=[],B=[],H=[],G=0;for(let K of Q){if(J&&H.length>=J){B.push(K);continue}let F=qT(K,W);if(!F||!Y.has(F)){B.push(K);continue}if(!j||!X){V.push(F);continue}let A=f2.join(W,F);try{if(!(await LT(A)).isFile()){B.push(K);continue}let U=G+j;if(U>X){B.push(K);continue}G=U,V.push(F)}catch{B.push(K)}}return{prompt:$,mentions:Q,matchedFiles:V,ignoredMentions:B}}var MT=["ts","tsx","js","jsx","mjs","cjs","json","md","mdx","txt","yaml","yml","toml","py","rb","go","rs","java","kt","swift","c","cpp","h","hpp","css","scss","less","html","vue","svelte","sql","sh","bash","zsh","fish","ps1","env","gitignore","dockerignore","editorconfig"],NT=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],D2=null;function RT(){if(D2!==null)return Promise.resolve(D2);return new Promise(($)=>{let W=cB("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});W.on("close",(Z)=>{D2=Z===0,$(D2)}),W.on("error",()=>{D2=!1,$(!1)}),setTimeout(()=>{if(!W.killed)W.kill("SIGTERM");if(D2===null)D2=!1,$(!1)},1000)})}function ET($,W,Z,Q,J=5000,j){return new Promise((X)=>{let Y=cB("rg",["--json",`--context=${Q}`,"--max-count=1","-i",$],{cwd:W,stdio:["ignore","pipe","pipe"],windowsHide:!0}),V="",B=!1,H=()=>{if(!Y.killed)Y.kill("SIGTERM")},G=setTimeout(()=>{if(!B)B=!0,H(),X(null)},J),K=(F)=>{if(!B)B=!0,clearTimeout(G),H(),X(F)};if(j?.aborted){H(),X(null);return}j?.addEventListener("abort",()=>{K(null)}),Y.stdout.on("data",(F)=>{V+=F.toString()}),Y.stderr.on("data",()=>{}),Y.on("close",(F)=>{if(F===0||F===1){try{let A=[],f=V.split(`
165
+ `).filter((U)=>U.trim());for(let U of f){if(A.length>=Z)break;let _=JSON.parse(U);if(_.type==="match"){let D=_.data,M=[];if(_.data.submatches&&_.data.submatches.length>0){let T=_.data.submatches[0];A.push({file:D.path.text,line:D.line_number,column:(T?.start??0)+1,match:T?.match?.text??"",context:M})}}else if(_.type==="context"&&A.length>0){let D=A[A.length-1],M=_.data.line_number===D.line?">":" ";D.context.push(`${M} ${_.data.line_number}: ${_.data.lines?.text??_.data.line?.text??""}`)}}K(A.length>0?A:null)}catch{K(null)}return}K(null)}),Y.on("error",()=>{K(null)})})}function wT($,W,Z,Q){let J=$.split("/"),j=J[J.length-1]??"";if(J.length-1>Q)return!1;for(let V=0;V<J.length-1;V++)if(W.has(J[V]??""))return!1;let Y=M9.posix.extname(j).slice(1).toLowerCase();return Z.has(Y)||!Y&&!j.startsWith(".")}function b4($={}){let{includeExtensions:W=MT,excludeDirs:Z=NT,maxResults:Q=100,contextLines:J=2,maxDepth:j=20}=$,X=new Set(Z),Y=new Set(W.map((V)=>V.toLowerCase()));return async(V,B,H)=>{if(H.signal?.aborted)throw Error("Search operation aborted");let G=await RT(),K=null;if(G)K=await ET(V,B,Q,J,5000,H.signal);if(K){let D=[`Found ${K.length} result${K.length===1?"":"s"} for pattern: ${V}`,""];for(let M of K)D.push(`${M.file}:${M.line}:${M.column}`),D.push(...M.context),D.push("");if(K.length>=Q)D.push(`(Showing first ${Q} results. Refine your search for more specific results.)`);return vB(D.join(`
166
+ `))}let F;try{F=new RegExp(V,"gim")}catch(D){throw Error(`Invalid regex pattern: ${V}. ${D instanceof Error?D.message:""}`)}let A=[],f=0,U=await p1(B);for(let D of U){if(H.signal?.aborted)throw Error("Search operation aborted");if(!wT(D,X,Y,j))continue;if(A.length>=Q)break;f++;let M=M9.join(B,D);try{let O=(await uB.readFile(M,"utf-8")).split(`
167
+ `);for(let L=0;L<O.length;L++){let C=O[L];F.lastIndex=0;let R=F.exec(C);while(R!==null){if(A.length>=Q)break;let p=Math.max(0,L-J),x=Math.min(O.length-1,L+J),P=[];for(let r=p;r<=x;r++){let d=r===L?">":" ";P.push(`${d} ${r+1}: ${O[r]}`)}if(A.push({file:D,line:L+1,column:R.index+1,match:R[0],context:P}),R.index===F.lastIndex)F.lastIndex++;R=F.exec(C)}}}catch{}}if(A.length===0)return`No results found for pattern: ${V}
168
+ Searched ${f} files.`;let _=[`Found ${A.length} result${A.length===1?"":"s"} for pattern: ${V}`,`Searched ${f} files.`,""];for(let D of A)_.push(`${D.file}:${D.line}:${D.column}`),_.push(...D.context),_.push("");if(A.length>=Q)_.push(`(Showing first ${Q} results. Refine your search for more specific results.)`);return vB(_.join(`
169
+ `))}}function vB($){if($.length<=E8)return $;let W=Math.ceil(E8/2),Z=Math.max(1,E8-W);return`${$.slice(0,W)}
170
170
  [... search output truncated: ${$.length} chars total. Narrow the pattern or scope to view the elided matches ...]
171
- `+$.slice(-Z)}function qT($){return $.replace(/<script[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style[^>]*>[\s\S]*?<\/style>/gi,"").replace(/<!--[\s\S]*?-->/g,"").replace(/<(p|div|br|hr|h[1-6]|li|tr)[^>]*>/gi,`
171
+ `+$.slice(-Z)}function CT($){return $.replace(/<script[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style[^>]*>[\s\S]*?<\/style>/gi,"").replace(/<!--[\s\S]*?-->/g,"").replace(/<(p|div|br|hr|h[1-6]|li|tr)[^>]*>/gi,`
172
172
  `).replace(/<[^>]+>/g," ").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#(\d+);/g,(W,Z)=>String.fromCharCode(parseInt(Z,10))).replace(/\s+/g," ").replace(/\n\s+/g,`
173
173
  `).replace(/\n{3,}/g,`
174
174
 
175
- `).trim()}function S4($={}){let{timeoutMs:W=30000,maxResponseBytes:Z=5000000,userAgent:Q="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:J={},followRedirects:j=!0}=$;return async(X,Y,V)=>{let B;try{B=new URL(X)}catch{throw Error(`Invalid URL: ${X}`)}if(!["http:","https:"].includes(B.protocol))throw Error(`Invalid protocol: ${B.protocol}. Only http and https are supported.`);let H=new AbortController,G=setTimeout(()=>H.abort(),W),K;if(V.signal)K=()=>H.abort(),V.signal.addEventListener("abort",K);try{let F=await fetch(X,{method:"GET",headers:{"User-Agent":Q,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...J},redirect:j?"follow":"manual",signal:H.signal});if(clearTimeout(G),!j&&F.status>=300&&F.status<400)return`Redirect to: ${F.headers.get("location")}`;if(!F.ok)throw Error(`HTTP ${F.status}: ${F.statusText}`);let A=F.headers.get("content-type")||"",f=F.body?.getReader();if(!f)throw Error("Failed to read response body");let U=[],_=0;while(!0){let{done:C,value:N}=await f.read();if(C)break;if(_+=N.length,_>Z)throw f.cancel(),Error(`Response too large: exceeded ${Z} bytes`);U.push(N)}let D=new Uint8Array(_),M=0;for(let C of U)D.set(C,M),M+=C.length;let T=new TextDecoder("utf-8").decode(D),O;if(A.includes("text/html")||A.includes("application/xhtml"))O=qT(T);else if(A.includes("application/json"))try{let C=JSON.parse(T);O=JSON.stringify(C,null,2)}catch{O=T}else O=T;let L=[`URL: ${X}`,`Content-Type: ${A}`,`Size: ${_} bytes`,"","--- Content ---",O.slice(0,50000)];if(O.length>50000)L.push(`
175
+ `).trim()}function y4($={}){let{timeoutMs:W=30000,maxResponseBytes:Z=5000000,userAgent:Q="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:J={},followRedirects:j=!0}=$;return async(X,Y,V)=>{let B;try{B=new URL(X)}catch{throw Error(`Invalid URL: ${X}`)}if(!["http:","https:"].includes(B.protocol))throw Error(`Invalid protocol: ${B.protocol}. Only http and https are supported.`);let H=new AbortController,G=setTimeout(()=>H.abort(),W),K;if(V.signal)K=()=>H.abort(),V.signal.addEventListener("abort",K);try{let F=await fetch(X,{method:"GET",headers:{"User-Agent":Q,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...J},redirect:j?"follow":"manual",signal:H.signal});if(clearTimeout(G),!j&&F.status>=300&&F.status<400)return`Redirect to: ${F.headers.get("location")}`;if(!F.ok)throw Error(`HTTP ${F.status}: ${F.statusText}`);let A=F.headers.get("content-type")||"",f=F.body?.getReader();if(!f)throw Error("Failed to read response body");let U=[],_=0;while(!0){let{done:C,value:R}=await f.read();if(C)break;if(_+=R.length,_>Z)throw f.cancel(),Error(`Response too large: exceeded ${Z} bytes`);U.push(R)}let D=new Uint8Array(_),M=0;for(let C of U)D.set(C,M),M+=C.length;let T=new TextDecoder("utf-8").decode(D),O;if(A.includes("text/html")||A.includes("application/xhtml"))O=CT(T);else if(A.includes("application/json"))try{let C=JSON.parse(T);O=JSON.stringify(C,null,2)}catch{O=T}else O=T;let L=[`URL: ${X}`,`Content-Type: ${A}`,`Size: ${_} bytes`,"","--- Content ---",O.slice(0,50000)];if(O.length>50000)L.push(`
176
176
  [Content truncated: showing first 50000 of ${O.length} characters]`);return L.push("","--- Analysis Request ---",`Prompt: ${Y}`),L.join(`
177
- `)}catch(F){if(clearTimeout(G),F instanceof Error){if(F.name==="AbortError")throw Error(`Request timed out after ${W}ms`);throw F}throw Error(`Fetch failed: ${String(F)}`)}finally{if(V.signal&&K)V.signal.removeEventListener("abort",K)}}}function b4($={}){return G2($)}function P8($={}){return{readFile:C4($.fileRead),search:P4($.search),bash:b4($.bash),webFetch:S4($.webFetch),applyPatch:A2($.applyPatch),editor:U2($.editor)}}var MT={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion",submit_and_exit:"enableSubmitAndExit"},S8=[{name:"openai-native-use-apply-patch",mode:"act",providerIdIncludes:["openai-native"],enableTools:["apply_patch"],disableTools:["editor"]},{name:"codex-and-gpt-use-apply-patch",mode:"act",modelIdIncludes:["codex","gpt"],enableTools:["apply_patch"],disableTools:["editor"]}];function vB($,W){if(!W||W.length===0)return!0;let Z=$.toLowerCase();return W.some((Q)=>Z.includes(Q.toLowerCase()))}function RT($,W,Z,Q){if($.mode&&$.mode!=="any"&&$.mode!==Q)return!1;return vB(W,$.providerIdIncludes)&&vB(Z,$.modelIdIncludes)}function b8($,W,Z,Q){if(!Q||Q.length===0)return{};let J=new Map;for(let X of Q){if(!RT(X,$,W,Z))continue;for(let Y of X.disableTools??[])J.set(Y,!1);for(let Y of X.enableTools??[])J.set(Y,!0)}let j={};for(let[X,Y]of J.entries())j[MT[X]]=Y;return j}var o0={act:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!0,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},plan:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!1,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},search:{enableReadFiles:!0,enableSearch:!0,enableBash:!1,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},minimal:{enableReadFiles:!1,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!1},yolo:{enableReadFiles:!0,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!0,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!0,enableSpawnAgent:!1,enableAgentTeams:!1}};function l1($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function M9($){if($!=="yolo")return{};let W={enabled:!0,autoApprove:!0},Z={"*":W};for(let Q of D$)Z[Q]=W;return Z}function R9($,W){let Z=o0[$],{enableSpawnAgent:Q,enableAgentTeams:J,...j}=Z;return T$({...j,...W})}import{createTool as sz,zodToJsonSchema as tz}from"@cline/shared";import{z as q3}from"zod";A1();import{createAgentRuntime as mz}from"@cline/agents";import{createContributionRegistry as vz,mergeModelOptions as _H}from"@cline/shared";import{createGateway as pT,createHandlerAsync as rT,hasRegisteredHandler as iT,MODEL_COLLECTIONS_BY_PROVIDER_ID as nT,normalizeProviderId as aT}from"@cline/llms";import{EMPTY_CONTENT_TEXT as IT}from"@cline/shared";function xT($){let W=mT($.content),Z=[],Q=$.id??uT(),J=0,j=[],X=()=>{if(j.length===0)return;let Y=J===0?Q:`${Q}_part_${J}`;J+=1,Z.push({id:Y,role:$.role,content:j.map(vT),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:tB($.metrics)}),j=[]};if(W.length===0)return Z.push({id:Q,role:$.role,content:[{type:"text",text:IT}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:tB($.metrics)}),Z;for(let Y of W){if(Y.type!=="tool_result"){j.push(Y);continue}X(),Z.push({id:`${Q}_tool_${Y.tool_use_id}`,role:"tool",content:[$H(Y)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return X(),Z}function b9($){return $.flatMap(xT)}function gT($){let W=$.content.map(WH).filter((Z)=>Z!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:W,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:cT($.metrics)}}function y8($){return $.map(gT)}function y9($){let W=[];for(let Z of $){let Q=Z.content.map(WH).filter((X)=>X!==void 0),J=Z.role==="tool"?"user":Z.role,j=W[W.length-1];if(J==="user"&&Q.length>0&&Q.every((X)=>X.type==="tool_result")&&j?.role==="user"&&Array.isArray(j.content)&&j.content.every((X)=>X.type==="tool_result")){j.content.push(...Q);continue}W.push({role:J,content:Q})}return W}function mT($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function vT($){switch($.type){case"text":return{type:"text",text:$.text};case"thinking":return{type:"reasoning",text:$.thinking,metadata:$.signature?{signature:$.signature,details:$.details}:$.details?{details:$.details}:void 0};case"redacted_thinking":return{type:"reasoning",text:"",redacted:!0,metadata:{data:$.data}};case"image":return{type:"image",image:$.data,mediaType:$.mediaType};case"file":return{type:"file",path:$.path,content:$.content};case"tool_use":return{type:"tool-call",toolCallId:$.id,toolName:$.name,input:$.input,metadata:$.signature?{signature:$.signature}:void 0};case"tool_result":return $H($)}}function $H($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function WH($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let W=$.metadata;return{type:"thinking",thinking:$.text,signature:W?.signature,details:W?.details}}case"image":return typeof $.image==="string"?{type:"image",data:$.image,mediaType:$.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:$.path,content:$.content};case"tool-call":{let W=$.metadata;return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:W?.thoughtSignature??W?.signature}}case"tool-result":{let W=$.output,Z=typeof W==="string"?W:Array.isArray(W)?W:JSON.stringify(W);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:Z,is_error:$.isError}}}}function tB($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function cT($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var eB=0;function uT(){return eB+=1,`msg_${Date.now().toString(36)}_${eB.toString(36)}`}function dT($){switch($.type){case"text":return[{type:"text-delta",text:$.text}];case"reasoning":return[{type:"reasoning-delta",text:$.reasoning,metadata:$.signature?{thoughtSignature:$.signature,details:$.details}:{details:$.details}}];case"tool_calls":{let W=$.tool_call.function,Z=W.arguments;return[{type:"tool-call-delta",toolCallId:$.tool_call.call_id??W.id,toolName:W.name,inputText:typeof Z==="string"?Z:void 0,input:typeof Z==="string"?void 0:Z,...$.signature?{metadata:{thoughtSignature:$.signature}}:{}}]}case"usage":return[{type:"usage",usage:{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,reasoningTokenCount:$.thoughtsTokenCount,totalCost:$.totalCost}}];case"done":return[{type:"finish",reason:lT($),error:$.error}];default:return[]}}function lT($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function ZH($){return{async*stream(W){let Z=!1,Q=!1;try{let J=typeof $==="function"?await $():$;J.setAbortSignal?.(W.signal);let j=y9(W.messages),X=W.tools.map((Y)=>({name:Y.name,description:Y.description,inputSchema:Y.inputSchema}));for await(let Y of J.createMessage(W.systemPrompt??"",j,X))for(let V of dT(Y)){if(V.type==="finish")Z=!0;else if(V.type==="tool-call-delta")Q=!0;yield V}if(!Z)yield{type:"finish",reason:Q?"tool-calls":"stop"}}catch(J){if(!Z)yield{type:"finish",reason:W.signal?.aborted?"aborted":"error",error:J instanceof Error?J.message:String(J)}}}}}function oT($){let W=Object.fromEntries(Object.entries($).filter(([,Z])=>Z!==void 0));return Object.keys(W).length>0?W:void 0}function sT($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function tT($){let W={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(sT($))Object.assign(W,{apiVersion:$.azure?.apiVersion,useIdentity:$.azure?.useIdentity});if($.providerId==="bedrock")Object.assign(W,{authentication:$.aws?.authentication,profile:$.aws?.profile,accessKeyId:$.aws?.accessKey,secretAccessKey:$.aws?.secretKey,sessionToken:$.aws?.sessionToken,usePromptCache:$.aws?.usePromptCache,useCrossRegionInference:$.useCrossRegionInference,useGlobalInference:$.useGlobalInference,endpoint:$.aws?.endpoint,customModelBaseId:$.aws?.customModelBaseId});if($.providerId==="vertex"){let Z=$.gcp?.region??$.region;Object.assign(W,{project:$.gcp?.projectId,projectId:$.gcp?.projectId,location:Z,region:Z})}if($.providerId==="sapaicore")Object.assign(W,$.sap);return oT(W)}function G3($){let W=$.providerConfig;if(W?.knownModels)return W.knownModels;if($.knownModels)return $.knownModels;return nT[$.providerId]?.models??void 0}function eT($){if(!$?.length)return;let W=new Set;for(let Z of $)switch(Z){case"tools":case"reasoning":case"prompt-cache":case"images":W.add(Z);break;case"structured_output":W.add("structured-output");break;default:W.add("text")}return W.add("text"),[...W]}function $z($,W){return{id:$,name:W.name??$,description:W.description,contextWindow:W.contextWindow,maxInputTokens:W.maxInputTokens,maxOutputTokens:W.maxTokens,capabilities:eT(W.capabilities),metadata:{family:W.family,pricing:W.pricing,status:W.status,releaseDate:W.releaseDate}}}function QH($,W,Z){let Q=$.providerConfig,J=Q?.providerId===$.providerId?Q:void 0,j={...J??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??J?.apiKey,baseUrl:$.baseUrl??J?.baseUrl,headers:$.headers??J?.headers,knownModels:G3($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:W,extensionContext:$.extensionContext};if(iT(aT(j.providerId)))return ZH(()=>rT(j));return pT({fetch:j.fetch,providerConfigs:[{providerId:j.providerId,apiKey:j.apiKey,baseUrl:j.baseUrl,headers:j.headers,fetch:j.fetch,options:tT(j),models:j.knownModels?Object.entries(j.knownModels).map(([X,Y])=>$z(X,Y)):void 0}],logger:W,telemetry:Z??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:j.providerId,modelId:j.modelId},{maxTokens:j.maxOutputTokens})}import{createMediaBudgetState as Wz,IMAGE_OMITTED_PLACEHOLDER as JH,normalizeUserInput as jH,resolveMediaBudget as Zz,validateAndReserveImageMedia as Qz}from"@cline/shared";var Jz=8000,jz=50000,Xz=6000000,Yz=200000,Vz=12000,Bz=65536,I4=2000,XH=40000,Hz=8,K3={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},Gz=new Set(["read","read_files"]),L2="[outdated - see the latest file content]",YH="Tool execution was interrupted before a result was produced.",VH=($)=>`
177
+ `)}catch(F){if(clearTimeout(G),F instanceof Error){if(F.name==="AbortError")throw Error(`Request timed out after ${W}ms`);throw F}throw Error(`Fetch failed: ${String(F)}`)}finally{if(V.signal&&K)V.signal.removeEventListener("abort",K)}}}function h4($={}){return G2($)}function S8($={}){return{readFile:S4($.fileRead),search:b4($.search),bash:h4($.bash),webFetch:y4($.webFetch),applyPatch:A2($.applyPatch),editor:U2($.editor)}}var PT={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion",submit_and_exit:"enableSubmitAndExit"},b8=[{name:"openai-native-use-apply-patch",mode:"act",providerIdIncludes:["openai-native"],enableTools:["apply_patch"],disableTools:["editor"]},{name:"codex-and-gpt-use-apply-patch",mode:"act",modelIdIncludes:["codex","gpt"],enableTools:["apply_patch"],disableTools:["editor"]}];function dB($,W){if(!W||W.length===0)return!0;let Z=$.toLowerCase();return W.some((Q)=>Z.includes(Q.toLowerCase()))}function ST($,W,Z,Q){if($.mode&&$.mode!=="any"&&$.mode!==Q)return!1;return dB(W,$.providerIdIncludes)&&dB(Z,$.modelIdIncludes)}function y8($,W,Z,Q){if(!Q||Q.length===0)return{};let J=new Map;for(let X of Q){if(!ST(X,$,W,Z))continue;for(let Y of X.disableTools??[])J.set(Y,!1);for(let Y of X.enableTools??[])J.set(Y,!0)}let j={};for(let[X,Y]of J.entries())j[PT[X]]=Y;return j}var a0={act:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!0,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},plan:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!1,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},search:{enableReadFiles:!0,enableSearch:!0,enableBash:!1,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},minimal:{enableReadFiles:!1,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!1},yolo:{enableReadFiles:!0,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!0,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!0,enableSpawnAgent:!1,enableAgentTeams:!1}};function r1($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function N9($){if($!=="yolo")return{};let W={enabled:!0,autoApprove:!0},Z={"*":W};for(let Q of _$)Z[Q]=W;return Z}function R9($,W){let Z=a0[$],{enableSpawnAgent:Q,enableAgentTeams:J,...j}=Z;return z$({...j,...W})}import{createTool as Qq,zodToJsonSchema as Jq}from"@cline/shared";import{z as M3}from"zod";U1();import{createAgentRuntime as pz}from"@cline/agents";import{createContributionRegistry as rz,mergeModelOptions as TH}from"@cline/shared";import{createGateway as sT,createHandlerAsync as tT,hasRegisteredHandler as eT,MODEL_COLLECTIONS_BY_PROVIDER_ID as $z,normalizeProviderId as Wz}from"@cline/llms";import{EMPTY_CONTENT_TEXT as uT}from"@cline/shared";function dT($){let W=pT($.content),Z=[],Q=$.id??nT(),J=0,j=[],X=()=>{if(j.length===0)return;let Y=J===0?Q:`${Q}_part_${J}`;J+=1,Z.push({id:Y,role:$.role,content:j.map(rT),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:WH($.metrics)}),j=[]};if(W.length===0)return Z.push({id:Q,role:$.role,content:[{type:"text",text:uT}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:WH($.metrics)}),Z;for(let Y of W){if(Y.type!=="tool_result"){j.push(Y);continue}X(),Z.push({id:`${Q}_tool_${Y.tool_use_id}`,role:"tool",content:[QH(Y)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return X(),Z}function y9($){return $.flatMap(dT)}function lT($){let W=$.content.map(JH).filter((Z)=>Z!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:W,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:iT($.metrics)}}function h8($){return $.map(lT)}function h9($){let W=[];for(let Z of $){let Q=Z.content.map(JH).filter((X)=>X!==void 0),J=Z.role==="tool"?"user":Z.role,j=W[W.length-1];if(J==="user"&&Q.length>0&&Q.every((X)=>X.type==="tool_result")&&j?.role==="user"&&Array.isArray(j.content)&&j.content.every((X)=>X.type==="tool_result")){j.content.push(...Q);continue}W.push({role:J,content:Q})}return W}function pT($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function rT($){switch($.type){case"text":return{type:"text",text:$.text};case"thinking":return{type:"reasoning",text:$.thinking,metadata:$.signature?{signature:$.signature,details:$.details}:$.details?{details:$.details}:void 0};case"redacted_thinking":return{type:"reasoning",text:"",redacted:!0,metadata:{data:$.data}};case"image":return{type:"image",image:$.data,mediaType:$.mediaType};case"file":return{type:"file",path:$.path,content:$.content};case"tool_use":return{type:"tool-call",toolCallId:$.id,toolName:$.name,input:$.input,metadata:$.signature?{signature:$.signature}:void 0};case"tool_result":return QH($)}}function QH($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function JH($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let W=$.metadata;return{type:"thinking",thinking:$.text,signature:W?.signature,details:W?.details}}case"image":return typeof $.image==="string"?{type:"image",data:$.image,mediaType:$.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:$.path,content:$.content};case"tool-call":{let W=$.metadata;return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:W?.thoughtSignature??W?.signature}}case"tool-result":{let W=$.output,Z=typeof W==="string"?W:Array.isArray(W)?W:JSON.stringify(W);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:Z,is_error:$.isError}}}}function WH($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function iT($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var ZH=0;function nT(){return ZH+=1,`msg_${Date.now().toString(36)}_${ZH.toString(36)}`}function aT($){switch($.type){case"text":return[{type:"text-delta",text:$.text}];case"reasoning":return[{type:"reasoning-delta",text:$.reasoning,metadata:$.signature?{thoughtSignature:$.signature,details:$.details}:{details:$.details}}];case"tool_calls":{let W=$.tool_call.function,Z=W.arguments;return[{type:"tool-call-delta",toolCallId:$.tool_call.call_id??W.id,toolName:W.name,inputText:typeof Z==="string"?Z:void 0,input:typeof Z==="string"?void 0:Z,...$.signature?{metadata:{thoughtSignature:$.signature}}:{}}]}case"usage":return[{type:"usage",usage:{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,reasoningTokenCount:$.thoughtsTokenCount,totalCost:$.totalCost}}];case"done":return[{type:"finish",reason:oT($),error:$.error}];default:return[]}}function oT($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function jH($){return{async*stream(W){let Z=!1,Q=!1;try{let J=typeof $==="function"?await $():$;J.setAbortSignal?.(W.signal);let j=h9(W.messages),X=W.tools.map((Y)=>({name:Y.name,description:Y.description,inputSchema:Y.inputSchema}));for await(let Y of J.createMessage(W.systemPrompt??"",j,X))for(let V of aT(Y)){if(V.type==="finish")Z=!0;else if(V.type==="tool-call-delta")Q=!0;yield V}if(!Z)yield{type:"finish",reason:Q?"tool-calls":"stop"}}catch(J){if(!Z)yield{type:"finish",reason:W.signal?.aborted?"aborted":"error",error:J instanceof Error?J.message:String(J)}}}}}function Zz($){let W=Object.fromEntries(Object.entries($).filter(([,Z])=>Z!==void 0));return Object.keys(W).length>0?W:void 0}function Qz($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function Jz($){let W={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(Qz($))Object.assign(W,{apiVersion:$.azure?.apiVersion,useIdentity:$.azure?.useIdentity});if($.providerId==="bedrock")Object.assign(W,{authentication:$.aws?.authentication,profile:$.aws?.profile,accessKeyId:$.aws?.accessKey,secretAccessKey:$.aws?.secretKey,sessionToken:$.aws?.sessionToken,usePromptCache:$.aws?.usePromptCache,useCrossRegionInference:$.useCrossRegionInference,useGlobalInference:$.useGlobalInference,endpoint:$.aws?.endpoint,customModelBaseId:$.aws?.customModelBaseId});if($.providerId==="vertex"){let Z=$.gcp?.region??$.region;Object.assign(W,{project:$.gcp?.projectId,projectId:$.gcp?.projectId,location:Z,region:Z})}if($.providerId==="sapaicore")Object.assign(W,$.sap);return Zz(W)}function K3($){let W=$.providerConfig;if(W?.knownModels)return W.knownModels;if($.knownModels)return $.knownModels;return $z[$.providerId]?.models??void 0}function jz($){if(!$?.length)return;let W=new Set;for(let Z of $)switch(Z){case"tools":case"reasoning":case"prompt-cache":case"images":W.add(Z);break;case"structured_output":W.add("structured-output");break;default:W.add("text")}return W.add("text"),[...W]}function Xz($,W){return{id:$,name:W.name??$,description:W.description,contextWindow:W.contextWindow,maxInputTokens:W.maxInputTokens,maxOutputTokens:W.maxTokens,capabilities:jz(W.capabilities),metadata:{family:W.family,pricing:W.pricing,status:W.status,releaseDate:W.releaseDate}}}function XH($,W,Z){let Q=$.providerConfig,J=Q?.providerId===$.providerId?Q:void 0,j={...J??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??J?.apiKey,baseUrl:$.baseUrl??J?.baseUrl,headers:$.headers??J?.headers,knownModels:K3($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:W,extensionContext:$.extensionContext};if(eT(Wz(j.providerId)))return jH(()=>tT(j));return sT({fetch:j.fetch,providerConfigs:[{providerId:j.providerId,apiKey:j.apiKey,baseUrl:j.baseUrl,headers:j.headers,fetch:j.fetch,options:Jz(j),models:j.knownModels?Object.entries(j.knownModels).map(([X,Y])=>Xz(X,Y)):void 0}],logger:W,telemetry:Z??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:j.providerId,modelId:j.modelId},{maxTokens:j.maxOutputTokens})}import{createMediaBudgetState as Yz,IMAGE_OMITTED_PLACEHOLDER as YH,normalizeUserInput as VH,resolveMediaBudget as Vz,validateAndReserveImageMedia as Bz}from"@cline/shared";var Hz=8000,Gz=50000,Kz=6000000,Fz=200000,Az=12000,Uz=65536,g4=2000,BH=40000,fz=8,F3={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},Dz=new Set(["read","read_files"]),L2="[outdated - see the latest file content]",HH="Tool execution was interrupted before a result was produced.",GH=($)=>`
178
178
 
179
179
  ...[truncated ${$} chars]...
180
180
 
181
- `,x4=($)=>`
181
+ `,m4=($)=>`
182
182
 
183
183
  ...[truncated ${$} chars to fit provider request budget]...
184
184
 
185
- `,Kz=($)=>`
185
+ `,_z=($)=>`
186
186
 
187
187
  ...[assistant text truncated: omitted ${$} chars]...
188
188
 
189
- `,BH=($)=>`
189
+ `,KH=($)=>`
190
190
 
191
191
  ...[assistant text truncated: omitted ${$} chars to fit provider request budget]...
192
192
 
193
- `,Fz=($)=>`
193
+ `,Lz=($)=>`
194
194
 
195
195
  ...[assistant text truncated: omitted ${$} chars due to repeated tool-call markup]...
196
196
 
197
- `;function KH($=process.env){return{maxToolResultChars:GH($[K3.maxToolResultChars]),maxTotalTextBytes:GH($[K3.maxTotalTextBytes]),minOutdatedRewriteBytes:Uz($[K3.minOutdatedRewriteBytes])}}class A3{indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor($={}){this.maxToolResultChars=k4($.maxToolResultChars,Jz),this.maxFileContentChars=k4($.maxFileContentChars,jz),this.maxTotalTextBytes=k4($.maxTotalTextBytes,Xz),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=k4($.maxAssistantTextChars,Yz),this.maxAssistantToolMarkupChars=k4($.maxAssistantToolMarkupChars,Vz),this.minOutdatedRewriteBytes=fz($.minOutdatedRewriteBytes,Bz)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Z=this.addMissingToolResults($).map((J)=>{if(!Array.isArray(J.content)){if(J.role==="user"&&typeof J.content==="string"){let Y=jH(J.content);if(Y!==J.content)return{...J,content:Y}}if(J.role==="assistant"&&typeof J.content==="string"){let Y=this.truncateAssistantText(J.content);if(Y!==J.content)return{...J,content:Y}}return J}let j=!1,X=J.content.map((Y)=>{let V=this.transformBlock(Y,J.role);if(V!==Y)j=!0;return V});return j?{...J,content:X}:J}),Q=this.applyMediaBudget(Z);return this.truncateToTotalTextBudget(Q)}transformBlock($,W){if(W==="user"&&$.type==="text"&&typeof $.text==="string"){let J=jH($.text);if(J!==$.text)return{...$,text:J};return $}if(W==="assistant"&&$.type==="text"&&typeof $.text==="string"){let J=this.truncateAssistantText($.text);return J===$.text?$:{...$,text:J}}if($.type==="file"){let J=h8($.content,this.maxFileContentChars,VH);return J===$.content?$:{...$,content:J}}if($.type!=="tool_result")return $;let Z=this.resolveToolName($),Q=$.content;if(this.isReadTool(Z)&&$.is_error!==!0){let J=this.committedOutdatedRewrites.get($.tool_use_id);if(J&&J.size>0){let X=this.getReadLocators($).filter((Y)=>J.has(this.toReadLocatorKey(Y))&&this.isOutdatedReadLocator(Y,$.tool_use_id));if(X.length>0)Q=this.replaceOutdatedReadContent(Q,X)}}return Q=this.truncateToolResultContent(Q),Q===$.content?$:{...$,content:Q}}reindex($){let W=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!W)this.resetIndexes();for(let Z=this.indexedMessageCount;Z<$.length;Z++){let Q=$[Z];if(!Array.isArray(Q.content))continue;for(let J=0;J<Q.content.length;J++){let j=Q.content[J];if(j.type==="file")this.latestFullContentOwnerByPathCache.set(j.path,`file:${Z}:${J}`);else if(j.type==="tool_use"){let X=j.name.toLowerCase();if(this.toolNameByIdCache.set(j.id,X),this.isReadTool(X)){let Y=this.extractLocatorsFromReadToolInput(j.input);if(Y.length>0)this.readLocatorsByToolUseIdCache.set(j.id,Y)}}else if(j.type==="tool_result"){let X=this.resolveToolName(j);if(!this.isReadTool(X)||j.is_error===!0)continue;let Y=this.getReadLocators(j);for(let V of Y)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),j.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,j.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let W=new Map,Z=new Set,Q=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let j of J.content){if(j.type!=="tool_result"||j.is_error===!0)continue;let X=this.resolveToolName(j);if(!this.isReadTool(X))continue;Z.add(j.tool_use_id);let Y=this.committedOutdatedRewrites.get(j.tool_use_id),V=new Set,B=new Set;for(let G of this.getReadLocators(j)){let K=this.toReadLocatorKey(G);if(!this.isOutdatedReadLocator(G,j.tool_use_id))continue;if(B.add(K),!Y?.has(K))V.add(K)}if(Y){for(let G of Y)if(!B.has(G))Y.delete(G);if(Y.size===0)this.committedOutdatedRewrites.delete(j.tool_use_id)}if(V.size===0)continue;let H=W.get(j.tool_use_id);if(!H)H=new Set,W.set(j.tool_use_id,H);for(let G of V)H.add(G);Q+=this.estimateOutdatedReclaimBytes(j.content,V)}}for(let J of this.committedOutdatedRewrites.keys())if(!Z.has(J))this.committedOutdatedRewrites.delete(J);if(W.size===0||Q<this.minOutdatedRewriteBytes)return;for(let[J,j]of W){let X=this.committedOutdatedRewrites.get(J);if(!X)X=new Set,this.committedOutdatedRewrites.set(J,X);for(let Y of j)X.add(Y)}}estimateOutdatedReclaimBytes($,W){let Z=this.extractReadLocatorsFromToolResultContent($),Q=Z.length>0&&Z.every((V)=>W.has(this.toReadLocatorKey(V))),J=(V)=>{let B;try{B=JSON.parse(V)}catch{return Q||Z.length===0?j0(this.truncateMiddle(V)):0}let H=Array.isArray(B)?B:[B],G=0;for(let K of H){let F=this.extractLocatorFromResultEntry(K);if(F&&W.has(this.toReadLocatorKey(F)))G+=this.providerBoundEntryBytes(K)}return G};if(typeof $==="string")return J($);let j=new Set(W),X=0;for(let V of $)if(V.type==="text")X+=this.countOutdatedImageEntries(V.text,j);let Y=0;for(let V of $)if(V.type==="text")Y+=J(V.text);else if(V.type==="image"){if(X>0)X-=1,Y+=j0(V.data)}else if(q$(V)){let B=this.extractLocatorFromResultEntry(V);if(B&&W.has(this.toReadLocatorKey(B)))Y+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(W.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))Y+=j0(this.truncateMiddle(V.content))}return Y}providerBoundEntryBytes($){let W=this.truncateNestedStrings($);return j0(JSON.stringify(W))}addMissingToolResults($){let W=this.collectToolResultIds($),Z=[],Q=new Map,J=!1,j=()=>{if(Q.size===0)return;X(this.createMissingToolResultMessage(Q)),Q.clear(),J=!0},X=(Y)=>{let V=Z.at(-1);if(this.shouldMergeUserAfterToolResults(V,Y)){Z[Z.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(Y.content)]},J=!0;return}Z.push(Y)};for(let Y of $){if(this.isToolResultOnlyMessage(Y)){if(X(this.appendMissingToolResults(Y,Q)),Q.size>0)Q.clear(),J=!0;continue}if(Array.isArray(Y.content)){let V=Y.content.filter((H)=>H.type==="tool_result"),B=Y.content.filter((H)=>H.type!=="tool_result");if(V.length>0){let H=this.appendMissingToolResults({...Y,role:"user",content:V},Q);if(X(H),Q.size>0)Q.clear();J=!0}if(B.length>0||V.length===0){if(V.length===0)j();let H=V.length>0?{...Y,content:B}:Y;if(X(H),H.role==="assistant")this.trackMissingToolCalls(H,W,Q)}continue}j(),X(Y)}return j(),J?Z:$}appendMissingToolResults($,W){if(W.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(W)]}}shouldMergeUserAfterToolResults($,W){return $?.role==="user"&&W.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(W.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let W=new Set;for(let Z of $){if(!Array.isArray(Z.content))continue;for(let Q of Z.content)if(Q.type==="tool_result")W.add(Q.tool_use_id)}return W}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((W)=>W.type==="tool_result")}trackMissingToolCalls($,W,Z){if(!Array.isArray($.content))return;for(let Q of $.content){if(Q.type!=="tool_use"||W.has(Q.id))continue;Z.set(Q.id,Q.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([W,Z])=>({type:"tool_result",tool_use_id:W,name:Z,content:[{type:"text",text:this.formatMissingToolResultText(Z)}],is_error:!0}))}formatMissingToolResultText($){return $?`${YH} Tool: ${$}.`:YH}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let W=$,Z=this.readResultLocatorCache.get(W);if(Z===void 0)Z=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(W,Z);if(Z.length>0)return Z;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let W=$,Z=[],Q=this.extractLocatorFromReadRequest(W);if(Q)Z.push(Q);if(Array.isArray(W.files))for(let J of W.files){let j=this.extractLocatorFromReadRequest(J);if(j)Z.push(j)}if(Array.isArray(W.file_paths)){for(let J of W.file_paths)if(typeof J==="string"&&J.length>0)Z.push({path:J,startLine:null,endLine:null})}return this.dedupeReadLocators(Z)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);let W=[];for(let Z of $){if(Z.type==="text"){W.push(...this.tryParseReadLocators(Z.text));continue}if(q$(Z)){let Q=this.extractLocatorFromResultEntry(Z);if(Q)W.push(Q)}}return this.dedupeReadLocators(W)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Z=[];for(let Q of $){let J=this.extractLocatorFromResultEntry(Q);if(J)Z.push(J)}return this.dedupeReadLocators(Z)}let W=this.extractLocatorFromResultEntry($);return W?[W]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let W=$,Z=this.extractPath(W);if(!Z)return;return{path:Z,startLine:this.extractLineNumber(W.start_line),endLine:this.extractLineNumber(W.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let W=$,Z=this.extractPath(W);if(Z)return{path:Z,startLine:this.extractLineNumber(W.start_line),endLine:this.extractLineNumber(W.end_line)};if(typeof W.query==="string"&&W.query.length>0)return this.parseReadQuery(W.query);return}extractPath($){let W=[$.path,$.file_path,$.filePath];for(let Z of W)if(typeof Z==="string"&&Z.length>0)return Z;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let W=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!W)return{path:$,startLine:null,endLine:null};return{path:W[1],startLine:Number(W[2]),endLine:W[3]==="EOF"?null:Number(W[3])}}dedupeReadLocators($){let W=new Map;for(let Z of $)W.set(this.toReadLocatorKey(Z),Z);return Array.from(W.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,W){let Z=this.latestFullContentOwnerByPathCache.get($.path);if(Z&&Z!==W)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==W}replaceOutdatedReadContent($,W){let Z=new Set(W.map((j)=>this.toReadLocatorKey(j))),Q=new Set(W.map((j)=>j.path));if(typeof $==="string")return this.replaceOutdatedInString($,Z)??L2;let J=0;for(let j of $)if(j.type==="text")J+=this.countOutdatedImageEntries(j.text,Z);return $.map((j)=>{if(j.type==="file"){if(!Q.has(j.path))return j;return{...j,content:L2}}if(j.type==="image"){if(J===0)return j;return J-=1,{type:"text",text:L2}}if(q$(j))return this.replaceOutdatedReadEntry(j,Z);if(j.type!=="text")return j;let X=this.replaceOutdatedInString(j.text,Z);if(X===null)return{...j,text:L2};return X===j.text?j:{...j,text:X}})}countOutdatedImageEntries($,W){let Z;try{Z=JSON.parse($)}catch{return 0}let Q=Array.isArray(Z)?Z:[Z],J=0;for(let j of Q){if(!j||typeof j!=="object")continue;let X=j,Y=this.extractLocatorFromResultEntry(X);if(!Y)continue;if(!W.has(this.toReadLocatorKey(Y)))continue;if(X.result==="Successfully read image"||X.content==="Successfully read image")J+=1}return J}replaceOutdatedInString($,W){let Z;try{Z=JSON.parse($)}catch{return null}let Q=Array.isArray(Z)?Z.map((J)=>this.replaceOutdatedReadEntry(J,W)):this.replaceOutdatedReadEntry(Z,W);return JSON.stringify(Q)}replaceOutdatedReadEntry($,W){if(!$||typeof $!=="object")return $;let Z=this.extractLocatorFromResultEntry($);if(!Z||!W.has(this.toReadLocatorKey(Z)))return $;let Q={...$};if(typeof Q.result==="string")Q.result=L2;else if(typeof Q.content==="string")Q.content=L2;else Q.result=L2;return Q}isReadTool($){return!!$&&Gz.has($)}resolveToolName($){let W=this.toolNameByIdCache.get($.tool_use_id);if(W!==void 0)return W;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((W)=>{if(W.type==="file"){let Z=this.truncateMiddle(W.content);return Z===W.content?W:{...W,content:Z}}if(W.type==="text"){let Z=this.truncateMiddle(W.text);return Z===W.text?W:{...W,text:Z}}if(q$(W))return this.truncateNestedStrings(W);return W})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let W=!1,Z=$.map((Q)=>{let J=this.truncateNestedStrings(Q);if(J!==Q)W=!0;return J});return W?Z:$}if($!==null&&typeof $==="object"){if(U3($))return $;let W=!1,Z={};for(let[Q,J]of Object.entries($)){let j=this.truncateNestedStrings(J);if(j!==J)W=!0;Z[Q]=j}return W?Z:$}return $}truncateMiddle($){return h8($,this.maxToolResultChars,VH)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return h8($,this.maxAssistantToolMarkupChars,Fz);return h8($,this.maxAssistantTextChars,Kz)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let W=0;for(let Z of $.matchAll(Az))if(W+=1,W>=Hz)return!0;return!1}truncateToTotalTextBudget($){let W=this.countMessageTextBytes($);if(W<=this.maxTotalTextBytes)return $;let Z=$.map((J)=>{if(!Array.isArray(J.content))return{...J};return{...J,content:J.content.map((j)=>_z(j))}}),Q=this.collectTruncationCandidates(Z);for(let J of Q){if(W<=this.maxTotalTextBytes)break;let j=J.byteLength;if(j<=J.minBytes)continue;let X=W-this.maxTotalTextBytes,Y=Math.max(J.minBytes,j-X),V=Dz(J.get(),Y,J.makeMarker);J.set(V),W-=j-j0(V)}return Z}countMessageTextBytes($){let W=0;for(let Z of $){if(typeof Z.content==="string"){W+=j0(Z.content);continue}for(let Q of Z.content)if(Q.type==="text")W+=j0(Q.text);else if(Q.type==="thinking")W+=j0(Q.thinking);else if(Q.type==="file")W+=j0(Q.content);else if(Q.type==="tool_use")W+=h9(Q.input);else if(Q.type==="tool_result"){if(typeof Q.content==="string")W+=j0(Q.content);else for(let J of Q.content)if(J.type==="text")W+=j0(J.text);else if(J.type==="file")W+=j0(J.content);else if(q$(J))W+=h9(J)}}return W}collectTruncationCandidates($){let W=[],Z=[];for(let Q of $){if(Q.role==="assistant"&&typeof Q.content==="string"){W.push({byteLength:j0(Q.content),minBytes:XH,makeMarker:BH,get:()=>Q.content,set:(J)=>{Q.content=J}});continue}if(!Array.isArray(Q.content))continue;for(let J of Q.content){if(J.type==="tool_use"){k9(J.input,Z);continue}if(Q.role==="assistant"&&J.type==="text"){W.push({byteLength:j0(J.text),minBytes:XH,makeMarker:BH,get:()=>J.text,set:(j)=>{J.text=j}});continue}if(J.type!=="tool_result")continue;if(typeof J.content==="string"){W.push({byteLength:j0(J.content),minBytes:I4,makeMarker:x4,get:()=>J.content,set:(j)=>{J.content=j}});continue}for(let j of J.content)if(j.type==="text")W.push({byteLength:j0(j.text),minBytes:I4,makeMarker:x4,get:()=>j.text,set:(X)=>{j.text=X}});else if(j.type==="file")W.push({byteLength:j0(j.content),minBytes:I4,makeMarker:x4,get:()=>j.content,set:(X)=>{j.content=X}});else if(q$(j))k9(j,W)}}return W.sort((Q,J)=>J.byteLength-Q.byteLength),Z.sort((Q,J)=>J.byteLength-Q.byteLength),[...W,...Z]}applyMediaBudget($){let W=this.resolveMediaBudget();if(W.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&W.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&W.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Z=Wz(),Q=!1,J=$.map((j)=>{if(!Array.isArray(j.content))return j;let X=!1,Y=j.content.map((V)=>{let B=this.applyMediaBudgetToBlock(V,W,Z);if(B!==V)X=!0;return B});if(!X)return j;return Q=!0,{...j,content:Y}});return Q?J:$}resolveMediaBudget(){return Zz(this.mediaBudget)}applyMediaBudgetToBlock($,W,Z){if(F3($))return this.limitImageContent($,W,Z);if($.type!=="tool_result"||typeof $.content==="string")return $;let Q=!1,J=$.content.map((j)=>{let X=this.applyMediaBudgetToToolResultEntry(j,W,Z);if(X!==j)Q=!0;return X});return Q?{...$,content:J}:$}applyMediaBudgetToToolResultEntry($,W,Z){if(F3($))return this.limitImageContent($,W,Z);if(q$($))return this.limitNestedMedia($,W,Z);return $}limitNestedMedia($,W,Z){if(F3($)){let Q=this.limitImageContent($,W,Z);return Q.type==="text"?Q.text:Q}if(Array.isArray($)){let Q=!1,J=$.map((j)=>{let X=this.limitNestedMedia(j,W,Z);if(X!==j)Q=!0;return X});return Q?J:$}if($!==null&&typeof $==="object"){let Q=!1,J={};for(let[j,X]of Object.entries($)){let Y=this.limitNestedMedia(X,W,Z);if(Y!==X)Q=!0;J[j]=Y}return Q?J:$}return $}limitImageContent($,W,Z){if(!FH($))return{type:"text",text:JH};let Q=Qz($.mediaType,$.data,{maxImageEncodedBytes:W.maxImageEncodedBytes,maxImageDecodedBytes:W.maxImageDecodedBytes,maxTotalMediaBytes:W.maxTotalMediaBytes},Z);if(!Q.ok)return{type:"text",text:JH};return{...$,data:Q.base64,mediaType:Q.mediaType}}}var HH=String.raw`[\|\uFF5C]`,Az=new RegExp(String.raw`<\s*(?:${HH}\s*)?DSML\s*(?:${HH}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function j0($){return Buffer.byteLength($,"utf8")}function GH($){if($===void 0)return;let W=Number.parseInt($,10);return Number.isFinite(W)&&W>0?W:void 0}function Uz($){if($===void 0)return;let W=$.trim().toLowerCase();if(W==="infinity"||W==="disable")return Number.POSITIVE_INFINITY;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>=0?Z:void 0}function k4($,W){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):W}function fz($,W){if(typeof $!=="number"||Number.isNaN($)||$<0)return W;return Number.isFinite($)?Math.floor($):$}function h8($,W,Z){if($.length<=W)return $;let Q=Z($.length-W),J=Math.max(0,Math.floor((W-Q.length)/2)),j=Math.max(0,$.length-J*2),X=Z(j),Y=Math.max(0,Math.floor((W-X.length)/2)),V=$.slice(0,Y),B=Y>0?$.slice(-Y):"";return`${V}${X}${B}`}function Dz($,W,Z){if(j0($)<=W)return $;let Q=0,J=$.length,j=h8($,0,Z);while(Q<=J){let X=Q+J>>>1,Y=h8($,X,Z);if(j0(Y)<=W)j=Y,Q=X+1;else J=X-1}return j}function _z($){if($.type==="tool_use")return{...$,input:I9($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((W)=>q$(W)?I9(W):{...W})}}function q$($){if($===null||typeof $!=="object")return!1;let W=$.type;return W!=="text"&&W!=="image"&&W!=="file"}function F3($){return $!==null&&typeof $==="object"&&$.type==="image"}function FH($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function U3($){return FH($)}function h9($){if(typeof $==="string")return j0($);if(Array.isArray($)){let W=0;for(let Z of $)W+=h9(Z);return W}if($!==null&&typeof $==="object"){if(U3($))return 0;let W=0;for(let Z of Object.values($))W+=h9(Z);return W}return 0}function k9($,W){if(Array.isArray($)){$.forEach((Z,Q)=>{if(typeof Z==="string")W.push({byteLength:j0(Z),minBytes:I4,makeMarker:x4,get:()=>$[Q],set:(J)=>{$[Q]=J}});else k9(Z,W)});return}if($!==null&&typeof $==="object"){if(U3($))return;let Z=$;for(let Q of Object.keys(Z)){let J=Z[Q];if(typeof J==="string")W.push({byteLength:j0(J),minBytes:I4,makeMarker:x4,get:()=>Z[Q],set:(j)=>{Z[Q]=j}});else k9(J,W)}}}function I9($){if(Array.isArray($))return $.map(I9);if($!==null&&typeof $==="object"){let W={};for(let[Z,Q]of Object.entries($))W[Z]=I9(Q);return W}return $}function f3(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class D3{messages=[];conversationId=f3();sessionStarted=!1;constructor($){if(($?.length??0)>0)this.restore($??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage($){this.messages.push($)}appendMessages($){if($.length===0)return;this.messages.push(...$)}replaceMessages($){this.messages=[...$]}resetForRun(){this.messages=[],this.conversationId=f3(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=f3(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function AH($){let{agentConfig:W}=$,Z=Lz(W),Q=Oz(W),J=$.hooks,j=Tz(W.maxParallelToolCalls);return{sessionId:$.sessionId??W.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??W.systemPrompt,messageModelInfo:Q,model:$.model,modelOptions:Z,tools:$.tools,hooks:J,prepareTurn:$.prepareTurn,consumePendingUserMessage:W.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??W.logger,telemetry:$.telemetry??W.telemetry,initialMessages:$.initialMessages,completionPolicy:W.completionPolicy,maxIterations:W.maxIterations,toolExecution:j,toolPolicies:W.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:W.requestToolApproval}}function Lz($){let W={};if($.thinking!==void 0)W.thinking=$.thinking;if($.reasoningEffort!==void 0)W.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)W.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)W.maxTokensPerTurn=$.maxTokensPerTurn;if($.apiTimeoutMs!==void 0)W.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(W).length>0?W:void 0}function Oz($){let W=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:W}}function Tz($){if($===void 0)return;return $>=2?"parallel":"sequential"}var UH={};E(UH,{normalizeConnectionUpdate:()=>O2,buildConnectionUpdate:()=>_3});function _3($){let W={};if($.providerId!==void 0)W.providerId=$.providerId;if($.modelId!==void 0)W.modelId=$.modelId;if($.apiKey!==void 0)W.apiKey=$.apiKey;if($.baseUrl!==void 0)W.baseUrl=$.baseUrl;if($.headers!==void 0)W.headers=$.headers;if($.providerConfig!==void 0)W.providerConfig=$.providerConfig;if($.thinking===!1)return W.thinking=!1,W.reasoningEffort=null,W.thinkingBudgetTokens=null,W;if($.thinking===!0)W.thinking=!0,W.reasoningEffort=$.reasoningEffort??null,W.thinkingBudgetTokens=null;else if($.reasoningEffort!==void 0)W.thinking=!0,W.reasoningEffort=$.reasoningEffort;if(typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)W.thinking=!0,W.thinkingBudgetTokens=Math.trunc($.thinkingBudgetTokens);return W}function O2($){let W={...$},Z=Object.hasOwn($,"thinking"),Q=Object.hasOwn($,"thinkingBudgetTokens");if($.thinking===!1||$.thinking===null)return W.reasoningEffort=void 0,W.thinkingBudgetTokens=void 0,W;if(!Z&&Q&&typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)W.thinking=!0;return W}function zz(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function qz($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function L3($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(L3);let W={};for(let Z of Object.keys($).sort())W[Z]=L3($[Z]);return W}function Mz($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(L3($))}catch{return String($)}}function Rz($,W,Z,Q){if(W===$.lastToolName&&Z===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=W,$.lastToolSignature=Z,{softWarning:$.consecutiveIdenticalCount===Q.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=Q.hardThreshold}}var fH={softThreshold:3,hardThreshold:5};class O3{config;state=zz();constructor($){this.config={softThreshold:$?.softThreshold??fH.softThreshold,hardThreshold:$?.hardThreshold??fH.hardThreshold}}inspect($){let W=Mz($.input),Z=Rz(this.state,$.name,W,this.config);if(Z.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Z.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){qz(this.state)}}class T3{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let W=this.options.maxConsecutiveMistakes,Z=$.forceAtLimit&&W?W:this.consecutiveMistakes+1;this.consecutiveMistakes=Z;let Q=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(Q),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Z,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!W||Z<W)return{action:"continue"};let J=await Ez({iteration:$.iteration,consecutiveMistakes:Z,maxConsecutiveMistakes:W,reason:$.reason,details:$.details},this.options.onLimitReached);if(J.action==="continue"){let j=J.guidance?.trim();if(j)this.options.appendRecoveryNotice(j,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:j}}return{action:"stop",reason:J.reason?.trim()||void 0,message:Nz({iteration:$.iteration,consecutiveMistakes:Z,maxConsecutiveMistakes:W,reason:$.reason,details:$.details,stopReason:J.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function Nz($){let W=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Z=$.details?.trim();if(Z)W.push(`Error: ${Z}`);let Q=$.stopReason?.trim();if(Q)W.push(`Decision: ${Q}`);return W.push("Session state was preserved. Send a new prompt to resume from the latest state."),W.join(" ")}async function Ez($,W){if(!W)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await W($)}catch(Z){return{action:"stop",reason:Z instanceof Error?Z.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function wz($){switch($){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return $;default:return}}function Cz($){let W=$.content.filter((Z)=>Z.type==="text");if(W.length===0)return;return W.map((Z)=>Z.text).join("")}function Pz($){let W=$.content.filter((Z)=>Z.type==="reasoning");if(W.length===0)return;return{reasoning:W.map((Z)=>Z.text).join(""),redacted:W.some((Z)=>Z.redacted===!0)}}function Sz($){return $.content.find((W)=>W.type==="tool-result")}function bz($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function yz($){if(!$||$.isError!==!0)return;if(typeof $.output==="string")return $.output;if($.output instanceof Error)return $.output.message;try{return JSON.stringify($.output)}catch{return String($.output)}}class z3{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:wz($.metadata?.reason),metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let W=[],Z=Cz($);if(Z!==void 0)W.push({type:"content_end",contentType:"text",text:Z});let Q=Pz($);if(Q!==void 0)W.push({type:"content_end",contentType:"reasoning",reasoning:Q.reasoning});return W}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input}]}translateToolFinished($){let W=this.toolStartedAt.get($.toolCall.toolCallId),Z=W===void 0?void 0:Date.now()-W;this.toolStartedAt.delete($.toolCall.toolCallId);let Q=Sz($.message),J=Q?.output,j=yz(Q);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:J,error:j,durationMs:Z}]}translateUsage($){let W=$.inputTokens-this.lastUsage.inputTokens,Z=$.outputTokens-this.lastUsage.outputTokens,Q=$.cacheReadTokens-this.lastUsage.cacheReadTokens,J=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,j=this.lastUsage.totalCost??0,Y=($.totalCost??0)-j;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,W),outputTokens:Math.max(0,Z),cacheReadTokens:Q===0?void 0:Math.max(0,Q),cacheWriteTokens:J===0?void 0:Math.max(0,J),cost:Y===0?void 0:Y,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let W={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:bz($.status),text:$.outputText,iterations:$.iterations,usage:W}]}}function cz($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function uz($){let Z=(typeof $.content==="function"?await $.content():$.content).trim();return Z.length>0?Z:void 0}function dz($,W){let Z=$.trim(),Q=W.map((J)=>J.trim()).filter(Boolean).join(`
197
+ `;function UH($=process.env){return{maxToolResultChars:AH($[F3.maxToolResultChars]),maxTotalTextBytes:AH($[F3.maxTotalTextBytes]),minOutdatedRewriteBytes:Tz($[F3.minOutdatedRewriteBytes])}}class U3{indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor($={}){this.maxToolResultChars=x4($.maxToolResultChars,Hz),this.maxFileContentChars=x4($.maxFileContentChars,Gz),this.maxTotalTextBytes=x4($.maxTotalTextBytes,Kz),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=x4($.maxAssistantTextChars,Fz),this.maxAssistantToolMarkupChars=x4($.maxAssistantToolMarkupChars,Az),this.minOutdatedRewriteBytes=zz($.minOutdatedRewriteBytes,Uz)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Z=this.addMissingToolResults($).map((J)=>{if(!Array.isArray(J.content)){if(J.role==="user"&&typeof J.content==="string"){let Y=VH(J.content);if(Y!==J.content)return{...J,content:Y}}if(J.role==="assistant"&&typeof J.content==="string"){let Y=this.truncateAssistantText(J.content);if(Y!==J.content)return{...J,content:Y}}return J}let j=!1,X=J.content.map((Y)=>{let V=this.transformBlock(Y,J.role);if(V!==Y)j=!0;return V});return j?{...J,content:X}:J}),Q=this.applyMediaBudget(Z);return this.truncateToTotalTextBudget(Q)}transformBlock($,W){if(W==="user"&&$.type==="text"&&typeof $.text==="string"){let J=VH($.text);if(J!==$.text)return{...$,text:J};return $}if(W==="assistant"&&$.type==="text"&&typeof $.text==="string"){let J=this.truncateAssistantText($.text);return J===$.text?$:{...$,text:J}}if($.type==="file"){let J=k8($.content,this.maxFileContentChars,GH);return J===$.content?$:{...$,content:J}}if($.type!=="tool_result")return $;let Z=this.resolveToolName($),Q=$.content;if(this.isReadTool(Z)&&$.is_error!==!0){let J=this.committedOutdatedRewrites.get($.tool_use_id);if(J&&J.size>0){let X=this.getReadLocators($).filter((Y)=>J.has(this.toReadLocatorKey(Y))&&this.isOutdatedReadLocator(Y,$.tool_use_id));if(X.length>0)Q=this.replaceOutdatedReadContent(Q,X)}}return Q=this.truncateToolResultContent(Q),Q===$.content?$:{...$,content:Q}}reindex($){let W=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!W)this.resetIndexes();for(let Z=this.indexedMessageCount;Z<$.length;Z++){let Q=$[Z];if(!Array.isArray(Q.content))continue;for(let J=0;J<Q.content.length;J++){let j=Q.content[J];if(j.type==="file")this.latestFullContentOwnerByPathCache.set(j.path,`file:${Z}:${J}`);else if(j.type==="tool_use"){let X=j.name.toLowerCase();if(this.toolNameByIdCache.set(j.id,X),this.isReadTool(X)){let Y=this.extractLocatorsFromReadToolInput(j.input);if(Y.length>0)this.readLocatorsByToolUseIdCache.set(j.id,Y)}}else if(j.type==="tool_result"){let X=this.resolveToolName(j);if(!this.isReadTool(X)||j.is_error===!0)continue;let Y=this.getReadLocators(j);for(let V of Y)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),j.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,j.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let W=new Map,Z=new Set,Q=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let j of J.content){if(j.type!=="tool_result"||j.is_error===!0)continue;let X=this.resolveToolName(j);if(!this.isReadTool(X))continue;Z.add(j.tool_use_id);let Y=this.committedOutdatedRewrites.get(j.tool_use_id),V=new Set,B=new Set;for(let G of this.getReadLocators(j)){let K=this.toReadLocatorKey(G);if(!this.isOutdatedReadLocator(G,j.tool_use_id))continue;if(B.add(K),!Y?.has(K))V.add(K)}if(Y){for(let G of Y)if(!B.has(G))Y.delete(G);if(Y.size===0)this.committedOutdatedRewrites.delete(j.tool_use_id)}if(V.size===0)continue;let H=W.get(j.tool_use_id);if(!H)H=new Set,W.set(j.tool_use_id,H);for(let G of V)H.add(G);Q+=this.estimateOutdatedReclaimBytes(j.content,V)}}for(let J of this.committedOutdatedRewrites.keys())if(!Z.has(J))this.committedOutdatedRewrites.delete(J);if(W.size===0||Q<this.minOutdatedRewriteBytes)return;for(let[J,j]of W){let X=this.committedOutdatedRewrites.get(J);if(!X)X=new Set,this.committedOutdatedRewrites.set(J,X);for(let Y of j)X.add(Y)}}estimateOutdatedReclaimBytes($,W){let Z=this.extractReadLocatorsFromToolResultContent($),Q=Z.length>0&&Z.every((V)=>W.has(this.toReadLocatorKey(V))),J=(V)=>{let B;try{B=JSON.parse(V)}catch{return Q||Z.length===0?j0(this.truncateMiddle(V)):0}let H=Array.isArray(B)?B:[B],G=0;for(let K of H){let F=this.extractLocatorFromResultEntry(K);if(F&&W.has(this.toReadLocatorKey(F)))G+=this.providerBoundEntryBytes(K)}return G};if(typeof $==="string")return J($);let j=new Set(W),X=0;for(let V of $)if(V.type==="text")X+=this.countOutdatedImageEntries(V.text,j);let Y=0;for(let V of $)if(V.type==="text")Y+=J(V.text);else if(V.type==="image"){if(X>0)X-=1,Y+=j0(V.data)}else if(M$(V)){let B=this.extractLocatorFromResultEntry(V);if(B&&W.has(this.toReadLocatorKey(B)))Y+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(W.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))Y+=j0(this.truncateMiddle(V.content))}return Y}providerBoundEntryBytes($){let W=this.truncateNestedStrings($);return j0(JSON.stringify(W))}addMissingToolResults($){let W=this.collectToolResultIds($),Z=[],Q=new Map,J=!1,j=()=>{if(Q.size===0)return;X(this.createMissingToolResultMessage(Q)),Q.clear(),J=!0},X=(Y)=>{let V=Z.at(-1);if(this.shouldMergeUserAfterToolResults(V,Y)){Z[Z.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(Y.content)]},J=!0;return}Z.push(Y)};for(let Y of $){if(this.isToolResultOnlyMessage(Y)){if(X(this.appendMissingToolResults(Y,Q)),Q.size>0)Q.clear(),J=!0;continue}if(Array.isArray(Y.content)){let V=Y.content.filter((H)=>H.type==="tool_result"),B=Y.content.filter((H)=>H.type!=="tool_result");if(V.length>0){let H=this.appendMissingToolResults({...Y,role:"user",content:V},Q);if(X(H),Q.size>0)Q.clear();J=!0}if(B.length>0||V.length===0){if(V.length===0)j();let H=V.length>0?{...Y,content:B}:Y;if(X(H),H.role==="assistant")this.trackMissingToolCalls(H,W,Q)}continue}j(),X(Y)}return j(),J?Z:$}appendMissingToolResults($,W){if(W.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(W)]}}shouldMergeUserAfterToolResults($,W){return $?.role==="user"&&W.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(W.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let W=new Set;for(let Z of $){if(!Array.isArray(Z.content))continue;for(let Q of Z.content)if(Q.type==="tool_result")W.add(Q.tool_use_id)}return W}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((W)=>W.type==="tool_result")}trackMissingToolCalls($,W,Z){if(!Array.isArray($.content))return;for(let Q of $.content){if(Q.type!=="tool_use"||W.has(Q.id))continue;Z.set(Q.id,Q.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([W,Z])=>({type:"tool_result",tool_use_id:W,name:Z,content:[{type:"text",text:this.formatMissingToolResultText(Z)}],is_error:!0}))}formatMissingToolResultText($){return $?`${HH} Tool: ${$}.`:HH}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let W=$,Z=this.readResultLocatorCache.get(W);if(Z===void 0)Z=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(W,Z);if(Z.length>0)return Z;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let W=$,Z=[],Q=this.extractLocatorFromReadRequest(W);if(Q)Z.push(Q);if(Array.isArray(W.files))for(let J of W.files){let j=this.extractLocatorFromReadRequest(J);if(j)Z.push(j)}if(Array.isArray(W.file_paths)){for(let J of W.file_paths)if(typeof J==="string"&&J.length>0)Z.push({path:J,startLine:null,endLine:null})}return this.dedupeReadLocators(Z)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);let W=[];for(let Z of $){if(Z.type==="text"){W.push(...this.tryParseReadLocators(Z.text));continue}if(M$(Z)){let Q=this.extractLocatorFromResultEntry(Z);if(Q)W.push(Q)}}return this.dedupeReadLocators(W)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Z=[];for(let Q of $){let J=this.extractLocatorFromResultEntry(Q);if(J)Z.push(J)}return this.dedupeReadLocators(Z)}let W=this.extractLocatorFromResultEntry($);return W?[W]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let W=$,Z=this.extractPath(W);if(!Z)return;return{path:Z,startLine:this.extractLineNumber(W.start_line),endLine:this.extractLineNumber(W.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let W=$,Z=this.extractPath(W);if(Z)return{path:Z,startLine:this.extractLineNumber(W.start_line),endLine:this.extractLineNumber(W.end_line)};if(typeof W.query==="string"&&W.query.length>0)return this.parseReadQuery(W.query);return}extractPath($){let W=[$.path,$.file_path,$.filePath];for(let Z of W)if(typeof Z==="string"&&Z.length>0)return Z;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let W=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!W)return{path:$,startLine:null,endLine:null};return{path:W[1],startLine:Number(W[2]),endLine:W[3]==="EOF"?null:Number(W[3])}}dedupeReadLocators($){let W=new Map;for(let Z of $)W.set(this.toReadLocatorKey(Z),Z);return Array.from(W.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,W){let Z=this.latestFullContentOwnerByPathCache.get($.path);if(Z&&Z!==W)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==W}replaceOutdatedReadContent($,W){let Z=new Set(W.map((j)=>this.toReadLocatorKey(j))),Q=new Set(W.map((j)=>j.path));if(typeof $==="string")return this.replaceOutdatedInString($,Z)??L2;let J=0;for(let j of $)if(j.type==="text")J+=this.countOutdatedImageEntries(j.text,Z);return $.map((j)=>{if(j.type==="file"){if(!Q.has(j.path))return j;return{...j,content:L2}}if(j.type==="image"){if(J===0)return j;return J-=1,{type:"text",text:L2}}if(M$(j))return this.replaceOutdatedReadEntry(j,Z);if(j.type!=="text")return j;let X=this.replaceOutdatedInString(j.text,Z);if(X===null)return{...j,text:L2};return X===j.text?j:{...j,text:X}})}countOutdatedImageEntries($,W){let Z;try{Z=JSON.parse($)}catch{return 0}let Q=Array.isArray(Z)?Z:[Z],J=0;for(let j of Q){if(!j||typeof j!=="object")continue;let X=j,Y=this.extractLocatorFromResultEntry(X);if(!Y)continue;if(!W.has(this.toReadLocatorKey(Y)))continue;if(X.result==="Successfully read image"||X.content==="Successfully read image")J+=1}return J}replaceOutdatedInString($,W){let Z;try{Z=JSON.parse($)}catch{return null}let Q=Array.isArray(Z)?Z.map((J)=>this.replaceOutdatedReadEntry(J,W)):this.replaceOutdatedReadEntry(Z,W);return JSON.stringify(Q)}replaceOutdatedReadEntry($,W){if(!$||typeof $!=="object")return $;let Z=this.extractLocatorFromResultEntry($);if(!Z||!W.has(this.toReadLocatorKey(Z)))return $;let Q={...$};if(typeof Q.result==="string")Q.result=L2;else if(typeof Q.content==="string")Q.content=L2;else Q.result=L2;return Q}isReadTool($){return!!$&&Dz.has($)}resolveToolName($){let W=this.toolNameByIdCache.get($.tool_use_id);if(W!==void 0)return W;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((W)=>{if(W.type==="file"){let Z=this.truncateMiddle(W.content);return Z===W.content?W:{...W,content:Z}}if(W.type==="text"){let Z=this.truncateMiddle(W.text);return Z===W.text?W:{...W,text:Z}}if(M$(W))return this.truncateNestedStrings(W);return W})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let W=!1,Z=$.map((Q)=>{let J=this.truncateNestedStrings(Q);if(J!==Q)W=!0;return J});return W?Z:$}if($!==null&&typeof $==="object"){if(f3($))return $;let W=!1,Z={};for(let[Q,J]of Object.entries($)){let j=this.truncateNestedStrings(J);if(j!==J)W=!0;Z[Q]=j}return W?Z:$}return $}truncateMiddle($){return k8($,this.maxToolResultChars,GH)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return k8($,this.maxAssistantToolMarkupChars,Lz);return k8($,this.maxAssistantTextChars,_z)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let W=0;for(let Z of $.matchAll(Oz))if(W+=1,W>=fz)return!0;return!1}truncateToTotalTextBudget($){let W=this.countMessageTextBytes($);if(W<=this.maxTotalTextBytes)return $;let Z=$.map((J)=>{if(!Array.isArray(J.content))return{...J};return{...J,content:J.content.map((j)=>Mz(j))}}),Q=this.collectTruncationCandidates(Z);for(let J of Q){if(W<=this.maxTotalTextBytes)break;let j=J.byteLength;if(j<=J.minBytes)continue;let X=W-this.maxTotalTextBytes,Y=Math.max(J.minBytes,j-X),V=qz(J.get(),Y,J.makeMarker);J.set(V),W-=j-j0(V)}return Z}countMessageTextBytes($){let W=0;for(let Z of $){if(typeof Z.content==="string"){W+=j0(Z.content);continue}for(let Q of Z.content)if(Q.type==="text")W+=j0(Q.text);else if(Q.type==="thinking")W+=j0(Q.thinking);else if(Q.type==="file")W+=j0(Q.content);else if(Q.type==="tool_use")W+=k9(Q.input);else if(Q.type==="tool_result"){if(typeof Q.content==="string")W+=j0(Q.content);else for(let J of Q.content)if(J.type==="text")W+=j0(J.text);else if(J.type==="file")W+=j0(J.content);else if(M$(J))W+=k9(J)}}return W}collectTruncationCandidates($){let W=[],Z=[];for(let Q of $){if(Q.role==="assistant"&&typeof Q.content==="string"){W.push({byteLength:j0(Q.content),minBytes:BH,makeMarker:KH,get:()=>Q.content,set:(J)=>{Q.content=J}});continue}if(!Array.isArray(Q.content))continue;for(let J of Q.content){if(J.type==="tool_use"){I9(J.input,Z);continue}if(Q.role==="assistant"&&J.type==="text"){W.push({byteLength:j0(J.text),minBytes:BH,makeMarker:KH,get:()=>J.text,set:(j)=>{J.text=j}});continue}if(J.type!=="tool_result")continue;if(typeof J.content==="string"){W.push({byteLength:j0(J.content),minBytes:g4,makeMarker:m4,get:()=>J.content,set:(j)=>{J.content=j}});continue}for(let j of J.content)if(j.type==="text")W.push({byteLength:j0(j.text),minBytes:g4,makeMarker:m4,get:()=>j.text,set:(X)=>{j.text=X}});else if(j.type==="file")W.push({byteLength:j0(j.content),minBytes:g4,makeMarker:m4,get:()=>j.content,set:(X)=>{j.content=X}});else if(M$(j))I9(j,W)}}return W.sort((Q,J)=>J.byteLength-Q.byteLength),Z.sort((Q,J)=>J.byteLength-Q.byteLength),[...W,...Z]}applyMediaBudget($){let W=this.resolveMediaBudget();if(W.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&W.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&W.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Z=Yz(),Q=!1,J=$.map((j)=>{if(!Array.isArray(j.content))return j;let X=!1,Y=j.content.map((V)=>{let B=this.applyMediaBudgetToBlock(V,W,Z);if(B!==V)X=!0;return B});if(!X)return j;return Q=!0,{...j,content:Y}});return Q?J:$}resolveMediaBudget(){return Vz(this.mediaBudget)}applyMediaBudgetToBlock($,W,Z){if(A3($))return this.limitImageContent($,W,Z);if($.type!=="tool_result"||typeof $.content==="string")return $;let Q=!1,J=$.content.map((j)=>{let X=this.applyMediaBudgetToToolResultEntry(j,W,Z);if(X!==j)Q=!0;return X});return Q?{...$,content:J}:$}applyMediaBudgetToToolResultEntry($,W,Z){if(A3($))return this.limitImageContent($,W,Z);if(M$($))return this.limitNestedMedia($,W,Z);return $}limitNestedMedia($,W,Z){if(A3($)){let Q=this.limitImageContent($,W,Z);return Q.type==="text"?Q.text:Q}if(Array.isArray($)){let Q=!1,J=$.map((j)=>{let X=this.limitNestedMedia(j,W,Z);if(X!==j)Q=!0;return X});return Q?J:$}if($!==null&&typeof $==="object"){let Q=!1,J={};for(let[j,X]of Object.entries($)){let Y=this.limitNestedMedia(X,W,Z);if(Y!==X)Q=!0;J[j]=Y}return Q?J:$}return $}limitImageContent($,W,Z){if(!fH($))return{type:"text",text:YH};let Q=Bz($.mediaType,$.data,{maxImageEncodedBytes:W.maxImageEncodedBytes,maxImageDecodedBytes:W.maxImageDecodedBytes,maxTotalMediaBytes:W.maxTotalMediaBytes},Z);if(!Q.ok)return{type:"text",text:YH};return{...$,data:Q.base64,mediaType:Q.mediaType}}}var FH=String.raw`[\|\uFF5C]`,Oz=new RegExp(String.raw`<\s*(?:${FH}\s*)?DSML\s*(?:${FH}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function j0($){return Buffer.byteLength($,"utf8")}function AH($){if($===void 0)return;let W=Number.parseInt($,10);return Number.isFinite(W)&&W>0?W:void 0}function Tz($){if($===void 0)return;let W=$.trim().toLowerCase();if(W==="infinity"||W==="disable")return Number.POSITIVE_INFINITY;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>=0?Z:void 0}function x4($,W){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):W}function zz($,W){if(typeof $!=="number"||Number.isNaN($)||$<0)return W;return Number.isFinite($)?Math.floor($):$}function k8($,W,Z){if($.length<=W)return $;let Q=Z($.length-W),J=Math.max(0,Math.floor((W-Q.length)/2)),j=Math.max(0,$.length-J*2),X=Z(j),Y=Math.max(0,Math.floor((W-X.length)/2)),V=$.slice(0,Y),B=Y>0?$.slice(-Y):"";return`${V}${X}${B}`}function qz($,W,Z){if(j0($)<=W)return $;let Q=0,J=$.length,j=k8($,0,Z);while(Q<=J){let X=Q+J>>>1,Y=k8($,X,Z);if(j0(Y)<=W)j=Y,Q=X+1;else J=X-1}return j}function Mz($){if($.type==="tool_use")return{...$,input:x9($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((W)=>M$(W)?x9(W):{...W})}}function M$($){if($===null||typeof $!=="object")return!1;let W=$.type;return W!=="text"&&W!=="image"&&W!=="file"}function A3($){return $!==null&&typeof $==="object"&&$.type==="image"}function fH($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function f3($){return fH($)}function k9($){if(typeof $==="string")return j0($);if(Array.isArray($)){let W=0;for(let Z of $)W+=k9(Z);return W}if($!==null&&typeof $==="object"){if(f3($))return 0;let W=0;for(let Z of Object.values($))W+=k9(Z);return W}return 0}function I9($,W){if(Array.isArray($)){$.forEach((Z,Q)=>{if(typeof Z==="string")W.push({byteLength:j0(Z),minBytes:g4,makeMarker:m4,get:()=>$[Q],set:(J)=>{$[Q]=J}});else I9(Z,W)});return}if($!==null&&typeof $==="object"){if(f3($))return;let Z=$;for(let Q of Object.keys(Z)){let J=Z[Q];if(typeof J==="string")W.push({byteLength:j0(J),minBytes:g4,makeMarker:m4,get:()=>Z[Q],set:(j)=>{Z[Q]=j}});else I9(J,W)}}}function x9($){if(Array.isArray($))return $.map(x9);if($!==null&&typeof $==="object"){let W={};for(let[Z,Q]of Object.entries($))W[Z]=x9(Q);return W}return $}function D3(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class _3{messages=[];conversationId=D3();sessionStarted=!1;constructor($){if(($?.length??0)>0)this.restore($??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage($){this.messages.push($)}appendMessages($){if($.length===0)return;this.messages.push(...$)}replaceMessages($){this.messages=[...$]}resetForRun(){this.messages=[],this.conversationId=D3(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=D3(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function DH($){let{agentConfig:W}=$,Z=Nz(W),Q=Rz(W),J=$.hooks,j=Ez(W.maxParallelToolCalls);return{sessionId:$.sessionId??W.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??W.systemPrompt,messageModelInfo:Q,model:$.model,modelOptions:Z,tools:$.tools,hooks:J,prepareTurn:$.prepareTurn,consumePendingUserMessage:W.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??W.logger,telemetry:$.telemetry??W.telemetry,initialMessages:$.initialMessages,completionPolicy:W.completionPolicy,maxIterations:W.maxIterations,toolExecution:j,toolPolicies:W.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:W.requestToolApproval}}function Nz($){let W={};if($.thinking!==void 0)W.thinking=$.thinking;if($.reasoningEffort!==void 0)W.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)W.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)W.maxTokensPerTurn=$.maxTokensPerTurn;if($.apiTimeoutMs!==void 0)W.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(W).length>0?W:void 0}function Rz($){let W=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:W}}function Ez($){if($===void 0)return;return $>=2?"parallel":"sequential"}var _H={};w(_H,{normalizeConnectionUpdate:()=>O2,buildConnectionUpdate:()=>L3});function L3($){let W={};if($.providerId!==void 0)W.providerId=$.providerId;if($.modelId!==void 0)W.modelId=$.modelId;if($.apiKey!==void 0)W.apiKey=$.apiKey;if($.baseUrl!==void 0)W.baseUrl=$.baseUrl;if($.headers!==void 0)W.headers=$.headers;if($.providerConfig!==void 0)W.providerConfig=$.providerConfig;if($.thinking===!1)return W.thinking=!1,W.reasoningEffort=null,W.thinkingBudgetTokens=null,W;if($.thinking===!0)W.thinking=!0,W.reasoningEffort=$.reasoningEffort??null,W.thinkingBudgetTokens=null;else if($.reasoningEffort!==void 0)W.thinking=!0,W.reasoningEffort=$.reasoningEffort;if(typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)W.thinking=!0,W.thinkingBudgetTokens=Math.trunc($.thinkingBudgetTokens);return W}function O2($){let W={...$},Z=Object.hasOwn($,"thinking"),Q=Object.hasOwn($,"thinkingBudgetTokens");if($.thinking===!1||$.thinking===null)return W.reasoningEffort=void 0,W.thinkingBudgetTokens=void 0,W;if(!Z&&Q&&typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)W.thinking=!0;return W}function wz(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function Cz($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function O3($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(O3);let W={};for(let Z of Object.keys($).sort())W[Z]=O3($[Z]);return W}function Pz($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(O3($))}catch{return String($)}}function Sz($,W,Z,Q){if(W===$.lastToolName&&Z===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=W,$.lastToolSignature=Z,{softWarning:$.consecutiveIdenticalCount===Q.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=Q.hardThreshold}}var LH={softThreshold:3,hardThreshold:5};class T3{config;state=wz();constructor($){this.config={softThreshold:$?.softThreshold??LH.softThreshold,hardThreshold:$?.hardThreshold??LH.hardThreshold}}inspect($){let W=Pz($.input),Z=Sz(this.state,$.name,W,this.config);if(Z.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Z.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){Cz(this.state)}}class z3{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let W=this.options.maxConsecutiveMistakes,Z=$.forceAtLimit&&W?W:this.consecutiveMistakes+1;this.consecutiveMistakes=Z;let Q=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(Q),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Z,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!W||Z<W)return{action:"continue"};let J=await yz({iteration:$.iteration,consecutiveMistakes:Z,maxConsecutiveMistakes:W,reason:$.reason,details:$.details},this.options.onLimitReached);if(J.action==="continue"){let j=J.guidance?.trim();if(j)this.options.appendRecoveryNotice(j,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:j}}return{action:"stop",reason:J.reason?.trim()||void 0,message:bz({iteration:$.iteration,consecutiveMistakes:Z,maxConsecutiveMistakes:W,reason:$.reason,details:$.details,stopReason:J.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function bz($){let W=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Z=$.details?.trim();if(Z)W.push(`Error: ${Z}`);let Q=$.stopReason?.trim();if(Q)W.push(`Decision: ${Q}`);return W.push("Session state was preserved. Send a new prompt to resume from the latest state."),W.join(" ")}async function yz($,W){if(!W)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await W($)}catch(Z){return{action:"stop",reason:Z instanceof Error?Z.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function hz($){switch($){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return $;default:return}}function kz($){let W=$.content.filter((Z)=>Z.type==="text");if(W.length===0)return;return W.map((Z)=>Z.text).join("")}function Iz($){let W=$.content.filter((Z)=>Z.type==="reasoning");if(W.length===0)return;return{reasoning:W.map((Z)=>Z.text).join(""),redacted:W.some((Z)=>Z.redacted===!0)}}function xz($){return $.content.find((W)=>W.type==="tool-result")}function gz($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function mz($){if(!$||$.isError!==!0)return;if(typeof $.output==="string")return $.output;if($.output instanceof Error)return $.output.message;try{return JSON.stringify($.output)}catch{return String($.output)}}class q3{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:hz($.metadata?.reason),metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let W=[],Z=kz($);if(Z!==void 0)W.push({type:"content_end",contentType:"text",text:Z});let Q=Iz($);if(Q!==void 0)W.push({type:"content_end",contentType:"reasoning",reasoning:Q.reasoning});return W}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input}]}translateToolFinished($){let W=this.toolStartedAt.get($.toolCall.toolCallId),Z=W===void 0?void 0:Date.now()-W;this.toolStartedAt.delete($.toolCall.toolCallId);let Q=xz($.message),J=Q?.output,j=mz(Q);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:J,error:j,durationMs:Z}]}translateUsage($){let W=$.inputTokens-this.lastUsage.inputTokens,Z=$.outputTokens-this.lastUsage.outputTokens,Q=$.cacheReadTokens-this.lastUsage.cacheReadTokens,J=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,j=this.lastUsage.totalCost??0,Y=($.totalCost??0)-j;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,W),outputTokens:Math.max(0,Z),cacheReadTokens:Q===0?void 0:Math.max(0,Q),cacheWriteTokens:J===0?void 0:Math.max(0,J),cost:Y===0?void 0:Y,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let W={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:gz($.status),text:$.outputText,iterations:$.iterations,usage:W}]}}function iz($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function nz($){let Z=(typeof $.content==="function"?await $.content():$.content).trim();return Z.length>0?Z:void 0}function az($,W){let Z=$.trim(),Q=W.map((J)=>J.trim()).filter(Boolean).join(`
198
198
 
199
199
  `);if(Z&&Q)return`${Z}
200
200
 
201
- ${Q}`;return Z||Q}function lz($,W){let Z=W?.["*"]??{},Q=W?.[$]??{};return{...Z,...Q}.enabled!==!1}function pz($,W){return $.filter((Z)=>lz(Z.name,W))}function rz($,W){return p1(pz($,W))}function iz($){let W=$.filter((Z)=>Z!==void 0);if(W.length===0)return{};return{beforeRun:async(Z)=>{for(let Q of W){let J=await Q.beforeRun?.(Z);if(J?.stop)return J}return},afterRun:async(Z)=>{for(let Q of W)await Q.afterRun?.(Z)},beforeModel:async(Z)=>{let Q=Z.request,J;for(let j of W){let X=await j.beforeModel?.({...Z,request:Q});if(!X)continue;if(X.stop)return X;J={...J,...X,options:_H(J?.options,X.options)},Q={...Q,...X.messages?{messages:X.messages}:{},...X.tools?{tools:X.tools}:{},...X.options?{options:_H(Q.options,X.options)}:{}}}return J},afterModel:async(Z)=>{for(let Q of W){let J=await Q.afterModel?.(Z);if(J?.stop)return J}return},beforeTool:async(Z)=>{let Q=Z.input,J;for(let j of W){let X=await j.beforeTool?.({...Z,input:Q});if(!X)continue;if(X.stop||X.skip)return X;if(J={...J,...X},Object.hasOwn(X,"input"))Q=X.input}return J},afterTool:async(Z)=>{let Q=Z.result,J;for(let j of W){let X=await j.afterTool?.({...Z,result:Q});if(!X)continue;if(X.stop)return X;if(J={...J,...X},X.result)Q=X.result}return J},onEvent:async(Z)=>{for(let Q of W)await Q.onEvent?.(Z)}}}class M${config;agentId;parentAgentId;logger;telemetry;conversation;mistakeTracker;loopTracker;loopDetectionDisabled;messageBuilder;contributionRegistry;extensionsInitialized=!1;listeners=new Set;createAgentRuntimeImpl;activeRunId=null;running=!1;abortRequested=!1;abortReason;activeRuntime=null;activeRunPromise=null;eventAdapter=new z3;shutdownCalled=!1;currentRunToolCalls=[];currentRunUsage={inputTokens:0,outputTokens:0};toolStartedAt=new Map;toolInputs=new Map;currentTurnSuccessfulTools=0;currentTurnFailedTools=0;currentTurnFailureDetails=[];activeTrackerWork=Promise.resolve();trackerAbortInFlight=!1;constructor($,W={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=W.logger??$.logger,this.telemetry=W.telemetry??$.telemetry,this.createAgentRuntimeImpl=W.createAgentRuntimeImpl??mz,this.conversation=new D3($.initialMessages),this.messageBuilder=new A3(KH()),this.contributionRegistry=vz({extensions:$.extensions?[...$.extensions]:[],setupContext:{session:$.extensionContext?.session,client:$.extensionContext?.client,user:$.extensionContext?.user,workspaceInfo:$.extensionContext?.workspace,automation:$.extensionContext?.automation,logger:$.extensionContext?.logger??this.logger,telemetry:$.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let Z=$.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new T3({maxConsecutiveMistakes:Z,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(j)=>this.emitLegacyEvent(j),log:(j,X,Y)=>nz(this.logger,j,X,Y),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(j,X)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:j}]})}});let Q=$.execution?.loopDetection;this.loopDetectionDisabled=Q===!1;let J=Q===!1||Q===void 0?void 0:Q;this.loopTracker=new O3(J)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools($){if($.length===0)return;let W=new Set(this.config.tools.map((Q)=>Q.name)),Z=[...this.config.tools];for(let Q of $)if(!W.has(Q.name))Z.push(Q),W.add(Q.name);this.config={...this.config,tools:Z}}updateConnection($){let W=O2($),Z={...this.config};if(W.providerId!==void 0)Z.providerId=W.providerId;if(W.modelId!==void 0)Z.modelId=W.modelId;if(W.apiKey!==void 0)Z.apiKey=W.apiKey;if(W.baseUrl!==void 0)Z.baseUrl=W.baseUrl;if(W.headers!==void 0)Z.headers=W.headers;if(W.providerConfig!==void 0)Z.providerConfig=W.providerConfig;if(Object.hasOwn(W,"reasoningEffort"))Z.reasoningEffort=W.reasoningEffort??void 0;if(Object.hasOwn(W,"thinkingBudgetTokens"))Z.thinkingBudgetTokens=W.thinkingBudgetTokens??void 0;if(Object.hasOwn(W,"thinking")){if(Z.thinking=W.thinking??void 0,W.thinking===!1||W.thinking===null)Z.reasoningEffort=void 0,Z.thinkingBudgetTokens=void 0}this.config=Z}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.messageBuilder.resetConversationState(),this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let W=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=W,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(W)}async shutdown($,W){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run($,W,Z){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:W,userFiles:Z,isContinue:!1})}continue($,W,Z){return this.executeRun({userMessage:$,userImages:W,userFiles:Z,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let W of this.contributionRegistry.getRegisteredRules()){let Z=await uz(W);if(Z)$.push(Z)}return dz(this.config.systemPrompt,$)}executeRun($){let W;return W=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===W)this.activeRunPromise=null}),this.activeRunPromise=W,W}async executeRunInternal($){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let W=new Date,Z=$.userMessage;if(Z!==void 0){let D=await oz(Z,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:D})}let Q=await this.composeSystemPrompt(),J=QH(this.config,this.logger,this.telemetry),j=new Map;for(let D of this.contributionRegistry.getRegisteredTools())j.set(D.name,D);let X=rz([...j.values()],this.config.toolPolicies),Y=new Map;for(let D of X)Y.set(D.name,D);for(let D of this.config.tools)Y.set(D.name,D);let V=this.conversation.getConversationId(),B=LH(this.config),H=Array.from(Y.values()),G=b9(this.conversation.getMessages()),K=AH({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:J,logger:this.logger,telemetry:this.telemetry,tools:H,toolContextMetadata:{modelSupportsImages:B?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[VB]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(B,H),initialMessages:G,systemPrompt:Q}),F=this.createAgentRuntimeImpl(K);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let A=F.subscribe((D)=>{this.handleRuntimeEvent(D)}),f,U;try{if($.isContinue)f=await F.continue(void 0);else f=await F.run("")}catch(D){U=D instanceof Error?D:Error(String(D))}finally{A();try{await this.activeTrackerWork}catch(D){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:D})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(f&&f.messages.length>0){let D=y8(f.messages);this.conversation.replaceMessages(D)}let _=new Date;try{return this.buildLegacyResult({runResult:f,thrownError:U,startedAt:W,endedAt:_})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize({tolerateSetupErrors:this.config.hookErrorMode!=="throw"})}catch($){if(this.config.hookErrorMode==="throw")throw $;this.emitLegacyEvent({type:"error",error:$ instanceof Error?$:Error(String($)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let $=iz([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((W)=>W.hooks)]);return{...$,beforeModel:async(W)=>{let Z=await $.beforeModel?.(W);if(Z?.stop)return Z;let Q=Z?.messages??W.request.messages,J=await this.prepareMessagesForModelRequest(Q);return{...Z,messages:J}}}}createRuntimePrepareTurn($,W){let Z=this.config.prepareTurn;if(!Z)return;return async(Q)=>{let J=y8(Q.messages),j=await this.prepareProviderMessagesForApi(J),X=await Z({agentId:Q.agentId,conversationId:Q.conversationId??this.conversation.getConversationId(),parentAgentId:Q.parentAgentId??null,iteration:Q.iteration,messages:J,apiMessages:j,abortSignal:Q.signal??new AbortController().signal,systemPrompt:Q.systemPrompt??"",tools:W,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:Q.emitStatusNotice});if(!X)return;return{...X.messages?{messages:b9(X.messages)}:{},...X.systemPrompt!==void 0?{systemPrompt:X.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let W=await this.prepareProviderMessagesForApi(y9($));return b9(W)}async prepareProviderMessagesForApi($){let W=$,Z=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let Q of Z)W=await Q.build(W);return this.messageBuilder.buildForApi(W)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let W=this.toolStartedAt.get($.toolCall.toolCallId),Z=new Date,Q=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let J=$.message.content.find((V)=>V.type==="tool-result"),j=J?.type==="tool-result"&&J.isError===!0,X=j?cz(J?.type==="tool-result"?J.output:void 0):void 0,Y={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:Q,output:J?.type==="tool-result"?J.output:void 0,error:X,durationMs:W===void 0?0:Z.getTime()-W.getTime(),startedAt:W??Z,endedAt:Z};if(this.currentRunToolCalls.push(Y),j){if(this.currentTurnFailedTools+=1,X)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${X}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let W=this.currentTurnFailedTools,Z=this.currentTurnSuccessfulTools;if(W>0&&Z===0){let Q=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${W} tool call(s) failed${Q?`: ${Q}`:""}`})}else if(Z>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let W of this.eventAdapter.translate($))this.emitLegacyEvent(W)}syncConversationFromRuntimeMessage($,W){if($.length>0){this.conversation.replaceMessages(y8($));return}if(W.length===0)return;let Z=new Set(this.conversation.getMessages().map((J)=>J.id).filter((J)=>typeof J==="string")),Q=y8(W).filter((J)=>!J.id||!Z.has(J.id));if(Q.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...Q])}emitLegacyEvent($){for(let W of this.listeners)try{W($)}catch(Z){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Z})}}inspectLoopForToolCall($,W,Z){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let Q=this.loopTracker.inspect({name:$,input:W});if(Q.kind==="ok")return;if(Q.kind==="soft"){if(Q.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:Q.message}]});return}this.enqueueMistakeRecord({iteration:Z,reason:"tool_execution_failed",forceAtLimit:!0,details:Q.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let W=await this.mistakeTracker.record($);if(W.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:W.message}]}),this.activeRuntime?.abort(W.reason??W.message)})}buildLegacyResult($){let{runResult:W,thrownError:Z,startedAt:Q,endedAt:J}=$,j=J.getTime()-Q.getTime(),X=Z?"error":az(W),Y=(W?.status==="failed"?W.error?.message:void 0)||W?.outputText||"",V=W?{inputTokens:W.usage.inputTokens,outputTokens:W.usage.outputTokens,cacheReadTokens:W.usage.cacheReadTokens>0?W.usage.cacheReadTokens:void 0,cacheWriteTokens:W.usage.cacheWriteTokens>0?W.usage.cacheWriteTokens:void 0,totalCost:W.usage.totalCost}:this.currentRunUsage,B=W?y8(W.messages):this.conversation.getMessages(),H=LH(this.config);if(Z)throw Z;return{text:Y,usage:V,messages:B,toolCalls:this.currentRunToolCalls,iterations:W?.iterations??0,finishReason:X,model:{id:this.config.modelId,provider:this.config.providerId,info:H},startedAt:Q,endedAt:J,durationMs:j}}}function nz($,W,Z,Q){if(!$)return;if(W==="debug"){$.debug(Z,Q);return}if(W==="error"&&$.error){$.error(Z,Q);return}let J=W==="warn"?"warn":W==="error"?"error":"info";$.log(Z,{...Q,severity:J})}function az($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function oz($,W,Z,Q){let{buildInitialUserContent:J}=await Promise.resolve().then(() => DH);return J($,W,Z,Q)}function LH($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let W=G3($);if(W?.[$.modelId])return W[$.modelId];return}import{buildClineSystemPrompt as OH}from"@cline/shared";function TH($,W){let Z=$.trim();if(W.providerId.toLowerCase()!=="cline")return Z;return OH({ide:W.clineIdeName?.trim()||"Terminal",workspaceRoot:W.cwd?.trim()||"/",providerId:W.providerId,rules:`# Team Teammate Role
202
- ${Z}`,platform:W.clinePlatform,metadata:W.workspaceMetadata})}function zH($,W){let Z=$.trim();if(W.providerId.toLowerCase()!=="cline")return Z;return OH({ide:W.clineIdeName||"Terminal",workspaceRoot:W.cwd?.trim()||"/",providerId:W.providerId,overridePrompt:Z,metadata:W.workspaceMetadata,platform:W.clinePlatform})}function R$($){let W={...$};return{getRuntimeConfig:()=>W,getConnectionConfig:()=>({providerId:W.providerId,modelId:W.modelId,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking,reasoningEffort:W.reasoningEffort,thinkingBudgetTokens:W.thinkingBudgetTokens,maxTokensPerTurn:W.maxTokensPerTurn}),updateConnectionDefaults:(Z)=>{W={...W,...Z}}}}function T2($){let W=$.configProvider.getRuntimeConfig(),Z=$.kind==="teammate"?TH($.prompt,W):zH($.prompt,W);return{...$.configProvider.getConnectionConfig(),systemPrompt:Z,tools:$.tools,maxIterations:$.maxIterations??W.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:W.hooks,extensions:W.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:W.logger,role:$.role}}function N$($){let W=T2($),Z=new M$(W);if(W.onEvent)Z.subscribeEvents(W.onEvent);return Z}var ez=q3.object({systemPrompt:q3.string().describe("System prompt defining the sub-agent's behavior"),task:q3.string().describe("Task for the sub-agent to complete")});function E$($){return sz({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:tz(ez),execute:async(W,Z)=>{let Q=$.createSubAgentTools?await $.createSubAgentTools(W,Z):$.subAgentTools??[],J=N$({kind:"subagent",prompt:W.systemPrompt,configProvider:$.configProvider,tools:Q,maxIterations:$.defaultMaxIterations,parentAgentId:Z.agentId,abortSignal:Z.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),j=J.getAgentId(),X=J.getConversationId(),Y=Z.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:j,conversationId:X,parentAgentId:Y,input:W})}catch{}try{let V=await J.run(W.task),B={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:j,conversationId:X,parentAgentId:Y,input:W,result:B,agentResult:V})}catch{}return B}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:j,conversationId:X,parentAgentId:Y,input:W,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as U0,TEAM_AWAIT_TIMEOUT_MS as $q,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as Wq,TEAM_RUN_TEXT_PREVIEW_LIMIT as Zq,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as Qq,TeamAttachOutcomeFragmentInputSchema as qH,TeamAwaitRunsInputSchema as MH,TeamBroadcastInputSchema as RH,TeamBroadcastToolResultSchema as Jq,TeamCancelRunInputSchema as NH,TeamCancelRunToolResultSchema as jq,TeamCleanupInputSchema as EH,TeamCleanupToolResultSchema as Xq,TeamCreateOutcomeInputSchema as wH,TeamCreateOutcomeToolResultSchema as Yq,TeamFinalizeOutcomeInputSchema as CH,TeamFinalizeOutcomeToolResultSchema as Vq,TeamListOutcomesInputSchema as PH,TeamListRunsInputSchema as SH,TeamMailboxMessageToolResultSchema as Bq,TeamMissionLogInputSchema as bH,TeamMissionLogToolResultSchema as Hq,TeamOutcomeFragmentToolResultSchema as yH,TeamOutcomeToolResultSchema as Gq,TeamReadMailboxInputSchema as hH,TeamReviewOutcomeFragmentInputSchema as kH,TeamRunTaskInputSchema as IH,TeamRunTaskToolResultSchema as M3,TeamRunToolSummarySchema as R3,TeamSendMessageInputSchema as xH,TeamSendMessageToolResultSchema as Kq,TeamShutdownTeammateInputSchema as gH,TeamSimpleAgentStatusToolResultSchema as mH,TeamSpawnTeammateInputSchema as vH,TeamStatusInputSchema as cH,TeamStatusToolResultSchema as Fq,TeamTaskInputSchema as uH,TeamTaskToolResultSchema as m4,validateWithZod as x,zodToJsonSchema as f0}from"@cline/shared";function dH($,W){let Z=$.replace(/\s+/g," ").trim();if(Z.length<=W)return Z;return`${Z.slice(0,Math.max(0,W-3)).trimEnd()}...`}function z2($,W){if($===void 0)throw Error(`Missing required field: ${W}`);return $}function Aq($){let W=$.result;if(!W)return;return{textPreview:dH(W.text,Zq),iterations:W.iterations,finishReason:W.finishReason,durationMs:W.durationMs,usage:{inputTokens:W.usage.inputTokens,outputTokens:W.usage.outputTokens,cacheReadTokens:W.usage.cacheReadTokens,cacheWriteTokens:W.usage.cacheWriteTokens,totalCost:W.usage.totalCost}}}function x9($){return $?.toISOString()}function N3($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:dH($.message,Wq),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:x9($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:x9($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:x9($.heartbeatAt),lastProgressAt:x9($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:Aq($)}}function Uq($){if($.status==="failed")throw Error(`Run "${$.id}" failed${$.error?`: ${$.error}`:""}`);if($.status==="cancelled")throw Error(`Run "${$.id}" was cancelled${$.error?`: ${$.error}`:""}`);if($.status==="interrupted")throw Error(`Run "${$.id}" was interrupted${$.error?`: ${$.error}`:""}`)}var k8=["team_spawn_teammate","team_shutdown_teammate","team_status","team_task","team_run_task","team_cancel_run","team_list_runs","team_await_runs","team_send_message","team_broadcast","team_read_mailbox","team_mission_log","team_cleanup","team_create_outcome","team_attach_outcome_fragment","team_review_outcome_fragment","team_finalize_outcome","team_list_outcomes"];function lH($){let W=[];if($.createBaseTools)W.push(...$.createBaseTools());W.push(...q2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:T2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:W,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function I8($){let W=$.leadAgentId??"lead",Z=$.restoredFromPersistence===!0,Q=q2({runtime:$.runtime,requesterId:W,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),J=[];for(let j of $.restoredTeammates??[]){if($.runtime.isTeammateActive(j.agentId))continue;lH({runtime:$.runtime,requesterId:W,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:j}),J.push(j.agentId)}return{tools:Q,restoredFromPersistence:Z,restoredTeammates:J}}function q2($){let W=$.allowSpawn??!0,Z=$.includeSpawnTool??!0,Q=$.includeManagementTools??!0,J=[];if(Z)J.push(U0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:f0(vH),execute:async(X)=>{let Y=x(vH,X);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!W)throw Error("Spawning teammates is disabled in this context.");let V={agentId:Y.agentId,rolePrompt:Y.rolePrompt};if(lH({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!Q)$.onLeadToolsUnlocked?.(q2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return x(mH,{agentId:Y.agentId,status:"spawned"})}}));if(!Q)return J;J.push(U0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:f0(gH),execute:async(X)=>{let Y=x(gH,X);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(Y.agentId,Y.reason),x(mH,{agentId:Y.agentId,status:"stopped"})}})),J.push(U0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:f0(cH),execute:async(X)=>{return x(cH,X),x(Fq,$.runtime.getSnapshot())}})),J.push(U0({name:"team_task",description:"Manage shared team tasks with action-specific payloads. create requires title and description, with optional dependsOn and assignee. list accepts optional status, assignee. claim requires taskId. complete requires taskId and summary. block requires taskId and reason. Do not include fields from other actions.",inputSchema:f0(uH),execute:async(X)=>{let Y=x(uH,X);switch(Y.action){case"create":{let V=new Set(Qq.create??[]),B=Object.entries(X).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),H=$.runtime.createTask({title:z2(Y.title,"title"),description:z2(Y.description,"description"),dependsOn:Y.dependsOn,assignee:Y.assignee,createdBy:$.requesterId});return x(m4,{action:"create",taskId:H.id,status:H.status,...B.length>0?{ignoredFields:B,note:`Ignored fields for action=create: ${B.join(", ")}`}:{}})}case"list":return x(m4,{action:"list",tasks:$.runtime.listTaskItems({status:Y.status,assignee:Y.assignee})});case"claim":{let V=$.runtime.claimTask(z2(Y.taskId,"taskId"),$.requesterId);return x(m4,{action:"claim",taskId:V.id,status:V.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_task with action=complete when done."})}case"complete":{let V=$.runtime.completeTask(z2(Y.taskId,"taskId"),$.requesterId,z2(Y.summary,"summary"));return x(m4,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(z2(Y.taskId,"taskId"),$.requesterId,z2(Y.reason,"reason"));return x(m4,{action:"block",taskId:V.id,status:V.status})}}}}));let j=new Map;return J.push(U0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:f0(IH),execute:async(X)=>{let Y=x(IH,X);if(Y.runMode==="async"){let H=$.runtime.startTeammateRun(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0});return x(M3,{agentId:Y.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${Y.agentId} and queued as ${H.id}.`,runId:H.id})}let V=j.get(Y.agentId);if(V){let H=await V;return x(M3,{...H,status:"joined",deduped:!0,message:`Task for ${Y.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let B=$.runtime.routeToTeammate(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0}).then((H)=>x(M3,{agentId:Y.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${Y.agentId} and completed in sync mode.`,text:H.text,iterations:H.iterations})).finally(()=>{j.delete(Y.agentId)});return j.set(Y.agentId,B),await B}})),J.push(U0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:f0(NH),execute:async(X)=>{let Y=x(NH,X),V=$.runtime.cancelRun(Y.runId,Y.reason);return x(jq,{runId:V.id,status:V.status})}})),J.push(U0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:f0(SH),execute:async(X)=>x(R3.array(),$.runtime.listRuns(x(SH,X)).map(N3))})),J.push(U0({name:"team_await_runs",description:"Wait for async teammate runs. Provide runId to wait for one run, or omit it to wait for all active async runs. Uses a long timeout for legitimate teammate work.",inputSchema:f0(MH),timeoutMs:$q,execute:async(X)=>{let Y=x(MH,X);if(Y.runId){let H=await $.runtime.awaitRun(Y.runId);return Uq(H),x(R3,N3(H))}let V=await $.runtime.awaitAllRuns(),B=V.filter((H)=>["failed","cancelled","interrupted"].includes(H.status));if(B.length>0){let H=B.map((G)=>`${G.id}:${G.status}${G.error?`(${G.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${H}`)}return x(R3.array(),V.map(N3))}})),J.push(U0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:f0(xH),execute:async(X)=>{let Y=x(xH,X),V=$.runtime.sendMessage($.requesterId,Y.toAgentId,Y.subject,Y.body,Y.taskId??void 0);return x(Kq,{id:V.id,toAgentId:V.toAgentId})}})),J.push(U0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:f0(RH),execute:async(X)=>{let Y=x(RH,X),V=$.runtime.broadcast($.requesterId,Y.subject,Y.body,{taskId:Y.taskId??void 0});return x(Jq,{delivered:V.length})}})),J.push(U0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:f0(hH),execute:async(X)=>{let Y=x(hH,X);return x(Bq.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:Y.unreadOnly,markRead:!0}))}})),J.push(U0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:f0(bH),execute:async(X)=>{let Y=x(bH,X),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:Y.taskId||void 0,kind:Y.kind,summary:Y.summary,evidence:Y.evidence?.length?Y.evidence:void 0,nextAction:Y.nextAction||void 0});return x(Hq,{id:V.id})}})),J.push(U0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:f0(EH),execute:async(X)=>{if(x(EH,X),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),x(Xq,{status:"cleaned"})}})),J.push(U0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:f0(wH),execute:async(X)=>{let Y=x(wH,X),V=$.runtime.createOutcome({title:Y.title,requiredSections:Y.requiredSections,createdBy:$.requesterId});return x(Yq,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),J.push(U0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:f0(qH),execute:async(X)=>{let Y=x(qH,X),V=$.runtime.attachOutcomeFragment({outcomeId:Y.outcomeId,section:Y.section,sourceAgentId:$.requesterId,sourceRunId:Y.sourceRunId||void 0,content:Y.content});return x(yH,{fragmentId:V.id,status:V.status})}})),J.push(U0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:f0(kH),execute:async(X)=>{let Y=x(kH,X),V=$.runtime.reviewOutcomeFragment({fragmentId:Y.fragmentId,reviewedBy:$.requesterId,approved:Y.approved});return x(yH,{fragmentId:V.id,status:V.status})}})),J.push(U0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:f0(CH),execute:async(X)=>{let Y=x(CH,X),V=$.runtime.finalizeOutcome(Y.outcomeId);return x(Vq,{outcomeId:V.id,status:V.status})}})),J.push(U0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:f0(PH),execute:async(X)=>{return x(PH,X),x(Gq.array(),$.runtime.listOutcomes())}})),J}function g9($){return{...$,tasks:$.tasks.map((W)=>({...W,createdAt:new Date(W.createdAt),updatedAt:new Date(W.updatedAt)})),mailbox:$.mailbox.map((W)=>({...W,sentAt:new Date(W.sentAt),readAt:W.readAt?new Date(W.readAt):void 0})),missionLog:$.missionLog.map((W)=>({...W,ts:new Date(W.ts)})),runs:($.runs??[]).map((W)=>({...W,startedAt:new Date(W.startedAt),endedAt:W.endedAt?new Date(W.endedAt):void 0,nextAttemptAt:W.nextAttemptAt?new Date(W.nextAttemptAt):void 0,heartbeatAt:W.heartbeatAt?new Date(W.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),finalizedAt:W.finalizedAt?new Date(W.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),reviewedAt:W.reviewedAt?new Date(W.reviewedAt):void 0}))}}function pH($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var fq=[{id:"read_files",description:"Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. Long files are windowed; page with start_line/end_line.",headlessToolNames:["read_files"]},{id:"search_codebase",description:"Perform regex pattern searches across the codebase for code patterns, definitions, imports, and other text matches.",headlessToolNames:["search_codebase"]},{id:"run_commands",description:"Run shell commands from the root of the workspace for listing files, checking git status, builds, tests, and similar tasks.",headlessToolNames:["run_commands"]},{id:"editor",description:"Make controlled filesystem edits on text files with create, replace, and insert operations.",headlessToolNames:["editor"]},{id:"fetch_web_content",description:"Fetch URL content and analyze it with a prompt describing what to extract.",headlessToolNames:["fetch_web_content"]},{id:"skills",description:"Execute a configured skill within the main conversation when a matching skill exists for the task.",headlessToolNames:["skills"]},{id:"ask_question",description:"Ask the user a single clarifying question with 2-5 selectable options.",headlessToolNames:["ask_question"]},{id:"spawn_agent",description:E$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...k8]}],Dq={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function _q($){return $==="plan"||$==="yolo"?$:"act"}function iH($){let W=_q($.mode),Z=o0[l1({mode:W})],Q=b8($.providerId??"",$.modelId??"",W,S8);return{mode:W,flags:{...Z,...Q,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function rH($,W){if(W.disabledToolIds?.has($))return!1;let{flags:Z}=iH(W);if($==="spawn_agent")return Z.enableSpawnAgent===!0;if($==="teams")return Z.enableAgentTeams===!0;if($==="editor")return Z.enableEditor===!0||Z.enableApplyPatch===!0;let Q=Dq[$];return Q?Z[Q]===!0:!1}function Lq($,W){if($.id==="editor"){let{flags:Z}=iH(W),Q=Z.enableApplyPatch===!0&&Z.enableEditor!==!0;return{...$,defaultEnabled:rH($.id,W),headlessToolNames:[Q?"apply_patch":"editor"]}}return{...$,defaultEnabled:rH($.id,W)}}function M2($={}){return fq.map((W)=>Lq(W,$))}function m9($={}){return M2($).filter((W)=>W.defaultEnabled).map((W)=>W.id)}function v9($){if(!$.enabled)return new Set;let W=M2($.availabilityContext),Z=new Set(W.map((Q)=>Q.id));if(!$.allowlist||$.allowlist.length===0)return new Set(W.filter((Q)=>Q.defaultEnabled).map((Q)=>Q.id));for(let Q of $.allowlist)if(!Z.has(Q))throw Error(`Unknown tool "${Q}". Available tools: ${W.map((J)=>J.id).join(", ")}`);return new Set($.allowlist)}function v4($,W={}){return M2(W).filter((Z)=>$.has(Z.id)).flatMap((Z)=>Z.headlessToolNames)}function c9($,W={}){return v4($,W)}function R2($={}){let{executorOptions:W={},executors:Z,...Q}=$,J={...P8(W),...Z??{}};return T$({...Q,executors:J})}import{mkdirSync as Rq,writeFileSync as Nq}from"node:fs";import{dirname as Eq}from"node:path";import{normalizeUserInput as wq,stripModeNotices as Cq}from"@cline/shared";import{nanoid as Pq}from"nanoid";var aH={};E(aH,{sanitizeSessionToken:()=>N2,parseTeamTaskSubSessionId:()=>g8,parseSubSessionId:()=>u4,makeTeamTaskSubSessionId:()=>c4,makeSubSessionId:()=>x8,deriveSubsessionStatus:()=>d4});import{nanoid as zq}from"nanoid";function N2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function x8($,W){let Z=N2($),Q=N2(W),J=`${Z}__${Q}`;return J.length>180?J.slice(0,180):J}function c4($,W){let Z=N2($),Q=N2(W);return`${Z}__teamtask__${Q}__${zq(6)}`}function g8($){let Z=$.indexOf("__teamtask__");if(Z<=0)return null;let Q=$.slice(0,Z),J=$.slice(Z+12),j=J.lastIndexOf("__");if(j<=0)return null;let X=J.slice(0,j),Y=J.slice(j+2);if(!Q||!X||!Y)return null;return{rootSessionId:Q,agentId:X,teamTaskId:Y}}function u4($){if(g8($))return null;let W="__",Z=$.indexOf(W);if(Z<=0)return null;let Q=$.slice(0,Z),J=$.slice(Z+W.length);if(!Q||!J)return null;return{rootSessionId:Q,agentId:J}}function d4($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let W=String($.reason??"").toLowerCase();if(W.includes("cancel")||W.includes("abort")||W.includes("interrupt"))return"cancelled";if(W.includes("fail")||W.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as W0}from"zod";var tH={};E(tH,{isTerminalSessionStatus:()=>sH,isNonTerminalSessionStatus:()=>F0,SessionSource:()=>A0,SESSION_STATUSES:()=>l4,NON_TERMINAL_SESSION_STATUSES:()=>oH});import{SESSION_STATUS_VALUES as qq}from"@cline/shared";var l4=qq,oH=["idle","running","pending"];function sH($){return!oH.includes($)}function F0($){return!sH($)}var A0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var Mq=W0.enum(l4),g0=W0.object({version:W0.literal(1),session_id:W0.string().min(1),source:W0.string().min(1),pid:W0.number().int(),started_at:W0.string().min(1),ended_at:W0.string().min(1).optional(),exit_code:W0.number().int().nullable().optional(),status:Mq,interactive:W0.boolean(),provider:W0.string().min(1),model:W0.string().min(1),cwd:W0.string().min(1),workspace_root:W0.string().min(1),team_name:W0.string().min(1).optional(),enable_tools:W0.boolean(),enable_spawn:W0.boolean(),enable_teams:W0.boolean(),prompt:W0.string().optional(),metadata:W0.record(W0.string(),W0.unknown()).optional(),messages_path:W0.string().min(1).optional(),compaction_path:W0.string().min(1).optional()});function eH($){if(!$)return!1;return Object.values($).some((W)=>typeof W==="function")}function w3($,W){let Z=[...$??[],...W??[]];if(Z.length===0)return;let Q=[],J=new Set;for(let j of Z){if(J.has(j.name))continue;J.add(j.name),Q.push(j)}return Q}function $G($){return JSON.stringify($,(W,Z)=>{if(Z instanceof Error)return{name:Z.name,message:Z.message,stack:Z.stack};return Z})}function r1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function E3($,W){let Z={...$};Z.id=r1(Z.id)??Pq();let Q=Z.modelInfo&&typeof Z.modelInfo==="object"?{...Z.modelInfo}:void 0,J={id:r1(Q?.id)??r1(Z.modelId)??r1(W?.id),provider:r1(Q?.provider)??r1(Z.providerId)??r1(W?.provider),family:r1(Q?.family)??r1(W?.family)};if(delete Z.providerId,delete Z.modelId,J.id&&J.provider)Z.modelInfo={id:J.id,provider:J.provider,...J.family?{family:J.family}:{}};else delete Z.modelInfo;return Z}function u9($){return $.map((W)=>E3(W))}function d9($,W,Z=[]){let Q=$.map((V,B)=>{let H=Z[B],K=H?.role===V.role&&JSON.stringify(H.content)===JSON.stringify(V.content)?{...H,...V}:{...V};return E3(K)}),J=Z.length,j=[];for(let V=J;V<Q.length;V+=1)if(Q[V]?.role==="assistant")j.push(V);if(j.length===0){let V=[...Q].reverse().findIndex((B)=>B.role==="assistant");if(V===-1)return Q;j.push(Q.length-1-V)}let X=j[j.length-1],Y=j.some((V)=>Q[V]?.metrics);for(let V of j){let B=Q[V],H=B.metrics;if(!H&&V===X&&!Y){let G=W.usage;H={inputTokens:G.inputTokens,outputTokens:G.outputTokens,cacheReadTokens:G.cacheReadTokens??0,cacheWriteTokens:G.cacheWriteTokens??0,cost:G.totalCost}}Q[V]={...E3(B,{id:W.model.id,provider:W.model.provider,family:W.model.info?.family}),...H?{metrics:H}:{},ts:B.ts??W.endedAt.getTime()}}return Q}function p4($){return{sessionId:$.sessionId,source:$.source,pid:$.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??void 0,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:$.parentSessionId??void 0,parentAgentId:$.parentAgentId??void 0,agentId:$.agentId??void 0,conversationId:$.conversationId??void 0,isSubagent:$.isSubagent,prompt:$.prompt??void 0,metadata:$.metadata??void 0,messagesPath:$.messagesPath??void 0,updatedAt:$.updatedAt}}var Sq=120;function E2($){let W=$?.trim();return W?W.slice(0,Sq):void 0}function C3($){let W=Cq(wq($??"")).trim();if(!W)return;return E2(W.split(`
203
- `)[0]?.trim())}function w$($){if(!$)return;let W={...$},Z=E2(typeof W.title==="string"?W.title:void 0);if(Z)W.title=Z;else delete W.title;return Object.keys(W).length>0?W:void 0}function r4($){let W=w$($.metadata)??{},Z=$.title!==void 0?E2($.title):C3($.prompt);if(Z)W.title=Z;return Object.keys(W).length>0?W:void 0}function P3($){let W=g8($);if(W)return{agent:"teammate",sessionId:W.rootSessionId,taskType:"team"};let Z=u4($);if(Z)return{agent:"subagent",sessionId:Z.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function S3($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:u9($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function WG($,W,Z){Rq(Eq($),{recursive:!0}),Nq($,`${JSON.stringify(S3({updatedAt:W,context:Z,messages:[]}),null,2)}
204
- `,"utf8")}function ZG($,W){return g0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:W?.endedAt??$.endedAt??void 0,exit_code:W?.exitCode??$.exitCode??void 0,status:W?.status??$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName??void 0,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt??void 0,metadata:W?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function QG($,W,Z){let Q=0;while(!0){let J=await $();if(J===void 0)return{updated:!1};let j=await W(J);if(typeof j==="object"&&j!==null&&"updated"in j&&j.updated===!1){if(Q+=1,Q>=Z)return j;continue}return j}}O0();var JG={};E(JG,{summarizeUsageFromMessages:()=>v8,sumUsageTotals:()=>i4,getCurrentContextSize:()=>b3,createInitialAccumulatedUsage:()=>z0,accumulateUsageTotals:()=>D0});function z0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function D0($,W){return{inputTokens:$.inputTokens+Math.max(0,W.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,W.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,W.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,W.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,W.totalCost??0)}}function i4($){let W=z0();for(let Z of $)W=D0(W,Z);return W}function m8($){return typeof $==="number"&&Number.isFinite($)?$:0}function v8($){let W=z0();for(let Z of $){let Q=Z.metrics;if(!Q)continue;W=D0(W,{inputTokens:m8(Q.inputTokens),outputTokens:m8(Q.outputTokens),cacheReadTokens:m8(Q.cacheReadTokens),cacheWriteTokens:m8(Q.cacheWriteTokens),totalCost:m8(Q.cost)})}return W}function b3($){for(let W=$.length-1;W>=0;W-=1){let Z=$[W];if(Z?.role!=="assistant")continue;let Q=m8(Z.metrics?.inputTokens);return Q>0?Q:void 0}return}function bq($){if(!$||typeof $!=="object")return;let W=$,Z=W.skill??W.skill_name??W.skillName;if(typeof Z!=="string")return;let Q=Z.trim();return Q.length>0?Q:void 0}function y3($){if(!$||typeof $!=="object")return{};let W=$;return{agentId:typeof W.agentId==="string"?W.agentId:void 0,conversationId:typeof W.conversationId==="string"?W.conversationId:void 0,parentAgentId:typeof W.parentAgentId==="string"?W.parentAgentId:void 0}}function i1($){let W=$.agentId?.trim();if(!W)return;let Z=$.parentAgentId?.trim()||void 0,Q=$.teamRole,J="root";if(Q==="teammate")J="team_teammate";else if(Q==="lead")J="team_lead";else if(Z)J="subagent";return{agentId:W,agentKind:J,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Z,createdByAgentId:$.createdByAgentId?.trim()||Z||void 0,isSubagent:Boolean(Z),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:Q,teamAgentId:$.teamAgentId?.trim()||void 0}}function yq($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function hq($){let W=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Z of W){let Q=Z?.trim();if(Q)return Q}return $.isPrimaryAgentEvent?"root":"unknown"}function h3($,W,Z){let{sessionId:Q,config:J,liveSession:j,emit:X}=$,Y=J.telemetry,V=j?.runtime.teamRuntime,B=Z?.isPrimaryAgentEvent??!0,H=y3(W),G=i1({agentId:Z?.agentId??H.agentId,conversationId:Z?.conversationId??H.conversationId,parentAgentId:Z?.parentAgentId??H.parentAgentId,createdByAgentId:Z?.createdByAgentId,teamId:Z?.teamId??V?.getTeamId(),teamName:Z?.teamName??V?.getTeamName(),teamRole:Z?.teamRole,teamAgentId:Z?.teamAgentId});if(W.type==="content_start"&&W.contentType==="tool"&&W.toolName==="skills"){let K=bq(W.input);if(K)lW(Y,{ulid:Q,skillName:K,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:J.providerId,modelId:J.modelId,...G})}if(W.type==="content_end"&&W.contentType==="tool"){let K=W.toolName??"unknown",F=!W.error;if(A8(Y,{ulid:Q,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))pW(Y,{ulid:Q,modelId:J.modelId,provider:J.providerId,errorType:W.error,...G})}if(W.type==="notice"&&W.reason==="api_error")s6(Y,{ulid:Q,model:J.modelId,provider:J.providerId,errorMessage:W.message,...G});if(W.type==="error")s6(Y,{ulid:Q,model:J.modelId,provider:J.providerId,errorMessage:W.error?.message??"unknown error",...G});if(W.type==="usage"&&j?.turnUsageBaseline){let K=yq(W);if(B){j.turnPrimaryUsage=D0(j.turnPrimaryUsage??z0(),K);let A=D0(j.turnUsageBaseline,j.turnPrimaryUsage);$.usageBySession.set(Q,A),F8(Y,{ulid:Q,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),uW(Y,{ulid:Q,tokensIn:W.inputTokens,tokensOut:W.outputTokens,cacheWriteTokens:W.cacheWriteTokens,cacheReadTokens:W.cacheReadTokens,totalCost:W.cost,model:J.modelId,...G})}else{let A=hq({isPrimaryAgentEvent:B,overrides:Z,eventMetadata:H}),f=j.turnUsageByAgent??new Map;j.turnUsageByAgent=f,f.set(A,D0(f.get(A)??z0(),K))}let F=D0(j.turnPrimaryUsage??z0(),i4(j.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(Q,D0(j.turnAggregateUsageBaseline??j.turnUsageBaseline,F))}if(W.type==="iteration_end"&&B)$.persistMessages(Q,j?.agent.getMessages()??[],j?.config.systemPrompt);X({type:"agent_event",payload:{sessionId:Q,event:W,teamAgentId:Z?.teamAgentId,teamRole:Z!==void 0?Z.teamRole??(B?"lead":void 0):void 0}}),X({type:"chunk",payload:{sessionId:Q,stream:"agent",chunk:$G(W),ts:Date.now()}})}function C$($){return $.workspaceRoot??$.cwd}import{resolveProviderRequestHeaders as pR}from"@cline/llms";import{hasRuntimeConfigExtension as rR}from"@cline/shared";var c8="0.0.60-nightly.1784085310";var n4={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:c8,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};A1();import{existsSync as a9,readFileSync as TM,statSync as zM}from"node:fs";import{basename as qM,dirname as i9,join as o9,resolve as n9}from"node:path";import{discoverPluginModulePaths as MM,resolveConfiguredPluginModulePaths as NG,resolvePluginConfigSearchPaths as RM,SKILLS_CONFIG_DIRECTORY_NAME as NM}from"@cline/shared/storage";import{resolve as $M}from"node:path";import{normalizePluginManifest as WM}from"@cline/shared";import{existsSync as N0,readFileSync as d8}from"node:fs";import{builtinModules as kq,createRequire as g3}from"node:module";import{dirname as P$,extname as o4,isAbsolute as Iq,resolve as a}from"node:path";import{fileURLToPath as YG}from"node:url";import{PLUGIN_FILE_EXTENSIONS as xq}from"@cline/shared";var VG=P$(YG(import.meta.url)),gq=g3(import.meta.url),mq=a(VG,"..","..","..","..",".."),k3=uq(mq),vq=["@cline/sdk","@cline/agents","@cline/core","@cline/core/hub","@cline/core/hub/daemon-entry","@cline/core/telemetry","@cline/llms","@cline/llms/browser","@cline/shared","@cline/shared/automation","@cline/shared/browser","@cline/shared/storage","@cline/shared/db","@cline/shared/types"],m3=new Set(kq.flatMap(($)=>[$,$.replace(/^node:/,"")])),a4=new Set(xq),cq=["development","node","import","require","default"];function uq($){let W={},Z={"@cline/sdk":a($,"packages/sdk/src/index.ts"),"@cline/agents":a($,"packages/agents/src/index.ts"),"@cline/core":a($,"packages/core/src/index.ts"),"@cline/llms":a($,"packages/llms/src/index.ts"),"@cline/shared":a($,"packages/shared/src/index.ts"),"@cline/shared/storage":a($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":a($,"packages/shared/src/db/index.ts")};for(let[Q,J]of Object.entries(Z))if(N0(J))W[Q]=J;for(let Q of["agents","core","llms","shared"]){let J=a($,"packages",Q),j=a(J,"package.json");if(!N0(j))continue;try{let X=JSON.parse(d8(j,"utf8"));if(typeof X.name!=="string"||!X.exports)continue;if(typeof X.exports==="string"){let Y=a(J,X.exports);if(N0(Y))W[X.name]=Y;continue}if(typeof X.exports!=="object")continue;for(let[Y,V]of Object.entries(X.exports)){let B=dq(J,V);if(!B)continue;let H=Y==="."?X.name:`${X.name}/${Y.replace(/^\.\//,"")}`;W[H]=B}}catch{}}return W}function dq($,W){let Z=v3(W);if(!Z)return null;let Q=BG($,Z);for(let J of Q)if(N0(J))return J;return null}function v3($,W=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(W.has($))return null;W.add($);let Z=$;for(let Q of cq){let J=v3(Z[Q],W);if(J)return J}return null}function BG($,W){let Z=W.replace(/^\.\//,""),Q=[a($,W)];if(Z.startsWith("dist/")){let J=Z.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[a($,`${J}.ts`),a($,`${J}.tsx`),a($,`${J}.mts`),a($,`${J}.cts`),...Q]}return Q}function lq($){return Object.fromEntries(Object.entries($).sort(([W],[Z])=>Z.length-W.length))}function l9($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function u8($){if($.startsWith("@")){let[W,Z]=$.split("/",3);return Z?`${W}/${Z}`:$}return $.split("/",1)[0]??$}function pq($){let W=u8($);if($===W)return".";return`.${$.slice(W.length)}`}function HG($){return u8($).startsWith("@cline/")}function I3($,W){let Z=u8(W),Q=P$($);while(!0){let J=a(Q,"node_modules",Z);if(N0(J)||N0(a(J,"package.json")))return!0;let j=a(Q,"..");if(j===Q)return!1;Q=j}}function XG($){return x3($)!==null}function x3($){try{return gq.resolve($)}catch{}return rq($)}function rq($){let W=u8($),Z=GG(W);if(!Z)return null;let Q=a(Z,"package.json");try{let J=JSON.parse(d8(Q,"utf8")),j=pq($),X=j==="."&&typeof J.exports==="string"?J.exports:J.exports&&typeof J.exports==="object"&&Object.hasOwn(J.exports,j)?J.exports[j]:void 0,Y=v3(X)??(j==="."&&typeof J.main==="string"?J.main:null);if(!Y)return null;let V=a(Z,Y),B=[V,...BG(Z,Y).filter((H)=>H!==V)];for(let H of B)if(N0(H))return H;return null}catch{return null}}function iq(){let $=[VG],W=process.env.CLINE_WRAPPER_PATH?.trim();if(W)$.push(P$(P$(W)));let Z=process.execPath?.trim();if(Z)$.push(P$(Z));return[...new Set($.map((Q)=>a(Q)))]}function nq($,W){let Z=$;while(!0){let Q=a(Z,"package.json");if(N0(Q))try{if(JSON.parse(d8(Q,"utf8")).name===W)return Z}catch{}let J=a(Z,"node_modules",W,"package.json");if(N0(J))return P$(J);let j=a(Z,"..");if(j===Z)return null;Z=j}}function GG($){for(let W of iq()){let Z=nq(W,$);if(Z)return Z}return null}function aq($){let Z=P$($);for(let Q=0;Q<4;Q++){let J=a(Z,"package.json");if(N0(J))try{let X=JSON.parse(d8(J,"utf8"));return X!=null&&typeof X==="object"&&"cline"in X}catch{return!1}let j=a(Z,"..");if(j===Z)return!1;Z=j}return!1}function KG($,W){let Z=W.startsWith("file:")?YG(W):Iq(W)?W:a(P$($),W);if(N0(Z)&&a4.has(o4(Z)))return Z;for(let Q of a4){let J=`${Z}${Q}`;if(N0(J))return J}for(let Q of a4){let J=a(Z,`index${Q}`);if(N0(J))return J}return null}function FG($){let W=new Set,Z=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let Q of Z)for(let J of $.matchAll(Q)){let j=J[1];if(j)W.add(j)}return[...W]}function oq($){return o4($)!==".ts"}function AG($,W,Z=new Set){if(Z.has($)||!N0($))return;if(Z.add($),!a4.has(o4($)))return;let Q=d8($,"utf8"),J=oq($);for(let j of FG(Q)){if(j.startsWith("node:")||m3.has(j))continue;if(l9(j)){if(!J)continue;if(Object.hasOwn(k3,j)||Object.hasOwn(k3,u8(j))||I3($,j)||HG(j)&&XG(j)||W&&XG(j))continue;throw Error(`Cannot find module '${u8(j)}'`)}let X=KG($,j);if(X)AG(X,W,Z)}}function UG($,W=new Set,Z=new Set){if(W.has($)||!N0($))return Z;if(W.add($),!a4.has(o4($)))return Z;let Q=d8($,"utf8");for(let J of FG(Q)){if(Z.add(J),l9(J))continue;let j=KG($,J);if(j)UG(j,W,Z)}return Z}function sq($,W){let Z=g3($),Q={},J=UG($),j=new Set(vq);for(let[X,Y]of Object.entries(k3)){try{Z.resolve(X);continue}catch{}Q[X]=Y}for(let X of J)if(l9(X)&&(HG(X)||W))j.add(X);for(let X of j){if(Object.hasOwn(Q,X)||I3($,X))continue;let Y=x3(X);if(Y)Q[X]=Y}if(!W)return Q;for(let X of J){if(!l9(X)||Object.hasOwn(Q,X)||I3($,X)||X.startsWith("node:")||m3.has(X))continue;let Y=x3(X);if(Y)Q[X]=Y}return Q}function tq($){let W=o4($);return W===".ts"||W===".tsx"||W===".mts"||W===".cts"}var w2;function eq(){if(w2!==void 0)return w2;let $=GG("jiti");if(!$)return w2=null,null;let W=a($,"dist","babel.cjs");if(!N0(W))return w2=null,null;try{let Q=g3(W)(W);w2=typeof Q==="function"?Q:null}catch{w2=null}return w2}async function fG($,W={}){let Z=!aq($);AG($,Z);let Q=sq($,Z),J=lq(Q),j=await import("jiti"),X=typeof j==="function"?j:typeof j.default==="function"?j.default:void 0;if(!X)throw Error("Unable to load jiti");let Y=Object.entries(J).filter(([,G])=>tq(G)).map(([G])=>G),V=eq(),B=V?(G)=>V({...G,interopDefault:!0}):void 0;return await X($,{alias:J,cache:W.useCache,requireCache:W.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...m3],transformModules:Y,tryNative:!1,...B?{transform:B}:{}}).import($,{})}function DG($,W){if(!$)return!0;if($.providerIds?.length){if(!W?.providerId||!$.providerIds.includes(W.providerId))return!1}if($.modelIds?.length){if(!W?.modelId||!$.modelIds.includes(W.modelId))return!1}return!0}function _G($){return typeof $==="object"&&$!==null}function c3($){return Array.isArray($)&&$.every((W)=>typeof W==="string")}function ZM($,W){if(!_G($.manifest))throw Error(`Invalid plugin module at ${W}: missing required "manifest"`);if(!c3($.manifest.capabilities))throw Error(`Invalid plugin module at ${W}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${W}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!c3($.manifest.providerIds))throw Error(`Invalid plugin module at ${W}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!c3($.manifest.modelIds))throw Error(`Invalid plugin module at ${W}: manifest.modelIds must be a string array when provided`)}function QM($,W){if(!_G($))throw Error(`Invalid plugin module at ${W}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${W}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${W}: missing required "manifest"`);ZM($,W)}async function s4($,W={}){let Z=$M(W.cwd??process.cwd(),$),Q=await fG(Z,{useCache:W.useCache}),J=W.exportName??"plugin",j=Q.default??Q[J];QM(j,Z);let X=j,Y=X.setup,V=Y?(B,H)=>{let G={...W.session,...H.session},K={...H,session:Object.keys(G).length>0?G:void 0,client:W.client??H.client,user:W.user??H.user,workspaceInfo:W.workspaceInfo??H.workspaceInfo,automation:W.automation??H.automation,logger:W.logger??H.logger,telemetry:W.telemetry??H.telemetry};return Y(B,K)}:void 0;return{...X,manifest:WM(X.manifest),setup:V}}async function p9($,W={}){return(await C2($,W)).plugins}async function C2($,W={}){let Z=[],Q=[],J=new Map,j=0;for(let Y of $)try{let V=await s4(Y,W);if(!DG(V.manifest,W))continue;let B=J.get(V.name);if(B)Q.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:Y,overriddenPluginPath:B.pluginPath,message:`Plugin "${V.name}" from ${Y} overrides ${B.pluginPath}`});J.set(V.name,{plugin:V,pluginPath:Y,order:j++})}catch(V){let B=V instanceof Error?V.message:String(V);Z.push({pluginPath:Y,phase:"load",message:B,stack:V instanceof Error?V.stack:void 0})}let X=[...J.values()].sort((Y,V)=>Y.order-V.order);return{plugins:X.map((Y)=>Y.plugin),pluginPaths:X.map((Y)=>Y.pluginPath),failures:Z,warnings:Q}}import{existsSync as p3}from"node:fs";import{createRequire as RG}from"node:module";import{dirname as r9,join as p8}from"node:path";import{fileURLToPath as VM}from"node:url";var qG={};E(qG,{resolveSubprocessRuntimeExecutable:()=>u3,buildSubprocessSandboxCommand:()=>zG,SubprocessSandbox:()=>l8,CLINE_JS_RUNTIME_PATH_ENV:()=>TG});import{spawn as JM}from"node:child_process";import{basename as jM}from"node:path";import{augmentNodeCommandForDebug as XM,withResolvedClineBuildEnv as YM}from"@cline/shared";function LG($){if($ instanceof Error)return $;return Error(String($))}var TG="CLINE_JS_RUNTIME_PATH";function OG($){let W=$?.trim();if(!W)return!1;let Z=jM(W).toLowerCase();return Z==="node"||Z==="node.exe"||Z==="bun"||Z==="bun.exe"}function u3($={}){let W=$.env??process.env,Z=$.runtimeExecutable?.trim()||W[TG]?.trim();if(Z)return Z;let Q=$.execPath?.trim()||process.execPath;if(OG(Q))return Q;for(let J of[W.BUN_EXEC_PATH,W.npm_node_execpath,W.NODE]){let j=J?.trim();if(j&&OG(j))return j}return"node"}function zG($,W={}){let Z=u3({env:W.env,execPath:W.execPath,runtimeExecutable:W.runtimeExecutable});return XM([Z,...$],{env:W.env,execArgv:W.execArgv,debugRole:W.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class l8{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let W=this.pending.get($);if(!W)return;if(this.pending.delete($),W.timeout)clearTimeout(W.timeout);return W}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],W=zG($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Z=JM(W[0]??u3(this.options),W.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:YM(process.env),windowsHide:!0});this.process=Z;let Q="",J=(j)=>{let X=Q+j;Q=X.length>4000?X.slice(-4000):X};Z.stderr?.setEncoding("utf8"),Z.stderr?.on("data",(j)=>{J(j)}),Z.on("message",(j)=>{this.onMessage(j)}),Z.on("error",(j)=>{this.failPending(Error(`${this.processLabel} process error: ${LG(j).message}`))}),Z.on("exit",(j,X)=>{this.process=null;let Y=Q.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(j)}, signal=${String(X)})${Y?`: ${Y}`:""}`))})}async call($,W,Z={}){this.start();let Q=this.process;if(!Q||Q.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let J=`req_${++this.requestCounter}`,j={type:"call",id:J,method:$,args:W};return await new Promise((X,Y)=>{let V={resolve:(B)=>X(B),reject:Y};if((Z.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(J),this.shutdown().catch(()=>{}),Y(Error(`${this.processLabel} call timed out after ${Z.timeoutMs}ms: ${$}`))},Z.timeoutMs);this.pending.set(J,V),Q.send(j,(B)=>{if(!B)return;let H=this.clearPendingRequest(J);if(!H)return;H.reject(Error(`${this.processLabel} failed to send call "${$}": ${LG(B).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((W)=>{let Z=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}W()},300);$.once("exit",()=>{clearTimeout(Z),W()});try{$.kill("SIGTERM")}catch{clearTimeout(Z),W()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let W=this.clearPendingRequest($.id);if(!W)return;if($.ok){W.resolve($.result);return}W.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[W,Z]of this.pending.entries()){if(this.pending.delete(W),Z.timeout)clearTimeout(Z.timeout);Z.reject($)}}}function BM($){return{...$,contributions:{tools:$.contributions?.tools??[],commands:$.contributions?.commands??[],rules:$.contributions?.rules??[],messageBuilders:$.contributions?.messageBuilders??[],providers:$.contributions?.providers??[],automationEventTypes:$.contributions?.automationEventTypes??[],mcpServers:$.contributions?.mcpServers??[],shortcuts:$.contributions?.shortcuts??[],flags:$.contributions?.flags??[]}}}function t4($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function HM(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function GM(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Z=RG($).resolve(`${HM()}/package.json`),Q=p8(r9(Z),"extensions","plugin-sandbox-bootstrap.js");return p3(Q)?Q:void 0}catch{return}}function KM(){let $=process.execPath?.trim();if(!$)return;let W=p8(r9(r9($)),"extensions","plugin-sandbox-bootstrap.js");return p3(W)?W:void 0}function FM(){let $=r9(VM(import.meta.url)),W=RG(import.meta.url),Z=[p8($,"plugin-sandbox-bootstrap.js"),p8($,"extensions","plugin-sandbox-bootstrap.js"),p8($,"agents","plugin-sandbox-bootstrap.js"),GM(),KM()];for(let j of Z.filter((X)=>typeof X==="string"))if(p3(j))return{file:j};let Q=p8($,"plugin-sandbox-bootstrap.ts"),J="jiti";try{J=W.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(J)});`,`const jiti = createJiti(${JSON.stringify(Q)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(Q)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
205
- `)}}var d3=FM();function l3($,W,Z){if(typeof $==="number"&&$>0)return $;if(Z){let Q=process.env[Z];if(Q){let J=Number(Q);if(Number.isInteger(J)&&J>0)return J}}return W}async function r8($){let W=new l8({name:"plugin-sandbox",..."file"in d3?{bootstrapFile:d3.file}:{bootstrapScript:d3.script},onEvent:$.onEvent}),Z=l3($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),Q=l3($.hookTimeoutMs,3000),J=l3($.contributionTimeoutMs,60000),j={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},X,Y=()=>{return X??=W.call("initialize",j,{timeoutMs:Z}).finally(()=>{X=void 0}),X},V;try{V=await W.call("initialize",j,{timeoutMs:Z})}catch(G){throw await W.shutdown().catch(()=>{}),G}let B=V.plugins.map(BM);return{extensions:B.map((G)=>{let K={name:G.name,__clinePluginPath:G.pluginPath,manifest:G.manifest,setup:(F)=>{AM(F,W,G,J,Y),UM(F,W,G,J,Y),fM(F,W,G,J,Y),_M(F,W,G,J,Y),DM(F,G)}};return K.hooks=OM(W,G,Q,Y),K}),failures:V.failures,pluginPaths:B.map((G)=>G.pluginPath),shutdown:async()=>{await W.shutdown()},warnings:V.warnings}}function AM($,W,Z,Q,J){for(let j of Z.contributions?.tools??[]){let X={name:j.name,description:j.description??"",inputSchema:j.inputSchema??{type:"object",properties:{}},timeoutMs:j.timeoutMs,retryable:j.retryable,execute:async(Y,V)=>{try{return await W.call("executeTool",{pluginId:Z.pluginId,contributionId:j.id,input:Y,context:V},{timeoutMs:Q})}catch(B){if(!t4(B))throw B;return await J(),await W.call("executeTool",{pluginId:Z.pluginId,contributionId:j.id,input:Y,context:V},{timeoutMs:Q})}}};$.registerTool(X)}}function UM($,W,Z,Q,J){for(let j of Z.contributions?.commands??[])$.registerCommand({name:j.name,description:j.description,handler:async(X)=>{try{return await W.call("executeCommand",{pluginId:Z.pluginId,contributionId:j.id,input:X},{timeoutMs:Q})}catch(Y){if(!t4(Y))throw Y;return await J(),await W.call("executeCommand",{pluginId:Z.pluginId,contributionId:j.id,input:X},{timeoutMs:Q})}}})}function fM($,W,Z,Q,J){for(let j of Z.contributions?.rules??[])$.registerRule({id:j.ruleId,source:j.source,content:j.hasContentHandler===!0?async()=>{try{return await W.call("resolveRuleContent",{pluginId:Z.pluginId,contributionId:j.id},{timeoutMs:Q})}catch(X){if(!t4(X))throw X;return await J(),await W.call("resolveRuleContent",{pluginId:Z.pluginId,contributionId:j.id},{timeoutMs:Q})}}:j.content??""})}function DM($,W){for(let Z of W.contributions?.providers??[])$.registerProvider({name:Z.name,description:Z.description,metadata:Z.metadata});for(let Z of W.contributions?.automationEventTypes??[])$.registerAutomationEventType({eventType:Z.eventType,source:Z.source,description:Z.description,attributesSchema:Z.attributesSchema,payloadSchema:Z.payloadSchema,examples:Z.examples,metadata:Z.metadata});for(let Z of W.contributions?.mcpServers??[])$.registerMcpServer(Z)}function _M($,W,Z,Q,J){for(let j of Z.contributions?.messageBuilders??[])$.registerMessageBuilder({name:j.name,async build(X){try{let Y=await W.call("buildMessages",{pluginId:Z.pluginId,contributionId:j.id,messages:X},{timeoutMs:Q});return MG(Y)?Y:X}catch(Y){if(!t4(Y))throw Y;await J();let V=await W.call("buildMessages",{pluginId:Z.pluginId,contributionId:j.id,messages:X},{timeoutMs:Q});return MG(V)?V:X}}})}function MG($){return Array.isArray($)&&$.every((W)=>typeof W==="object"&&W!==null&&("role"in W)&&("content"in W))}function LM($,W,Z,Q,J){return async(j)=>{try{return await $.call("invokeHook",{pluginId:W,hookName:Z,payload:j},{timeoutMs:Q})}catch(X){if(!t4(X))throw X;return await J(),await $.call("invokeHook",{pluginId:W,hookName:Z,payload:j},{timeoutMs:Q})}}}function OM($,W,Z,Q){let J={};for(let j of W.hooks??[])J[j]=LM($,W.pluginId,j,Z,Q);return Object.keys(J).length>0?J:void 0}var i3="package.json",EM="package";function e4($){return RM($)}function $5($){return MM($)}function wM($){try{return a9($)&&zM($).isDirectory()}catch{return!1}}function n3($){let W=[],Z=new Set;for(let Q of $){let J=n9(Q);if(Z.has(J))continue;Z.add(J),W.push(J)}return W}function EG($){let W=n3($);return P9(W)}function wG($){return e4($).flatMap((W)=>$5(W)).filter((W)=>a9(W))}function CM($,W){let Z=[];for(let Q of $)try{Z.push(...NG([Q],W))}catch{}return Z}function r3($){return typeof $==="object"&&$!==null}function PM($){try{let W=JSON.parse(TM(o9($,i3),"utf8"));if(!r3(W)||!r3(W.cline))return[];let Z=W.cline.plugins;if(!Array.isArray(Z))return[];let Q=[];for(let J of Z){if(typeof J==="string"){Q.push(J);continue}if(!r3(J)||!Array.isArray(J.paths))continue;for(let j of J.paths)if(typeof j==="string")Q.push(j)}return Q}catch{return[]}}function CG($,W){let Z=n9(W);return PM($).some((Q)=>n9($,Q)===Z)}function SM($,W){return qM($)===EM&&a9(o9(i9($),i3))&&CG(i9($),W)}function bM($){let W=n9($),Z=[],Q=i9(W);while(!0){if(SM(Q,W)){Z.push(Q);break}if(a9(o9(Q,i3))){if(CG(Q,W))Z.push(Q);break}let J=i9(Q);if(J===Q)break;Q=J}return n3(Z)}function n1($={}){let W=$.cwd??process.cwd(),Z=wG($.workspacePath),Q=NG($.pluginPaths??[],W);return EG([...Q,...Z])}function yM($={}){let W=$.cwd??process.cwd(),Z=wG($.workspacePath),Q=CM($.pluginPaths??[],W);return EG([...Q,...Z])}function a1($){let W=[];for(let Z of $)for(let Q of bM(Z)){let J=o9(Q,NM);if(wM(J))W.push(J)}return n3(W)}function PG($={}){return a1(yM($))}async function i8($={}){let W=n1($);if(W.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let Q=await C2(W,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:Q.plugins,failures:Q.failures,pluginPaths:Q.pluginPaths,warnings:Q.warnings}}let Z=await r8({pluginPaths:W,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:Z.extensions??[],shutdown:Z.shutdown,failures:Z.failures,pluginPaths:Z.pluginPaths,warnings:Z.warnings}}import{execFile as hM}from"node:child_process";import{promisify as kM}from"node:util";var IM=kM(hM);function a3($,W){$?.log(W,{severity:"warn"})}function xM($){let W=$?.checkpoint;if(!W||typeof W!=="object"||Array.isArray(W))return;let Z=W;if(!Z.latest||!Array.isArray(Z.history))return;let Q=Z.latest,J=Z.history.filter((j)=>!!j&&typeof j==="object"&&typeof j.ref==="string"&&typeof j.createdAt==="number"&&typeof j.runCount==="number");if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")return;return{latest:Q,history:J}}async function P2($,W){let Z=await IM("git",["-C",$,...W],{windowsHide:!0});return{stdout:Z.stdout.trim(),stderr:Z.stderr.trim()}}async function o3($,W){if(!$)return;let Z=`refs/cline/checkpoints/${W}/`;try{let{stdout:Q}=await P2($,["for-each-ref","--format=%(refname)",Z]),J=Q.trim().split(`
206
- `).filter(Boolean);await Promise.allSettled(J.map((j)=>P2($,["update-ref","-d",j])))}catch{}}async function SG($,W,Z){if(!$||Z.length===0)return;await Promise.allSettled(Z.map((Q)=>P2($,["update-ref",`refs/cline/checkpoints/${W}/${Q.runCount}`,Q.ref])))}function gM($,W){let Z=$.findIndex((Q)=>Q.runCount===W.runCount);if(Z<0)return[...$,W];return $.map((Q,J)=>J===Z?W:Q)}function bG($){let W=$.initialRunCount??0,Z,Q=async()=>{if(Z!==void 0)return Z;try{Z=(await P2($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Z=!1}return Z},J=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:W});if(!await Q())return;let j=async(B)=>{try{let G=(await P2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:W,kind:"commit"}}catch(H){a3($.logger,`${B}: ${H instanceof Error?H.message:String(H)}`);return}},X=`cline checkpoint session=${$.sessionId} run=${W}`,Y="";try{Y=(await P2($.cwd,["stash","create",X])).stdout.trim()}catch(B){return a3($.logger,`Checkpoint snapshot failed: ${B instanceof Error?B.message:String(B)}`),j("Checkpoint HEAD fallback failed")}if(!Y)return j("Checkpoint HEAD fallback failed");let V=`refs/cline/checkpoints/${$.sessionId}/${W}`;try{await P2($.cwd,["update-ref",V,Y])}catch(B){a3($.logger,`Checkpoint store failed: ${B instanceof Error?B.message:String(B)}`);return}return{ref:Y,createdAt:Date.now(),runCount:W,kind:"stash"}};return{beforeRun:async({snapshot:j})=>{if(j.parentAgentId!=null)return;W+=1;return},beforeModel:async({snapshot:j})=>{if(j.parentAgentId!=null||j.iteration!==1||W<1)return;let X=await J();if(!X)return;let Y=await $.readSessionMetadata(),V=xM(Y);if(V?.latest.ref===X.ref)return;let B=gM(V?.history??[],X);await $.writeSessionMetadata({...Y??{},checkpoint:{latest:X,history:B}});return}}}import{spawn as iM}from"node:child_process";import{appendFileSync as nM,readFileSync as aM}from"node:fs";import{join as oM}from"node:path";import{augmentNodeCommandForDebug as kG,withResolvedClineBuildEnv as e3}from"@cline/shared";import{ensureHookLogDir as yG}from"@cline/shared/storage";function n8($,W){if(!W)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:W}}import{existsSync as mM,readdirSync as vM}from"node:fs";import{basename as cM,extname as uM,join as dM}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as s9,resolveHooksConfigSearchPaths as lM}from"@cline/shared/storage";function W5($){return lM($)}var a8;((H)=>{H.TaskStart="TaskStart";H.TaskResume="TaskResume";H.TaskCancel="TaskCancel";H.TaskComplete="TaskComplete";H.TaskError="TaskError";H.PreToolUse="PreToolUse";H.PostToolUse="PostToolUse";H.UserPromptSubmit="UserPromptSubmit";H.PreCompact="PreCompact";H.SessionShutdown="SessionShutdown"})(a8||={});var Z5={["TaskStart"]:"agent_start",["TaskResume"]:"agent_resume",["TaskCancel"]:"agent_abort",["TaskComplete"]:"agent_end",["TaskError"]:"agent_error",["PreToolUse"]:"tool_call",["PostToolUse"]:"tool_result",["UserPromptSubmit"]:"prompt_submit",["PreCompact"]:void 0,["SessionShutdown"]:"session_shutdown"},pM=new Map(Object.values(a8).map(($)=>[$.toLowerCase(),$])),rM=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function Q5($){let W=uM($).toLowerCase();if(!rM.has(W))return;let Z=cM($,W).trim().toLowerCase();return pM.get(Z)}function S$($){let W=[],Z=new Set,Q=W5($).filter((J)=>mM(J));for(let J of Q)try{for(let j of vM(J,{withFileTypes:!0})){if(!j.isFile())continue;let X=Q5(j.name);if(!X)continue;let Y=dM(J,j.name);if(Z.has(Y))continue;Z.add(Y),W.push({fileName:X,hookEventName:Z5[X],path:Y})}}catch{}return W.sort((J,j)=>J.path.localeCompare(j.path))}function e9($){if(!$||typeof $!=="object")return{};let W={};for(let[Z,Q]of Object.entries($))W[Z]=typeof Q==="string"?Q:JSON.stringify(Q);return W}function t9($,W,Z){let Q=Z instanceof Error?`: ${Z.message}`:"",J=`${W}${Q}`;if($){try{$.log(J,{severity:"warn",...Z!==void 0?{error:Z}:{}})}catch{}return}console.warn(J)}function sM($,W){if(!W)return $;if(!$)return{...W};let Z=[$.context,W.context].filter((J)=>typeof J==="string"&&J.length>0).join(`
207
- `),Q=[...$.appendMessages??[],...W.appendMessages??[]];return{cancel:$.cancel===!0||W.cancel===!0?!0:void 0,review:$.review===!0||W.review===!0?!0:void 0,context:Z||void 0,overrideInput:W.overrideInput!==void 0?W.overrideInput:$.overrideInput,systemPrompt:W.systemPrompt!==void 0?W.systemPrompt:$.systemPrompt,appendMessages:Q.length>0?Q:void 0}}function tM($){if(!$||typeof $!=="object")return;let W=$,Z=typeof W.context==="string"?W.context:typeof W.contextModification==="string"?W.contextModification:typeof W.errorMessage==="string"?W.errorMessage:void 0;return{cancel:typeof W.cancel==="boolean"?W.cancel:void 0,review:typeof W.review==="boolean"?W.review:void 0,context:Z,overrideInput:Object.hasOwn(W,"overrideInput")?W.overrideInput:void 0}}function s3($){let W=String($??"").toLowerCase();return W.includes("cancel")||W.includes("abort")||W.includes("interrupt")}function E0($,W){let Z=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",Q={rootSessionId:W.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:Q,workspaceRoots:W.workspacePath?[W.workspacePath]:[],workspaceInfo:W.workspaceInfo,userId:Z,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function eM($){let W=$.trim();if(!W)return{};let Q=W.split(`
208
- `).map((j)=>j.trim()).filter(Boolean).filter((j)=>j.startsWith("HOOK_CONTROL\t")).map((j)=>j.slice(13)),J=Q.length>0?Q[Q.length-1]:W;try{return{parsedJson:JSON.parse(J)}}catch(j){return{parseError:j instanceof Error?j.message:"Failed to parse hook stdout JSON"}}}async function $R($,W){let Z=$.stdin;if(!Z)throw Error("hook command failed to create stdin");await new Promise((Q,J)=>{let j=!1,X=()=>{Z.off("error",V),Z.off("finish",B),$.off("close",H)},Y=(G)=>{if(j)return;if(j=!0,X(),G){let K=G.code;if(K==="EPIPE"||K==="ERR_STREAM_DESTROYED"){Q();return}J(G);return}Q()},V=(G)=>Y(G),B=()=>Y(),H=()=>Y();Z.on("error",V),Z.once("finish",B),$.once("close",H);try{Z.end(W)}catch(G){Y(G)}})}async function IG($,W){if(W.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await hG($,W)}catch(Z){let Q=QR(W.command,process.platform,Z);if(!Q)throw Z;return await hG($,{...W,command:Q})}}async function hG($,W){let Z=kG(W.command,{env:W.env,debugRole:"hook"}),Q=iM(Z[0],Z.slice(1),{cwd:W.cwd,env:e3(W.env),stdio:W.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:W.detached,windowsHide:!0}),J=new Promise((K)=>{Q.once("spawn",()=>K())}),j=new Promise((K,F)=>{Q.once("error",(A)=>F(A))}),X=JSON.stringify($);if(await Promise.race([J,j]),await $R(Q,X),W.detached){Q.unref();return}if(!Q.stdout||!Q.stderr)throw Error("hook command failed to create stdout/stderr");let Y="",V="",B=!1,H;Q.stdout.on("data",(K)=>{Y+=K.toString()}),Q.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((W.timeoutMs??0)>0)H=setTimeout(()=>{B=!0,Q.kill("SIGKILL")},W.timeoutMs);Q.once("close",(F)=>{if(H)clearTimeout(H);let{parsedJson:A,parseError:f}=eM(Y);K({exitCode:F,stdout:Y,stderr:V,parsedJson:A,parseError:f,timedOut:B})})});return await Promise.race([G,j])}function WR($){try{let Z=aM($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Z?.startsWith("#!"))return;let Q=Z.slice(2).trim();if(!Q)return;let J=Q.split(/\s+/).filter(Boolean);return J.length>0?J:void 0}catch{return}}function ZR($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function QR($,W=process.platform,Z){if(W!=="win32"||!ZR(Z))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function xG($){if($.length===0)return;let[W,...Z]=$,Q=W.replace(/\\/g,"/").toLowerCase(),J=Q.split("/").at(-1)??Q;if(J==="env")return xG(Z);if(J==="bash"||J==="sh"||J==="zsh")return[J,...Z];if(J==="python3"||J==="python")return process.platform==="win32"?["py","-3",...Z]:[J,...Z];return $}function JR($){let W=WR($);if(W&&W.length>0)return[...xG(W)??W,$];let Z=$.toLowerCase();if(Z.endsWith(".sh")||Z.endsWith(".bash")||Z.endsWith(".zsh"))return["bash",$];if(Z.endsWith(".js")||Z.endsWith(".mjs")||Z.endsWith(".cjs"))return kG(["node",$],{debugRole:"hook"});if(Z.endsWith(".ts")||Z.endsWith(".mts")||Z.endsWith(".cts"))return["bun","run",$];if(Z.endsWith(".py"))return process.platform==="win32"?["py","-3",$]:["python3",$];if(Z.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",$];return["bash",$]}function jR($){let W={};for(let Z of S$($)){if(!Z.hookEventName)continue;let Q=Z.hookEventName,J=W[Q]??[];J.push(JR(Z.path)),W[Q]=J}return W}async function XR($){let W;for(let Z of $.commands){let Q=Z.join(" ");try{let J=await IG($.payload,{command:Z,cwd:$.cwd,env:e3(process.env),detached:!1,timeoutMs:$.timeoutMs});if(J?.timedOut){t9($.logger,`hook command timed out: ${Q}`);continue}if(J?.parseError){t9($.logger,`hook command returned invalid JSON control output: ${Q} (${J.parseError})`);continue}W=sM(W,tM(J?.parsedJson))}catch(J){t9($.logger,`hook command failed: ${Q}`,J)}}return W}function S2($){for(let W of $.commands){let Z=W.join(" ");IG($.payload,{command:W,cwd:$.cwd,env:e3(process.env),detached:!0}).catch((Q)=>{t9($.logger,`hook command failed: ${Z}`,Q)})}}function b$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function t3($,W){return{...b$($.snapshot),userMessage:W}}function gG($){return{...b$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function mG($){return{...b$($.snapshot),iteration:$.snapshot.iteration,record:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input,output:$.result.output,error:$.result.isError?String($.result.output):void 0,durationMs:$.durationMs,startedAt:$.startedAt,endedAt:$.endedAt}}}function vG($){return $.filter((W)=>W.type==="text"&&typeof W.text==="string").map((W)=>W.text).join("")}function YR($){if(!$)return;let W={};if($.cancel===!0)W.stop=!0;if($.overrideInput!==void 0)W.input=$.overrideInput;return Object.keys(W).length>0?W:void 0}function o8($){let W={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Z=(Q)=>{let J=`${JSON.stringify({ts:new Date().toISOString(),...Q})}
209
- `,X=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??oM(yG(),"hooks.jsonl");yG(X),nM(X,J,"utf8")};return{beforeRun:async(Q)=>{let J=t3(Q,"");Z({...E0(J,W),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Q)=>{let J=gG(Q);Z({...E0(J,W),hookName:"tool_call",iteration:J.iteration,tool_call:{id:J.call.id,name:J.call.name,input:J.call.input},preToolUse:{toolName:J.call.name,parameters:e9(J.call.input)}});return},afterTool:async(Q)=>{let J=mG(Q);Z({...E0(J,W),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:e9(J.record.input),result:typeof J.record.output==="string"?J.record.output:JSON.stringify(J.record.output),success:!J.record.error,executionTimeMs:J.record.durationMs}});return},afterRun:async({snapshot:Q,result:J})=>{let j=b$(Q);if(J.status==="completed"){Z({...E0(j,W),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||s3(J.error?.message)){Z({...E0(j,W),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Z({...E0(j,W),hookName:"agent_error",iteration:J.iterations,error:{name:J.error.name,message:J.error.message,stack:J.error.stack}})},onEvent:async(Q)=>{if(Q.type!=="message-added"||Q.message.role!=="user")return;let J=t3({snapshot:Q.snapshot},vG(Q.message.content));Z({...E0(J,W),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function J5($){let W=jR($.workspacePath);if(!Object.values(W).some((G)=>G.length>0))return;let Q=async(G,K)=>{let F=W[K]??[];if(F.length===0)return;S2({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...E0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...E0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=W.prompt_submit??[];if(K.length>0)S2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},j=async(G)=>{let K=W.tool_call??[];if(K.length===0)return;return XR({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...E0(G,$),hookName:"tool_call",iteration:G.iteration,tool_call:{id:G.call.id,name:G.call.name,input:G.call.input},preToolUse:{toolName:G.call.name,parameters:e9(G.call.input)}}})},X=async(G)=>{let K=W.tool_result??[];if(K.length===0)return;S2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:e9(G.record.input),result:typeof G.record.output==="string"?G.record.output:JSON.stringify(G.record.output),success:!G.record.error,executionTimeMs:G.record.durationMs}}})},Y=async(G)=>{let K=W.agent_end??[];if(K.length===0)return;S2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"agent_end",iteration:G.iteration,turn:G.turn,taskComplete:{taskMetadata:{}}}})},V=async(G)=>{let K=W.agent_error??[];if(K.length===0)return;S2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},B=async(G)=>{if(s3(G.reason)){let F=W.agent_abort??[];if(F.length>0)S2({commands:F,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=W.session_shutdown??[];if(K.length===0)return;S2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"session_shutdown",reason:G.reason}})},H={};if((W.agent_start?.length??0)>0||(W.agent_resume?.length??0)>0||(W.prompt_submit?.length??0)>0){if((W.agent_start?.length??0)>0||(W.agent_resume?.length??0)>0)H.beforeRun=async(G)=>{let K=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await Q(b$(G.snapshot),K);return};if((W.prompt_submit?.length??0)>0)H.onEvent=async(G)=>{if(G.type!=="message-added"||G.message.role!=="user")return;await J(t3({snapshot:G.snapshot},vG(G.message.content)))}}if((W.tool_call?.length??0)>0)H.beforeTool=async(G)=>{let K=await j(gG(G));return YR(K)};if((W.tool_result?.length??0)>0)H.afterTool=async(G)=>{await X(mG(G));return};if((W.agent_end?.length??0)>0)H.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await Y({...b$(G),iteration:K.iterations,turn:{outputText:K.outputText,status:K.status}})};if((W.agent_error?.length??0)>0||(W.agent_abort?.length??0)>0||(W.session_shutdown?.length??0)>0){let G=H.afterRun;H.afterRun=async(K)=>{await G?.(K);let{snapshot:F,result:A}=K;if(A.status==="aborted"||s3(A.error?.message)){await B({...b$(F),reason:A.error?.message});return}if(A.error)await V({...b$(F),iteration:A.iterations,error:A.error})}}return H}function s8($){return n8("core.hook_config_files",J5($))}function b2($,W){let Z=$.map((Q)=>Q[W]).filter((Q)=>typeof Q==="function");if(Z.length===0)return;return async(Q)=>{let J;for(let j of Z){let X=await j(Q);if(!X||typeof X!=="object")continue;let Y=X;J={...J??{},...Y,stop:J?.stop===!0||Y.stop===!0?!0:Y.stop,options:J?.options||Y.options?{...J?.options??{},...Y.options??{}}:void 0}}return J}}function y2($){let W=$.filter((Z)=>Z!==void 0);if(W.length===0)return;return{beforeRun:b2(W,"beforeRun"),afterRun:b2(W,"afterRun"),beforeModel:b2(W,"beforeModel"),afterModel:b2(W,"afterModel"),beforeTool:b2(W,"beforeTool"),afterTool:b2(W,"afterTool"),onEvent:b2(W,"onEvent")}}var cG={};E(cG,{normalizeRuntimeCapabilities:()=>w0});function w0(...$){let W,Z;for(let J of $){if(!J)continue;if(J.toolExecutors)W={...W??{},...J.toolExecutors};if(J.requestToolApproval)Z=J.requestToolApproval}let Q=W&&Object.keys(W).length>0;if(!Q&&!Z)return;return{...Q?{toolExecutors:W}:{},...Z?{requestToolApproval:Z}:{}}}var oG={};E(oG,{toProviderConfig:()=>t0,emptyStoredProviderSettings:()=>k$,StoredProviderSettingsSchema:()=>W6,StoredProviderSettingsEntrySchema:()=>zZ,ProviderSettingsSchemaTyped:()=>$6});import{z as h$}from"zod";var aG={};E(aG,{toProviderConfig:()=>t0,safeParseSettings:()=>TZ,safeCreateProviderConfig:()=>BJ,parseSettings:()=>OZ,normalizeProviderId:()=>e8,isBuiltInProviderId:()=>YJ,createProviderConfig:()=>VJ,SapSettingsSchema:()=>DZ,ReasoningSettingsSchema:()=>FZ,ProviderSettingsSchema:()=>y$,ProviderProtocolSchema:()=>HZ,ProviderIdSchema:()=>B5,ProviderClientSchema:()=>GZ,OcaSettingsSchema:()=>_Z,ModelCatalogSettingsSchema:()=>LZ,GcpSettingsSchema:()=>UZ,BUILT_IN_PROVIDER_IDS:()=>XJ,BUILT_IN_PROVIDER:()=>V5,AzureSettingsSchema:()=>fZ,AwsSettingsSchema:()=>AZ,AuthSettingsSchema:()=>KZ});import*as s0 from"@cline/llms";import{z as w}from"zod";var nG={};E(nG,{resolveProviderConfig:()=>Y5,getProviderConfig:()=>BZ,getLiveModelsCatalog:()=>t8,clearPublicModelsCatalogCache:()=>PR,clearPrivateModelsCatalogCache:()=>jJ,clearLiveModelsCatalogCache:()=>JJ,OPENAI_COMPATIBLE_PROVIDERS:()=>X5,DEFAULT_MODELS_CATALOG_URL:()=>jZ});import*as $0 from"@cline/llms";function $J($){if(!Array.isArray($))return[];return $.map((W)=>{if(typeof W==="string")return W.trim();if(W&&typeof W==="object"){let Z=W;for(let Q of[Z.id,Z.name,Z.model])if(typeof Q==="string"&&Q.trim())return Q.trim()}return""}).filter((W)=>W.length>0)}function VR($,W){let Z=$J($);if(Z.length>0)return Z;if(!$||typeof $!=="object")return[];let Q=$,J=$J(Q.data??Q.models);if(J.length>0)return J;if(Q.models&&typeof Q.models==="object"&&!Array.isArray(Q.models)){let X=Object.keys(Q.models).filter((Y)=>Y.trim().length>0);if(X.length>0)return X}let j=Q.providers?.[W];if(j&&typeof j==="object"){let Y=$J(j.models??j);if(Y.length>0)return Y}return[]}async function $Z($,W){let Z=await fetch($,{method:"GET"});if(!Z.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Z.status}`);return VR(await Z.json(),W)}function uG($){return $.replace(/\/+$/,"")}function WZ($,W,Z){let Q=Z?.trim();if(!Q)return;let J=$?.trim();if(!J||!W?.trim())return Q;try{let j=new URL(Q),X=new URL(W),Y=new URL(J);if(j.origin!==X.origin)return Q;let V=uG(X.pathname),B=uG(Y.pathname);if(V&&j.pathname.startsWith(`${V}/`)){let H=j.pathname.slice(V.length);Y.pathname=`${B}${H}`}else Y.pathname=j.pathname;return Y.search=j.search,Y.hash=j.hash,Y.toString()}catch{return Q}}function BR($){return Object.fromEntries(Object.entries($).map(([W,Z])=>[W,{...Z}]))}function HR($){if($.baseUrl.length===0)return!1;switch($.client){case"openai-compatible":case"openai":case"openai-r1":case"fetch":return!0;default:return $.protocol==="openai-chat"}}var GR=Object.values($0.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:BR($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),lG=Object.fromEntries(GR.map(($)=>[$.id,$]));function KR($){return lG[$]}function FR(){return Object.fromEntries(Object.entries(lG).filter(([,$])=>HR($)))}function pG($=[]){let W=$.flatMap((Z)=>{switch(Z){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Z];default:return[]}});return W.length>0?W:void 0}var jZ="https://models.dev/api.json",AR=600000,rG=300000,UR=5000,JZ=new Map,j5=new Map,WJ=new Map,ZZ=new Map;async function fR(){return $0.getGeneratedProviderModels()}async function DR($,W={},Z={},Q={},J={},j={}){if($==="litellm")return $0.sortModelsByReleaseDate(Q);let X=await fR(),Y=$0.resolveProviderModelCatalogKeys($),V=Object.assign({},...Y.map((K)=>X[K]??{})),B=Boolean($0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),H=Object.keys(J).length>0;if(B&&H)return $0.sortModelsByReleaseDate({...J,...j});if($==="openai-codex")return $0.sortModelsByReleaseDate({...W,...$0.filterOpenAICodexModels(Z),...J,...j});if($==="cline-pass"&&Object.keys(Z).length>0)return{...Z,...j};let G=$0.sortModelsByReleaseDate({...V,...W,...Z,...Q,...J});if($==="cline")return $0.sortModelsByReleaseDate({...$0.preferCanonicalModelIds(G,$0.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...j});return $0.sortModelsByReleaseDate({...G,...j})}function _R($,W){let Z=$0.resolveProviderModelCatalogKeys($);return Object.assign({},...Z.map((Q)=>W[Q]??{}))}function XZ($){let W=$?.trim();return W&&W.length>0?W:""}function QJ($){let W=$.apiKey?.trim()||$.accessToken?.trim();return W&&W.length>0?W:void 0}function LR($){let W=2166136261;for(let Z=0;Z<$.length;Z+=1)W^=$.charCodeAt(Z),W+=(W<<1)+(W<<4)+(W<<7)+(W<<8)+(W<<24);return(W>>>0).toString(16)}function OR($,W){return`${$}:${XZ(W.baseUrl)}:${LR(QJ(W)??"")}`}async function YZ($,W,Z=UR){let Q=new AbortController,J=setTimeout(()=>Q.abort(),Z);try{return await fetch($,{...W,signal:Q.signal})}finally{clearTimeout(J)}}function h2($,W,Z){if(Z&&!$.includes(W))$.push(W)}function VZ($,W){let Z=["streaming","tools"];return h2(Z,"images",Boolean(W.supportsImages)),h2(Z,"prompt-cache",Boolean(W.supportsPromptCache)),h2(Z,"reasoning",Boolean(W.supportsReasoning)),{id:$,name:W.name??$,contextWindow:W.contextWindow,maxInputTokens:W.maxInputTokens,maxTokens:W.maxTokens,capabilities:Z,releaseDate:W.releaseDate,status:"active"}}async function TR($,W){let Z=await YZ("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${W}`,"Content-Type":"application/json"}});if(!Z.ok)throw Error(`Baseten model refresh failed: HTTP ${Z.status}`);let J=(await Z.json())?.data??[],j={};for(let X of J){let Y=X.id?.trim();if(!Y)continue;if(Y.includes("whisper")||Y.includes("tts")||Y.includes("embedding"))continue;let V=X.supported_features??[];j[Y]=VZ(Y,{name:Y,contextWindow:X.context_length,maxInputTokens:X.context_length,maxTokens:X.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return j}function dG($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let W=Number($);return Number.isFinite(W)?W:void 0}return}async function zR($,W){let Z=await YZ("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":W}});if(!Z.ok)throw Error(`Hicap model refresh failed: HTTP ${Z.status}`);let J=(await Z.json())?.data??[],j={};for(let X of J){let Y=X.id?.trim();if(!Y)continue;j[Y]=VZ(Y,{name:Y,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return j}async function qR($,W){let Q=`${(XZ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await YZ(Q,{method:"GET",headers:{Authorization:`Bearer ${W}`,accept:"application/json"}});if(!J.ok)throw Error(`Poolside model refresh failed: HTTP ${J.status}`);let X=(await J.json())?.data??[],Y={};for(let V of X){let B=V.id?.trim();if(!B)continue;let H=V.supported_features??[],G=V.supported_sampling_parameters??[],K=V.input_modalities??[],F=["streaming"];h2(F,"tools",H.includes("tools")),h2(F,"reasoning",H.includes("reasoning")),h2(F,"temperature",G.includes("temperature")),h2(F,"images",K.includes("image"));let A={input:dG(V.pricing?.prompt),output:dG(V.pricing?.completion)};Y[B]={id:B,name:V.name??B,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:A.input!==void 0||A.output!==void 0?A:void 0,status:"active"}}return Y}function MR($){let W=XZ($).replace(/\/+$/,"");if(!W)return"http://localhost:4000";return W.endsWith("/v1")?W.slice(0,-3):W}function RR($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function NR($){let W=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Z=500,Q=W?`: ${W.slice(0,500)}${W.length>500?"...":""}`:"";return`HTTP ${$.status}${Q}`}async function ER($,W){let Z=MR($.baseUrl),Q=[],J=[["x-litellm-api-key",{"x-litellm-api-key":W}],["Authorization",{Authorization:`Bearer ${W}`}]];for(let j of RR(Z))for(let[X,Y]of J)try{let V=await YZ(j,{method:"GET",headers:{accept:"application/json",...Y}});if(V.ok){let H=(await V.json())?.data??[],G={};for(let K of H){let F=K.model_name?.trim(),f=K.litellm_params?.model?.trim()||F;if(!f)continue;let U=K.model_info,_=VZ(f,{name:F??f,maxTokens:U?.max_output_tokens??U?.max_tokens,maxInputTokens:U?.max_input_tokens??U?.max_tokens,supportsImages:U?.supports_vision,supportsPromptCache:U?.supports_prompt_caching,supportsReasoning:U?.supports_reasoning});if(G[f]=_,F)G[F]={..._,id:F,name:F}}return G}Q.push(`${new URL(j).pathname} (${X}): ${await NR(V)}`)}catch(V){let B=V instanceof Error?V.message:String(V);Q.push(`${new URL(j).pathname} (${X}): ${B}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${Q.join("; ")}`)}var iG={baseten:TR,hicap:zR,litellm:ER,poolside:qR},ZJ=new Map,QZ=new Map;function wR($,W){return`${$}:${XZ(W.baseUrl)}`}async function CR($,W,Z){let Q=$0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=WZ(Z.baseUrl,Q?.provider.baseUrl,Q?.provider.modelsSourceUrl);if(!J)return{};let j=W?.cacheTtlMs??rG,X=wR($,Z),Y=Date.now(),V=ZJ.get(X);if(V&&V.expiresAt>Y)return V.data;let B=QZ.get(X);if(B)return B;let H=$Z(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,VZ(F,{name:F})]));return ZJ.set(X,{data:K,expiresAt:Y+j}),K}).finally(()=>{QZ.delete(X)});return QZ.set(X,H),H}function PR(){ZJ.clear(),QZ.clear()}async function SR($,W){let Z=QJ(W);if(!Z)return{};let Q=iG[$];if(!Q)return{};return Q(W,Z)}function bR($,W,Z){if(!Z)return!1;if(!iG[$])return!1;if(W?.loadPrivateOnAuth===!1)return!1;return Boolean(QJ(Z))}async function yR($,W,Z){let Q=W?.cacheTtlMs??rG,J=OR($,Z),j=Date.now(),X=WJ.get(J);if(X&&X.expiresAt>j)return X.data;let Y=ZZ.get(J);if(Y)return Y;let V=SR($,Z).then((B)=>{return WJ.set(J,{data:B,expiresAt:j+Q}),B}).finally(()=>{ZZ.delete(J)});return ZZ.set(J,V),V}async function hR($){return $0.fetchLiveProviderModels($,globalThis.fetch)}async function t8($={}){let W=$.url??jZ,Z=$.cacheTtlMs??AR,Q=Date.now(),J=JZ.get(W);if(J&&J.expiresAt>Q)return J.data;let j=j5.get(W);if(j)return j;let X=hR(W).then((Y)=>{return JZ.set(W,{data:Y,expiresAt:Q+Z}),Y}).finally(()=>{j5.delete(W)});return j5.set(W,X),X}function JJ($){if($){JZ.delete($),j5.delete($);return}JZ.clear(),j5.clear()}function jJ(){WJ.clear(),ZZ.clear()}function kR($){return Object.fromEntries(Object.entries($).map(([W,Z])=>[W,{baseUrl:Z.baseUrl,modelId:Z.modelId,capabilities:pG(Z.capabilities)}]))}var X5=kR(FR());function BZ($){let W=KR($);if(!W)return;return{baseUrl:W.baseUrl||void 0,modelId:W.modelId,knownModels:W.knownModels,capabilities:pG(W.capabilities)}}async function Y5($,W,Z){let Q=BZ($);if(!Q)return;try{let J=W?.loadLatestOnInit?await t8(W):void 0,j=J?_R($,J):{},X=Z&&bR($,W,Z)?await yR($,W,Z):{},V=Boolean($0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Z??{providerId:$,modelId:Q.modelId,baseUrl:Q.baseUrl}:Z,B=V?await CR($,W,V).catch(()=>({})):{},H=await DR($,Q.knownModels,j,X,B,Z?.knownModels);return{...Q,knownModels:H}}catch(J){if(W?.failOnError)throw J;if($==="litellm")return{...Q,knownModels:{}};return Q}}var V5=s0.BUILT_IN_PROVIDER,XJ=s0.BUILT_IN_PROVIDER_IDS,YJ=s0.isBuiltInProviderId,e8=s0.normalizeProviderId,B5=w.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),HZ=w.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),GZ=w.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),KZ=w.object({apiKey:w.string().optional(),accessToken:w.string().optional(),refreshToken:w.string().optional(),expiresAt:w.number().int().positive().optional(),accountId:w.string().optional(),metadata:w.record(w.string(),w.unknown()).optional()}),IR=w.enum(["none","low","medium","high","xhigh"]),FZ=w.object({enabled:w.boolean().optional(),effort:IR.optional(),budgetTokens:w.number().int().positive().optional()}),AZ=w.object({accessKey:w.string().optional(),secretKey:w.string().optional(),sessionToken:w.string().optional(),region:w.string().optional(),profile:w.string().optional(),authentication:w.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:w.boolean().optional(),useCrossRegionInference:w.boolean().optional(),useGlobalInference:w.boolean().optional(),endpoint:w.string().url().optional(),customModelBaseId:w.string().optional()}),UZ=w.object({projectId:w.string().optional(),region:w.string().optional()}),fZ=w.object({apiVersion:w.string().optional(),useIdentity:w.boolean().optional()}),DZ=w.object({clientId:w.string().optional(),clientSecret:w.string().optional(),tokenUrl:w.string().url().optional(),resourceGroup:w.string().optional(),deploymentId:w.string().optional(),useOrchestrationMode:w.boolean().optional(),api:w.enum(["orchestration","foundation-models"]).optional(),defaultSettings:w.record(w.string(),w.unknown()).optional()}),_Z=w.object({mode:w.enum(["internal","external"]).optional(),usePromptCache:w.boolean().optional()}),LZ=w.object({loadLatestOnInit:w.boolean().optional(),loadPrivateOnAuth:w.boolean().optional(),url:w.string().url().optional(),cacheTtlMs:w.number().int().positive().optional(),failOnError:w.boolean().optional()}),y$=w.object({provider:B5,apiKey:w.string().optional(),auth:KZ.optional(),model:w.string().optional(),protocol:HZ.optional(),client:GZ.optional(),routingProviderId:B5.optional(),maxTokens:w.number().int().positive().optional(),contextWindow:w.number().int().positive().optional(),baseUrl:w.string().url().optional(),headers:w.record(w.string(),w.string()).optional(),timeout:w.number().int().positive().optional(),reasoning:FZ.optional(),aws:AZ.optional(),gcp:UZ.optional(),azure:fZ.optional(),sap:DZ.optional(),oca:_Z.optional(),region:w.string().optional(),apiLine:w.enum(["china","international"]).optional(),capabilities:w.array(w.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:LZ.optional()});function OZ($){return y$.parse($)}function TZ($){return y$.safeParse($)}function xR($){return $.protocol==="openai-responses"||$.client==="openai"}function t0($,W={}){let Z=$.provider,Q=e8(Z),J=W.includeKnownModels!==!1,j=$.reasoning?.effort||"none",X=j==="none"?void 0:j,Y=X5[Q],V=Object.assign({},...s0.resolveProviderModelCatalogKeys(Q).map((f)=>s0.getGeneratedModelsForProvider(f))),B=Object.keys(V)[0],H=O8(Q,$),G=$.baseUrl??(Q==="oca"?$.oca?.mode==="internal"?j9:X9:Y?.baseUrl),K=$.routingProviderId??(xR($)&&Q!==V5.OPENAI_NATIVE?V5.OPENAI_NATIVE:void 0),F=J?Y?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,A={providerId:Z,clientType:$.client,routingProviderId:K,modelId:$.model??Y?.modelId??B??"default",...J?{knownModels:F}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:X,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??Y?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(A).filter(([f,U])=>U!==void 0))}function VJ($){let W=OZ($);return t0(W)}function BJ($){let W=TZ($);if(W.success)return{success:!0,config:t0(W.data)};return{success:!1,error:W.error}}var $6=y$;var zZ=h$.object({settings:y$,updatedAt:h$.string().datetime(),tokenSource:h$.enum(["manual","oauth","migration"]).default("manual")}),W6=h$.object({version:h$.literal(1),lastUsedProvider:h$.string().min(1).optional(),providers:h$.record(h$.string(),zZ)});function k$(){return{version:1,providers:{}}}A1();var WK={};E(WK,{InMemoryWorkspaceManager:()=>Q6});import{upsertWorkspaceInfo as cR,WorkspaceManifestSchema as GJ}from"@cline/shared";var $K={};E($K,{normalizeWorkspacePath:()=>o1,generateWorkspaceInfoWithDiagnostics:()=>H5,generateWorkspaceInfo:()=>Z6,buildWorkspaceMetadataWithInfo:()=>HJ,buildWorkspaceMetadata:()=>G5});import{basename as gR,resolve as mR}from"node:path";import{performance as sG}from"node:perf_hooks";import{processWorkspaceInfo as eG}from"@cline/shared";import vR from"simple-git";function o1($){return mR($)}async function Z6($){return(await H5($)).info}function tG($){let W=$ instanceof Error?$.message:String($);return/unknown revision|ambiguous argument|does not have any commits yet/i.test(W)}function qZ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function H5($){let W=o1($),Z={rootPath:W,hint:gR(W)},Q;try{let J=vR({baseDir:W});if(!await J.checkIsRepo())return{info:Z,vcsType:"none"};try{let X=await J.getRemotes(!0);if(X.length>0){let Y=X.map((V)=>{let B=V.refs.fetch||V.refs.push;return`${V.name}: ${B}`});Z.associatedRemoteUrls=Y}}catch(X){Q??=qZ(X)}try{let X=(await J.revparse(["HEAD"])).trim();if(X.length>0)Z.latestGitCommitHash=X}catch(X){if(!tG(X))Q??=qZ(X)}try{let X=(await J.branch()).current.trim();if(X.length>0)Z.latestGitBranchName=X}catch(X){if(!tG(X))Q??=qZ(X)}return{info:Z,vcsType:"git",error:Q}}catch(J){return{info:Z,vcsType:"none",error:qZ(J)}}}async function G5($){let W=await Z6($);return eG(W)}async function HJ($){let W=sG.now(),Z=await H5($),Q=sG.now()-W,J=Z.info;return{workspaceInfo:J,workspaceMetadata:eG(J),durationMs:Q,vcsType:Z.vcsType,initError:Z.error}}class Q6{manifest;listeners=new Set;constructor($){this.manifest=GJ.parse($??{workspaces:{}})}async addWorkspacePath($){let W=await Z6($);return this.manifest=cR(this.manifest,W),this.emit({type:"workspace_added",workspace:W}),W}async switchWorkspace($){let W=o1($),Z=this.manifest.workspaces[W];if(Z)return this.manifest=GJ.parse({...this.manifest,currentWorkspacePath:W}),this.emit({type:"workspace_switched",workspace:Z}),Z;let Q=await this.addWorkspacePath(W);return this.manifest=GJ.parse({...this.manifest,currentWorkspacePath:Q.rootPath}),this.emit({type:"workspace_switched",workspace:Q}),Q}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let W=o1($);return this.manifest.workspaces[W]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let W of this.listeners)W($)}}O0();import{createHash as uR}from"node:crypto";var ZK=new Set,QK=new Set;function dR($){return uR("sha256").update($).digest("hex")}function lR($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function JK($){if(!$.telemetry)return;let W=dR($.rootPath),Z=$.rootCount??1;if(!ZK.has(W))ZK.add(W),gW($.telemetry,{root_count:Z,vcs_types:lR($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!QK.has(W)){QK.add(W);let Q=Error($.initError.message);Q.name=$.initError.errorType||"Error",mW($.telemetry,Q,{fallback_to_single_root:!0,workspace_count:Z})}}function iR($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function nR($,W,Z){if(W.length>0)for(let j of W)Z?.log(j.message,{severity:"warn"});if($.length===0)return;let Q=$.slice(0,3).map(iR).join("; "),J=$.length>3?`; and ${$.length-3} more`:"";Z?.log(`Some plugins failed to initialize. ${Q}${J}. Use --verbose for more details.`,{severity:"warn"});for(let j of $)Z?.log(`Plugin initialization failed (${j.phase}) for ${j.pluginPath}`,{severity:"warn",stack:j.stack,pluginPath:j.pluginPath,pluginName:j.pluginName})}function aR($,W){let Z=typeof $.thinking==="boolean",Q=typeof $.reasoningEffort==="string";if(!Z&&!Q)return W;return{...W??{},...Z?{enabled:$.thinking}:{},...Q?{effort:$.reasoningEffort}:{}}}function jK($,W){return rR($,W)}function oR($){let W=0;for(let Z of $??[]){if(Z.role!=="user")continue;if(("metadata"in Z&&Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0)?.kind==="recovery_notice")continue;W+=1}return W}function sR($,W,Z,Q,J,j){let X=Q.getProviderSettings($.providerId),Y=J||X?.modelCatalog?{...J??{},...X?.modelCatalog??{}}:void 0,V=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,B=pR({providerId:$.providerId,sessionId:W,source:Z,defaultSource:A0.CLI,client:{name:$.extensionContext?.client?.name,version:$.extensionContext?.client?.version,versionHeaderFallback:$.headers?.["X-CLIENT-VERSION"],platform:$.extensionContext?.client?.platform,platformVersion:$.extensionContext?.client?.platformVersion,isMultiRoot:$.extensionContext?.client?.isMultiRoot},coreVersion:c8,openAiCodex:{accountId:V?.accountId??X?.auth?.accountId,accessToken:V?.accessToken??$.apiKey??X?.auth?.accessToken??X?.apiKey,userAgentVersion:process.env.npm_package_version},headers:{stored:X?.headers,config:$.headers,session:V?.headers}}),H={...X??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??X?.apiKey,baseUrl:$.baseUrl??X?.baseUrl,headers:void 0,reasoning:aR($,X?.reasoning),modelCatalog:Y},G={...t0(H),...V??{}};if(B)G.headers=B;if($.knownModels)G.knownModels=$.knownModels;if($.extensionContext)G.extensionContext=$.extensionContext;let F=$.fetch??G.fetch??j;if(F)G.fetch=F;return G}async function XK($){let{input:W,sessionId:Z,providerSettingsManager:Q,defaultTelemetry:J,defaultCapabilities:j,defaultToolPolicies:X,defaultFetch:Y,onPluginEvent:V,onTeamEvent:B,createSubAgentLifecycleCallbacks:H,createSpawnTool:G,localRuntime:K,readSessionMetadata:F,writeSessionMetadata:A}=$,f=C$(W.config),{modelCatalogDefaults:U,userInstructionService:_,configExtensions:D,onTeamRestored:M,...T}=K??{},O=Object.keys(T).length>0?T:void 0,{workspaceInfo:L,workspaceMetadata:C,durationMs:N,vcsType:y,initError:P}=await HJ(f),d=O?.extensionContext,n={...d??{},workspace:{...L,...d?.workspace??{}},session:{...d?.session??{},sessionId:Z},logger:d?.logger??O?.logger,telemetry:d?.telemetry??O?.telemetry??J};JK({telemetry:n.telemetry,rootPath:L.rootPath,workspaceInfo:L,rootCount:1,vcsType:y,durationMs:N,initError:P,featureFlagEnabled:!0});let o=s8({cwd:W.config.cwd,workspacePath:f,rootSessionId:Z,logger:O?.logger,workspaceInfo:L}),G$=eH(O?.hooks)?void 0:o8({rootSessionId:Z,workspacePath:f,workspaceInfo:L}),h1=y2([O?.hooks,G$]),x0;if(jK(D,"plugins"))try{x0=await i8({pluginPaths:O?.pluginPaths,workspacePath:f,cwd:W.config.cwd,onEvent:V,providerId:W.config.providerId,modelId:W.config.modelId,workspaceInfo:L,session:n.session,client:n.client,user:n.user,logger:n.logger,telemetry:n.telemetry,automation:n.automation}),nR(x0.failures,x0.warnings,O?.logger)}catch(K8){let z7=K8 instanceof Error?K8.message:String(K8);O?.logger?.log?.(`plugin loading failed; continuing without plugins (${z7})`)}let V0=w3(o?[o]:void 0,w3(O?.extensions,S9(x0?.extensions))),K$=jK(D,"plugins")?a1(x0?.pluginPaths??[]):void 0,L0={...W.config,...O??{},sessionId:Z,hooks:h1,extensions:V0,extensionContext:n,telemetry:n.telemetry},b0=sR(L0,Z,W.source,Q,U,Y),L1=y2([L0.hooks,L0.checkpoint?.enabled===!0?bG({cwd:L0.cwd,sessionId:Z,logger:L0.logger,createCheckpoint:L0.checkpoint?.createCheckpoint,initialRunCount:oR(W.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),g={...L0,providerConfig:b0,workspaceMetadata:C,hooks:L1},q0=W.toolPolicies??L0.toolPolicies??X,I=w0(j,W.capabilities),e=I?.requestToolApproval,y0=I?.toolExecutors,B0=H?.(g),kW=new Q6({currentWorkspacePath:L.rootPath,workspaces:{[L.rootPath]:L}});return{effectiveInput:W,config:g,providerConfig:b0,workspaceMetadata:C,workspaceInfo:L,extensions:V0,hooks:L1,toolPolicies:q0,requestToolApproval:e,pluginSandboxShutdown:x0?.shutdown,runtimeBuilderInput:{config:g,hooks:L1,extensions:V0,onTeamEvent:B,createSpawnTool:G,onTeamRestored:M,onSubAgentEvent:B0?.onSubAgentEvent,onSubAgentStart:B0?.onSubAgentStart,onSubAgentEnd:B0?.onSubAgentEnd,userInstructionService:_,pluginSkillDirectories:K$,configExtensions:D,toolExecutors:y0,toolPolicies:q0,workspaceManager:kW,logger:g.logger,telemetry:g.telemetry,requestToolApproval:e}}}import{existsSync as MZ,mkdirSync as tR,readdirSync as eR,rmdirSync as $N,rmSync as WN,unlinkSync as ZN}from"node:fs";import{dirname as YK,join as K5}from"node:path";function X0(){return new Date().toISOString()}function F5($){if(!$||!MZ($))return;try{ZN($)}catch{}}function QN($){let W=g8($);if(W)return{rootSessionId:W.rootSessionId,fileStem:`${W.agentId}__${W.teamTaskId}`};let Z=u4($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:Z.agentId};return{rootSessionId:$,fileStem:$}}class KJ{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return K5(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let W=this.sessionArtifactsDir($);if(!MZ(W))tR(W,{recursive:!0});return W}sessionMessagesPath($){return K5(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionCompactionPath($){return K5(this.sessionArtifactsDir($),`${$}.compaction.json`)}sessionManifestPath($,W=!1){let Z=W?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return K5(Z,`${$}.json`)}removeSessionDirIfEmpty($){let W=this.sessionArtifactsDir($),Z=this.ensureSessionsDir();while(W.startsWith(Z)&&W!==Z){if(!MZ(W)){W=YK(W);continue}try{if(eR(W).length>0)break;$N(W)}catch{break}W=YK(W)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!MZ($))return;try{WN($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,W,Z){let{rootSessionId:Q,fileStem:J}=QN($),j=this.sessionArtifactsDir(Q);return{messagesPath:K5(j,`${J}.messages.json`)}}}import{resolveDocumentsExtensionPath as JN}from"@cline/shared/storage";O0();function VK($,W,Z,Q,J){if(Z)cW($.telemetry,{ulid:W,apiProvider:$.providerId,...J});else vW($.telemetry,{ulid:W,apiProvider:$.providerId,...J});jN($.telemetry,{workspacePath:Q})}function jN($,W){let Z=JN("Hooks"),Q=S$(W.workspacePath),J=new Map;for(let j of Q){let X=j.hookEventName??"unknown",Y=J.get(X)??{global:0,workspace:0};if(j.path===Z||j.path.startsWith(`${Z}/`))Y.global+=1;else Y.workspace+=1;J.set(X,Y)}for(let[j,X]of J.entries())oW($,j,X.global,X.workspace)}function BK($,W){for(let Z of W.mentions)nW($,Z,W.matchedFiles.includes(Z)?1:0,"file",!W.matchedFiles.includes(Z));for(let Z of W.matchedFiles)rW($,"file",Z.length);for(let Z of W.ignoredMentions)iW($,"file","not_found",Z)}var H_={};E(H_,{ProviderSettingsManager:()=>Y1});import{chmodSync as K_,existsSync as zY,mkdirSync as lm,readFileSync as pm,renameSync as rm,rmSync as im,writeFileSync as nm}from"node:fs";import{basename as F_,dirname as qY}from"node:path";import{resolveProviderSettingsPath as am}from"@cline/shared/storage";var q={};E(q,{writeHubDiscovery:()=>eZ,writeGlobalSettings:()=>q1,withHubStartupLock:()=>$Q,verifyHubConnection:()=>N1,updateMcpSettingsFileSync:()=>U1,updateMcpSettingsFile:()=>H6,updateMcpServerOAuthStateAsync:()=>S5,updateMcpServerOAuthState:()=>m2,updateLocalProvider:()=>B7,uninstallPlugin:()=>MW,uninstallMarketplaceSkill:()=>lQ,uninstallMarketplacePlugin:()=>pQ,uninstallMarketplaceMcpServerFromSettings:()=>uQ,uninstallMarketplaceEntry:()=>cX,truncateNotificationBody:()=>AW,truncateCommandOutput:()=>H2,toggleDisabledTool:()=>C9,toTeamProgressLifecycleEvent:()=>R6,toProviderConfig:()=>t0,toHubStatusUrl:()=>Qj,toHubHealthUrl:()=>WQ,toHookConfigFileName:()=>Q5,syncPluginMcpServersToSettings:()=>zW,summarizeUsageFromMessages:()=>v8,stopLocalHubServerGracefully:()=>Uj,startLocalOAuthServer:()=>H1,startHubWebSocketServer:()=>Y8,startHubServer:()=>gf,startClineDeviceAuth:()=>y7,splitCoreSessionConfig:()=>g5,spawnDetachedHubServerWithRetry:()=>D6,spawnDetachedHubServer:()=>Bj,setTelemetryOptOutGlobally:()=>dB,setSdkLogger:()=>N7,setMcpServerDisabled:()=>x2,setDisabledTools:()=>H3,setDisabledPlugin:()=>sB,setCompactionStrategyGlobally:()=>iB,setAutoUpdateEnabledGlobally:()=>pB,sendHubCommand:()=>SU,sdkDebug:()=>Z0,saveProviderOAuthCredentials:()=>J2,saveLocalProviderSettings:()=>ZY,saveLocalProviderOAuthCredentials:()=>XY,sanitizeSessionToken:()=>N2,safeParseSettings:()=>TZ,safeCreateProviderConfig:()=>BJ,runSubprocessEvent:()=>b6,runHook:()=>h6,reviveTeamStateDates:()=>g9,restartLocalHubIfIdleAfterStartupTimeout:()=>XQ,resolveWorkspaceHubOwnerContext:()=>jA,resolveWorkflowsConfigSearchPaths:()=>M5,resolveSkillsConfigSearchPaths:()=>z5,resolveSharedHubOwnerContext:()=>c0,resolveSessionBackend:()=>Ij,resolveRulesConfigSearchPaths:()=>q5,resolveProviderConfig:()=>Y5,resolveProviderApiKeyFromSettings:()=>v7,resolveProductionHubOwnerContext:()=>J1,resolvePluginSkillDirectoriesFromPaths:()=>a1,resolvePluginConfigSearchPaths:()=>e4,resolveMcpServerRegistrations:()=>e0,resolveMarketplaceMcpServerName:()=>NW,resolveLocalClineAuthToken:()=>VY,resolveHubUrl:()=>rj,resolveHubOwnerContext:()=>W$,resolveHubEndpointOptions:()=>Q1,resolveHubBuildId:()=>tZ,resolveHooksConfigSearchPaths:()=>W5,resolveDisabledToolNames:()=>M1,resolveDisabledPluginPaths:()=>h4,resolveDefaultMcpSettingsPath:()=>Q0,resolveDefaultHubPort:()=>f6,resolveDefaultHubPathname:()=>Vj,resolveDefaultHubHost:()=>Yj,resolveCoreSelectedToolIds:()=>v9,resolveCoreDistinctId:()=>u0,resolveCompatibleLocalHubUrl:()=>s5,resolveClineDir:()=>WA,resolveClineDataDir:()=>i2,resolveAndLoadAgentPlugins:()=>i8,resolveAgentPluginPaths:()=>n1,requestHubShutdown:()=>o5,requestDesktopToolApproval:()=>RX,removePluginMcpServersFromSettings:()=>qW,rememberRecoverableLocalHubUrl:()=>d$,registerRemoteConfigSessionBlobUpload:()=>yQ,registerMcpServersFromSettingsFile:()=>v2,registerDisposable:()=>vm,refreshProviderModelsFromSource:()=>QY,refreshOpenAICodexToken:()=>J9,refreshOcaToken:()=>V9,refreshClineToken:()=>Z9,readSessionCheckpointHistory:()=>Z8,readRemoteConfigSessionBlobUploadMetadata:()=>fX,readHubDiscovery:()=>_0,readGlobalSettings:()=>R0,readCompactionStrategyGlobally:()=>rB,readBearerToken:()=>NQ,projectSessionCompactionState:()=>j2,probeHubServer:()=>Z$,probeHubConnection:()=>PU,prewarmFileIndex:()=>z9,prewarmDetachedHubServer:()=>QQ,prepareRemoteConfigCoreIntegration:()=>_X,parseWorkflowConfigFromMarkdown:()=>T5,parseUserCommandEnvelope:()=>mm,parseSkillConfigFromMarkdown:()=>L5,parseSettings:()=>OZ,parseSessionCompactionState:()=>G1,parseRuleConfigFromMarkdown:()=>O5,parsePluginSource:()=>$7,parseMcpInstallArgs:()=>TW,parseHookEventPayload:()=>y6,parseConfiguredAgentConfig:()=>WW,normalizeWorkspacePath:()=>o1,normalizeUserInput:()=>gm,normalizeSdkError:()=>xm,normalizeRuntimeCapabilities:()=>w0,normalizeProviderId:()=>e8,normalizeOAuthProvider:()=>JY,normalizeHubWebSocketUrl:()=>l$,noopBasicLogger:()=>Im,migrateLegacyProviderSettings:()=>SW,mergeRulesForSystemPrompt:()=>V6,mergeAgentHooks:()=>y2,marketplaceEntryKey:()=>vX,markLocalProviderEnabled:()=>eX,makeTeamTaskSubSessionId:()=>c4,makeSubSessionId:()=>x8,loginOpenAICodex:()=>W4,loginOcaOAuth:()=>j4,loginLocalProvider:()=>jY,loginClineOAuth:()=>e6,loginAndSaveProviderOAuthCredentials:()=>Y4,loginAndSaveLocalProviderOAuthCredentials:()=>YY,loadOpenTelemetryAdapter:()=>Bm,loadMcpSettingsFile:()=>I2,loadLlmsConfigFromFile:()=>LY,loadConfiguredAgentConfigs:()=>z6,loadAgentPluginsFromPathsWithDiagnostics:()=>C2,loadAgentPluginsFromPaths:()=>p9,loadAgentPluginFromPath:()=>s4,listSessionHistoryFromBackend:()=>eJ,listPluginToolsWithDiagnostics:()=>pZ,listPluginTools:()=>h5,listMcpServerOAuthStatuses:()=>b5,listLocalProviders:()=>$Y,listHookConfigFiles:()=>S$,isToolDisabledGlobally:()=>nB,isTelemetryOptedOutGlobally:()=>w9,isSessionNotFoundError:()=>$$,isRuleEnabled:()=>hZ,isPluginDisabledGlobally:()=>oB,isOfficialPluginSlug:()=>eQ,isOAuthProvider:()=>Q2,isMarketplaceSkillInstalled:()=>dQ,isLocalHubOrigin:()=>UX,isLocalHubHostName:()=>EQ,isHubReconnectableTransportError:()=>Fj,isHubCommandTimeoutError:()=>jQ,isDiscoveryFilePresent:()=>QA,isClinePassLimitMessage:()=>qm,isClinePassLimitError:()=>zm,isClineOrgIndividualInferenceSubscriptionMessage:()=>Tm,isClineOrgIndividualInferenceSubscriptionError:()=>Om,isClineNotSubscribedMessage:()=>Lm,isClineNotSubscribedError:()=>_m,isClineAccountActionRequest:()=>RZ,isBuiltInProviderId:()=>YJ,isAutoUpdateEnabledGlobally:()=>lB,installPlugin:()=>iX,installMcpServer:()=>NX,identifyAccount:()=>B1,hashSecret:()=>M0,hasMcpSettingsFile:()=>t1,getValidOpenAICodexCredentials:()=>Z4,getValidOcaCredentials:()=>X4,getValidClineCredentials:()=>$4,getProviderOAuthCredentialsFromSettings:()=>V4,getProviderConfigFields:()=>BY,getProviderConfig:()=>BZ,getProviderAuthStorageId:()=>m7,getProviderAuthHandler:()=>G0,getPersistedProviderApiKey:()=>O8,getMcpServerOAuthState:()=>g2,getMarketplaceSkillCandidates:()=>EW,getLocalProviderModels:()=>WY,getLiveModelsCatalog:()=>t8,getGlobalMarketplaceSkillPaths:()=>wW,getFileIndex:()=>d1,getCurrentContextSize:()=>b3,getCoreHeadlessToolNames:()=>v4,getCoreDefaultEnabledToolIds:()=>m9,getCoreBuiltinToolCatalog:()=>M2,getCoreAcpToolNames:()=>c9,getClinePassSubscriptionUrl:()=>Dm,getClineOrgIndividualInferenceSubscriptionMessage:()=>fm,getClineNotSubscribedMessage:()=>Um,getClineDefaultSystemPrompt:()=>Mm,generateWorkspaceInfoWithDiagnostics:()=>H5,generateWorkspaceInfo:()=>Z6,formatRulesForSystemPrompt:()=>Y6,formatProviderOAuthApiKey:()=>c7,formatDisplayUserInput:()=>km,findInstalledGlobalMarketplaceSkillName:()=>CW,findCheckpointForRun:()=>P6,filterExtensionToolRegistrations:()=>S9,filterDisabledTools:()=>p1,filterDisabledPluginPaths:()=>P9,fetchClineRecommendedModels:()=>DY,extractClinePassLimitMessage:()=>Am,executeClineAccountAction:()=>NZ,ensureHubWebSocketServer:()=>wQ,ensureHubServer:()=>mf,ensureDetachedHubServer:()=>GA,ensureCustomProvidersLoaded:()=>X7,ensureCompatibleLocalHubUrl:()=>o2,enrichPromptWithMentions:()=>C8,emptyWorkspaceManifest:()=>bm,emptyStoredProviderSettings:()=>k$,discoverPluginModulePaths:()=>$5,disablePluginMcpServersInSettings:()=>PX,deriveSubsessionStatus:()=>d4,deleteLocalProvider:()=>H7,defineLlmsConfig:()=>_Y,createWorkflowsConfigDefinition:()=>E5,createUserInstructionConfigService:()=>I$,createToolPoliciesWithPreset:()=>M9,createTool:()=>Sm,createTeamName:()=>IQ,createSubprocessHooks:()=>DQ,createSpawnAgentTool:()=>E$,createSkillsConfigDefinition:()=>R5,createShellTool:()=>w4,createShellExecutor:()=>G2,createSessionHost:()=>w6,createSessionCompactionState:()=>T8,createRuntimeHost:()=>w6,createRulesConfigDefinition:()=>N5,createRemoteConfigSessionMessagesArtifactUploader:()=>DX,createProviderConfig:()=>VJ,createOpenTelemetryTelemetryService:()=>KW,createOAuthClientCallbacks:()=>J6,createMcpTools:()=>A6,createLocalHubScheduleRuntimeHandlers:()=>CQ,createLlmsSdk:()=>TY,createInitialAccumulatedUsage:()=>z0,createInMemoryHubOwnerContext:()=>ZA,createHubServerUrl:()=>f1,createHubAuthToken:()=>sZ,createHookConfigFileHooks:()=>J5,createHookConfigFileExtension:()=>s8,createHookAuditHooks:()=>o8,createEditorExecutor:()=>U2,createDisabledMcpToolPolicy:()=>y5,createDisabledMcpToolPolicies:()=>lZ,createDelegatedAgentConfigProvider:()=>R$,createDelegatedAgent:()=>N$,createDefaultToolsWithPreset:()=>R9,createDefaultTools:()=>T$,createDefaultShellExecutor:()=>b4,createDefaultMcpServerClientFactory:()=>K6,createDefaultExecutors:()=>P8,createCoreSettingsService:()=>u2,createCoreSessionSnapshot:()=>E1,createContributionRegistry:()=>Pm,createContextCompactionPrepareTurn:()=>D4,createConfiguredTelemetryService:()=>Y$,createConfiguredTelemetryHandle:()=>i$,createConfiguredAgentTools:()=>q6,createCompactionStateAwarePrepareTurn:()=>_4,createClineTelemetryServiceMetadata:()=>Cm,createClineTelemetryServiceConfig:()=>wm,createCheckpointComparePlan:()=>FQ,createBuiltinTools:()=>R2,createApplyPatchExecutor:()=>A2,createAgentTeamsTools:()=>q2,createAgentRuntime:()=>dm,createAgentHooksExtension:()=>n8,connectToHub:()=>OQ,computePatchChanges:()=>E8,completeClineDeviceAuth:()=>h7,compareCheckpointToWorkspace:()=>VW,collectPluginMcpOAuthCandidates:()=>W7,clearPrivateModelsCatalogCache:()=>jJ,clearLiveModelsCatalogCache:()=>JJ,clearHubDiscovery:()=>v0,captureWorkspacePathResolved:()=>dY,captureWorkspaceInitialized:()=>gW,captureWorkspaceInitError:()=>mW,captureToolUsage:()=>A8,captureTokenUsage:()=>uW,captureTaskRestarted:()=>cW,captureTaskCreated:()=>vW,captureTaskCompleted:()=>o6,captureSubagentExecution:()=>t6,captureSkillUsed:()=>lW,captureSdkError:()=>Em,captureProviderConfigured:()=>lY,captureProviderApiError:()=>s6,captureModeSwitch:()=>dW,captureMentionUsed:()=>rW,captureMentionSearchResults:()=>nW,captureMentionFailed:()=>iW,captureHookDiscovery:()=>oW,captureExtensionActivated:()=>uY,captureDiffEditFailure:()=>pW,captureConversationTurnEvent:()=>F8,captureCompactionSkipped:()=>tW,captureCompactionExecuted:()=>sW,captureAuthSucceeded:()=>x1,captureAuthStarted:()=>I1,captureAuthLoggedOut:()=>A$,captureAuthFailed:()=>g1,captureAgentUnexpectedReasoningTokens:()=>cY,captureAgentTeamCreated:()=>aW,captureAgentCreated:()=>U$,buildWorkspaceMetadata:()=>G5,buildTeamProgressSummary:()=>M6,buildSdkErrorProperties:()=>Rm,buildRemoteConfigSessionBlobUploadMetadata:()=>SQ,buildMcpInstallTransport:()=>xQ,buildDelegatedAgentConfig:()=>T2,buildConnectionUpdate:()=>_3,buildConfiguredAgentToolName:()=>ZW,buildConfiguredAgentToolDescriptors:()=>QW,buildCheckpointWorkspaceDiff:()=>AQ,bootstrapAgentTeams:()=>I8,authorizeMcpServerOAuth:()=>vZ,addLocalProvider:()=>tX,accumulateUsageTotals:()=>D0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>_5,UnifiedConfigFileWatcher:()=>k2,ToolPresets:()=>o0,TelemetryService:()=>x6,TelemetryLoggerSink:()=>GW,TEAM_TOOL_NAMES:()=>k8,SubprocessSandbox:()=>l8,StructuredCommandInputSchema:()=>V2,StoredProviderSettingsSchema:()=>W6,StoredProviderSettingsEntrySchema:()=>zZ,SqliteTeamStore:()=>V8,SqliteSessionStore:()=>C1,SessionVersioningService:()=>o$,SessionVersioningError:()=>l0,SessionSource:()=>A0,SessionNotFoundError:()=>e1,SapSettingsSchema:()=>DZ,SKILLS_CONFIG_DIRECTORY_NAME:()=>D5,SESSION_STATUSES:()=>l4,SESSION_NOT_FOUND_ERROR_CODE:()=>d2,SDK_ERROR_TELEMETRY_EVENT:()=>cm,RpcClineAccountService:()=>U5,RemoteRuntimeHost:()=>O6,ReasoningSettingsSchema:()=>FZ,RULES_CONFIG_DIRECTORY_NAME:()=>yZ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>bQ,ProviderSettingsSchema:()=>y$,ProviderSettingsManager:()=>Y1,ProviderProtocolSchema:()=>HZ,ProviderIdSchema:()=>B5,ProviderClientSchema:()=>GZ,PatchActionType:()=>F2,OpenTelemetryProvider:()=>g6,OcaSettingsSchema:()=>_Z,OPENAI_COMPATIBLE_PROVIDERS:()=>X5,NodeHubClient:()=>D1,NoOpFeatureFlagsProvider:()=>W8,NativeHubTransportAdapter:()=>LW,ModelCatalogSettingsSchema:()=>LZ,McpSettingsUpdateSkippedError:()=>B6,McpSettingsMutatorPurityError:()=>x$,McpSettingsLockTimeoutError:()=>g$,MAX_COMMAND_OUTPUT_CHARS:()=>v1,LocalRuntimeHost:()=>b1,Llms:()=>Hm,InMemoryWorkspaceManager:()=>Q6,InMemoryMcpManager:()=>c2,HubUIClient:()=>aj,HubTransportError:()=>h0,HubSessionClient:()=>nj,HubServerTransport:()=>v6,HubScheduleService:()=>I6,HubScheduleCommandService:()=>k6,HubRuntimeHost:()=>Q$,HubCommandError:()=>_6,HookEventPayloadSchema:()=>fQ,HookEventNameSchema:()=>UQ,HookConfigFileName:()=>a8,HOOK_CONFIG_FILE_EVENT_MAP:()=>Z5,HOOKS_CONFIG_DIRECTORY_NAME:()=>s9,GlobalSettingsSchema:()=>y4,GcpSettingsSchema:()=>UZ,FileTeamPersistenceStore:()=>F7,FeatureFlagsService:()=>$8,FeatureFlagDefaultValue:()=>hm,FEATURE_FLAGS:()=>ym,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>L7,DefaultToolNames:()=>T0,DefaultRuntimeBuilder:()=>d6,DefaultLlmsSdk:()=>yW,DEFAULT_MODELS_CATALOG_URL:()=>jZ,DEFAULT_HUB_PORT:()=>jj,DEFAULT_HUB_PATHNAME:()=>Xj,DEFAULT_HUB_HOST:()=>Jj,CoreSettingsService:()=>m$,CoreSessionService:()=>S1,ContributionRegistry:()=>Nm,CommandExitError:()=>c1,ClinePassLimitError:()=>Fm,ClineOrgIndividualInferenceSubscriptionError:()=>Km,ClineNotSubscribedError:()=>Gm,ClineCore:()=>BW,ClineAccountService:()=>A5,ChatViewStateSchema:()=>UY,ChatSummarySchema:()=>_7,ChatSessionStatusSchema:()=>U7,ChatSessionConfigSchema:()=>A7,ChatMessageSchema:()=>D7,ChatMessageRoleSchema:()=>f7,CORE_TELEMETRY_EVENTS:()=>v,CORE_BUILD_VERSION:()=>bW,BrowserWebSocketHubAdapter:()=>_W,BUILT_IN_PROVIDER_IDS:()=>XJ,BUILT_IN_PROVIDER:()=>V5,AzureSettingsSchema:()=>fZ,AwsSettingsSchema:()=>AZ,AuthSettingsSchema:()=>KZ,AgentTeamsRuntime:()=>e2,AgentTeam:()=>E6,Agent:()=>um,ALL_DEFAULT_TOOL_NAMES:()=>D$});R(q,I$0);import*as Hm from"@cline/llms";import{ClineNotSubscribedError as Gm,ClineOrgIndividualInferenceSubscriptionError as Km,ClinePassLimitError as Fm,extractClinePassLimitMessage as Am,getClineNotSubscribedMessage as Um,getClineOrgIndividualInferenceSubscriptionMessage as fm,getClinePassSubscriptionUrl as Dm,isClineNotSubscribedError as _m,isClineNotSubscribedMessage as Lm,isClineOrgIndividualInferenceSubscriptionError as Om,isClineOrgIndividualInferenceSubscriptionMessage as Tm,isClinePassLimitError as zm,isClinePassLimitMessage as qm}from"@cline/llms";import{buildClineSystemPrompt as Mm,buildSdkErrorProperties as Rm,ContributionRegistry as Nm,captureSdkError as Em,createClineTelemetryServiceConfig as wm,createClineTelemetryServiceMetadata as Cm,createContributionRegistry as Pm,createTool as Sm,emptyWorkspaceManifest as bm,FEATURE_FLAGS as ym,FeatureFlagDefaultValue as hm,formatDisplayUserInput as km,noopBasicLogger as Im,normalizeSdkError as xm,normalizeUserInput as gm,parseUserCommandEnvelope as mm,registerDisposable as vm,SDK_ERROR_TELEMETRY_EVENT as cm}from"@cline/shared";import"@cline/shared/storage";var GK={};E(GK,{isClineAccountActionRequest:()=>RZ,executeClineAccountAction:()=>NZ,RpcClineAccountService:()=>U5,ClineAccountService:()=>A5});function XN($){if(typeof $!=="object"||$===null||!("error"in $))return;let W=$.error;return typeof W==="string"&&W.trim()?W:void 0}function HK($,W,Z){let Q=XN(Z);if(Q)return Q;let J=W.trim();if(J){let j=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${j}`}return`Cline account request failed with status ${$}`}class A5{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let W=$.apiBaseUrl.trim();if(!W)throw Error("apiBaseUrl is required");this.apiBaseUrl=W,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let W=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(W)}/balance`)}async fetchUsageTransactions($){let W=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(W)}/usages`)).items??[]}async fetchPaymentTransactions($){let W=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(W)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let W=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)W.searchParams.set("type",$.type);return this.request(`${W.pathname}${W.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let W=$.trim();if(!W)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(W)}`)}async fetchOrganizationBalance($){let W=$.trim();if(!W)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(W)}/balance`)}async fetchOrganizationUsageTransactions($){let W=$.organizationId.trim();if(!W)throw Error("organizationId is required");let Z=await this.resolveOrganizationMemberId(W,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(W)}/members/${encodeURIComponent(Z)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let W=$?.trim();if(W)return W;let Q=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(Q)return Q;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,W){let Z=W?.trim();if(Z)return Z;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let X=(await this.fetchUserOrganizations()).find((Y)=>Y.organizationId===$)?.memberId;if(!X?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return X}async request($,W){let Z=(await this.getAuthTokenFn())?.trim();if(!Z)throw Error("No Cline account auth token found");let Q=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,j=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let X=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:W?.method??"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json",...Q??{}},body:W?.body!==void 0?JSON.stringify(W.body):void 0,signal:J.signal});if(X.status===204||W?.expectNoContent){if(!X.ok)throw Error(`Cline account request failed with status ${X.status}`);return}let Y=await X.text(),V;if(Y.trim())try{V=JSON.parse(Y)}catch{if(!X.ok)throw Error(HK(X.status,Y,void 0));throw Error("Cline account response was not valid JSON")}if(!X.ok)throw Error(HK(X.status,Y,V));if(typeof V==="object"&&V!==null){let B=V;if(typeof B.success==="boolean"){if(!B.success)throw Error(B.error||"Cline account request failed");return B.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(j)}}}function RZ($){return $.action==="clineAccount"}async function NZ($,W){switch($.operation){case"fetchMe":return W.fetchMe();case"fetchBalance":return W.fetchBalance($.userId);case"fetchUsageTransactions":return W.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return W.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return W.fetchUserOrganizations();case"fetchOrganizationBalance":return W.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return W.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await W.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return W.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class U5{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let W=$.trim();if(!W)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:W})}async fetchOrganizationUsageTransactions($){let W=$.organizationId.trim();if(!W)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:W,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var KK={};E(KK,{createOAuthClientCallbacks:()=>J6});function J6($){return{onAuth:({url:W,instructions:Z})=>{if($.onOutput?.(Z??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(W)).catch((Q)=>{$.onOpenUrlError?.({url:W,error:Q})})}catch(Q){$.onOpenUrlError?.({url:W,error:Q})}$.onOutput?.(W)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var TU={};E(TU,{ClineCore:()=>BW});function FK($){if($===!0)return{};if(!$)return;return $}function AK($){if($==="user")return"global";return $}class FJ{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let W=this.getService().ingestEvent($);return{event:W.event,duplicate:W.duplicate,matchedSpecIds:W.matchedSpecs.map((Z)=>Z.specId),queuedRuns:W.queuedRuns,suppressions:W.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function UK($){let{host:W}=$;return{async startSession(Z){let Q=(Z.cwd?.trim()||Z.workspaceRoot).trim(),J=await W.startSession({source:Z.source?.trim()||A0.CLI,interactive:!1,config:{providerId:e8(Z.provider),modelId:Z.model,apiKey:Z.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:BN(Z),maxIterations:Z.maxIterations,enableTools:Z.enableTools!==!1,enableSpawnAgent:Z.enableSpawn!==!1,enableAgentTeams:Z.enableTeams!==!1,disableMcpSettingsTools:Z.disableMcpSettingsTools,missionLogIntervalSteps:Z.missionStepInterval,missionLogIntervalMs:Z.missionTimeIntervalMs},toolPolicies:Z.toolPolicies??{"*":{autoApprove:Z.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Z.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Z,Q){let J=await W.runTurn({sessionId:Z,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((j)=>j.content),delivery:Q.delivery});if(!J)throw Error("ClineCore automation runtime returned no result");return{result:VN(J)}},async abortSession(Z){return await W.abort(Z,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Z){return await W.stopSession(Z),{applied:!0}}}}function EZ($){let W=YN($.automationService,$.automation),Z=$.context?.client??($.clientName?{name:$.clientName}:void 0),Q=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),J=$.context?.logger??$.logger,j=$.context?.telemetry??$.telemetry;if(!W&&!Z&&!Q&&!J&&!j)return $.context;return{...$.context??{},...Z?{client:Z}:{},...Q?{user:Q}:{},...J?{logger:J}:{},...j?{telemetry:j}:{},...W?{automation:W}:{}}}function YN($,W){if(!$)return;return{ingestEvent:(Z)=>{W.ingestEvent(Z)}}}function VN($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((W)=>({name:W.name,input:W.input,output:W.output,error:W.error,durationMs:W.durationMs}))}}function BN($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var LF={};E(LF,{createCoreSettingsService:()=>u2,CoreSettingsService:()=>m$});import{existsSync as I5,readFileSync as nE}from"node:fs";import{basename as PJ,dirname as KF,extname as aE,isAbsolute as UF,join as oE,relative as fF,resolve as FF}from"node:path";var PK={};E(PK,{resolveWorkflowsConfigSearchPaths:()=>M5,resolveSkillsConfigSearchPaths:()=>z5,resolveRulesConfigSearchPaths:()=>q5,parseWorkflowConfigFromMarkdown:()=>T5,parseSkillConfigFromMarkdown:()=>L5,parseRuleConfigFromMarkdown:()=>O5,createWorkflowsConfigDefinition:()=>E5,createUserInstructionConfigService:()=>I$,createSkillsConfigDefinition:()=>R5,createRulesConfigDefinition:()=>N5,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>_5,UnifiedConfigFileWatcher:()=>k2,SKILLS_CONFIG_DIRECTORY_NAME:()=>D5,RULES_CONFIG_DIRECTORY_NAME:()=>yZ});import{createHash as HN}from"node:crypto";import{watch as GN}from"node:fs";import{readdir as KN,readFile as FN}from"node:fs/promises";import{join as AN}from"node:path";function UN($){return HN("sha1").update($).digest("hex")}function _K($){return Boolean($&&typeof $==="object"&&"code"in $)}function fK($){return _K($)&&$.code==="ENOENT"}function DK($){return _K($)&&($.code==="EACCES"||$.code==="EPERM")}class k2{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,W){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=W?.debounceMs??75,this.emitParseErrors=W?.emitParseErrors??!1;for(let Z of $){if(this.definitionsByType.has(Z.type))throw Error(`Duplicate unified config definition type '${Z.type}'.`);this.definitionsByType.set(Z.type,Z),this.recordsByType.set(Z.type,new Map),this.discoveredDirectoriesByType.set(Z.type,new Set);for(let Q of Z.directories){let J=this.baseTypesByDirectory.get(Q);if(J)J.add(Z.type);else this.baseTypesByDirectory.set(Q,new Set([Z.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let W=this.definitionsByType.get($);if(!W)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(W)})}getSnapshot($){let W=this.recordsByType.get($);return new Map([...W?.entries()??[]].map(([Z,Q])=>[Z,{...Q}]))}getAllSnapshots(){let $=new Map;for(let[W,Z]of this.recordsByType.entries())$.set(W,new Map([...Z.entries()].map(([Q,J])=>[Q,{...J}])));return $}emit($){for(let W of this.listeners)W($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[W,Z]of this.watchersByDirectory.entries()){if($.has(W))continue;Z.close(),this.watchersByDirectory.delete(W)}this.watchedTypesByDirectory=$;for(let W of $.keys()){if(this.watchersByDirectory.has(W))continue;try{let Z=GN(W,()=>{let Q=this.watchedTypesByDirectory.get(W);if(!Q)return;for(let J of Q)this.pendingTypes.add(J);this.scheduleFlush()});this.watchersByDirectory.set(W,Z),Z.on("error",(Q)=>{let J=this.watchedTypesByDirectory.get(W);if(!J)return;for(let j of J)this.emit({kind:"error",type:j,error:Q,filePath:W})})}catch(Z){if(!fK(Z)&&!DK(Z)){let Q=$.get(W);if(!Q)continue;for(let J of Q)this.emit({kind:"error",type:J,error:Z,filePath:W})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let W of $){let Z=this.definitionsByType.get(W);if(!Z)continue;await this.refreshTypeInternal(Z)}})},this.debounceMs)}async refreshTypeInternal($){let{records:W,discoveredDirectories:Z}=await this.loadDefinition($),Q=this.recordsByType.get($.type)??new Map;for(let[J,j]of Q.entries()){if(W.has(J))continue;this.emit({kind:"remove",type:$.type,id:J,filePath:j.filePath})}for(let[J,j]of W.entries()){let X=Q.get(J);if(X&&X.filePath===j.filePath&&X.fingerprint===j.fingerprint)continue;this.emit({kind:"upsert",record:{type:j.type,id:J,item:j.item,filePath:j.filePath}})}if(this.recordsByType.set($.type,W),this.discoveredDirectoriesByType.set($.type,Z),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let W=new Map,Z=new Set;for(let Q of $.directories){Z.add(Q);let J=$.discoverFiles?await $.discoverFiles(Q):await this.readDirectoryFileCandidates(Q);for(let j of J){let{fileName:X,filePath:Y}=j;if(Z.add(j.directoryPath),$.includeFile&&!$.includeFile(X,Y))continue;try{let V=await FN(Y,"utf8"),B={type:$.type,directoryPath:j.directoryPath,fileName:X,filePath:Y,content:V},H=$.parseFile(B),G=$.resolveId(H,B).trim();if(!G)continue;W.set(G,{type:$.type,id:G,item:H,filePath:Y,fingerprint:UN(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:Y})}}}return{records:W,discoveredDirectories:Z}}buildDesiredTypesByDirectory(){let $=new Map;for(let[W,Z]of this.baseTypesByDirectory.entries())$.set(W,new Set(Z));for(let[W,Z]of this.discoveredDirectoriesByType.entries())for(let Q of Z){let J=$.get(Q);if(J)J.add(W);else $.set(Q,new Set([W]))}return $}async readDirectoryFileCandidates($){try{return(await KN($,{withFileTypes:!0})).filter((Z)=>Z.isFile()).map((Z)=>({directoryPath:$,fileName:Z.name,filePath:AN($,Z.name)})).sort((Z,Q)=>Z.fileName.localeCompare(Q.fileName))}catch(W){if(fK(W)||DK(W))return[];throw W}}}import{readdir as UJ,readFile as fN,stat as AJ}from"node:fs/promises";import{basename as s1,dirname as DN,extname as CZ,join as m0,resolve as f5}from"node:path";import{AGENTS_RULES_FILE_NAME as LK,RULES_CONFIG_DIRECTORY_NAME as yZ,resolveGlobalAgentsRulesPath as _N,resolveRulesConfigSearchPaths as LN,resolveSkillsConfigSearchPaths as ON,resolveWorkflowsConfigSearchPaths as TN,SKILLS_CONFIG_DIRECTORY_NAME as D5,WORKFLOWS_CONFIG_DIRECTORY_NAME as _5}from"@cline/shared/storage";import zN from"yaml";var wZ="SKILL.md",qN="managed.json",MN=new Set([".md",".markdown",".txt"]);function fJ($){return $.trim().toLowerCase()}function j6($){let W=$;return W?.code==="ENOENT"||W?.code==="EACCES"||W?.code==="EPERM"||W?.code==="ELOOP"}function PZ($){return MN.has(CZ($).toLowerCase())}function OK($){let W=[],Z=new Set;for(let Q of $){let J=f5(Q);if(Z.has(J))continue;Z.add(J),W.push(Q)}return W}function RN($){let W=[...$?.directories??z5($?.workspacePath)];if($?.pluginSkillDirectories)W.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)W.push(...PG({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return OK(W)}async function DJ($){try{let W=await UJ($,{withFileTypes:!0}),Z=[];for(let Q of W){if(!Q.isDirectory())continue;let J=m0($,Q.name),j=m0(J,qN);try{let X=await fN(j,"utf8"),Y=JSON.parse(X);if(Y&&typeof Y==="object")Z.push(J)}catch(X){if(j6(X))continue;if(X?.name==="SyntaxError")continue;throw X}}return Z.sort((Q,J)=>Q.localeCompare(J))}catch(W){if(j6(W))return[];throw W}}function _J($){let W=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Z=$.match(W);if(!Z)return{data:{},body:$,hadFrontmatter:!1};let[,Q,J]=Z;try{let j=zN.parse(Q);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:J,hadFrontmatter:!0}}catch(j){let X=j instanceof Error?j.message:String(j);return{data:{},body:$,hadFrontmatter:!0,parseError:X}}}function SZ($,W,Z){if($===void 0||$===null){if(Z)throw Error(`Missing required frontmatter field '${W}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${W}' must be a string.`);let Q=$.trim();if(!Q&&Z)throw Error(`Frontmatter field '${W}' cannot be empty.`);return Q||void 0}function X6($,W){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${W}' must be a boolean.`);return $}function NN($,W){if(s1($.filePath).toLowerCase()!==LK.toLowerCase())return s1($.filePath,CZ($.filePath));if(W&&f5($.filePath)===f5(W,LK))return"Workspace AGENTS.md";if(f5($.filePath)===f5(_N()))return"Global AGENTS.md";return s1($.filePath,CZ($.filePath))}function L5($,W){let{data:Z,body:Q,parseError:J}=_J($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let j=Q.trim();if(!j)throw Error("Missing instructions body in skill file.");let Y=SZ(Z.name,"name",!1)??W.trim();if(!Y)throw Error("Missing skill name.");return{name:Y,description:SZ(Z.description,"description",!1),disabled:X6(Z.disabled,"disabled")??(X6(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function O5($,W){let{data:Z,body:Q,parseError:J}=_J($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let j=Q.trim();if(!j)throw Error("Missing instructions body in rule file.");let X=SZ(Z.name,"name",!1)??W.trim();if(!X)throw Error("Missing rule name.");return{name:X,disabled:X6(Z.disabled,"disabled")??(X6(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function T5($,W){let{data:Z,body:Q,parseError:J}=_J($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let j=Q.trim();if(!j)throw Error("Missing instructions body in workflow file.");let X=SZ(Z.name,"name",!1)??W.trim();if(!X)throw Error("Missing workflow name.");return{name:X,disabled:X6(Z.disabled,"disabled")??(X6(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function z5($){return ON($)}function q5($){return LN($)}function M5($){return TN($)}async function TK($){if(s1($)===".cline"){let W=await DJ($);return(await Promise.all(W.map((Q)=>TK(m0(Q,D5))))).flat()}try{let W=await UJ($,{withFileTypes:!0}),Z=[];for(let Q of W){if(Q.isFile()&&Q.name===wZ){Z.push({directoryPath:$,fileName:Q.name,filePath:m0($,Q.name)});continue}let J=m0($,Q.name);if(Q.isDirectory()||Q.isSymbolicLink()&&await AJ(J).then((X)=>X.isDirectory()).catch((X)=>{if(j6(X))return!1;throw X}))Z.push({directoryPath:J,fileName:wZ,filePath:m0(J,wZ)})}return Z}catch(W){if(j6(W))return[];throw W}}async function bZ($){if(s1($)===".cline"){let W=await DJ($);return(await Promise.all(W.map((Q)=>bZ(m0(Q,"rules.md"))))).flat()}try{if((await AJ($)).isFile())return[{directoryPath:DN($),fileName:s1($),filePath:$}]}catch(W){if(!j6(W))throw W}try{let Z=(await UJ($,{withFileTypes:!0})).filter((J)=>J.isFile()&&PZ(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:m0($,J.name)})),Q=m0($,"AGENTS.md");try{if((await AJ(Q)).isFile()){if(!Z.some((X)=>X.fileName==="AGENTS.md"))Z.push({directoryPath:$,fileName:"AGENTS.md",filePath:Q})}}catch{}return Z}catch(W){if(j6(W))return[];throw W}}async function EN($){if(s1($)===".cline"){let W=await DJ($);return(await Promise.all(W.map((Q)=>bZ(m0(Q,_5))))).flat()}return bZ($)}function R5($){let W=RN($),Z=$?.workspacePath?m0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Z?OK([...W,Z]):W,discoverFiles:TK,includeFile:(Q)=>Q===wZ,parseFile:(Q)=>L5(Q.content,s1(Q.directoryPath)),resolveId:(Q)=>fJ(Q.name)}}function N5($){let W=$?.directories??q5($?.workspacePath),Z=$?.workspacePath?m0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Z?[...W,Z]:W,discoverFiles:bZ,includeFile:(Q,J)=>Q===".clinerules"||PZ(Q)||PZ(J),parseFile:(Q)=>O5(Q.content,NN(Q,$?.workspacePath)),resolveId:(Q)=>fJ(Q.name)}}function E5($){let W=$?.directories??M5($?.workspacePath),Z=$?.workspacePath?m0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Z?[...W,Z]:W,discoverFiles:EN,includeFile:(Q)=>PZ(Q),parseFile:(Q)=>T5(Q.content,s1(Q.filePath,CZ(Q.filePath))),resolveId:(Q)=>fJ(Q.name)}}function zK($){let W=[R5($?.skills),N5($?.rules),E5($?.workflows)];return new k2(W,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as qK}from"@cline/shared";function wN($,W){if($.description?.trim())return qK($.description,".");if(W==="workflow")return;return qK($.instructions,".")}function CN($){return $.disabled!==!0}function MK($,W){return[...$.getSnapshot(W).entries()].map(([Z,Q])=>({id:Z,record:Q})).filter(({record:Z})=>CN(Z.item)).map(({id:Z,record:Q})=>({id:Z,name:Q.item.name,instructions:Q.item.instructions,description:wN(Q.item,W),kind:W})).sort((Z,Q)=>Z.name.localeCompare(Q.name))}function w5($){let W=new Map;for(let Z of[...MK($,"workflow"),...MK($,"skill")])if(!W.has(Z.name))W.set(Z.name,Z);return[...W.values()].sort((Z,Q)=>Z.name.localeCompare(Q.name))}function RK($,W){if(!$.startsWith("/")||$.length<2)return $;let Z=$.match(/^\/(\S+)/);if(!Z)return $;let Q=Z[1];if(!Q)return $;let J=Q.length+1,j=$.slice(J),X=w5(W).find((Y)=>Y.name===Q);return X?`${X.instructions}${j}`:$}var EK={};E(EK,{mergeRulesForSystemPrompt:()=>V6,loadRulesForSystemPromptFromWatcher:()=>LJ,listEnabledRulesFromWatcher:()=>NK,isRuleEnabled:()=>hZ,formatRulesForSystemPrompt:()=>Y6});function hZ($){return $.disabled!==!0}function Y6($){if($.length===0)return"";return`
201
+ ${Q}`;return Z||Q}function oz($,W){let Z=W?.["*"]??{},Q=W?.[$]??{};return{...Z,...Q}.enabled!==!1}function sz($,W){return $.filter((Z)=>oz(Z.name,W))}function tz($,W){return i1(sz($,W))}function ez($){let W=$.filter((Z)=>Z!==void 0);if(W.length===0)return{};return{beforeRun:async(Z)=>{for(let Q of W){let J=await Q.beforeRun?.(Z);if(J?.stop)return J}return},afterRun:async(Z)=>{for(let Q of W)await Q.afterRun?.(Z)},beforeModel:async(Z)=>{let Q=Z.request,J;for(let j of W){let X=await j.beforeModel?.({...Z,request:Q});if(!X)continue;if(X.stop)return X;J={...J,...X,options:TH(J?.options,X.options)},Q={...Q,...X.messages?{messages:X.messages}:{},...X.tools?{tools:X.tools}:{},...X.options?{options:TH(Q.options,X.options)}:{}}}return J},afterModel:async(Z)=>{for(let Q of W){let J=await Q.afterModel?.(Z);if(J?.stop)return J}return},beforeTool:async(Z)=>{let Q=Z.input,J;for(let j of W){let X=await j.beforeTool?.({...Z,input:Q});if(!X)continue;if(X.stop||X.skip)return X;if(J={...J,...X},Object.hasOwn(X,"input"))Q=X.input}return J},afterTool:async(Z)=>{let Q=Z.result,J;for(let j of W){let X=await j.afterTool?.({...Z,result:Q});if(!X)continue;if(X.stop)return X;if(J={...J,...X},X.result)Q=X.result}return J},onEvent:async(Z)=>{for(let Q of W)await Q.onEvent?.(Z)}}}class N${config;agentId;parentAgentId;logger;telemetry;conversation;mistakeTracker;loopTracker;loopDetectionDisabled;messageBuilder;contributionRegistry;extensionsInitialized=!1;listeners=new Set;createAgentRuntimeImpl;activeRunId=null;running=!1;abortRequested=!1;abortReason;activeRuntime=null;activeRunPromise=null;eventAdapter=new q3;shutdownCalled=!1;currentRunToolCalls=[];currentRunUsage={inputTokens:0,outputTokens:0};toolStartedAt=new Map;toolInputs=new Map;currentTurnSuccessfulTools=0;currentTurnFailedTools=0;currentTurnFailureDetails=[];activeTrackerWork=Promise.resolve();trackerAbortInFlight=!1;constructor($,W={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=W.logger??$.logger,this.telemetry=W.telemetry??$.telemetry,this.createAgentRuntimeImpl=W.createAgentRuntimeImpl??pz,this.conversation=new _3($.initialMessages),this.messageBuilder=new U3(UH()),this.contributionRegistry=rz({extensions:$.extensions?[...$.extensions]:[],setupContext:{session:$.extensionContext?.session,client:$.extensionContext?.client,user:$.extensionContext?.user,workspaceInfo:$.extensionContext?.workspace,automation:$.extensionContext?.automation,logger:$.extensionContext?.logger??this.logger,telemetry:$.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let Z=$.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new z3({maxConsecutiveMistakes:Z,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(j)=>this.emitLegacyEvent(j),log:(j,X,Y)=>$q(this.logger,j,X,Y),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(j,X)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:j}]})}});let Q=$.execution?.loopDetection;this.loopDetectionDisabled=Q===!1;let J=Q===!1||Q===void 0?void 0:Q;this.loopTracker=new T3(J)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools($){if($.length===0)return;let W=new Set(this.config.tools.map((Q)=>Q.name)),Z=[...this.config.tools];for(let Q of $)if(!W.has(Q.name))Z.push(Q),W.add(Q.name);this.config={...this.config,tools:Z}}updateConnection($){let W=O2($),Z={...this.config};if(W.providerId!==void 0)Z.providerId=W.providerId;if(W.modelId!==void 0)Z.modelId=W.modelId;if(W.apiKey!==void 0)Z.apiKey=W.apiKey;if(W.baseUrl!==void 0)Z.baseUrl=W.baseUrl;if(W.headers!==void 0)Z.headers=W.headers;if(W.providerConfig!==void 0)Z.providerConfig=W.providerConfig;if(Object.hasOwn(W,"reasoningEffort"))Z.reasoningEffort=W.reasoningEffort??void 0;if(Object.hasOwn(W,"thinkingBudgetTokens"))Z.thinkingBudgetTokens=W.thinkingBudgetTokens??void 0;if(Object.hasOwn(W,"thinking")){if(Z.thinking=W.thinking??void 0,W.thinking===!1||W.thinking===null)Z.reasoningEffort=void 0,Z.thinkingBudgetTokens=void 0}this.config=Z}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.messageBuilder.resetConversationState(),this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let W=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=W,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(W)}async shutdown($,W){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run($,W,Z){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:W,userFiles:Z,isContinue:!1})}continue($,W,Z){return this.executeRun({userMessage:$,userImages:W,userFiles:Z,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let W of this.contributionRegistry.getRegisteredRules()){let Z=await nz(W);if(Z)$.push(Z)}return az(this.config.systemPrompt,$)}executeRun($){let W;return W=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===W)this.activeRunPromise=null}),this.activeRunPromise=W,W}async executeRunInternal($){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let W=new Date,Z=$.userMessage;if(Z!==void 0){let D=await Zq(Z,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:D})}let Q=await this.composeSystemPrompt(),J=XH(this.config,this.logger,this.telemetry),j=new Map;for(let D of this.contributionRegistry.getRegisteredTools())j.set(D.name,D);let X=tz([...j.values()],this.config.toolPolicies),Y=new Map;for(let D of X)Y.set(D.name,D);for(let D of this.config.tools)Y.set(D.name,D);let V=this.conversation.getConversationId(),B=zH(this.config),H=Array.from(Y.values()),G=y9(this.conversation.getMessages()),K=DH({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:J,logger:this.logger,telemetry:this.telemetry,tools:H,toolContextMetadata:{modelSupportsImages:B?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[GB]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(B,H),initialMessages:G,systemPrompt:Q}),F=this.createAgentRuntimeImpl(K);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let A=F.subscribe((D)=>{this.handleRuntimeEvent(D)}),f,U;try{if($.isContinue)f=await F.continue(void 0);else f=await F.run("")}catch(D){U=D instanceof Error?D:Error(String(D))}finally{A();try{await this.activeTrackerWork}catch(D){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:D})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(f&&f.messages.length>0){let D=h8(f.messages);this.conversation.replaceMessages(D)}let _=new Date;try{return this.buildLegacyResult({runResult:f,thrownError:U,startedAt:W,endedAt:_})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize({tolerateSetupErrors:this.config.hookErrorMode!=="throw"})}catch($){if(this.config.hookErrorMode==="throw")throw $;this.emitLegacyEvent({type:"error",error:$ instanceof Error?$:Error(String($)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let $=ez([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((W)=>W.hooks)]);return{...$,beforeModel:async(W)=>{let Z=await $.beforeModel?.(W);if(Z?.stop)return Z;let Q=Z?.messages??W.request.messages,J=await this.prepareMessagesForModelRequest(Q);return{...Z,messages:J}}}}createRuntimePrepareTurn($,W){let Z=this.config.prepareTurn;if(!Z)return;return async(Q)=>{let J=h8(Q.messages),j=await this.prepareProviderMessagesForApi(J),X=await Z({agentId:Q.agentId,conversationId:Q.conversationId??this.conversation.getConversationId(),parentAgentId:Q.parentAgentId??null,iteration:Q.iteration,messages:J,apiMessages:j,abortSignal:Q.signal??new AbortController().signal,systemPrompt:Q.systemPrompt??"",tools:W,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:Q.emitStatusNotice});if(!X)return;return{...X.messages?{messages:y9(X.messages)}:{},...X.systemPrompt!==void 0?{systemPrompt:X.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let W=await this.prepareProviderMessagesForApi(h9($));return y9(W)}async prepareProviderMessagesForApi($){let W=$,Z=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let Q of Z)W=await Q.build(W);return this.messageBuilder.buildForApi(W)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let W=this.toolStartedAt.get($.toolCall.toolCallId),Z=new Date,Q=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let J=$.message.content.find((V)=>V.type==="tool-result"),j=J?.type==="tool-result"&&J.isError===!0,X=j?iz(J?.type==="tool-result"?J.output:void 0):void 0,Y={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:Q,output:J?.type==="tool-result"?J.output:void 0,error:X,durationMs:W===void 0?0:Z.getTime()-W.getTime(),startedAt:W??Z,endedAt:Z};if(this.currentRunToolCalls.push(Y),j){if(this.currentTurnFailedTools+=1,X)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${X}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let W=this.currentTurnFailedTools,Z=this.currentTurnSuccessfulTools;if(W>0&&Z===0){let Q=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${W} tool call(s) failed${Q?`: ${Q}`:""}`})}else if(Z>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let W of this.eventAdapter.translate($))this.emitLegacyEvent(W)}syncConversationFromRuntimeMessage($,W){if($.length>0){this.conversation.replaceMessages(h8($));return}if(W.length===0)return;let Z=new Set(this.conversation.getMessages().map((J)=>J.id).filter((J)=>typeof J==="string")),Q=h8(W).filter((J)=>!J.id||!Z.has(J.id));if(Q.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...Q])}emitLegacyEvent($){for(let W of this.listeners)try{W($)}catch(Z){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Z})}}inspectLoopForToolCall($,W,Z){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let Q=this.loopTracker.inspect({name:$,input:W});if(Q.kind==="ok")return;if(Q.kind==="soft"){if(Q.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:Q.message}]});return}this.enqueueMistakeRecord({iteration:Z,reason:"tool_execution_failed",forceAtLimit:!0,details:Q.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let W=await this.mistakeTracker.record($);if(W.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:W.message}]}),this.activeRuntime?.abort(W.reason??W.message)})}buildLegacyResult($){let{runResult:W,thrownError:Z,startedAt:Q,endedAt:J}=$,j=J.getTime()-Q.getTime(),X=Z?"error":Wq(W),Y=(W?.status==="failed"?W.error?.message:void 0)||W?.outputText||"",V=W?{inputTokens:W.usage.inputTokens,outputTokens:W.usage.outputTokens,cacheReadTokens:W.usage.cacheReadTokens>0?W.usage.cacheReadTokens:void 0,cacheWriteTokens:W.usage.cacheWriteTokens>0?W.usage.cacheWriteTokens:void 0,totalCost:W.usage.totalCost}:this.currentRunUsage,B=W?h8(W.messages):this.conversation.getMessages(),H=zH(this.config);if(Z)throw Z;return{text:Y,usage:V,messages:B,toolCalls:this.currentRunToolCalls,iterations:W?.iterations??0,finishReason:X,model:{id:this.config.modelId,provider:this.config.providerId,info:H},startedAt:Q,endedAt:J,durationMs:j}}}function $q($,W,Z,Q){if(!$)return;if(W==="debug"){$.debug(Z,Q);return}if(W==="error"&&$.error){$.error(Z,Q);return}let J=W==="warn"?"warn":W==="error"?"error":"info";$.log(Z,{...Q,severity:J})}function Wq($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function Zq($,W,Z,Q){let{buildInitialUserContent:J}=await Promise.resolve().then(() => OH);return J($,W,Z,Q)}function zH($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let W=K3($);if(W?.[$.modelId])return W[$.modelId];return}import{buildClineSystemPrompt as qH}from"@cline/shared";function MH($,W){let Z=$.trim();if(W.providerId.toLowerCase()!=="cline")return Z;return qH({ide:W.clineIdeName?.trim()||"Terminal",workspaceRoot:W.cwd?.trim()||"/",providerId:W.providerId,rules:`# Team Teammate Role
202
+ ${Z}`,platform:W.clinePlatform,metadata:W.workspaceMetadata})}function NH($,W){let Z=$.trim();if(W.providerId.toLowerCase()!=="cline")return Z;return qH({ide:W.clineIdeName||"Terminal",workspaceRoot:W.cwd?.trim()||"/",providerId:W.providerId,overridePrompt:Z,metadata:W.workspaceMetadata,platform:W.clinePlatform})}function R$($){let W={...$};return{getRuntimeConfig:()=>W,getConnectionConfig:()=>({providerId:W.providerId,modelId:W.modelId,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking,reasoningEffort:W.reasoningEffort,thinkingBudgetTokens:W.thinkingBudgetTokens,maxTokensPerTurn:W.maxTokensPerTurn}),updateConnectionDefaults:(Z)=>{W={...W,...Z}}}}function T2($){let W=$.configProvider.getRuntimeConfig(),Z=$.kind==="teammate"?MH($.prompt,W):NH($.prompt,W);return{...$.configProvider.getConnectionConfig(),systemPrompt:Z,tools:$.tools,maxIterations:$.maxIterations??W.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:W.hooks,extensions:W.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:W.logger,role:$.role}}function E$($){let W=T2($),Z=new N$(W);if(W.onEvent)Z.subscribeEvents(W.onEvent);return Z}var jq=M3.object({systemPrompt:M3.string().describe("System prompt defining the sub-agent's behavior"),task:M3.string().describe("Task for the sub-agent to complete")});function w$($){return Qq({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:Jq(jq),execute:async(W,Z)=>{let Q=$.createSubAgentTools?await $.createSubAgentTools(W,Z):$.subAgentTools??[],J=E$({kind:"subagent",prompt:W.systemPrompt,configProvider:$.configProvider,tools:Q,maxIterations:$.defaultMaxIterations,parentAgentId:Z.agentId,abortSignal:Z.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),j=J.getAgentId(),X=J.getConversationId(),Y=Z.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:j,conversationId:X,parentAgentId:Y,input:W})}catch{}try{let V=await J.run(W.task),B={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:j,conversationId:X,parentAgentId:Y,input:W,result:B,agentResult:V})}catch{}return B}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:j,conversationId:X,parentAgentId:Y,input:W,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as U0,TEAM_AWAIT_TIMEOUT_MS as Xq,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as Yq,TEAM_RUN_TEXT_PREVIEW_LIMIT as Vq,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as Bq,TeamAttachOutcomeFragmentInputSchema as RH,TeamAwaitRunsInputSchema as EH,TeamBroadcastInputSchema as wH,TeamBroadcastToolResultSchema as Hq,TeamCancelRunInputSchema as CH,TeamCancelRunToolResultSchema as Gq,TeamCleanupInputSchema as PH,TeamCleanupToolResultSchema as Kq,TeamCreateOutcomeInputSchema as SH,TeamCreateOutcomeToolResultSchema as Fq,TeamFinalizeOutcomeInputSchema as bH,TeamFinalizeOutcomeToolResultSchema as Aq,TeamListOutcomesInputSchema as yH,TeamListRunsInputSchema as hH,TeamMailboxMessageToolResultSchema as Uq,TeamMissionLogInputSchema as kH,TeamMissionLogToolResultSchema as fq,TeamOutcomeFragmentToolResultSchema as IH,TeamOutcomeToolResultSchema as Dq,TeamReadMailboxInputSchema as xH,TeamReviewOutcomeFragmentInputSchema as gH,TeamRunTaskInputSchema as mH,TeamRunTaskToolResultSchema as N3,TeamRunToolSummarySchema as R3,TeamSendMessageInputSchema as vH,TeamSendMessageToolResultSchema as _q,TeamShutdownTeammateInputSchema as cH,TeamSimpleAgentStatusToolResultSchema as uH,TeamSpawnTeammateInputSchema as dH,TeamStatusInputSchema as lH,TeamStatusToolResultSchema as Lq,TeamTaskInputSchema as pH,TeamTaskToolResultSchema as c4,validateWithZod as g,zodToJsonSchema as f0}from"@cline/shared";function rH($,W){let Z=$.replace(/\s+/g," ").trim();if(Z.length<=W)return Z;return`${Z.slice(0,Math.max(0,W-3)).trimEnd()}...`}function z2($,W){if($===void 0)throw Error(`Missing required field: ${W}`);return $}function Oq($){let W=$.result;if(!W)return;return{textPreview:rH(W.text,Vq),iterations:W.iterations,finishReason:W.finishReason,durationMs:W.durationMs,usage:{inputTokens:W.usage.inputTokens,outputTokens:W.usage.outputTokens,cacheReadTokens:W.usage.cacheReadTokens,cacheWriteTokens:W.usage.cacheWriteTokens,totalCost:W.usage.totalCost}}}function g9($){return $?.toISOString()}function E3($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:rH($.message,Yq),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:g9($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:g9($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:g9($.heartbeatAt),lastProgressAt:g9($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:Oq($)}}function Tq($){if($.status==="failed")throw Error(`Run "${$.id}" failed${$.error?`: ${$.error}`:""}`);if($.status==="cancelled")throw Error(`Run "${$.id}" was cancelled${$.error?`: ${$.error}`:""}`);if($.status==="interrupted")throw Error(`Run "${$.id}" was interrupted${$.error?`: ${$.error}`:""}`)}var I8=["team_spawn_teammate","team_shutdown_teammate","team_status","team_task","team_run_task","team_cancel_run","team_list_runs","team_await_runs","team_send_message","team_broadcast","team_read_mailbox","team_mission_log","team_cleanup","team_create_outcome","team_attach_outcome_fragment","team_review_outcome_fragment","team_finalize_outcome","team_list_outcomes"];function iH($){let W=[];if($.createBaseTools)W.push(...$.createBaseTools());W.push(...q2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:T2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:W,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function x8($){let W=$.leadAgentId??"lead",Z=$.restoredFromPersistence===!0,Q=q2({runtime:$.runtime,requesterId:W,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),J=[];for(let j of $.restoredTeammates??[]){if($.runtime.isTeammateActive(j.agentId))continue;iH({runtime:$.runtime,requesterId:W,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:j}),J.push(j.agentId)}return{tools:Q,restoredFromPersistence:Z,restoredTeammates:J}}function q2($){let W=$.allowSpawn??!0,Z=$.includeSpawnTool??!0,Q=$.includeManagementTools??!0,J=[];if(Z)J.push(U0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:f0(dH),execute:async(X)=>{let Y=g(dH,X);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!W)throw Error("Spawning teammates is disabled in this context.");let V={agentId:Y.agentId,rolePrompt:Y.rolePrompt};if(iH({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!Q)$.onLeadToolsUnlocked?.(q2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return g(uH,{agentId:Y.agentId,status:"spawned"})}}));if(!Q)return J;J.push(U0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:f0(cH),execute:async(X)=>{let Y=g(cH,X);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(Y.agentId,Y.reason),g(uH,{agentId:Y.agentId,status:"stopped"})}})),J.push(U0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:f0(lH),execute:async(X)=>{return g(lH,X),g(Lq,$.runtime.getSnapshot())}})),J.push(U0({name:"team_task",description:"Manage shared team tasks with action-specific payloads. create requires title and description, with optional dependsOn and assignee. list accepts optional status, assignee. claim requires taskId. complete requires taskId and summary. block requires taskId and reason. Do not include fields from other actions.",inputSchema:f0(pH),execute:async(X)=>{let Y=g(pH,X);switch(Y.action){case"create":{let V=new Set(Bq.create??[]),B=Object.entries(X).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),H=$.runtime.createTask({title:z2(Y.title,"title"),description:z2(Y.description,"description"),dependsOn:Y.dependsOn,assignee:Y.assignee,createdBy:$.requesterId});return g(c4,{action:"create",taskId:H.id,status:H.status,...B.length>0?{ignoredFields:B,note:`Ignored fields for action=create: ${B.join(", ")}`}:{}})}case"list":return g(c4,{action:"list",tasks:$.runtime.listTaskItems({status:Y.status,assignee:Y.assignee})});case"claim":{let V=$.runtime.claimTask(z2(Y.taskId,"taskId"),$.requesterId);return g(c4,{action:"claim",taskId:V.id,status:V.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_task with action=complete when done."})}case"complete":{let V=$.runtime.completeTask(z2(Y.taskId,"taskId"),$.requesterId,z2(Y.summary,"summary"));return g(c4,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(z2(Y.taskId,"taskId"),$.requesterId,z2(Y.reason,"reason"));return g(c4,{action:"block",taskId:V.id,status:V.status})}}}}));let j=new Map;return J.push(U0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:f0(mH),execute:async(X)=>{let Y=g(mH,X);if(Y.runMode==="async"){let H=$.runtime.startTeammateRun(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0});return g(N3,{agentId:Y.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${Y.agentId} and queued as ${H.id}.`,runId:H.id})}let V=j.get(Y.agentId);if(V){let H=await V;return g(N3,{...H,status:"joined",deduped:!0,message:`Task for ${Y.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let B=$.runtime.routeToTeammate(Y.agentId,Y.task,{taskId:Y.taskId||void 0,fromAgentId:$.requesterId,continueConversation:Y.continueConversation||void 0}).then((H)=>g(N3,{agentId:Y.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${Y.agentId} and completed in sync mode.`,text:H.text,iterations:H.iterations})).finally(()=>{j.delete(Y.agentId)});return j.set(Y.agentId,B),await B}})),J.push(U0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:f0(CH),execute:async(X)=>{let Y=g(CH,X),V=$.runtime.cancelRun(Y.runId,Y.reason);return g(Gq,{runId:V.id,status:V.status})}})),J.push(U0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:f0(hH),execute:async(X)=>g(R3.array(),$.runtime.listRuns(g(hH,X)).map(E3))})),J.push(U0({name:"team_await_runs",description:"Wait for async teammate runs. Provide runId to wait for one run, or omit it to wait for all active async runs. Uses a long timeout for legitimate teammate work.",inputSchema:f0(EH),timeoutMs:Xq,execute:async(X)=>{let Y=g(EH,X);if(Y.runId){let H=await $.runtime.awaitRun(Y.runId);return Tq(H),g(R3,E3(H))}let V=await $.runtime.awaitAllRuns(),B=V.filter((H)=>["failed","cancelled","interrupted"].includes(H.status));if(B.length>0){let H=B.map((G)=>`${G.id}:${G.status}${G.error?`(${G.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${H}`)}return g(R3.array(),V.map(E3))}})),J.push(U0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:f0(vH),execute:async(X)=>{let Y=g(vH,X),V=$.runtime.sendMessage($.requesterId,Y.toAgentId,Y.subject,Y.body,Y.taskId??void 0);return g(_q,{id:V.id,toAgentId:V.toAgentId})}})),J.push(U0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:f0(wH),execute:async(X)=>{let Y=g(wH,X),V=$.runtime.broadcast($.requesterId,Y.subject,Y.body,{taskId:Y.taskId??void 0});return g(Hq,{delivered:V.length})}})),J.push(U0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:f0(xH),execute:async(X)=>{let Y=g(xH,X);return g(Uq.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:Y.unreadOnly,markRead:!0}))}})),J.push(U0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:f0(kH),execute:async(X)=>{let Y=g(kH,X),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:Y.taskId||void 0,kind:Y.kind,summary:Y.summary,evidence:Y.evidence?.length?Y.evidence:void 0,nextAction:Y.nextAction||void 0});return g(fq,{id:V.id})}})),J.push(U0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:f0(PH),execute:async(X)=>{if(g(PH,X),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),g(Kq,{status:"cleaned"})}})),J.push(U0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:f0(SH),execute:async(X)=>{let Y=g(SH,X),V=$.runtime.createOutcome({title:Y.title,requiredSections:Y.requiredSections,createdBy:$.requesterId});return g(Fq,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),J.push(U0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:f0(RH),execute:async(X)=>{let Y=g(RH,X),V=$.runtime.attachOutcomeFragment({outcomeId:Y.outcomeId,section:Y.section,sourceAgentId:$.requesterId,sourceRunId:Y.sourceRunId||void 0,content:Y.content});return g(IH,{fragmentId:V.id,status:V.status})}})),J.push(U0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:f0(gH),execute:async(X)=>{let Y=g(gH,X),V=$.runtime.reviewOutcomeFragment({fragmentId:Y.fragmentId,reviewedBy:$.requesterId,approved:Y.approved});return g(IH,{fragmentId:V.id,status:V.status})}})),J.push(U0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:f0(bH),execute:async(X)=>{let Y=g(bH,X),V=$.runtime.finalizeOutcome(Y.outcomeId);return g(Aq,{outcomeId:V.id,status:V.status})}})),J.push(U0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:f0(yH),execute:async(X)=>{return g(yH,X),g(Dq.array(),$.runtime.listOutcomes())}})),J}function m9($){return{...$,tasks:$.tasks.map((W)=>({...W,createdAt:new Date(W.createdAt),updatedAt:new Date(W.updatedAt)})),mailbox:$.mailbox.map((W)=>({...W,sentAt:new Date(W.sentAt),readAt:W.readAt?new Date(W.readAt):void 0})),missionLog:$.missionLog.map((W)=>({...W,ts:new Date(W.ts)})),runs:($.runs??[]).map((W)=>({...W,startedAt:new Date(W.startedAt),endedAt:W.endedAt?new Date(W.endedAt):void 0,nextAttemptAt:W.nextAttemptAt?new Date(W.nextAttemptAt):void 0,heartbeatAt:W.heartbeatAt?new Date(W.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),finalizedAt:W.finalizedAt?new Date(W.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),reviewedAt:W.reviewedAt?new Date(W.reviewedAt):void 0}))}}function nH($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var zq=[{id:"read_files",description:"Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. Long files are windowed; page with start_line/end_line.",headlessToolNames:["read_files"]},{id:"search_codebase",description:"Perform regex pattern searches across the codebase for code patterns, definitions, imports, and other text matches.",headlessToolNames:["search_codebase"]},{id:"run_commands",description:"Run shell commands from the root of the workspace for listing files, checking git status, builds, tests, and similar tasks.",headlessToolNames:["run_commands"]},{id:"editor",description:"Make controlled filesystem edits on text files with create, replace, and insert operations.",headlessToolNames:["editor"]},{id:"fetch_web_content",description:"Fetch URL content and analyze it with a prompt describing what to extract.",headlessToolNames:["fetch_web_content"]},{id:"skills",description:"Execute a configured skill within the main conversation when a matching skill exists for the task.",headlessToolNames:["skills"]},{id:"ask_question",description:"Ask the user a single clarifying question with 2-5 selectable options.",headlessToolNames:["ask_question"]},{id:"spawn_agent",description:w$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...I8]}],qq={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function Mq($){return $==="plan"||$==="yolo"?$:"act"}function oH($){let W=Mq($.mode),Z=a0[r1({mode:W})],Q=y8($.providerId??"",$.modelId??"",W,b8);return{mode:W,flags:{...Z,...Q,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function aH($,W){if(W.disabledToolIds?.has($))return!1;let{flags:Z}=oH(W);if($==="spawn_agent")return Z.enableSpawnAgent===!0;if($==="teams")return Z.enableAgentTeams===!0;if($==="editor")return Z.enableEditor===!0||Z.enableApplyPatch===!0;let Q=qq[$];return Q?Z[Q]===!0:!1}function Nq($,W){if($.id==="editor"){let{flags:Z}=oH(W),Q=Z.enableApplyPatch===!0&&Z.enableEditor!==!0;return{...$,defaultEnabled:aH($.id,W),headlessToolNames:[Q?"apply_patch":"editor"]}}return{...$,defaultEnabled:aH($.id,W)}}function M2($={}){return zq.map((W)=>Nq(W,$))}function v9($={}){return M2($).filter((W)=>W.defaultEnabled).map((W)=>W.id)}function c9($){if(!$.enabled)return new Set;let W=M2($.availabilityContext),Z=new Set(W.map((Q)=>Q.id));if(!$.allowlist||$.allowlist.length===0)return new Set(W.filter((Q)=>Q.defaultEnabled).map((Q)=>Q.id));for(let Q of $.allowlist)if(!Z.has(Q))throw Error(`Unknown tool "${Q}". Available tools: ${W.map((J)=>J.id).join(", ")}`);return new Set($.allowlist)}function u4($,W={}){return M2(W).filter((Z)=>$.has(Z.id)).flatMap((Z)=>Z.headlessToolNames)}function u9($,W={}){return u4($,W)}function N2($={}){let{executorOptions:W={},executors:Z,...Q}=$,J={...S8(W),...Z??{}};return z$({...Q,executors:J})}import{mkdirSync as Sq,writeFileSync as bq}from"node:fs";import{dirname as yq}from"node:path";import{normalizeUserInput as hq,stripModeNotices as kq}from"@cline/shared";import{nanoid as Iq}from"nanoid";var tH={};w(tH,{sanitizeSessionToken:()=>R2,parseTeamTaskSubSessionId:()=>m8,parseSubSessionId:()=>l4,makeTeamTaskSubSessionId:()=>d4,makeSubSessionId:()=>g8,deriveSubsessionStatus:()=>p4});import{nanoid as wq}from"nanoid";function R2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function g8($,W){let Z=R2($),Q=R2(W),J=`${Z}__${Q}`;return J.length>180?J.slice(0,180):J}function d4($,W){let Z=R2($),Q=R2(W);return`${Z}__teamtask__${Q}__${wq(6)}`}function m8($){let Z=$.indexOf("__teamtask__");if(Z<=0)return null;let Q=$.slice(0,Z),J=$.slice(Z+12),j=J.lastIndexOf("__");if(j<=0)return null;let X=J.slice(0,j),Y=J.slice(j+2);if(!Q||!X||!Y)return null;return{rootSessionId:Q,agentId:X,teamTaskId:Y}}function l4($){if(m8($))return null;let W="__",Z=$.indexOf(W);if(Z<=0)return null;let Q=$.slice(0,Z),J=$.slice(Z+W.length);if(!Q||!J)return null;return{rootSessionId:Q,agentId:J}}function p4($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let W=String($.reason??"").toLowerCase();if(W.includes("cancel")||W.includes("abort")||W.includes("interrupt"))return"cancelled";if(W.includes("fail")||W.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as W0}from"zod";var WG={};w(WG,{isTerminalSessionStatus:()=>$G,isNonTerminalSessionStatus:()=>K0,SessionSource:()=>F0,SESSION_STATUSES:()=>r4,NON_TERMINAL_SESSION_STATUSES:()=>eH});import{SESSION_STATUS_VALUES as Cq}from"@cline/shared";var r4=Cq,eH=["idle","running","pending"];function $G($){return!eH.includes($)}function K0($){return!$G($)}var F0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var Pq=W0.enum(r4),I0=W0.object({version:W0.literal(1),session_id:W0.string().min(1),source:W0.string().min(1),pid:W0.number().int(),started_at:W0.string().min(1),ended_at:W0.string().min(1).optional(),exit_code:W0.number().int().nullable().optional(),status:Pq,interactive:W0.boolean(),provider:W0.string().min(1),model:W0.string().min(1),cwd:W0.string().min(1),workspace_root:W0.string().min(1),team_name:W0.string().min(1).optional(),enable_tools:W0.boolean(),enable_spawn:W0.boolean(),enable_teams:W0.boolean(),prompt:W0.string().optional(),metadata:W0.record(W0.string(),W0.unknown()).optional(),messages_path:W0.string().min(1).optional(),compaction_path:W0.string().min(1).optional()});function ZG($){if(!$)return!1;return Object.values($).some((W)=>typeof W==="function")}function C3($,W){let Z=[...$??[],...W??[]];if(Z.length===0)return;let Q=[],J=new Set;for(let j of Z){if(J.has(j.name))continue;J.add(j.name),Q.push(j)}return Q}function QG($){return JSON.stringify($,(W,Z)=>{if(Z instanceof Error)return{name:Z.name,message:Z.message,stack:Z.stack};return Z})}function n1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function w3($,W){let Z={...$};Z.id=n1(Z.id)??Iq();let Q=Z.modelInfo&&typeof Z.modelInfo==="object"?{...Z.modelInfo}:void 0,J={id:n1(Q?.id)??n1(Z.modelId)??n1(W?.id),provider:n1(Q?.provider)??n1(Z.providerId)??n1(W?.provider),family:n1(Q?.family)??n1(W?.family)};if(delete Z.providerId,delete Z.modelId,J.id&&J.provider)Z.modelInfo={id:J.id,provider:J.provider,...J.family?{family:J.family}:{}};else delete Z.modelInfo;return Z}function d9($){return $.map((W)=>w3(W))}function l9($,W,Z=[]){let Q=$.map((V,B)=>{let H=Z[B],K=H?.role===V.role&&JSON.stringify(H.content)===JSON.stringify(V.content)?{...H,...V}:{...V};return w3(K)}),J=Z.length,j=[];for(let V=J;V<Q.length;V+=1)if(Q[V]?.role==="assistant")j.push(V);if(j.length===0){let V=[...Q].reverse().findIndex((B)=>B.role==="assistant");if(V===-1)return Q;j.push(Q.length-1-V)}let X=j[j.length-1],Y=j.some((V)=>Q[V]?.metrics);for(let V of j){let B=Q[V],H=B.metrics;if(!H&&V===X&&!Y){let G=W.usage;H={inputTokens:G.inputTokens,outputTokens:G.outputTokens,cacheReadTokens:G.cacheReadTokens??0,cacheWriteTokens:G.cacheWriteTokens??0,cost:G.totalCost}}Q[V]={...w3(B,{id:W.model.id,provider:W.model.provider,family:W.model.info?.family}),...H?{metrics:H}:{},ts:B.ts??W.endedAt.getTime()}}return Q}function i4($){return{sessionId:$.sessionId,source:$.source,pid:$.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??void 0,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:$.parentSessionId??void 0,parentAgentId:$.parentAgentId??void 0,agentId:$.agentId??void 0,conversationId:$.conversationId??void 0,isSubagent:$.isSubagent,prompt:$.prompt??void 0,metadata:$.metadata??void 0,messagesPath:$.messagesPath??void 0,updatedAt:$.updatedAt}}var xq=120;function E2($){let W=$?.trim();return W?W.slice(0,xq):void 0}function P3($){let W=kq(hq($??"")).trim();if(!W)return;return E2(W.split(`
203
+ `)[0]?.trim())}function C$($){if(!$)return;let W={...$},Z=E2(typeof W.title==="string"?W.title:void 0);if(Z)W.title=Z;else delete W.title;return Object.keys(W).length>0?W:void 0}function n4($){let W=C$($.metadata)??{},Z=$.title!==void 0?E2($.title):P3($.prompt);if(Z)W.title=Z;return Object.keys(W).length>0?W:void 0}function S3($){let W=m8($);if(W)return{agent:"teammate",sessionId:W.rootSessionId,taskType:"team"};let Z=l4($);if(Z)return{agent:"subagent",sessionId:Z.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function b3($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:d9($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function JG($,W,Z){Sq(yq($),{recursive:!0}),bq($,`${JSON.stringify(b3({updatedAt:W,context:Z,messages:[]}),null,2)}
204
+ `,"utf8")}function jG($,W){return I0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:W?.endedAt??$.endedAt??void 0,exit_code:W?.exitCode??$.exitCode??void 0,status:W?.status??$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName??void 0,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt??void 0,metadata:W?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function XG($,W,Z){let Q=0;while(!0){let J=await $();if(J===void 0)return{updated:!1};let j=await W(J);if(typeof j==="object"&&j!==null&&"updated"in j&&j.updated===!1){if(Q+=1,Q>=Z)return j;continue}return j}}O0();var YG={};w(YG,{summarizeUsageFromMessages:()=>c8,sumUsageTotals:()=>a4,getCurrentContextSize:()=>y3,createInitialAccumulatedUsage:()=>z0,accumulateUsageTotals:()=>D0});function z0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function D0($,W){return{inputTokens:$.inputTokens+Math.max(0,W.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,W.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,W.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,W.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,W.totalCost??0)}}function a4($){let W=z0();for(let Z of $)W=D0(W,Z);return W}function v8($){return typeof $==="number"&&Number.isFinite($)?$:0}function c8($){let W=z0();for(let Z of $){let Q=Z.metrics;if(!Q)continue;W=D0(W,{inputTokens:v8(Q.inputTokens),outputTokens:v8(Q.outputTokens),cacheReadTokens:v8(Q.cacheReadTokens),cacheWriteTokens:v8(Q.cacheWriteTokens),totalCost:v8(Q.cost)})}return W}function y3($){for(let W=$.length-1;W>=0;W-=1){let Z=$[W];if(Z?.role!=="assistant")continue;let Q=v8(Z.metrics?.inputTokens);return Q>0?Q:void 0}return}function gq($){if(!$||typeof $!=="object")return;let W=$,Z=W.skill??W.skill_name??W.skillName;if(typeof Z!=="string")return;let Q=Z.trim();return Q.length>0?Q:void 0}function h3($){if(!$||typeof $!=="object")return{};let W=$;return{agentId:typeof W.agentId==="string"?W.agentId:void 0,conversationId:typeof W.conversationId==="string"?W.conversationId:void 0,parentAgentId:typeof W.parentAgentId==="string"?W.parentAgentId:void 0}}function a1($){let W=$.agentId?.trim();if(!W)return;let Z=$.parentAgentId?.trim()||void 0,Q=$.teamRole,J="root";if(Q==="teammate")J="team_teammate";else if(Q==="lead")J="team_lead";else if(Z)J="subagent";return{agentId:W,agentKind:J,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Z,createdByAgentId:$.createdByAgentId?.trim()||Z||void 0,isSubagent:Boolean(Z),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:Q,teamAgentId:$.teamAgentId?.trim()||void 0}}function mq($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function vq($){let W=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Z of W){let Q=Z?.trim();if(Q)return Q}return $.isPrimaryAgentEvent?"root":"unknown"}function k3($,W,Z){let{sessionId:Q,config:J,liveSession:j,emit:X}=$,Y=J.telemetry,V=j?.runtime.teamRuntime,B=Z?.isPrimaryAgentEvent??!0,H=h3(W),G=a1({agentId:Z?.agentId??H.agentId,conversationId:Z?.conversationId??H.conversationId,parentAgentId:Z?.parentAgentId??H.parentAgentId,createdByAgentId:Z?.createdByAgentId,teamId:Z?.teamId??V?.getTeamId(),teamName:Z?.teamName??V?.getTeamName(),teamRole:Z?.teamRole,teamAgentId:Z?.teamAgentId});if(W.type==="content_start"&&W.contentType==="tool"&&W.toolName==="skills"){let K=gq(W.input);if(K)pW(Y,{ulid:Q,skillName:K,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:J.providerId,modelId:J.modelId,...G})}if(W.type==="content_end"&&W.contentType==="tool"){let K=W.toolName??"unknown",F=!W.error;if(U8(Y,{ulid:Q,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))rW(Y,{ulid:Q,modelId:J.modelId,provider:J.providerId,errorType:W.error,...G})}if(W.type==="notice"&&W.reason==="api_error")e6(Y,{ulid:Q,model:J.modelId,provider:J.providerId,errorMessage:W.message,...G});if(W.type==="error")e6(Y,{ulid:Q,model:J.modelId,provider:J.providerId,errorMessage:W.error?.message??"unknown error",...G});if(W.type==="usage"&&j?.turnUsageBaseline){let K=mq(W);if(B){j.turnPrimaryUsage=D0(j.turnPrimaryUsage??z0(),K);let A=D0(j.turnUsageBaseline,j.turnPrimaryUsage);$.usageBySession.set(Q,A),A8(Y,{ulid:Q,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),dW(Y,{ulid:Q,tokensIn:W.inputTokens,tokensOut:W.outputTokens,cacheWriteTokens:W.cacheWriteTokens,cacheReadTokens:W.cacheReadTokens,totalCost:W.cost,model:J.modelId,...G})}else{let A=vq({isPrimaryAgentEvent:B,overrides:Z,eventMetadata:H}),f=j.turnUsageByAgent??new Map;j.turnUsageByAgent=f,f.set(A,D0(f.get(A)??z0(),K))}let F=D0(j.turnPrimaryUsage??z0(),a4(j.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(Q,D0(j.turnAggregateUsageBaseline??j.turnUsageBaseline,F))}if(W.type==="iteration_end"&&B)$.persistMessages(Q,j?.agent.getMessages()??[],j?.config.systemPrompt);X({type:"agent_event",payload:{sessionId:Q,event:W,teamAgentId:Z?.teamAgentId,teamRole:Z!==void 0?Z.teamRole??(B?"lead":void 0):void 0}}),X({type:"chunk",payload:{sessionId:Q,stream:"agent",chunk:QG(W),ts:Date.now()}})}function o1($){return $.workspaceRoot??$.cwd}import{resolveProviderRequestHeaders as oN}from"@cline/llms";import{hasRuntimeConfigExtension as sN}from"@cline/shared";var u8="0.0.61";var o4={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:u8,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};U1();import{existsSync as o9,readFileSync as EM,statSync as wM}from"node:fs";import{basename as CM,dirname as n9,join as s9,resolve as a9}from"node:path";import{discoverPluginModulePaths as PM,resolveConfiguredPluginModulePaths as CG,resolvePluginConfigSearchPaths as SM,SKILLS_CONFIG_DIRECTORY_NAME as bM}from"@cline/shared/storage";import{resolve as XM}from"node:path";import{normalizePluginManifest as YM}from"@cline/shared";import{existsSync as R0,readFileSync as l8}from"node:fs";import{builtinModules as cq,createRequire as m3}from"node:module";import{dirname as P$,extname as t4,isAbsolute as uq,resolve as o}from"node:path";import{fileURLToPath as HG}from"node:url";import{PLUGIN_FILE_EXTENSIONS as dq}from"@cline/shared";var GG=P$(HG(import.meta.url)),lq=m3(import.meta.url),pq=o(GG,"..","..","..","..",".."),I3=nq(pq),rq=["@cline/sdk","@cline/agents","@cline/core","@cline/core/hub","@cline/core/hub/daemon-entry","@cline/core/telemetry","@cline/llms","@cline/llms/browser","@cline/shared","@cline/shared/automation","@cline/shared/browser","@cline/shared/storage","@cline/shared/db","@cline/shared/types"],v3=new Set(cq.flatMap(($)=>[$,$.replace(/^node:/,"")])),s4=new Set(dq),iq=["development","node","import","require","default"];function nq($){let W={},Z={"@cline/sdk":o($,"packages/sdk/src/index.ts"),"@cline/agents":o($,"packages/agents/src/index.ts"),"@cline/core":o($,"packages/core/src/index.ts"),"@cline/llms":o($,"packages/llms/src/index.ts"),"@cline/shared":o($,"packages/shared/src/index.ts"),"@cline/shared/storage":o($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":o($,"packages/shared/src/db/index.ts")};for(let[Q,J]of Object.entries(Z))if(R0(J))W[Q]=J;for(let Q of["agents","core","llms","shared"]){let J=o($,"packages",Q),j=o(J,"package.json");if(!R0(j))continue;try{let X=JSON.parse(l8(j,"utf8"));if(typeof X.name!=="string"||!X.exports)continue;if(typeof X.exports==="string"){let Y=o(J,X.exports);if(R0(Y))W[X.name]=Y;continue}if(typeof X.exports!=="object")continue;for(let[Y,V]of Object.entries(X.exports)){let B=aq(J,V);if(!B)continue;let H=Y==="."?X.name:`${X.name}/${Y.replace(/^\.\//,"")}`;W[H]=B}}catch{}}return W}function aq($,W){let Z=c3(W);if(!Z)return null;let Q=KG($,Z);for(let J of Q)if(R0(J))return J;return null}function c3($,W=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(W.has($))return null;W.add($);let Z=$;for(let Q of iq){let J=c3(Z[Q],W);if(J)return J}return null}function KG($,W){let Z=W.replace(/^\.\//,""),Q=[o($,W)];if(Z.startsWith("dist/")){let J=Z.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[o($,`${J}.ts`),o($,`${J}.tsx`),o($,`${J}.mts`),o($,`${J}.cts`),...Q]}return Q}function oq($){return Object.fromEntries(Object.entries($).sort(([W],[Z])=>Z.length-W.length))}function p9($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function d8($){if($.startsWith("@")){let[W,Z]=$.split("/",3);return Z?`${W}/${Z}`:$}return $.split("/",1)[0]??$}function sq($){let W=d8($);if($===W)return".";return`.${$.slice(W.length)}`}function FG($){return d8($).startsWith("@cline/")}function x3($,W){let Z=d8(W),Q=P$($);while(!0){let J=o(Q,"node_modules",Z);if(R0(J)||R0(o(J,"package.json")))return!0;let j=o(Q,"..");if(j===Q)return!1;Q=j}}function BG($){return g3($)!==null}function g3($){try{return lq.resolve($)}catch{}return tq($)}function tq($){let W=d8($),Z=AG(W);if(!Z)return null;let Q=o(Z,"package.json");try{let J=JSON.parse(l8(Q,"utf8")),j=sq($),X=j==="."&&typeof J.exports==="string"?J.exports:J.exports&&typeof J.exports==="object"&&Object.hasOwn(J.exports,j)?J.exports[j]:void 0,Y=c3(X)??(j==="."&&typeof J.main==="string"?J.main:null);if(!Y)return null;let V=o(Z,Y),B=[V,...KG(Z,Y).filter((H)=>H!==V)];for(let H of B)if(R0(H))return H;return null}catch{return null}}function eq(){let $=[GG],W=process.env.CLINE_WRAPPER_PATH?.trim();if(W)$.push(P$(P$(W)));let Z=process.execPath?.trim();if(Z)$.push(P$(Z));return[...new Set($.map((Q)=>o(Q)))]}function $M($,W){let Z=$;while(!0){let Q=o(Z,"package.json");if(R0(Q))try{if(JSON.parse(l8(Q,"utf8")).name===W)return Z}catch{}let J=o(Z,"node_modules",W,"package.json");if(R0(J))return P$(J);let j=o(Z,"..");if(j===Z)return null;Z=j}}function AG($){for(let W of eq()){let Z=$M(W,$);if(Z)return Z}return null}function WM($){let Z=P$($);for(let Q=0;Q<4;Q++){let J=o(Z,"package.json");if(R0(J))try{let X=JSON.parse(l8(J,"utf8"));return X!=null&&typeof X==="object"&&"cline"in X}catch{return!1}let j=o(Z,"..");if(j===Z)return!1;Z=j}return!1}function UG($,W){let Z=W.startsWith("file:")?HG(W):uq(W)?W:o(P$($),W);if(R0(Z)&&s4.has(t4(Z)))return Z;for(let Q of s4){let J=`${Z}${Q}`;if(R0(J))return J}for(let Q of s4){let J=o(Z,`index${Q}`);if(R0(J))return J}return null}function fG($){let W=new Set,Z=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let Q of Z)for(let J of $.matchAll(Q)){let j=J[1];if(j)W.add(j)}return[...W]}function ZM($){return t4($)!==".ts"}function DG($,W,Z=new Set){if(Z.has($)||!R0($))return;if(Z.add($),!s4.has(t4($)))return;let Q=l8($,"utf8"),J=ZM($);for(let j of fG(Q)){if(j.startsWith("node:")||v3.has(j))continue;if(p9(j)){if(!J)continue;if(Object.hasOwn(I3,j)||Object.hasOwn(I3,d8(j))||x3($,j)||FG(j)&&BG(j)||W&&BG(j))continue;throw Error(`Cannot find module '${d8(j)}'`)}let X=UG($,j);if(X)DG(X,W,Z)}}function _G($,W=new Set,Z=new Set){if(W.has($)||!R0($))return Z;if(W.add($),!s4.has(t4($)))return Z;let Q=l8($,"utf8");for(let J of fG(Q)){if(Z.add(J),p9(J))continue;let j=UG($,J);if(j)_G(j,W,Z)}return Z}function QM($,W){let Z=m3($),Q={},J=_G($),j=new Set(rq);for(let[X,Y]of Object.entries(I3)){try{Z.resolve(X);continue}catch{}Q[X]=Y}for(let X of J)if(p9(X)&&(FG(X)||W))j.add(X);for(let X of j){if(Object.hasOwn(Q,X)||x3($,X))continue;let Y=g3(X);if(Y)Q[X]=Y}if(!W)return Q;for(let X of J){if(!p9(X)||Object.hasOwn(Q,X)||x3($,X)||X.startsWith("node:")||v3.has(X))continue;let Y=g3(X);if(Y)Q[X]=Y}return Q}function JM($){let W=t4($);return W===".ts"||W===".tsx"||W===".mts"||W===".cts"}var w2;function jM(){if(w2!==void 0)return w2;let $=AG("jiti");if(!$)return w2=null,null;let W=o($,"dist","babel.cjs");if(!R0(W))return w2=null,null;try{let Q=m3(W)(W);w2=typeof Q==="function"?Q:null}catch{w2=null}return w2}async function LG($,W={}){let Z=!WM($);DG($,Z);let Q=QM($,Z),J=oq(Q),j=await import("jiti"),X=typeof j==="function"?j:typeof j.default==="function"?j.default:void 0;if(!X)throw Error("Unable to load jiti");let Y=Object.entries(J).filter(([,G])=>JM(G)).map(([G])=>G),V=jM(),B=V?(G)=>V({...G,interopDefault:!0}):void 0;return await X($,{alias:J,cache:W.useCache,requireCache:W.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...v3],transformModules:Y,tryNative:!1,...B?{transform:B}:{}}).import($,{})}function OG($,W){if(!$)return!0;if($.providerIds?.length){if(!W?.providerId||!$.providerIds.includes(W.providerId))return!1}if($.modelIds?.length){if(!W?.modelId||!$.modelIds.includes(W.modelId))return!1}return!0}function TG($){return typeof $==="object"&&$!==null}function u3($){return Array.isArray($)&&$.every((W)=>typeof W==="string")}function VM($,W){if(!TG($.manifest))throw Error(`Invalid plugin module at ${W}: missing required "manifest"`);if(!u3($.manifest.capabilities))throw Error(`Invalid plugin module at ${W}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${W}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!u3($.manifest.providerIds))throw Error(`Invalid plugin module at ${W}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!u3($.manifest.modelIds))throw Error(`Invalid plugin module at ${W}: manifest.modelIds must be a string array when provided`)}function BM($,W){if(!TG($))throw Error(`Invalid plugin module at ${W}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${W}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${W}: missing required "manifest"`);VM($,W)}async function e4($,W={}){let Z=XM(W.cwd??process.cwd(),$),Q=await LG(Z,{useCache:W.useCache}),J=W.exportName??"plugin",j=Q.default??Q[J];BM(j,Z);let X=j,Y=X.setup,V=Y?(B,H)=>{let G={...W.session,...H.session},K={...H,session:Object.keys(G).length>0?G:void 0,client:W.client??H.client,user:W.user??H.user,workspaceInfo:W.workspaceInfo??H.workspaceInfo,automation:W.automation??H.automation,logger:W.logger??H.logger,telemetry:W.telemetry??H.telemetry};return Y(B,K)}:void 0;return{...X,manifest:YM(X.manifest),setup:V}}async function r9($,W={}){return(await C2($,W)).plugins}async function C2($,W={}){let Z=[],Q=[],J=new Map,j=0;for(let Y of $)try{let V=await e4(Y,W);if(!OG(V.manifest,W))continue;let B=J.get(V.name);if(B)Q.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:Y,overriddenPluginPath:B.pluginPath,message:`Plugin "${V.name}" from ${Y} overrides ${B.pluginPath}`});J.set(V.name,{plugin:V,pluginPath:Y,order:j++})}catch(V){let B=V instanceof Error?V.message:String(V);Z.push({pluginPath:Y,phase:"load",message:B,stack:V instanceof Error?V.stack:void 0})}let X=[...J.values()].sort((Y,V)=>Y.order-V.order);return{plugins:X.map((Y)=>Y.plugin),pluginPaths:X.map((Y)=>Y.pluginPath),failures:Z,warnings:Q}}import{existsSync as r3}from"node:fs";import{createRequire as wG}from"node:module";import{dirname as i9,join as r8}from"node:path";import{fileURLToPath as AM}from"node:url";var RG={};w(RG,{resolveSubprocessRuntimeExecutable:()=>d3,buildSubprocessSandboxCommand:()=>NG,SubprocessSandbox:()=>p8,CLINE_JS_RUNTIME_PATH_ENV:()=>MG});import{spawn as HM}from"node:child_process";import{basename as GM}from"node:path";import{augmentNodeCommandForDebug as KM,withResolvedClineBuildEnv as FM}from"@cline/shared";function zG($){if($ instanceof Error)return $;return Error(String($))}var MG="CLINE_JS_RUNTIME_PATH";function qG($){let W=$?.trim();if(!W)return!1;let Z=GM(W).toLowerCase();return Z==="node"||Z==="node.exe"||Z==="bun"||Z==="bun.exe"}function d3($={}){let W=$.env??process.env,Z=$.runtimeExecutable?.trim()||W[MG]?.trim();if(Z)return Z;let Q=$.execPath?.trim()||process.execPath;if(qG(Q))return Q;for(let J of[W.BUN_EXEC_PATH,W.npm_node_execpath,W.NODE]){let j=J?.trim();if(j&&qG(j))return j}return"node"}function NG($,W={}){let Z=d3({env:W.env,execPath:W.execPath,runtimeExecutable:W.runtimeExecutable});return KM([Z,...$],{env:W.env,execArgv:W.execArgv,debugRole:W.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class p8{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let W=this.pending.get($);if(!W)return;if(this.pending.delete($),W.timeout)clearTimeout(W.timeout);return W}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],W=NG($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Z=HM(W[0]??d3(this.options),W.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:FM(process.env),windowsHide:!0});this.process=Z;let Q="",J=(j)=>{let X=Q+j;Q=X.length>4000?X.slice(-4000):X};Z.stderr?.setEncoding("utf8"),Z.stderr?.on("data",(j)=>{J(j)}),Z.on("message",(j)=>{this.onMessage(j)}),Z.on("error",(j)=>{this.failPending(Error(`${this.processLabel} process error: ${zG(j).message}`))}),Z.on("exit",(j,X)=>{this.process=null;let Y=Q.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(j)}, signal=${String(X)})${Y?`: ${Y}`:""}`))})}async call($,W,Z={}){this.start();let Q=this.process;if(!Q||Q.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let J=`req_${++this.requestCounter}`,j={type:"call",id:J,method:$,args:W};return await new Promise((X,Y)=>{let V={resolve:(B)=>X(B),reject:Y};if((Z.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(J),this.shutdown().catch(()=>{}),Y(Error(`${this.processLabel} call timed out after ${Z.timeoutMs}ms: ${$}`))},Z.timeoutMs);this.pending.set(J,V),Q.send(j,(B)=>{if(!B)return;let H=this.clearPendingRequest(J);if(!H)return;H.reject(Error(`${this.processLabel} failed to send call "${$}": ${zG(B).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((W)=>{let Z=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}W()},300);$.once("exit",()=>{clearTimeout(Z),W()});try{$.kill("SIGTERM")}catch{clearTimeout(Z),W()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let W=this.clearPendingRequest($.id);if(!W)return;if($.ok){W.resolve($.result);return}W.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[W,Z]of this.pending.entries()){if(this.pending.delete(W),Z.timeout)clearTimeout(Z.timeout);Z.reject($)}}}function UM($){return{...$,contributions:{tools:$.contributions?.tools??[],commands:$.contributions?.commands??[],rules:$.contributions?.rules??[],messageBuilders:$.contributions?.messageBuilders??[],providers:$.contributions?.providers??[],automationEventTypes:$.contributions?.automationEventTypes??[],mcpServers:$.contributions?.mcpServers??[],shortcuts:$.contributions?.shortcuts??[],flags:$.contributions?.flags??[]}}}function $5($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function fM(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function DM(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Z=wG($).resolve(`${fM()}/package.json`),Q=r8(i9(Z),"extensions","plugin-sandbox-bootstrap.js");return r3(Q)?Q:void 0}catch{return}}function _M(){let $=process.execPath?.trim();if(!$)return;let W=r8(i9(i9($)),"extensions","plugin-sandbox-bootstrap.js");return r3(W)?W:void 0}function LM(){let $=i9(AM(import.meta.url)),W=wG(import.meta.url),Z=[r8($,"plugin-sandbox-bootstrap.js"),r8($,"extensions","plugin-sandbox-bootstrap.js"),r8($,"agents","plugin-sandbox-bootstrap.js"),DM(),_M()];for(let j of Z.filter((X)=>typeof X==="string"))if(r3(j))return{file:j};let Q=r8($,"plugin-sandbox-bootstrap.ts"),J="jiti";try{J=W.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(J)});`,`const jiti = createJiti(${JSON.stringify(Q)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(Q)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
205
+ `)}}var l3=LM();function p3($,W,Z){if(typeof $==="number"&&$>0)return $;if(Z){let Q=process.env[Z];if(Q){let J=Number(Q);if(Number.isInteger(J)&&J>0)return J}}return W}async function i8($){let W=new p8({name:"plugin-sandbox",..."file"in l3?{bootstrapFile:l3.file}:{bootstrapScript:l3.script},onEvent:$.onEvent}),Z=p3($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),Q=p3($.hookTimeoutMs,3000),J=p3($.contributionTimeoutMs,60000),j={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},X,Y=()=>{return X??=W.call("initialize",j,{timeoutMs:Z}).finally(()=>{X=void 0}),X},V;try{V=await W.call("initialize",j,{timeoutMs:Z})}catch(G){throw await W.shutdown().catch(()=>{}),G}let B=V.plugins.map(UM);return{extensions:B.map((G)=>{let K={name:G.name,__clinePluginPath:G.pluginPath,manifest:G.manifest,setup:(F)=>{OM(F,W,G,J,Y),TM(F,W,G,J,Y),zM(F,W,G,J,Y),MM(F,W,G,J,Y),qM(F,G)}};return K.hooks=RM(W,G,Q,Y),K}),failures:V.failures,pluginPaths:B.map((G)=>G.pluginPath),shutdown:async()=>{await W.shutdown()},warnings:V.warnings}}function OM($,W,Z,Q,J){for(let j of Z.contributions?.tools??[]){let X={name:j.name,description:j.description??"",inputSchema:j.inputSchema??{type:"object",properties:{}},timeoutMs:j.timeoutMs,retryable:j.retryable,execute:async(Y,V)=>{try{return await W.call("executeTool",{pluginId:Z.pluginId,contributionId:j.id,input:Y,context:V},{timeoutMs:Q})}catch(B){if(!$5(B))throw B;return await J(),await W.call("executeTool",{pluginId:Z.pluginId,contributionId:j.id,input:Y,context:V},{timeoutMs:Q})}}};$.registerTool(X)}}function TM($,W,Z,Q,J){for(let j of Z.contributions?.commands??[])$.registerCommand({name:j.name,description:j.description,handler:async(X)=>{try{return await W.call("executeCommand",{pluginId:Z.pluginId,contributionId:j.id,input:X},{timeoutMs:Q})}catch(Y){if(!$5(Y))throw Y;return await J(),await W.call("executeCommand",{pluginId:Z.pluginId,contributionId:j.id,input:X},{timeoutMs:Q})}}})}function zM($,W,Z,Q,J){for(let j of Z.contributions?.rules??[])$.registerRule({id:j.ruleId,source:j.source,content:j.hasContentHandler===!0?async()=>{try{return await W.call("resolveRuleContent",{pluginId:Z.pluginId,contributionId:j.id},{timeoutMs:Q})}catch(X){if(!$5(X))throw X;return await J(),await W.call("resolveRuleContent",{pluginId:Z.pluginId,contributionId:j.id},{timeoutMs:Q})}}:j.content??""})}function qM($,W){for(let Z of W.contributions?.providers??[])$.registerProvider({name:Z.name,description:Z.description,metadata:Z.metadata});for(let Z of W.contributions?.automationEventTypes??[])$.registerAutomationEventType({eventType:Z.eventType,source:Z.source,description:Z.description,attributesSchema:Z.attributesSchema,payloadSchema:Z.payloadSchema,examples:Z.examples,metadata:Z.metadata});for(let Z of W.contributions?.mcpServers??[])$.registerMcpServer(Z)}function MM($,W,Z,Q,J){for(let j of Z.contributions?.messageBuilders??[])$.registerMessageBuilder({name:j.name,async build(X){try{let Y=await W.call("buildMessages",{pluginId:Z.pluginId,contributionId:j.id,messages:X},{timeoutMs:Q});return EG(Y)?Y:X}catch(Y){if(!$5(Y))throw Y;await J();let V=await W.call("buildMessages",{pluginId:Z.pluginId,contributionId:j.id,messages:X},{timeoutMs:Q});return EG(V)?V:X}}})}function EG($){return Array.isArray($)&&$.every((W)=>typeof W==="object"&&W!==null&&("role"in W)&&("content"in W))}function NM($,W,Z,Q,J){return async(j)=>{try{return await $.call("invokeHook",{pluginId:W,hookName:Z,payload:j},{timeoutMs:Q})}catch(X){if(!$5(X))throw X;return await J(),await $.call("invokeHook",{pluginId:W,hookName:Z,payload:j},{timeoutMs:Q})}}}function RM($,W,Z,Q){let J={};for(let j of W.hooks??[])J[j]=NM($,W.pluginId,j,Z,Q);return Object.keys(J).length>0?J:void 0}var n3="package.json",yM="package";function W5($){return SM($)}function Z5($){return PM($)}function hM($){try{return o9($)&&wM($).isDirectory()}catch{return!1}}function a3($){let W=[],Z=new Set;for(let Q of $){let J=a9(Q);if(Z.has(J))continue;Z.add(J),W.push(J)}return W}function PG($){let W=a3($);return S9(W)}function SG($){return W5($).flatMap((W)=>Z5(W)).filter((W)=>o9(W))}function kM($,W){let Z=[];for(let Q of $)try{Z.push(...CG([Q],W))}catch{}return Z}function i3($){return typeof $==="object"&&$!==null}function IM($){try{let W=JSON.parse(EM(s9($,n3),"utf8"));if(!i3(W)||!i3(W.cline))return[];let Z=W.cline.plugins;if(!Array.isArray(Z))return[];let Q=[];for(let J of Z){if(typeof J==="string"){Q.push(J);continue}if(!i3(J)||!Array.isArray(J.paths))continue;for(let j of J.paths)if(typeof j==="string")Q.push(j)}return Q}catch{return[]}}function bG($,W){let Z=a9(W);return IM($).some((Q)=>a9($,Q)===Z)}function xM($,W){return CM($)===yM&&o9(s9(n9($),n3))&&bG(n9($),W)}function gM($){let W=a9($),Z=[],Q=n9(W);while(!0){if(xM(Q,W)){Z.push(Q);break}if(o9(s9(Q,n3))){if(bG(Q,W))Z.push(Q);break}let J=n9(Q);if(J===Q)break;Q=J}return a3(Z)}function s1($={}){let W=$.cwd??process.cwd(),Z=SG($.workspacePath),Q=CG($.pluginPaths??[],W);return PG([...Q,...Z])}function mM($={}){let W=$.cwd??process.cwd(),Z=SG($.workspacePath),Q=kM($.pluginPaths??[],W);return PG([...Q,...Z])}function t1($){let W=[];for(let Z of $)for(let Q of gM(Z)){let J=s9(Q,bM);if(hM(J))W.push(J)}return a3(W)}function yG($={}){return t1(mM($))}async function n8($={}){let W=s1($);if(W.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let Q=await C2(W,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:Q.plugins,failures:Q.failures,pluginPaths:Q.pluginPaths,warnings:Q.warnings}}let Z=await i8({pluginPaths:W,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:Z.extensions??[],shutdown:Z.shutdown,failures:Z.failures,pluginPaths:Z.pluginPaths,warnings:Z.warnings}}import{execFile as vM}from"node:child_process";import{promisify as cM}from"node:util";var uM=cM(vM);function o3($,W){$?.log(W,{severity:"warn"})}function dM($){let W=$?.checkpoint;if(!W||typeof W!=="object"||Array.isArray(W))return;let Z=W;if(!Z.latest||!Array.isArray(Z.history))return;let Q=Z.latest,J=Z.history.filter((j)=>!!j&&typeof j==="object"&&typeof j.ref==="string"&&typeof j.createdAt==="number"&&typeof j.runCount==="number");if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")return;return{latest:Q,history:J}}async function P2($,W){let Z=await uM("git",["-C",$,...W],{windowsHide:!0});return{stdout:Z.stdout.trim(),stderr:Z.stderr.trim()}}async function s3($,W){if(!$)return;let Z=`refs/cline/checkpoints/${W}/`;try{let{stdout:Q}=await P2($,["for-each-ref","--format=%(refname)",Z]),J=Q.trim().split(`
206
+ `).filter(Boolean);await Promise.allSettled(J.map((j)=>P2($,["update-ref","-d",j])))}catch{}}async function hG($,W,Z){if(!$||Z.length===0)return;await Promise.allSettled(Z.map((Q)=>P2($,["update-ref",`refs/cline/checkpoints/${W}/${Q.runCount}`,Q.ref])))}function lM($,W){let Z=$.findIndex((Q)=>Q.runCount===W.runCount);if(Z<0)return[...$,W];return $.map((Q,J)=>J===Z?W:Q)}function kG($){let W=$.initialRunCount??0,Z,Q=async()=>{if(Z!==void 0)return Z;try{Z=(await P2($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Z=!1}return Z},J=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:W});if(!await Q())return;let j=async(B)=>{try{let G=(await P2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:W,kind:"commit"}}catch(H){o3($.logger,`${B}: ${H instanceof Error?H.message:String(H)}`);return}},X=`cline checkpoint session=${$.sessionId} run=${W}`,Y="";try{Y=(await P2($.cwd,["stash","create",X])).stdout.trim()}catch(B){return o3($.logger,`Checkpoint snapshot failed: ${B instanceof Error?B.message:String(B)}`),j("Checkpoint HEAD fallback failed")}if(!Y)return j("Checkpoint HEAD fallback failed");let V=`refs/cline/checkpoints/${$.sessionId}/${W}`;try{await P2($.cwd,["update-ref",V,Y])}catch(B){o3($.logger,`Checkpoint store failed: ${B instanceof Error?B.message:String(B)}`);return}return{ref:Y,createdAt:Date.now(),runCount:W,kind:"stash"}};return{beforeRun:async({snapshot:j})=>{if(j.parentAgentId!=null)return;W+=1;return},beforeModel:async({snapshot:j})=>{if(j.parentAgentId!=null||j.iteration!==1||W<1)return;let X=await J();if(!X)return;let Y=await $.readSessionMetadata(),V=dM(Y);if(V?.latest.ref===X.ref)return;let B=lM(V?.history??[],X);await $.writeSessionMetadata({...Y??{},checkpoint:{latest:X,history:B}});return}}}import{spawn as eM}from"node:child_process";import{appendFileSync as $N,readFileSync as WN}from"node:fs";import{join as ZN}from"node:path";import{augmentNodeCommandForDebug as gG,withResolvedClineBuildEnv as $J}from"@cline/shared";import{ensureHookLogDir as IG}from"@cline/shared/storage";function a8($,W){if(!W)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:W}}import{existsSync as pM,readdirSync as rM}from"node:fs";import{basename as iM,extname as nM,join as aM}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as t9,resolveHooksConfigSearchPaths as oM}from"@cline/shared/storage";function Q5($){return oM($)}var o8;((H)=>{H.TaskStart="TaskStart";H.TaskResume="TaskResume";H.TaskCancel="TaskCancel";H.TaskComplete="TaskComplete";H.TaskError="TaskError";H.PreToolUse="PreToolUse";H.PostToolUse="PostToolUse";H.UserPromptSubmit="UserPromptSubmit";H.PreCompact="PreCompact";H.SessionShutdown="SessionShutdown"})(o8||={});var J5={["TaskStart"]:"agent_start",["TaskResume"]:"agent_resume",["TaskCancel"]:"agent_abort",["TaskComplete"]:"agent_end",["TaskError"]:"agent_error",["PreToolUse"]:"tool_call",["PostToolUse"]:"tool_result",["UserPromptSubmit"]:"prompt_submit",["PreCompact"]:void 0,["SessionShutdown"]:"session_shutdown"},sM=new Map(Object.values(o8).map(($)=>[$.toLowerCase(),$])),tM=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function j5($){let W=nM($).toLowerCase();if(!tM.has(W))return;let Z=iM($,W).trim().toLowerCase();return sM.get(Z)}function S$($){let W=[],Z=new Set,Q=Q5($).filter((J)=>pM(J));for(let J of Q)try{for(let j of rM(J,{withFileTypes:!0})){if(!j.isFile())continue;let X=j5(j.name);if(!X)continue;let Y=aM(J,j.name);if(Z.has(Y))continue;Z.add(Y),W.push({fileName:X,hookEventName:J5[X],path:Y})}}catch{}return W.sort((J,j)=>J.path.localeCompare(j.path))}function $Z($){if(!$||typeof $!=="object")return{};let W={};for(let[Z,Q]of Object.entries($))W[Z]=typeof Q==="string"?Q:JSON.stringify(Q);return W}function e9($,W,Z){let Q=Z instanceof Error?`: ${Z.message}`:"",J=`${W}${Q}`;if($){try{$.log(J,{severity:"warn",...Z!==void 0?{error:Z}:{}})}catch{}return}console.warn(J)}function QN($,W){if(!W)return $;if(!$)return{...W};let Z=[$.context,W.context].filter((J)=>typeof J==="string"&&J.length>0).join(`
207
+ `),Q=[...$.appendMessages??[],...W.appendMessages??[]];return{cancel:$.cancel===!0||W.cancel===!0?!0:void 0,review:$.review===!0||W.review===!0?!0:void 0,context:Z||void 0,overrideInput:W.overrideInput!==void 0?W.overrideInput:$.overrideInput,systemPrompt:W.systemPrompt!==void 0?W.systemPrompt:$.systemPrompt,appendMessages:Q.length>0?Q:void 0}}function JN($){if(!$||typeof $!=="object")return;let W=$,Z=typeof W.context==="string"?W.context:typeof W.contextModification==="string"?W.contextModification:typeof W.errorMessage==="string"?W.errorMessage:void 0;return{cancel:typeof W.cancel==="boolean"?W.cancel:void 0,review:typeof W.review==="boolean"?W.review:void 0,context:Z,overrideInput:Object.hasOwn(W,"overrideInput")?W.overrideInput:void 0}}function t3($){let W=String($??"").toLowerCase();return W.includes("cancel")||W.includes("abort")||W.includes("interrupt")}function E0($,W){let Z=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",Q={rootSessionId:W.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:Q,workspaceRoots:W.workspacePath?[W.workspacePath]:[],workspaceInfo:W.workspaceInfo,userId:Z,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function jN($){let W=$.trim();if(!W)return{};let Q=W.split(`
208
+ `).map((j)=>j.trim()).filter(Boolean).filter((j)=>j.startsWith("HOOK_CONTROL\t")).map((j)=>j.slice(13)),J=Q.length>0?Q[Q.length-1]:W;try{return{parsedJson:JSON.parse(J)}}catch(j){return{parseError:j instanceof Error?j.message:"Failed to parse hook stdout JSON"}}}async function XN($,W){let Z=$.stdin;if(!Z)throw Error("hook command failed to create stdin");await new Promise((Q,J)=>{let j=!1,X=()=>{Z.off("error",V),Z.off("finish",B),$.off("close",H)},Y=(G)=>{if(j)return;if(j=!0,X(),G){let K=G.code;if(K==="EPIPE"||K==="ERR_STREAM_DESTROYED"){Q();return}J(G);return}Q()},V=(G)=>Y(G),B=()=>Y(),H=()=>Y();Z.on("error",V),Z.once("finish",B),$.once("close",H);try{Z.end(W)}catch(G){Y(G)}})}async function mG($,W){if(W.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await xG($,W)}catch(Z){let Q=BN(W.command,process.platform,Z);if(!Q)throw Z;return await xG($,{...W,command:Q})}}async function xG($,W){let Z=gG(W.command,{env:W.env,debugRole:"hook"}),Q=eM(Z[0],Z.slice(1),{cwd:W.cwd,env:$J(W.env),stdio:W.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:W.detached,windowsHide:!0}),J=new Promise((K)=>{Q.once("spawn",()=>K())}),j=new Promise((K,F)=>{Q.once("error",(A)=>F(A))}),X=JSON.stringify($);if(await Promise.race([J,j]),await XN(Q,X),W.detached){Q.unref();return}if(!Q.stdout||!Q.stderr)throw Error("hook command failed to create stdout/stderr");let Y="",V="",B=!1,H;Q.stdout.on("data",(K)=>{Y+=K.toString()}),Q.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((W.timeoutMs??0)>0)H=setTimeout(()=>{B=!0,Q.kill("SIGKILL")},W.timeoutMs);Q.once("close",(F)=>{if(H)clearTimeout(H);let{parsedJson:A,parseError:f}=jN(Y);K({exitCode:F,stdout:Y,stderr:V,parsedJson:A,parseError:f,timedOut:B})})});return await Promise.race([G,j])}function YN($){try{let Z=WN($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Z?.startsWith("#!"))return;let Q=Z.slice(2).trim();if(!Q)return;let J=Q.split(/\s+/).filter(Boolean);return J.length>0?J:void 0}catch{return}}function VN($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function BN($,W=process.platform,Z){if(W!=="win32"||!VN(Z))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function vG($){if($.length===0)return;let[W,...Z]=$,Q=W.replace(/\\/g,"/").toLowerCase(),J=Q.split("/").at(-1)??Q;if(J==="env")return vG(Z);if(J==="bash"||J==="sh"||J==="zsh")return[J,...Z];if(J==="python3"||J==="python")return process.platform==="win32"?["py","-3",...Z]:[J,...Z];return $}function HN($){let W=YN($);if(W&&W.length>0)return[...vG(W)??W,$];let Z=$.toLowerCase();if(Z.endsWith(".sh")||Z.endsWith(".bash")||Z.endsWith(".zsh"))return["bash",$];if(Z.endsWith(".js")||Z.endsWith(".mjs")||Z.endsWith(".cjs"))return gG(["node",$],{debugRole:"hook"});if(Z.endsWith(".ts")||Z.endsWith(".mts")||Z.endsWith(".cts"))return["bun","run",$];if(Z.endsWith(".py"))return process.platform==="win32"?["py","-3",$]:["python3",$];if(Z.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",$];return["bash",$]}function GN($){let W={};for(let Z of S$($)){if(!Z.hookEventName)continue;let Q=Z.hookEventName,J=W[Q]??[];J.push(HN(Z.path)),W[Q]=J}return W}async function KN($){let W;for(let Z of $.commands){let Q=Z.join(" ");try{let J=await mG($.payload,{command:Z,cwd:$.cwd,env:$J(process.env),detached:!1,timeoutMs:$.timeoutMs});if(J?.timedOut){e9($.logger,`hook command timed out: ${Q}`);continue}if(J?.parseError){e9($.logger,`hook command returned invalid JSON control output: ${Q} (${J.parseError})`);continue}W=QN(W,JN(J?.parsedJson))}catch(J){e9($.logger,`hook command failed: ${Q}`,J)}}return W}function S2($){for(let W of $.commands){let Z=W.join(" ");mG($.payload,{command:W,cwd:$.cwd,env:$J(process.env),detached:!0}).catch((Q)=>{e9($.logger,`hook command failed: ${Z}`,Q)})}}function b$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function e3($,W){return{...b$($.snapshot),userMessage:W}}function cG($){return{...b$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function uG($){return{...b$($.snapshot),iteration:$.snapshot.iteration,record:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input,output:$.result.output,error:$.result.isError?String($.result.output):void 0,durationMs:$.durationMs,startedAt:$.startedAt,endedAt:$.endedAt}}}function dG($){return $.filter((W)=>W.type==="text"&&typeof W.text==="string").map((W)=>W.text).join("")}function FN($){if(!$)return;let W={};if($.cancel===!0)W.stop=!0;if($.overrideInput!==void 0)W.input=$.overrideInput;return Object.keys(W).length>0?W:void 0}function s8($){let W={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Z=(Q)=>{let J=`${JSON.stringify({ts:new Date().toISOString(),...Q})}
209
+ `,X=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??ZN(IG(),"hooks.jsonl");IG(X),$N(X,J,"utf8")};return{beforeRun:async(Q)=>{let J=e3(Q,"");Z({...E0(J,W),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Q)=>{let J=cG(Q);Z({...E0(J,W),hookName:"tool_call",iteration:J.iteration,tool_call:{id:J.call.id,name:J.call.name,input:J.call.input},preToolUse:{toolName:J.call.name,parameters:$Z(J.call.input)}});return},afterTool:async(Q)=>{let J=uG(Q);Z({...E0(J,W),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:$Z(J.record.input),result:typeof J.record.output==="string"?J.record.output:JSON.stringify(J.record.output),success:!J.record.error,executionTimeMs:J.record.durationMs}});return},afterRun:async({snapshot:Q,result:J})=>{let j=b$(Q);if(J.status==="completed"){Z({...E0(j,W),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||t3(J.error?.message)){Z({...E0(j,W),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Z({...E0(j,W),hookName:"agent_error",iteration:J.iterations,error:{name:J.error.name,message:J.error.message,stack:J.error.stack}})},onEvent:async(Q)=>{if(Q.type!=="message-added"||Q.message.role!=="user")return;let J=e3({snapshot:Q.snapshot},dG(Q.message.content));Z({...E0(J,W),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function X5($){let W=GN($.workspacePath);if(!Object.values(W).some((G)=>G.length>0))return;let Q=async(G,K)=>{let F=W[K]??[];if(F.length===0)return;S2({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...E0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...E0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=W.prompt_submit??[];if(K.length>0)S2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},j=async(G)=>{let K=W.tool_call??[];if(K.length===0)return;return KN({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...E0(G,$),hookName:"tool_call",iteration:G.iteration,tool_call:{id:G.call.id,name:G.call.name,input:G.call.input},preToolUse:{toolName:G.call.name,parameters:$Z(G.call.input)}}})},X=async(G)=>{let K=W.tool_result??[];if(K.length===0)return;S2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:$Z(G.record.input),result:typeof G.record.output==="string"?G.record.output:JSON.stringify(G.record.output),success:!G.record.error,executionTimeMs:G.record.durationMs}}})},Y=async(G)=>{let K=W.agent_end??[];if(K.length===0)return;S2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"agent_end",iteration:G.iteration,turn:G.turn,taskComplete:{taskMetadata:{}}}})},V=async(G)=>{let K=W.agent_error??[];if(K.length===0)return;S2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},B=async(G)=>{if(t3(G.reason)){let F=W.agent_abort??[];if(F.length>0)S2({commands:F,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=W.session_shutdown??[];if(K.length===0)return;S2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...E0(G,$),hookName:"session_shutdown",reason:G.reason}})},H={};if((W.agent_start?.length??0)>0||(W.agent_resume?.length??0)>0||(W.prompt_submit?.length??0)>0){if((W.agent_start?.length??0)>0||(W.agent_resume?.length??0)>0)H.beforeRun=async(G)=>{let K=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await Q(b$(G.snapshot),K);return};if((W.prompt_submit?.length??0)>0)H.onEvent=async(G)=>{if(G.type!=="message-added"||G.message.role!=="user")return;await J(e3({snapshot:G.snapshot},dG(G.message.content)))}}if((W.tool_call?.length??0)>0)H.beforeTool=async(G)=>{let K=await j(cG(G));return FN(K)};if((W.tool_result?.length??0)>0)H.afterTool=async(G)=>{await X(uG(G));return};if((W.agent_end?.length??0)>0)H.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await Y({...b$(G),iteration:K.iterations,turn:{outputText:K.outputText,status:K.status}})};if((W.agent_error?.length??0)>0||(W.agent_abort?.length??0)>0||(W.session_shutdown?.length??0)>0){let G=H.afterRun;H.afterRun=async(K)=>{await G?.(K);let{snapshot:F,result:A}=K;if(A.status==="aborted"||t3(A.error?.message)){await B({...b$(F),reason:A.error?.message});return}if(A.error)await V({...b$(F),iteration:A.iterations,error:A.error})}}return H}function t8($){return a8("core.hook_config_files",X5($))}function b2($,W){let Z=$.map((Q)=>Q[W]).filter((Q)=>typeof Q==="function");if(Z.length===0)return;return async(Q)=>{let J;for(let j of Z){let X=await j(Q);if(!X||typeof X!=="object")continue;let Y=X;J={...J??{},...Y,stop:J?.stop===!0||Y.stop===!0?!0:Y.stop,options:J?.options||Y.options?{...J?.options??{},...Y.options??{}}:void 0}}return J}}function y2($){let W=$.filter((Z)=>Z!==void 0);if(W.length===0)return;return{beforeRun:b2(W,"beforeRun"),afterRun:b2(W,"afterRun"),beforeModel:b2(W,"beforeModel"),afterModel:b2(W,"afterModel"),beforeTool:b2(W,"beforeTool"),afterTool:b2(W,"afterTool"),onEvent:b2(W,"onEvent")}}var lG={};w(lG,{normalizeRuntimeCapabilities:()=>w0});function w0(...$){let W,Z;for(let J of $){if(!J)continue;if(J.toolExecutors)W={...W??{},...J.toolExecutors};if(J.requestToolApproval)Z=J.requestToolApproval}let Q=W&&Object.keys(W).length>0;if(!Q&&!Z)return;return{...Q?{toolExecutors:W}:{},...Z?{requestToolApproval:Z}:{}}}var eG={};w(eG,{toProviderConfig:()=>s0,emptyStoredProviderSettings:()=>k$,StoredProviderSettingsSchema:()=>Z6,StoredProviderSettingsEntrySchema:()=>qZ,ProviderSettingsSchemaTyped:()=>W6});import{z as h$}from"zod";var tG={};w(tG,{toProviderConfig:()=>s0,safeParseSettings:()=>zZ,safeCreateProviderConfig:()=>HJ,parseSettings:()=>TZ,normalizeProviderId:()=>$6,isBuiltInProviderId:()=>VJ,createProviderConfig:()=>BJ,SapSettingsSchema:()=>_Z,ReasoningSettingsSchema:()=>AZ,ProviderSettingsSchema:()=>y$,ProviderProtocolSchema:()=>GZ,ProviderIdSchema:()=>G5,ProviderClientSchema:()=>KZ,OcaSettingsSchema:()=>LZ,ModelCatalogSettingsSchema:()=>OZ,GcpSettingsSchema:()=>fZ,BUILT_IN_PROVIDER_IDS:()=>YJ,BUILT_IN_PROVIDER:()=>H5,AzureSettingsSchema:()=>DZ,AwsSettingsSchema:()=>UZ,AuthSettingsSchema:()=>FZ});import*as o0 from"@cline/llms";import{z as E}from"zod";var sG={};w(sG,{resolveProviderConfig:()=>B5,getProviderConfig:()=>HZ,getLiveModelsCatalog:()=>e8,clearPublicModelsCatalogCache:()=>IN,clearPrivateModelsCatalogCache:()=>XJ,clearLiveModelsCatalogCache:()=>jJ,OPENAI_COMPATIBLE_PROVIDERS:()=>V5,DEFAULT_MODELS_CATALOG_URL:()=>XZ});import*as e from"@cline/llms";function WJ($){if(!Array.isArray($))return[];return $.map((W)=>{if(typeof W==="string")return W.trim();if(W&&typeof W==="object"){let Z=W;for(let Q of[Z.id,Z.name,Z.model])if(typeof Q==="string"&&Q.trim())return Q.trim()}return""}).filter((W)=>W.length>0)}function AN($,W){let Z=WJ($);if(Z.length>0)return Z;if(!$||typeof $!=="object")return[];let Q=$,J=WJ(Q.data??Q.models);if(J.length>0)return J;if(Q.models&&typeof Q.models==="object"&&!Array.isArray(Q.models)){let X=Object.keys(Q.models).filter((Y)=>Y.trim().length>0);if(X.length>0)return X}let j=Q.providers?.[W];if(j&&typeof j==="object"){let Y=WJ(j.models??j);if(Y.length>0)return Y}return[]}async function WZ($,W){let Z=await fetch($,{method:"GET"});if(!Z.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Z.status}`);return AN(await Z.json(),W)}function pG($){return $.replace(/\/+$/,"")}function ZZ($,W,Z){let Q=Z?.trim();if(!Q)return;let J=$?.trim();if(!J||!W?.trim())return Q;try{let j=new URL(Q),X=new URL(W),Y=new URL(J);if(j.origin!==X.origin)return Q;let V=pG(X.pathname),B=pG(Y.pathname);if(V&&j.pathname.startsWith(`${V}/`)){let H=j.pathname.slice(V.length);Y.pathname=`${B}${H}`}else Y.pathname=j.pathname;return Y.search=j.search,Y.hash=j.hash,Y.toString()}catch{return Q}}function UN($){return Object.fromEntries(Object.entries($).map(([W,Z])=>[W,{...Z}]))}function fN($){if($.baseUrl.length===0)return!1;switch($.client){case"openai-compatible":case"openai":case"openai-r1":case"fetch":return!0;default:return $.protocol==="openai-chat"}}var DN=Object.values(e.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:UN($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),iG=Object.fromEntries(DN.map(($)=>[$.id,$]));function _N($){return iG[$]}function LN(){return Object.fromEntries(Object.entries(iG).filter(([,$])=>fN($)))}function nG($=[]){let W=$.flatMap((Z)=>{switch(Z){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Z];default:return[]}});return W.length>0?W:void 0}var XZ="https://models.dev/api.json",ON=600000,aG=300000,TN=5000,jZ=new Map,Y5=new Map,ZJ=new Map,QZ=new Map;async function zN(){return e.getGeneratedProviderModels()}async function qN($,W={},Z={},Q={},J={},j={}){if($==="litellm")return e.sortModelsByReleaseDate(Q);let X=await zN(),Y=e.resolveProviderModelCatalogKeys($),V=Object.assign({},...Y.map((K)=>X[K]??{})),B=Boolean(e.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),H=Object.keys(J).length>0;if(B&&H)return e.sortModelsByReleaseDate({...J,...j});if($==="openai-codex")return e.sortModelsByReleaseDate({...W,...e.filterOpenAICodexModels(Z),...J,...j});if($==="cline-pass"&&Object.keys(Z).length>0)return{...Z,...j};let G=e.sortModelsByReleaseDate({...V,...W,...Z,...Q,...J});if($==="cline")return e.sortModelsByReleaseDate({...e.preferCanonicalModelIds(G,e.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...j});return e.sortModelsByReleaseDate({...G,...j})}function MN($,W){let Z=e.resolveProviderModelCatalogKeys($);return Object.assign({},...Z.map((Q)=>W[Q]??{}))}function YZ($){let W=$?.trim();return W&&W.length>0?W:""}function JJ($){let W=$.apiKey?.trim()||$.accessToken?.trim();return W&&W.length>0?W:void 0}function NN($){let W=2166136261;for(let Z=0;Z<$.length;Z+=1)W^=$.charCodeAt(Z),W+=(W<<1)+(W<<4)+(W<<7)+(W<<8)+(W<<24);return(W>>>0).toString(16)}function RN($,W){return`${$}:${YZ(W.baseUrl)}:${NN(JJ(W)??"")}`}async function VZ($,W,Z=TN){let Q=new AbortController,J=setTimeout(()=>Q.abort(),Z);try{return await fetch($,{...W,signal:Q.signal})}finally{clearTimeout(J)}}function h2($,W,Z){if(Z&&!$.includes(W))$.push(W)}function BZ($,W){let Z=["streaming","tools"];return h2(Z,"images",Boolean(W.supportsImages)),h2(Z,"prompt-cache",Boolean(W.supportsPromptCache)),h2(Z,"reasoning",Boolean(W.supportsReasoning)),{id:$,name:W.name??$,contextWindow:W.contextWindow,maxInputTokens:W.maxInputTokens,maxTokens:W.maxTokens,capabilities:Z,releaseDate:W.releaseDate,status:"active"}}async function EN($,W){let Z=await VZ("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${W}`,"Content-Type":"application/json"}});if(!Z.ok)throw Error(`Baseten model refresh failed: HTTP ${Z.status}`);let J=(await Z.json())?.data??[],j={};for(let X of J){let Y=X.id?.trim();if(!Y)continue;if(Y.includes("whisper")||Y.includes("tts")||Y.includes("embedding"))continue;let V=X.supported_features??[];j[Y]=BZ(Y,{name:Y,contextWindow:X.context_length,maxInputTokens:X.context_length,maxTokens:X.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return j}function rG($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let W=Number($);return Number.isFinite(W)?W:void 0}return}async function wN($,W){let Z=await VZ("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":W}});if(!Z.ok)throw Error(`Hicap model refresh failed: HTTP ${Z.status}`);let J=(await Z.json())?.data??[],j={};for(let X of J){let Y=X.id?.trim();if(!Y)continue;j[Y]=BZ(Y,{name:Y,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return j}async function CN($,W){let Q=`${(YZ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await VZ(Q,{method:"GET",headers:{Authorization:`Bearer ${W}`,accept:"application/json"}});if(!J.ok)throw Error(`Poolside model refresh failed: HTTP ${J.status}`);let X=(await J.json())?.data??[],Y={};for(let V of X){let B=V.id?.trim();if(!B)continue;let H=V.supported_features??[],G=V.supported_sampling_parameters??[],K=V.input_modalities??[],F=["streaming"];h2(F,"tools",H.includes("tools")),h2(F,"reasoning",H.includes("reasoning")),h2(F,"temperature",G.includes("temperature")),h2(F,"images",K.includes("image"));let A={input:rG(V.pricing?.prompt),output:rG(V.pricing?.completion)};Y[B]={id:B,name:V.name??B,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:A.input!==void 0||A.output!==void 0?A:void 0,status:"active"}}return Y}function PN($){let W=YZ($).replace(/\/+$/,"");if(!W)return"http://localhost:4000";return W.endsWith("/v1")?W.slice(0,-3):W}function SN($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function bN($){let W=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Z=500,Q=W?`: ${W.slice(0,500)}${W.length>500?"...":""}`:"";return`HTTP ${$.status}${Q}`}async function yN($,W){let Z=PN($.baseUrl),Q=[],J=[["x-litellm-api-key",{"x-litellm-api-key":W}],["Authorization",{Authorization:`Bearer ${W}`}]];for(let j of SN(Z))for(let[X,Y]of J)try{let V=await VZ(j,{method:"GET",headers:{accept:"application/json",...Y}});if(V.ok){let H=(await V.json())?.data??[],G={};for(let K of H){let F=K.model_name?.trim(),f=K.litellm_params?.model?.trim()||F;if(!f)continue;let U=K.model_info,_=BZ(f,{name:F??f,maxTokens:U?.max_output_tokens??U?.max_tokens,maxInputTokens:U?.max_input_tokens??U?.max_tokens,supportsImages:U?.supports_vision,supportsPromptCache:U?.supports_prompt_caching,supportsReasoning:U?.supports_reasoning});if(G[f]=_,F)G[F]={..._,id:F,name:F}}return G}Q.push(`${new URL(j).pathname} (${X}): ${await bN(V)}`)}catch(V){let B=V instanceof Error?V.message:String(V);Q.push(`${new URL(j).pathname} (${X}): ${B}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${Q.join("; ")}`)}var oG={baseten:EN,hicap:wN,litellm:yN,poolside:CN},QJ=new Map,JZ=new Map;function hN($,W){return`${$}:${YZ(W.baseUrl)}`}async function kN($,W,Z){let Q=e.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=ZZ(Z.baseUrl,Q?.provider.baseUrl,Q?.provider.modelsSourceUrl);if(!J)return{};let j=W?.cacheTtlMs??aG,X=hN($,Z),Y=Date.now(),V=QJ.get(X);if(V&&V.expiresAt>Y)return V.data;let B=JZ.get(X);if(B)return B;let H=WZ(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,BZ(F,{name:F})]));return QJ.set(X,{data:K,expiresAt:Y+j}),K}).finally(()=>{JZ.delete(X)});return JZ.set(X,H),H}function IN(){QJ.clear(),JZ.clear()}async function xN($,W){let Z=JJ(W);if(!Z)return{};let Q=oG[$];if(!Q)return{};return Q(W,Z)}function gN($,W,Z){if(!Z)return!1;if(!oG[$])return!1;if(W?.loadPrivateOnAuth===!1)return!1;return Boolean(JJ(Z))}async function mN($,W,Z){let Q=W?.cacheTtlMs??aG,J=RN($,Z),j=Date.now(),X=ZJ.get(J);if(X&&X.expiresAt>j)return X.data;let Y=QZ.get(J);if(Y)return Y;let V=xN($,Z).then((B)=>{return ZJ.set(J,{data:B,expiresAt:j+Q}),B}).finally(()=>{QZ.delete(J)});return QZ.set(J,V),V}async function vN($){return e.fetchLiveProviderModels($,globalThis.fetch)}async function e8($={}){let W=$.url??XZ,Z=$.cacheTtlMs??ON,Q=Date.now(),J=jZ.get(W);if(J&&J.expiresAt>Q)return J.data;let j=Y5.get(W);if(j)return j;let X=vN(W).then((Y)=>{return jZ.set(W,{data:Y,expiresAt:Q+Z}),Y}).finally(()=>{Y5.delete(W)});return Y5.set(W,X),X}function jJ($){if($){jZ.delete($),Y5.delete($);return}jZ.clear(),Y5.clear()}function XJ(){ZJ.clear(),QZ.clear()}function cN($){return Object.fromEntries(Object.entries($).map(([W,Z])=>[W,{baseUrl:Z.baseUrl,modelId:Z.modelId,capabilities:nG(Z.capabilities)}]))}var V5=cN(LN());function HZ($){let W=_N($);if(!W)return;return{baseUrl:W.baseUrl||void 0,modelId:W.modelId,knownModels:W.knownModels,capabilities:nG(W.capabilities)}}async function B5($,W,Z){let Q=HZ($);if(!Q)return;try{let J=W?.loadLatestOnInit?await e8(W):void 0,j=J?MN($,J):{},X=Z&&gN($,W,Z)?await mN($,W,Z):{},V=Boolean(e.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Z??{providerId:$,modelId:Q.modelId,baseUrl:Q.baseUrl}:Z,B=V?await kN($,W,V).catch(()=>({})):{},H=await qN($,Q.knownModels,j,X,B,Z?.knownModels);return{...Q,knownModels:H}}catch(J){if(W?.failOnError)throw J;if($==="litellm")return{...Q,knownModels:{}};return Q}}var H5=o0.BUILT_IN_PROVIDER,YJ=o0.BUILT_IN_PROVIDER_IDS,VJ=o0.isBuiltInProviderId,$6=o0.normalizeProviderId,G5=E.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),GZ=E.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),KZ=E.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),FZ=E.object({apiKey:E.string().optional(),accessToken:E.string().optional(),refreshToken:E.string().optional(),expiresAt:E.number().int().positive().optional(),accountId:E.string().optional(),organizationId:E.string().optional(),organizationName:E.string().optional(),memberId:E.string().optional(),metadata:E.record(E.string(),E.unknown()).optional()}),uN=E.enum(["none","low","medium","high","xhigh"]),AZ=E.object({enabled:E.boolean().optional(),effort:uN.optional(),budgetTokens:E.number().int().positive().optional()}),UZ=E.object({accessKey:E.string().optional(),secretKey:E.string().optional(),sessionToken:E.string().optional(),region:E.string().optional(),profile:E.string().optional(),authentication:E.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:E.boolean().optional(),useCrossRegionInference:E.boolean().optional(),useGlobalInference:E.boolean().optional(),endpoint:E.string().url().optional(),customModelBaseId:E.string().optional()}),fZ=E.object({projectId:E.string().optional(),region:E.string().optional()}),DZ=E.object({apiVersion:E.string().optional(),useIdentity:E.boolean().optional()}),_Z=E.object({clientId:E.string().optional(),clientSecret:E.string().optional(),tokenUrl:E.string().url().optional(),resourceGroup:E.string().optional(),deploymentId:E.string().optional(),useOrchestrationMode:E.boolean().optional(),api:E.enum(["orchestration","foundation-models"]).optional(),defaultSettings:E.record(E.string(),E.unknown()).optional()}),LZ=E.object({mode:E.enum(["internal","external"]).optional(),usePromptCache:E.boolean().optional()}),OZ=E.object({loadLatestOnInit:E.boolean().optional(),loadPrivateOnAuth:E.boolean().optional(),url:E.string().url().optional(),cacheTtlMs:E.number().int().positive().optional(),failOnError:E.boolean().optional()}),y$=E.object({provider:G5,apiKey:E.string().optional(),auth:FZ.optional(),model:E.string().optional(),protocol:GZ.optional(),client:KZ.optional(),routingProviderId:G5.optional(),maxTokens:E.number().int().positive().optional(),contextWindow:E.number().int().positive().optional(),baseUrl:E.string().url().optional(),headers:E.record(E.string(),E.string()).optional(),timeout:E.number().int().positive().optional(),reasoning:AZ.optional(),aws:UZ.optional(),gcp:fZ.optional(),azure:DZ.optional(),sap:_Z.optional(),oca:LZ.optional(),region:E.string().optional(),apiLine:E.enum(["china","international"]).optional(),capabilities:E.array(E.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:OZ.optional()});function TZ($){return y$.parse($)}function zZ($){return y$.safeParse($)}function dN($){return $.protocol==="openai-responses"||$.client==="openai"}function s0($,W={}){let Z=$.provider,Q=$6(Z),J=W.includeKnownModels!==!1,j=$.reasoning?.effort||"none",X=j==="none"?void 0:j,Y=V5[Q],V=Object.assign({},...o0.resolveProviderModelCatalogKeys(Q).map((f)=>o0.getGeneratedModelsForProvider(f))),B=Object.keys(V)[0],H=T8(Q,$),G=$.baseUrl??(Q==="oca"?$.oca?.mode==="internal"?X9:Y9:Y?.baseUrl),K=$.routingProviderId??(dN($)&&Q!==H5.OPENAI_NATIVE?H5.OPENAI_NATIVE:void 0),F=J?Y?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,A={providerId:Z,clientType:$.client,routingProviderId:K,modelId:$.model??Y?.modelId??B??"default",...J?{knownModels:F}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:X,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??Y?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(A).filter(([f,U])=>U!==void 0))}function BJ($){let W=TZ($);return s0(W)}function HJ($){let W=zZ($);if(W.success)return{success:!0,config:s0(W.data)};return{success:!1,error:W.error}}var W6=y$;var qZ=h$.object({settings:y$,updatedAt:h$.string().datetime(),tokenSource:h$.enum(["manual","oauth","migration"]).default("manual")}),Z6=h$.object({version:h$.literal(1),lastUsedProvider:h$.string().min(1).optional(),providers:h$.record(h$.string(),qZ)});function k$(){return{version:1,providers:{}}}U1();var YK={};w(YK,{InMemoryWorkspaceManager:()=>J6});import{upsertWorkspaceInfo as rN,WorkspaceManifestSchema as AJ}from"@cline/shared";var XK={};w(XK,{withSessionGitMetadata:()=>NZ,readSessionGitMetadata:()=>JK,readGitWorkspaceState:()=>KJ,normalizeWorkspacePath:()=>R1,hasCurrentSessionGitMetadata:()=>GJ,generateWorkspaceInfoWithDiagnostics:()=>K5,generateWorkspaceInfo:()=>Q6,buildWorkspaceMetadataWithInfo:()=>FJ,buildWorkspaceMetadata:()=>F5});import{basename as lN,resolve as pN}from"node:path";import{performance as $K}from"node:perf_hooks";import{processWorkspaceInfo as ZK}from"@cline/shared";import QK from"simple-git";function JK($){let W=$?.git;if(!W||typeof W!=="object"||Array.isArray(W))return{};let Z=W;return{...typeof Z.url==="string"&&Z.url.trim()?{url:Z.url.trim()}:{},...typeof Z.branch==="string"&&Z.branch.trim()?{branch:Z.branch.trim()}:{}}}function NZ($,W){let Z={...$??{}};if(!W.url&&!W.branch)return delete Z.git,Object.keys(Z).length>0?Z:void 0;let J={...Z.git&&typeof Z.git==="object"&&!Array.isArray(Z.git)?Z.git:{}};if(W.url)J.url=W.url;else delete J.url;if(W.branch)J.branch=W.branch;else delete J.branch;return Z.git=J,Z}function GJ($,W){let Z=JK($);return Z.url===W.url&&Z.branch===W.branch}function jK($){let W=$.find(({name:Z})=>Z==="origin")??$[0];return(W?.refs.fetch||W?.refs.push)?.trim()||void 0}function R1($){return pN($)}async function Q6($){return(await K5($)).info}function WK($){let W=$ instanceof Error?$.message:String($);return/unknown revision|ambiguous argument|does not have any commits yet/i.test(W)}function MZ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function K5($){let W=R1($),Z={rootPath:W,hint:lN(W)},Q={},J;try{let j=QK({baseDir:W});if(!await j.checkIsRepo())return{info:Z,vcsType:"none",gitState:Q};try{let Y=await j.getRemotes(!0);if(Y.length>0){let V=Y.map((H)=>{let G=H.refs.fetch||H.refs.push;return`${H.name}: ${G}`});Z.associatedRemoteUrls=V;let B=jK(Y);if(B)Q.url=B}}catch(Y){J??=MZ(Y)}try{let Y=(await j.revparse(["HEAD"])).trim();if(Y.length>0)Z.latestGitCommitHash=Y}catch(Y){if(!WK(Y))J??=MZ(Y)}try{let Y=(await j.branch()).current.trim();if(Y.length>0)Z.latestGitBranchName=Y,Q.branch=Y}catch(Y){if(!WK(Y))J??=MZ(Y)}return{info:Z,vcsType:"git",gitState:Q,error:J}}catch(j){return{info:Z,vcsType:"none",gitState:Q,error:MZ(j)}}}async function KJ($){try{let W=QK({baseDir:R1($)});if(!await W.checkIsRepo())return{};let[Z,Q]=await Promise.all([W.getRemotes(!0),W.branch()]),J=jK(Z),j=Q.current.trim();return{...J?{url:J}:{},...j?{branch:j}:{}}}catch{return}}async function F5($){let W=await Q6($);return ZK(W)}async function FJ($){let W=$K.now(),Z=await K5($),Q=$K.now()-W,J=Z.info;return{workspaceInfo:J,workspaceMetadata:ZK(J),durationMs:Q,vcsType:Z.vcsType,gitState:Z.gitState,initError:Z.error}}class J6{manifest;listeners=new Set;constructor($){this.manifest=AJ.parse($??{workspaces:{}})}async addWorkspacePath($){let W=await Q6($);return this.manifest=rN(this.manifest,W),this.emit({type:"workspace_added",workspace:W}),W}async switchWorkspace($){let W=R1($),Z=this.manifest.workspaces[W];if(Z)return this.manifest=AJ.parse({...this.manifest,currentWorkspacePath:W}),this.emit({type:"workspace_switched",workspace:Z}),Z;let Q=await this.addWorkspacePath(W);return this.manifest=AJ.parse({...this.manifest,currentWorkspacePath:Q.rootPath}),this.emit({type:"workspace_switched",workspace:Q}),Q}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let W=R1($);return this.manifest.workspaces[W]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let W of this.listeners)W($)}}O0();import{createHash as iN}from"node:crypto";var VK=new Set,BK=new Set;function nN($){return iN("sha256").update($).digest("hex")}function aN($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function HK($){if(!$.telemetry)return;let W=nN($.rootPath),Z=$.rootCount??1;if(!VK.has(W))VK.add(W),mW($.telemetry,{root_count:Z,vcs_types:aN($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!BK.has(W)){BK.add(W);let Q=Error($.initError.message);Q.name=$.initError.errorType||"Error",vW($.telemetry,Q,{fallback_to_single_root:!0,workspace_count:Z})}}function tN($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function eN($,W,Z){if(W.length>0)for(let j of W)Z?.log(j.message,{severity:"warn"});if($.length===0)return;let Q=$.slice(0,3).map(tN).join("; "),J=$.length>3?`; and ${$.length-3} more`:"";Z?.log(`Some plugins failed to initialize. ${Q}${J}. Use --verbose for more details.`,{severity:"warn"});for(let j of $)Z?.log(`Plugin initialization failed (${j.phase}) for ${j.pluginPath}`,{severity:"warn",stack:j.stack,pluginPath:j.pluginPath,pluginName:j.pluginName})}function $R($,W){let Z=typeof $.thinking==="boolean",Q=typeof $.reasoningEffort==="string";if(!Z&&!Q)return W;return{...W??{},...Z?{enabled:$.thinking}:{},...Q?{effort:$.reasoningEffort}:{}}}function GK($,W){return sN($,W)}function WR($){let W=0;for(let Z of $??[]){if(Z.role!=="user")continue;if(("metadata"in Z&&Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0)?.kind==="recovery_notice")continue;W+=1}return W}function ZR($,W,Z,Q,J,j){let X=Q.getProviderSettings($.providerId),Y=J||X?.modelCatalog?{...J??{},...X?.modelCatalog??{}}:void 0,V=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,B=oN({providerId:$.providerId,sessionId:W,source:Z,defaultSource:F0.CLI,client:{name:$.extensionContext?.client?.name,version:$.extensionContext?.client?.version,versionHeaderFallback:$.headers?.["X-CLIENT-VERSION"],platform:$.extensionContext?.client?.platform,platformVersion:$.extensionContext?.client?.platformVersion,isMultiRoot:$.extensionContext?.client?.isMultiRoot},coreVersion:u8,openAiCodex:{accountId:V?.accountId??X?.auth?.accountId,accessToken:V?.accessToken??$.apiKey??X?.auth?.accessToken??X?.apiKey,userAgentVersion:process.env.npm_package_version},headers:{stored:X?.headers,config:$.headers,session:V?.headers}}),H={...X??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??X?.apiKey,baseUrl:$.baseUrl??X?.baseUrl,headers:void 0,reasoning:$R($,X?.reasoning),modelCatalog:Y},G={...s0(H),...V??{}};if(B)G.headers=B;if($.knownModels)G.knownModels=$.knownModels;if($.extensionContext)G.extensionContext=$.extensionContext;let F=$.fetch??G.fetch??j;if(F)G.fetch=F;return G}async function KK($){let{input:W,sessionId:Z,providerSettingsManager:Q,defaultTelemetry:J,defaultCapabilities:j,defaultToolPolicies:X,defaultFetch:Y,onPluginEvent:V,onTeamEvent:B,createSubAgentLifecycleCallbacks:H,createSpawnTool:G,localRuntime:K,readSessionMetadata:F,writeSessionMetadata:A}=$,f=o1(W.config),{modelCatalogDefaults:U,userInstructionService:_,configExtensions:D,onTeamRestored:M,...T}=K??{},O=Object.keys(T).length>0?T:void 0,{workspaceInfo:L,workspaceMetadata:C,gitState:R,durationMs:p,vcsType:x,initError:P}=await FJ(f),r=O?.extensionContext,d={...r??{},workspace:{...L,...r?.workspace??{}},session:{...r?.session??{},sessionId:Z},logger:r?.logger??O?.logger,telemetry:r?.telemetry??O?.telemetry??J};HK({telemetry:d.telemetry,rootPath:L.rootPath,workspaceInfo:L,rootCount:1,vcsType:x,durationMs:p,initError:P,featureFlagEnabled:!0});let I1=t8({cwd:W.config.cwd,workspacePath:f,rootSessionId:Z,logger:O?.logger,workspaceInfo:L}),$2=ZG(O?.hooks)?void 0:s8({rootSessionId:Z,workspacePath:f,workspaceInfo:L}),F$=y2([O?.hooks,$2]),k0;if(GK(D,"plugins"))try{k0=await n8({pluginPaths:O?.pluginPaths,workspacePath:f,cwd:W.config.cwd,onEvent:V,providerId:W.config.providerId,modelId:W.config.modelId,workspaceInfo:L,session:d.session,client:d.client,user:d.user,logger:d.logger,telemetry:d.telemetry,automation:d.automation}),eN(k0.failures,k0.warnings,O?.logger)}catch(s6){let F8=s6 instanceof Error?s6.message:String(s6);O?.logger?.log?.(`plugin loading failed; continuing without plugins (${F8})`)}let O1=C3(I1?[I1]:void 0,C3(O?.extensions,b9(k0?.extensions))),K8=GK(D,"plugins")?t1(k0?.pluginPaths??[]):void 0,V0={...W.config,...O??{},sessionId:Z,hooks:F$,extensions:O1,extensionContext:d,telemetry:d.telemetry},l0=ZR(V0,Z,W.source,Q,U,Y),V1=y2([V0.hooks,V0.checkpoint?.enabled===!0?kG({cwd:V0.cwd,sessionId:Z,logger:V0.logger,createCheckpoint:V0.checkpoint?.createCheckpoint,initialRunCount:WR(W.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),y={...V0,providerConfig:l0,workspaceMetadata:C,hooks:V1},B1=W.toolPolicies??V0.toolPolicies??X,k=w0(j,W.capabilities),$0=k?.requestToolApproval,L0=k?.toolExecutors,q0=H?.(y),xW=new J6({currentWorkspacePath:L.rootPath,workspaces:{[L.rootPath]:L}});return{effectiveInput:W,config:y,providerConfig:l0,workspaceMetadata:C,workspaceInfo:L,gitState:R,extensions:O1,hooks:V1,toolPolicies:B1,requestToolApproval:$0,pluginSandboxShutdown:k0?.shutdown,runtimeBuilderInput:{config:y,hooks:V1,extensions:O1,onTeamEvent:B,createSpawnTool:G,onTeamRestored:M,onSubAgentEvent:q0?.onSubAgentEvent,onSubAgentStart:q0?.onSubAgentStart,onSubAgentEnd:q0?.onSubAgentEnd,userInstructionService:_,pluginSkillDirectories:K8,configExtensions:D,toolExecutors:L0,toolPolicies:B1,workspaceManager:xW,logger:y.logger,telemetry:y.telemetry,requestToolApproval:$0}}}import{existsSync as RZ,mkdirSync as QR,readdirSync as JR,rmdirSync as jR,rmSync as XR,unlinkSync as YR}from"node:fs";import{dirname as FK,join as A5}from"node:path";function X0(){return new Date().toISOString()}function U5($){if(!$||!RZ($))return;try{YR($)}catch{}}function VR($){let W=m8($);if(W)return{rootSessionId:W.rootSessionId,fileStem:`${W.agentId}__${W.teamTaskId}`};let Z=l4($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:Z.agentId};return{rootSessionId:$,fileStem:$}}class UJ{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return A5(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let W=this.sessionArtifactsDir($);if(!RZ(W))QR(W,{recursive:!0});return W}sessionMessagesPath($){return A5(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionCompactionPath($){return A5(this.sessionArtifactsDir($),`${$}.compaction.json`)}sessionManifestPath($,W=!1){let Z=W?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return A5(Z,`${$}.json`)}removeSessionDirIfEmpty($){let W=this.sessionArtifactsDir($),Z=this.ensureSessionsDir();while(W.startsWith(Z)&&W!==Z){if(!RZ(W)){W=FK(W);continue}try{if(JR(W).length>0)break;jR(W)}catch{break}W=FK(W)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!RZ($))return;try{XR($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,W,Z){let{rootSessionId:Q,fileStem:J}=VR($),j=this.sessionArtifactsDir(Q);return{messagesPath:A5(j,`${J}.messages.json`)}}}import{resolveDocumentsExtensionPath as BR}from"@cline/shared/storage";O0();function AK($,W,Z,Q,J){if(Z)uW($.telemetry,{ulid:W,apiProvider:$.providerId,...J});else cW($.telemetry,{ulid:W,apiProvider:$.providerId,...J});HR($.telemetry,{workspacePath:Q})}function HR($,W){let Z=BR("Hooks"),Q=S$(W.workspacePath),J=new Map;for(let j of Q){let X=j.hookEventName??"unknown",Y=J.get(X)??{global:0,workspace:0};if(j.path===Z||j.path.startsWith(`${Z}/`))Y.global+=1;else Y.workspace+=1;J.set(X,Y)}for(let[j,X]of J.entries())sW($,j,X.global,X.workspace)}function UK($,W){for(let Z of W.mentions)aW($,Z,W.matchedFiles.includes(Z)?1:0,"file",!W.matchedFiles.includes(Z));for(let Z of W.matchedFiles)iW($,"file",Z.length);for(let Z of W.ignoredMentions)nW($,"file","not_found",Z)}var f_={};w(f_,{ProviderSettingsManager:()=>X1});import{chmodSync as __,existsSync as NY,mkdirSync as am,readFileSync as om,renameSync as sm,rmSync as tm,writeFileSync as em}from"node:fs";import{basename as L_,dirname as RY}from"node:path";import{resolveProviderSettingsPath as $v}from"@cline/shared/storage";var q={};w(q,{writeHubDiscovery:()=>WQ,writeGlobalSettings:()=>M1,withHubStartupLock:()=>ZQ,verifyHubConnection:()=>w1,updateMcpSettingsFileSync:()=>f1,updateMcpSettingsFile:()=>G6,updateMcpServerOAuthStateAsync:()=>y5,updateMcpServerOAuthState:()=>m2,updateLocalProvider:()=>G7,uninstallPlugin:()=>RW,uninstallMarketplaceSkill:()=>rQ,uninstallMarketplacePlugin:()=>iQ,uninstallMarketplaceMcpServerFromSettings:()=>lQ,uninstallMarketplaceEntry:()=>lX,truncateNotificationBody:()=>fW,truncateCommandOutput:()=>H2,toggleDisabledTool:()=>P9,toTeamProgressLifecycleEvent:()=>R6,toProviderConfig:()=>s0,toHubStatusUrl:()=>Xj,toHubHealthUrl:()=>QQ,toHookConfigFileName:()=>j5,syncPluginMcpServersToSettings:()=>MW,summarizeUsageFromMessages:()=>c8,stopLocalHubServerGracefully:()=>_j,startLocalOAuthServer:()=>G1,startHubWebSocketServer:()=>Y8,startHubServer:()=>lf,startClineDeviceAuth:()=>h7,splitCoreSessionConfig:()=>v5,spawnDetachedHubServerWithRetry:()=>_6,spawnDetachedHubServer:()=>Kj,setTelemetryOptOutGlobally:()=>rB,setSdkLogger:()=>E7,setMcpServerDisabled:()=>x2,setDisabledTools:()=>G3,setDisabledPlugin:()=>$H,setCompactionStrategyGlobally:()=>oB,setAutoUpdateEnabledGlobally:()=>nB,sendHubCommand:()=>xU,sdkDebug:()=>Z0,saveProviderOAuthCredentials:()=>J2,saveLocalProviderSettings:()=>jY,saveLocalProviderOAuthCredentials:()=>BY,sanitizeSessionToken:()=>R2,safeParseSettings:()=>zZ,safeCreateProviderConfig:()=>HJ,runSubprocessEvent:()=>y6,runHook:()=>k6,reviveTeamStateDates:()=>m9,restartLocalHubIfIdleAfterStartupTimeout:()=>VQ,resolveWorkspaceHubOwnerContext:()=>GA,resolveWorkflowsConfigSearchPaths:()=>R5,resolveSkillsConfigSearchPaths:()=>M5,resolveSharedHubOwnerContext:()=>m0,resolveSessionBackend:()=>mj,resolveRulesConfigSearchPaths:()=>N5,resolveProviderConfig:()=>B5,resolveProviderApiKeyFromSettings:()=>c7,resolveProductionHubOwnerContext:()=>Q1,resolvePluginSkillDirectoriesFromPaths:()=>t1,resolvePluginConfigSearchPaths:()=>W5,resolveMcpServerRegistrations:()=>t0,resolveMarketplaceMcpServerName:()=>wW,resolveLocalClineAuthToken:()=>GY,resolveHubUrl:()=>aj,resolveHubOwnerContext:()=>Q$,resolveHubEndpointOptions:()=>Z1,resolveHubBuildId:()=>$Q,resolveHooksConfigSearchPaths:()=>Q5,resolveDisabledToolNames:()=>N1,resolveDisabledPluginPaths:()=>I4,resolveDefaultMcpSettingsPath:()=>Q0,resolveDefaultHubPort:()=>D6,resolveDefaultHubPathname:()=>Gj,resolveDefaultHubHost:()=>Hj,resolveCoreSelectedToolIds:()=>c9,resolveCoreDistinctId:()=>v0,resolveCompatibleLocalHubUrl:()=>e5,resolveClineDir:()=>YA,resolveClineDataDir:()=>i2,resolveAndLoadAgentPlugins:()=>n8,resolveAgentPluginPaths:()=>s1,requestHubShutdown:()=>t5,requestDesktopToolApproval:()=>wX,removePluginMcpServersFromSettings:()=>NW,rememberRecoverableLocalHubUrl:()=>d$,registerRemoteConfigSessionBlobUpload:()=>kQ,registerMcpServersFromSettingsFile:()=>v2,registerDisposable:()=>pm,refreshProviderModelsFromSource:()=>XY,refreshOpenAICodexToken:()=>j9,refreshOcaToken:()=>B9,refreshClineToken:()=>Q9,readSessionCheckpointHistory:()=>Z8,readRemoteConfigSessionBlobUploadMetadata:()=>LX,readHubDiscovery:()=>_0,readGlobalSettings:()=>N0,readCompactionStrategyGlobally:()=>aB,readBearerToken:()=>wQ,projectSessionCompactionState:()=>j2,probeHubServer:()=>J$,probeHubConnection:()=>IU,prewarmFileIndex:()=>q9,prewarmDetachedHubServer:()=>jQ,prepareRemoteConfigCoreIntegration:()=>TX,parseWorkflowConfigFromMarkdown:()=>q5,parseUserCommandEnvelope:()=>lm,parseSkillConfigFromMarkdown:()=>T5,parseSettings:()=>TZ,parseSessionCompactionState:()=>K1,parseRuleConfigFromMarkdown:()=>z5,parsePluginSource:()=>Z7,parseMcpInstallArgs:()=>qW,parseHookEventPayload:()=>h6,parseConfiguredAgentConfig:()=>QW,normalizeWorkspacePath:()=>R1,normalizeUserInput:()=>dm,normalizeSdkError:()=>um,normalizeRuntimeCapabilities:()=>w0,normalizeProviderId:()=>$6,normalizeOAuthProvider:()=>YY,normalizeHubWebSocketUrl:()=>l$,noopBasicLogger:()=>cm,migrateLegacyProviderSettings:()=>yW,mergeRulesForSystemPrompt:()=>B6,mergeAgentHooks:()=>y2,marketplaceEntryKey:()=>dX,markLocalProviderEnabled:()=>ZY,makeTeamTaskSubSessionId:()=>d4,makeSubSessionId:()=>g8,loginOpenAICodex:()=>Q4,loginOcaOAuth:()=>Y4,loginLocalProvider:()=>VY,loginClineOAuth:()=>W4,loginAndSaveProviderOAuthCredentials:()=>B4,loginAndSaveLocalProviderOAuthCredentials:()=>HY,loadOpenTelemetryAdapter:()=>Am,loadMcpSettingsFile:()=>I2,loadLlmsConfigFromFile:()=>zY,loadConfiguredAgentConfigs:()=>q6,loadAgentPluginsFromPathsWithDiagnostics:()=>C2,loadAgentPluginsFromPaths:()=>r9,loadAgentPluginFromPath:()=>e4,listSessionHistoryFromBackend:()=>Zj,listPluginToolsWithDiagnostics:()=>iZ,listPluginTools:()=>I5,listMcpServerOAuthStatuses:()=>h5,listLocalProviders:()=>QY,listHookConfigFiles:()=>S$,isToolDisabledGlobally:()=>sB,isTelemetryOptedOutGlobally:()=>C9,isSessionNotFoundError:()=>Z$,isRuleEnabled:()=>IZ,isPluginDisabledGlobally:()=>eB,isOfficialPluginSlug:()=>W7,isOAuthProvider:()=>Q2,isMarketplaceSkillInstalled:()=>pQ,isLocalHubOrigin:()=>_X,isLocalHubHostName:()=>CQ,isHubReconnectableTransportError:()=>fj,isHubCommandTimeoutError:()=>YQ,isDiscoveryFilePresent:()=>BA,isClinePassLimitMessage:()=>wm,isClinePassLimitError:()=>Em,isClineOrgIndividualInferenceSubscriptionMessage:()=>Rm,isClineOrgIndividualInferenceSubscriptionError:()=>Nm,isClineNotSubscribedMessage:()=>Mm,isClineNotSubscribedError:()=>qm,isClineAccountActionRequest:()=>EZ,isBuiltInProviderId:()=>VJ,isAutoUpdateEnabledGlobally:()=>iB,installPlugin:()=>oX,installMcpServer:()=>CX,identifyAccount:()=>H1,hashSecret:()=>M0,hasMcpSettingsFile:()=>$$,getValidOpenAICodexCredentials:()=>J4,getValidOcaCredentials:()=>V4,getValidClineCredentials:()=>Z4,getProviderOAuthCredentialsFromSettings:()=>H4,getProviderConfigFields:()=>KY,getProviderConfig:()=>HZ,getProviderAuthStorageId:()=>v7,getProviderAuthHandler:()=>H0,getPersistedProviderApiKey:()=>T8,getMcpServerOAuthState:()=>g2,getMarketplaceSkillCandidates:()=>CW,getLocalProviderModels:()=>JY,getLiveModelsCatalog:()=>e8,getGlobalMarketplaceSkillPaths:()=>PW,getFileIndex:()=>p1,getCurrentContextSize:()=>y3,getCoreHeadlessToolNames:()=>u4,getCoreDefaultEnabledToolIds:()=>v9,getCoreBuiltinToolCatalog:()=>M2,getCoreAcpToolNames:()=>u9,getClinePassSubscriptionUrl:()=>zm,getClineOrgIndividualInferenceSubscriptionMessage:()=>Tm,getClineNotSubscribedMessage:()=>Om,getClineDefaultSystemPrompt:()=>Cm,generateWorkspaceInfoWithDiagnostics:()=>K5,generateWorkspaceInfo:()=>Q6,formatRulesForSystemPrompt:()=>V6,formatProviderOAuthApiKey:()=>u7,formatDisplayUserInput:()=>vm,findInstalledGlobalMarketplaceSkillName:()=>SW,findCheckpointForRun:()=>S6,filterExtensionToolRegistrations:()=>b9,filterDisabledTools:()=>i1,filterDisabledPluginPaths:()=>S9,fetchClineRecommendedModels:()=>OY,extractClinePassLimitMessage:()=>Lm,executeClineAccountAction:()=>wZ,ensureHubWebSocketServer:()=>PQ,ensureHubServer:()=>pf,ensureDetachedHubServer:()=>DA,ensureCustomProvidersLoaded:()=>V7,ensureCompatibleLocalHubUrl:()=>o2,enrichPromptWithMentions:()=>P8,emptyWorkspaceManifest:()=>xm,emptyStoredProviderSettings:()=>k$,discoverPluginModulePaths:()=>Z5,disablePluginMcpServersInSettings:()=>yX,deriveSubsessionStatus:()=>p4,deleteLocalProvider:()=>K7,defineLlmsConfig:()=>TY,createWorkflowsConfigDefinition:()=>C5,createUserInstructionConfigService:()=>I$,createToolPoliciesWithPreset:()=>N9,createTool:()=>Im,createTeamName:()=>gQ,createSubprocessHooks:()=>LQ,createSpawnAgentTool:()=>w$,createSkillsConfigDefinition:()=>E5,createShellTool:()=>P4,createShellExecutor:()=>G2,createSessionHost:()=>C6,createSessionCompactionState:()=>z8,createRuntimeHost:()=>C6,createRulesConfigDefinition:()=>w5,createRemoteConfigSessionMessagesArtifactUploader:()=>OX,createProviderConfig:()=>BJ,createOpenTelemetryTelemetryService:()=>AW,createOAuthClientCallbacks:()=>j6,createMcpTools:()=>U6,createLocalHubScheduleRuntimeHandlers:()=>SQ,createLlmsSdk:()=>MY,createInitialAccumulatedUsage:()=>z0,createInMemoryHubOwnerContext:()=>VA,createHubServerUrl:()=>D1,createHubAuthToken:()=>eZ,createHookConfigFileHooks:()=>X5,createHookConfigFileExtension:()=>t8,createHookAuditHooks:()=>s8,createEditorExecutor:()=>U2,createDisabledMcpToolPolicy:()=>k5,createDisabledMcpToolPolicies:()=>rZ,createDelegatedAgentConfigProvider:()=>R$,createDelegatedAgent:()=>E$,createDefaultToolsWithPreset:()=>R9,createDefaultTools:()=>z$,createDefaultShellExecutor:()=>h4,createDefaultMcpServerClientFactory:()=>F6,createDefaultExecutors:()=>S8,createCoreSettingsService:()=>u2,createCoreSessionSnapshot:()=>C1,createContributionRegistry:()=>km,createContextCompactionPrepareTurn:()=>L4,createConfiguredTelemetryService:()=>B$,createConfiguredTelemetryHandle:()=>i$,createConfiguredAgentTools:()=>M6,createCompactionStateAwarePrepareTurn:()=>O4,createClineTelemetryServiceMetadata:()=>hm,createClineTelemetryServiceConfig:()=>ym,createCheckpointComparePlan:()=>UQ,createBuiltinTools:()=>N2,createApplyPatchExecutor:()=>A2,createAgentTeamsTools:()=>q2,createAgentRuntime:()=>nm,createAgentHooksExtension:()=>a8,connectToHub:()=>zQ,computePatchChanges:()=>w8,completeClineDeviceAuth:()=>k7,compareCheckpointToWorkspace:()=>HW,collectPluginMcpOAuthCandidates:()=>Q7,clearPrivateModelsCatalogCache:()=>XJ,clearLiveModelsCatalogCache:()=>jJ,clearHubDiscovery:()=>g0,captureWorkspacePathResolved:()=>rY,captureWorkspaceInitialized:()=>mW,captureWorkspaceInitError:()=>vW,captureToolUsage:()=>U8,captureTokenUsage:()=>dW,captureTaskRestarted:()=>uW,captureTaskCreated:()=>cW,captureTaskCompleted:()=>t6,captureSubagentExecution:()=>$4,captureSkillUsed:()=>pW,captureSdkError:()=>bm,captureProviderConfigured:()=>iY,captureProviderApiError:()=>e6,captureModeSwitch:()=>lW,captureMentionUsed:()=>iW,captureMentionSearchResults:()=>aW,captureMentionFailed:()=>nW,captureHookDiscovery:()=>sW,captureExtensionActivated:()=>pY,captureDiffEditFailure:()=>rW,captureConversationTurnEvent:()=>A8,captureCompactionSkipped:()=>eW,captureCompactionExecuted:()=>tW,captureAuthSucceeded:()=>m1,captureAuthStarted:()=>g1,captureAuthLoggedOut:()=>U$,captureAuthFailed:()=>v1,captureAgentUnexpectedReasoningTokens:()=>lY,captureAgentTeamCreated:()=>oW,captureAgentCreated:()=>f$,buildWorkspaceMetadata:()=>F5,buildTeamProgressSummary:()=>N6,buildSdkErrorProperties:()=>Pm,buildRemoteConfigSessionBlobUploadMetadata:()=>yQ,buildMcpInstallTransport:()=>mQ,buildDelegatedAgentConfig:()=>T2,buildConnectionUpdate:()=>L3,buildConfiguredAgentToolName:()=>JW,buildConfiguredAgentToolDescriptors:()=>jW,buildCheckpointWorkspaceDiff:()=>fQ,bootstrapAgentTeams:()=>x8,authorizeMcpServerOAuth:()=>uZ,addLocalProvider:()=>WY,accumulateUsageTotals:()=>D0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>O5,UnifiedConfigFileWatcher:()=>k2,ToolPresets:()=>a0,TelemetryService:()=>g6,TelemetryLoggerSink:()=>FW,TEAM_TOOL_NAMES:()=>I8,SubprocessSandbox:()=>p8,StructuredCommandInputSchema:()=>V2,StoredProviderSettingsSchema:()=>Z6,StoredProviderSettingsEntrySchema:()=>qZ,SqliteTeamStore:()=>V8,SqliteSessionStore:()=>S1,SessionVersioningService:()=>o$,SessionVersioningError:()=>u0,SessionSource:()=>F0,SessionNotFoundError:()=>W$,SapSettingsSchema:()=>_Z,SKILLS_CONFIG_DIRECTORY_NAME:()=>L5,SESSION_STATUSES:()=>r4,SESSION_NOT_FOUND_ERROR_CODE:()=>d2,SDK_ERROR_TELEMETRY_EVENT:()=>rm,RpcClineAccountService:()=>D5,RemoteRuntimeHost:()=>T6,ReasoningSettingsSchema:()=>AZ,RULES_CONFIG_DIRECTORY_NAME:()=>kZ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>hQ,ProviderSettingsSchema:()=>y$,ProviderSettingsManager:()=>X1,ProviderProtocolSchema:()=>GZ,ProviderIdSchema:()=>G5,ProviderClientSchema:()=>KZ,PatchActionType:()=>F2,OpenTelemetryProvider:()=>m6,OcaSettingsSchema:()=>LZ,OPENAI_COMPATIBLE_PROVIDERS:()=>V5,NodeHubClient:()=>_1,NoOpFeatureFlagsProvider:()=>W8,NativeHubTransportAdapter:()=>TW,ModelCatalogSettingsSchema:()=>OZ,McpSettingsUpdateSkippedError:()=>H6,McpSettingsMutatorPurityError:()=>x$,McpSettingsLockTimeoutError:()=>g$,MAX_COMMAND_OUTPUT_CHARS:()=>u1,LocalRuntimeHost:()=>h1,Llms:()=>Um,InMemoryWorkspaceManager:()=>J6,InMemoryMcpManager:()=>c2,HubUIClient:()=>tj,HubTransportError:()=>b0,HubSessionClient:()=>sj,HubServerTransport:()=>c6,HubScheduleService:()=>x6,HubScheduleCommandService:()=>I6,HubRuntimeHost:()=>j$,HubCommandError:()=>L6,HookEventPayloadSchema:()=>_Q,HookEventNameSchema:()=>DQ,HookConfigFileName:()=>o8,HOOK_CONFIG_FILE_EVENT_MAP:()=>J5,HOOKS_CONFIG_DIRECTORY_NAME:()=>t9,GlobalSettingsSchema:()=>k4,GcpSettingsSchema:()=>fZ,FileTeamPersistenceStore:()=>U7,FeatureFlagsService:()=>$8,FeatureFlagDefaultValue:()=>mm,FEATURE_FLAGS:()=>gm,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>T7,DefaultToolNames:()=>T0,DefaultRuntimeBuilder:()=>l6,DefaultLlmsSdk:()=>kW,DEFAULT_MODELS_CATALOG_URL:()=>XZ,DEFAULT_HUB_PORT:()=>Vj,DEFAULT_HUB_PATHNAME:()=>Bj,DEFAULT_HUB_HOST:()=>Yj,CoreSettingsService:()=>m$,CoreSessionService:()=>y1,ContributionRegistry:()=>Sm,CommandExitError:()=>d1,ClinePassLimitError:()=>_m,ClineOrgIndividualInferenceSubscriptionError:()=>Dm,ClineNotSubscribedError:()=>fm,ClineCore:()=>GW,ClineAccountService:()=>f5,ChatViewStateSchema:()=>_Y,ChatSummarySchema:()=>O7,ChatSessionStatusSchema:()=>D7,ChatSessionConfigSchema:()=>f7,ChatMessageSchema:()=>L7,ChatMessageRoleSchema:()=>_7,CORE_TELEMETRY_EVENTS:()=>v,CORE_BUILD_VERSION:()=>hW,BrowserWebSocketHubAdapter:()=>OW,BUILT_IN_PROVIDER_IDS:()=>YJ,BUILT_IN_PROVIDER:()=>H5,AzureSettingsSchema:()=>DZ,AwsSettingsSchema:()=>UZ,AuthSettingsSchema:()=>FZ,AgentTeamsRuntime:()=>e2,AgentTeam:()=>w6,Agent:()=>im,ALL_DEFAULT_TOOL_NAMES:()=>_$});N(q,c$0);import*as Um from"@cline/llms";import{ClineNotSubscribedError as fm,ClineOrgIndividualInferenceSubscriptionError as Dm,ClinePassLimitError as _m,extractClinePassLimitMessage as Lm,getClineNotSubscribedMessage as Om,getClineOrgIndividualInferenceSubscriptionMessage as Tm,getClinePassSubscriptionUrl as zm,isClineNotSubscribedError as qm,isClineNotSubscribedMessage as Mm,isClineOrgIndividualInferenceSubscriptionError as Nm,isClineOrgIndividualInferenceSubscriptionMessage as Rm,isClinePassLimitError as Em,isClinePassLimitMessage as wm}from"@cline/llms";import{buildClineSystemPrompt as Cm,buildSdkErrorProperties as Pm,ContributionRegistry as Sm,captureSdkError as bm,createClineTelemetryServiceConfig as ym,createClineTelemetryServiceMetadata as hm,createContributionRegistry as km,createTool as Im,emptyWorkspaceManifest as xm,FEATURE_FLAGS as gm,FeatureFlagDefaultValue as mm,formatDisplayUserInput as vm,noopBasicLogger as cm,normalizeSdkError as um,normalizeUserInput as dm,parseUserCommandEnvelope as lm,registerDisposable as pm,SDK_ERROR_TELEMETRY_EVENT as rm}from"@cline/shared";import"@cline/shared/storage";var DK={};w(DK,{isClineAccountActionRequest:()=>EZ,executeClineAccountAction:()=>wZ,RpcClineAccountService:()=>D5,ClineAccountService:()=>f5});function GR($){if(typeof $!=="object"||$===null||!("error"in $))return;let W=$.error;return typeof W==="string"&&W.trim()?W:void 0}function fK($,W,Z){let Q=GR(Z);if(Q)return Q;let J=W.trim();if(J){let j=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${j}`}return`Cline account request failed with status ${$}`}class f5{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let W=$.apiBaseUrl.trim();if(!W)throw Error("apiBaseUrl is required");this.apiBaseUrl=W,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let W=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(W)}/balance`)}async fetchUsageTransactions($){let W=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(W)}/usages`)).items??[]}async fetchPaymentTransactions($){let W=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(W)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let W=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)W.searchParams.set("type",$.type);return this.request(`${W.pathname}${W.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let W=$.trim();if(!W)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(W)}`)}async fetchOrganizationBalance($){let W=$.trim();if(!W)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(W)}/balance`)}async fetchOrganizationUsageTransactions($){let W=$.organizationId.trim();if(!W)throw Error("organizationId is required");let Z=await this.resolveOrganizationMemberId(W,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(W)}/members/${encodeURIComponent(Z)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let W=$?.trim();if(W)return W;let Q=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(Q)return Q;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,W){let Z=W?.trim();if(Z)return Z;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let X=(await this.fetchUserOrganizations()).find((Y)=>Y.organizationId===$)?.memberId;if(!X?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return X}async request($,W){let Z=(await this.getAuthTokenFn())?.trim();if(!Z)throw Error("No Cline account auth token found");let Q=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,j=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let X=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:W?.method??"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json",...Q??{}},body:W?.body!==void 0?JSON.stringify(W.body):void 0,signal:J.signal});if(X.status===204||W?.expectNoContent){if(!X.ok)throw Error(`Cline account request failed with status ${X.status}`);return}let Y=await X.text(),V;if(Y.trim())try{V=JSON.parse(Y)}catch{if(!X.ok)throw Error(fK(X.status,Y,void 0));throw Error("Cline account response was not valid JSON")}if(!X.ok)throw Error(fK(X.status,Y,V));if(typeof V==="object"&&V!==null){let B=V;if(typeof B.success==="boolean"){if(!B.success)throw Error(B.error||"Cline account request failed");return B.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(j)}}}function EZ($){return $.action==="clineAccount"}async function wZ($,W){switch($.operation){case"fetchMe":return W.fetchMe();case"fetchBalance":return W.fetchBalance($.userId);case"fetchUsageTransactions":return W.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return W.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return W.fetchUserOrganizations();case"fetchOrganizationBalance":return W.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return W.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await W.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return W.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class D5{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let W=$.trim();if(!W)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:W})}async fetchOrganizationUsageTransactions($){let W=$.organizationId.trim();if(!W)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:W,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var _K={};w(_K,{createOAuthClientCallbacks:()=>j6});function j6($){return{onAuth:({url:W,instructions:Z})=>{if($.onOutput?.(Z??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(W)).catch((Q)=>{$.onOpenUrlError?.({url:W,error:Q})})}catch(Q){$.onOpenUrlError?.({url:W,error:Q})}$.onOutput?.(W)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var EU={};w(EU,{ClineCore:()=>GW});function LK($){if($===!0)return{};if(!$)return;return $}function OK($){if($==="user")return"global";return $}class fJ{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let W=this.getService().ingestEvent($);return{event:W.event,duplicate:W.duplicate,matchedSpecIds:W.matchedSpecs.map((Z)=>Z.specId),queuedRuns:W.queuedRuns,suppressions:W.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function TK($){let{host:W}=$;return{async startSession(Z){let Q=(Z.cwd?.trim()||Z.workspaceRoot).trim(),J=await W.startSession({source:Z.source?.trim()||F0.CLI,interactive:!1,config:{providerId:$6(Z.provider),modelId:Z.model,apiKey:Z.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:AR(Z),maxIterations:Z.maxIterations,enableTools:Z.enableTools!==!1,enableSpawnAgent:Z.enableSpawn!==!1,enableAgentTeams:Z.enableTeams!==!1,disableMcpSettingsTools:Z.disableMcpSettingsTools,missionLogIntervalSteps:Z.missionStepInterval,missionLogIntervalMs:Z.missionTimeIntervalMs},toolPolicies:Z.toolPolicies??{"*":{autoApprove:Z.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:Z.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Z,Q){let J=await W.runTurn({sessionId:Z,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((j)=>j.content),delivery:Q.delivery});if(!J)throw Error("ClineCore automation runtime returned no result");return{result:FR(J)}},async abortSession(Z){return await W.abort(Z,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Z){return await W.stopSession(Z),{applied:!0}}}}function CZ($){let W=KR($.automationService,$.automation),Z=$.context?.client??($.clientName?{name:$.clientName}:void 0),Q=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),J=$.context?.logger??$.logger,j=$.context?.telemetry??$.telemetry;if(!W&&!Z&&!Q&&!J&&!j)return $.context;return{...$.context??{},...Z?{client:Z}:{},...Q?{user:Q}:{},...J?{logger:J}:{},...j?{telemetry:j}:{},...W?{automation:W}:{}}}function KR($,W){if(!$)return;return{ingestEvent:(Z)=>{W.ingestEvent(Z)}}}function FR($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((W)=>({name:W.name,input:W.input,output:W.output,error:W.error,durationMs:W.durationMs}))}}function AR($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var NF={};w(NF,{createCoreSettingsService:()=>u2,CoreSettingsService:()=>m$});import{existsSync as g5,readFileSync as eE}from"node:fs";import{basename as yJ,dirname as _F,extname as $w,isAbsolute as TF,join as Ww,relative as zF,resolve as LF}from"node:path";var IK={};w(IK,{resolveWorkflowsConfigSearchPaths:()=>R5,resolveSkillsConfigSearchPaths:()=>M5,resolveRulesConfigSearchPaths:()=>N5,parseWorkflowConfigFromMarkdown:()=>q5,parseSkillConfigFromMarkdown:()=>T5,parseRuleConfigFromMarkdown:()=>z5,createWorkflowsConfigDefinition:()=>C5,createUserInstructionConfigService:()=>I$,createSkillsConfigDefinition:()=>E5,createRulesConfigDefinition:()=>w5,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>O5,UnifiedConfigFileWatcher:()=>k2,SKILLS_CONFIG_DIRECTORY_NAME:()=>L5,RULES_CONFIG_DIRECTORY_NAME:()=>kZ});import{createHash as UR}from"node:crypto";import{watch as fR}from"node:fs";import{readdir as DR,readFile as _R}from"node:fs/promises";import{join as LR}from"node:path";function OR($){return UR("sha1").update($).digest("hex")}function MK($){return Boolean($&&typeof $==="object"&&"code"in $)}function zK($){return MK($)&&$.code==="ENOENT"}function qK($){return MK($)&&($.code==="EACCES"||$.code==="EPERM")}class k2{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,W){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=W?.debounceMs??75,this.emitParseErrors=W?.emitParseErrors??!1;for(let Z of $){if(this.definitionsByType.has(Z.type))throw Error(`Duplicate unified config definition type '${Z.type}'.`);this.definitionsByType.set(Z.type,Z),this.recordsByType.set(Z.type,new Map),this.discoveredDirectoriesByType.set(Z.type,new Set);for(let Q of Z.directories){let J=this.baseTypesByDirectory.get(Q);if(J)J.add(Z.type);else this.baseTypesByDirectory.set(Q,new Set([Z.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let W=this.definitionsByType.get($);if(!W)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(W)})}getSnapshot($){let W=this.recordsByType.get($);return new Map([...W?.entries()??[]].map(([Z,Q])=>[Z,{...Q}]))}getAllSnapshots(){let $=new Map;for(let[W,Z]of this.recordsByType.entries())$.set(W,new Map([...Z.entries()].map(([Q,J])=>[Q,{...J}])));return $}emit($){for(let W of this.listeners)W($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[W,Z]of this.watchersByDirectory.entries()){if($.has(W))continue;Z.close(),this.watchersByDirectory.delete(W)}this.watchedTypesByDirectory=$;for(let W of $.keys()){if(this.watchersByDirectory.has(W))continue;try{let Z=fR(W,()=>{let Q=this.watchedTypesByDirectory.get(W);if(!Q)return;for(let J of Q)this.pendingTypes.add(J);this.scheduleFlush()});this.watchersByDirectory.set(W,Z),Z.on("error",(Q)=>{let J=this.watchedTypesByDirectory.get(W);if(!J)return;for(let j of J)this.emit({kind:"error",type:j,error:Q,filePath:W})})}catch(Z){if(!zK(Z)&&!qK(Z)){let Q=$.get(W);if(!Q)continue;for(let J of Q)this.emit({kind:"error",type:J,error:Z,filePath:W})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let W of $){let Z=this.definitionsByType.get(W);if(!Z)continue;await this.refreshTypeInternal(Z)}})},this.debounceMs)}async refreshTypeInternal($){let{records:W,discoveredDirectories:Z}=await this.loadDefinition($),Q=this.recordsByType.get($.type)??new Map;for(let[J,j]of Q.entries()){if(W.has(J))continue;this.emit({kind:"remove",type:$.type,id:J,filePath:j.filePath})}for(let[J,j]of W.entries()){let X=Q.get(J);if(X&&X.filePath===j.filePath&&X.fingerprint===j.fingerprint)continue;this.emit({kind:"upsert",record:{type:j.type,id:J,item:j.item,filePath:j.filePath}})}if(this.recordsByType.set($.type,W),this.discoveredDirectoriesByType.set($.type,Z),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let W=new Map,Z=new Set;for(let Q of $.directories){Z.add(Q);let J=$.discoverFiles?await $.discoverFiles(Q):await this.readDirectoryFileCandidates(Q);for(let j of J){let{fileName:X,filePath:Y}=j;if(Z.add(j.directoryPath),$.includeFile&&!$.includeFile(X,Y))continue;try{let V=await _R(Y,"utf8"),B={type:$.type,directoryPath:j.directoryPath,fileName:X,filePath:Y,content:V},H=$.parseFile(B),G=$.resolveId(H,B).trim();if(!G)continue;W.set(G,{type:$.type,id:G,item:H,filePath:Y,fingerprint:OR(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:Y})}}}return{records:W,discoveredDirectories:Z}}buildDesiredTypesByDirectory(){let $=new Map;for(let[W,Z]of this.baseTypesByDirectory.entries())$.set(W,new Set(Z));for(let[W,Z]of this.discoveredDirectoriesByType.entries())for(let Q of Z){let J=$.get(Q);if(J)J.add(W);else $.set(Q,new Set([W]))}return $}async readDirectoryFileCandidates($){try{return(await DR($,{withFileTypes:!0})).filter((Z)=>Z.isFile()).map((Z)=>({directoryPath:$,fileName:Z.name,filePath:LR($,Z.name)})).sort((Z,Q)=>Z.fileName.localeCompare(Q.fileName))}catch(W){if(zK(W)||qK(W))return[];throw W}}}import{readdir as _J,readFile as TR,stat as DJ}from"node:fs/promises";import{basename as e1,dirname as zR,extname as SZ,join as x0,resolve as _5}from"node:path";import{AGENTS_RULES_FILE_NAME as NK,RULES_CONFIG_DIRECTORY_NAME as kZ,resolveGlobalAgentsRulesPath as qR,resolveRulesConfigSearchPaths as MR,resolveSkillsConfigSearchPaths as NR,resolveWorkflowsConfigSearchPaths as RR,SKILLS_CONFIG_DIRECTORY_NAME as L5,WORKFLOWS_CONFIG_DIRECTORY_NAME as O5}from"@cline/shared/storage";import ER from"yaml";var PZ="SKILL.md",wR="managed.json",CR=new Set([".md",".markdown",".txt"]);function LJ($){return $.trim().toLowerCase()}function X6($){let W=$;return W?.code==="ENOENT"||W?.code==="EACCES"||W?.code==="EPERM"||W?.code==="ELOOP"}function bZ($){return CR.has(SZ($).toLowerCase())}function RK($){let W=[],Z=new Set;for(let Q of $){let J=_5(Q);if(Z.has(J))continue;Z.add(J),W.push(Q)}return W}function PR($){let W=[...$?.directories??M5($?.workspacePath)];if($?.pluginSkillDirectories)W.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)W.push(...yG({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return RK(W)}async function OJ($){try{let W=await _J($,{withFileTypes:!0}),Z=[];for(let Q of W){if(!Q.isDirectory())continue;let J=x0($,Q.name),j=x0(J,wR);try{let X=await TR(j,"utf8"),Y=JSON.parse(X);if(Y&&typeof Y==="object")Z.push(J)}catch(X){if(X6(X))continue;if(X?.name==="SyntaxError")continue;throw X}}return Z.sort((Q,J)=>Q.localeCompare(J))}catch(W){if(X6(W))return[];throw W}}function TJ($){let W=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Z=$.match(W);if(!Z)return{data:{},body:$,hadFrontmatter:!1};let[,Q,J]=Z;try{let j=ER.parse(Q);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:J,hadFrontmatter:!0}}catch(j){let X=j instanceof Error?j.message:String(j);return{data:{},body:$,hadFrontmatter:!0,parseError:X}}}function yZ($,W,Z){if($===void 0||$===null){if(Z)throw Error(`Missing required frontmatter field '${W}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${W}' must be a string.`);let Q=$.trim();if(!Q&&Z)throw Error(`Frontmatter field '${W}' cannot be empty.`);return Q||void 0}function Y6($,W){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${W}' must be a boolean.`);return $}function SR($,W){if(e1($.filePath).toLowerCase()!==NK.toLowerCase())return e1($.filePath,SZ($.filePath));if(W&&_5($.filePath)===_5(W,NK))return"Workspace AGENTS.md";if(_5($.filePath)===_5(qR()))return"Global AGENTS.md";return e1($.filePath,SZ($.filePath))}function T5($,W){let{data:Z,body:Q,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let j=Q.trim();if(!j)throw Error("Missing instructions body in skill file.");let Y=yZ(Z.name,"name",!1)??W.trim();if(!Y)throw Error("Missing skill name.");return{name:Y,description:yZ(Z.description,"description",!1),disabled:Y6(Z.disabled,"disabled")??(Y6(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function z5($,W){let{data:Z,body:Q,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let j=Q.trim();if(!j)throw Error("Missing instructions body in rule file.");let X=yZ(Z.name,"name",!1)??W.trim();if(!X)throw Error("Missing rule name.");return{name:X,disabled:Y6(Z.disabled,"disabled")??(Y6(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function q5($,W){let{data:Z,body:Q,parseError:J}=TJ($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let j=Q.trim();if(!j)throw Error("Missing instructions body in workflow file.");let X=yZ(Z.name,"name",!1)??W.trim();if(!X)throw Error("Missing workflow name.");return{name:X,disabled:Y6(Z.disabled,"disabled")??(Y6(Z.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Z}}function M5($){return NR($)}function N5($){return MR($)}function R5($){return RR($)}async function EK($){if(e1($)===".cline"){let W=await OJ($);return(await Promise.all(W.map((Q)=>EK(x0(Q,L5))))).flat()}try{let W=await _J($,{withFileTypes:!0}),Z=[];for(let Q of W){if(Q.isFile()&&Q.name===PZ){Z.push({directoryPath:$,fileName:Q.name,filePath:x0($,Q.name)});continue}let J=x0($,Q.name);if(Q.isDirectory()||Q.isSymbolicLink()&&await DJ(J).then((X)=>X.isDirectory()).catch((X)=>{if(X6(X))return!1;throw X}))Z.push({directoryPath:J,fileName:PZ,filePath:x0(J,PZ)})}return Z}catch(W){if(X6(W))return[];throw W}}async function hZ($){if(e1($)===".cline"){let W=await OJ($);return(await Promise.all(W.map((Q)=>hZ(x0(Q,"rules.md"))))).flat()}try{if((await DJ($)).isFile())return[{directoryPath:zR($),fileName:e1($),filePath:$}]}catch(W){if(!X6(W))throw W}try{let Z=(await _J($,{withFileTypes:!0})).filter((J)=>J.isFile()&&bZ(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:x0($,J.name)})),Q=x0($,"AGENTS.md");try{if((await DJ(Q)).isFile()){if(!Z.some((X)=>X.fileName==="AGENTS.md"))Z.push({directoryPath:$,fileName:"AGENTS.md",filePath:Q})}}catch{}return Z}catch(W){if(X6(W))return[];throw W}}async function bR($){if(e1($)===".cline"){let W=await OJ($);return(await Promise.all(W.map((Q)=>hZ(x0(Q,O5))))).flat()}return hZ($)}function E5($){let W=PR($),Z=$?.workspacePath?x0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Z?RK([...W,Z]):W,discoverFiles:EK,includeFile:(Q)=>Q===PZ,parseFile:(Q)=>T5(Q.content,e1(Q.directoryPath)),resolveId:(Q)=>LJ(Q.name)}}function w5($){let W=$?.directories??N5($?.workspacePath),Z=$?.workspacePath?x0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Z?[...W,Z]:W,discoverFiles:hZ,includeFile:(Q,J)=>Q===".clinerules"||bZ(Q)||bZ(J),parseFile:(Q)=>z5(Q.content,SR(Q,$?.workspacePath)),resolveId:(Q)=>LJ(Q.name)}}function C5($){let W=$?.directories??R5($?.workspacePath),Z=$?.workspacePath?x0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Z?[...W,Z]:W,discoverFiles:bR,includeFile:(Q)=>bZ(Q),parseFile:(Q)=>q5(Q.content,e1(Q.filePath,SZ(Q.filePath))),resolveId:(Q)=>LJ(Q.name)}}function wK($){let W=[E5($?.skills),w5($?.rules),C5($?.workflows)];return new k2(W,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as CK}from"@cline/shared";function yR($,W){if($.description?.trim())return CK($.description,".");if(W==="workflow")return;return CK($.instructions,".")}function hR($){return $.disabled!==!0}function PK($,W){return[...$.getSnapshot(W).entries()].map(([Z,Q])=>({id:Z,record:Q})).filter(({record:Z})=>hR(Z.item)).map(({id:Z,record:Q})=>({id:Z,name:Q.item.name,instructions:Q.item.instructions,description:yR(Q.item,W),kind:W})).sort((Z,Q)=>Z.name.localeCompare(Q.name))}function P5($){let W=new Map;for(let Z of[...PK($,"workflow"),...PK($,"skill")])if(!W.has(Z.name))W.set(Z.name,Z);return[...W.values()].sort((Z,Q)=>Z.name.localeCompare(Q.name))}function SK($,W){if(!$.startsWith("/")||$.length<2)return $;let Z=$.match(/^\/(\S+)/);if(!Z)return $;let Q=Z[1];if(!Q)return $;let J=Q.length+1,j=$.slice(J),X=P5(W).find((Y)=>Y.name===Q);return X?`${X.instructions}${j}`:$}var yK={};w(yK,{mergeRulesForSystemPrompt:()=>B6,loadRulesForSystemPromptFromWatcher:()=>zJ,listEnabledRulesFromWatcher:()=>bK,isRuleEnabled:()=>IZ,formatRulesForSystemPrompt:()=>V6});function IZ($){return $.disabled!==!0}function V6($){if($.length===0)return"";return`
210
210
 
211
211
  # Rules
212
212
  ${$.map((Z)=>`## ${Z.name}
213
213
  ${Z.instructions}`).join(`
214
214
 
215
- `)}`}function V6($,W){let Z=$?.trim(),Q=W?.trim();if(Z&&Q)return`${Z}
215
+ `)}`}function B6($,W){let Z=$?.trim(),Q=W?.trim();if(Z&&Q)return`${Z}
216
216
 
217
- ${Q}`;return Z||Q||void 0}function NK($){return[...$.getSnapshot("rule").values()].map((Z)=>Z.item).filter(hZ).sort((Z,Q)=>Z.name.localeCompare(Q.name))}function LJ($){return Y6(NK($))}function kZ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function PN($){if(!$||$.length===0)return;let W=$.map(kZ).filter((Z)=>Z.length>0);return W.length>0?new Set(W):void 0}function SN($,W,Z){if(!Z)return!0;let Q=kZ($),J=kZ(W),j=Q.includes(":")?Q.split(":").at(-1)??Q:Q,X=J.includes(":")?J.split(":").at(-1)??J:J;return Z.has(Q)||Z.has(J)||Z.has(j)||Z.has(X)}function C5($,W){let Z=PN(W);return[...$.getSnapshot("skill").entries()].map(([J,j])=>{let X=j.item;return{id:J,name:X.name.trim(),description:X.description?.trim(),disabled:X.disabled===!0,skill:X}}).filter((J)=>SN(J.id,J.name,Z))}function bN($,W){return C5($,W).filter((Z)=>!Z.disabled).map((Z)=>Z.name.trim()).filter((Z)=>Z.length>0).sort((Z,Q)=>Z.localeCompare(Q))}function yN($,W,Z){let Q=kZ(W);if(!Q)return{error:"Missing skill name."};let J=C5($,Z),j=J.find((H)=>H.id===Q);if(j){let{skill:H}=j;if(H.disabled===!0)return{error:`Skill "${H.name}" is configured but disabled.`};return{id:j.id,skill:H}}let X=Q.includes(":")?Q.split(":").at(-1)??Q:Q,Y=J.filter(({id:H})=>{if(H===X)return!0;return H.endsWith(`:${X}`)}),V=Y.filter(({skill:H})=>H.disabled!==!0);if(V.length===1){let{id:H,skill:G}=V[0];return{id:H,skill:G}}if(V.length>1)return{error:`Skill "${W}" is ambiguous. Use one of: ${V.map(({id:H})=>H).join(", ")}`};if(Y.length===1){let{skill:H}=Y[0];return{error:`Skill "${H.name}" is configured but disabled.`}}if(Y.length>1)return{error:`Skill "${W}" is ambiguous, and all matches are disabled: ${Y.map(({id:H})=>H).join(", ")}`};let B=bN($,Z);return{error:B.length>0?`Skill "${W}" not found. Available skills: ${B.join(", ")}`:"No skills are currently available."}}function OJ($,W=Promise.resolve(),Z){let Q=new Set,J=async(j,X)=>{await W;let Y=yN($,j,Z);if("error"in Y)return Y.error;let{id:V,skill:B}=Y;if(Q.has(V))return`Skill "${B.name}" is already running.`;Q.add(V);try{let H=X?.trim(),G=H?`
217
+ ${Q}`;return Z||Q||void 0}function bK($){return[...$.getSnapshot("rule").values()].map((Z)=>Z.item).filter(IZ).sort((Z,Q)=>Z.name.localeCompare(Q.name))}function zJ($){return V6(bK($))}function xZ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function kR($){if(!$||$.length===0)return;let W=$.map(xZ).filter((Z)=>Z.length>0);return W.length>0?new Set(W):void 0}function IR($,W,Z){if(!Z)return!0;let Q=xZ($),J=xZ(W),j=Q.includes(":")?Q.split(":").at(-1)??Q:Q,X=J.includes(":")?J.split(":").at(-1)??J:J;return Z.has(Q)||Z.has(J)||Z.has(j)||Z.has(X)}function S5($,W){let Z=kR(W);return[...$.getSnapshot("skill").entries()].map(([J,j])=>{let X=j.item;return{id:J,name:X.name.trim(),description:X.description?.trim(),disabled:X.disabled===!0,skill:X}}).filter((J)=>IR(J.id,J.name,Z))}function xR($,W){return S5($,W).filter((Z)=>!Z.disabled).map((Z)=>Z.name.trim()).filter((Z)=>Z.length>0).sort((Z,Q)=>Z.localeCompare(Q))}function gR($,W,Z){let Q=xZ(W);if(!Q)return{error:"Missing skill name."};let J=S5($,Z),j=J.find((H)=>H.id===Q);if(j){let{skill:H}=j;if(H.disabled===!0)return{error:`Skill "${H.name}" is configured but disabled.`};return{id:j.id,skill:H}}let X=Q.includes(":")?Q.split(":").at(-1)??Q:Q,Y=J.filter(({id:H})=>{if(H===X)return!0;return H.endsWith(`:${X}`)}),V=Y.filter(({skill:H})=>H.disabled!==!0);if(V.length===1){let{id:H,skill:G}=V[0];return{id:H,skill:G}}if(V.length>1)return{error:`Skill "${W}" is ambiguous. Use one of: ${V.map(({id:H})=>H).join(", ")}`};if(Y.length===1){let{skill:H}=Y[0];return{error:`Skill "${H.name}" is configured but disabled.`}}if(Y.length>1)return{error:`Skill "${W}" is ambiguous, and all matches are disabled: ${Y.map(({id:H})=>H).join(", ")}`};let B=xR($,Z);return{error:B.length>0?`Skill "${W}" not found. Available skills: ${B.join(", ")}`:"No skills are currently available."}}function qJ($,W=Promise.resolve(),Z){let Q=new Set,J=async(j,X)=>{await W;let Y=gR($,j,Z);if("error"in Y)return Y.error;let{id:V,skill:B}=Y;if(Q.has(V))return`Skill "${B.name}" is already running.`;Q.add(V);try{let H=X?.trim(),G=H?`
218
218
  <command-args>${H}</command-args>`:"",K=B.description?.trim()?`Description: ${B.description.trim()}
219
219
 
220
220
  `:"";return`<command-name>${B.name}</command-name>${G}
221
221
  <command-instructions>
222
222
  ${K}${B.instructions}
223
- </command-instructions>`}finally{Q.delete(V)}};return Object.defineProperty(J,"configuredSkills",{get:()=>C5($,Z).map(({skill:j,...X})=>X),enumerable:!0,configurable:!1}),J}function wK($){let W=$.watcherReady??Promise.resolve();return{name:"cline-user-instructions",manifest:{capabilities:[$.includeRules?"rules":void 0,$.registerSkillsTool?"tools":void 0,$.includeSkills||$.includeWorkflows?"commands":void 0].filter((Q)=>Boolean(Q))},async setup(Q){if(await W,$.includeRules)Q.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>LJ($.watcher)});if($.registerSkillsTool)Q.registerTool(K2(OJ($.watcher,W,$.allowedSkillNames)));for(let J of w5($.watcher).filter((j)=>j.kind==="skill"&&$.includeSkills||j.kind==="workflow"&&$.includeWorkflows))Q.registerCommand({name:J.name,description:J.description,handler:(j)=>{let X=j.trim();return X?`${J.instructions}
223
+ </command-instructions>`}finally{Q.delete(V)}};return Object.defineProperty(J,"configuredSkills",{get:()=>S5($,Z).map(({skill:j,...X})=>X),enumerable:!0,configurable:!1}),J}function hK($){let W=$.watcherReady??Promise.resolve();return{name:"cline-user-instructions",manifest:{capabilities:[$.includeRules?"rules":void 0,$.registerSkillsTool?"tools":void 0,$.includeSkills||$.includeWorkflows?"commands":void 0].filter((Q)=>Boolean(Q))},async setup(Q){if(await W,$.includeRules)Q.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>zJ($.watcher)});if($.registerSkillsTool)Q.registerTool(K2(qJ($.watcher,W,$.allowedSkillNames)));for(let J of P5($.watcher).filter((j)=>j.kind==="skill"&&$.includeSkills||j.kind==="workflow"&&$.includeWorkflows))Q.registerCommand({name:J.name,description:J.description,handler:(j)=>{let X=j.trim();return X?`${J.instructions}
224
224
 
225
- ${X}`:J.instructions}})}}}class CK{watcher;ready;stopped=!1;constructor($){this.watcher=zK($)}start(){if(!this.ready)this.stopped=!1,this.ready=this.watcher.start();return this.ready}stop(){if(this.stopped)return;this.stopped=!0,this.watcher.stop(),this.ready=void 0}async refreshType($){await this.start(),await this.watcher.refreshType($)}listRecords($){return[...this.watcher.getSnapshot($).entries()].map(([W,Z])=>({type:$,id:W,filePath:Z.filePath,item:Z.item}))}listRuntimeCommands(){return w5(this.watcher)}resolveRuntimeSlashCommand($){return RK($,this.watcher)}hasConfiguredSkills($){return C5(this.watcher,$).some((W)=>!W.disabled)}createSkillsExecutor($){return OJ(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return wK({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function I$($){return new CK($)}import{readFile as hN,writeFile as kN}from"node:fs/promises";import bK from"yaml";function IN($){let W=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Z=$.match(W);if(!Z)return{data:{},body:$,hadFrontmatter:!1};let[,Q,J]=Z,j=bK.parse(Q);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:J,hadFrontmatter:!0}}function SK($,W){return`---
226
- ${bK.stringify($).trimEnd()}
225
+ ${X}`:J.instructions}})}}}class kK{watcher;ready;stopped=!1;constructor($){this.watcher=wK($)}start(){if(!this.ready)this.stopped=!1,this.ready=this.watcher.start();return this.ready}stop(){if(this.stopped)return;this.stopped=!0,this.watcher.stop(),this.ready=void 0}async refreshType($){await this.start(),await this.watcher.refreshType($)}listRecords($){return[...this.watcher.getSnapshot($).entries()].map(([W,Z])=>({type:$,id:W,filePath:Z.filePath,item:Z.item}))}listRuntimeCommands(){return P5(this.watcher)}resolveRuntimeSlashCommand($){return SK($,this.watcher)}hasConfiguredSkills($){return S5(this.watcher,$).some((W)=>!W.disabled)}createSkillsExecutor($){return qJ(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return hK({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function I$($){return new kK($)}import{readFile as mR,writeFile as vR}from"node:fs/promises";import gK from"yaml";function cR($){let W=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Z=$.match(W);if(!Z)return{data:{},body:$,hadFrontmatter:!1};let[,Q,J]=Z,j=gK.parse(Q);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:J,hadFrontmatter:!0}}function xK($,W){return`---
226
+ ${gK.stringify($).trimEnd()}
227
227
  ---
228
- ${W}`}function xN($,W){let{data:Z,body:Q,hadFrontmatter:J}=IN($);if(!J&&W)return $;if(W){if(delete Z.disabled,Z.enabled===!1)delete Z.enabled;if(Object.keys(Z).length===0)return Q;return SK(Z,Q)}return Z.disabled=!0,SK(Z,Q)}async function yK({filePath:$,enabled:W}){let Z=await hN($,"utf8"),Q=xN(Z,W);return await kN($,Q),{filePath:$,enabled:W,disabled:!W}}var VF={};E(VF,{updateMcpSettingsFileSync:()=>U1,updateMcpSettingsFile:()=>H6,updateMcpServerOAuthStateAsync:()=>S5,updateMcpServerOAuthState:()=>m2,setMcpServerDisabled:()=>x2,resolvePluginMcpServerRegistrations:()=>uZ,resolveMcpServerRegistrations:()=>e0,resolveDefaultMcpSettingsPath:()=>Q0,registerMcpServersFromSettingsFile:()=>v2,normalizePluginMcpServerRegistration:()=>CJ,loadMcpSettingsFile:()=>I2,listMcpServerOAuthStatuses:()=>b5,hasMcpSettingsFile:()=>t1,getMcpServerOAuthState:()=>g2,createMcpTools:()=>A6,createDisabledMcpToolPolicy:()=>y5,createDisabledMcpToolPolicies:()=>lZ,createDefaultMcpServerClientFactory:()=>K6,authorizeMcpServerOAuth:()=>vZ,McpSettingsUpdateSkippedError:()=>B6,McpSettingsMutatorPurityError:()=>x$,McpSettingsLockTimeoutError:()=>g$,InMemoryMcpManager:()=>c2});import{spawn as zE}from"node:child_process";import{StringDecoder as ZF}from"node:string_decoder";import{UnauthorizedError as tK}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as qE}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as KE}from"node:crypto";import{UnauthorizedError as FE}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as AE}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as UE}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as fE}from"@modelcontextprotocol/sdk/client/streamableHttp.js";xZ();var DE="/mcp/oauth/callback",_E=[1456,1457,1458],LE=300000;function OE($){if($ instanceof Error){let W=$.message.trim();if(W.length>0)return W}return String($)}function TE($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function mZ($){let W={};try{W=g2($.serverName,{filePath:$.settingsPath})??{}}catch{W={}}let Z,Q,J=async(X)=>{let Y=G6(X(W))??{};try{W=m2($.serverName,()=>Y,{filePath:$.settingsPath})}catch{W=Y}};return{provider:{get redirectUrl(){return W.redirectUrl??$.redirectUrl},get clientMetadata(){return TE(W.redirectUrl??$.redirectUrl)},state:()=>{return Q=KE(),Q},clientInformation:()=>W.clientInformation,saveClientInformation:async(X)=>{await J((Y)=>({...Y,clientInformation:X,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>W.tokens,saveTokens:async(X)=>{let Y=Date.now();await J((V)=>({...V,tokens:X,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:Y}))},redirectToAuthorization:async(X)=>{Z=X.toString(),await $.onAuthorizationUrl?.(Z)},saveCodeVerifier:async(X)=>{await J((Y)=>({...Y,codeVerifier:X,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!W.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return W.codeVerifier},invalidateCredentials:async(X)=>{await J((Y)=>{if(X==="all")return{lastError:Y.lastError,redirectUrl:Y.redirectUrl};return{...Y,...X==="client"?{clientInformation:void 0}:{},...X==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...X==="verifier"?{codeVerifier:void 0}:{},...X==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(X)=>{await J((Y)=>({...Y,discoveryState:X}))},discoveryState:()=>W.discoveryState},getLastAuthorizationUrl:()=>Z,getLastOAuthState:()=>Q,resetInteractiveState:async()=>{await J((X)=>({...X,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(X)=>{await J((Y)=>({...Y,lastError:X}))},clearError:async()=>{await J((X)=>({...X,lastError:void 0}))}}}function gZ($){let W=$.registration.transport;if(W.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let Z=W.headers?{headers:W.headers}:void 0;if(W.type==="sse")return new UE(new URL(W.url),{authProvider:$.oauthProvider,requestInit:Z,fetch:$.fetch});return new fE(new URL(W.url),{authProvider:$.oauthProvider,requestInit:Z,fetch:$.fetch})}function sK($){return new AE({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function vZ($){let W=$.serverName.trim();if(!W)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Z}=await Promise.resolve().then(() => (xZ(),oK)),Q=Z({filePath:$.filePath}).find((V)=>V.name===W);if(!Q)throw Error(`MCP server "${W}" is not configured.`);if(Q.disabled)throw Error(`MCP server "${W}" is disabled. Enable it before running OAuth.`);if(Q.transport.type==="stdio")throw Error(`MCP server "${W}" uses stdio transport and does not support OAuth browser flow.`);let J=await H1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:_E,callbackPath:$.callbackPath??DE,timeoutMs:$.timeoutMs??LE,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!J.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let j=mZ({settingsPath:$.filePath,serverName:W,redirectUrl:J.callbackUrl,onAuthorizationUrl:async(V)=>{await $.openUrl?.(V)}});await j.resetInteractiveState();let X=sK($),Y;try{let V=gZ({registration:Q,oauthProvider:j.provider,fetch:$.fetch});try{return await X.connect(V),await X.listTools(),await j.clearError(),{serverName:W,authorized:!0,message:`MCP server "${W}" is already authorized.`}}catch(B){if(!(B instanceof FE))throw B;if(!j.getLastAuthorizationUrl())throw Error(`MCP server "${W}" did not provide an authorization URL.`);let G=await J.waitForCallback();if(!G)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(G.error)throw Error(`OAuth authorization failed: ${G.error}`);if(!G.code)throw Error("OAuth callback did not include an authorization code.");let K=j.getLastOAuthState();if(!K)throw Error(`MCP server "${W}" did not start an OAuth stateful authorization flow.`);if(G.state!==K)throw Error("OAuth authorization failed: state mismatch.");await V.finishAuth(G.code),Y=sK($);let F=gZ({registration:Q,oauthProvider:j.provider,fetch:$.fetch});return await Y.connect(F),await Y.listTools(),await j.clearError(),{serverName:W,authorized:!0,message:`MCP server "${W}" OAuth authorization completed.`}}}catch(V){let B=OE(V);throw await j.markError(B),Error(B)}finally{await X.close().catch(()=>{return}),await Y?.close().catch(()=>{return}),J.close()}}var ME="2024-11-05",RE=5000,NE=1500,eK="http://127.0.0.1:1456/mcp/oauth/callback";function cZ($){return $ instanceof Error?$.message:String($)}function $F($){let W=Buffer.from(JSON.stringify($),"utf8"),Z=Buffer.from(`Content-Length: ${W.byteLength}\r
228
+ ${W}`}function uR($,W){let{data:Z,body:Q,hadFrontmatter:J}=cR($);if(!J&&W)return $;if(W){if(delete Z.disabled,Z.enabled===!1)delete Z.enabled;if(Object.keys(Z).length===0)return Q;return xK(Z,Q)}return Z.disabled=!0,xK(Z,Q)}async function mK({filePath:$,enabled:W}){let Z=await mR($,"utf8"),Q=uR(Z,W);return await vR($,Q),{filePath:$,enabled:W,disabled:!W}}var AF={};w(AF,{updateMcpSettingsFileSync:()=>f1,updateMcpSettingsFile:()=>G6,updateMcpServerOAuthStateAsync:()=>y5,updateMcpServerOAuthState:()=>m2,setMcpServerDisabled:()=>x2,resolvePluginMcpServerRegistrations:()=>lZ,resolveMcpServerRegistrations:()=>t0,resolveDefaultMcpSettingsPath:()=>Q0,registerMcpServersFromSettingsFile:()=>v2,normalizePluginMcpServerRegistration:()=>bJ,loadMcpSettingsFile:()=>I2,listMcpServerOAuthStatuses:()=>h5,hasMcpSettingsFile:()=>$$,getMcpServerOAuthState:()=>g2,createMcpTools:()=>U6,createDisabledMcpToolPolicy:()=>k5,createDisabledMcpToolPolicies:()=>rZ,createDefaultMcpServerClientFactory:()=>F6,authorizeMcpServerOAuth:()=>uZ,McpSettingsUpdateSkippedError:()=>H6,McpSettingsMutatorPurityError:()=>x$,McpSettingsLockTimeoutError:()=>g$,InMemoryMcpManager:()=>c2});import{spawn as EE}from"node:child_process";import{StringDecoder as VF}from"node:string_decoder";import{UnauthorizedError as JF}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as wE}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as DE}from"node:crypto";import{UnauthorizedError as _E}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as LE}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as OE}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as TE}from"@modelcontextprotocol/sdk/client/streamableHttp.js";mZ();var zE="/mcp/oauth/callback",qE=[1456,1457,1458],ME=300000;function NE($){if($ instanceof Error){let W=$.message.trim();if(W.length>0)return W}return String($)}function RE($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function cZ($){let W={};try{W=g2($.serverName,{filePath:$.settingsPath})??{}}catch{W={}}let Z,Q,J=async(X)=>{let Y=K6(X(W))??{};try{W=m2($.serverName,()=>Y,{filePath:$.settingsPath})}catch{W=Y}};return{provider:{get redirectUrl(){return W.redirectUrl??$.redirectUrl},get clientMetadata(){return RE(W.redirectUrl??$.redirectUrl)},state:()=>{return Q=DE(),Q},clientInformation:()=>W.clientInformation,saveClientInformation:async(X)=>{await J((Y)=>({...Y,clientInformation:X,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>W.tokens,saveTokens:async(X)=>{let Y=Date.now();await J((V)=>({...V,tokens:X,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:Y}))},redirectToAuthorization:async(X)=>{Z=X.toString(),await $.onAuthorizationUrl?.(Z)},saveCodeVerifier:async(X)=>{await J((Y)=>({...Y,codeVerifier:X,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!W.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return W.codeVerifier},invalidateCredentials:async(X)=>{await J((Y)=>{if(X==="all")return{lastError:Y.lastError,redirectUrl:Y.redirectUrl};return{...Y,...X==="client"?{clientInformation:void 0}:{},...X==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...X==="verifier"?{codeVerifier:void 0}:{},...X==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(X)=>{await J((Y)=>({...Y,discoveryState:X}))},discoveryState:()=>W.discoveryState},getLastAuthorizationUrl:()=>Z,getLastOAuthState:()=>Q,resetInteractiveState:async()=>{await J((X)=>({...X,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(X)=>{await J((Y)=>({...Y,lastError:X}))},clearError:async()=>{await J((X)=>({...X,lastError:void 0}))}}}function vZ($){let W=$.registration.transport;if(W.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let Z=W.headers?{headers:W.headers}:void 0;if(W.type==="sse")return new OE(new URL(W.url),{authProvider:$.oauthProvider,requestInit:Z,fetch:$.fetch});return new TE(new URL(W.url),{authProvider:$.oauthProvider,requestInit:Z,fetch:$.fetch})}function QF($){return new LE({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function uZ($){let W=$.serverName.trim();if(!W)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Z}=await Promise.resolve().then(() => (mZ(),ZF)),Q=Z({filePath:$.filePath}).find((V)=>V.name===W);if(!Q)throw Error(`MCP server "${W}" is not configured.`);if(Q.disabled)throw Error(`MCP server "${W}" is disabled. Enable it before running OAuth.`);if(Q.transport.type==="stdio")throw Error(`MCP server "${W}" uses stdio transport and does not support OAuth browser flow.`);let J=await G1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:qE,callbackPath:$.callbackPath??zE,timeoutMs:$.timeoutMs??ME,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!J.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let j=cZ({settingsPath:$.filePath,serverName:W,redirectUrl:J.callbackUrl,onAuthorizationUrl:async(V)=>{await $.openUrl?.(V)}});await j.resetInteractiveState();let X=QF($),Y;try{let V=vZ({registration:Q,oauthProvider:j.provider,fetch:$.fetch});try{return await X.connect(V),await X.listTools(),await j.clearError(),{serverName:W,authorized:!0,message:`MCP server "${W}" is already authorized.`}}catch(B){if(!(B instanceof _E))throw B;if(!j.getLastAuthorizationUrl())throw Error(`MCP server "${W}" did not provide an authorization URL.`);let G=await J.waitForCallback();if(!G)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(G.error)throw Error(`OAuth authorization failed: ${G.error}`);if(!G.code)throw Error("OAuth callback did not include an authorization code.");let K=j.getLastOAuthState();if(!K)throw Error(`MCP server "${W}" did not start an OAuth stateful authorization flow.`);if(G.state!==K)throw Error("OAuth authorization failed: state mismatch.");await V.finishAuth(G.code),Y=QF($);let F=vZ({registration:Q,oauthProvider:j.provider,fetch:$.fetch});return await Y.connect(F),await Y.listTools(),await j.clearError(),{serverName:W,authorized:!0,message:`MCP server "${W}" OAuth authorization completed.`}}}catch(V){let B=NE(V);throw await j.markError(B),Error(B)}finally{await X.close().catch(()=>{return}),await Y?.close().catch(()=>{return}),J.close()}}var CE="2024-11-05",PE=5000,SE=1500,jF="http://127.0.0.1:1456/mcp/oauth/callback";function dZ($){return $ instanceof Error?$.message:String($)}function XF($){let W=Buffer.from(JSON.stringify($),"utf8"),Z=Buffer.from(`Content-Length: ${W.byteLength}\r
229
229
  \r
230
- `,"utf8");return Buffer.concat([Z,W])}function WF($){return Buffer.from(`${JSON.stringify($)}
231
- `,"utf8")}class EJ{buffer="";decoder=new ZF("utf8");push($){this.buffer+=this.decoder.write($);let W=[];while(!0){let Z=this.buffer.indexOf(`\r
230
+ `,"utf8");return Buffer.concat([Z,W])}function YF($){return Buffer.from(`${JSON.stringify($)}
231
+ `,"utf8")}class PJ{buffer="";decoder=new VF("utf8");push($){this.buffer+=this.decoder.write($);let W=[];while(!0){let Z=this.buffer.indexOf(`\r
232
232
  \r
233
- `);if(Z<0)break;let J=this.buffer.slice(0,Z).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!J)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let j=Number.parseInt(J[1],10),X=Z+4,Y=X+j;if(this.buffer.length<Y)break;W.push(this.buffer.slice(X,Y)),this.buffer=this.buffer.slice(Y)}return W}}class wJ{buffer="";decoder=new ZF("utf8");push($){this.buffer+=this.decoder.write($);let W=[];while(!0){let Z=this.buffer.indexOf(`
234
- `);if(Z<0)break;let Q=this.buffer.slice(0,Z).trim();if(this.buffer=this.buffer.slice(Z+1),Q.length>0)W.push(Q)}return W}}class QF{registration;process;nextRequestId=1;pending=new Map;framedParser=new EJ;newlineParser=new wJ;stderrBuffer="";connected=!1;protocolMode="newline";constructor($){this.registration=$}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=["newline","framed"],W;for(let Z of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Z);try{await this.request("initialize",{protocolVersion:ME,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},NE),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Z;return}catch(Q){W=Q instanceof Error?Q:Error(String(Q))}}throw W??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((W)=>typeof W?.name==="string"&&typeof W.inputSchema==="object"&&W.inputSchema!==null).map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let W=this.registration.transport;if(W.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${W.type}`);this.framedParser=new EJ,this.newlineParser=new wJ,this.stderrBuffer="",this.protocolMode=$;let Z=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},Q=zE(W.command,W.args??[],{cwd:W.cwd,env:{...process.env,...W.env??{}},stdio:["pipe","pipe","pipe"],...Z});this.process=Q,Q.stdout.on("data",(J)=>this.handleStdout(J)),Q.stderr.on("data",(J)=>{if(this.process!==Q)return;if(this.stderrBuffer+=J.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),Q.once("error",(J)=>{if(this.process!==Q)return;this.failAllPending(Error(`MCP process error: ${cZ(J)}`))}),Q.once("exit",(J,j)=>{if(this.process!==Q)return;this.connected=!1,this.process=void 0;let X=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${J??"null"}, signal=${j??"null"}).${X}`))})}handleStdout($){try{let W=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Z of W){let Q=JSON.parse(Z);if(typeof Q.id!=="number")continue;let J=this.pending.get(Q.id);if(!J)continue;if(this.pending.delete(Q.id),clearTimeout(J.timeout),Q.error){let j=Q.error.message||`MCP request failed with code ${Q.error.code??"unknown"}`;J.reject(Error(j));continue}J.resolve(Q.result)}}catch(W){this.handleProtocolFailure(W)}}handleProtocolFailure($){let W=this.process;if(!W)return;this.connected=!1,this.process=void 0;let Z=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${cZ($)}.${Z}`)),W.kill()}async request($,W,Z=RE){let Q=this.process;if(!Q?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let J=this.nextRequestId++,j={jsonrpc:"2.0",id:J,method:$,...W?{params:W}:{}},X=new Promise((Y,V)=>{let B=setTimeout(()=>{this.pending.delete(J),V(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Z);this.pending.set(J,{resolve:Y,reject:V,timeout:B})});try{Q.stdin.write(this.protocolMode==="framed"?$F(j):WF(j))}catch(Y){let V=this.pending.get(J);if(V)clearTimeout(V.timeout),this.pending.delete(J);throw Y}return X}notify($,W){let Z=this.process;if(!Z?.stdin.writable)return;let Q={jsonrpc:"2.0",method:$,...W?{params:W}:{}};Z.stdin.write(this.protocolMode==="framed"?$F(Q):WF(Q))}failAllPending($){for(let[W,Z]of this.pending)clearTimeout(Z.timeout),this.pending.delete(W),Z.reject($)}}class JF{registration;options;client;authContext;constructor($,W){this.registration=$;this.options=W}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=mZ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??eK});this.authContext=$;try{let W=new qE({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Z=gZ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await W.connect(Z),await $.clearError(),this.client=W}catch(W){let Z=W instanceof tK?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):cZ(W);throw await $.markError(Z),Error(Z)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema&&typeof Z.inputSchema==="object"&&!Array.isArray(Z.inputSchema)?Z.inputSchema:{}}))}catch(W){return await this.handleOperationError(W)}}async callTool($){let W=await this.ensureConnectedClient();try{return await W.callTool({name:$.name,arguments:$.arguments??{}})}catch(Z){return await this.handleOperationError(Z)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let W=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${W} Run authorizeMcpServerOAuth for this server.`;return`${W} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let W=this.authContext??mZ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??eK}),Z=$ instanceof tK?this.formatUnauthorizedMessage(W.getLastAuthorizationUrl()):cZ($);throw await W.markError(Z),Error(Z)}}function K6($={}){return(W)=>W.transport.type==="stdio"?new QF(W):new JF(W,$)}xZ();function $1(){return Date.now()}function EE($){return $.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema}))}class c2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let W=this.servers.get($.name);if(!W){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:$1()});return}let Z=JSON.stringify(W.registration.transport)!==JSON.stringify($.transport);if(W.registration={...$},W.updatedAt=$1(),Z)await this.disconnectState(W),W.client=void 0,W.toolCache=void 0,W.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let W=this.requireServer($);await this.disconnectState(W),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let W=this.requireServer($);await this.connectState(W)})}async disconnectServer($){await this.runExclusive($,async()=>{let W=this.requireServer($);await this.disconnectState(W)})}async setServerDisabled($,W){await this.runExclusive($,async()=>{let Z=this.requireServer($);if(Z.registration={...Z.registration,disabled:W},Z.updatedAt=$1(),W)await this.disconnectState(Z)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,W)=>$.name.localeCompare(W.name))}async listTools($){let W=this.requireServer($),Z=W.toolCacheUpdatedAt??0;if(W.toolCache&&$1()-Z<=this.toolsCacheTtlMs)return W.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let W=this.requireServer($),Q=await(await this.ensureConnectedClient(W)).listTools(),J=EE(Q);return W.toolCache=J,W.toolCacheUpdatedAt=$1(),W.updatedAt=$1(),J})}async callTool($){return this.runExclusive($.serverName,async()=>{let W=this.requireServer($.serverName),Z=await this.ensureConnectedClient(W);return W.updatedAt=$1(),Z.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let W of $)await this.unregisterServer(W)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=$1();try{let W=$.client??await this.clientFactory($.registration);await W.connect(),$.client=W,$.status="connected",$.lastError=void 0,$.updatedAt=$1()}catch(W){throw $.status="disconnected",$.lastError=W instanceof Error?W.message:String(W),$.updatedAt=$1(),W}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=$1();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=$1()}}requireServer($){let W=this.servers.get($);if(!W)throw Error(`Unknown MCP server: ${$}`);return W}async runExclusive($,W){let Z=this.operationLocks.get($)??Promise.resolve(),Q,J=new Promise((X)=>{Q=X}),j=Z.catch(()=>{return}).then(()=>J);this.operationLocks.set($,j),await Z.catch(()=>{return});try{return await W()}finally{if(Q?.(),this.operationLocks.get($)===j)this.operationLocks.delete($)}}}function F6($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function jF($){return F6($)&&Object.values($).every((W)=>typeof W==="string")}function wE($){return Array.isArray($)&&$.every((W)=>typeof W==="string")}function CE($){if(!F6($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function PE($){let W=$.env?Object.entries($.env):[];if(W.length===0)return{ok:!0};let Z={};for(let[Q,J]of W){if(typeof J==="string"){Z[Q]=J;continue}let j=J.fromEnv?.trim()||Q,X=process.env[j];if(typeof X==="string"&&X.length>0){Z[Q]=X;continue}if(typeof J.value==="string"){Z[Q]=J.value;continue}if(J.required===!0)return{ok:!1,reason:`required environment variable "${j}" is not set`}}return{ok:!0,env:Object.keys(Z).length>0?Z:void 0}}function CJ($){if(!F6($))return{name:"",loadError:"invalid MCP server registration"};let W=typeof $.name==="string"?$.name.trim():"";if(!W)return{name:W,loadError:"empty MCP server name"};let Z=$.env,Q=Z===void 0?void 0:Z;if(Q!==void 0){if(!F6(Q))return{name:W,loadError:"invalid env"};for(let[V,B]of Object.entries(Q))if(typeof B!=="string"&&!CE(B))return{name:W,loadError:`invalid env "${V}"`}}let J=$.transport;if(!F6(J))return{name:W,loadError:"invalid MCP transport"};let j=J.type;if(j!=="stdio"&&j!=="sse"&&j!=="streamableHttp")return{name:W,loadError:"invalid MCP transport type"};if(j!=="stdio"&&Q!==void 0)return{name:W,loadError:"top-level env is only supported for stdio MCP transports"};let X=F6($.metadata)?$.metadata:void 0;if(j==="stdio"){let V=J.command;if(typeof V!=="string"||!V.trim())return{name:W,loadError:"stdio MCP transport requires command"};let B=J.args;if(B!==void 0&&!wE(B))return{name:W,loadError:"stdio MCP transport args must be strings"};let H=J.cwd;if(H!==void 0&&typeof H!=="string")return{name:W,loadError:"stdio MCP transport cwd must be a string"};let G=J.env;if(G!==void 0&&!jF(G))return{name:W,loadError:"stdio MCP transport env must be strings"};let K=PE({name:W,transport:{type:"stdio",command:V,args:B,cwd:H,env:G},env:Q,metadata:X});if(!K.ok)return{name:W,loadError:K.reason};let F=G||K.env?{...G??{},...K.env??{}}:void 0;return{name:W,registration:{name:W,transport:{type:"stdio",command:V,args:B,cwd:H,env:F},metadata:X}}}if(typeof J.url!=="string"||!J.url.trim())return{name:W,loadError:`${j} MCP transport requires url`};let Y=J.headers;if(Y!==void 0&&!jF(Y))return{name:W,loadError:`${j} MCP transport headers must be strings`};return{name:W,registration:{name:W,transport:j==="sse"?{type:"sse",url:J.url,headers:Y}:{type:"streamableHttp",url:J.url,headers:Y},metadata:X}}}function uZ($){let W=new Map;return $.map(({server:Z,owner:Q,ownerLabel:J})=>{let j=CJ(Z);if(!j.registration)return{owner:Q,name:j.name,loadError:j.loadError??"invalid MCP server registration"};let X=W.get(j.registration.name);if(W.has(j.registration.name)){let Y=X?` already registered by ${X}`:"";return{owner:Q,name:j.registration.name,loadError:`duplicate MCP server name "${j.registration.name}"${Y}`}}return W.set(j.registration.name,J),{owner:Q,name:j.registration.name,registration:j.registration}})}import{createHash as SE}from"node:crypto";var XF=64,bE=/[^a-zA-Z0-9_-]+/g,YF=8,yE=1,hE="mcp_tool";function kE($){return SE("sha1").update($).digest("hex").slice(0,YF)}function IE($){return $.replace(bE,"_")}var dZ=({serverName:$,toolName:W})=>{let Z=`${$}__${W}`,Q=IE(Z);if(Q===Z&&Z.length<=XF)return Z;let J=kE(Z),j=XF-yE-YF;return`${Q.slice(0,j)||hE}_${J}`};function y5($){return{[($.nameTransform??dZ)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function lZ($){let W={};for(let Z of $.toolNames)Object.assign(W,y5({serverName:$.serverName,toolName:Z,nameTransform:$.nameTransform}));return W}import{createTool as xE}from"@cline/shared";function gE($,W){let Z=W.description?.trim();if(Z)return Z;return`Execute MCP tool "${W.name}" from server "${$}".`}async function A6($){let W=await $.provider.listTools($.serverName),Z=$.nameTransform??dZ;return W.map((Q)=>{let J=Z({serverName:$.serverName,toolName:Q.name});return xE({name:J,description:gE($.serverName,Q),inputSchema:Q.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(j,X)=>$.provider.callTool({serverName:$.serverName,toolName:Q.name,arguments:j&&typeof j==="object"&&!Array.isArray(j)?j:void 0,context:X})})})}A1();var GF={};E(GF,{listPluginToolsWithDiagnostics:()=>pZ,listPluginTools:()=>h5});import{stat as mE}from"node:fs/promises";import{isAbsolute as vE,relative as cE,resolve as BF}from"node:path";A1();function uE($,W){let Z=cE(BF($),BF(W));return Z===""||!Z.startsWith("..")&&!vE(Z)}var dE=32,U6=new Map;function lE($,W){if(!U6.has($)&&U6.size>=dE){let Z=U6.keys().next().value;if(Z)U6.delete(Z)}U6.set($,W)}async function pE($){let W=await Promise.all($.pluginPaths.map(async(Z)=>{try{let Q=await mE(Z);return`${Z}:${Q.mtimeMs}:${Q.size}`}catch{return`${Z}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:W})}function HF($,W){return $.map((Z)=>({...Z,enabled:!W.has(Z.name)}))}function rE($){return $.sort((W,Z)=>{let Q=W.name.localeCompare(Z.name);if(Q!==0)return Q;return W.path.localeCompare(Z.path)})}async function iE($,W){if(!$.setup)return{tools:[]};let Z=[],Q={registerTool:(J)=>Z.push(J),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(J)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(Q,{workspaceInfo:W}),{tools:Z}}async function pZ($){let W=n1({workspacePath:$.workspacePath,cwd:$.cwd}),Z=M1($.disabledToolNames);if(W.length===0)return{tools:[],failures:[],warnings:[]};let Q=await pE({pluginPaths:W,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),J=U6.get(Q);if(J)return{tools:HF(J.tools,Z),failures:J.failures,warnings:J.warnings};let j=[],X=[],Y=[],V;try{V=await r8({pluginPaths:W,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),X=[...V.failures],Y=[...V.warnings];for(let H of V.extensions??[]){let G=H.__clinePluginPath;if(!G)continue;let K=uE($.workspacePath,G)?"workspace-plugin":"global-plugin",F;try{F=await iE(H,{rootPath:$.workspacePath})}catch(A){X.push({pluginPath:G,pluginName:H.name,phase:"setup",message:A instanceof Error?A.message:String(A),stack:A instanceof Error?A.stack:void 0});continue}for(let A of F.tools)j.push({name:A.name,pluginName:H.name,path:G,source:K,description:A.description?.trim()||void 0})}}catch(H){X=W.map((G)=>({pluginPath:G,phase:"load",message:H instanceof Error?H.message:String(H),stack:H instanceof Error?H.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let B=rE(j);return lE(Q,{tools:B,failures:X,warnings:Y}),{tools:HF(B,Z),failures:X,warnings:Y}}async function h5($){return(await pZ($)).tools}function x5($,W){if(!W)return"global";let Z=fF(W,$);return!Z.startsWith("..")&&!UF(Z)?"workspace":"global"}function sE($,W){return x5($,W)==="workspace"?"workspace-plugin":"global-plugin"}function tE($,W){let Z=fF(FF($),FF(W));return Z===""||!Z.startsWith("..")&&!UF(Z)}function eE($){try{let W=JSON.parse(nE($,"utf8"));return typeof W.name==="string"&&W.name.trim()?W.name.trim():void 0}catch{return}}function $w($){let W=KF($);while(!0){let Z=oE(W,"package.json");if(I5(Z)){let J=eE(Z);if(J)return J;break}let Q=KF(W);if(Q===W)break;W=Q}return PJ($,aE($))}function Ww($){let W=[];for(let Z of n1({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let Q of a1([Z]))W.push({directory:Q,pluginName:$w(Z),pluginPath:Z,source:$.workspaceRoot?sE(Z,$.workspaceRoot):"global-plugin"});return W.sort((Z,Q)=>Q.directory.length-Z.directory.length)}function Zw($,W){return W.find((Z)=>tE(Z.directory,$))}function k5($){return[...$].sort((W,Z)=>{let Q=(J)=>{switch(J){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(W.source!==Z.source)return Q(W.source)-Q(Z.source);return W.name.localeCompare(Z.name)})}function DF($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function _F($,W){return $.cwd?.trim()||W||process.cwd()}async function AF($,W){if($.userInstructionService)return await W($.userInstructionService);let Z=DF($),Q=_F($,Z),J=I$({skills:{workspacePath:Z||void 0,includePluginSkills:!0,cwd:Q},rules:{workspacePath:Z||void 0},workflows:{workspacePath:Z||void 0}});try{return await J.start(),await W(J)}finally{J.stop()}}function Qw($,W){if(!$)return;let Z=$.listRecords("skill");if(W.id){let Q=Z.find((J)=>J.id===W.id);if(Q)return Q}for(let Q of Z)if(Q.filePath===W.path||Q.item.name===W.name||Q.id===W.name)return Q;return}class m${async list($={}){return await AF($,async(W)=>{let Z=DF($),Q=Ww({workspaceRoot:Z,cwd:_F($,Z)}),J=[],j=[],X=[],Y=[],V=[];if(W){for(let H of W.listRecords("workflow")){let G=H.item;J.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"workflow",source:x5(H.filePath,Z),description:G.instructions,toggleable:!1})}for(let H of W.listRecords("rule")){let G=H.item;j.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"rule",source:x5(H.filePath,Z),description:G.instructions,toggleable:!1})}for(let H of W.listRecords("skill")){let G=H.item,K=Zw(H.filePath,Q);X.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"skill",source:K?.source??x5(H.filePath,Z),description:G.description,pluginName:K?.pluginName,pluginPath:K?.pluginPath,toggleable:!0})}}if(Z)try{for(let H of await h5({workspacePath:Z,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))Y.push({id:`${H.pluginName}:${H.name}:${H.path}`,name:H.name,path:H.path,enabled:H.enabled,kind:"tool",source:H.source,description:H.description,toggleable:!0})}catch{}let B=Q0();if(t1({filePath:B}))try{for(let H of e0({filePath:B}))V.push({id:H.name,name:H.name,path:B,enabled:H.disabled!==!0,kind:"mcp",source:x5(B,Z),description:H.transport.type,toggleable:!0})}catch{}return{workflows:k5(J.filter((H)=>I5(H.path))),rules:k5(j.filter((H)=>I5(H.path))),skills:k5(X.filter((H)=>I5(H.path))),tools:k5(Y),mcp:k5(V.filter((H)=>I5(H.path)))}})}async toggle($){if($.type==="skills")return await AF($,async(W)=>{let Z=Qw(W,$),Q=Z?.filePath;if(!Q)throw Error(`Unable to resolve skill setting '${$.id??$.name??PJ($.path??"")}'.`);let J=Z?.item&&"disabled"in Z.item?Z.item.disabled!==!0:void 0,j=$.enabled??(J!==void 0?!J:void 0);if(j===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??PJ($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await yK({filePath:Q,enabled:j}),await W?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:W}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)C9($.name);else aB($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let W=$.name?.trim()||$.id?.trim();if(!W)throw Error("MCP server settings toggle requires a server name.");let Z=$.path?.trim()||Q0(),Q=$.enabled;if(Q===void 0){let J=e0({filePath:Z}).find((j)=>j.name===W);if(!J)throw Error(`Unknown MCP server: ${W}`);Q=J.disabled===!0}return x2({filePath:Z,name:W,disabled:!Q}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function u2(){return new m$}function OF($){return{async list(W){let Z=$;if(Z.listSettings)return await Z.listSettings(W);return await u2().list(W)},async toggle(W){let Z=$;if(Z.toggleSetting)return await Z.toggleSetting(W);return await u2().toggle(W)}}}function TF($){function W(){let Z=$.pendingPrompts;if(!Z)throw Error("Pending prompt service is not available.");return Z}return{list(Z){return W().list(Z)},update(Z){return W().update(Z)},delete(Z){return W().delete(Z)}}}var zF={};E(zF,{splitCoreSessionConfig:()=>g5,isSessionNotFoundError:()=>$$,SessionNotFoundError:()=>e1,SESSION_NOT_FOUND_ERROR_CODE:()=>d2});var d2="session_not_found";class e1 extends Error{sessionId;code="session_not_found";constructor($,W){super(W??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function $$($){return $ instanceof e1||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function g5($){let{hooks:W,logger:Z,telemetry:Q,extensionContext:J,extraTools:j,extensions:X,onTeamEvent:Y,onConsecutiveMistakeLimitReached:V,checkpoint:B,compaction:H,...G}=$,K={};if(W)K.hooks=W;if(Z)K.logger=Z;if(Q)K.telemetry=Q;if(J)K.extensionContext=J;if(j)K.extraTools=j;if(X)K.extensions=X;if(Y)K.onTeamEvent=Y;if(V)K.onConsecutiveMistakeLimitReached=V;if(B?.createCheckpoint)K.checkpoint=B;if(H?.compact)K.compaction=H;let F=Object.keys(K).length>0?K:void 0;return{config:{...G,...B?{checkpoint:{enabled:B.enabled}}:{},...H?{compaction:{enabled:H.enabled,strategy:H.strategy,preserveRecentTokens:H.preserveRecentTokens,summarizer:H.summarizer}}:{}},...F?{localRuntime:F}:{}}}function qF($){let W=$.config;return"providerId"in W?{...$,config:{...W,...Jw($.localRuntime)},localRuntime:$.localRuntime}:$}function SJ($,W={}){let Z=g5($.config),Q=w0(W.defaultCapabilities,$.capabilities),J=jw(Z.localRuntime,$.localRuntime),j=W.withExtensionContext?.(J?.extensionContext);if(j)J={...J??{},extensionContext:j};return{...$,...Z,...J?{localRuntime:J}:{},...Q?{capabilities:Q}:{}}}function Jw($){if(!$)return{};let{modelCatalogDefaults:W,userInstructionService:Z,configExtensions:Q,onTeamRestored:J,...j}=$;return j}function jw(...$){let W={};for(let Z of $)if(Z)Object.assign(W,Z);return Object.keys(W).length>0?W:void 0}O0();function MF($){let W=$.input.config.telemetry??$.telemetry;if(!W)return;W.capture({event:v.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??A0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function m5($){return!!$&&typeof $==="object"&&!Array.isArray($)}function bJ($){let W=$?.trim();return W?W:void 0}function Xw($,W){let Z=$?.trim();if(!Z)return W;let Q=Date.parse(Z);if(!Number.isFinite(Q))return W;return new Date(Q).toISOString()}function RF($,W){return new Date(new Date($).getTime()+Math.max(0,Math.floor(W))*1000).toISOString()}function NF($,W){return new Date(new Date($).getTime()-Math.max(0,Math.floor(W))*1000).toISOString()}function Yw($,W){if(!$)return W;return new Date($).getTime()>=new Date(W).getTime()?$:W}function Vw($,W){let Z=$.eventId.trim(),Q=$.eventType.trim(),J=$.source.trim(),j=bJ($.subject),X=bJ($.dedupeKey)??`${Q}:${J}:${j??Z}`;return{eventId:Z,eventType:Q,source:J,subject:j,occurredAt:Xw($.occurredAt,W),workspaceRoot:bJ($.workspaceRoot),payload:m5($.payload)?$.payload:void 0,attributes:m5($.attributes)?$.attributes:void 0,dedupeKey:X}}function yJ($,W){if(!W)return;let Z=W.split("."),Q=$;for(let J of Z){if(!m5(Q))return;Q=Q[J]}return Q}function Bw($,W){if($.attributes&&Object.hasOwn($.attributes,W))return $.attributes[W];if($.payload&&Object.hasOwn($.payload,W))return $.payload[W];let Z={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},Q=yJ(Z,W);if(Q!==void 0)return Q;if($.attributes){let J=yJ($.attributes,W);if(J!==void 0)return J}if($.payload)return yJ($.payload,W);return}function rZ($,W){if(Array.isArray(W))return W.some((Z)=>rZ($,Z));if(Array.isArray($))return $.some((Z)=>rZ(Z,W));if(m5(W)){if(!m5($))return!1;return Object.entries(W).every(([Z,Q])=>rZ($[Z],Q))}return Object.is($,W)}function Hw($,W){if(!W||Object.keys(W).length===0)return!0;return Object.entries(W).every(([Z,Q])=>rZ(Bw($,Z),Q))}class hJ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let W=new Date(this.nowFn()).toISOString(),Z=Vw($,W),Q=this.store.insertEventLog(Z,{receivedAtIso:W});if(!Q.created)return this.logger?.debug("cron.event.duplicate",{eventId:Q.record.eventId,eventType:Q.record.eventType,source:Q.record.source}),{event:Q.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:Q.record.dedupeKey}]};try{let J=this.store.listEventSpecsForType(Z.eventType),j=[],X=[],Y=[];for(let H of J){if(!Hw(Z,H.filters)){j.push({specId:H.specId,externalId:H.externalId,reason:"filter_mismatch",dedupeKey:Z.dedupeKey});continue}X.push(H);let G=this.materializeForSpec(H,Z,Q.record.receivedAt);if(G.run)Y.push(G.run);else j.push({specId:H.specId,externalId:H.externalId,reason:G.reason,dedupeKey:Z.dedupeKey})}let V=X.length===0?"unmatched":Y.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(Q.record.eventId,{status:V,matchedSpecCount:X.length,queuedRunCount:Y.length,suppressedCount:j.filter((H)=>H.reason!=="filter_mismatch").length});let B=this.store.getEventLog(Q.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:Q.record.eventId,eventType:Q.record.eventType,status:V,matchedSpecCount:X.length,queuedRunCount:Y.length}),{event:B??Q.record,duplicate:!1,matchedSpecs:X,queuedRuns:Y,suppressions:j}}catch(J){if(this.store.updateEventLogProcessing(Q.record.eventId,{status:"failed",error:J instanceof Error?J.message:String(J)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:Q.record.eventId,eventType:Q.record.eventType,error:J});throw J}}materializeForSpec($,W,Z){let Q=W.dedupeKey??W.eventId,J=$.debounceSeconds??0;if(J>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:Q});if(V){let B=Yw(V.scheduledFor,RF(Z,J)),H=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:W.eventId,scheduledFor:B});if(H)return{run:H,reason:"dedupe_window"}}}let j=$.dedupeWindowSeconds??0;if(j>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:Q,sinceIso:NF(Z,j)}))return{reason:"dedupe_window"};let X=$.cooldownSeconds??0;if(X>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:NF(Z,X)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:W.eventId,scheduledFor:J>0?RF(Z,J):Z}),reason:"dedupe_window"}}}class v5{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},W=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let Q of W)if(this.materializeOneOff(Q))$.oneOffQueued+=1;let Z=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Q of Z)try{if(this.materializeSchedule(Q))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as Dw}from"node:path";import{buildClineSystemPrompt as _w}from"@cline/shared";import{nowIso as EF}from"@cline/shared/db";import{mkdirSync as Gw,writeFileSync as Kw}from"node:fs";import{join as Fw}from"node:path";import{resolveCronReportsDir as Aw}from"@cline/shared/storage";function v$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function l2($,W){if(W===void 0||W===null)return;return`${$}: ${v$(W)}`}function Uw($,W,Z){let Q=[`runId: ${v$($.runId)}`,`specId: ${v$(W.specId)}`,`externalId: ${v$(W.externalId)}`,`title: ${v$(W.title)}`,`triggerKind: ${v$($.triggerKind)}`,`status: ${v$($.status)}`,`sourcePath: ${v$(W.sourcePath)}`],J=[l2("sessionId",$.sessionId),l2("startedAt",$.startedAt),l2("completedAt",$.completedAt),l2("triggerEventId",$.triggerEventId),l2("triggerEventType",Z?.eventType),l2("triggerEventSource",Z?.source),l2("triggerEventSubject",Z?.subject)];for(let j of J)if(j)Q.push(j);return`---
233
+ `);if(Z<0)break;let J=this.buffer.slice(0,Z).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!J)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let j=Number.parseInt(J[1],10),X=Z+4,Y=X+j;if(this.buffer.length<Y)break;W.push(this.buffer.slice(X,Y)),this.buffer=this.buffer.slice(Y)}return W}}class SJ{buffer="";decoder=new VF("utf8");push($){this.buffer+=this.decoder.write($);let W=[];while(!0){let Z=this.buffer.indexOf(`
234
+ `);if(Z<0)break;let Q=this.buffer.slice(0,Z).trim();if(this.buffer=this.buffer.slice(Z+1),Q.length>0)W.push(Q)}return W}}class BF{registration;process;nextRequestId=1;pending=new Map;framedParser=new PJ;newlineParser=new SJ;stderrBuffer="";connected=!1;protocolMode="newline";constructor($){this.registration=$}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=["newline","framed"],W;for(let Z of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Z);try{await this.request("initialize",{protocolVersion:CE,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},SE),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Z;return}catch(Q){W=Q instanceof Error?Q:Error(String(Q))}}throw W??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((W)=>typeof W?.name==="string"&&typeof W.inputSchema==="object"&&W.inputSchema!==null).map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let W=this.registration.transport;if(W.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${W.type}`);this.framedParser=new PJ,this.newlineParser=new SJ,this.stderrBuffer="",this.protocolMode=$;let Z=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},Q=EE(W.command,W.args??[],{cwd:W.cwd,env:{...process.env,...W.env??{}},stdio:["pipe","pipe","pipe"],...Z});this.process=Q,Q.stdout.on("data",(J)=>this.handleStdout(J)),Q.stderr.on("data",(J)=>{if(this.process!==Q)return;if(this.stderrBuffer+=J.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),Q.once("error",(J)=>{if(this.process!==Q)return;this.failAllPending(Error(`MCP process error: ${dZ(J)}`))}),Q.once("exit",(J,j)=>{if(this.process!==Q)return;this.connected=!1,this.process=void 0;let X=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${J??"null"}, signal=${j??"null"}).${X}`))})}handleStdout($){try{let W=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Z of W){let Q=JSON.parse(Z);if(typeof Q.id!=="number")continue;let J=this.pending.get(Q.id);if(!J)continue;if(this.pending.delete(Q.id),clearTimeout(J.timeout),Q.error){let j=Q.error.message||`MCP request failed with code ${Q.error.code??"unknown"}`;J.reject(Error(j));continue}J.resolve(Q.result)}}catch(W){this.handleProtocolFailure(W)}}handleProtocolFailure($){let W=this.process;if(!W)return;this.connected=!1,this.process=void 0;let Z=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${dZ($)}.${Z}`)),W.kill()}async request($,W,Z=PE){let Q=this.process;if(!Q?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let J=this.nextRequestId++,j={jsonrpc:"2.0",id:J,method:$,...W?{params:W}:{}},X=new Promise((Y,V)=>{let B=setTimeout(()=>{this.pending.delete(J),V(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Z);this.pending.set(J,{resolve:Y,reject:V,timeout:B})});try{Q.stdin.write(this.protocolMode==="framed"?XF(j):YF(j))}catch(Y){let V=this.pending.get(J);if(V)clearTimeout(V.timeout),this.pending.delete(J);throw Y}return X}notify($,W){let Z=this.process;if(!Z?.stdin.writable)return;let Q={jsonrpc:"2.0",method:$,...W?{params:W}:{}};Z.stdin.write(this.protocolMode==="framed"?XF(Q):YF(Q))}failAllPending($){for(let[W,Z]of this.pending)clearTimeout(Z.timeout),this.pending.delete(W),Z.reject($)}}class HF{registration;options;client;authContext;constructor($,W){this.registration=$;this.options=W}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=cZ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??jF});this.authContext=$;try{let W=new wE({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Z=vZ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await W.connect(Z),await $.clearError(),this.client=W}catch(W){let Z=W instanceof JF?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):dZ(W);throw await $.markError(Z),Error(Z)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema&&typeof Z.inputSchema==="object"&&!Array.isArray(Z.inputSchema)?Z.inputSchema:{}}))}catch(W){return await this.handleOperationError(W)}}async callTool($){let W=await this.ensureConnectedClient();try{return await W.callTool({name:$.name,arguments:$.arguments??{}})}catch(Z){return await this.handleOperationError(Z)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let W=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${W} Run authorizeMcpServerOAuth for this server.`;return`${W} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let W=this.authContext??cZ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??jF}),Z=$ instanceof JF?this.formatUnauthorizedMessage(W.getLastAuthorizationUrl()):dZ($);throw await W.markError(Z),Error(Z)}}function F6($={}){return(W)=>W.transport.type==="stdio"?new BF(W):new HF(W,$)}mZ();function e0(){return Date.now()}function bE($){return $.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema}))}class c2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let W=this.servers.get($.name);if(!W){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:e0()});return}let Z=JSON.stringify(W.registration.transport)!==JSON.stringify($.transport);if(W.registration={...$},W.updatedAt=e0(),Z)await this.disconnectState(W),W.client=void 0,W.toolCache=void 0,W.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let W=this.requireServer($);await this.disconnectState(W),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let W=this.requireServer($);await this.connectState(W)})}async disconnectServer($){await this.runExclusive($,async()=>{let W=this.requireServer($);await this.disconnectState(W)})}async setServerDisabled($,W){await this.runExclusive($,async()=>{let Z=this.requireServer($);if(Z.registration={...Z.registration,disabled:W},Z.updatedAt=e0(),W)await this.disconnectState(Z)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,W)=>$.name.localeCompare(W.name))}async listTools($){let W=this.requireServer($),Z=W.toolCacheUpdatedAt??0;if(W.toolCache&&e0()-Z<=this.toolsCacheTtlMs)return W.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let W=this.requireServer($),Q=await(await this.ensureConnectedClient(W)).listTools(),J=bE(Q);return W.toolCache=J,W.toolCacheUpdatedAt=e0(),W.updatedAt=e0(),J})}async callTool($){return this.runExclusive($.serverName,async()=>{let W=this.requireServer($.serverName),Z=await this.ensureConnectedClient(W);return W.updatedAt=e0(),Z.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let W of $)await this.unregisterServer(W)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=e0();try{let W=$.client??await this.clientFactory($.registration);await W.connect(),$.client=W,$.status="connected",$.lastError=void 0,$.updatedAt=e0()}catch(W){throw $.status="disconnected",$.lastError=W instanceof Error?W.message:String(W),$.updatedAt=e0(),W}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=e0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=e0()}}requireServer($){let W=this.servers.get($);if(!W)throw Error(`Unknown MCP server: ${$}`);return W}async runExclusive($,W){let Z=this.operationLocks.get($)??Promise.resolve(),Q,J=new Promise((X)=>{Q=X}),j=Z.catch(()=>{return}).then(()=>J);this.operationLocks.set($,j),await Z.catch(()=>{return});try{return await W()}finally{if(Q?.(),this.operationLocks.get($)===j)this.operationLocks.delete($)}}}function A6($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function GF($){return A6($)&&Object.values($).every((W)=>typeof W==="string")}function yE($){return Array.isArray($)&&$.every((W)=>typeof W==="string")}function hE($){if(!A6($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function kE($){let W=$.env?Object.entries($.env):[];if(W.length===0)return{ok:!0};let Z={};for(let[Q,J]of W){if(typeof J==="string"){Z[Q]=J;continue}let j=J.fromEnv?.trim()||Q,X=process.env[j];if(typeof X==="string"&&X.length>0){Z[Q]=X;continue}if(typeof J.value==="string"){Z[Q]=J.value;continue}if(J.required===!0)return{ok:!1,reason:`required environment variable "${j}" is not set`}}return{ok:!0,env:Object.keys(Z).length>0?Z:void 0}}function bJ($){if(!A6($))return{name:"",loadError:"invalid MCP server registration"};let W=typeof $.name==="string"?$.name.trim():"";if(!W)return{name:W,loadError:"empty MCP server name"};let Z=$.env,Q=Z===void 0?void 0:Z;if(Q!==void 0){if(!A6(Q))return{name:W,loadError:"invalid env"};for(let[V,B]of Object.entries(Q))if(typeof B!=="string"&&!hE(B))return{name:W,loadError:`invalid env "${V}"`}}let J=$.transport;if(!A6(J))return{name:W,loadError:"invalid MCP transport"};let j=J.type;if(j!=="stdio"&&j!=="sse"&&j!=="streamableHttp")return{name:W,loadError:"invalid MCP transport type"};if(j!=="stdio"&&Q!==void 0)return{name:W,loadError:"top-level env is only supported for stdio MCP transports"};let X=A6($.metadata)?$.metadata:void 0;if(j==="stdio"){let V=J.command;if(typeof V!=="string"||!V.trim())return{name:W,loadError:"stdio MCP transport requires command"};let B=J.args;if(B!==void 0&&!yE(B))return{name:W,loadError:"stdio MCP transport args must be strings"};let H=J.cwd;if(H!==void 0&&typeof H!=="string")return{name:W,loadError:"stdio MCP transport cwd must be a string"};let G=J.env;if(G!==void 0&&!GF(G))return{name:W,loadError:"stdio MCP transport env must be strings"};let K=kE({name:W,transport:{type:"stdio",command:V,args:B,cwd:H,env:G},env:Q,metadata:X});if(!K.ok)return{name:W,loadError:K.reason};let F=G||K.env?{...G??{},...K.env??{}}:void 0;return{name:W,registration:{name:W,transport:{type:"stdio",command:V,args:B,cwd:H,env:F},metadata:X}}}if(typeof J.url!=="string"||!J.url.trim())return{name:W,loadError:`${j} MCP transport requires url`};let Y=J.headers;if(Y!==void 0&&!GF(Y))return{name:W,loadError:`${j} MCP transport headers must be strings`};return{name:W,registration:{name:W,transport:j==="sse"?{type:"sse",url:J.url,headers:Y}:{type:"streamableHttp",url:J.url,headers:Y},metadata:X}}}function lZ($){let W=new Map;return $.map(({server:Z,owner:Q,ownerLabel:J})=>{let j=bJ(Z);if(!j.registration)return{owner:Q,name:j.name,loadError:j.loadError??"invalid MCP server registration"};let X=W.get(j.registration.name);if(W.has(j.registration.name)){let Y=X?` already registered by ${X}`:"";return{owner:Q,name:j.registration.name,loadError:`duplicate MCP server name "${j.registration.name}"${Y}`}}return W.set(j.registration.name,J),{owner:Q,name:j.registration.name,registration:j.registration}})}import{createHash as IE}from"node:crypto";var KF=64,xE=/[^a-zA-Z0-9_-]+/g,FF=8,gE=1,mE="mcp_tool";function vE($){return IE("sha1").update($).digest("hex").slice(0,FF)}function cE($){return $.replace(xE,"_")}var pZ=({serverName:$,toolName:W})=>{let Z=`${$}__${W}`,Q=cE(Z);if(Q===Z&&Z.length<=KF)return Z;let J=vE(Z),j=KF-gE-FF;return`${Q.slice(0,j)||mE}_${J}`};function k5($){return{[($.nameTransform??pZ)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function rZ($){let W={};for(let Z of $.toolNames)Object.assign(W,k5({serverName:$.serverName,toolName:Z,nameTransform:$.nameTransform}));return W}import{createTool as uE}from"@cline/shared";function dE($,W){let Z=W.description?.trim();if(Z)return Z;return`Execute MCP tool "${W.name}" from server "${$}".`}async function U6($){let W=await $.provider.listTools($.serverName),Z=$.nameTransform??pZ;return W.map((Q)=>{let J=Z({serverName:$.serverName,toolName:Q.name});return uE({name:J,description:dE($.serverName,Q),inputSchema:Q.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(j,X)=>$.provider.callTool({serverName:$.serverName,toolName:Q.name,arguments:j&&typeof j==="object"&&!Array.isArray(j)?j:void 0,context:X})})})}U1();var DF={};w(DF,{listPluginToolsWithDiagnostics:()=>iZ,listPluginTools:()=>I5});import{stat as lE}from"node:fs/promises";import{isAbsolute as pE,relative as rE,resolve as UF}from"node:path";U1();function iE($,W){let Z=rE(UF($),UF(W));return Z===""||!Z.startsWith("..")&&!pE(Z)}var nE=32,f6=new Map;function aE($,W){if(!f6.has($)&&f6.size>=nE){let Z=f6.keys().next().value;if(Z)f6.delete(Z)}f6.set($,W)}async function oE($){let W=await Promise.all($.pluginPaths.map(async(Z)=>{try{let Q=await lE(Z);return`${Z}:${Q.mtimeMs}:${Q.size}`}catch{return`${Z}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:W})}function fF($,W){return $.map((Z)=>({...Z,enabled:!W.has(Z.name)}))}function sE($){return $.sort((W,Z)=>{let Q=W.name.localeCompare(Z.name);if(Q!==0)return Q;return W.path.localeCompare(Z.path)})}async function tE($,W){if(!$.setup)return{tools:[]};let Z=[],Q={registerTool:(J)=>Z.push(J),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(J)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(Q,{workspaceInfo:W}),{tools:Z}}async function iZ($){let W=s1({workspacePath:$.workspacePath,cwd:$.cwd}),Z=N1($.disabledToolNames);if(W.length===0)return{tools:[],failures:[],warnings:[]};let Q=await oE({pluginPaths:W,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),J=f6.get(Q);if(J)return{tools:fF(J.tools,Z),failures:J.failures,warnings:J.warnings};let j=[],X=[],Y=[],V;try{V=await i8({pluginPaths:W,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),X=[...V.failures],Y=[...V.warnings];for(let H of V.extensions??[]){let G=H.__clinePluginPath;if(!G)continue;let K=iE($.workspacePath,G)?"workspace-plugin":"global-plugin",F;try{F=await tE(H,{rootPath:$.workspacePath})}catch(A){X.push({pluginPath:G,pluginName:H.name,phase:"setup",message:A instanceof Error?A.message:String(A),stack:A instanceof Error?A.stack:void 0});continue}for(let A of F.tools)j.push({name:A.name,pluginName:H.name,path:G,source:K,description:A.description?.trim()||void 0})}}catch(H){X=W.map((G)=>({pluginPath:G,phase:"load",message:H instanceof Error?H.message:String(H),stack:H instanceof Error?H.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let B=sE(j);return aE(Q,{tools:B,failures:X,warnings:Y}),{tools:fF(B,Z),failures:X,warnings:Y}}async function I5($){return(await iZ($)).tools}function m5($,W){if(!W)return"global";let Z=zF(W,$);return!Z.startsWith("..")&&!TF(Z)?"workspace":"global"}function Zw($,W){return m5($,W)==="workspace"?"workspace-plugin":"global-plugin"}function Qw($,W){let Z=zF(LF($),LF(W));return Z===""||!Z.startsWith("..")&&!TF(Z)}function Jw($){try{let W=JSON.parse(eE($,"utf8"));return typeof W.name==="string"&&W.name.trim()?W.name.trim():void 0}catch{return}}function jw($){let W=_F($);while(!0){let Z=Ww(W,"package.json");if(g5(Z)){let J=Jw(Z);if(J)return J;break}let Q=_F(W);if(Q===W)break;W=Q}return yJ($,$w($))}function Xw($){let W=[];for(let Z of s1({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let Q of t1([Z]))W.push({directory:Q,pluginName:jw(Z),pluginPath:Z,source:$.workspaceRoot?Zw(Z,$.workspaceRoot):"global-plugin"});return W.sort((Z,Q)=>Q.directory.length-Z.directory.length)}function Yw($,W){return W.find((Z)=>Qw(Z.directory,$))}function x5($){return[...$].sort((W,Z)=>{let Q=(J)=>{switch(J){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(W.source!==Z.source)return Q(W.source)-Q(Z.source);return W.name.localeCompare(Z.name)})}function qF($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function MF($,W){return $.cwd?.trim()||W||process.cwd()}async function OF($,W){if($.userInstructionService)return await W($.userInstructionService);let Z=qF($),Q=MF($,Z),J=I$({skills:{workspacePath:Z||void 0,includePluginSkills:!0,cwd:Q},rules:{workspacePath:Z||void 0},workflows:{workspacePath:Z||void 0}});try{return await J.start(),await W(J)}finally{J.stop()}}function Vw($,W){if(!$)return;let Z=$.listRecords("skill");if(W.id){let Q=Z.find((J)=>J.id===W.id);if(Q)return Q}for(let Q of Z)if(Q.filePath===W.path||Q.item.name===W.name||Q.id===W.name)return Q;return}class m${async list($={}){return await OF($,async(W)=>{let Z=qF($),Q=Xw({workspaceRoot:Z,cwd:MF($,Z)}),J=[],j=[],X=[],Y=[],V=[];if(W){for(let H of W.listRecords("workflow")){let G=H.item;J.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"workflow",source:m5(H.filePath,Z),description:G.instructions,toggleable:!1})}for(let H of W.listRecords("rule")){let G=H.item;j.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"rule",source:m5(H.filePath,Z),description:G.instructions,toggleable:!1})}for(let H of W.listRecords("skill")){let G=H.item,K=Yw(H.filePath,Q);X.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"skill",source:K?.source??m5(H.filePath,Z),description:G.description,pluginName:K?.pluginName,pluginPath:K?.pluginPath,toggleable:!0})}}if(Z)try{for(let H of await I5({workspacePath:Z,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))Y.push({id:`${H.pluginName}:${H.name}:${H.path}`,name:H.name,path:H.path,enabled:H.enabled,kind:"tool",source:H.source,description:H.description,toggleable:!0})}catch{}let B=Q0();if($$({filePath:B}))try{for(let H of t0({filePath:B}))V.push({id:H.name,name:H.name,path:B,enabled:H.disabled!==!0,kind:"mcp",source:m5(B,Z),description:H.transport.type,toggleable:!0})}catch{}return{workflows:x5(J.filter((H)=>g5(H.path))),rules:x5(j.filter((H)=>g5(H.path))),skills:x5(X.filter((H)=>g5(H.path))),tools:x5(Y),mcp:x5(V.filter((H)=>g5(H.path)))}})}async toggle($){if($.type==="skills")return await OF($,async(W)=>{let Z=Vw(W,$),Q=Z?.filePath;if(!Q)throw Error(`Unable to resolve skill setting '${$.id??$.name??yJ($.path??"")}'.`);let J=Z?.item&&"disabled"in Z.item?Z.item.disabled!==!0:void 0,j=$.enabled??(J!==void 0?!J:void 0);if(j===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??yJ($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await mK({filePath:Q,enabled:j}),await W?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:W}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)P9($.name);else tB($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let W=$.name?.trim()||$.id?.trim();if(!W)throw Error("MCP server settings toggle requires a server name.");let Z=$.path?.trim()||Q0(),Q=$.enabled;if(Q===void 0){let J=t0({filePath:Z}).find((j)=>j.name===W);if(!J)throw Error(`Unknown MCP server: ${W}`);Q=J.disabled===!0}return x2({filePath:Z,name:W,disabled:!Q}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function u2(){return new m$}function RF($){return{async list(W){let Z=$;if(Z.listSettings)return await Z.listSettings(W);return await u2().list(W)},async toggle(W){let Z=$;if(Z.toggleSetting)return await Z.toggleSetting(W);return await u2().toggle(W)}}}function EF($){function W(){let Z=$.pendingPrompts;if(!Z)throw Error("Pending prompt service is not available.");return Z}return{list(Z){return W().list(Z)},update(Z){return W().update(Z)},delete(Z){return W().delete(Z)}}}var wF={};w(wF,{splitCoreSessionConfig:()=>v5,isSessionNotFoundError:()=>Z$,SessionNotFoundError:()=>W$,SESSION_NOT_FOUND_ERROR_CODE:()=>d2});var d2="session_not_found";class W$ extends Error{sessionId;code="session_not_found";constructor($,W){super(W??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function Z$($){return $ instanceof W$||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function v5($){let{hooks:W,logger:Z,telemetry:Q,extensionContext:J,extraTools:j,extensions:X,onTeamEvent:Y,onConsecutiveMistakeLimitReached:V,checkpoint:B,compaction:H,...G}=$,K={};if(W)K.hooks=W;if(Z)K.logger=Z;if(Q)K.telemetry=Q;if(J)K.extensionContext=J;if(j)K.extraTools=j;if(X)K.extensions=X;if(Y)K.onTeamEvent=Y;if(V)K.onConsecutiveMistakeLimitReached=V;if(B?.createCheckpoint)K.checkpoint=B;if(H?.compact)K.compaction=H;let F=Object.keys(K).length>0?K:void 0;return{config:{...G,...B?{checkpoint:{enabled:B.enabled}}:{},...H?{compaction:{enabled:H.enabled,strategy:H.strategy,preserveRecentTokens:H.preserveRecentTokens,summarizer:H.summarizer}}:{}},...F?{localRuntime:F}:{}}}function CF($){let W=$.config;return"providerId"in W?{...$,config:{...W,...Bw($.localRuntime)},localRuntime:$.localRuntime}:$}function hJ($,W={}){let Z=v5($.config),Q=w0(W.defaultCapabilities,$.capabilities),J=Hw(Z.localRuntime,$.localRuntime),j=W.withExtensionContext?.(J?.extensionContext);if(j)J={...J??{},extensionContext:j};return{...$,...Z,...J?{localRuntime:J}:{},...Q?{capabilities:Q}:{}}}function Bw($){if(!$)return{};let{modelCatalogDefaults:W,userInstructionService:Z,configExtensions:Q,onTeamRestored:J,...j}=$;return j}function Hw(...$){let W={};for(let Z of $)if(Z)Object.assign(W,Z);return Object.keys(W).length>0?W:void 0}O0();function PF($){let W=$.input.config.telemetry??$.telemetry;if(!W)return;W.capture({event:v.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??F0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function c5($){return!!$&&typeof $==="object"&&!Array.isArray($)}function kJ($){let W=$?.trim();return W?W:void 0}function Gw($,W){let Z=$?.trim();if(!Z)return W;let Q=Date.parse(Z);if(!Number.isFinite(Q))return W;return new Date(Q).toISOString()}function SF($,W){return new Date(new Date($).getTime()+Math.max(0,Math.floor(W))*1000).toISOString()}function bF($,W){return new Date(new Date($).getTime()-Math.max(0,Math.floor(W))*1000).toISOString()}function Kw($,W){if(!$)return W;return new Date($).getTime()>=new Date(W).getTime()?$:W}function Fw($,W){let Z=$.eventId.trim(),Q=$.eventType.trim(),J=$.source.trim(),j=kJ($.subject),X=kJ($.dedupeKey)??`${Q}:${J}:${j??Z}`;return{eventId:Z,eventType:Q,source:J,subject:j,occurredAt:Gw($.occurredAt,W),workspaceRoot:kJ($.workspaceRoot),payload:c5($.payload)?$.payload:void 0,attributes:c5($.attributes)?$.attributes:void 0,dedupeKey:X}}function IJ($,W){if(!W)return;let Z=W.split("."),Q=$;for(let J of Z){if(!c5(Q))return;Q=Q[J]}return Q}function Aw($,W){if($.attributes&&Object.hasOwn($.attributes,W))return $.attributes[W];if($.payload&&Object.hasOwn($.payload,W))return $.payload[W];let Z={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},Q=IJ(Z,W);if(Q!==void 0)return Q;if($.attributes){let J=IJ($.attributes,W);if(J!==void 0)return J}if($.payload)return IJ($.payload,W);return}function nZ($,W){if(Array.isArray(W))return W.some((Z)=>nZ($,Z));if(Array.isArray($))return $.some((Z)=>nZ(Z,W));if(c5(W)){if(!c5($))return!1;return Object.entries(W).every(([Z,Q])=>nZ($[Z],Q))}return Object.is($,W)}function Uw($,W){if(!W||Object.keys(W).length===0)return!0;return Object.entries(W).every(([Z,Q])=>nZ(Aw($,Z),Q))}class xJ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let W=new Date(this.nowFn()).toISOString(),Z=Fw($,W),Q=this.store.insertEventLog(Z,{receivedAtIso:W});if(!Q.created)return this.logger?.debug("cron.event.duplicate",{eventId:Q.record.eventId,eventType:Q.record.eventType,source:Q.record.source}),{event:Q.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:Q.record.dedupeKey}]};try{let J=this.store.listEventSpecsForType(Z.eventType),j=[],X=[],Y=[];for(let H of J){if(!Uw(Z,H.filters)){j.push({specId:H.specId,externalId:H.externalId,reason:"filter_mismatch",dedupeKey:Z.dedupeKey});continue}X.push(H);let G=this.materializeForSpec(H,Z,Q.record.receivedAt);if(G.run)Y.push(G.run);else j.push({specId:H.specId,externalId:H.externalId,reason:G.reason,dedupeKey:Z.dedupeKey})}let V=X.length===0?"unmatched":Y.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(Q.record.eventId,{status:V,matchedSpecCount:X.length,queuedRunCount:Y.length,suppressedCount:j.filter((H)=>H.reason!=="filter_mismatch").length});let B=this.store.getEventLog(Q.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:Q.record.eventId,eventType:Q.record.eventType,status:V,matchedSpecCount:X.length,queuedRunCount:Y.length}),{event:B??Q.record,duplicate:!1,matchedSpecs:X,queuedRuns:Y,suppressions:j}}catch(J){if(this.store.updateEventLogProcessing(Q.record.eventId,{status:"failed",error:J instanceof Error?J.message:String(J)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:Q.record.eventId,eventType:Q.record.eventType,error:J});throw J}}materializeForSpec($,W,Z){let Q=W.dedupeKey??W.eventId,J=$.debounceSeconds??0;if(J>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:Q});if(V){let B=Kw(V.scheduledFor,SF(Z,J)),H=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:W.eventId,scheduledFor:B});if(H)return{run:H,reason:"dedupe_window"}}}let j=$.dedupeWindowSeconds??0;if(j>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:Q,sinceIso:bF(Z,j)}))return{reason:"dedupe_window"};let X=$.cooldownSeconds??0;if(X>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:bF(Z,X)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:W.eventId,scheduledFor:J>0?SF(Z,J):Z}),reason:"dedupe_window"}}}class u5{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},W=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let Q of W)if(this.materializeOneOff(Q))$.oneOffQueued+=1;let Z=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Q of Z)try{if(this.materializeSchedule(Q))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as zw}from"node:path";import{buildClineSystemPrompt as qw}from"@cline/shared";import{nowIso as yF}from"@cline/shared/db";import{mkdirSync as fw,writeFileSync as Dw}from"node:fs";import{join as _w}from"node:path";import{resolveCronReportsDir as Lw}from"@cline/shared/storage";function v$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function l2($,W){if(W===void 0||W===null)return;return`${$}: ${v$(W)}`}function Ow($,W,Z){let Q=[`runId: ${v$($.runId)}`,`specId: ${v$(W.specId)}`,`externalId: ${v$(W.externalId)}`,`title: ${v$(W.title)}`,`triggerKind: ${v$($.triggerKind)}`,`status: ${v$($.status)}`,`sourcePath: ${v$(W.sourcePath)}`],J=[l2("sessionId",$.sessionId),l2("startedAt",$.startedAt),l2("completedAt",$.completedAt),l2("triggerEventId",$.triggerEventId),l2("triggerEventType",Z?.eventType),l2("triggerEventSource",Z?.source),l2("triggerEventSubject",Z?.subject)];for(let j of J)if(j)Q.push(j);return`---
235
235
  ${Q.join(`
236
236
  `)}
237
237
  ---
238
- `}function fw($){let W=[];if($.triggerEvent){let Z=$.triggerEvent,Q=[`- eventId: ${Z.eventId}`,`- eventType: ${Z.eventType}`,`- source: ${Z.source}`,Z.subject?`- subject: ${Z.subject}`:"",`- occurredAt: ${Z.occurredAt}`,Z.dedupeKey?`- dedupeKey: ${Z.dedupeKey}`:"",Z.attributes?`- attributes: ${JSON.stringify(Z.attributes)}`:""].filter((J)=>J.length>0);W.push(`## Trigger Event
238
+ `}function Tw($){let W=[];if($.triggerEvent){let Z=$.triggerEvent,Q=[`- eventId: ${Z.eventId}`,`- eventType: ${Z.eventType}`,`- source: ${Z.source}`,Z.subject?`- subject: ${Z.subject}`:"",`- occurredAt: ${Z.occurredAt}`,Z.dedupeKey?`- dedupeKey: ${Z.dedupeKey}`:"",Z.attributes?`- attributes: ${JSON.stringify(Z.attributes)}`:""].filter((J)=>J.length>0);W.push(`## Trigger Event
239
239
 
240
240
  ${Q.join(`
241
241
  `)}
@@ -254,17 +254,17 @@ ${Q.join(`
254
254
  ${Z.join(`
255
255
  `)}
256
256
  `)}return W.join(`
257
- `)}function kJ($){let W=Aw($.specs);Gw(W,{recursive:!0});let Z=Fw(W,`${$.run.runId}.md`),Q=`${Uw($.run,$.spec,$.data.triggerEvent)}
258
- ${fw($.data)}`;return Kw(Z,Q,"utf8"),Z}class IJ{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,W,Z){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let Q=Math.max(1,Math.floor(Z)),J=this.activeExecutions.get($)??new Set;if(J.size>=Q)return!1;return J.add(W),this.activeExecutions.set($,J),!0}release($,W){let Z=this.activeExecutions.get($);if(!Z)return;if(Z.delete(W),Z.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let W of this.activeExecutions.values())$+=W.size;return $}}var Lw=15000,Ow=90,wF=["rules","skills","plugins"];function Tw($,W){return new Set($.extensions??wF).has(W)}function zw($,W){if($.tools===void 0)return{"*":{autoApprove:!0}};let Z={"*":{enabled:!1,autoApprove:!0}};for(let Q of $.tools)Z[Q]={enabled:!0,autoApprove:!0};if(W==="yolo")Z[T0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Z}function qw($){let W=$?.trim();if(!W)return;return["# Notes Directory",`Use ${W} for durable notes related to this automation.`,"Before starting, inspect relevant existing notes there when useful. During or after the run, write concise notes there when they would help future runs continue with context."].join(`
259
- `)}class xJ extends Error{constructor($){super($);this.name="TimeoutError"}}async function Mw($,W){if(W<=0)return $;let Z,Q=new Promise((J,j)=>{Z=setTimeout(()=>{j(new xJ("cron run timed out"))},W)});try{return await Promise.race([$,Q])}finally{if(Z)clearTimeout(Z)}}class c5{store;materializer;options;limiter;claimLeaseMs;timer;started=!1;ticking=!1;disposed=!1;stopping=!1;activeRuns=new Map;constructor($){this.store=$.store,this.materializer=$.materializer,this.options=$,this.limiter=new IJ($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??Ow)*1000)}async start(){if(this.disposed)throw Error("CronRunner disposed");if(this.started)return;this.stopping=!1,this.started=!0;let $=Math.max(2000,this.options.pollIntervalMs??Lw);await this.tick(),this.timer=setInterval(()=>void this.tick(),$)}async stop(){let $=this.started;if(this.started=!1,this.stopping=!0,this.timer)clearInterval(this.timer),this.timer=void 0;if(!$)return;let W=[...this.activeRuns.entries()];await Promise.all(W.map(async([Z,Q])=>{if(Q.sessionId)try{await this.options.runtimeHandlers.abortSession(Q.sessionId)}catch{}try{this.store.requeueRun({runId:Z,claimToken:Q.claimToken,error:"runner stopped before completion"})}catch{}}))}async dispose(){if(this.disposed)return;this.disposed=!0,await this.stop()}async tick(){if(this.ticking)return;this.ticking=!0;try{this.materializer.materializeAll();let $=this.store.claimDueRuns({nowIso:EF(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((W)=>this.executeClaim(W)))}catch($){let W=this.options.logger;if(W)if(W.error)W.error("cron.runner.tick.failed",{error:$});else W.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,W])=>{let Z=this.store.getRun($);return Z?[{...Z,...W}]:[]})}async executeClaim($){let W=$.run,Z=this.store.getSpec(W.specId);if(!Z){this.store.completeRun(W.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!Z.enabled||Z.removed){this.store.completeRun(W.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let Q=Z.maxParallel&&Z.maxParallel>0?Z.maxParallel:1;if(!this.limiter.acquire(Z.specId,W.runId,Q)){this.store.requeueRun({runId:W.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(Z.specId,W.runId),this.store.requeueRun({runId:W.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(W.runId,{claimToken:$.claimToken});let j=W.triggerEventId?this.store.getEventLog(W.triggerEventId):void 0,X,Y,V=Date.now(),B;if(Z.timeoutSeconds&&Z.timeoutSeconds>0)B=V+Z.timeoutSeconds*1000;try{Y=this.startClaimLeaseHeartbeat($);let H=await this.buildStartRequest(Z);if(X=(await this.options.runtimeHandlers.startSession(H)).sessionId.trim(),!X)throw Error("runtime returned empty sessionId");this.activeRuns.set(W.runId,{claimToken:$.claimToken,sessionId:X}),this.store.attachSessionIdToRun(W.runId,X);let K={config:H,prompt:this.buildPrompt(Z,j)},F=this.options.runtimeHandlers.sendSession(X,K),A=B?Math.max(1,B-Date.now()):0,U=(await Mw(F,A)).result,_=Date.now(),D=kJ({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...W,sessionId:X,status:"done"},spec:Z,data:{finalText:U.text,usage:U.usage,toolCalls:U.toolCalls,durationMs:_-V,triggerEvent:j}});this.store.completeRun(W.runId,{status:"done",sessionId:X,reportPath:D,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",Z,W.runId),this.store.updateSpecLastRunAt(Z.specId,EF())}catch(H){let G=H instanceof xJ;if(X&&G)try{await this.options.runtimeHandlers.abortSession(X)}catch{}let K=H instanceof Error?H.message:String(H),F=Date.now(),A=kJ({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...W,sessionId:X,status:"failed"},spec:Z,data:{error:K,durationMs:F-V,triggerEvent:j}});this.store.completeRun(W.runId,{status:"failed",sessionId:X,reportPath:A,error:K,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.failed",Z,W.runId)}finally{if(Y?.(),X)try{await this.options.runtimeHandlers.stopSession(X)}catch{}this.activeRuns.delete(W.runId),this.limiter.release(Z.specId,W.runId)}}publishScheduleExecutionEvent($,W,Z){if(W.source!=="hub-schedule"||!this.options.eventPublisher)return;let Q=this.store.getRun(Z);if(!Q)return;let J=Q.status==="done"?"success":Q.status==="cancelled"?"aborted":Q.status==="running"?"running":Q.status==="queued"?"pending":"failed";this.options.eventPublisher($,{scheduleId:W.externalId,executionId:Q.runId,sessionId:Q.sessionId,triggeredAt:new Date(Q.scheduledFor??Q.createdAt).getTime(),startedAt:Q.startedAt?new Date(Q.startedAt).getTime():void 0,endedAt:Q.completedAt?new Date(Q.completedAt).getTime():void 0,status:J,errorMessage:Q.error})}buildPrompt($,W){let Z=$.prompt??"";if(!W)return Z;let Q={eventId:W.eventId,eventType:W.eventType,source:W.source,subject:W.subject,occurredAt:W.occurredAt,workspaceRoot:W.workspaceRoot,dedupeKey:W.dedupeKey,attributes:W.attributes,payload:W.payload};return`${Z}
257
+ `)}function gJ($){let W=Lw($.specs);fw(W,{recursive:!0});let Z=_w(W,`${$.run.runId}.md`),Q=`${Ow($.run,$.spec,$.data.triggerEvent)}
258
+ ${Tw($.data)}`;return Dw(Z,Q,"utf8"),Z}class mJ{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,W,Z){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let Q=Math.max(1,Math.floor(Z)),J=this.activeExecutions.get($)??new Set;if(J.size>=Q)return!1;return J.add(W),this.activeExecutions.set($,J),!0}release($,W){let Z=this.activeExecutions.get($);if(!Z)return;if(Z.delete(W),Z.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let W of this.activeExecutions.values())$+=W.size;return $}}var Mw=15000,Nw=90,hF=["rules","skills","plugins"];function Rw($,W){return new Set($.extensions??hF).has(W)}function Ew($,W){if($.tools===void 0)return{"*":{autoApprove:!0}};let Z={"*":{enabled:!1,autoApprove:!0}};for(let Q of $.tools)Z[Q]={enabled:!0,autoApprove:!0};if(W==="yolo")Z[T0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Z}function ww($){let W=$?.trim();if(!W)return;return["# Notes Directory",`Use ${W} for durable notes related to this automation.`,"Before starting, inspect relevant existing notes there when useful. During or after the run, write concise notes there when they would help future runs continue with context."].join(`
259
+ `)}class vJ extends Error{constructor($){super($);this.name="TimeoutError"}}async function Cw($,W){if(W<=0)return $;let Z,Q=new Promise((J,j)=>{Z=setTimeout(()=>{j(new vJ("cron run timed out"))},W)});try{return await Promise.race([$,Q])}finally{if(Z)clearTimeout(Z)}}class d5{store;materializer;options;limiter;claimLeaseMs;timer;started=!1;ticking=!1;disposed=!1;stopping=!1;activeRuns=new Map;constructor($){this.store=$.store,this.materializer=$.materializer,this.options=$,this.limiter=new mJ($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??Nw)*1000)}async start(){if(this.disposed)throw Error("CronRunner disposed");if(this.started)return;this.stopping=!1,this.started=!0;let $=Math.max(2000,this.options.pollIntervalMs??Mw);await this.tick(),this.timer=setInterval(()=>void this.tick(),$)}async stop(){let $=this.started;if(this.started=!1,this.stopping=!0,this.timer)clearInterval(this.timer),this.timer=void 0;if(!$)return;let W=[...this.activeRuns.entries()];await Promise.all(W.map(async([Z,Q])=>{if(Q.sessionId)try{await this.options.runtimeHandlers.abortSession(Q.sessionId)}catch{}try{this.store.requeueRun({runId:Z,claimToken:Q.claimToken,error:"runner stopped before completion"})}catch{}}))}async dispose(){if(this.disposed)return;this.disposed=!0,await this.stop()}async tick(){if(this.ticking)return;this.ticking=!0;try{this.materializer.materializeAll();let $=this.store.claimDueRuns({nowIso:yF(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((W)=>this.executeClaim(W)))}catch($){let W=this.options.logger;if(W)if(W.error)W.error("cron.runner.tick.failed",{error:$});else W.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,W])=>{let Z=this.store.getRun($);return Z?[{...Z,...W}]:[]})}async executeClaim($){let W=$.run,Z=this.store.getSpec(W.specId);if(!Z){this.store.completeRun(W.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!Z.enabled||Z.removed){this.store.completeRun(W.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let Q=Z.maxParallel&&Z.maxParallel>0?Z.maxParallel:1;if(!this.limiter.acquire(Z.specId,W.runId,Q)){this.store.requeueRun({runId:W.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(Z.specId,W.runId),this.store.requeueRun({runId:W.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(W.runId,{claimToken:$.claimToken});let j=W.triggerEventId?this.store.getEventLog(W.triggerEventId):void 0,X,Y,V=Date.now(),B;if(Z.timeoutSeconds&&Z.timeoutSeconds>0)B=V+Z.timeoutSeconds*1000;try{Y=this.startClaimLeaseHeartbeat($);let H=await this.buildStartRequest(Z);if(X=(await this.options.runtimeHandlers.startSession(H)).sessionId.trim(),!X)throw Error("runtime returned empty sessionId");this.activeRuns.set(W.runId,{claimToken:$.claimToken,sessionId:X}),this.store.attachSessionIdToRun(W.runId,X);let K={config:H,prompt:this.buildPrompt(Z,j)},F=this.options.runtimeHandlers.sendSession(X,K),A=B?Math.max(1,B-Date.now()):0,U=(await Cw(F,A)).result,_=Date.now(),D=gJ({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...W,sessionId:X,status:"done"},spec:Z,data:{finalText:U.text,usage:U.usage,toolCalls:U.toolCalls,durationMs:_-V,triggerEvent:j}});this.store.completeRun(W.runId,{status:"done",sessionId:X,reportPath:D,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",Z,W.runId),this.store.updateSpecLastRunAt(Z.specId,yF())}catch(H){let G=H instanceof vJ;if(X&&G)try{await this.options.runtimeHandlers.abortSession(X)}catch{}let K=H instanceof Error?H.message:String(H),F=Date.now(),A=gJ({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...W,sessionId:X,status:"failed"},spec:Z,data:{error:K,durationMs:F-V,triggerEvent:j}});this.store.completeRun(W.runId,{status:"failed",sessionId:X,reportPath:A,error:K,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.failed",Z,W.runId)}finally{if(Y?.(),X)try{await this.options.runtimeHandlers.stopSession(X)}catch{}this.activeRuns.delete(W.runId),this.limiter.release(Z.specId,W.runId)}}publishScheduleExecutionEvent($,W,Z){if(W.source!=="hub-schedule"||!this.options.eventPublisher)return;let Q=this.store.getRun(Z);if(!Q)return;let J=Q.status==="done"?"success":Q.status==="cancelled"?"aborted":Q.status==="running"?"running":Q.status==="queued"?"pending":"failed";this.options.eventPublisher($,{scheduleId:W.externalId,executionId:Q.runId,sessionId:Q.sessionId,triggeredAt:new Date(Q.scheduledFor??Q.createdAt).getTime(),startedAt:Q.startedAt?new Date(Q.startedAt).getTime():void 0,endedAt:Q.completedAt?new Date(Q.completedAt).getTime():void 0,status:J,errorMessage:Q.error})}buildPrompt($,W){let Z=$.prompt??"";if(!W)return Z;let Q={eventId:W.eventId,eventType:W.eventType,source:W.source,subject:W.subject,occurredAt:W.occurredAt,workspaceRoot:W.workspaceRoot,dedupeKey:W.dedupeKey,attributes:W.attributes,payload:W.payload};return`${Z}
260
260
 
261
261
  Trigger event:
262
- ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Z=setInterval(()=>{let Q=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,Q))clearInterval(Z)},W);return()=>clearInterval(Z)}async buildSystemPrompt($,W,Z,Q){let J=qw($.notesDirectory),j=V6(void 0,J),X=await G5(W),Y=_w({ide:"Cline Cron",workspaceRoot:W,workspaceName:Dw(W),metadata:X,rules:$.systemPrompt?void 0:j,mode:Z,providerId:Q,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?V6(Y,j)??Y:Y}async buildStartRequest($){let W=($.workspaceRoot??"").trim(),Z=($.providerId??"").trim(),Q=($.modelId??"").trim(),J=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,j=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():W;if(!W)throw Error("cron spec requires workspaceRoot");let X=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:W,cwd:j,provider:Z,model:Q,mode:X,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,W,X,Z),maxIterations:$.maxIterations,enableTools:J?.enableTools??!0,enableSpawn:J?.enableSpawn??!0,enableTeams:J?.enableTeams??!0,autoApproveTools:J?.autoApproveTools??!0,toolPolicies:zw($,X),configExtensions:wF.filter((Y)=>Tw($,Y))}}}import{existsSync as iw,readdirSync as nw,readFileSync as aw,statSync as ow}from"node:fs";import{relative as sw}from"node:path";import{resolveCronSpecsDir as tw}from"@cline/shared/storage";function u5($,W,Z,Q){let J=new Set;function j(X){let Y=X.toLowerCase();if(Q){let B=Q.indexOf(Y);if(B!==-1)return B+W}let V=Number(X);if(!Number.isInteger(V)||V<W||V>Z)throw Error(`Invalid cron value "${X}" for range [${W}-${Z}]`);return V}for(let X of $.split(",")){if(X==="*"){for(let B=W;B<=Z;B+=1)J.add(B);continue}let Y=X.indexOf("/");if(Y!==-1){let B=X.slice(0,Y),H=Number(X.slice(Y+1));if(!Number.isInteger(H)||H<1)throw Error(`Invalid step "${X.slice(Y+1)}"`);let G=W,K=Z;if(B!=="*"){let F=B.indexOf("-");if(F!==-1)G=j(B.slice(0,F)),K=j(B.slice(F+1));else G=j(B)}if(G>K)throw Error(`Invalid cron range "${B}"`);for(let F=G;F<=K;F+=H)J.add(F);continue}let V=X.indexOf("-");if(V!==-1){let B=j(X.slice(0,V)),H=j(X.slice(V+1));if(B>H)throw Error(`Invalid cron range "${X}"`);for(let G=B;G<=H;G+=1)J.add(G);continue}J.add(j(X))}return[...J].sort((X,Y)=>X-Y)}var Rw=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],PF=["sun","mon","tue","wed","thu","fri","sat"];function d5($,W,Z){let Q=$[W];if(typeof Q!=="string")throw Error(`Invalid cron pattern "${Z}": missing field ${W+1}`);return Q}function gJ($,W){let Z=$[0];if(typeof Z!=="number")throw Error(`Invalid cron pattern: no values parsed for ${W}`);return Z}function mJ($){let W=$.trim().split(/\s+/);if(W.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${W.length}`);return{minutes:u5(d5(W,0,$),0,59),hours:u5(d5(W,1,$),0,23),daysOfMonth:u5(d5(W,2,$),1,31),months:u5(d5(W,3,$),1,12,Rw),daysOfWeek:u5(d5(W,4,$),0,6,PF)}}function vJ($){mJ($)}function SF($,W,Z=Date.now()){p2($,Z,W)}var CF=new Map,Nw=new Map(PF.map(($,W)=>[$,W]));function bF($){let W=$?.trim();return W?W:void 0}function yF($){let W=CF.get($);if(W)return W;let Z=new Intl.DateTimeFormat("en-US",{timeZone:$,calendar:"gregory",numberingSystem:"latn",year:"numeric",month:"2-digit",day:"2-digit",weekday:"short",hour:"2-digit",minute:"2-digit",hourCycle:"h23"});return CF.set($,Z),Z}function Ew($){let W=bF($);if(!W)return;yF(W).format(new Date)}function ww($,W){let Z=yF(W).formatToParts(new Date($)),Q=new Map(Z.map((X)=>[X.type,X.value])),J=Q.get("weekday")?.toLowerCase().slice(0,3)??"",j=Nw.get(J);if(j===void 0)throw Error(`Unable to resolve weekday for timezone "${W}"`);return{month:Number(Q.get("month")),dayOfMonth:Number(Q.get("day")),dayOfWeek:j,hour:Number(Q.get("hour")),minute:Number(Q.get("minute"))}}function Cw($){let W=new Date($);return{month:W.getMonth()+1,dayOfMonth:W.getDate(),dayOfWeek:W.getDay(),hour:W.getHours(),minute:W.getMinutes()}}function Pw($,W){return $.months.includes(W.month)&&$.daysOfMonth.includes(W.dayOfMonth)&&$.daysOfWeek.includes(W.dayOfWeek)&&$.hours.includes(W.hour)&&$.minutes.includes(W.minute)}function Sw($,W,Z){let Q=mJ($),J=new Date(W);J.setSeconds(0,0);let j=J.getTime()+60000,X=new Date(W);X.setFullYear(X.getFullYear()+4);let Y=X.getTime();while(j<=Y){if(Pw(Q,ww(j,Z)))return j;j+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Z}"`)}function p2($,W,Z){let Q=bF(Z);if(Q)return Ew(Q),Sw($,W,Q);let J=mJ($),j=new Date(W);j.setSeconds(0,0),j=new Date(j.getTime()+60000);let X=new Date(W);X.setFullYear(X.getFullYear()+4);while(j<=X){let{month:Y,dayOfMonth:V,dayOfWeek:B,hour:H,minute:G}=Cw(j.getTime());if(!J.months.includes(Y)){let K=J.months.find((A)=>A>Y)??gJ(J.months,"months"),F=K<=Y?1:0;j=new Date(j.getFullYear()+F,K-1,1,0,0,0,0);continue}if(!J.daysOfMonth.includes(V)||!J.daysOfWeek.includes(B)){j=new Date(j.getFullYear(),j.getMonth(),V+1,0,0,0,0);continue}if(!J.hours.includes(H)){let K=J.hours.find((A)=>A>H)??gJ(J.hours,"hours"),F=K<=H?1:0;j=new Date(j.getFullYear(),j.getMonth(),j.getDate()+F,K,0,0,0);continue}if(!J.minutes.includes(G)){let K=J.minutes.find((A)=>A>G)??gJ(J.minutes,"minutes"),F=K<=G?1:0;j=new Date(j.getFullYear(),j.getMonth(),j.getDate(),j.getHours()+F,K,0,0);continue}return j.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{createHash as bw}from"node:crypto";import yw from"yaml";function hw($){let W=$.replace(/\\/g,"/");if(W.startsWith("events/")&&W.endsWith(".event.md"))return"event";if(W.endsWith(".cron.md"))return"schedule";return"one_off"}function kw($){let W=$.replace(/\r\n/g,`
262
+ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Z=setInterval(()=>{let Q=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,Q))clearInterval(Z)},W);return()=>clearInterval(Z)}async buildSystemPrompt($,W,Z,Q){let J=ww($.notesDirectory),j=B6(void 0,J),X=await F5(W),Y=qw({ide:"Cline Cron",workspaceRoot:W,workspaceName:zw(W),metadata:X,rules:$.systemPrompt?void 0:j,mode:Z,providerId:Q,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?B6(Y,j)??Y:Y}async buildStartRequest($){let W=($.workspaceRoot??"").trim(),Z=($.providerId??"").trim(),Q=($.modelId??"").trim(),J=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,j=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():W;if(!W)throw Error("cron spec requires workspaceRoot");let X=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:W,cwd:j,provider:Z,model:Q,mode:X,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,W,X,Z),maxIterations:$.maxIterations,enableTools:J?.enableTools??!0,enableSpawn:J?.enableSpawn??!0,enableTeams:J?.enableTeams??!0,autoApproveTools:J?.autoApproveTools??!0,toolPolicies:Ew($,X),configExtensions:hF.filter((Y)=>Rw($,Y))}}}import{existsSync as tw,readdirSync as ew,readFileSync as $C,statSync as WC}from"node:fs";import{relative as ZC}from"node:path";import{resolveCronSpecsDir as QC}from"@cline/shared/storage";function l5($,W,Z,Q){let J=new Set;function j(X){let Y=X.toLowerCase();if(Q){let B=Q.indexOf(Y);if(B!==-1)return B+W}let V=Number(X);if(!Number.isInteger(V)||V<W||V>Z)throw Error(`Invalid cron value "${X}" for range [${W}-${Z}]`);return V}for(let X of $.split(",")){if(X==="*"){for(let B=W;B<=Z;B+=1)J.add(B);continue}let Y=X.indexOf("/");if(Y!==-1){let B=X.slice(0,Y),H=Number(X.slice(Y+1));if(!Number.isInteger(H)||H<1)throw Error(`Invalid step "${X.slice(Y+1)}"`);let G=W,K=Z;if(B!=="*"){let F=B.indexOf("-");if(F!==-1)G=j(B.slice(0,F)),K=j(B.slice(F+1));else G=j(B)}if(G>K)throw Error(`Invalid cron range "${B}"`);for(let F=G;F<=K;F+=H)J.add(F);continue}let V=X.indexOf("-");if(V!==-1){let B=j(X.slice(0,V)),H=j(X.slice(V+1));if(B>H)throw Error(`Invalid cron range "${X}"`);for(let G=B;G<=H;G+=1)J.add(G);continue}J.add(j(X))}return[...J].sort((X,Y)=>X-Y)}var Pw=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],IF=["sun","mon","tue","wed","thu","fri","sat"];function p5($,W,Z){let Q=$[W];if(typeof Q!=="string")throw Error(`Invalid cron pattern "${Z}": missing field ${W+1}`);return Q}function cJ($,W){let Z=$[0];if(typeof Z!=="number")throw Error(`Invalid cron pattern: no values parsed for ${W}`);return Z}function uJ($){let W=$.trim().split(/\s+/);if(W.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${W.length}`);return{minutes:l5(p5(W,0,$),0,59),hours:l5(p5(W,1,$),0,23),daysOfMonth:l5(p5(W,2,$),1,31),months:l5(p5(W,3,$),1,12,Pw),daysOfWeek:l5(p5(W,4,$),0,6,IF)}}function dJ($){uJ($)}function xF($,W,Z=Date.now()){p2($,Z,W)}var kF=new Map,Sw=new Map(IF.map(($,W)=>[$,W]));function gF($){let W=$?.trim();return W?W:void 0}function mF($){let W=kF.get($);if(W)return W;let Z=new Intl.DateTimeFormat("en-US",{timeZone:$,calendar:"gregory",numberingSystem:"latn",year:"numeric",month:"2-digit",day:"2-digit",weekday:"short",hour:"2-digit",minute:"2-digit",hourCycle:"h23"});return kF.set($,Z),Z}function bw($){let W=gF($);if(!W)return;mF(W).format(new Date)}function yw($,W){let Z=mF(W).formatToParts(new Date($)),Q=new Map(Z.map((X)=>[X.type,X.value])),J=Q.get("weekday")?.toLowerCase().slice(0,3)??"",j=Sw.get(J);if(j===void 0)throw Error(`Unable to resolve weekday for timezone "${W}"`);return{month:Number(Q.get("month")),dayOfMonth:Number(Q.get("day")),dayOfWeek:j,hour:Number(Q.get("hour")),minute:Number(Q.get("minute"))}}function hw($){let W=new Date($);return{month:W.getMonth()+1,dayOfMonth:W.getDate(),dayOfWeek:W.getDay(),hour:W.getHours(),minute:W.getMinutes()}}function kw($,W){return $.months.includes(W.month)&&$.daysOfMonth.includes(W.dayOfMonth)&&$.daysOfWeek.includes(W.dayOfWeek)&&$.hours.includes(W.hour)&&$.minutes.includes(W.minute)}function Iw($,W,Z){let Q=uJ($),J=new Date(W);J.setSeconds(0,0);let j=J.getTime()+60000,X=new Date(W);X.setFullYear(X.getFullYear()+4);let Y=X.getTime();while(j<=Y){if(kw(Q,yw(j,Z)))return j;j+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Z}"`)}function p2($,W,Z){let Q=gF(Z);if(Q)return bw(Q),Iw($,W,Q);let J=uJ($),j=new Date(W);j.setSeconds(0,0),j=new Date(j.getTime()+60000);let X=new Date(W);X.setFullYear(X.getFullYear()+4);while(j<=X){let{month:Y,dayOfMonth:V,dayOfWeek:B,hour:H,minute:G}=hw(j.getTime());if(!J.months.includes(Y)){let K=J.months.find((A)=>A>Y)??cJ(J.months,"months"),F=K<=Y?1:0;j=new Date(j.getFullYear()+F,K-1,1,0,0,0,0);continue}if(!J.daysOfMonth.includes(V)||!J.daysOfWeek.includes(B)){j=new Date(j.getFullYear(),j.getMonth(),V+1,0,0,0,0);continue}if(!J.hours.includes(H)){let K=J.hours.find((A)=>A>H)??cJ(J.hours,"hours"),F=K<=H?1:0;j=new Date(j.getFullYear(),j.getMonth(),j.getDate()+F,K,0,0,0);continue}if(!J.minutes.includes(G)){let K=J.minutes.find((A)=>A>G)??cJ(J.minutes,"minutes"),F=K<=G?1:0;j=new Date(j.getFullYear(),j.getMonth(),j.getDate(),j.getHours()+F,K,0,0);continue}return j.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{createHash as xw}from"node:crypto";import gw from"yaml";function mw($){let W=$.replace(/\\/g,"/");if(W.startsWith("events/")&&W.endsWith(".event.md"))return"event";if(W.endsWith(".cron.md"))return"schedule";return"one_off"}function vw($){let W=$.replace(/\r\n/g,`
263
263
  `);if(!W.startsWith(`---
264
264
  `))return{frontmatter:void 0,body:$};let Z=W.slice(4),Q=Z.indexOf(`
265
265
  ---`);if(Q===-1)return{frontmatter:void 0,body:$};let J=Z.slice(0,Q),j=Z.slice(Q+4);if(j.startsWith(`
266
- `))j=j.slice(1);return{frontmatter:J,body:j}}function W1($){if(typeof $!=="string")return;let W=$.trim();return W.length>0?W:void 0}function Iw($){if(!Array.isArray($))return;let W=$.map((Z)=>typeof Z==="string"?Z.trim():"").filter((Z)=>Z.length>0);return W.length>0?W:void 0}function dJ($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function xw($){let W=dJ($);if(!W)return;let Z=W1(W.providerId),Q=W1(W.modelId);if(Z===void 0&&Q===void 0)return;return{providerId:Z,modelId:Q}}function gw($){if(typeof $!=="string")return;let W=$.trim().toLowerCase();if(W==="act"||W==="plan"||W==="yolo")return W;return}function kF($,W={}){let Z=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!Z)return;let Q=[...new Set(Z.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0))];if(Array.isArray($)&&W.preserveEmptyArray)return Q;return Q.length>0?Q:void 0}var mw=new Set(D$);function vw($){let W=kF($,{preserveEmptyArray:!0});if(!W)return;let Z=W.filter((Q)=>!mw.has(Q));if(Z.length>0)throw Error(`unknown tool(s): ${Z.join(", ")}`);return W}var cw=new Set(["rules","skills","plugins"]);function uw($){let W=kF($,{preserveEmptyArray:!0});if(!W)return;let Z=W.filter((Q)=>!cw.has(Q));if(Z.length>0)throw Error(`unknown extension(s): ${Z.join(", ")}`);return W}function cJ($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function uJ($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function lJ($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Z)=>lJ(Z)).join(",")}]`;let W=Object.entries($).filter(([,Z])=>Z!==void 0);return W.sort(([Z],[Q])=>Z<Q?-1:Z>Q?1:0),`{${W.map(([Z,Q])=>`${JSON.stringify(Z)}:${lJ(Q)}`).join(",")}}`}function IF($,W){let Z=bw("sha256");return Z.update(lJ($)),Z.update(`
267
- `),Z.update(W),Z.digest("hex")}function dw($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var lw=["schedule","timezone"],pw=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],rw=["cwd"];function hF($,W,Z,Q,J){return{externalId:$,relativePath:$,triggerKind:W,body:Z,contentHash:IF(Q,Z),error:J}}function R1($,W,Z,Q,J,j){return{externalId:$,relativePath:W,triggerKind:Z,body:Q,contentHash:J,error:j}}function xF($){let W=$.relativePath.replace(/\\/g,"/"),Z=hw(W),{frontmatter:Q,body:J}=kw($.raw),j={};if(Q!==void 0&&Q.trim().length>0)try{let D=yw.parse(Q);if(D&&typeof D==="object"&&!Array.isArray(D))j=D;else if(D!==null&&D!==void 0)return hF(W,Z,J,{},"frontmatter must be a YAML mapping")}catch(D){return hF(W,Z,J,{},D instanceof Error?`failed to parse frontmatter: ${D.message}`:"failed to parse frontmatter")}let X=IF(j,J),Y=W1(j.id),V=Y??W;if(Z!=="schedule"){for(let D of lw)if(j[D]!==void 0)return R1(V,W,Z,J,X,`field "${D}" is only allowed on *.cron.md specs`)}for(let D of rw)if(j[D]!==void 0)return R1(V,W,Z,J,X,`field "${D}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Z!=="event"){for(let D of pw)if(j[D]!==void 0)return R1(V,W,Z,J,X,`field "${D}" is only allowed on .event.md specs`)}let B=W1(j.prompt),H=J.trim(),G=B??(H.length>0?H:void 0);if(!G)return R1(V,W,Z,J,X,"prompt is required (frontmatter `prompt` or markdown body)");let K=W1(j.workspaceRoot);if(!K)return R1(V,W,Z,J,X,"workspaceRoot is required");let F,A;try{F=vw(j.tools),A=uw(j.extensions)}catch(D){return R1(V,W,Z,J,X,D instanceof Error?D.message:String(D))}let f=gw(j.mode);if(j.mode!==void 0&&f===void 0)return R1(V,W,Z,J,X,"mode must be one of: act, plan, yolo");let U={id:Y,title:W1(j.title)??Y??dw(W),prompt:G,workspaceRoot:K,mode:f??"yolo",systemPrompt:W1(j.systemPrompt),modelSelection:xw(j.modelSelection),maxIterations:cJ(j.maxIterations),timeoutSeconds:cJ(j.timeoutSeconds),tools:F,notesDirectory:W1(j.notesDirectory),extensions:A,source:W1(j.source)??"user",tags:Iw(j.tags),enabled:typeof j.enabled==="boolean"?j.enabled:!0,metadata:dJ(j.metadata)},_;if(Z==="schedule"){let D=W1(j.schedule);if(!D)return R1(V,W,Z,J,X,"schedule is required for *.cron.md specs");let M=W1(j.timezone);try{SF(D,M)}catch(O){return R1(V,W,Z,J,X,O instanceof Error?O.message:String(O))}_={...U,triggerKind:"schedule",schedule:D,timezone:M}}else if(Z==="event"){let D=W1(j.event);if(!D)return R1(V,W,Z,J,X,"event is required for .event.md specs");_={...U,triggerKind:"event",event:D,filters:dJ(j.filters),debounceSeconds:uJ(j.debounceSeconds),dedupeWindowSeconds:uJ(j.dedupeWindowSeconds),cooldownSeconds:uJ(j.cooldownSeconds),maxParallel:cJ(j.maxParallel)}}else _={...U,triggerKind:"one_off"};return{externalId:V,relativePath:W,triggerKind:Z,body:J,contentHash:X,spec:_}}function ew($,W){return sw($,W).replace(/\\/g,"/")}function $C($){if(!iw($))return[];let W=[],Z=[$];while(Z.length>0){let Q=Z.pop();if(!Q)continue;let J;try{J=nw(Q,{withFileTypes:!0})}catch{continue}for(let j of J){let X=`${Q}/${j.name}`;if(j.isDirectory()){if(j.name==="reports")continue;Z.push(X);continue}if(!j.isFile())continue;if(!j.name.endsWith(".md"))continue;W.push(X)}}return W}class pJ{store;cronDir;constructor($){this.store=$.store,this.cronDir=tw($.specs??($.workspaceRoot?{scope:"workspace",workspaceRoot:$.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let $={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},W=$C(this.cronDir),Z=new Set;for(let J of W){let j=ew(this.cronDir,J);Z.add(j),$.scanned+=1;let X=await this.reconcileFile(j,J);if(X){if($.changes.push(X),$.upserted+=1,X.parse.error)$.invalidParses+=1}}let Q=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let J of Q)if(!Z.has(J.sourcePath))this.handleFileDeleted(J),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,W){let Z=this.store.getSpecBySourcePath($),Q,J;try{Q=aw(W,"utf8"),J=ow(W).mtimeMs}catch{return}let X=xF({relativePath:$,raw:Q}),Y=this.store.upsertSpec({externalId:X.externalId,sourcePath:$,triggerKind:X.triggerKind,sourceMtimeMs:J,sourceHash:X.contentHash,parseStatus:X.error?"invalid":"valid",parseError:X.error,spec:X.spec});if(!X.error&&X.triggerKind==="schedule"&&Y.record.enabled)this.applyScheduleNextRunAt(Y.record,{forceReset:!Z||Z.removed||!Z.enabled||Z.scheduleExpr!==Y.record.scheduleExpr||Z.timezone!==Y.record.timezone});return{relativePath:$,result:Y,parse:X}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let W of $)this.applyScheduleNextRunAt(W,{forceReset:!1})}applyScheduleNextRunAt($,W){if(!$.scheduleExpr)return;if(!W.forceReset&&$.nextRunAt)return;try{let Z=Date.now(),Q=$.lastRunAt?Math.max(Z,new Date($.lastRunAt).getTime()):Z,J=p2($.scheduleExpr,Q,$.timezone),j=new Date(J).toISOString();if($.nextRunAt!==j)this.store.updateSpecNextRunAt($.specId,j)}catch{}}}import{existsSync as WC,mkdirSync as ZC,watch as QC}from"node:fs";import{relative as JC,resolve as jC}from"node:path";var XC=250;class rJ{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??XC),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{ZC($,{recursive:!0}),this.watcher=QC($,{recursive:!0},(W,Z)=>{if(!Z)return;let Q=String(Z).replace(/\\/g,"/");if(!Q.endsWith(".md"))return;if(Q.startsWith("reports/"))return;this.scheduleReconcile(Q)}),this.watcher.on("error",this.onError)}catch(W){this.onError(W)}}stop(){for(let $ of this.pending.values())clearTimeout($);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile($){let W=this.pending.get($);if(W)clearTimeout(W);let Z=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,Z)}async reconcileNow($){try{let W=jC(this.reconciler.getCronDir(),$);if(!WC(W)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Z=JC(this.reconciler.getCronDir(),W).replace(/\\/g,"/");await this.reconciler.reconcileFile(Z,W),await this.onReconciled()}catch(W){this.onError(W)}}}import{randomUUID as l5}from"node:crypto";import{asOptionalString as c,asString as J0,loadSqliteDb as VC,nowIso as C0}from"@cline/shared/db";import{resolveCronDbPath as BC}from"@cline/shared/storage";var YC=[`CREATE TABLE IF NOT EXISTS cron_specs (
266
+ `))j=j.slice(1);return{frontmatter:J,body:j}}function $1($){if(typeof $!=="string")return;let W=$.trim();return W.length>0?W:void 0}function cw($){if(!Array.isArray($))return;let W=$.map((Z)=>typeof Z==="string"?Z.trim():"").filter((Z)=>Z.length>0);return W.length>0?W:void 0}function rJ($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function uw($){let W=rJ($);if(!W)return;let Z=$1(W.providerId),Q=$1(W.modelId);if(Z===void 0&&Q===void 0)return;return{providerId:Z,modelId:Q}}function dw($){if(typeof $!=="string")return;let W=$.trim().toLowerCase();if(W==="act"||W==="plan"||W==="yolo")return W;return}function cF($,W={}){let Z=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!Z)return;let Q=[...new Set(Z.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0))];if(Array.isArray($)&&W.preserveEmptyArray)return Q;return Q.length>0?Q:void 0}var lw=new Set(_$);function pw($){let W=cF($,{preserveEmptyArray:!0});if(!W)return;let Z=W.filter((Q)=>!lw.has(Q));if(Z.length>0)throw Error(`unknown tool(s): ${Z.join(", ")}`);return W}var rw=new Set(["rules","skills","plugins"]);function iw($){let W=cF($,{preserveEmptyArray:!0});if(!W)return;let Z=W.filter((Q)=>!rw.has(Q));if(Z.length>0)throw Error(`unknown extension(s): ${Z.join(", ")}`);return W}function lJ($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function pJ($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function iJ($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Z)=>iJ(Z)).join(",")}]`;let W=Object.entries($).filter(([,Z])=>Z!==void 0);return W.sort(([Z],[Q])=>Z<Q?-1:Z>Q?1:0),`{${W.map(([Z,Q])=>`${JSON.stringify(Z)}:${iJ(Q)}`).join(",")}}`}function uF($,W){let Z=xw("sha256");return Z.update(iJ($)),Z.update(`
267
+ `),Z.update(W),Z.digest("hex")}function nw($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var aw=["schedule","timezone"],ow=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],sw=["cwd"];function vF($,W,Z,Q,J){return{externalId:$,relativePath:$,triggerKind:W,body:Z,contentHash:uF(Q,Z),error:J}}function E1($,W,Z,Q,J,j){return{externalId:$,relativePath:W,triggerKind:Z,body:Q,contentHash:J,error:j}}function dF($){let W=$.relativePath.replace(/\\/g,"/"),Z=mw(W),{frontmatter:Q,body:J}=vw($.raw),j={};if(Q!==void 0&&Q.trim().length>0)try{let D=gw.parse(Q);if(D&&typeof D==="object"&&!Array.isArray(D))j=D;else if(D!==null&&D!==void 0)return vF(W,Z,J,{},"frontmatter must be a YAML mapping")}catch(D){return vF(W,Z,J,{},D instanceof Error?`failed to parse frontmatter: ${D.message}`:"failed to parse frontmatter")}let X=uF(j,J),Y=$1(j.id),V=Y??W;if(Z!=="schedule"){for(let D of aw)if(j[D]!==void 0)return E1(V,W,Z,J,X,`field "${D}" is only allowed on *.cron.md specs`)}for(let D of sw)if(j[D]!==void 0)return E1(V,W,Z,J,X,`field "${D}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Z!=="event"){for(let D of ow)if(j[D]!==void 0)return E1(V,W,Z,J,X,`field "${D}" is only allowed on .event.md specs`)}let B=$1(j.prompt),H=J.trim(),G=B??(H.length>0?H:void 0);if(!G)return E1(V,W,Z,J,X,"prompt is required (frontmatter `prompt` or markdown body)");let K=$1(j.workspaceRoot);if(!K)return E1(V,W,Z,J,X,"workspaceRoot is required");let F,A;try{F=pw(j.tools),A=iw(j.extensions)}catch(D){return E1(V,W,Z,J,X,D instanceof Error?D.message:String(D))}let f=dw(j.mode);if(j.mode!==void 0&&f===void 0)return E1(V,W,Z,J,X,"mode must be one of: act, plan, yolo");let U={id:Y,title:$1(j.title)??Y??nw(W),prompt:G,workspaceRoot:K,mode:f??"yolo",systemPrompt:$1(j.systemPrompt),modelSelection:uw(j.modelSelection),maxIterations:lJ(j.maxIterations),timeoutSeconds:lJ(j.timeoutSeconds),tools:F,notesDirectory:$1(j.notesDirectory),extensions:A,source:$1(j.source)??"user",tags:cw(j.tags),enabled:typeof j.enabled==="boolean"?j.enabled:!0,metadata:rJ(j.metadata)},_;if(Z==="schedule"){let D=$1(j.schedule);if(!D)return E1(V,W,Z,J,X,"schedule is required for *.cron.md specs");let M=$1(j.timezone);try{xF(D,M)}catch(O){return E1(V,W,Z,J,X,O instanceof Error?O.message:String(O))}_={...U,triggerKind:"schedule",schedule:D,timezone:M}}else if(Z==="event"){let D=$1(j.event);if(!D)return E1(V,W,Z,J,X,"event is required for .event.md specs");_={...U,triggerKind:"event",event:D,filters:rJ(j.filters),debounceSeconds:pJ(j.debounceSeconds),dedupeWindowSeconds:pJ(j.dedupeWindowSeconds),cooldownSeconds:pJ(j.cooldownSeconds),maxParallel:lJ(j.maxParallel)}}else _={...U,triggerKind:"one_off"};return{externalId:V,relativePath:W,triggerKind:Z,body:J,contentHash:X,spec:_}}function JC($,W){return ZC($,W).replace(/\\/g,"/")}function jC($){if(!tw($))return[];let W=[],Z=[$];while(Z.length>0){let Q=Z.pop();if(!Q)continue;let J;try{J=ew(Q,{withFileTypes:!0})}catch{continue}for(let j of J){let X=`${Q}/${j.name}`;if(j.isDirectory()){if(j.name==="reports")continue;Z.push(X);continue}if(!j.isFile())continue;if(!j.name.endsWith(".md"))continue;W.push(X)}}return W}class nJ{store;cronDir;constructor($){this.store=$.store,this.cronDir=QC($.specs??($.workspaceRoot?{scope:"workspace",workspaceRoot:$.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let $={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},W=jC(this.cronDir),Z=new Set;for(let J of W){let j=JC(this.cronDir,J);Z.add(j),$.scanned+=1;let X=await this.reconcileFile(j,J);if(X){if($.changes.push(X),$.upserted+=1,X.parse.error)$.invalidParses+=1}}let Q=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let J of Q)if(!Z.has(J.sourcePath))this.handleFileDeleted(J),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,W){let Z=this.store.getSpecBySourcePath($),Q,J;try{Q=$C(W,"utf8"),J=WC(W).mtimeMs}catch{return}let X=dF({relativePath:$,raw:Q}),Y=this.store.upsertSpec({externalId:X.externalId,sourcePath:$,triggerKind:X.triggerKind,sourceMtimeMs:J,sourceHash:X.contentHash,parseStatus:X.error?"invalid":"valid",parseError:X.error,spec:X.spec});if(!X.error&&X.triggerKind==="schedule"&&Y.record.enabled)this.applyScheduleNextRunAt(Y.record,{forceReset:!Z||Z.removed||!Z.enabled||Z.scheduleExpr!==Y.record.scheduleExpr||Z.timezone!==Y.record.timezone});return{relativePath:$,result:Y,parse:X}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let W of $)this.applyScheduleNextRunAt(W,{forceReset:!1})}applyScheduleNextRunAt($,W){if(!$.scheduleExpr)return;if(!W.forceReset&&$.nextRunAt)return;try{let Z=Date.now(),Q=$.lastRunAt?Math.max(Z,new Date($.lastRunAt).getTime()):Z,J=p2($.scheduleExpr,Q,$.timezone),j=new Date(J).toISOString();if($.nextRunAt!==j)this.store.updateSpecNextRunAt($.specId,j)}catch{}}}import{existsSync as XC,mkdirSync as YC,watch as VC}from"node:fs";import{relative as BC,resolve as HC}from"node:path";var GC=250;class aJ{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??GC),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{YC($,{recursive:!0}),this.watcher=VC($,{recursive:!0},(W,Z)=>{if(!Z)return;let Q=String(Z).replace(/\\/g,"/");if(!Q.endsWith(".md"))return;if(Q.startsWith("reports/"))return;this.scheduleReconcile(Q)}),this.watcher.on("error",this.onError)}catch(W){this.onError(W)}}stop(){for(let $ of this.pending.values())clearTimeout($);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile($){let W=this.pending.get($);if(W)clearTimeout(W);let Z=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,Z)}async reconcileNow($){try{let W=HC(this.reconciler.getCronDir(),$);if(!XC(W)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Z=BC(this.reconciler.getCronDir(),W).replace(/\\/g,"/");await this.reconciler.reconcileFile(Z,W),await this.onReconciled()}catch(W){this.onError(W)}}}import{randomUUID as r5}from"node:crypto";import{asOptionalString as c,asString as J0,loadSqliteDb as FC,nowIso as C0}from"@cline/shared/db";import{resolveCronDbPath as AC}from"@cline/shared/storage";var KC=[`CREATE TABLE IF NOT EXISTS cron_specs (
268
268
  spec_id TEXT PRIMARY KEY,
269
269
  external_id TEXT NOT NULL,
270
270
  source_path TEXT NOT NULL UNIQUE,
@@ -355,17 +355,17 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
355
355
  ON cron_specs(trigger_kind, enabled, next_run_at);`,`CREATE INDEX IF NOT EXISTS cron_specs_event_match_idx
356
356
  ON cron_specs(trigger_kind, event_type, enabled);`,`CREATE INDEX IF NOT EXISTS cron_specs_parse_status_idx
357
357
  ON cron_specs(parse_status, updated_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_source_path_idx
358
- ON cron_specs(source_path);`];function gF($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let W of YC)$.exec(W)}function iZ($){if(!$)return;try{let W=JSON.parse($);if(W&&typeof W==="object"&&!Array.isArray(W))return W}catch{}return}function iJ($,W={}){if(!$)return;try{let Z=JSON.parse($);if(!Array.isArray(Z))return;let Q=Z.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0);if(W.preserveEmpty)return Q;return Q.length>0?Q:void 0}catch{return}}function r2($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function c$($){return{specId:J0($.spec_id),externalId:J0($.external_id),sourcePath:J0($.source_path),triggerKind:J0($.trigger_kind),sourceMtimeMs:r2($.source_mtime_ms),sourceHash:c($.source_hash),parseStatus:J0($.parse_status)==="invalid"?"invalid":"valid",parseError:c($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:J0($.title),prompt:c($.prompt),workspaceRoot:c($.workspace_root),scheduleExpr:c($.schedule_expr),timezone:c($.timezone),eventType:c($.event_type),filters:iZ(c($.filters_json)),debounceSeconds:r2($.debounce_seconds),dedupeWindowSeconds:r2($.dedupe_window_seconds),cooldownSeconds:r2($.cooldown_seconds),mode:c($.mode),systemPrompt:c($.system_prompt),providerId:c($.provider_id),modelId:c($.model_id),maxIterations:r2($.max_iterations),timeoutSeconds:r2($.timeout_seconds),maxParallel:r2($.max_parallel),tools:iJ(c($.tools_json),{preserveEmpty:!0}),notesDirectory:c($.notes_directory),extensions:iJ(c($.extensions_json),{preserveEmpty:!0}),source:c($.source),tags:iJ(c($.tags_json)),metadata:iZ(c($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:c($.last_materialized_run_id),lastRunAt:c($.last_run_at),nextRunAt:c($.next_run_at),createdAt:J0($.created_at),updatedAt:J0($.updated_at)}}function nJ($){return{runId:J0($.run_id),specId:J0($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:J0($.trigger_kind),status:J0($.status),claimToken:c($.claim_token),claimStartedAt:c($.claim_started_at),claimUntilAt:c($.claim_until_at),scheduledFor:c($.scheduled_for),triggerEventId:c($.trigger_event_id),startedAt:c($.started_at),completedAt:c($.completed_at),sessionId:c($.session_id),reportPath:c($.report_path),error:c($.error),attemptCount:Number($.attempt_count??0),createdAt:J0($.created_at),updatedAt:J0($.updated_at)}}function mF($){return{eventId:J0($.event_id),eventType:J0($.event_type),source:J0($.source),subject:c($.subject),occurredAt:J0($.occurred_at),receivedAt:J0($.received_at),workspaceRoot:c($.workspace_root),dedupeKey:c($.dedupe_key),payload:iZ(c($.payload_json)),attributes:iZ(c($.attributes_json)),processingStatus:J0($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:c($.error),createdAt:J0($.created_at),updatedAt:J0($.updated_at)}}function vF($){return $?JSON.stringify($):null}var HC=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function cF($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function GC($,W,Z,Q){for(let J of HC){let j=$[J],X=W[J];if(cF(j)!==cF(X))return!0}if(Z===!1&&Q===!0)return!0;return!1}function KC($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function FC($){return`hub/schedules/${$}.cron.md`}function AC($){let W={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(W).length>0?W:void 0}function aJ($){return{triggerKind:"schedule",title:$.name.trim(),prompt:$.prompt,workspaceRoot:$.workspaceRoot.trim(),schedule:$.cronPattern.trim(),mode:$.mode??"act",systemPrompt:$.systemPrompt,modelSelection:$.modelSelection?JSON.parse(JSON.stringify($.modelSelection)):void 0,maxIterations:typeof $.maxIterations==="number"?Math.floor($.maxIterations):void 0,timeoutSeconds:typeof $.timeoutSeconds==="number"?Math.floor($.timeoutSeconds):void 0,maxParallel:typeof $.maxParallel==="number"?Math.max(1,Math.floor($.maxParallel)):1,source:"hub-schedule",tags:$.tags?.filter((W)=>W.trim().length>0),enabled:$.enabled!==!1,metadata:AC($)}}function uF($){return JSON.stringify(aJ($))}function UC($,W){let Z=$.metadata?{...$.metadata}:{},Q=W.createdBy===null?void 0:W.createdBy!==void 0?W.createdBy:typeof Z.__hubScheduleCreatedBy==="string"?Z.__hubScheduleCreatedBy:void 0,J=W.cwd!==void 0?W.cwd:typeof Z.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,j=W.runtimeOptions!==void 0?W.runtimeOptions:Z.__hubRuntimeOptions&&typeof Z.__hubRuntimeOptions==="object"&&!Array.isArray(Z.__hubRuntimeOptions)?Z.__hubRuntimeOptions:void 0;return delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions,{name:W.name??$.title,cronPattern:W.cronPattern??$.scheduleExpr??"",prompt:W.prompt??$.prompt??"",workspaceRoot:W.workspaceRoot??$.workspaceRoot??"",cwd:J,modelSelection:W.modelSelection!==void 0?W.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:W.enabled??$.enabled,mode:W.mode??($.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"),systemPrompt:W.systemPrompt===null?void 0:W.systemPrompt!==void 0?W.systemPrompt:$.systemPrompt,maxIterations:W.maxIterations===null?void 0:W.maxIterations!==void 0?W.maxIterations:$.maxIterations,timeoutSeconds:W.timeoutSeconds===null?void 0:W.timeoutSeconds!==void 0?W.timeoutSeconds:$.timeoutSeconds,maxParallel:W.maxParallel??$.maxParallel??1,createdBy:Q,tags:W.tags??$.tags,runtimeOptions:j,metadata:W.metadata!==void 0?W.metadata:Object.keys(Z).length>0?Z:void 0}}class p5{db;constructor($={}){let W=$.dbPath??BC();this.db=VC(W),gF(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let W=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return W?c$(W):void 0}getSpec($){let W=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return W?c$(W):void 0}getSpecByExternalId($){let W=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return W?c$(W):void 0}listSpecs($={}){let W=[],Z=[];if($.triggerKind)W.push("trigger_kind = ?"),Z.push($.triggerKind);if(typeof $.enabled==="boolean")W.push("enabled = ?"),Z.push($.enabled?1:0);if($.parseStatus)W.push("parse_status = ?"),Z.push($.parseStatus);if(!$.includeRemoved)W.push("removed = 0");let Q=W.length>0?`WHERE ${W.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${Q} ORDER BY created_at DESC LIMIT ?`).all(...Z,J).map((X)=>c$(X))}createHubSchedule($){let W=`sched_${l5()}`,Z=this.upsertSpec({externalId:W,sourcePath:FC(W),triggerKind:"schedule",sourceHash:uF($),parseStatus:"valid",spec:aJ($)});this.initializeScheduleNextRun(Z.record.specId);let Q=this.getSpec(Z.record.specId);if(!Q)throw Error("failed to create hub schedule");return Q}getHubSchedule($){let W=this.db.prepare(`SELECT * FROM cron_specs
358
+ ON cron_specs(source_path);`];function lF($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let W of KC)$.exec(W)}function aZ($){if(!$)return;try{let W=JSON.parse($);if(W&&typeof W==="object"&&!Array.isArray(W))return W}catch{}return}function oJ($,W={}){if(!$)return;try{let Z=JSON.parse($);if(!Array.isArray(Z))return;let Q=Z.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0);if(W.preserveEmpty)return Q;return Q.length>0?Q:void 0}catch{return}}function r2($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function c$($){return{specId:J0($.spec_id),externalId:J0($.external_id),sourcePath:J0($.source_path),triggerKind:J0($.trigger_kind),sourceMtimeMs:r2($.source_mtime_ms),sourceHash:c($.source_hash),parseStatus:J0($.parse_status)==="invalid"?"invalid":"valid",parseError:c($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:J0($.title),prompt:c($.prompt),workspaceRoot:c($.workspace_root),scheduleExpr:c($.schedule_expr),timezone:c($.timezone),eventType:c($.event_type),filters:aZ(c($.filters_json)),debounceSeconds:r2($.debounce_seconds),dedupeWindowSeconds:r2($.dedupe_window_seconds),cooldownSeconds:r2($.cooldown_seconds),mode:c($.mode),systemPrompt:c($.system_prompt),providerId:c($.provider_id),modelId:c($.model_id),maxIterations:r2($.max_iterations),timeoutSeconds:r2($.timeout_seconds),maxParallel:r2($.max_parallel),tools:oJ(c($.tools_json),{preserveEmpty:!0}),notesDirectory:c($.notes_directory),extensions:oJ(c($.extensions_json),{preserveEmpty:!0}),source:c($.source),tags:oJ(c($.tags_json)),metadata:aZ(c($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:c($.last_materialized_run_id),lastRunAt:c($.last_run_at),nextRunAt:c($.next_run_at),createdAt:J0($.created_at),updatedAt:J0($.updated_at)}}function sJ($){return{runId:J0($.run_id),specId:J0($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:J0($.trigger_kind),status:J0($.status),claimToken:c($.claim_token),claimStartedAt:c($.claim_started_at),claimUntilAt:c($.claim_until_at),scheduledFor:c($.scheduled_for),triggerEventId:c($.trigger_event_id),startedAt:c($.started_at),completedAt:c($.completed_at),sessionId:c($.session_id),reportPath:c($.report_path),error:c($.error),attemptCount:Number($.attempt_count??0),createdAt:J0($.created_at),updatedAt:J0($.updated_at)}}function pF($){return{eventId:J0($.event_id),eventType:J0($.event_type),source:J0($.source),subject:c($.subject),occurredAt:J0($.occurred_at),receivedAt:J0($.received_at),workspaceRoot:c($.workspace_root),dedupeKey:c($.dedupe_key),payload:aZ(c($.payload_json)),attributes:aZ(c($.attributes_json)),processingStatus:J0($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:c($.error),createdAt:J0($.created_at),updatedAt:J0($.updated_at)}}function rF($){return $?JSON.stringify($):null}var UC=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function iF($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function fC($,W,Z,Q){for(let J of UC){let j=$[J],X=W[J];if(iF(j)!==iF(X))return!0}if(Z===!1&&Q===!0)return!0;return!1}function DC($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function _C($){return`hub/schedules/${$}.cron.md`}function LC($){let W={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(W).length>0?W:void 0}function tJ($){return{triggerKind:"schedule",title:$.name.trim(),prompt:$.prompt,workspaceRoot:$.workspaceRoot.trim(),schedule:$.cronPattern.trim(),mode:$.mode??"act",systemPrompt:$.systemPrompt,modelSelection:$.modelSelection?JSON.parse(JSON.stringify($.modelSelection)):void 0,maxIterations:typeof $.maxIterations==="number"?Math.floor($.maxIterations):void 0,timeoutSeconds:typeof $.timeoutSeconds==="number"?Math.floor($.timeoutSeconds):void 0,maxParallel:typeof $.maxParallel==="number"?Math.max(1,Math.floor($.maxParallel)):1,source:"hub-schedule",tags:$.tags?.filter((W)=>W.trim().length>0),enabled:$.enabled!==!1,metadata:LC($)}}function nF($){return JSON.stringify(tJ($))}function OC($,W){let Z=$.metadata?{...$.metadata}:{},Q=W.createdBy===null?void 0:W.createdBy!==void 0?W.createdBy:typeof Z.__hubScheduleCreatedBy==="string"?Z.__hubScheduleCreatedBy:void 0,J=W.cwd!==void 0?W.cwd:typeof Z.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,j=W.runtimeOptions!==void 0?W.runtimeOptions:Z.__hubRuntimeOptions&&typeof Z.__hubRuntimeOptions==="object"&&!Array.isArray(Z.__hubRuntimeOptions)?Z.__hubRuntimeOptions:void 0;return delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions,{name:W.name??$.title,cronPattern:W.cronPattern??$.scheduleExpr??"",prompt:W.prompt??$.prompt??"",workspaceRoot:W.workspaceRoot??$.workspaceRoot??"",cwd:J,modelSelection:W.modelSelection!==void 0?W.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:W.enabled??$.enabled,mode:W.mode??($.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"),systemPrompt:W.systemPrompt===null?void 0:W.systemPrompt!==void 0?W.systemPrompt:$.systemPrompt,maxIterations:W.maxIterations===null?void 0:W.maxIterations!==void 0?W.maxIterations:$.maxIterations,timeoutSeconds:W.timeoutSeconds===null?void 0:W.timeoutSeconds!==void 0?W.timeoutSeconds:$.timeoutSeconds,maxParallel:W.maxParallel??$.maxParallel??1,createdBy:Q,tags:W.tags??$.tags,runtimeOptions:j,metadata:W.metadata!==void 0?W.metadata:Object.keys(Z).length>0?Z:void 0}}class i5{db;constructor($={}){let W=$.dbPath??AC();this.db=FC(W),lF(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let W=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return W?c$(W):void 0}getSpec($){let W=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return W?c$(W):void 0}getSpecByExternalId($){let W=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return W?c$(W):void 0}listSpecs($={}){let W=[],Z=[];if($.triggerKind)W.push("trigger_kind = ?"),Z.push($.triggerKind);if(typeof $.enabled==="boolean")W.push("enabled = ?"),Z.push($.enabled?1:0);if($.parseStatus)W.push("parse_status = ?"),Z.push($.parseStatus);if(!$.includeRemoved)W.push("removed = 0");let Q=W.length>0?`WHERE ${W.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${Q} ORDER BY created_at DESC LIMIT ?`).all(...Z,J).map((X)=>c$(X))}createHubSchedule($){let W=`sched_${r5()}`,Z=this.upsertSpec({externalId:W,sourcePath:_C(W),triggerKind:"schedule",sourceHash:nF($),parseStatus:"valid",spec:tJ($)});this.initializeScheduleNextRun(Z.record.specId);let Q=this.getSpec(Z.record.specId);if(!Q)throw Error("failed to create hub schedule");return Q}getHubSchedule($){let W=this.db.prepare(`SELECT * FROM cron_specs
359
359
  WHERE external_id = ? AND source = 'hub-schedule' AND removed = 0
360
360
  ORDER BY created_at ASC LIMIT 1`).get($);return W?c$(W):void 0}listHubSchedules($={}){let W=["source = 'hub-schedule'","trigger_kind = 'schedule'","removed = 0"],Z=[];if(typeof $.enabled==="boolean")W.push("enabled = ?"),Z.push($.enabled?1:0);if($.tags&&$.tags.length>0)for(let j of $.tags)W.push("tags_json LIKE ?"),Z.push(`%"${j.trim()}"%`);let Q=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_specs
361
361
  WHERE ${W.join(" AND ")}
362
- ORDER BY created_at DESC LIMIT ?`).all(...Z,Q).map((j)=>c$(j))}updateHubSchedule($,W){let Z=this.getHubSchedule($);if(!Z)return;let Q=UC(Z,W),J=this.upsertSpec({externalId:$,sourcePath:Z.sourcePath,triggerKind:"schedule",sourceHash:uF(Q),parseStatus:"valid",spec:aJ(Q)});if(W.cronPattern!==void 0||W.enabled!==void 0)this.initializeScheduleNextRun(J.record.specId);return this.getSpec(J.record.specId)}deleteHubSchedule($){let W=this.getHubSchedule($);if(!W)return!1;return this.markSpecRemoved(W.specId),this.cancelQueuedRunsForSpec(W.specId),!0}enqueueHubScheduleRun($,W="manual"){let Z=this.getHubSchedule($);if(!Z||!Z.enabled||Z.removed||Z.parseStatus!=="valid")return;return this.enqueueRun({specId:Z.specId,specRevision:Z.revision,triggerKind:W,scheduledFor:C0()})}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
362
+ ORDER BY created_at DESC LIMIT ?`).all(...Z,Q).map((j)=>c$(j))}updateHubSchedule($,W){let Z=this.getHubSchedule($);if(!Z)return;let Q=OC(Z,W),J=this.upsertSpec({externalId:$,sourcePath:Z.sourcePath,triggerKind:"schedule",sourceHash:nF(Q),parseStatus:"valid",spec:tJ(Q)});if(W.cronPattern!==void 0||W.enabled!==void 0)this.initializeScheduleNextRun(J.record.specId);return this.getSpec(J.record.specId)}deleteHubSchedule($){let W=this.getHubSchedule($);if(!W)return!1;return this.markSpecRemoved(W.specId),this.cancelQueuedRunsForSpec(W.specId),!0}enqueueHubScheduleRun($,W="manual"){let Z=this.getHubSchedule($);if(!Z||!Z.enabled||Z.removed||Z.parseStatus!=="valid")return;return this.enqueueRun({specId:Z.specId,specRevision:Z.revision,triggerKind:W,scheduledFor:C0()})}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
363
363
  WHERE trigger_kind = 'event'
364
364
  AND event_type = ?
365
365
  AND enabled = 1
366
366
  AND removed = 0
367
367
  AND parse_status = 'valid'
368
- ORDER BY created_at ASC`).all($).map((Z)=>c$(Z))}upsertSpec($){let W=C0(),Z=this.getSpecBySourcePath($.sourcePath),Q=$.spec,J={title:Q?.title??Z?.title??KC($.sourcePath),prompt:Q?.prompt,workspaceRoot:Q?.workspaceRoot,scheduleExpr:Q?.triggerKind==="schedule"?Q.schedule:void 0,timezone:Q?.triggerKind==="schedule"?Q.timezone:void 0,eventType:Q?.triggerKind==="event"?Q.event:void 0,filters:Q?.triggerKind==="event"?Q.filters:void 0,debounceSeconds:Q?.triggerKind==="event"?Q.debounceSeconds:void 0,dedupeWindowSeconds:Q?.triggerKind==="event"?Q.dedupeWindowSeconds:void 0,cooldownSeconds:Q?.triggerKind==="event"?Q.cooldownSeconds:void 0,mode:Q?.mode,systemPrompt:Q?.systemPrompt,providerId:Q?.modelSelection?.providerId,modelId:Q?.modelSelection?.modelId,maxIterations:Q?.maxIterations,timeoutSeconds:Q?.timeoutSeconds,maxParallel:Q&&"maxParallel"in Q?Q.maxParallel:void 0,tools:Q?.tools,notesDirectory:Q?.notesDirectory,extensions:Q?.extensions,source:Q?.source},j=$.parseStatus==="valid"&&(Q?.enabled??!0);if(!Z){let H=`cspec_${l5()}`;this.insertSpecRow(H,$,J,j,W);let G=this.getSpec(H);if(!G)throw Error("failed to insert cron_spec row");return{record:G,created:!0,revisionChanged:!0}}let Y=Z.sourceHash!==$.sourceHash&&GC(Z,J,Z.enabled,j),V=Y?Z.revision+1:Z.revision;this.updateSpecRow(Z.specId,$,J,j,V,W);let B=this.getSpec(Z.specId);if(!B)throw Error("failed to reload cron_spec after update");return{record:B,created:!1,revisionChanged:Y}}insertSpecRow($,W,Z,Q,J){let j=W.spec;this.db.prepare(`INSERT INTO cron_specs (
368
+ ORDER BY created_at ASC`).all($).map((Z)=>c$(Z))}upsertSpec($){let W=C0(),Z=this.getSpecBySourcePath($.sourcePath),Q=$.spec,J={title:Q?.title??Z?.title??DC($.sourcePath),prompt:Q?.prompt,workspaceRoot:Q?.workspaceRoot,scheduleExpr:Q?.triggerKind==="schedule"?Q.schedule:void 0,timezone:Q?.triggerKind==="schedule"?Q.timezone:void 0,eventType:Q?.triggerKind==="event"?Q.event:void 0,filters:Q?.triggerKind==="event"?Q.filters:void 0,debounceSeconds:Q?.triggerKind==="event"?Q.debounceSeconds:void 0,dedupeWindowSeconds:Q?.triggerKind==="event"?Q.dedupeWindowSeconds:void 0,cooldownSeconds:Q?.triggerKind==="event"?Q.cooldownSeconds:void 0,mode:Q?.mode,systemPrompt:Q?.systemPrompt,providerId:Q?.modelSelection?.providerId,modelId:Q?.modelSelection?.modelId,maxIterations:Q?.maxIterations,timeoutSeconds:Q?.timeoutSeconds,maxParallel:Q&&"maxParallel"in Q?Q.maxParallel:void 0,tools:Q?.tools,notesDirectory:Q?.notesDirectory,extensions:Q?.extensions,source:Q?.source},j=$.parseStatus==="valid"&&(Q?.enabled??!0);if(!Z){let H=`cspec_${r5()}`;this.insertSpecRow(H,$,J,j,W);let G=this.getSpec(H);if(!G)throw Error("failed to insert cron_spec row");return{record:G,created:!0,revisionChanged:!0}}let Y=Z.sourceHash!==$.sourceHash&&fC(Z,J,Z.enabled,j),V=Y?Z.revision+1:Z.revision;this.updateSpecRow(Z.specId,$,J,j,V,W);let B=this.getSpec(Z.specId);if(!B)throw Error("failed to reload cron_spec after update");return{record:B,created:!1,revisionChanged:Y}}insertSpecRow($,W,Z,Q,J){let j=W.spec;this.db.prepare(`INSERT INTO cron_specs (
369
369
  spec_id, external_id, source_path, trigger_kind,
370
370
  source_mtime_ms, source_hash, parse_status, parse_error,
371
371
  enabled, removed, title, prompt, workspace_root,
@@ -388,7 +388,7 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
388
388
  tools_json = ?, notes_directory = ?, extensions_json = ?, source = ?,
389
389
  tags_json = ?, metadata_json = ?,
390
390
  revision = ?, updated_at = ?
391
- WHERE spec_id = ?`).run(W.externalId,W.triggerKind,W.sourceMtimeMs??null,W.sourceHash,W.parseStatus,W.parseError??null,Q?1:0,Z.title??"",Z.prompt??null,Z.workspaceRoot??null,Z.scheduleExpr??null,Z.timezone??null,Z.eventType??null,Z.filters?JSON.stringify(Z.filters):null,Z.debounceSeconds??null,Z.dedupeWindowSeconds??null,Z.cooldownSeconds??null,Z.mode??null,Z.systemPrompt??null,Z.providerId??null,Z.modelId??null,Z.maxIterations??null,Z.timeoutSeconds??null,Z.maxParallel??null,Z.tools?JSON.stringify(Z.tools):null,Z.notesDirectory??null,Z.extensions?JSON.stringify(Z.extensions):null,Z.source??null,X?.tags?JSON.stringify(X.tags):null,X?.metadata?JSON.stringify(X.metadata):null,J,j,$)}markSpecRemoved($){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(C0(),$)}updateSpecNextRunAt($,W){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(W??null,C0(),$)}updateSpecLastRunAt($,W){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(W,C0(),$)}updateLastMaterializedRunId($,W){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(W,C0(),$)}initializeScheduleNextRun($){let W=this.getSpec($);if(!W||W.triggerKind!=="schedule"||!W.enabled||!W.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let Z=new Date(p2(W.scheduleExpr,Date.now(),W.timezone)).toISOString();this.updateSpecNextRunAt($,Z)}materializeDueScheduleRun($){let W=$.nowMs,Z=new Date(W).toISOString();this.db.exec("BEGIN IMMEDIATE;");try{let Q=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($.specId);if(!Q)return this.db.exec("COMMIT;"),{queued:!1};let J=c$(Q);if(J.triggerKind!=="schedule"||!J.enabled||J.removed||J.parseStatus!=="valid"||!J.scheduleExpr)return this.db.exec("COMMIT;"),{queued:!1};let j=J.nextRunAt;if(!j){let V=new Date(p2(J.scheduleExpr,W,J.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(V,Z,J.specId),this.db.exec("COMMIT;"),{queued:!1,nextRunAt:V}}if(new Date(j).getTime()>W)return this.db.exec("COMMIT;"),{queued:!1,nextRunAt:j};let X=`crun_${l5()}`,Y;try{Y=new Date(p2(J.scheduleExpr,W,J.timezone)).toISOString()}catch{Y=void 0}return this.db.prepare(`INSERT INTO cron_runs (
391
+ WHERE spec_id = ?`).run(W.externalId,W.triggerKind,W.sourceMtimeMs??null,W.sourceHash,W.parseStatus,W.parseError??null,Q?1:0,Z.title??"",Z.prompt??null,Z.workspaceRoot??null,Z.scheduleExpr??null,Z.timezone??null,Z.eventType??null,Z.filters?JSON.stringify(Z.filters):null,Z.debounceSeconds??null,Z.dedupeWindowSeconds??null,Z.cooldownSeconds??null,Z.mode??null,Z.systemPrompt??null,Z.providerId??null,Z.modelId??null,Z.maxIterations??null,Z.timeoutSeconds??null,Z.maxParallel??null,Z.tools?JSON.stringify(Z.tools):null,Z.notesDirectory??null,Z.extensions?JSON.stringify(Z.extensions):null,Z.source??null,X?.tags?JSON.stringify(X.tags):null,X?.metadata?JSON.stringify(X.metadata):null,J,j,$)}markSpecRemoved($){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(C0(),$)}updateSpecNextRunAt($,W){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(W??null,C0(),$)}updateSpecLastRunAt($,W){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(W,C0(),$)}updateLastMaterializedRunId($,W){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(W,C0(),$)}initializeScheduleNextRun($){let W=this.getSpec($);if(!W||W.triggerKind!=="schedule"||!W.enabled||!W.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let Z=new Date(p2(W.scheduleExpr,Date.now(),W.timezone)).toISOString();this.updateSpecNextRunAt($,Z)}materializeDueScheduleRun($){let W=$.nowMs,Z=new Date(W).toISOString();this.db.exec("BEGIN IMMEDIATE;");try{let Q=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($.specId);if(!Q)return this.db.exec("COMMIT;"),{queued:!1};let J=c$(Q);if(J.triggerKind!=="schedule"||!J.enabled||J.removed||J.parseStatus!=="valid"||!J.scheduleExpr)return this.db.exec("COMMIT;"),{queued:!1};let j=J.nextRunAt;if(!j){let V=new Date(p2(J.scheduleExpr,W,J.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(V,Z,J.specId),this.db.exec("COMMIT;"),{queued:!1,nextRunAt:V}}if(new Date(j).getTime()>W)return this.db.exec("COMMIT;"),{queued:!1,nextRunAt:j};let X=`crun_${r5()}`,Y;try{Y=new Date(p2(J.scheduleExpr,W,J.timezone)).toISOString()}catch{Y=void 0}return this.db.prepare(`INSERT INTO cron_runs (
392
392
  run_id, spec_id, spec_revision, trigger_kind, status,
393
393
  scheduled_for, trigger_event_id, attempt_count,
394
394
  created_at, updated_at
@@ -397,22 +397,22 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
397
397
  last_run_at = ?,
398
398
  next_run_at = ?,
399
399
  updated_at = ?
400
- WHERE spec_id = ?`).run(X,Z,Y??null,Z,J.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(X),nextRunAt:Y}}catch(Q){throw this.db.exec("ROLLBACK;"),Q}}getRun($){let W=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get($);return W?nJ(W):void 0}insertEventLog($,W={}){let Z=C0(),Q=W.receivedAtIso??Z,J=$.eventId.trim();if(!J)throw Error("automation event requires eventId");let j=$.eventType.trim();if(!j)throw Error("automation event requires eventType");let X=$.source.trim();if(!X)throw Error("automation event requires source");let Y=$.occurredAt.trim()||Q,V=this.db.prepare(`INSERT OR IGNORE INTO cron_event_log (
400
+ WHERE spec_id = ?`).run(X,Z,Y??null,Z,J.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(X),nextRunAt:Y}}catch(Q){throw this.db.exec("ROLLBACK;"),Q}}getRun($){let W=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get($);return W?sJ(W):void 0}insertEventLog($,W={}){let Z=C0(),Q=W.receivedAtIso??Z,J=$.eventId.trim();if(!J)throw Error("automation event requires eventId");let j=$.eventType.trim();if(!j)throw Error("automation event requires eventType");let X=$.source.trim();if(!X)throw Error("automation event requires source");let Y=$.occurredAt.trim()||Q,V=this.db.prepare(`INSERT OR IGNORE INTO cron_event_log (
401
401
  event_id, event_type, source, subject,
402
402
  occurred_at, received_at, workspace_root, dedupe_key,
403
403
  payload_json, attributes_json, processing_status,
404
404
  matched_spec_count, queued_run_count, suppressed_count,
405
405
  error, created_at, updated_at
406
- ) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(J,j,X,$.subject?.trim()||null,Y,Q,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,vF($.payload),vF($.attributes),"received",0,0,0,null,Z,Z).changes??0,B=this.getEventLog(J);if(!B)throw Error("failed to insert cron_event_log row");return{record:B,created:V===1}}getEventLog($){let W=this.db.prepare("SELECT * FROM cron_event_log WHERE event_id = ?").get($);return W?mF(W):void 0}listEventLogs($={}){let W=[],Z=[];if($.eventType)W.push("event_type = ?"),Z.push($.eventType);if($.source)W.push("source = ?"),Z.push($.source);if($.processingStatus)W.push("processing_status = ?"),Z.push($.processingStatus);let Q=W.length>0?`WHERE ${W.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_event_log ${Q}
406
+ ) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(J,j,X,$.subject?.trim()||null,Y,Q,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,rF($.payload),rF($.attributes),"received",0,0,0,null,Z,Z).changes??0,B=this.getEventLog(J);if(!B)throw Error("failed to insert cron_event_log row");return{record:B,created:V===1}}getEventLog($){let W=this.db.prepare("SELECT * FROM cron_event_log WHERE event_id = ?").get($);return W?pF(W):void 0}listEventLogs($={}){let W=[],Z=[];if($.eventType)W.push("event_type = ?"),Z.push($.eventType);if($.source)W.push("source = ?"),Z.push($.source);if($.processingStatus)W.push("processing_status = ?"),Z.push($.processingStatus);let Q=W.length>0?`WHERE ${W.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_event_log ${Q}
407
407
  ORDER BY received_at DESC, created_at DESC
408
- LIMIT ?`).all(...Z,J).map((X)=>mF(X))}updateEventLogProcessing($,W){return(this.db.prepare(`UPDATE cron_event_log SET
408
+ LIMIT ?`).all(...Z,J).map((X)=>pF(X))}updateEventLogProcessing($,W){return(this.db.prepare(`UPDATE cron_event_log SET
409
409
  processing_status = ?,
410
410
  matched_spec_count = COALESCE(?, matched_spec_count),
411
411
  queued_run_count = COALESCE(?, queued_run_count),
412
412
  suppressed_count = COALESCE(?, suppressed_count),
413
413
  error = ?,
414
414
  updated_at = ?
415
- WHERE event_id = ?`).run(W.status,W.matchedSpecCount??null,W.queuedRunCount??null,W.suppressedCount??null,W.error??null,C0(),$).changes??0)===1}listRuns($={}){let W=[],Z=[];if($.specId)W.push("spec_id = ?"),Z.push($.specId);if($.status){let X=Array.isArray($.status)?$.status:[$.status];if(X.length>0){let Y=X.map(()=>"?").join(",");W.push(`status IN (${Y})`);for(let V of X)Z.push(V)}}let Q=W.length>0?`WHERE ${W.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${Q} ORDER BY created_at DESC LIMIT ?`).all(...Z,J).map((X)=>nJ(X))}hasRecentEventRunForDedupe($){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
415
+ WHERE event_id = ?`).run(W.status,W.matchedSpecCount??null,W.queuedRunCount??null,W.suppressedCount??null,W.error??null,C0(),$).changes??0)===1}listRuns($={}){let W=[],Z=[];if($.specId)W.push("spec_id = ?"),Z.push($.specId);if($.status){let X=Array.isArray($.status)?$.status:[$.status];if(X.length>0){let Y=X.map(()=>"?").join(",");W.push(`status IN (${Y})`);for(let V of X)Z.push(V)}}let Q=W.length>0?`WHERE ${W.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${Q} ORDER BY created_at DESC LIMIT ?`).all(...Z,J).map((X)=>sJ(X))}hasRecentEventRunForDedupe($){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
416
416
  INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
417
417
  WHERE r.spec_id = ?
418
418
  AND r.trigger_kind = 'event'
@@ -430,7 +430,7 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
430
430
  AND r.status = 'queued'
431
431
  AND e.dedupe_key = ?
432
432
  ORDER BY COALESCE(r.scheduled_for, r.created_at) DESC
433
- LIMIT 1`).get($.specId,$.dedupeKey);return W?nJ(W):void 0}updateQueuedEventRunForDebounce($){let W=C0();if((this.db.prepare(`UPDATE cron_runs SET
433
+ LIMIT 1`).get($.specId,$.dedupeKey);return W?sJ(W):void 0}updateQueuedEventRunForDebounce($){let W=C0();if((this.db.prepare(`UPDATE cron_runs SET
434
434
  trigger_event_id = ?,
435
435
  scheduled_for = ?,
436
436
  updated_at = ?
@@ -439,7 +439,7 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
439
439
  AND status = 'queued'`).run($.triggerEventId,$.scheduledFor,W,$.runId).changes??0)!==1)return;return this.getRun($.runId)}hasOneOffRunForRevision($,W){return!!this.db.prepare(`SELECT run_id FROM cron_runs
440
440
  WHERE spec_id = ? AND spec_revision = ?
441
441
  AND trigger_kind = 'one_off'
442
- LIMIT 1`).get($,W)}enqueueRun($){let W=`crun_${l5()}`,Z=C0();this.db.prepare(`INSERT INTO cron_runs (
442
+ LIMIT 1`).get($,W)}enqueueRun($){let W=`crun_${r5()}`,Z=C0();this.db.prepare(`INSERT INTO cron_runs (
443
443
  run_id, spec_id, spec_revision, trigger_kind, status,
444
444
  scheduled_for, trigger_event_id, attempt_count,
445
445
  created_at, updated_at
@@ -456,7 +456,7 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
456
456
  )
457
457
  AND (scheduled_for IS NULL OR scheduled_for <= ?)
458
458
  ORDER BY COALESCE(scheduled_for, created_at) ASC
459
- LIMIT ?`).all(W,W,J);for(let Y of X){let V=J0(Y.run_id);if(!V)continue;let B=`cclaim_${l5()}`;if((this.db.prepare(`UPDATE cron_runs SET
459
+ LIMIT ?`).all(W,W,J);for(let Y of X){let V=J0(Y.run_id);if(!V)continue;let B=`cclaim_${r5()}`;if((this.db.prepare(`UPDATE cron_runs SET
460
460
  status = 'running',
461
461
  claim_token = ?,
462
462
  claim_started_at = ?,
@@ -500,41 +500,41 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let W=Math.max(1000,Mat
500
500
  error = ?,
501
501
  scheduled_for = COALESCE(?, scheduled_for),
502
502
  updated_at = ?
503
- WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,W,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,W){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(W,C0(),$)}attachReportPathToRun($,W){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(W,C0(),$)}}class r5{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new p5({dbPath:$.dbPath});let W=$.specs;this.reconciler=new pJ({store:this.store,specs:W}),this.materializer=new v5({store:this.store}),this.eventIngress=new hJ({store:this.store,logger:$.logger}),this.runner=new c5({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:W,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new rJ({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Z)=>{let Q=$.logger;if(Q)if(Q.error)Q.error("cron.watcher.failed",{error:Z});else Q.log("cron.watcher.failed",{error:Z})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}var aF={};E(aF,{manifestToSessionRecord:()=>aZ,listSessionHistoryFromBackend:()=>eJ,listSessionHistory:()=>oZ,hydrateSessionHistory:()=>nF});import{readdir as _C,readFile as pF}from"node:fs/promises";import{join as rF}from"node:path";import{formatDisplayUserInput as LC,normalizeUserInput as OC}from"@cline/shared";import{resolveSessionDataDir as iF}from"@cline/shared/storage";import{existsSync as fC}from"node:fs";import{readFile as DC}from"node:fs/promises";class i5{listeners=new Set;subscribe($,W){let Z={listener:$,sessionId:W?.sessionId?.trim()||void 0};return this.listeners.add(Z),()=>{this.listeners.delete(Z)}}emit($){let W=$.payload.sessionId?.trim();for(let Z of this.listeners){if(Z.sessionId&&Z.sessionId!==W)continue;Z.listener($)}}get size(){return this.listeners.size}}async function u$($){let W=$?.trim();if(!W||!fC(W))return[];try{let Z=(await DC(W,"utf8")).trim();if(!Z)return[];let Q=JSON.parse(Z);if(Array.isArray(Q))return Q;if(Q&&typeof Q==="object"&&!Array.isArray(Q)){let J=Q.messages;if(Array.isArray(J))return J}return[]}catch{return[]}}function oJ($){return $?{...$}:void 0}async function dF($,W){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await W.queueSpawnRequest($);let Q=await W.upsertSubagentSessionFromHook($);if(!Q)return;await W.appendSubagentHookAudit(Q,$),await W.applySubagentStatus(Q,$)}function n5($){if(typeof $!=="string")return;let W=$.trim();return W.length>0?W:void 0}function Z1($){let W=n5($);if(!W)return;return W.toLowerCase()==="unknown"?void 0:W}function nZ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function TC($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function tJ($){let W=$??200;return Number.isFinite(W)?Math.max(0,Math.floor(W)):200}function zC($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function qC($){return $.isSubagent!==!0&&!n5($.parentSessionId)}function MC($){let W=$.match(/\d{13,}/g);if(!W||W.length===0)return 0;let Z=0;for(let Q of W){let J=Number.parseInt(Q,10);if(Number.isFinite(J)&&J>Z)Z=J}return Z}function aZ($){return{sessionId:$.session_id,source:$.source,pid:$.pid,startedAt:$.started_at,endedAt:$.ended_at??null,exitCode:$.exit_code??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspace_root,teamName:$.team_name,enableTools:$.enable_tools,enableSpawn:$.enable_spawn,enableTeams:$.enable_teams,isSubagent:!1,prompt:$.prompt,metadata:$.metadata,messagesPath:$.messages_path,updatedAt:$.ended_at??$.started_at}}async function RC($){let W=tJ($);if(W===0)return[];let Z=iF(),J=(await _C(Z,{withFileTypes:!0}).catch(()=>[])).filter((X)=>X.isDirectory()).map((X)=>({entry:X,recency:MC(X.name.trim())})).sort((X,Y)=>Y.recency-X.recency||Y.entry.name.localeCompare(X.entry.name));return(await Promise.all(J.map(async({entry:X})=>{let Y=X.name.trim();if(!Y)return;let V=rF(Z,Y,`${Y}.json`),B=await pF(V,"utf8").catch(()=>{return});if(!B)return;let H;try{H=JSON.parse(B)}catch{return}let G=g0.safeParse(H);if(!G.success)return;return aZ(G.data)}))).filter((X)=>Boolean(X)).sort((X,Y)=>Y.startedAt.localeCompare(X.startedAt)).slice(0,W)}async function NC($,W,Z){let Q=tJ(W);if(Q===0)return await $.listSessions(0),[];let J=Z.includeSubagents?Q:zC(Q),j=await $.listSessions(J);return(Z.includeSubagents?j:j.filter(qC)).slice(0,Q)}function EC($){if(typeof $==="string")return $.trim();let W=[];for(let Z of $){if(!Z||typeof Z!=="object")continue;let Q=Z;if(Q.type!=="text")continue;let J=Q.text?.trim();if(J)W.push(J)}return W.join(`
504
- `).trim()}function lF($){return $.replace(/\s+/g," ").trim()}function wC($,W){if($.length<=W)return $;return`${$.slice(0,Math.max(0,W-3)).trimEnd()}...`}function CC($){for(let W of["user","assistant"])for(let Z of $){if(Z.role!==W)continue;let Q=lF(EC(Z.content));if(!Q)continue;let J=W==="user"?lF(LC(Q)):Q,j=OC(J.split(`
505
- `)[0]??J);return wC(j,50)}return}function PC($){let W=0;for(let Z of $)W+=nZ(Z.metrics?.cost)??0;return W}function SC($){let W,Z;for(let Q=$.length-1;Q>=0;Q-=1){let J=$[Q];if(!W)W=Z1(J.modelInfo?.provider);if(!Z)Z=Z1(J.modelInfo?.id);if(W&&Z)break}return{provider:W,model:Z}}function bC($){return Z1($?.provider)??Z1($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function yC($){return Z1($?.model)??Z1($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function sJ($,W){let Z=TC($.metadata),Q=n5(W?.title)??n5(Z?.title),J=nZ(W?.totalCost)??nZ(Z?.totalCost),j=Z||Q!==void 0||J!==void 0?{...Z??{},...Q!==void 0?{title:Q}:{},...J!==void 0?{totalCost:J}:{}}:void 0;return{...$,provider:Z1(W?.provider)??Z1($.provider)??bC(Z)??"",model:Z1(W?.model)??Z1($.model)??yC(Z)??"",metadata:j}}function hC($){let W=$.content;if(!Array.isArray(W))return!1;return W.some((Z)=>!!Z&&typeof Z==="object"&&Z.type==="tool-call")}function kC($,W){if($.status!=="running"||$.interactive!==!0)return!1;let Z=W.at(-1);return Z?.role==="assistant"&&!hC(Z)}async function IC($,W){return await Promise.all(W.map(async(Z)=>{if(Z.status!=="running"||Z.interactive!==!0)return Z;let Q=await $.readSessionMessages(Z.sessionId);return kC(Z,Q)?{...Z,status:"idle"}:Z}))}async function nF($,W){return await Promise.all(W.map(async(Z)=>{let Q=sJ(Z),J=Boolean(n5(Q.metadata?.title)),j=Boolean(Z1(Q.provider)),X=Boolean(Z1(Q.model)),Y=nZ(Q.metadata?.totalCost),V=Y!==void 0&&Y>0;if(J&&j&&X&&V)return Q;let B=await $.readSessionMessages(Z.sessionId);if(B.length===0)return Q;let H=SC(B),G=PC(B);return sJ(Z,{title:J?void 0:CC(B),provider:j?void 0:H.provider,model:X?void 0:H.model,totalCost:V||G<=0?void 0:G})}))}async function oZ($,W={}){let Z=tJ(W.limit),Q=W.includeSubagents===!0,J=await NC($,Z,{includeSubagents:Q}),j=W.includeManifestFallback===!0&&J.length<Z?await RC(Math.min(Math.max(Z*2,100),500)):[],X=new Map;for(let B of[...J,...j]){if(X.has(B.sessionId))continue;X.set(B.sessionId,B)}let Y=j.length===0?J:Array.from(X.values()).sort((B,H)=>H.startedAt.localeCompare(B.startedAt)).slice(0,Z),V=await IC($,Y);if(W.hydrate===!1)return V.map((B)=>sJ(B));return await nF($,V)}async function xC($){let W=$.trim();if(!W)return;let Z=rF(iF(),W,`${W}.json`),Q=await pF(Z,"utf8").catch(()=>{return});if(!Q)return;try{let J=g0.safeParse(JSON.parse(Q));return J.success?J.data.messages_path:void 0}catch{return}}async function eJ($,W={}){let Z=new Map;return await oZ({listSessions:async(J)=>{let j=await $.listSessions(J);Z.clear();for(let X of j)Z.set(X.sessionId,X);return j.map(p4)},readSessionMessages:async(J)=>{let j=Z.get(J)?.messagesPath??await xC(J);return await u$(j)}},W)}var HU={};E(HU,{resolveSessionBackend:()=>Ij,createRuntimeHost:()=>w6});import{captureSdkError as VU}from"@cline/shared";import{createSessionId as SP,isHubProtocolCompatible as bP,resolveClineBuildEnv as yP,resolveHubCommandTimeoutMs as hP}from"@cline/shared";import{spawn as VP}from"node:child_process";import{closeSync as BP,mkdirSync as HP,openSync as GP}from"node:fs";import{basename as KP,dirname as FP,join as AP}from"node:path";import{fileURLToPath as UP}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as fP,isHubDaemonProcess as YA,isHubProtocolCompatible as DP,resolveClineBuildEnv as VA,withResolvedClineBuildEnv as _P}from"@cline/shared";import{createHash as gC,randomBytes as mC}from"node:crypto";import{existsSync as vC}from"node:fs";import{chmod as cC,mkdir as $j,readFile as tF,rm as Wj,writeFile as eF}from"node:fs/promises";import{dirname as $A,join as Zj}from"node:path";import{resolveClineDataDir as i2,resolveClineDir as WA}from"@cline/shared/storage";var uC="CLINE_HUB_DISCOVERY_PATH",dC="CLINE_HUB_BUILD_ID",oF=30000,lC=15000,pC=100;function rC($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function iC($){return gC("sha256").update($).digest("hex").slice(0,12)}function nC($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(W){return W instanceof Error&&"code"in W?String(W.code)==="EPERM":!1}}function sZ(){return mC(32).toString("hex")}function aC($){return new Promise((W)=>setTimeout(W,$))}function oC($){return`${$}.lock`}async function sC($){try{let W=JSON.parse(await tF(Zj($,"owner.json"),"utf8"));if(typeof W.pid!=="number"||typeof W.acquiredAt!=="string")return;return{pid:W.pid,acquiredAt:W.acquiredAt}}catch{return}}async function sF($){await Wj($,{recursive:!0,force:!0}).catch(()=>{return})}function tZ(){return process.env[dC]?.trim()||String(n4.version)}function W$($=process.argv[1]?.trim()||process.cwd()){let W=`hub-${iC($)}`,Z=process.env[uC]?.trim()||Zj(i2(),"locks","hub","owners",`${rC(W)}.json`);return{ownerId:W,discoveryPath:Z}}function ZA($=`hub-${Date.now().toString(36)}`){return W$($)}async function _0($){try{let W=JSON.parse(await tF($,"utf8"));if(typeof W.hubId!=="string"||typeof W.protocolVersion!=="string"||typeof W.authToken!=="string"||typeof W.host!=="string"||typeof W.port!=="number"||typeof W.url!=="string"||typeof W.startedAt!=="string"||typeof W.updatedAt!=="string")return;return{hubId:W.hubId,protocolVersion:W.protocolVersion,minClientProtocolVersion:typeof W.minClientProtocolVersion==="string"?W.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof W.maxClientProtocolVersion==="string"?W.maxClientProtocolVersion:void 0,capabilities:Array.isArray(W.capabilities)?W.capabilities.filter((Z)=>typeof Z==="string"):void 0,coreVersion:typeof W.coreVersion==="string"?W.coreVersion:void 0,buildId:typeof W.buildId==="string"?W.buildId:void 0,authToken:W.authToken,host:W.host,port:W.port,url:W.url,pid:typeof W.pid==="number"?W.pid:void 0,startedAt:W.startedAt,updatedAt:W.updatedAt}}catch{return}}async function eZ($,W){await $j($A($),{recursive:!0}),await Wj($,{force:!0}).catch(()=>{return}),await eF($,`${JSON.stringify(W,null,2)}
506
- `,{encoding:"utf8",mode:384}),await cC($,384)}async function v0($){await Wj($,{force:!0}).catch(()=>{return})}async function $Q($,W){let Z=oC($);await $j($A(Z),{recursive:!0});let Q=Date.now()+lC;while(!0)try{await $j(Z,{recursive:!1}),await eF(Zj(Z,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
507
- `,"utf8");try{return await W()}finally{await sF(Z)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let X=await sC(Z),Y=X?Date.now()-Date.parse(X.acquiredAt):oF+1;if(!X||!nC(X.pid)||Y>oF){await sF(Z);continue}if(Date.now()>=Q)throw Error(`Timed out waiting for hub startup lock ${Z}`);await aC(pC)}}async function Z$($,W){try{let Z=await fetch(W?.authToken?Qj($):WQ($),{headers:W?.authToken?{authorization:`Bearer ${W.authToken}`}:void 0});if(!Z.ok)return;let Q=await Z.json();if(typeof Q.protocolVersion!=="string"||typeof Q.host!=="string"||typeof Q.port!=="number"||typeof Q.url!=="string")return;return{protocolVersion:Q.protocolVersion,minClientProtocolVersion:typeof Q.minClientProtocolVersion==="string"?Q.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Q.maxClientProtocolVersion==="string"?Q.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Q.capabilities)?Q.capabilities.filter((J)=>typeof J==="string"):void 0,coreVersion:typeof Q.coreVersion==="string"?Q.coreVersion:void 0,buildId:typeof Q.buildId==="string"?Q.buildId:void 0,host:Q.host,port:Q.port,url:Q.url,hubId:typeof Q.hubId==="string"?Q.hubId:void 0,authToken:typeof Q.authToken==="string"?Q.authToken:void 0,pid:typeof Q.pid==="number"?Q.pid:void 0,startedAt:typeof Q.startedAt==="string"?Q.startedAt:void 0,updatedAt:typeof Q.updatedAt==="string"?Q.updatedAt:void 0}}catch{return}}function f1($,W,Z="/hub"){return new URL(`ws://${$}:${W}${Z}`).toString()}function WQ($){let W=new URL($);return W.protocol=W.protocol==="wss:"?"https:":"http:",W.pathname="/health",W.search="",W.toString()}function Qj($){let W=new URL(WQ($));return W.pathname="/status",W.toString()}function QA($){return vC($)}import{CLINE_HUB_DEV_PORT as tC,CLINE_HUB_PORT as eC,resolveClineBuildEnv as $P}from"@cline/shared";var WP="CLINE_HUB_HOST",ZP="CLINE_HUB_PORT",QP="CLINE_HUB_PATHNAME",Jj="127.0.0.1",jj=eC,Xj="/hub";function JA($){return $P($)==="development"?tC:jj}function Yj($={}){return($.env??process.env)[WP]?.trim()||Jj}function f6($={}){let Z=($.env??process.env)[ZP]?.trim();if(!Z)return JA($);let Q=Number.parseInt(Z,10);if(!Number.isInteger(Q)||Q<1||Q>65535)return JA($);return Q}function Vj($={}){return($.env??process.env)[QP]?.trim()||Xj}function Q1($={},W={}){return{host:$.host??Yj(W),port:$.port??f6(W),pathname:$.pathname??Vj(W)}}import{join as JP}from"node:path";var jP="shared:cline",XP="CLINE_HUB_DISCOVERY_PATH",YP="hub-production";function jA($){let W=o1($.trim());return W$(`workspace:${W||$.trim()}`)}function c0($=jP){return W$($)}function J1(){return{ownerId:YP,discoveryPath:process.env[XP]?.trim()||JP(i2(),"locks","hub","production.json")}}var LP=8000,OP=200,TP=3000,zP=100,qP=[100,250,500,1000,2000],MP="--cline-hub-daemon";function RP($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function NP(){try{let $=AP(i2(),"logs","hub-daemon.log");return HP(FP($),{recursive:!0}),{fd:GP($,"a"),logPath:$}}catch{return}}function BA(){return VA()==="production"?J1():c0()}function n2($){return DP($).compatible}function XA($,W,Z){if(!W||W.url!==Z)return $;return{...$,authToken:$.authToken??W.authToken,pid:$.pid??W.pid}}async function a2($,W){try{return await Z$($,{authToken:W})}catch{return}}async function EP($,W){let Z=Date.now()+W;while(Date.now()<Z){if(!(await a2($))?.url)return!0;await new Promise((J)=>setTimeout(J,zP))}return!1}async function ZQ($,W){if(await o5($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Z=await EP($.url,TP);return await v0(W).catch(()=>{return}),Z}async function a5($,W){if(n2($))return!0;return ZQ($,W)}async function HA($){if(VA()!=="production")return;let W=c0();if(W.discoveryPath===$.discoveryPath)return;let Z=await _0(W.discoveryPath);if(Z?.url)await ZQ(Z,W.discoveryPath);else await v0(W.discoveryPath).catch(()=>{return})}function wP(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return UP(new URL(`./entry.${$}`,import.meta.url))}function CP($,W){let Z=wP(),Q=process.execPath?.trim();if(!Q)throw Error("unable to resolve runtime executable for hub daemon");let J=KP(Q).toLowerCase().includes("bun"),j=Z.startsWith("/$bunfs/"),X=J&&Z.toLowerCase().endsWith(".ts"),Y=j?[MP]:[...X?["--conditions=development"]:[],Z];return{launcher:Q,args:[...Y,"--cwd",$,...RP(W)],cwd:$,env:{..._P(process.env),CLINE_NO_INTERACTIVE:"1",[fP]:"1"}}}function PP($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Z="message"in $?$.message:void 0;return typeof Z==="string"&&Z.includes("ETXTBSY")}function Bj($,W={}){if(YA())return;let Z=CP($,W),Q=NP();try{VP(Z.launcher,Z.args,{detached:!0,stdio:Q?["ignore",Q.fd,Q.fd]:"ignore",env:Z.env,cwd:Z.cwd,windowsHide:!0}).unref()}finally{if(Q)BP(Q.fd)}}async function D6($,W={}){for(let Z=0;;Z++)try{Bj($,W);return}catch(Q){let J=qP[Z];if(!PP(Q)||J===void 0)throw Q;await new Promise((j)=>setTimeout(j,J))}}function QQ($,W={}){if(YA())return;let Z=BA(),Q=Q1(W),J=f1(Q.host,Q.port,Q.pathname),j=W.allowPortFallback===!0&&Q.port!==0;HA(Z).catch(()=>{return}).then(()=>_0(Z.discoveryPath)).then(async(X)=>{let Y=!1;if(X?.url)if(!X.authToken){if(Y=!0,!await ZQ(X,Z.discoveryPath)&&!j)return}else{let H=await a2(X.url,X.authToken);if(H?.url&&n2(H)&&await N1(H.url,{authToken:X.authToken}))return;if(H?.url)await a5({...H,authToken:X.authToken},Z.discoveryPath);else await v0(Z.discoveryPath).catch(()=>{return})}let V=await a2(J);if(V?.url){if(n2(V)){if(!j||!Y)return}else if(!await a5({...V,authToken:void 0},Z.discoveryPath)&&!j)return}let B=j?{...Q,port:0}:Q;await D6($,B)}).catch(()=>{})}async function GA($,W={}){let Z=BA(),Q=W.host!==void 0||W.port!==void 0||W.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=Q1(W),j=f1(J.host,J.port,J.pathname),X=(F)=>{if(!Q)d$(F.url,F.authToken);return F};await HA(Z).catch(()=>{return});let Y=await _0(Z.discoveryPath),V=!1;if(Y?.url){let F=Y.authToken;if(!F)V=!0,await ZQ(Y,Z.discoveryPath);else{let A=await a2(Y.url,F);if(A?.url&&n2(A)&&await N1(A.url,{authToken:F}))return X({url:A.url,authToken:F});if(A?.url)await a5({...A,authToken:F},Z.discoveryPath);else await v0(Z.discoveryPath).catch(()=>{return})}}let B=await a2(j);if(B?.url){let F=XA(B,Y,j);if(n2(B))throw Error(`A compatible Cline Hub is already running at ${j}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${V?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`);if(!await a5(F,Z.discoveryPath)&&W.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is already running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let G=W.allowPortFallback===!0&&J.port!==0?{...J,port:0}:J;await D6($,G);let K=Date.now()+LP;while(Date.now()<K){let F=await _0(Z.discoveryPath);if(F?.url&&F.authToken){let f=await a2(F.url,F.authToken);if(f?.url&&n2(f)&&await N1(f.url,{authToken:F.authToken}))return X({url:f.url,authToken:F.authToken})}let A=await a2(j);if(A?.url&&!n2(A)){let f=XA(A,F,j);if(!await a5(f,Z.discoveryPath)&&W.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is still running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((f)=>setTimeout(f,OP))}throw Error("Timed out waiting for detached hub startup.")}function JQ(){return yP()==="production"?J1():c0()}function kP(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function fA($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((W)=>Buffer.from(W))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return fA($.data);return String($)}function IP($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function KA($){let W=$,Z=IP(W.reason);return new h0("hub_connection_closed",W.code||Z?`Hub connection closed (code=${W.code??0}${Z?`, reason=${Z}`:""})`:Hj,{closeCode:W.code,closeReason:Z||void 0})}function xP($,W){if($ instanceof h0)return $;if($ instanceof Error)return new h0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new h0("hub_connect_failed",$.error.message);let Z=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Z)return new h0("hub_connect_failed",Z);let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new h0("hub_connect_failed",Q?`Failed to connect to hub at ${W.toString()} (${Q} event before socket open).`:`Failed to connect to hub at ${W.toString()}.`)}var gP=8000,mP=200,FA="*",AA=8000,vP="cline-hub-auth.",DA=new Map,_A=new Set,cP=3000,uP=3000,dP=100,Hj="Hub connection closed",lP=250,pP=5000,UA=0.5;class h0 extends Error{code;details;constructor($,W,Z){super(W);this.code=$;this.details=Z;this.name="HubTransportError"}}function Fj($){return $ instanceof h0}class _6 extends Error{command;code;constructor($,W,Z){super(Z);this.command=$;this.code=W;this.name="HubCommandError"}}function jQ($,W){return $ instanceof _6&&$.code==="hub_command_timeout"&&(W===void 0||$.command===W)}function LA($){let W=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),W)return W;let Z=Aj($.toString());return Z?DA.get(Z):void 0}function rP($){try{let Z=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"}catch{return!1}}function Aj($){if(!rP($))return;let W=new URL(l$($));return W.search="",W.hash="",W.toString()}function Gj($){let W=Aj($);return!!W&&_A.has(W)}function d$($,W){let Z=Aj($);if(Z){if(_A.add(Z),W?.trim())DA.set(Z,W)}return $}class D1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new h0("hub_connection_closed",Hj);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),W=this.options.authToken?.trim()||LA($);$.hash="";let Q=new(kP())($.toString(),W?[`${vP}${W}`]:void 0);this.socket=Q;let J=!1;this.connectPromise=new Promise((j,X)=>{let Y=!1,V=setTimeout(()=>{if(Y)return;Y=!0,J=!0,this.lastCloseError=new h0("hub_connect_timeout",`Timed out connecting to hub after ${AA}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Q.close()}catch{}X(this.lastCloseError)},AA);Q.addEventListener("open",()=>{if(Y)return;Y=!0,clearTimeout(V),j()}),Q.addEventListener("error",(B)=>{if(Y)return;Y=!0,clearTimeout(V),this.lastCloseError=xP(B,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,X(this.lastCloseError)}),Q.addEventListener("close",(B)=>{if(Y)return;if(Y=!0,clearTimeout(V),!J)this.lastCloseError=KA(B),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,X(this.lastCloseError)})}),Q.addEventListener("message",(j)=>{this.handleFrame(JSON.parse(fA(j)))}),Q.addEventListener("close",(j)=>{if(this.socket!==Q)return;if(!J)this.lastCloseError=KA(j),this.sawSocketClose=!0;this.registered=!1;for(let X of this.pendingReplies.values())X.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let j of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(j));this.reconnectAttempt=0}subscribe($,W){let Z=W?.sessionId?.trim()||void 0,Q={listener:$,sessionId:Z};return this.listeners.add(Q),this.adjustSubscriptionCount(Z,1),()=>{if(!this.listeners.delete(Q))return;this.adjustSubscriptionCount(Z,-1)}}async command($,W,Z,Q){let J=0,j=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,W,Z,Q)}catch(X){if(!j||J>=1||!await this.recoverLocalHubTransport(X))throw X;J+=1}}async commandOnce($,W,Z,Q){await this.connect();let J=SP("hubreq_"),j=hP($,Q?.timeoutMs),X=new Promise((V,B)=>{let H=j===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;B(new _6($,"hub_command_timeout",`Hub command ${$} timed out after ${j}ms (hub=${this.currentUrl}, requestId=${J}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},j);this.pendingReplies.set(J,{resolve:(G)=>{if(H)clearTimeout(H);V(G)},reject:(G)=>{if(H)clearTimeout(H);B(G)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:J,clientId:this.clientId,sessionId:Z,timeoutMs:j,payload:W}})}catch(V){throw this.pendingReplies.delete(J),V}let Y=await X;if(!Y.ok){if(Y.error?.code===d2){let V=Z??(typeof W?.sessionId==="string"?W.sessionId:void 0);throw new e1(V,Y.error.message)}throw new _6($,Y.error?.code,Y.error?.message??`Hub command ${$} failed`)}return Y}async recoverLocalHubTransport($){if(!Gj(this.currentUrl)||!Fj($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let W=await o2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!W)return!1;return this.currentUrl=W,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(lP*2**this.reconnectAttempt,pP),W=Math.round($*(1-UA)+Math.random()*$*UA);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},W)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!Gj(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await o2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if($){this.currentUrl=$,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let $=this.socket;if(this.closedByClient=!0,this.clearReconnectTimer(),this.registered=!1,!$)return;this.lastCloseError=new h0("hub_connection_closed",Hj),this.sawSocketClose=!1;for(let W of this.pendingReplies.values())W.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new h0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,W){this.sendFrame({kind:$,clientId:this.clientId,...W?{sessionId:W}:{}})}adjustSubscriptionCount($,W){let Z=this.subscriptionKeyForSessionId($),Q=(this.subscriptionCounts.get(Z)??0)+W;if(Q<=0){if(this.subscriptionCounts.delete(Z),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(W<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Z,Q),W>0&&Q===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??FA}subscriptionSessionIdFromKey($){return $===FA?void 0:$}handleFrame($){switch($.kind){case"reply":{let W=$.envelope.requestId;if(!W)return;let Z=this.pendingReplies.get(W);if(!Z)return;this.pendingReplies.delete(W),Z.resolve($.envelope);return}case"event":for(let W of this.listeners){if(W.sessionId&&W.sessionId!==$.envelope.sessionId?.trim())continue;W.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function l$($){let W=new URL($);if(W.protocol==="http:")W.protocol="ws:";else if(W.protocol==="https:")W.protocol="wss:";return W.toString()}async function N1($,W){let Z=new D1({url:$,authToken:W?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:W?.workspaceRoot,cwd:W?.cwd});try{return await Z.connect(),!0}catch{return!1}finally{Z.close()}}async function Kj($,W){let Z=l$($),Q=await Z$(Z,{authToken:W?.authToken});if(!Q)return{status:"unreachable",url:Z};if(!bP(Q).compatible)return{status:"protocol_mismatch",url:Z};if(W?.verifyConnection===!0&&!await N1(Z,{workspaceRoot:W.workspaceRoot,cwd:W.cwd,authToken:W.authToken}))return{status:"unreachable",url:Z};return{status:"compatible",url:Z}}async function iP($){let W=Date.now()+gP;while(Date.now()<W){let Z=await _0($.discoveryPath);if(Z?.url){let Q=await Kj(Z.url,{verifyConnection:!0,authToken:Z.authToken});if(Q.status==="compatible")return d$(Q.url,Z.authToken)}await new Promise((Q)=>setTimeout(Q,mP))}return}async function nP($){let W=Date.now()+uP;while(Date.now()<W){if(!(await Z$($).catch(()=>{return}))?.url)return!0;await new Promise((Q)=>setTimeout(Q,dP))}return!1}function aP($,W){try{return l$($)===l$(W)}catch{return!1}}function oP($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Z)=>{if(!Z||typeof Z!=="object")return!1;let Q=Z;if(Q.status==="running"||Q.status==="idle"||Q.status==="pending")return!0;return Array.isArray(Q.participants)&&Q.participants.length>0})}async function sP($,W,Z){let Q=new D1({url:$,authToken:W,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{let J=await Q.command("session.list",{limit:500},void 0,{timeoutMs:cP});return!oP(J.payload)}catch{return!1}finally{await Q.dispose().catch(()=>{return})}}async function s5($={}){if($.endpoint?.trim()){let J=await Kj($.endpoint);return J.status==="compatible"?J.url:void 0}let W=JQ(),Z=await _0(W.discoveryPath);if(!Z?.url)return;let Q=await Kj(Z.url,{authToken:Z.authToken});if(Q.status==="compatible")return d$(Q.url,Z.authToken);if(Q.status==="protocol_mismatch")await v0(W.discoveryPath).catch(()=>{return});return}async function o2($={}){let W=await s5($);if(W&&await N1(W,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return W;if($.endpoint?.trim())return;let Z=JQ();return await D6($.workspaceRoot??process.cwd()),await iP(Z)}async function o5($,W){let Z=new URL($),Q=W?.trim()||LA(Z);if(Z.protocol==="ws:")Z.protocol="http:";else if(Z.protocol==="wss:")Z.protocol="https:";return Z.pathname="/shutdown",Z.hash="",(await fetch(Z,{method:"POST",headers:Q?{authorization:`Bearer ${Q}`}:void 0})).ok}async function Uj($=JQ()){let W=await _0($.discoveryPath);if(!W?.url)return!1;try{if(await o5(W.url,W.authToken))return!0}catch{}return!1}async function XQ($){if(!Gj($.url))return;let W=JQ(),Z=await _0(W.discoveryPath);if(!Z?.url||!aP(Z.url,$.url))return;if(!await sP(Z.url,Z.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await Uj())return;if(!await nP(Z.url))return;return await v0(W.discoveryPath).catch(()=>{return}),await o2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var bA={};E(bA,{HubRuntimeHost:()=>Q$});import{resolveProviderRequestHeaders as WS}from"@cline/llms";import{captureSdkError as fj,createSessionId as TA,HUB_CHECKPOINT_CAPABILITY as ZS,HUB_COMPACTION_CAPABILITY as QS,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as JS,HUB_HOOK_CAPABILITY_PREFIX as jS,HUB_MISTAKE_LIMIT_CAPABILITY as XS,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as YS,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as VS,isHubToolExecutorName as BS}from"@cline/shared";var OA={};E(OA,{createCoreSessionSnapshot:()=>E1,coreSessionSnapshotToRecord:()=>YQ});function tP($){return $?JSON.parse(JSON.stringify($)):void 0}function eP($){return $?JSON.parse(JSON.stringify($)):void 0}function $S($){let W=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,Q=(Array.isArray(W?.history)?W.history:[]).filter((X)=>!!X&&typeof X==="object"&&!Array.isArray(X)).flatMap((X)=>{let Y=typeof X.ref==="string"?X.ref.trim():"",V=Number(X.createdAt),B=Number(X.runCount);if(!Y||!Number.isFinite(V)||!Number.isInteger(B))return[];return[{ref:Y,createdAt:V,runCount:B,...X.kind==="stash"||X.kind==="commit"?{kind:X.kind}:{}}]}),J=Q.at(-1),j=$?.checkpointEnabled===!0?!0:void 0;if(!j&&Q.length===0)return;return{...j?{enabled:j}:{},...J?{latest:J}:{},history:Q}}function E1($){let{session:W}=$,Z=tP(W.metadata);return{version:1,sessionId:W.sessionId,source:W.source,status:W.status,createdAt:W.startedAt,updatedAt:W.updatedAt,endedAt:W.endedAt??null,exitCode:W.exitCode??null,interactive:W.interactive,workspace:{cwd:W.cwd,root:W.workspaceRoot},model:{providerId:W.provider,modelId:W.model},capabilities:{enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams},lineage:{...W.parentSessionId?{parentSessionId:W.parentSessionId}:{},...W.parentAgentId?{parentAgentId:W.parentAgentId}:{},...W.agentId?{agentId:W.agentId}:{},...W.conversationId?{conversationId:W.conversationId}:{},isSubagent:W.isSubagent},...W.teamName?{team:{name:W.teamName}}:{},...W.prompt?{prompt:W.prompt}:{},...Z?{metadata:Z}:{},...W.messagesPath?{artifacts:{messagesPath:W.messagesPath}}:{},...$.messages?{messages:eP($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Q=$S(Z);return Q?{checkpoint:Q}:{}})()}}function YQ($){return{sessionId:$.sessionId,parentSessionId:$.lineage.parentSessionId,agentId:$.lineage.agentId,parentAgentId:$.lineage.parentAgentId,conversationId:$.lineage.conversationId,isSubagent:$.lineage.isSubagent,source:$.source,startedAt:$.createdAt,endedAt:$.endedAt??void 0,exitCode:$.exitCode??void 0,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspaceRoot:$.workspace.root,teamName:$.team?.name,enableTools:$.capabilities.enableTools,enableSpawn:$.capabilities.enableSpawn,enableTeams:$.capabilities.enableTeams,prompt:$.prompt,metadata:$.metadata,updatedAt:$.updatedAt,messagesPath:$.artifacts?.messagesPath}}function L6($){if(!$)return;return JSON.parse(JSON.stringify($))}var HS=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function zA($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function qA($){if(!$)return;let{userInstructionService:W,...Z}=$;return JSON.parse(JSON.stringify(Z))}function MA($,W){let Z={...$.config,sessionId:W},Q=WS({providerId:$.config.providerId,sessionId:W,source:$.source,defaultSource:A0.CORE,client:{name:$.localRuntime?.extensionContext?.client?.name,version:$.localRuntime?.extensionContext?.client?.version,versionHeaderFallback:$.config.headers?.["X-CLIENT-VERSION"],platform:$.localRuntime?.extensionContext?.client?.platform,platformVersion:$.localRuntime?.extensionContext?.client?.platformVersion,isMultiRoot:$.localRuntime?.extensionContext?.client?.isMultiRoot},coreVersion:c8,openAiCodex:{accessToken:$.config.apiKey,userAgentVersion:process.env.npm_package_version},headers:{config:$.config.headers}});if(Q)Z.headers=Q;return Z}function RA($){let W=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof W.agentId==="string"?W.agentId:"",conversationId:typeof W.conversationId==="string"?W.conversationId:"",iteration:typeof W.iteration==="number"?W.iteration:0,metadata:W.metadata&&typeof W.metadata==="object"&&!Array.isArray(W.metadata)?W.metadata:void 0}}function s2($,W,Z){$.manifest.push(W),$.handlers.set(W.capabilityName,Z)}function NA($,W){let Z={manifest:[],handlers:new Map};for(let J of Object.keys(W.toolExecutors??{}).filter(BS)){let j=W.toolExecutors?.[J];if(typeof j!=="function")continue;s2(Z,{kind:"toolExecutor",executor:J,capabilityName:`${YS}${J}`},async({payload:X,abortSignal:Y})=>{let V=Array.isArray(X.args)?[...X.args]:[],B={...RA(X.context),signal:Y};return{result:await j(...V,B)}})}for(let J of $?.extraTools??[])s2(Z,{kind:"tool",name:J.name,description:J.description,inputSchema:L6(J.inputSchema)??{},...J.lifecycle?{lifecycle:L6(J.lifecycle)}:{},capabilityName:`${JS}${J.name}`},async({payload:j,abortSignal:X,progress:Y})=>{let V={...RA(j.context),signal:X};return{result:await J.execute(j.input,{...V,emitUpdate:(H)=>{Y({update:H})}})}});let Q=$?.hooks;if(Q)for(let J of HS){let j=Q[J];if(typeof j!=="function")continue;s2(Z,{kind:"hook",name:J,capabilityName:`${jS}${J}`},async({payload:X})=>({control:await j(X.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;s2(Z,{kind:"compaction",capabilityName:QS,config:zA($.compaction)},async({payload:j})=>({result:await J(j.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;s2(Z,{kind:"checkpoint",capabilityName:ZS,config:zA($.checkpoint)},async({payload:j})=>({result:await J(j.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;s2(Z,{kind:"mistakeLimit",capabilityName:XS},async({payload:j})=>({result:await J(j.context)}))}if($?.userInstructionService){let J=$.userInstructionService;s2(Z,{kind:"userInstructionService",capabilityName:VS},async()=>{return await J.start().catch(()=>{}),{snapshot:{records:{skill:J.listRecords("skill"),rule:J.listRecords("rule"),workflow:J.listRecords("workflow")},runtimeCommands:J.listRuntimeCommands()}}})}return Z}function PA($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let W=$.message;if(typeof W==="string"&&W.trim())return W.trim()}return}function GS($){return PA($)??"Capability request was cancelled."}function KS($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function FS($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function AS($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=$,Z=typeof W.inputTokens==="number"?W.inputTokens:void 0,Q=typeof W.outputTokens==="number"?W.outputTokens:void 0;if(Z===void 0||Q===void 0)return;return{inputTokens:Z,outputTokens:Q,cacheReadTokens:typeof W.cacheReadTokens==="number"?W.cacheReadTokens:0,cacheWriteTokens:typeof W.cacheWriteTokens==="number"?W.cacheWriteTokens:0,totalCost:typeof W.totalCost==="number"?W.totalCost:0}}function EA($){if(!$)return;return{inputTokens:typeof $.inputTokens==="number"?$.inputTokens:0,outputTokens:typeof $.outputTokens==="number"?$.outputTokens:0,cacheReadTokens:typeof $.cacheReadTokens==="number"?$.cacheReadTokens:0,cacheWriteTokens:typeof $.cacheWriteTokens==="number"?$.cacheWriteTokens:0,totalCost:typeof $.totalCost==="number"?$.totalCost:0}}function Dj($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function p$($,W){return Dj($?.[W])??0}function US($){let W=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Z=$?.totals&&typeof $.totals==="object"?$.totals:void 0,Q=$?.agent&&typeof $.agent==="object"?$.agent:void 0,J=Q?.teamRole==="teammate"||Q?.teamRole==="lead"?Q.teamRole:void 0;return{event:{type:"usage",agentId:typeof Q?.agentId==="string"?Q.agentId:void 0,conversationId:typeof Q?.conversationId==="string"?Q.conversationId:void 0,parentAgentId:typeof Q?.parentAgentId==="string"?Q.parentAgentId:void 0,inputTokens:p$(W,"inputTokens"),outputTokens:p$(W,"outputTokens"),cacheReadTokens:p$(W,"cacheReadTokens"),cacheWriteTokens:p$(W,"cacheWriteTokens"),cost:Dj(W?.totalCost),totalInputTokens:p$(Z,"inputTokens"),totalOutputTokens:p$(Z,"outputTokens"),totalCacheReadTokens:p$(Z,"cacheReadTokens"),totalCacheWriteTokens:p$(Z,"cacheWriteTokens"),totalCost:Dj(Z?.totalCost)},teamAgentId:typeof Q?.teamAgentId==="string"?Q.teamAgentId:void 0,teamRole:J}}function fS($){let W=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Z=$?.reason??W?.finishReason,Q=FS(Z)?Z:Z==="failed"?"error":"completed",J=AS($?.usage??W?.usage);return{type:"done",reason:Q,text:typeof $?.text==="string"?$.text:typeof W?.text==="string"?W.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof W?.iterations==="number"?W.iterations:0,usage:J}}function t2($,W){return $.error?.message??`hub command failed: ${W}`}function t5($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function SA($){let W=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof W?.parentSessionId==="string"?W.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof W?.agentId==="string"?W.agentId:void 0),parentAgentId:typeof W?.parentAgentId==="string"?W.parentAgentId:void 0,conversationId:typeof W?.conversationId==="string"?W.conversationId:void 0,isSubagent:typeof W?.isSubagent==="boolean"?W.isSubagent:!1,source:typeof W?.source==="string"?W.source:A0.CORE,pid:typeof W?.pid==="number"?W.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:t5($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:t5($.status)==="completed"?0:t5($.status)==="failed"?1:void 0,status:t5($.status),interactive:W?.interactive===!0,provider:typeof W?.provider==="string"?W.provider:"hub",model:typeof W?.model==="string"?W.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof W?.teamName==="string"?W.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??W?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??W?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??W?.enableTeams===!0,prompt:typeof W?.prompt==="string"?W.prompt:void 0,metadata:W,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof W?.messagesPath==="string"?W.messagesPath:void 0,hookPath:typeof W?.hookPath==="string"?W.hookPath:void 0}}function r$($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=$;return W.version===1&&typeof W.sessionId==="string"?JSON.parse(JSON.stringify(W)):void 0}function DS($){let W=r$($?.snapshot);if(W)return YQ(W);let Z=$?.session;return Z?SA(Z):void 0}function wA($,W,Z){let Q=Z?.workspaceRoot?.trim()||W.config.workspaceRoot||W.config.cwd;return g0.parse({version:1,session_id:$,source:W.source??A0.CORE,pid:process.pid,started_at:new Date(Z?.createdAt??Date.now()).toISOString(),status:t5(Z?.status),interactive:W.interactive===!0,provider:W.config.providerId,model:W.config.modelId,cwd:Z?.cwd?.trim()||W.config.cwd,workspace_root:Q,team_name:W.config.teamName,enable_tools:W.config.enableTools,enable_spawn:W.config.enableSpawnAgent,enable_teams:W.config.enableAgentTeams,prompt:W.prompt?.trim()||void 0,metadata:W.sessionMetadata&&Object.keys(W.sessionMetadata).length>0?W.sessionMetadata:void 0})}function CA($,W){return g0.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??W.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class Q${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new i5;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,W){this.clientContext=W,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:W?.workspaceRoot,cwd:W?.cwd},this.defaultCapabilities=w0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Z)=>this.requestPendingPromptsList(Z),update:(Z)=>this.requestPendingPromptUpdate(Z),delete:(Z)=>this.requestPendingPromptDelete(Z)},this.client=this.createClient($.url)}createClient($){return new D1({...this.clientOptions,url:$})}async replaceClient($){let W=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(W.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!jQ($,"session.create"))return!1;let W=await XQ({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!W)return!1;return await this.replaceClient(W),!0}registerPlannedSession($,W,Z){if(this.sessionCapabilities.set($,W),Z.size>0)this.sessionClientContributionHandlers.set($,Z);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let W=this.resolveCapabilities($),Z=NA($.localRuntime,W),Q=$.config.sessionId?.trim()||TA(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:L6(MA($,Q)),metadata:{...$.sessionMetadata??{},source:$.source??A0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Z.manifest.length>0?{clientContributions:Z.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:L6($.toolPolicies),initialMessages:$.initialMessages,...$.initialCompactionState?{initialCompactionState:$.initialCompactionState}:{}});this.registerPlannedSession(Q,W,Z.handlers);let j;try{j=await J()}catch(B){if(this.cleanupPlannedSession(Q),await this.recoverLocalHubStartupDeadlock(B)){this.registerPlannedSession(Q,W,Z.handlers);try{j=await J()}catch(H){throw this.cleanupPlannedSession(Q),H}}else throw B}let X=r$(j.payload?.snapshot),Y=j.payload?.session,V=(X?.sessionId??Y?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(Q),Error("Hub runtime did not return a session id.");if(V!==Q)this.cleanupPlannedSession(Q),this.registerPlannedSession(V,W,Z.handlers);return{sessionId:V,manifest:X?CA(X,$):wA(V,$,Y),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let W=$.sessionId.trim();if(!W)throw Error("sessionId is required");let Z=$.restore?.messages!==!1;if(Z&&!$.start)throw Error("start is required when restore.messages is true");let Q=$.start,J=Q?this.resolveCapabilities(Q):void 0,j=Q?NA(Q.localRuntime,J??{}):{manifest:[],handlers:new Map},X,Y;if(Q)X=Q.config.sessionId?.trim()||TA(),Y=MA(Q,X);if(X&&J)this.sessionCapabilities.set(X,J);if(X&&j.handlers.size>0)this.sessionClientContributionHandlers.set(X,j.handlers),this.ensureSessionSubscription(X);let V;try{V=await this.client.command("session.restore",{sessionId:W,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Q?{workspaceRoot:Q.config.workspaceRoot?.trim()||Q.config.cwd,cwd:Q.config.cwd??$.cwd,sessionConfig:L6(Y),metadata:{...Q.sessionMetadata??{},source:Q.source??A0.CORE,provider:Q.config.providerId,model:Q.config.modelId,enableTools:Q.config.enableTools,enableSpawn:Q.config.enableSpawnAgent,enableTeams:Q.config.enableAgentTeams,teamName:Q.config.teamName,prompt:Q.prompt,interactive:Q.interactive===!0},runtimeOptions:{...j.manifest.length>0?{clientContributions:j.manifest}:{},...Q.localRuntime?.configExtensions?{configExtensions:Q.localRuntime.configExtensions}:{}},toolPolicies:L6(Q.toolPolicies),...Q.initialCompactionState?{initialCompactionState:Q.initialCompactionState}:{}}:{}},W)}catch(A){if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw A}if(!V.ok){let A=typeof V.payload?.error==="string"?V.payload.error:"session.restore failed";if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw Error(A)}let B=r$(V.payload?.snapshot),H=V.payload?.session,G=(B?.sessionId??H?.sessionId)?.trim();if(Z&&!G){if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw Error("Hub checkpoint restore returned no session id")}if(G&&X&&G!==X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);if(G&&J)this.sessionCapabilities.set(G,J);if(G&&j.handlers.size>0)this.sessionClientContributionHandlers.set(G,j.handlers);if(G)this.ensureSessionSubscription(G);let K=Array.isArray(V.payload?.messages)?V.payload.messages:void 0,F=V.payload?.checkpoint;if(!F)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:G,startResult:G?{sessionId:G,manifest:B?CA(B,Q??{}):wA(G,Q??{},H),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:K,checkpoint:F}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let W=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(W.payload?.prompts)?W.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let W=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(W.payload?.prompts)?W.payload.prompts:[],prompt:W.payload?.prompt,updated:W.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let W=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(W.payload?.prompts)?W.payload.prompts:[],prompt:W.payload?.prompt,removed:W.payload?.removed===!0}}async getAccumulatedUsage($){let W=await this.client.command("session.get",{includeSnapshot:!0},$),Z=r$(W.payload?.snapshot);if(Z){let X=Z.usage?{...Z.usage}:void 0,Y=Z.aggregateUsage?{...Z.aggregateUsage}:void 0;return X||Y?{usage:X,aggregateUsage:Y}:void 0}let Q=W.payload?.session,J=EA(Q?.usage),j=EA(Q?.aggregateUsage);return J||j?{usage:J,aggregateUsage:j}:void 0}async abort($,W){await this.client.command("run.abort",{sessionId:$,reason:PA(W)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,W]of this.sessionSubscriptions){W();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let W;try{W=await this.client.command("session.get",void 0,$)}catch(Z){if($$(Z))return;throw Z}return DS(W.payload)}async listSessions($=100){let W=await this.client.command("session.list",{limit:$}),Z=Array.isArray(W.payload?.snapshots)?W.payload.snapshots.flatMap((J)=>{let j=r$(J);return j?[YQ(j)]:[]}):[];if(Z.length>0)return Z;return(W.payload?.sessions??[]).map(SA)}async listSettings($){let W=await this.client.command("settings.list",qA($));if(!W.ok)throw Error(t2(W,"settings.list"));return W.payload?.snapshot}async toggleSetting($){let W=await this.client.command("settings.toggle",qA($));if(!W.ok)throw Error(t2(W,"settings.toggle"));return{snapshot:W.payload?.snapshot,changedTypes:Array.isArray(W.payload?.changedTypes)?W.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,W){let Z={...W.metadata??{}};if(typeof W.prompt==="string")Z.prompt=W.prompt;if(typeof W.title==="string")Z.title=W.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Z})).ok}}async updateSessionConnection($,W){let Z=$.trim();if(!Z)return;let Q=await this.client.command("session.update_connection",{sessionId:Z,updates:W},Z);if(!Q.ok)throw Error(t2(Q,"session.update_connection"))}async updateSessionCompactionState($,W){let Z=$.trim();if(!Z)return{updated:!1};let Q=await this.client.command("session.compaction.update",{sessionId:Z,state:W},Z);if(!Q.ok)fj(this.telemetry,{component:"core",operation:"hub.runtime_host.update_session_compaction_state",error:Error(t2(Q,"session.compaction.update")),severity:"warn",handled:!0,context:{command:"session.compaction.update",sessionId:Z,errorCode:Q.error?.code}});return{updated:Q.ok&&Q.payload?.updated===!0}}async readSessionCompactionState($){let W=$.trim();if(!W)return;let Z=await this.client.command("session.compaction.get",{sessionId:W},W);if(!Z.ok)throw Error(t2(Z,"session.compaction.get"));return G1(Z.payload?.state)}async readSessionMessages($){let W=$.trim();if(!W)return[];let Z=await this.client.command("session.messages",{sessionId:W},W);if(!Z.ok)throw fj(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(t2(Z,"session.messages")),severity:Z.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:W,errorCode:Z.error?.code,runtimeAddress:this.runtimeAddress}}),Error(t2(Z,"session.messages"));let Q=Z.payload?.messages;return Array.isArray(Q)?Q:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,W){return this.events.subscribe($,W)}ensureSessionSubscription($){let W=$.trim();if(!W||this.sessionSubscriptions.has(W))return;let Z=this.client.subscribe((Q)=>{this.handleHubEvent(Q)},{sessionId:W});this.sessionSubscriptions.set(W,typeof Z==="function"?Z:()=>{})}disposeSessionSubscription($){let W=$.trim();if(!W)return;this.sessionSubscriptions.get(W)?.(),this.sessionSubscriptions.delete(W),this.agentDoneEmittedForCurrentRunBySession.delete(W)}resolveCapabilities($){return w0(this.defaultCapabilities,$.capabilities)??{}}emitToolCallContentStart($){this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:{type:"content_start",contentType:"tool",toolCallId:$.toolCallId,toolName:$.toolName,input:$.toolInput}}})}emitAgentDoneIfNeeded($){if(this.agentDoneEmittedForCurrentRunBySession.has($.sessionId))return;this.agentDoneEmittedForCurrentRunBySession.add($.sessionId),this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:fS($.payload)}})}handleHubEvent($){let W=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Z)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Z,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Z)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Z,$)});return}if(!W)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(W);let Z=r$($.payload?.snapshot),Q=$.payload?.session;if(Z)this.events.emit({type:"session_snapshot",payload:{sessionId:W,snapshot:Z}});this.events.emit({type:"status",payload:{sessionId:W,status:Q?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"assistant.delta":{let Z=typeof $.payload?.text==="string"?$.payload.text:"";if(!Z)return;this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"content_start",contentType:"text",text:Z}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Z=typeof $.payload?.text==="string"?$.payload.text:"",Q=$.payload?.redacted===!0;if(!Z&&!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"content_start",contentType:"reasoning",reasoning:Z,redacted:Q}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:W,payload:$.payload});return}case"usage.updated":{let Z=US($.payload);this.events.emit({type:"agent_event",payload:{sessionId:W,event:Z.event,teamAgentId:Z.teamAgentId,teamRole:Z.teamRole}});return}case"tool.started":{let Z=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Z&&this.pendingApprovalToolCallIds.delete(Z))return;this.emitToolCallContentStart({sessionId:W,toolCallId:Z,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Z=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Z)this.pendingApprovalToolCallIds.delete(Z);this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"content_end",contentType:"tool",toolCallId:Z,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Z=r$($.payload?.snapshot),Q=$.payload?.session;if(Z)this.events.emit({type:"session_snapshot",payload:{sessionId:W,snapshot:Z}});this.events.emit({type:"status",payload:{sessionId:W,status:Q?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:W,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Z=$.payload?.prompt;if(!Z)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:W,id:Z.id,prompt:Z.prompt,delivery:Z.delivery,attachmentCount:Z.attachmentCount,userImages:Z.userImages,userFiles:Z.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Z=r$($.payload?.snapshot),Q=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:W,payload:{...$.payload,reason:Q}}),Z?.interactive===!0&&F0(Z.status))return;this.events.emit({type:"ended",payload:{sessionId:W,reason:Q,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,W,Z){try{fj(this.telemetry,{component:"core",operation:$,error:W,severity:"warn",handled:!0,context:{event:Z.event,sessionId:Z.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let W=$.sessionId?.trim();if(!W)return;let Z=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Z&&Z!==this.client.getClientId())return;let Q=typeof $.payload?.requestId==="string"?$.payload.requestId:"",J=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!Q)return;let j=this.sessionClientContributionHandlers.get(W)?.get(J);if(!j){await this.client.command("capability.respond",{requestId:Q,ok:!1,error:`No client contribution handler registered for capability ${J} in session ${W}.`},W).catch(()=>{});return}let X=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},Y=new AbortController;this.activeCapabilityAbortControllers.set(Q,Y);let V=(B)=>{this.client.command("capability.progress",{requestId:Q,payload:B},W).catch((H)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",H,$)})};try{let B=await j({payload:X,abortSignal:Y.signal,progress:V});if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:Q,ok:!0,payload:B},W)}catch(B){if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:Q,ok:!1,error:B instanceof Error?B.message:String(B)},W)}finally{this.activeCapabilityAbortControllers.delete(Q)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let W=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!W)return;let Z=this.activeCapabilityAbortControllers.get(W);if(!Z)return;Z.abort(GS($.payload.error))}async handleApprovalRequested($){let W=$.sessionId?.trim();if(!W)return;let Z=this.sessionCapabilities.get(W)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Z)return;let Q=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",j=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!Q||!J||!j)return;let X=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},Y=KS($.payload?.inputJson);this.pendingApprovalToolCallIds.add(J),this.emitToolCallContentStart({sessionId:W,toolCallId:J,toolName:j,toolInput:Y});let V=await Promise.resolve(Z({sessionId:W,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:W,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:J,toolName:j,input:Y,policy:X})).catch((B)=>({approved:!1,reason:B instanceof Error?B.message:`Tool approval request failed: ${String(B)}`}));await this.client.command("approval.respond",{approvalId:Q,approved:V.approved,reason:V.reason},W).catch(()=>{})}}var yA={};E(yA,{RemoteRuntimeHost:()=>O6});class O6 extends Q${constructor($){super({url:l$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var hA={};E(hA,{SqliteSessionStore:()=>C1});import{existsSync as _S,mkdirSync as LS}from"node:fs";import{join as OS}from"node:path";import{asBool as e5,asOptionalString as w1,asString as J$,ensureSessionSchema as TS,loadSqliteDb as zS,nowIso as VQ,toBoolInt as $W}from"@cline/shared/db";import{resolveDbDataDir as qS}from"@cline/shared/storage";class C1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??qS()}init(){this.getRawDb()}ensureSessionsDir(){if(!_S(this.sessionsDirPath))LS(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return OS(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=zS(this.sessionDbPath());return TS($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,W=[]){return this.getRawDb().prepare($).run(...W)}queryOne($,W=[]){return this.getRawDb().prepare($).get(...W)??void 0}queryAll($,W=[]){return this.getRawDb().prepare($).all(...W)}create($){let W=VQ();this.run(`INSERT OR REPLACE INTO sessions (
503
+ WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,W,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,W){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(W,C0(),$)}attachReportPathToRun($,W){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(W,C0(),$)}}class n5{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new i5({dbPath:$.dbPath});let W=$.specs;this.reconciler=new nJ({store:this.store,specs:W}),this.materializer=new u5({store:this.store}),this.eventIngress=new xJ({store:this.store,logger:$.logger}),this.runner=new d5({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:W,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new aJ({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Z)=>{let Q=$.logger;if(Q)if(Q.error)Q.error("cron.watcher.failed",{error:Z});else Q.log("cron.watcher.failed",{error:Z})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}var WA={};w(WA,{manifestToSessionRecord:()=>sZ,listSessionHistoryFromBackend:()=>Zj,listSessionHistory:()=>tZ,hydrateSessionHistory:()=>$A});import{readdir as qC,readFile as sF}from"node:fs/promises";import{join as tF}from"node:path";import{formatDisplayUserInput as MC,normalizeUserInput as NC}from"@cline/shared";import{resolveSessionDataDir as eF}from"@cline/shared/storage";import{existsSync as TC}from"node:fs";import{readFile as zC}from"node:fs/promises";class a5{listeners=new Set;subscribe($,W){let Z={listener:$,sessionId:W?.sessionId?.trim()||void 0};return this.listeners.add(Z),()=>{this.listeners.delete(Z)}}emit($){let W=$.payload.sessionId?.trim();for(let Z of this.listeners){if(Z.sessionId&&Z.sessionId!==W)continue;Z.listener($)}}get size(){return this.listeners.size}}async function u$($){let W=$?.trim();if(!W||!TC(W))return[];try{let Z=(await zC(W,"utf8")).trim();if(!Z)return[];let Q=JSON.parse(Z);if(Array.isArray(Q))return Q;if(Q&&typeof Q==="object"&&!Array.isArray(Q)){let J=Q.messages;if(Array.isArray(J))return J}return[]}catch{return[]}}function eJ($){return $?{...$}:void 0}async function aF($,W){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await W.queueSpawnRequest($);let Q=await W.upsertSubagentSessionFromHook($);if(!Q)return;await W.appendSubagentHookAudit(Q,$),await W.applySubagentStatus(Q,$)}function o5($){if(typeof $!=="string")return;let W=$.trim();return W.length>0?W:void 0}function W1($){let W=o5($);if(!W)return;return W.toLowerCase()==="unknown"?void 0:W}function oZ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function RC($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function Wj($){let W=$??200;return Number.isFinite(W)?Math.max(0,Math.floor(W)):200}function EC($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function wC($){return $.isSubagent!==!0&&!o5($.parentSessionId)}function CC($){let W=$.match(/\d{13,}/g);if(!W||W.length===0)return 0;let Z=0;for(let Q of W){let J=Number.parseInt(Q,10);if(Number.isFinite(J)&&J>Z)Z=J}return Z}function sZ($){return{sessionId:$.session_id,source:$.source,pid:$.pid,startedAt:$.started_at,endedAt:$.ended_at??null,exitCode:$.exit_code??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspace_root,teamName:$.team_name,enableTools:$.enable_tools,enableSpawn:$.enable_spawn,enableTeams:$.enable_teams,isSubagent:!1,prompt:$.prompt,metadata:$.metadata,messagesPath:$.messages_path,updatedAt:$.ended_at??$.started_at}}async function PC($){let W=Wj($);if(W===0)return[];let Z=eF(),J=(await qC(Z,{withFileTypes:!0}).catch(()=>[])).filter((X)=>X.isDirectory()).map((X)=>({entry:X,recency:CC(X.name.trim())})).sort((X,Y)=>Y.recency-X.recency||Y.entry.name.localeCompare(X.entry.name));return(await Promise.all(J.map(async({entry:X})=>{let Y=X.name.trim();if(!Y)return;let V=tF(Z,Y,`${Y}.json`),B=await sF(V,"utf8").catch(()=>{return});if(!B)return;let H;try{H=JSON.parse(B)}catch{return}let G=I0.safeParse(H);if(!G.success)return;return sZ(G.data)}))).filter((X)=>Boolean(X)).sort((X,Y)=>Y.startedAt.localeCompare(X.startedAt)).slice(0,W)}async function SC($,W,Z){let Q=Wj(W);if(Q===0)return await $.listSessions(0),[];let J=Z.includeSubagents?Q:EC(Q),j=await $.listSessions(J);return(Z.includeSubagents?j:j.filter(wC)).slice(0,Q)}function bC($){if(typeof $==="string")return $.trim();let W=[];for(let Z of $){if(!Z||typeof Z!=="object")continue;let Q=Z;if(Q.type!=="text")continue;let J=Q.text?.trim();if(J)W.push(J)}return W.join(`
504
+ `).trim()}function oF($){return $.replace(/\s+/g," ").trim()}function yC($,W){if($.length<=W)return $;return`${$.slice(0,Math.max(0,W-3)).trimEnd()}...`}function hC($){for(let W of["user","assistant"])for(let Z of $){if(Z.role!==W)continue;let Q=oF(bC(Z.content));if(!Q)continue;let J=W==="user"?oF(MC(Q)):Q,j=NC(J.split(`
505
+ `)[0]??J);return yC(j,50)}return}function kC($){let W=0;for(let Z of $)W+=oZ(Z.metrics?.cost)??0;return W}function IC($){let W,Z;for(let Q=$.length-1;Q>=0;Q-=1){let J=$[Q];if(!W)W=W1(J.modelInfo?.provider);if(!Z)Z=W1(J.modelInfo?.id);if(W&&Z)break}return{provider:W,model:Z}}function xC($){return W1($?.provider)??W1($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function gC($){return W1($?.model)??W1($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function $j($,W){let Z=RC($.metadata),Q=o5(W?.title)??o5(Z?.title),J=oZ(W?.totalCost)??oZ(Z?.totalCost),j=Z||Q!==void 0||J!==void 0?{...Z??{},...Q!==void 0?{title:Q}:{},...J!==void 0?{totalCost:J}:{}}:void 0;return{...$,provider:W1(W?.provider)??W1($.provider)??xC(Z)??"",model:W1(W?.model)??W1($.model)??gC(Z)??"",metadata:j}}function mC($){let W=$.content;if(!Array.isArray(W))return!1;return W.some((Z)=>!!Z&&typeof Z==="object"&&Z.type==="tool-call")}function vC($,W){if($.status!=="running"||$.interactive!==!0)return!1;let Z=W.at(-1);return Z?.role==="assistant"&&!mC(Z)}async function cC($,W){return await Promise.all(W.map(async(Z)=>{if(Z.status!=="running"||Z.interactive!==!0)return Z;let Q=await $.readSessionMessages(Z.sessionId);return vC(Z,Q)?{...Z,status:"idle"}:Z}))}async function $A($,W){return await Promise.all(W.map(async(Z)=>{let Q=$j(Z),J=Boolean(o5(Q.metadata?.title)),j=Boolean(W1(Q.provider)),X=Boolean(W1(Q.model)),Y=oZ(Q.metadata?.totalCost),V=Y!==void 0&&Y>0;if(J&&j&&X&&V)return Q;let B=await $.readSessionMessages(Z.sessionId);if(B.length===0)return Q;let H=IC(B),G=kC(B);return $j(Z,{title:J?void 0:hC(B),provider:j?void 0:H.provider,model:X?void 0:H.model,totalCost:V||G<=0?void 0:G})}))}async function tZ($,W={}){let Z=Wj(W.limit),Q=W.includeSubagents===!0,J=await SC($,Z,{includeSubagents:Q}),j=W.includeManifestFallback===!0&&J.length<Z?await PC(Math.min(Math.max(Z*2,100),500)):[],X=new Map;for(let B of[...J,...j]){if(X.has(B.sessionId))continue;X.set(B.sessionId,B)}let Y=j.length===0?J:Array.from(X.values()).sort((B,H)=>H.startedAt.localeCompare(B.startedAt)).slice(0,Z),V=await cC($,Y);if(W.hydrate===!1)return V.map((B)=>$j(B));return await $A($,V)}async function uC($){let W=$.trim();if(!W)return;let Z=tF(eF(),W,`${W}.json`),Q=await sF(Z,"utf8").catch(()=>{return});if(!Q)return;try{let J=I0.safeParse(JSON.parse(Q));return J.success?J.data.messages_path:void 0}catch{return}}async function Zj($,W={}){let Z=new Map;return await tZ({listSessions:async(J)=>{let j=await $.listSessions(J);Z.clear();for(let X of j)Z.set(X.sessionId,X);return j.map(i4)},readSessionMessages:async(J)=>{let j=Z.get(J)?.messagesPath??await uC(J);return await u$(j)}},W)}var fU={};w(fU,{resolveSessionBackend:()=>mj,createRuntimeHost:()=>C6});import{captureSdkError as AU}from"@cline/shared";import{createSessionId as IP,isHubProtocolCompatible as xP,resolveClineBuildEnv as gP,resolveHubCommandTimeoutMs as mP}from"@cline/shared";import{spawn as FP}from"node:child_process";import{closeSync as AP,mkdirSync as UP,openSync as fP}from"node:fs";import{basename as DP,dirname as _P,join as LP}from"node:path";import{fileURLToPath as OP}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as TP,isHubDaemonProcess as FA,isHubProtocolCompatible as zP,resolveClineBuildEnv as AA,withResolvedClineBuildEnv as qP}from"@cline/shared";import{createHash as dC,randomBytes as lC}from"node:crypto";import{existsSync as pC}from"node:fs";import{chmod as rC,mkdir as Qj,readFile as JA,rm as Jj,writeFile as jA}from"node:fs/promises";import{dirname as XA,join as jj}from"node:path";import{resolveClineDataDir as i2,resolveClineDir as YA}from"@cline/shared/storage";var iC="CLINE_HUB_DISCOVERY_PATH",nC="CLINE_HUB_BUILD_ID",ZA=30000,aC=15000,oC=100;function sC($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function tC($){return dC("sha256").update($).digest("hex").slice(0,12)}function eC($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(W){return W instanceof Error&&"code"in W?String(W.code)==="EPERM":!1}}function eZ(){return lC(32).toString("hex")}function $P($){return new Promise((W)=>setTimeout(W,$))}function WP($){return`${$}.lock`}async function ZP($){try{let W=JSON.parse(await JA(jj($,"owner.json"),"utf8"));if(typeof W.pid!=="number"||typeof W.acquiredAt!=="string")return;return{pid:W.pid,acquiredAt:W.acquiredAt}}catch{return}}async function QA($){await Jj($,{recursive:!0,force:!0}).catch(()=>{return})}function $Q(){return process.env[nC]?.trim()||String(o4.version)}function Q$($=process.argv[1]?.trim()||process.cwd()){let W=`hub-${tC($)}`,Z=process.env[iC]?.trim()||jj(i2(),"locks","hub","owners",`${sC(W)}.json`);return{ownerId:W,discoveryPath:Z}}function VA($=`hub-${Date.now().toString(36)}`){return Q$($)}async function _0($){try{let W=JSON.parse(await JA($,"utf8"));if(typeof W.hubId!=="string"||typeof W.protocolVersion!=="string"||typeof W.authToken!=="string"||typeof W.host!=="string"||typeof W.port!=="number"||typeof W.url!=="string"||typeof W.startedAt!=="string"||typeof W.updatedAt!=="string")return;return{hubId:W.hubId,protocolVersion:W.protocolVersion,minClientProtocolVersion:typeof W.minClientProtocolVersion==="string"?W.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof W.maxClientProtocolVersion==="string"?W.maxClientProtocolVersion:void 0,capabilities:Array.isArray(W.capabilities)?W.capabilities.filter((Z)=>typeof Z==="string"):void 0,coreVersion:typeof W.coreVersion==="string"?W.coreVersion:void 0,buildId:typeof W.buildId==="string"?W.buildId:void 0,authToken:W.authToken,host:W.host,port:W.port,url:W.url,pid:typeof W.pid==="number"?W.pid:void 0,startedAt:W.startedAt,updatedAt:W.updatedAt}}catch{return}}async function WQ($,W){await Qj(XA($),{recursive:!0}),await Jj($,{force:!0}).catch(()=>{return}),await jA($,`${JSON.stringify(W,null,2)}
506
+ `,{encoding:"utf8",mode:384}),await rC($,384)}async function g0($){await Jj($,{force:!0}).catch(()=>{return})}async function ZQ($,W){let Z=WP($);await Qj(XA(Z),{recursive:!0});let Q=Date.now()+aC;while(!0)try{await Qj(Z,{recursive:!1}),await jA(jj(Z,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
507
+ `,"utf8");try{return await W()}finally{await QA(Z)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let X=await ZP(Z),Y=X?Date.now()-Date.parse(X.acquiredAt):ZA+1;if(!X||!eC(X.pid)||Y>ZA){await QA(Z);continue}if(Date.now()>=Q)throw Error(`Timed out waiting for hub startup lock ${Z}`);await $P(oC)}}async function J$($,W){try{let Z=await fetch(W?.authToken?Xj($):QQ($),{headers:W?.authToken?{authorization:`Bearer ${W.authToken}`}:void 0});if(!Z.ok)return;let Q=await Z.json();if(typeof Q.protocolVersion!=="string"||typeof Q.host!=="string"||typeof Q.port!=="number"||typeof Q.url!=="string")return;return{protocolVersion:Q.protocolVersion,minClientProtocolVersion:typeof Q.minClientProtocolVersion==="string"?Q.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Q.maxClientProtocolVersion==="string"?Q.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Q.capabilities)?Q.capabilities.filter((J)=>typeof J==="string"):void 0,coreVersion:typeof Q.coreVersion==="string"?Q.coreVersion:void 0,buildId:typeof Q.buildId==="string"?Q.buildId:void 0,host:Q.host,port:Q.port,url:Q.url,hubId:typeof Q.hubId==="string"?Q.hubId:void 0,authToken:typeof Q.authToken==="string"?Q.authToken:void 0,pid:typeof Q.pid==="number"?Q.pid:void 0,startedAt:typeof Q.startedAt==="string"?Q.startedAt:void 0,updatedAt:typeof Q.updatedAt==="string"?Q.updatedAt:void 0}}catch{return}}function D1($,W,Z="/hub"){return new URL(`ws://${$}:${W}${Z}`).toString()}function QQ($){let W=new URL($);return W.protocol=W.protocol==="wss:"?"https:":"http:",W.pathname="/health",W.search="",W.toString()}function Xj($){let W=new URL(QQ($));return W.pathname="/status",W.toString()}function BA($){return pC($)}import{CLINE_HUB_DEV_PORT as QP,CLINE_HUB_PORT as JP,resolveClineBuildEnv as jP}from"@cline/shared";var XP="CLINE_HUB_HOST",YP="CLINE_HUB_PORT",VP="CLINE_HUB_PATHNAME",Yj="127.0.0.1",Vj=JP,Bj="/hub";function HA($){return jP($)==="development"?QP:Vj}function Hj($={}){return($.env??process.env)[XP]?.trim()||Yj}function D6($={}){let Z=($.env??process.env)[YP]?.trim();if(!Z)return HA($);let Q=Number.parseInt(Z,10);if(!Number.isInteger(Q)||Q<1||Q>65535)return HA($);return Q}function Gj($={}){return($.env??process.env)[VP]?.trim()||Bj}function Z1($={},W={}){return{host:$.host??Hj(W),port:$.port??D6(W),pathname:$.pathname??Gj(W)}}import{join as BP}from"node:path";var HP="shared:cline",GP="CLINE_HUB_DISCOVERY_PATH",KP="hub-production";function GA($){let W=R1($.trim());return Q$(`workspace:${W||$.trim()}`)}function m0($=HP){return Q$($)}function Q1(){return{ownerId:KP,discoveryPath:process.env[GP]?.trim()||BP(i2(),"locks","hub","production.json")}}var MP=8000,NP=200,RP=3000,EP=100,wP=[100,250,500,1000,2000],CP="--cline-hub-daemon";function PP($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function SP(){try{let $=LP(i2(),"logs","hub-daemon.log");return UP(_P($),{recursive:!0}),{fd:fP($,"a"),logPath:$}}catch{return}}function UA(){return AA()==="production"?Q1():m0()}function n2($){return zP($).compatible}function KA($,W,Z){if(!W||W.url!==Z)return $;return{...$,authToken:$.authToken??W.authToken,pid:$.pid??W.pid}}async function a2($,W){try{return await J$($,{authToken:W})}catch{return}}async function bP($,W){let Z=Date.now()+W;while(Date.now()<Z){if(!(await a2($))?.url)return!0;await new Promise((J)=>setTimeout(J,EP))}return!1}async function JQ($,W){if(await t5($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Z=await bP($.url,RP);return await g0(W).catch(()=>{return}),Z}async function s5($,W){if(n2($))return!0;return JQ($,W)}async function fA($){if(AA()!=="production")return;let W=m0();if(W.discoveryPath===$.discoveryPath)return;let Z=await _0(W.discoveryPath);if(Z?.url)await JQ(Z,W.discoveryPath);else await g0(W.discoveryPath).catch(()=>{return})}function yP(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return OP(new URL(`./entry.${$}`,import.meta.url))}function hP($,W){let Z=yP(),Q=process.execPath?.trim();if(!Q)throw Error("unable to resolve runtime executable for hub daemon");let J=DP(Q).toLowerCase().includes("bun"),j=Z.startsWith("/$bunfs/"),X=J&&Z.toLowerCase().endsWith(".ts"),Y=j?[CP]:[...X?["--conditions=development"]:[],Z];return{launcher:Q,args:[...Y,"--cwd",$,...PP(W)],cwd:$,env:{...qP(process.env),CLINE_NO_INTERACTIVE:"1",[TP]:"1"}}}function kP($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Z="message"in $?$.message:void 0;return typeof Z==="string"&&Z.includes("ETXTBSY")}function Kj($,W={}){if(FA())return;let Z=hP($,W),Q=SP();try{FP(Z.launcher,Z.args,{detached:!0,stdio:Q?["ignore",Q.fd,Q.fd]:"ignore",env:Z.env,cwd:Z.cwd,windowsHide:!0}).unref()}finally{if(Q)AP(Q.fd)}}async function _6($,W={}){for(let Z=0;;Z++)try{Kj($,W);return}catch(Q){let J=wP[Z];if(!kP(Q)||J===void 0)throw Q;await new Promise((j)=>setTimeout(j,J))}}function jQ($,W={}){if(FA())return;let Z=UA(),Q=Z1(W),J=D1(Q.host,Q.port,Q.pathname),j=W.allowPortFallback===!0&&Q.port!==0;fA(Z).catch(()=>{return}).then(()=>_0(Z.discoveryPath)).then(async(X)=>{let Y=!1;if(X?.url)if(!X.authToken){if(Y=!0,!await JQ(X,Z.discoveryPath)&&!j)return}else{let H=await a2(X.url,X.authToken);if(H?.url&&n2(H)&&await w1(H.url,{authToken:X.authToken}))return;if(H?.url)await s5({...H,authToken:X.authToken},Z.discoveryPath);else await g0(Z.discoveryPath).catch(()=>{return})}let V=await a2(J);if(V?.url){if(n2(V)){if(!j||!Y)return}else if(!await s5({...V,authToken:void 0},Z.discoveryPath)&&!j)return}let B=j?{...Q,port:0}:Q;await _6($,B)}).catch(()=>{})}async function DA($,W={}){let Z=UA(),Q=W.host!==void 0||W.port!==void 0||W.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=Z1(W),j=D1(J.host,J.port,J.pathname),X=(F)=>{if(!Q)d$(F.url,F.authToken);return F};await fA(Z).catch(()=>{return});let Y=await _0(Z.discoveryPath),V=!1;if(Y?.url){let F=Y.authToken;if(!F)V=!0,await JQ(Y,Z.discoveryPath);else{let A=await a2(Y.url,F);if(A?.url&&n2(A)&&await w1(A.url,{authToken:F}))return X({url:A.url,authToken:F});if(A?.url)await s5({...A,authToken:F},Z.discoveryPath);else await g0(Z.discoveryPath).catch(()=>{return})}}let B=await a2(j);if(B?.url){let F=KA(B,Y,j);if(n2(B))throw Error(`A compatible Cline Hub is already running at ${j}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${V?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`);if(!await s5(F,Z.discoveryPath)&&W.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is already running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let G=W.allowPortFallback===!0&&J.port!==0?{...J,port:0}:J;await _6($,G);let K=Date.now()+MP;while(Date.now()<K){let F=await _0(Z.discoveryPath);if(F?.url&&F.authToken){let f=await a2(F.url,F.authToken);if(f?.url&&n2(f)&&await w1(f.url,{authToken:F.authToken}))return X({url:f.url,authToken:F.authToken})}let A=await a2(j);if(A?.url&&!n2(A)){let f=KA(A,F,j);if(!await s5(f,Z.discoveryPath)&&W.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is still running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((f)=>setTimeout(f,NP))}throw Error("Timed out waiting for detached hub startup.")}function XQ(){return gP()==="production"?Q1():m0()}function vP(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function zA($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((W)=>Buffer.from(W))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return zA($.data);return String($)}function cP($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function _A($){let W=$,Z=cP(W.reason);return new b0("hub_connection_closed",W.code||Z?`Hub connection closed (code=${W.code??0}${Z?`, reason=${Z}`:""})`:Fj,{closeCode:W.code,closeReason:Z||void 0})}function uP($,W){if($ instanceof b0)return $;if($ instanceof Error)return new b0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new b0("hub_connect_failed",$.error.message);let Z=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Z)return new b0("hub_connect_failed",Z);let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new b0("hub_connect_failed",Q?`Failed to connect to hub at ${W.toString()} (${Q} event before socket open).`:`Failed to connect to hub at ${W.toString()}.`)}var dP=8000,lP=200,LA="*",OA=8000,pP="cline-hub-auth.",qA=new Map,MA=new Set,rP=3000,iP=3000,nP=100,Fj="Hub connection closed",aP=250,oP=5000,TA=0.5;class b0 extends Error{code;details;constructor($,W,Z){super(W);this.code=$;this.details=Z;this.name="HubTransportError"}}function fj($){return $ instanceof b0}class L6 extends Error{command;code;constructor($,W,Z){super(Z);this.command=$;this.code=W;this.name="HubCommandError"}}function YQ($,W){return $ instanceof L6&&$.code==="hub_command_timeout"&&(W===void 0||$.command===W)}function NA($){let W=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),W)return W;let Z=Dj($.toString());return Z?qA.get(Z):void 0}function sP($){try{let Z=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"}catch{return!1}}function Dj($){if(!sP($))return;let W=new URL(l$($));return W.search="",W.hash="",W.toString()}function Aj($){let W=Dj($);return!!W&&MA.has(W)}function d$($,W){let Z=Dj($);if(Z){if(MA.add(Z),W?.trim())qA.set(Z,W)}return $}class _1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new b0("hub_connection_closed",Fj);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),W=this.options.authToken?.trim()||NA($);$.hash="";let Q=new(vP())($.toString(),W?[`${pP}${W}`]:void 0);this.socket=Q;let J=!1;this.connectPromise=new Promise((j,X)=>{let Y=!1,V=setTimeout(()=>{if(Y)return;Y=!0,J=!0,this.lastCloseError=new b0("hub_connect_timeout",`Timed out connecting to hub after ${OA}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Q.close()}catch{}X(this.lastCloseError)},OA);Q.addEventListener("open",()=>{if(Y)return;Y=!0,clearTimeout(V),j()}),Q.addEventListener("error",(B)=>{if(Y)return;Y=!0,clearTimeout(V),this.lastCloseError=uP(B,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,X(this.lastCloseError)}),Q.addEventListener("close",(B)=>{if(Y)return;if(Y=!0,clearTimeout(V),!J)this.lastCloseError=_A(B),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,X(this.lastCloseError)})}),Q.addEventListener("message",(j)=>{this.handleFrame(JSON.parse(zA(j)))}),Q.addEventListener("close",(j)=>{if(this.socket!==Q)return;if(!J)this.lastCloseError=_A(j),this.sawSocketClose=!0;this.registered=!1;for(let X of this.pendingReplies.values())X.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let j of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(j));this.reconnectAttempt=0}subscribe($,W){let Z=W?.sessionId?.trim()||void 0,Q={listener:$,sessionId:Z};return this.listeners.add(Q),this.adjustSubscriptionCount(Z,1),()=>{if(!this.listeners.delete(Q))return;this.adjustSubscriptionCount(Z,-1)}}async command($,W,Z,Q){let J=0,j=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,W,Z,Q)}catch(X){if(!j||J>=1||!await this.recoverLocalHubTransport(X))throw X;J+=1}}async commandOnce($,W,Z,Q){await this.connect();let J=IP("hubreq_"),j=mP($,Q?.timeoutMs),X=new Promise((V,B)=>{let H=j===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;B(new L6($,"hub_command_timeout",`Hub command ${$} timed out after ${j}ms (hub=${this.currentUrl}, requestId=${J}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},j);this.pendingReplies.set(J,{resolve:(G)=>{if(H)clearTimeout(H);V(G)},reject:(G)=>{if(H)clearTimeout(H);B(G)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:J,clientId:this.clientId,sessionId:Z,timeoutMs:j,payload:W}})}catch(V){throw this.pendingReplies.delete(J),V}let Y=await X;if(!Y.ok){if(Y.error?.code===d2){let V=Z??(typeof W?.sessionId==="string"?W.sessionId:void 0);throw new W$(V,Y.error.message)}throw new L6($,Y.error?.code,Y.error?.message??`Hub command ${$} failed`)}return Y}async recoverLocalHubTransport($){if(!Aj(this.currentUrl)||!fj($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let W=await o2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!W)return!1;return this.currentUrl=W,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(aP*2**this.reconnectAttempt,oP),W=Math.round($*(1-TA)+Math.random()*$*TA);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},W)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!Aj(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await o2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if($){this.currentUrl=$,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let $=this.socket;if(this.closedByClient=!0,this.clearReconnectTimer(),this.registered=!1,!$)return;this.lastCloseError=new b0("hub_connection_closed",Fj),this.sawSocketClose=!1;for(let W of this.pendingReplies.values())W.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new b0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,W){this.sendFrame({kind:$,clientId:this.clientId,...W?{sessionId:W}:{}})}adjustSubscriptionCount($,W){let Z=this.subscriptionKeyForSessionId($),Q=(this.subscriptionCounts.get(Z)??0)+W;if(Q<=0){if(this.subscriptionCounts.delete(Z),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(W<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Z,Q),W>0&&Q===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??LA}subscriptionSessionIdFromKey($){return $===LA?void 0:$}handleFrame($){switch($.kind){case"reply":{let W=$.envelope.requestId;if(!W)return;let Z=this.pendingReplies.get(W);if(!Z)return;this.pendingReplies.delete(W),Z.resolve($.envelope);return}case"event":for(let W of this.listeners){if(W.sessionId&&W.sessionId!==$.envelope.sessionId?.trim())continue;W.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function l$($){let W=new URL($);if(W.protocol==="http:")W.protocol="ws:";else if(W.protocol==="https:")W.protocol="wss:";return W.toString()}async function w1($,W){let Z=new _1({url:$,authToken:W?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:W?.workspaceRoot,cwd:W?.cwd});try{return await Z.connect(),!0}catch{return!1}finally{Z.close()}}async function Uj($,W){let Z=l$($),Q=await J$(Z,{authToken:W?.authToken});if(!Q)return{status:"unreachable",url:Z};if(!xP(Q).compatible)return{status:"protocol_mismatch",url:Z};if(W?.verifyConnection===!0&&!await w1(Z,{workspaceRoot:W.workspaceRoot,cwd:W.cwd,authToken:W.authToken}))return{status:"unreachable",url:Z};return{status:"compatible",url:Z}}async function tP($){let W=Date.now()+dP;while(Date.now()<W){let Z=await _0($.discoveryPath);if(Z?.url){let Q=await Uj(Z.url,{verifyConnection:!0,authToken:Z.authToken});if(Q.status==="compatible")return d$(Q.url,Z.authToken)}await new Promise((Q)=>setTimeout(Q,lP))}return}async function eP($){let W=Date.now()+iP;while(Date.now()<W){if(!(await J$($).catch(()=>{return}))?.url)return!0;await new Promise((Q)=>setTimeout(Q,nP))}return!1}function $S($,W){try{return l$($)===l$(W)}catch{return!1}}function WS($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Z)=>{if(!Z||typeof Z!=="object")return!1;let Q=Z;if(Q.status==="running"||Q.status==="idle"||Q.status==="pending")return!0;return Array.isArray(Q.participants)&&Q.participants.length>0})}async function ZS($,W,Z){let Q=new _1({url:$,authToken:W,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{let J=await Q.command("session.list",{limit:500},void 0,{timeoutMs:rP});return!WS(J.payload)}catch{return!1}finally{await Q.dispose().catch(()=>{return})}}async function e5($={}){if($.endpoint?.trim()){let J=await Uj($.endpoint);return J.status==="compatible"?J.url:void 0}let W=XQ(),Z=await _0(W.discoveryPath);if(!Z?.url)return;let Q=await Uj(Z.url,{authToken:Z.authToken});if(Q.status==="compatible")return d$(Q.url,Z.authToken);if(Q.status==="protocol_mismatch")await g0(W.discoveryPath).catch(()=>{return});return}async function o2($={}){let W=await e5($);if(W&&await w1(W,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return W;if($.endpoint?.trim())return;let Z=XQ();return await _6($.workspaceRoot??process.cwd()),await tP(Z)}async function t5($,W){let Z=new URL($),Q=W?.trim()||NA(Z);if(Z.protocol==="ws:")Z.protocol="http:";else if(Z.protocol==="wss:")Z.protocol="https:";return Z.pathname="/shutdown",Z.hash="",(await fetch(Z,{method:"POST",headers:Q?{authorization:`Bearer ${Q}`}:void 0})).ok}async function _j($=XQ()){let W=await _0($.discoveryPath);if(!W?.url)return!1;try{if(await t5(W.url,W.authToken))return!0}catch{}return!1}async function VQ($){if(!Aj($.url))return;let W=XQ(),Z=await _0(W.discoveryPath);if(!Z?.url||!$S(Z.url,$.url))return;if(!await ZS(Z.url,Z.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await _j())return;if(!await eP(Z.url))return;return await g0(W.discoveryPath).catch(()=>{return}),await o2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var gA={};w(gA,{HubRuntimeHost:()=>j$});import{resolveProviderRequestHeaders as XS}from"@cline/llms";import{captureSdkError as Lj,createSessionId as EA,HUB_CHECKPOINT_CAPABILITY as YS,HUB_COMPACTION_CAPABILITY as VS,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as BS,HUB_HOOK_CAPABILITY_PREFIX as HS,HUB_MISTAKE_LIMIT_CAPABILITY as GS,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as KS,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as FS,isHubToolExecutorName as AS}from"@cline/shared";var RA={};w(RA,{createCoreSessionSnapshot:()=>C1,coreSessionSnapshotToRecord:()=>BQ});function QS($){return $?JSON.parse(JSON.stringify($)):void 0}function JS($){return $?JSON.parse(JSON.stringify($)):void 0}function jS($){let W=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,Q=(Array.isArray(W?.history)?W.history:[]).filter((X)=>!!X&&typeof X==="object"&&!Array.isArray(X)).flatMap((X)=>{let Y=typeof X.ref==="string"?X.ref.trim():"",V=Number(X.createdAt),B=Number(X.runCount);if(!Y||!Number.isFinite(V)||!Number.isInteger(B))return[];return[{ref:Y,createdAt:V,runCount:B,...X.kind==="stash"||X.kind==="commit"?{kind:X.kind}:{}}]}),J=Q.at(-1),j=$?.checkpointEnabled===!0?!0:void 0;if(!j&&Q.length===0)return;return{...j?{enabled:j}:{},...J?{latest:J}:{},history:Q}}function C1($){let{session:W}=$,Z=QS(W.metadata);return{version:1,sessionId:W.sessionId,source:W.source,status:W.status,createdAt:W.startedAt,updatedAt:W.updatedAt,endedAt:W.endedAt??null,exitCode:W.exitCode??null,interactive:W.interactive,workspace:{cwd:W.cwd,root:W.workspaceRoot},model:{providerId:W.provider,modelId:W.model},capabilities:{enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams},lineage:{...W.parentSessionId?{parentSessionId:W.parentSessionId}:{},...W.parentAgentId?{parentAgentId:W.parentAgentId}:{},...W.agentId?{agentId:W.agentId}:{},...W.conversationId?{conversationId:W.conversationId}:{},isSubagent:W.isSubagent},...W.teamName?{team:{name:W.teamName}}:{},...W.prompt?{prompt:W.prompt}:{},...Z?{metadata:Z}:{},...W.messagesPath?{artifacts:{messagesPath:W.messagesPath}}:{},...$.messages?{messages:JS($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Q=jS(Z);return Q?{checkpoint:Q}:{}})()}}function BQ($){return{sessionId:$.sessionId,parentSessionId:$.lineage.parentSessionId,agentId:$.lineage.agentId,parentAgentId:$.lineage.parentAgentId,conversationId:$.lineage.conversationId,isSubagent:$.lineage.isSubagent,source:$.source,startedAt:$.createdAt,endedAt:$.endedAt??void 0,exitCode:$.exitCode??void 0,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspaceRoot:$.workspace.root,teamName:$.team?.name,enableTools:$.capabilities.enableTools,enableSpawn:$.capabilities.enableSpawn,enableTeams:$.capabilities.enableTeams,prompt:$.prompt,metadata:$.metadata,updatedAt:$.updatedAt,messagesPath:$.artifacts?.messagesPath}}function O6($){if(!$)return;return JSON.parse(JSON.stringify($))}var US=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function wA($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function CA($){if(!$)return;let{userInstructionService:W,...Z}=$;return JSON.parse(JSON.stringify(Z))}function PA($,W){let Z={...$.config,sessionId:W},Q=XS({providerId:$.config.providerId,sessionId:W,source:$.source,defaultSource:F0.CORE,client:{name:$.localRuntime?.extensionContext?.client?.name,version:$.localRuntime?.extensionContext?.client?.version,versionHeaderFallback:$.config.headers?.["X-CLIENT-VERSION"],platform:$.localRuntime?.extensionContext?.client?.platform,platformVersion:$.localRuntime?.extensionContext?.client?.platformVersion,isMultiRoot:$.localRuntime?.extensionContext?.client?.isMultiRoot},coreVersion:u8,openAiCodex:{accessToken:$.config.apiKey,userAgentVersion:process.env.npm_package_version},headers:{config:$.config.headers}});if(Q)Z.headers=Q;return Z}function SA($){let W=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof W.agentId==="string"?W.agentId:"",conversationId:typeof W.conversationId==="string"?W.conversationId:"",iteration:typeof W.iteration==="number"?W.iteration:0,metadata:W.metadata&&typeof W.metadata==="object"&&!Array.isArray(W.metadata)?W.metadata:void 0}}function s2($,W,Z){$.manifest.push(W),$.handlers.set(W.capabilityName,Z)}function bA($,W){let Z={manifest:[],handlers:new Map};for(let J of Object.keys(W.toolExecutors??{}).filter(AS)){let j=W.toolExecutors?.[J];if(typeof j!=="function")continue;s2(Z,{kind:"toolExecutor",executor:J,capabilityName:`${KS}${J}`},async({payload:X,abortSignal:Y})=>{let V=Array.isArray(X.args)?[...X.args]:[],B={...SA(X.context),signal:Y};return{result:await j(...V,B)}})}for(let J of $?.extraTools??[])s2(Z,{kind:"tool",name:J.name,description:J.description,inputSchema:O6(J.inputSchema)??{},...J.lifecycle?{lifecycle:O6(J.lifecycle)}:{},capabilityName:`${BS}${J.name}`},async({payload:j,abortSignal:X,progress:Y})=>{let V={...SA(j.context),signal:X};return{result:await J.execute(j.input,{...V,emitUpdate:(H)=>{Y({update:H})}})}});let Q=$?.hooks;if(Q)for(let J of US){let j=Q[J];if(typeof j!=="function")continue;s2(Z,{kind:"hook",name:J,capabilityName:`${HS}${J}`},async({payload:X})=>({control:await j(X.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;s2(Z,{kind:"compaction",capabilityName:VS,config:wA($.compaction)},async({payload:j})=>({result:await J(j.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;s2(Z,{kind:"checkpoint",capabilityName:YS,config:wA($.checkpoint)},async({payload:j})=>({result:await J(j.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;s2(Z,{kind:"mistakeLimit",capabilityName:GS},async({payload:j})=>({result:await J(j.context)}))}if($?.userInstructionService){let J=$.userInstructionService;s2(Z,{kind:"userInstructionService",capabilityName:FS},async()=>{return await J.start().catch(()=>{}),{snapshot:{records:{skill:J.listRecords("skill"),rule:J.listRecords("rule"),workflow:J.listRecords("workflow")},runtimeCommands:J.listRuntimeCommands()}}})}return Z}function IA($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let W=$.message;if(typeof W==="string"&&W.trim())return W.trim()}return}function fS($){return IA($)??"Capability request was cancelled."}function DS($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function _S($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function LS($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=$,Z=typeof W.inputTokens==="number"?W.inputTokens:void 0,Q=typeof W.outputTokens==="number"?W.outputTokens:void 0;if(Z===void 0||Q===void 0)return;return{inputTokens:Z,outputTokens:Q,cacheReadTokens:typeof W.cacheReadTokens==="number"?W.cacheReadTokens:0,cacheWriteTokens:typeof W.cacheWriteTokens==="number"?W.cacheWriteTokens:0,totalCost:typeof W.totalCost==="number"?W.totalCost:0}}function yA($){if(!$)return;return{inputTokens:typeof $.inputTokens==="number"?$.inputTokens:0,outputTokens:typeof $.outputTokens==="number"?$.outputTokens:0,cacheReadTokens:typeof $.cacheReadTokens==="number"?$.cacheReadTokens:0,cacheWriteTokens:typeof $.cacheWriteTokens==="number"?$.cacheWriteTokens:0,totalCost:typeof $.totalCost==="number"?$.totalCost:0}}function Oj($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function p$($,W){return Oj($?.[W])??0}function OS($){let W=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Z=$?.totals&&typeof $.totals==="object"?$.totals:void 0,Q=$?.agent&&typeof $.agent==="object"?$.agent:void 0,J=Q?.teamRole==="teammate"||Q?.teamRole==="lead"?Q.teamRole:void 0;return{event:{type:"usage",agentId:typeof Q?.agentId==="string"?Q.agentId:void 0,conversationId:typeof Q?.conversationId==="string"?Q.conversationId:void 0,parentAgentId:typeof Q?.parentAgentId==="string"?Q.parentAgentId:void 0,inputTokens:p$(W,"inputTokens"),outputTokens:p$(W,"outputTokens"),cacheReadTokens:p$(W,"cacheReadTokens"),cacheWriteTokens:p$(W,"cacheWriteTokens"),cost:Oj(W?.totalCost),totalInputTokens:p$(Z,"inputTokens"),totalOutputTokens:p$(Z,"outputTokens"),totalCacheReadTokens:p$(Z,"cacheReadTokens"),totalCacheWriteTokens:p$(Z,"cacheWriteTokens"),totalCost:Oj(Z?.totalCost)},teamAgentId:typeof Q?.teamAgentId==="string"?Q.teamAgentId:void 0,teamRole:J}}function TS($){let W=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Z=$?.reason??W?.finishReason,Q=_S(Z)?Z:Z==="failed"?"error":"completed",J=LS($?.usage??W?.usage);return{type:"done",reason:Q,text:typeof $?.text==="string"?$.text:typeof W?.text==="string"?W.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof W?.iterations==="number"?W.iterations:0,usage:J}}function t2($,W){return $.error?.message??`hub command failed: ${W}`}function $W($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function xA($){let W=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof W?.parentSessionId==="string"?W.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof W?.agentId==="string"?W.agentId:void 0),parentAgentId:typeof W?.parentAgentId==="string"?W.parentAgentId:void 0,conversationId:typeof W?.conversationId==="string"?W.conversationId:void 0,isSubagent:typeof W?.isSubagent==="boolean"?W.isSubagent:!1,source:typeof W?.source==="string"?W.source:F0.CORE,pid:typeof W?.pid==="number"?W.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:$W($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:$W($.status)==="completed"?0:$W($.status)==="failed"?1:void 0,status:$W($.status),interactive:W?.interactive===!0,provider:typeof W?.provider==="string"?W.provider:"hub",model:typeof W?.model==="string"?W.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof W?.teamName==="string"?W.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??W?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??W?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??W?.enableTeams===!0,prompt:typeof W?.prompt==="string"?W.prompt:void 0,metadata:W,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof W?.messagesPath==="string"?W.messagesPath:void 0,hookPath:typeof W?.hookPath==="string"?W.hookPath:void 0}}function r$($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=$;return W.version===1&&typeof W.sessionId==="string"?JSON.parse(JSON.stringify(W)):void 0}function zS($){let W=r$($?.snapshot);if(W)return BQ(W);let Z=$?.session;return Z?xA(Z):void 0}function hA($,W,Z){let Q=Z?.workspaceRoot?.trim()||W.config.workspaceRoot||W.config.cwd;return I0.parse({version:1,session_id:$,source:W.source??F0.CORE,pid:process.pid,started_at:new Date(Z?.createdAt??Date.now()).toISOString(),status:$W(Z?.status),interactive:W.interactive===!0,provider:W.config.providerId,model:W.config.modelId,cwd:Z?.cwd?.trim()||W.config.cwd,workspace_root:Q,team_name:W.config.teamName,enable_tools:W.config.enableTools,enable_spawn:W.config.enableSpawnAgent,enable_teams:W.config.enableAgentTeams,prompt:W.prompt?.trim()||void 0,metadata:W.sessionMetadata&&Object.keys(W.sessionMetadata).length>0?W.sessionMetadata:void 0})}function kA($,W){return I0.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??W.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class j${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new a5;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,W){this.clientContext=W,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:W?.workspaceRoot,cwd:W?.cwd},this.defaultCapabilities=w0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Z)=>this.requestPendingPromptsList(Z),update:(Z)=>this.requestPendingPromptUpdate(Z),delete:(Z)=>this.requestPendingPromptDelete(Z)},this.client=this.createClient($.url)}createClient($){return new _1({...this.clientOptions,url:$})}async replaceClient($){let W=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(W.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!YQ($,"session.create"))return!1;let W=await VQ({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!W)return!1;return await this.replaceClient(W),!0}registerPlannedSession($,W,Z){if(this.sessionCapabilities.set($,W),Z.size>0)this.sessionClientContributionHandlers.set($,Z);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let W=this.resolveCapabilities($),Z=bA($.localRuntime,W),Q=$.config.sessionId?.trim()||EA(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:O6(PA($,Q)),metadata:{...$.sessionMetadata??{},source:$.source??F0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Z.manifest.length>0?{clientContributions:Z.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:O6($.toolPolicies),initialMessages:$.initialMessages,...$.initialCompactionState?{initialCompactionState:$.initialCompactionState}:{}});this.registerPlannedSession(Q,W,Z.handlers);let j;try{j=await J()}catch(B){if(this.cleanupPlannedSession(Q),await this.recoverLocalHubStartupDeadlock(B)){this.registerPlannedSession(Q,W,Z.handlers);try{j=await J()}catch(H){throw this.cleanupPlannedSession(Q),H}}else throw B}let X=r$(j.payload?.snapshot),Y=j.payload?.session,V=(X?.sessionId??Y?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(Q),Error("Hub runtime did not return a session id.");if(V!==Q)this.cleanupPlannedSession(Q),this.registerPlannedSession(V,W,Z.handlers);return{sessionId:V,manifest:X?kA(X,$):hA(V,$,Y),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let W=$.sessionId.trim();if(!W)throw Error("sessionId is required");let Z=$.restore?.messages!==!1;if(Z&&!$.start)throw Error("start is required when restore.messages is true");let Q=$.start,J=Q?this.resolveCapabilities(Q):void 0,j=Q?bA(Q.localRuntime,J??{}):{manifest:[],handlers:new Map},X,Y;if(Q)X=Q.config.sessionId?.trim()||EA(),Y=PA(Q,X);if(X&&J)this.sessionCapabilities.set(X,J);if(X&&j.handlers.size>0)this.sessionClientContributionHandlers.set(X,j.handlers),this.ensureSessionSubscription(X);let V;try{V=await this.client.command("session.restore",{sessionId:W,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Q?{workspaceRoot:Q.config.workspaceRoot?.trim()||Q.config.cwd,cwd:Q.config.cwd??$.cwd,sessionConfig:O6(Y),metadata:{...Q.sessionMetadata??{},source:Q.source??F0.CORE,provider:Q.config.providerId,model:Q.config.modelId,enableTools:Q.config.enableTools,enableSpawn:Q.config.enableSpawnAgent,enableTeams:Q.config.enableAgentTeams,teamName:Q.config.teamName,prompt:Q.prompt,interactive:Q.interactive===!0},runtimeOptions:{...j.manifest.length>0?{clientContributions:j.manifest}:{},...Q.localRuntime?.configExtensions?{configExtensions:Q.localRuntime.configExtensions}:{}},toolPolicies:O6(Q.toolPolicies),...Q.initialCompactionState?{initialCompactionState:Q.initialCompactionState}:{}}:{}},W)}catch(A){if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw A}if(!V.ok){let A=typeof V.payload?.error==="string"?V.payload.error:"session.restore failed";if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw Error(A)}let B=r$(V.payload?.snapshot),H=V.payload?.session,G=(B?.sessionId??H?.sessionId)?.trim();if(Z&&!G){if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw Error("Hub checkpoint restore returned no session id")}if(G&&X&&G!==X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);if(G&&J)this.sessionCapabilities.set(G,J);if(G&&j.handlers.size>0)this.sessionClientContributionHandlers.set(G,j.handlers);if(G)this.ensureSessionSubscription(G);let K=Array.isArray(V.payload?.messages)?V.payload.messages:void 0,F=V.payload?.checkpoint;if(!F)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:G,startResult:G?{sessionId:G,manifest:B?kA(B,Q??{}):hA(G,Q??{},H),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:K,checkpoint:F}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let W=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(W.payload?.prompts)?W.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let W=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(W.payload?.prompts)?W.payload.prompts:[],prompt:W.payload?.prompt,updated:W.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let W=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(W.payload?.prompts)?W.payload.prompts:[],prompt:W.payload?.prompt,removed:W.payload?.removed===!0}}async getAccumulatedUsage($){let W=await this.client.command("session.get",{includeSnapshot:!0},$),Z=r$(W.payload?.snapshot);if(Z){let X=Z.usage?{...Z.usage}:void 0,Y=Z.aggregateUsage?{...Z.aggregateUsage}:void 0;return X||Y?{usage:X,aggregateUsage:Y}:void 0}let Q=W.payload?.session,J=yA(Q?.usage),j=yA(Q?.aggregateUsage);return J||j?{usage:J,aggregateUsage:j}:void 0}async abort($,W){await this.client.command("run.abort",{sessionId:$,reason:IA(W)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,W]of this.sessionSubscriptions){W();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let W;try{W=await this.client.command("session.get",void 0,$)}catch(Z){if(Z$(Z))return;throw Z}return zS(W.payload)}async listSessions($=100){let W=await this.client.command("session.list",{limit:$}),Z=Array.isArray(W.payload?.snapshots)?W.payload.snapshots.flatMap((J)=>{let j=r$(J);return j?[BQ(j)]:[]}):[];if(Z.length>0)return Z;return(W.payload?.sessions??[]).map(xA)}async listSettings($){let W=await this.client.command("settings.list",CA($));if(!W.ok)throw Error(t2(W,"settings.list"));return W.payload?.snapshot}async toggleSetting($){let W=await this.client.command("settings.toggle",CA($));if(!W.ok)throw Error(t2(W,"settings.toggle"));return{snapshot:W.payload?.snapshot,changedTypes:Array.isArray(W.payload?.changedTypes)?W.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,W){let Z={...W.metadata??{}};if(typeof W.prompt==="string")Z.prompt=W.prompt;if(typeof W.title==="string")Z.title=W.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Z})).ok}}async updateSessionConnection($,W){let Z=$.trim();if(!Z)return;let Q=await this.client.command("session.update_connection",{sessionId:Z,updates:W},Z);if(!Q.ok)throw Error(t2(Q,"session.update_connection"))}async updateSessionCompactionState($,W){let Z=$.trim();if(!Z)return{updated:!1};let Q=await this.client.command("session.compaction.update",{sessionId:Z,state:W},Z);if(!Q.ok)Lj(this.telemetry,{component:"core",operation:"hub.runtime_host.update_session_compaction_state",error:Error(t2(Q,"session.compaction.update")),severity:"warn",handled:!0,context:{command:"session.compaction.update",sessionId:Z,errorCode:Q.error?.code}});return{updated:Q.ok&&Q.payload?.updated===!0}}async readSessionCompactionState($){let W=$.trim();if(!W)return;let Z=await this.client.command("session.compaction.get",{sessionId:W},W);if(!Z.ok)throw Error(t2(Z,"session.compaction.get"));return K1(Z.payload?.state)}async readSessionMessages($){let W=$.trim();if(!W)return[];let Z=await this.client.command("session.messages",{sessionId:W},W);if(!Z.ok)throw Lj(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(t2(Z,"session.messages")),severity:Z.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:W,errorCode:Z.error?.code,runtimeAddress:this.runtimeAddress}}),Error(t2(Z,"session.messages"));let Q=Z.payload?.messages;return Array.isArray(Q)?Q:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,W){return this.events.subscribe($,W)}ensureSessionSubscription($){let W=$.trim();if(!W||this.sessionSubscriptions.has(W))return;let Z=this.client.subscribe((Q)=>{this.handleHubEvent(Q)},{sessionId:W});this.sessionSubscriptions.set(W,typeof Z==="function"?Z:()=>{})}disposeSessionSubscription($){let W=$.trim();if(!W)return;this.sessionSubscriptions.get(W)?.(),this.sessionSubscriptions.delete(W),this.agentDoneEmittedForCurrentRunBySession.delete(W)}resolveCapabilities($){return w0(this.defaultCapabilities,$.capabilities)??{}}emitToolCallContentStart($){this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:{type:"content_start",contentType:"tool",toolCallId:$.toolCallId,toolName:$.toolName,input:$.toolInput}}})}emitAgentDoneIfNeeded($){if(this.agentDoneEmittedForCurrentRunBySession.has($.sessionId))return;this.agentDoneEmittedForCurrentRunBySession.add($.sessionId),this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:TS($.payload)}})}handleHubEvent($){let W=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Z)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Z,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Z)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Z,$)});return}if(!W)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(W);let Z=r$($.payload?.snapshot),Q=$.payload?.session;if(Z)this.events.emit({type:"session_snapshot",payload:{sessionId:W,snapshot:Z}});this.events.emit({type:"status",payload:{sessionId:W,status:Q?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"session.notice":{let Z=$.payload?.noticeType,Q=$.payload?.displayRole,J=$.payload?.reason,j=$.payload?.agent&&typeof $.payload.agent==="object"?$.payload.agent:void 0,X=j?.teamRole==="lead"||j?.teamRole==="teammate"?j.teamRole:void 0;this.events.emit({type:"agent_event",payload:{sessionId:W,...X?{teamRole:X}:{},...typeof j?.teamAgentId==="string"?{teamAgentId:j.teamAgentId}:{},event:{type:"notice",...typeof j?.agentId==="string"?{agentId:j.agentId}:{},...typeof j?.conversationId==="string"?{conversationId:j.conversationId}:{},...typeof j?.parentAgentId==="string"?{parentAgentId:j.parentAgentId}:{},noticeType:Z==="recovery"||Z==="stop"?Z:"status",message:typeof $.payload?.message==="string"?$.payload.message:"",...Q==="system"||Q==="status"?{displayRole:Q}:{},...typeof J==="string"?{reason:J}:{},...$.payload?.metadata&&typeof $.payload.metadata==="object"?{metadata:$.payload.metadata}:{}}}});return}case"assistant.delta":{let Z=typeof $.payload?.text==="string"?$.payload.text:"";if(!Z)return;this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"content_start",contentType:"text",text:Z}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Z=typeof $.payload?.text==="string"?$.payload.text:"",Q=$.payload?.redacted===!0;if(!Z&&!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"content_start",contentType:"reasoning",reasoning:Z,redacted:Q}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:W,payload:$.payload});return}case"usage.updated":{let Z=OS($.payload);this.events.emit({type:"agent_event",payload:{sessionId:W,event:Z.event,teamAgentId:Z.teamAgentId,teamRole:Z.teamRole}});return}case"tool.started":{let Z=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Z&&this.pendingApprovalToolCallIds.delete(Z))return;this.emitToolCallContentStart({sessionId:W,toolCallId:Z,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Z=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Z)this.pendingApprovalToolCallIds.delete(Z);this.events.emit({type:"agent_event",payload:{sessionId:W,event:{type:"content_end",contentType:"tool",toolCallId:Z,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Z=r$($.payload?.snapshot),Q=$.payload?.session;if(Z)this.events.emit({type:"session_snapshot",payload:{sessionId:W,snapshot:Z}});this.events.emit({type:"status",payload:{sessionId:W,status:Q?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:W,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Z=$.payload?.prompt;if(!Z)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:W,id:Z.id,prompt:Z.prompt,delivery:Z.delivery,attachmentCount:Z.attachmentCount,userImages:Z.userImages,userFiles:Z.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Z=r$($.payload?.snapshot),Q=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:W,payload:{...$.payload,reason:Q}}),Z?.interactive===!0&&K0(Z.status))return;this.events.emit({type:"ended",payload:{sessionId:W,reason:Q,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,W,Z){try{Lj(this.telemetry,{component:"core",operation:$,error:W,severity:"warn",handled:!0,context:{event:Z.event,sessionId:Z.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let W=$.sessionId?.trim();if(!W)return;let Z=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Z&&Z!==this.client.getClientId())return;let Q=typeof $.payload?.requestId==="string"?$.payload.requestId:"",J=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!Q)return;let j=this.sessionClientContributionHandlers.get(W)?.get(J);if(!j){await this.client.command("capability.respond",{requestId:Q,ok:!1,error:`No client contribution handler registered for capability ${J} in session ${W}.`},W).catch(()=>{});return}let X=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},Y=new AbortController;this.activeCapabilityAbortControllers.set(Q,Y);let V=(B)=>{this.client.command("capability.progress",{requestId:Q,payload:B},W).catch((H)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",H,$)})};try{let B=await j({payload:X,abortSignal:Y.signal,progress:V});if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:Q,ok:!0,payload:B},W)}catch(B){if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:Q,ok:!1,error:B instanceof Error?B.message:String(B)},W)}finally{this.activeCapabilityAbortControllers.delete(Q)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let W=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!W)return;let Z=this.activeCapabilityAbortControllers.get(W);if(!Z)return;Z.abort(fS($.payload.error))}async handleApprovalRequested($){let W=$.sessionId?.trim();if(!W)return;let Z=this.sessionCapabilities.get(W)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Z)return;let Q=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",j=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!Q||!J||!j)return;let X=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},Y=DS($.payload?.inputJson);this.pendingApprovalToolCallIds.add(J),this.emitToolCallContentStart({sessionId:W,toolCallId:J,toolName:j,toolInput:Y});let V=await Promise.resolve(Z({sessionId:W,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:W,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:J,toolName:j,input:Y,policy:X})).catch((B)=>({approved:!1,reason:B instanceof Error?B.message:`Tool approval request failed: ${String(B)}`}));await this.client.command("approval.respond",{approvalId:Q,approved:V.approved,reason:V.reason},W).catch(()=>{})}}var mA={};w(mA,{RemoteRuntimeHost:()=>T6});class T6 extends j${constructor($){super({url:l$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var vA={};w(vA,{SqliteSessionStore:()=>S1});import{existsSync as qS,mkdirSync as MS}from"node:fs";import{join as NS}from"node:path";import{asBool as WW,asOptionalString as P1,asString as X$,ensureSessionSchema as RS,loadSqliteDb as ES,nowIso as HQ,toBoolInt as ZW}from"@cline/shared/db";import{resolveDbDataDir as wS}from"@cline/shared/storage";class S1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??wS()}init(){this.getRawDb()}ensureSessionsDir(){if(!qS(this.sessionsDirPath))MS(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return NS(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=ES(this.sessionDbPath());return RS($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,W=[]){return this.getRawDb().prepare($).run(...W)}queryOne($,W=[]){return this.getRawDb().prepare($).get(...W)??void 0}queryAll($,W=[]){return this.getRawDb().prepare($).all(...W)}create($){let W=HQ();this.run(`INSERT OR REPLACE INTO sessions (
508
508
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
509
509
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
510
510
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
511
511
  metadata_json, transcript_path, hook_path, messages_path, updated_at
512
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,$W($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$W($.enableTools),$W($.enableSpawn),$W($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$W($.isSubagent),$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"",$.hookPath??"",$.messagesPath??null,W])}update($){let W=[],Z=[];if($.endedAt!==void 0)W.push("ended_at = ?"),Z.push($.endedAt);if($.exitCode!==void 0)W.push("exit_code = ?"),Z.push($.exitCode);if($.status!==void 0)W.push("status = ?"),Z.push($.status);if($.prompt!==void 0)W.push("prompt = ?"),Z.push($.prompt);if($.metadata!==void 0)W.push("metadata_json = ?"),Z.push($.metadata?JSON.stringify($.metadata):null);if($.parentSessionId!==void 0)W.push("parent_session_id = ?"),Z.push($.parentSessionId);if($.parentAgentId!==void 0)W.push("parent_agent_id = ?"),Z.push($.parentAgentId);if($.agentId!==void 0)W.push("agent_id = ?"),Z.push($.agentId);if($.conversationId!==void 0)W.push("conversation_id = ?"),Z.push($.conversationId);if(W.length===0)return;W.push("updated_at = ?"),Z.push(VQ()),Z.push($.sessionId),this.run(`UPDATE sessions SET ${W.join(", ")} WHERE session_id = ?`,Z)}updateStatus($,W,Z){this.update({sessionId:$,status:W,endedAt:F0(W)?null:VQ(),exitCode:F0(W)?null:Z??(W==="failed"?1:0)})}get($){let W=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
512
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,ZW($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,ZW($.enableTools),ZW($.enableSpawn),ZW($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,ZW($.isSubagent),$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"",$.hookPath??"",$.messagesPath??null,W])}update($){let W=[],Z=[];if($.endedAt!==void 0)W.push("ended_at = ?"),Z.push($.endedAt);if($.exitCode!==void 0)W.push("exit_code = ?"),Z.push($.exitCode);if($.status!==void 0)W.push("status = ?"),Z.push($.status);if($.prompt!==void 0)W.push("prompt = ?"),Z.push($.prompt);if($.metadata!==void 0)W.push("metadata_json = ?"),Z.push($.metadata?JSON.stringify($.metadata):null);if($.parentSessionId!==void 0)W.push("parent_session_id = ?"),Z.push($.parentSessionId);if($.parentAgentId!==void 0)W.push("parent_agent_id = ?"),Z.push($.parentAgentId);if($.agentId!==void 0)W.push("agent_id = ?"),Z.push($.agentId);if($.conversationId!==void 0)W.push("conversation_id = ?"),Z.push($.conversationId);if(W.length===0)return;W.push("updated_at = ?"),Z.push(HQ()),Z.push($.sessionId),this.run(`UPDATE sessions SET ${W.join(", ")} WHERE session_id = ?`,Z)}updateStatus($,W,Z){this.update({sessionId:$,status:W,endedAt:K0(W)?null:HQ(),exitCode:K0(W)?null:Z??(W==="failed"?1:0)})}get($){let W=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
513
513
  provider, model, cwd, workspace_root, team_name,
514
514
  enable_tools, enable_spawn, enable_teams,
515
515
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
516
516
  prompt, metadata_json, hook_path, messages_path, updated_at
517
- FROM sessions WHERE session_id = ?`,[$]);if(!W)return;return{sessionId:J$(W.session_id),source:J$(W.source),pid:Number(W.pid??0),startedAt:J$(W.started_at),endedAt:W.ended_at??null,exitCode:W.exit_code??null,status:J$(W.status),interactive:e5(W.interactive),provider:J$(W.provider),model:J$(W.model),cwd:J$(W.cwd),workspaceRoot:J$(W.workspace_root),teamName:w1(W.team_name),enableTools:e5(W.enable_tools),enableSpawn:e5(W.enable_spawn),enableTeams:e5(W.enable_teams),parentSessionId:w1(W.parent_session_id),parentAgentId:w1(W.parent_agent_id),agentId:w1(W.agent_id),conversationId:w1(W.conversation_id),isSubagent:e5(W.is_subagent),prompt:w1(W.prompt),metadata:(()=>{let Z=w1(W.metadata_json);if(!Z)return;try{let Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return})(),hookPath:w1(W.hook_path),messagesPath:w1(W.messages_path),updatedAt:w1(W.updated_at)??VQ()}}list($=200){let W=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Z=[];for(let Q of W){let J=this.get(J$(Q.session_id));if(J)Z.push(J)}return Z}delete($,W=!1){let Z=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(W)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Z>0}}T6();import{existsSync as Pj,mkdirSync as zb,readFileSync as $U,renameSync as qb,writeFileSync as Mb}from"node:fs";import{join as WU}from"node:path";import{resolveSessionDataDir as Rb}from"@cline/shared/storage";import{dirname as Ob}from"node:path";import{nanoid as Tb}from"nanoid";import{appendFileSync as cS,existsSync as uS,mkdirSync as gA,readFileSync as dS,writeFileSync as mA}from"node:fs";import{readFile as vA,rm as lS}from"node:fs/promises";import{dirname as cA,join as pS}from"node:path";import{ensureHookLogDir as rS}from"@cline/shared/storage";import{randomUUID as IS}from"node:crypto";import{mkdir as xS,open as IA,rename as gS,rm as mS}from"node:fs/promises";import{dirname as kA}from"node:path";async function vS($){let W;try{W=await IA($,"r"),await W.sync()}catch{}finally{if(W!==void 0)try{await W.close()}catch{}}}async function xA($,W){await xS(kA($),{recursive:!0});let Z=`${$}.${process.pid}.${IS()}.tmp`,Q;try{Q=await IA(Z,"wx"),await Q.writeFile(W,"utf8"),await Q.sync(),await Q.close(),Q=void 0,await gS(Z,$),await vS(kA($))}catch(J){if(Q!==void 0)try{await Q.close()}catch{}try{await mS(Z,{force:!0})}catch{}throw J}}function iS($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="ENOENT"}class _j{adapter;messagesArtifactUploader;logger;artifacts;constructor($,W,Z){this.adapter=$;this.messagesArtifactUploader=W;this.logger=Z;this.artifacts=new KJ(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,W,Z){WG(W,Z,P3($))}writeSessionManifest($,W){gA(cA($),{recursive:!0}),mA($,`${JSON.stringify(g0.parse(W),null,2)}
518
- `,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}async readSessionManifestTitle($){let W=this.artifacts.sessionManifestPath($,!1),Z;try{Z=await vA(W,"utf8")}catch{return}try{let Q=JSON.parse(Z);if(!Q||typeof Q!=="object"||Array.isArray(Q))return;let J=Q.metadata;if(!J||typeof J!=="object"||Array.isArray(J))return;let j=J.title;return typeof j==="string"?j:void 0}catch{return}}readManifestFile($){let W=this.artifacts.sessionManifestPath($,!1);if(!uS(W))return{path:W};try{return{path:W,manifest:g0.parse(JSON.parse(dS(W,"utf8")))}}catch{return{path:W}}}async resolveArtifactPath($,W,Z){let J=(await this.adapter.getSession($))?.[W];return typeof J==="string"&&J.trim().length>0?J:Z($)}async persistSessionMessages($,W,Z){let Q=await this.resolveArtifactPath($,"messagesPath",(X)=>this.artifacts.sessionMessagesPath(X)),J=S3({updatedAt:X0(),context:P3($),messages:W,systemPrompt:Z}),j=`${JSON.stringify(J,null,2)}
519
- `;if(gA(cA(Q),{recursive:!0}),mA(Q,j,"utf8"),!this.messagesArtifactUploader)return;try{let X=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:Q,contents:j,row:X})}catch(X){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:X})}}resolveCompactionPath($){let{manifest:W}=this.readManifestFile($);return W?.compaction_path?.trim()||this.artifacts.sessionCompactionPath($)}updateCompactionPath($,W){let Z=this.readManifestFile($);if(!Z.manifest)return;if(Z.manifest.compaction_path===W)return;this.writeSessionManifest(Z.path,{...Z.manifest,compaction_path:W})}async readSessionCompactionState($){let W=this.resolveCompactionPath($);try{return G1(JSON.parse(await vA(W,"utf8")))}catch(Z){if(iS(Z))return;this.logger?.debug("Ignoring invalid session compaction state",{sessionId:$,path:W,error:Z,recovery:"Canonical history is unchanged; deleting the sidecar is safe."});return}}async persistSessionCompactionState($,W){let Z=this.resolveCompactionPath($),Q=B4.parse(W);await xA(Z,`${JSON.stringify(Q,null,2)}
520
- `),this.updateCompactionPath($,Z)}async deleteSessionCompactionState($){await lS(this.resolveCompactionPath($),{force:!0}),this.updateCompactionPath($,void 0)}appendStaleSessionHookLog($,W,Z,Q,J){let X=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??pS(rS(),"hooks.jsonl");cS(X,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:Q,sessionId:W,pid:Z,source:J})}
521
- `,"utf8")}}import{appendFileSync as nS}from"node:fs";import{join as aS}from"node:path";import{resolveRootSessionId as uA}from"@cline/shared";import{ensureHookLogDir as oS}from"@cline/shared/storage";import{z as Lj}from"zod";var sS="subagent",tS=Lj.looseObject({task:Lj.string().optional(),systemPrompt:Lj.string().optional()});class BQ{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,W,Z,Q){this.adapter=$;this.manifestStore=W;this.toPersistedMessages=Z;this.heartbeatLogIntervalMs=Q}teamTaskQueueKey($,W){return`${$}::${W}`}activeTeamTaskSessionId($,W){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,W))?.at(-1)}buildSubsessionRow($,W){return{sessionId:W.sessionId,source:sS,pid:process.ppid,startedAt:W.startedAt,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:!1,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:W.parentSessionId,parentAgentId:W.parentAgentId,agentId:W.agentId,conversationId:W.conversationId??null,isSubagent:!0,prompt:W.prompt,metadata:r4({prompt:W.prompt}),hookPath:"",messagesPath:W.messagesPath,updatedAt:W.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let W=uA($.sessionContext);if(!W)return;let Z=tS.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:W,parentAgentId:$.agent_id,task:Z.success?Z.data.task:void 0,systemPrompt:Z.success?Z.data.systemPrompt:void 0})}async upsertSubagentSession($){let W=$.rootSessionId;if(!W)return;let Z=await this.adapter.getSession(W);if(!Z)return;let Q=x8(W,$.agentId),J=await this.adapter.getSession(Q),j=X0(),X=this.manifestStore.artifacts.subagentArtifactPaths(Q,$.agentId,this.activeTeamTaskSessionId(W,$.parentAgentId)),Y=$.prompt??J?.prompt??void 0;if(!Y)Y=await this.adapter.claimSpawnRequest(W,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!J)return await this.adapter.upsertSession(this.buildSubsessionRow(Z,{sessionId:Q,parentSessionId:W,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:Y,startedAt:j,...X})),this.manifestStore.initializeMessagesFile(Q,X.messagesPath,j),Q;return await this.adapter.updateSession({sessionId:Q,setRunning:!0,parentSessionId:W,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:J.prompt??Y??null,metadata:r4({metadata:J.metadata??void 0,prompt:J.prompt??Y??null}),expectedStatusLock:J.statusLock}),Q}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let W=uA($.sessionContext);if(!W)return;if($.hookName==="session_shutdown"){let Z=x8(W,$.agent_id);return await this.adapter.getSession(Z)?Z:void 0}return await this.upsertSubagentSession({agentId:$.agent_id,parentAgentId:$.parent_agent_id,conversationId:$.taskId,rootSessionId:W})}async applySubagentStatus($,W){await this.applySubagentStatusBySessionId($,d4(W))}async applySubagentStatusBySessionId($,W){let Z=await this.adapter.getSession($);if(!Z)return;let Q=F0(W)?null:X0(),J=F0(W)?null:W==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:W,endedAt:Q,exitCode:J,expectedStatusLock:Z.statusLock})}async applyStatusToRunningChildSessions($,W){if(!$)return;let Z=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let Q of Z)await this.applySubagentStatusBySessionId(Q.sessionId,W)}async onTeamTaskStart($,W,Z){let Q=await this.adapter.getSession($);if(!Q)return;let J=c4($,W),j=X0(),{messagesPath:X}=this.manifestStore.artifacts.subagentArtifactPaths(J,W);await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:J,parentSessionId:$,parentAgentId:"lead",agentId:W,prompt:Z||`Team task for ${W}`,startedAt:j,messagesPath:X})),this.manifestStore.initializeMessagesFile(J,X,j);let Y=this.teamTaskQueueKey($,W),V=this.teamTaskSessionsByAgent.get(Y)??[];V.push(J),this.teamTaskSessionsByAgent.set(Y,V)}async onTeamTaskEnd($,W,Z,Q,J,j){let X=this.teamTaskQueueKey($,W),Y=this.teamTaskSessionsByAgent.get(X);if(!Y||Y.length===0)return;let V=Y.shift();if(Y.length===0)this.teamTaskSessionsByAgent.delete(X);if(!V)return;let B=J?.messages??j,H=this.toPersistedMessages(B,J,j);if(H)await this.manifestStore.persistSessionMessages(V,H);await this.applySubagentStatusBySessionId(V,Z),this.teamTaskLastHeartbeatBySession.delete(V),this.teamTaskLastProgressLineBySession.delete(V)}async onTeamTaskProgress($,W,Z,Q){let J=this.teamTaskQueueKey($,W),j=this.teamTaskSessionsByAgent.get(J)?.[0];if(!j)return;let X=Z.trim();if(!X)return;let Y=Q?.kind??"progress";if(Y==="heartbeat"){let B=Date.now(),H=this.teamTaskLastHeartbeatBySession.get(j)??0;if(B-H<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(j,B)}let V=Y==="heartbeat"?"[progress] heartbeat":Y==="text"?`[progress] text: ${X}`:`[progress] ${X}`;if(this.teamTaskLastProgressLineBySession.get(j)===V)return;this.teamTaskLastProgressLineBySession.set(j,V)}async handleSubAgentStart($,W){let Z=await this.upsertSubagentSession({agentId:W.subAgentId,parentAgentId:W.parentAgentId,conversationId:W.conversationId,prompt:W.input.task,rootSessionId:$});if(!Z)return;await this.applySubagentStatusBySessionId(Z,"running")}async handleSubAgentEnd($,W){let Z=await this.upsertSubagentSession({agentId:W.subAgentId,parentAgentId:W.parentAgentId,conversationId:W.conversationId,prompt:W.input.task,rootSessionId:$});if(!Z)return;if(W.error){await this.applySubagentStatusBySessionId(Z,"failed");return}let Q=this.toPersistedMessages(W.agentResult?.messages,W.agentResult);if(Q)await this.manifestStore.persistSessionMessages(Z,Q);let J=W.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Z,J==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Z=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??aS(oS(),"hooks.jsonl");nS(Z,`${JSON.stringify({ts:X0(),...$})}
522
- `,"utf8")}}import{formatUserInputBlock as Lb}from"@cline/shared";var eA={};E(eA,{toTeamProgressLifecycleEvent:()=>R6,sanitizeTeamName:()=>pH,reviveTeamStateDates:()=>g9,parseConfiguredAgentConfig:()=>WW,loadConfiguredAgentConfigs:()=>z6,createWorkerReviewerTeam:()=>tA,createSpawnAgentTool:()=>E$,createDelegatedAgentConfigProvider:()=>R$,createDelegatedAgent:()=>N$,createConfiguredAgentTools:()=>q6,createAgentTeamsTools:()=>q2,createAgentTeam:()=>zj,buildTeamProgressSummary:()=>M6,buildDelegatedAgentConfig:()=>T2,buildConfiguredAgentToolName:()=>ZW,buildConfiguredAgentToolDescriptors:()=>QW,bootstrapAgentTeams:()=>I8,AgentTeamsRuntime:()=>e2,AgentTeam:()=>E6});import{existsSync as eS,readdirSync as $b,readFileSync as Wb}from"node:fs";import{basename as dA,extname as Zb,join as Qb}from"node:path";import{resolveAgentConfigSearchPaths as Jb}from"@cline/shared/storage";import pA from"yaml";import{z as k0}from"zod";var rA=k0.object({name:k0.string().trim().min(1),description:k0.string().trim().min(1),tools:k0.union([k0.string(),k0.array(k0.string())]).optional(),skills:k0.union([k0.string(),k0.array(k0.string())]).optional(),providerId:k0.string().trim().min(1).optional(),modelId:k0.string().trim().min(1).optional(),maxIterations:k0.number().int().positive().optional()});function jb($){let W=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!W)throw Error("Missing YAML frontmatter block in agent config file.");let Z=W[0].length,Q=/^---[^\S\r\n]*(?:\r?\n|$)/gm;Q.lastIndex=Z;let J,j=Array.from($.matchAll(Q)).filter((X)=>X.index>=Z);for(let X of j){let Y=X.index,V=$.slice(Z,Y);try{let B=pA.parse(V);if(!B||typeof B!=="object"||Array.isArray(B))continue;rA.parse(B);let H=$.slice(Y+X[0].length);J={frontmatter:V,body:H}}catch{}}if(J)return J;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function lA($){if($===void 0)return;let W=Array.isArray($)?$:$.split(",");return Array.from(new Set(W.map((Z)=>Z.trim()).filter((Z)=>Z.length>0)))}function Xb($){return $.trim().toLowerCase()}function Yb($){let W=Zb($).toLowerCase();return W===".yml"||W===".yaml"}function WW($,W={}){let{frontmatter:Z,body:Q}=jb($),J=pA.parse(Z);if(!J||typeof J!=="object"||Array.isArray(J))throw Error("Agent config frontmatter must be a YAML mapping.");let j=rA.parse(J),X=Q.trim();if(!X)throw Error("Missing system prompt body in agent config file.");return{name:j.name,description:j.description,tools:lA(j.tools),skills:lA(j.skills),providerId:j.providerId,modelId:j.modelId,maxIterations:j.maxIterations,systemPrompt:X,path:W.path}}function z6($){let W=$.searchPaths??Jb($.workspaceRoot),Z=new Map,Q=[];for(let j of W.filter(Boolean)){if(!eS(j))continue;let X;try{X=$b(j,{withFileTypes:!0})}catch(Y){Q.push({path:j,error:Y instanceof Error?Y:Error(String(Y))});continue}for(let Y of X){if(!Y.isFile()||!Yb(Y.name))continue;let V=Qb(j,Y.name);try{let B=Wb(V,"utf8"),H=WW(B,{path:V}),G=Xb(H.name);if(!Z.has(G))Z.set(G,H)}catch(B){Q.push({path:V,error:B instanceof Error?B:Error(String(B))})}}}return{configs:Array.from(Z.values()).sort((j,X)=>(j.path?dA(j.path):j.name).localeCompare(X.path?dA(X.path):X.name)),errors:Q}}import{createTool as Vb,zodToJsonSchema as Bb}from"@cline/shared";import{z as iA}from"zod";var Oj="subagent_",HQ=64,Hb=iA.object({prompt:iA.string().trim().min(1).describe("Task for the subagent to perform")});function Gb($){let W="",Z=!0;for(let Q of $.trim().toLowerCase()){let J=Q.charCodeAt(0);if(!(J>=97&&J<=122||J>=48&&J<=57||Q==="_")||Q==="_"){if(!Z)W+="_",Z=!0;continue}W+=Q,Z=!1}return Z?W.slice(0,-1):W}function Kb($){let W=2166136261;for(let Z=0;Z<$.length;Z++)W^=$.charCodeAt(Z),W=Math.imul(W,16777619);return(W>>>0).toString(36)}function ZW($){let W=Gb($)||"agent",Z=Kb($).slice(0,6),Q=`${Oj}${W}`;if(Q.length<=HQ)return Q;let J=HQ-Oj.length-Z.length-1,j=W.slice(0,Math.max(1,J));return`${Oj}${j}_${Z}`.slice(0,HQ)}function QW($){let W=new Set,Z=[];for(let Q of[...$].sort((J,j)=>J.name.localeCompare(j.name))){let J=ZW(Q.name),j=J,X=2;while(W.has(j)){let Y=`_${X++}`,V=Math.max(1,HQ-Y.length);j=`${J.slice(0,V)}${Y}`}W.add(j),Z.push({toolName:j,config:Q})}return Z}function Fb($,W){return{...$,providerId:W.providerId??$.providerId,modelId:W.modelId??$.modelId,maxIterations:W.maxIterations??$.maxIterations}}function q6($){return QW($.agents).map(({toolName:W,config:Z})=>{return Vb({name:W,description:`Use the "${Z.name}" subagent: ${Z.description}`,inputSchema:Bb(Hb),execute:async(J,j)=>{let X=$.configProvider.getRuntimeConfig(),Y=R$(Fb(X,Z)),V=$.createSubAgentTools?await $.createSubAgentTools(Z,J,j):[],B=N$({kind:"subagent",prompt:Z.systemPrompt,configProvider:Y,tools:V,maxIterations:Z.maxIterations,parentAgentId:j.agentId,abortSignal:j.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),H=B.getAgentId(),G=B.getConversationId(),K=j.agentId,F={systemPrompt:Z.systemPrompt,task:J.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:H,conversationId:G,parentAgentId:K,input:F})}catch{}try{let A=await B.run(J.prompt),f={text:A.text,iterations:A.iterations,finishReason:A.finishReason,usage:{inputTokens:A.usage.inputTokens,outputTokens:A.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:G,parentAgentId:K,input:F,result:f,agentResult:A})}catch{}return f}catch(A){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:G,parentAgentId:K,input:F,error:A instanceof Error?A:Error(String(A))})}catch{}throw A}},timeoutMs:300000,retryable:!1})})}function P1(){return new Date().toISOString()}function nA($,W){if(W<=0)return 0;return Math.round($/W*100)}function Ab($,W){let Z=new Set;for(let J of W)if(J.status==="reviewed")Z.add(`${J.outcomeId}:${J.section}`);let Q=new Set;for(let J of $){if(J.status==="finalized")continue;for(let j of J.requiredSections)if(!Z.has(`${J.id}:${j}`))Q.add(`${J.id}:${j}`)}return[...Q].sort((J,j)=>J.localeCompare(j))}function M6($,W){let Z={idle:0,running:0,stopped:0},Q={pending:0,in_progress:0,blocked:0,completed:0},J={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},j={draft:0,in_review:0,finalized:0},X={draft:0,reviewed:0,rejected:0},Y=0,V=0;for(let U of W.members)if(Z[U.status]+=1,U.role==="lead")Y+=1;else V+=1;let B=[],H=[],G=W.tasks.filter((U)=>U.status==="completed").length,K=new Map(W.tasks.map((U)=>[U.id,U]));for(let U of W.tasks){if(Q[U.status]+=1,U.status==="blocked"){B.push(U.id);continue}if(U.status!=="pending")continue;if(U.dependsOn.every((D)=>{return K.get(D)?.status==="completed"}))H.push(U.id)}let F=[],A,f=0;for(let U of W.runs){if(J[U.status]+=1,U.status==="queued"||U.status==="running")F.push(U.id);let _=U.startedAt.getTime();if(_>=f)f=_,A=U.id}for(let U of W.outcomes)j[U.status]+=1;for(let U of W.outcomeFragments)X[U.status]+=1;return{teamName:$,updatedAt:P1(),members:{total:W.members.length,byStatus:Z,leadCount:Y,teammateCount:V},tasks:{total:W.tasks.length,byStatus:Q,blockedTaskIds:B,readyTaskIds:H,completionPct:nA(G,W.tasks.length)},runs:{total:W.runs.length,byStatus:J,activeRunIds:F,latestRunId:A},outcomes:{total:W.outcomes.length,byStatus:j,finalizedPct:nA(j.finalized,W.outcomes.length),missingRequiredSections:Ab(W.outcomes,W.outcomeFragments)},fragments:{total:W.outcomeFragments.length,byStatus:X}}}function R6($){let{event:W}=$;switch(W.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:P1(),taskId:W.task.id,agentId:W.task.assignee??W.task.createdBy};case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:P1(),runId:W.run.id,taskId:W.run.taskId,agentId:W.run.agentId,message:W.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:P1(),runId:W.run.id,taskId:W.run.taskId,agentId:W.run.agentId,message:W.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:P1(),outcomeId:W.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:P1(),outcomeId:W.fragment.outcomeId,fragmentId:W.fragment.id,agentId:W.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:P1(),taskId:W.message.taskId,agentId:W.message.fromAgentId,message:W.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:P1(),taskId:W.entry.taskId,agentId:W.entry.agentId,message:W.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:P1(),agentId:W.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:P1()}}import{sanitizeFileName as Ub,TeamMessageType as m}from"@cline/shared";import{nanoid as fb}from"nanoid";import{TeamMessageType as Fo}from"@cline/shared";function Tj($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function aA($,W){return $?.status==="stopped"&&Tj(W)}var Db=600000,oA="recovered_queued";function _b($){return`This is an automatic recovery of interrupted team run ${$.id}. The previous process stopped before completion. Continue the task safely, inspect the current workspace state before making changes, and avoid duplicating completed work.
523
-
524
- ${$.message}`}class E6{agents=new Map;configs=new Map;onTeamEvent;constructor($,W){if(this.onTeamEvent=W,$)for(let[Z,Q]of Object.entries($))this.addAgent(Z,Q)}addAgent($,W){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let Z={...W,onEvent:(J)=>{W.onEvent?.(J),this.emitEvent({type:m.AgentEvent,agentId:$,event:J})}},Q=new M$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);this.agents.set($,Q),this.configs.set($,W)}removeAgent($){return this.configs.delete($),this.agents.delete($)}getAgent($){return this.agents.get($)}getAgentIds(){return Array.from(this.agents.keys())}get size(){return this.agents.size}async routeTo($,W){let Z=this.agents.get($);if(!Z)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:m.TaskStart,agentId:$,message:W});try{let Q=await Z.run(W);return this.emitEvent({type:m.TaskEnd,agentId:$,result:Q}),Q}catch(Q){let J=Q instanceof Error?Q:Error(String(Q));throw this.emitEvent({type:m.TaskEnd,agentId:$,error:J,messages:Z.getMessages()}),Q}}async continueTo($,W){let Z=this.agents.get($);if(!Z)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:m.TaskStart,agentId:$,message:W});try{let Q=await Z.continue(W);return this.emitEvent({type:m.TaskEnd,agentId:$,result:Q}),Q}catch(Q){let J=Q instanceof Error?Q:Error(String(Q));throw this.emitEvent({type:m.TaskEnd,agentId:$,error:J,messages:Z.getMessages()}),Q}}async runParallel($){let W=$.map(async(Z)=>{let Q=this.agents.get(Z.agentId);if(!Q)return{agentId:Z.agentId,result:void 0,error:Error(`Agent "${Z.agentId}" not found in team`),metadata:Z.metadata};this.emitEvent({type:m.TaskStart,agentId:Z.agentId,message:Z.message});try{let J=await Q.run(Z.message);return this.emitEvent({type:m.TaskEnd,agentId:Z.agentId,result:J}),{agentId:Z.agentId,result:J,metadata:Z.metadata}}catch(J){let j=J instanceof Error?J:Error(String(J));return this.emitEvent({type:m.TaskEnd,agentId:Z.agentId,error:j,messages:Q.getMessages()}),{agentId:Z.agentId,result:void 0,error:j,metadata:Z.metadata}}});return Promise.all(W)}async runSequential($){let W=[];for(let Z of $){let Q=this.agents.get(Z.agentId);if(!Q){W.push({agentId:Z.agentId,result:void 0,error:Error(`Agent "${Z.agentId}" not found in team`),metadata:Z.metadata});continue}this.emitEvent({type:m.TaskStart,agentId:Z.agentId,message:Z.message});try{let J=await Q.run(Z.message);this.emitEvent({type:m.TaskEnd,agentId:Z.agentId,result:J}),W.push({agentId:Z.agentId,result:J,metadata:Z.metadata})}catch(J){let j=J instanceof Error?J:Error(String(J));this.emitEvent({type:m.TaskEnd,agentId:Z.agentId,error:j,messages:Q.getMessages()}),W.push({agentId:Z.agentId,result:void 0,error:j,metadata:Z.metadata})}}return W}async runPipeline($,W,Z){let Q=[],J=W;for(let j of $){let X=this.agents.get(j);if(!X){Q.push({agentId:j,result:void 0,error:Error(`Agent "${j}" not found in team`)});break}this.emitEvent({type:m.TaskStart,agentId:j,message:J});try{let Y=await X.run(J);this.emitEvent({type:m.TaskEnd,agentId:j,result:Y}),Q.push({agentId:j,result:Y});let V=$.indexOf(j)+1;if(V<$.length){let B=$[V];J=Z?Z(Y,B):`Previous agent output:
517
+ FROM sessions WHERE session_id = ?`,[$]);if(!W)return;return{sessionId:X$(W.session_id),source:X$(W.source),pid:Number(W.pid??0),startedAt:X$(W.started_at),endedAt:W.ended_at??null,exitCode:W.exit_code??null,status:X$(W.status),interactive:WW(W.interactive),provider:X$(W.provider),model:X$(W.model),cwd:X$(W.cwd),workspaceRoot:X$(W.workspace_root),teamName:P1(W.team_name),enableTools:WW(W.enable_tools),enableSpawn:WW(W.enable_spawn),enableTeams:WW(W.enable_teams),parentSessionId:P1(W.parent_session_id),parentAgentId:P1(W.parent_agent_id),agentId:P1(W.agent_id),conversationId:P1(W.conversation_id),isSubagent:WW(W.is_subagent),prompt:P1(W.prompt),metadata:(()=>{let Z=P1(W.metadata_json);if(!Z)return;try{let Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return})(),hookPath:P1(W.hook_path),messagesPath:P1(W.messages_path),updatedAt:P1(W.updated_at)??HQ()}}list($=200){let W=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Z=[];for(let Q of W){let J=this.get(X$(Q.session_id));if(J)Z.push(J)}return Z}delete($,W=!1){let Z=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(W)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Z>0}}z6();import{existsSync as yj,mkdirSync as Eb,readFileSync as XU,renameSync as wb,writeFileSync as Cb}from"node:fs";import{join as YU}from"node:path";import{resolveSessionDataDir as Pb}from"@cline/shared/storage";import{dirname as Nb}from"node:path";import{nanoid as Rb}from"nanoid";import{appendFileSync as rS,existsSync as iS,mkdirSync as lA,readFileSync as nS,writeFileSync as pA}from"node:fs";import{readFile as rA,rm as aS}from"node:fs/promises";import{dirname as iA,join as oS}from"node:path";import{ensureHookLogDir as sS}from"@cline/shared/storage";import{randomUUID as cS}from"node:crypto";import{mkdir as uS,open as uA,rename as dS,rm as lS}from"node:fs/promises";import{dirname as cA}from"node:path";async function pS($){let W;try{W=await uA($,"r"),await W.sync()}catch{}finally{if(W!==void 0)try{await W.close()}catch{}}}async function dA($,W){await uS(cA($),{recursive:!0});let Z=`${$}.${process.pid}.${cS()}.tmp`,Q;try{Q=await uA(Z,"wx"),await Q.writeFile(W,"utf8"),await Q.sync(),await Q.close(),Q=void 0,await dS(Z,$),await pS(cA($))}catch(J){if(Q!==void 0)try{await Q.close()}catch{}try{await lS(Z,{force:!0})}catch{}throw J}}function tS($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="ENOENT"}class Tj{adapter;messagesArtifactUploader;logger;artifacts;constructor($,W,Z){this.adapter=$;this.messagesArtifactUploader=W;this.logger=Z;this.artifacts=new UJ(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,W,Z){JG(W,Z,S3($))}writeSessionManifest($,W){lA(iA($),{recursive:!0}),pA($,`${JSON.stringify(I0.parse(W),null,2)}
518
+ `,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}async readSessionManifestTitle($){let W=this.artifacts.sessionManifestPath($,!1),Z;try{Z=await rA(W,"utf8")}catch{return}try{let Q=JSON.parse(Z);if(!Q||typeof Q!=="object"||Array.isArray(Q))return;let J=Q.metadata;if(!J||typeof J!=="object"||Array.isArray(J))return;let j=J.title;return typeof j==="string"?j:void 0}catch{return}}readManifestFile($){let W=this.artifacts.sessionManifestPath($,!1);if(!iS(W))return{path:W};try{return{path:W,manifest:I0.parse(JSON.parse(nS(W,"utf8")))}}catch{return{path:W}}}async resolveArtifactPath($,W,Z){let J=(await this.adapter.getSession($))?.[W];return typeof J==="string"&&J.trim().length>0?J:Z($)}async persistSessionMessages($,W,Z){let Q=await this.resolveArtifactPath($,"messagesPath",(X)=>this.artifacts.sessionMessagesPath(X)),J=b3({updatedAt:X0(),context:S3($),messages:W,systemPrompt:Z}),j=`${JSON.stringify(J,null,2)}
519
+ `;if(lA(iA(Q),{recursive:!0}),pA(Q,j,"utf8"),!this.messagesArtifactUploader)return;try{let X=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:Q,contents:j,row:X})}catch(X){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:X})}}resolveCompactionPath($){let{manifest:W}=this.readManifestFile($);return W?.compaction_path?.trim()||this.artifacts.sessionCompactionPath($)}updateCompactionPath($,W){let Z=this.readManifestFile($);if(!Z.manifest)return;if(Z.manifest.compaction_path===W)return;this.writeSessionManifest(Z.path,{...Z.manifest,compaction_path:W})}async readSessionCompactionState($){let W=this.resolveCompactionPath($);try{return K1(JSON.parse(await rA(W,"utf8")))}catch(Z){if(tS(Z))return;this.logger?.debug("Ignoring invalid session compaction state",{sessionId:$,path:W,error:Z,recovery:"Canonical history is unchanged; deleting the sidecar is safe."});return}}async persistSessionCompactionState($,W){let Z=this.resolveCompactionPath($),Q=G4.parse(W);await dA(Z,`${JSON.stringify(Q,null,2)}
520
+ `),this.updateCompactionPath($,Z)}async deleteSessionCompactionState($){await aS(this.resolveCompactionPath($),{force:!0}),this.updateCompactionPath($,void 0)}appendStaleSessionHookLog($,W,Z,Q,J){let X=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??oS(sS(),"hooks.jsonl");rS(X,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:Q,sessionId:W,pid:Z,source:J})}
521
+ `,"utf8")}}import{appendFileSync as eS}from"node:fs";import{join as $b}from"node:path";import{resolveRootSessionId as nA}from"@cline/shared";import{ensureHookLogDir as Wb}from"@cline/shared/storage";import{z as zj}from"zod";var Zb="subagent",Qb=zj.looseObject({task:zj.string().optional(),systemPrompt:zj.string().optional()});class GQ{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,W,Z,Q){this.adapter=$;this.manifestStore=W;this.toPersistedMessages=Z;this.heartbeatLogIntervalMs=Q}teamTaskQueueKey($,W){return`${$}::${W}`}activeTeamTaskSessionId($,W){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,W))?.at(-1)}buildSubsessionRow($,W){return{sessionId:W.sessionId,source:Zb,pid:process.ppid,startedAt:W.startedAt,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:!1,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:W.parentSessionId,parentAgentId:W.parentAgentId,agentId:W.agentId,conversationId:W.conversationId??null,isSubagent:!0,prompt:W.prompt,metadata:n4({prompt:W.prompt}),hookPath:"",messagesPath:W.messagesPath,updatedAt:W.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let W=nA($.sessionContext);if(!W)return;let Z=Qb.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:W,parentAgentId:$.agent_id,task:Z.success?Z.data.task:void 0,systemPrompt:Z.success?Z.data.systemPrompt:void 0})}async upsertSubagentSession($){let W=$.rootSessionId;if(!W)return;let Z=await this.adapter.getSession(W);if(!Z)return;let Q=g8(W,$.agentId),J=await this.adapter.getSession(Q),j=X0(),X=this.manifestStore.artifacts.subagentArtifactPaths(Q,$.agentId,this.activeTeamTaskSessionId(W,$.parentAgentId)),Y=$.prompt??J?.prompt??void 0;if(!Y)Y=await this.adapter.claimSpawnRequest(W,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!J)return await this.adapter.upsertSession(this.buildSubsessionRow(Z,{sessionId:Q,parentSessionId:W,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:Y,startedAt:j,...X})),this.manifestStore.initializeMessagesFile(Q,X.messagesPath,j),Q;return await this.adapter.updateSession({sessionId:Q,setRunning:!0,parentSessionId:W,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:J.prompt??Y??null,metadata:n4({metadata:J.metadata??void 0,prompt:J.prompt??Y??null}),expectedStatusLock:J.statusLock}),Q}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let W=nA($.sessionContext);if(!W)return;if($.hookName==="session_shutdown"){let Z=g8(W,$.agent_id);return await this.adapter.getSession(Z)?Z:void 0}return await this.upsertSubagentSession({agentId:$.agent_id,parentAgentId:$.parent_agent_id,conversationId:$.taskId,rootSessionId:W})}async applySubagentStatus($,W){await this.applySubagentStatusBySessionId($,p4(W))}async applySubagentStatusBySessionId($,W){let Z=await this.adapter.getSession($);if(!Z)return;let Q=K0(W)?null:X0(),J=K0(W)?null:W==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:W,endedAt:Q,exitCode:J,expectedStatusLock:Z.statusLock})}async applyStatusToRunningChildSessions($,W){if(!$)return;let Z=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let Q of Z)await this.applySubagentStatusBySessionId(Q.sessionId,W)}async onTeamTaskStart($,W,Z){let Q=await this.adapter.getSession($);if(!Q)return;let J=d4($,W),j=X0(),{messagesPath:X}=this.manifestStore.artifacts.subagentArtifactPaths(J,W);await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:J,parentSessionId:$,parentAgentId:"lead",agentId:W,prompt:Z||`Team task for ${W}`,startedAt:j,messagesPath:X})),this.manifestStore.initializeMessagesFile(J,X,j);let Y=this.teamTaskQueueKey($,W),V=this.teamTaskSessionsByAgent.get(Y)??[];V.push(J),this.teamTaskSessionsByAgent.set(Y,V)}async onTeamTaskEnd($,W,Z,Q,J,j){let X=this.teamTaskQueueKey($,W),Y=this.teamTaskSessionsByAgent.get(X);if(!Y||Y.length===0)return;let V=Y.shift();if(Y.length===0)this.teamTaskSessionsByAgent.delete(X);if(!V)return;let B=J?.messages??j,H=this.toPersistedMessages(B,J,j);if(H)await this.manifestStore.persistSessionMessages(V,H);await this.applySubagentStatusBySessionId(V,Z),this.teamTaskLastHeartbeatBySession.delete(V),this.teamTaskLastProgressLineBySession.delete(V)}async onTeamTaskProgress($,W,Z,Q){let J=this.teamTaskQueueKey($,W),j=this.teamTaskSessionsByAgent.get(J)?.[0];if(!j)return;let X=Z.trim();if(!X)return;let Y=Q?.kind??"progress";if(Y==="heartbeat"){let B=Date.now(),H=this.teamTaskLastHeartbeatBySession.get(j)??0;if(B-H<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(j,B)}let V=Y==="heartbeat"?"[progress] heartbeat":Y==="text"?`[progress] text: ${X}`:`[progress] ${X}`;if(this.teamTaskLastProgressLineBySession.get(j)===V)return;this.teamTaskLastProgressLineBySession.set(j,V)}async handleSubAgentStart($,W){let Z=await this.upsertSubagentSession({agentId:W.subAgentId,parentAgentId:W.parentAgentId,conversationId:W.conversationId,prompt:W.input.task,rootSessionId:$});if(!Z)return;await this.applySubagentStatusBySessionId(Z,"running")}async handleSubAgentEnd($,W){let Z=await this.upsertSubagentSession({agentId:W.subAgentId,parentAgentId:W.parentAgentId,conversationId:W.conversationId,prompt:W.input.task,rootSessionId:$});if(!Z)return;if(W.error){await this.applySubagentStatusBySessionId(Z,"failed");return}let Q=this.toPersistedMessages(W.agentResult?.messages,W.agentResult);if(Q)await this.manifestStore.persistSessionMessages(Z,Q);let J=W.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Z,J==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Z=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??$b(Wb(),"hooks.jsonl");eS(Z,`${JSON.stringify({ts:X0(),...$})}
522
+ `,"utf8")}}import{formatUserInputBlock as Mb}from"@cline/shared";var jU={};w(jU,{toTeamProgressLifecycleEvent:()=>R6,sanitizeTeamName:()=>nH,reviveTeamStateDates:()=>m9,parseConfiguredAgentConfig:()=>QW,loadConfiguredAgentConfigs:()=>q6,createWorkerReviewerTeam:()=>JU,createSpawnAgentTool:()=>w$,createDelegatedAgentConfigProvider:()=>R$,createDelegatedAgent:()=>E$,createConfiguredAgentTools:()=>M6,createAgentTeamsTools:()=>q2,createAgentTeam:()=>Nj,buildTeamProgressSummary:()=>N6,buildDelegatedAgentConfig:()=>T2,buildConfiguredAgentToolName:()=>JW,buildConfiguredAgentToolDescriptors:()=>jW,bootstrapAgentTeams:()=>x8,AgentTeamsRuntime:()=>e2,AgentTeam:()=>w6});import{existsSync as Jb,readdirSync as jb,readFileSync as Xb}from"node:fs";import{basename as aA,extname as Yb,join as Vb}from"node:path";import{resolveAgentConfigSearchPaths as Bb}from"@cline/shared/storage";import sA from"yaml";import{z as y0}from"zod";var tA=y0.object({name:y0.string().trim().min(1),description:y0.string().trim().min(1),tools:y0.union([y0.string(),y0.array(y0.string())]).optional(),skills:y0.union([y0.string(),y0.array(y0.string())]).optional(),providerId:y0.string().trim().min(1).optional(),modelId:y0.string().trim().min(1).optional(),maxIterations:y0.number().int().positive().optional()});function Hb($){let W=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!W)throw Error("Missing YAML frontmatter block in agent config file.");let Z=W[0].length,Q=/^---[^\S\r\n]*(?:\r?\n|$)/gm;Q.lastIndex=Z;let J,j=Array.from($.matchAll(Q)).filter((X)=>X.index>=Z);for(let X of j){let Y=X.index,V=$.slice(Z,Y);try{let B=sA.parse(V);if(!B||typeof B!=="object"||Array.isArray(B))continue;tA.parse(B);let H=$.slice(Y+X[0].length);J={frontmatter:V,body:H}}catch{}}if(J)return J;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function oA($){if($===void 0)return;let W=Array.isArray($)?$:$.split(",");return Array.from(new Set(W.map((Z)=>Z.trim()).filter((Z)=>Z.length>0)))}function Gb($){return $.trim().toLowerCase()}function Kb($){let W=Yb($).toLowerCase();return W===".yml"||W===".yaml"}function QW($,W={}){let{frontmatter:Z,body:Q}=Hb($),J=sA.parse(Z);if(!J||typeof J!=="object"||Array.isArray(J))throw Error("Agent config frontmatter must be a YAML mapping.");let j=tA.parse(J),X=Q.trim();if(!X)throw Error("Missing system prompt body in agent config file.");return{name:j.name,description:j.description,tools:oA(j.tools),skills:oA(j.skills),providerId:j.providerId,modelId:j.modelId,maxIterations:j.maxIterations,systemPrompt:X,path:W.path}}function q6($){let W=$.searchPaths??Bb($.workspaceRoot),Z=new Map,Q=[];for(let j of W.filter(Boolean)){if(!Jb(j))continue;let X;try{X=jb(j,{withFileTypes:!0})}catch(Y){Q.push({path:j,error:Y instanceof Error?Y:Error(String(Y))});continue}for(let Y of X){if(!Y.isFile()||!Kb(Y.name))continue;let V=Vb(j,Y.name);try{let B=Xb(V,"utf8"),H=QW(B,{path:V}),G=Gb(H.name);if(!Z.has(G))Z.set(G,H)}catch(B){Q.push({path:V,error:B instanceof Error?B:Error(String(B))})}}}return{configs:Array.from(Z.values()).sort((j,X)=>(j.path?aA(j.path):j.name).localeCompare(X.path?aA(X.path):X.name)),errors:Q}}import{createTool as Fb,zodToJsonSchema as Ab}from"@cline/shared";import{z as eA}from"zod";var qj="subagent_",KQ=64,Ub=eA.object({prompt:eA.string().trim().min(1).describe("Task for the subagent to perform")});function fb($){let W="",Z=!0;for(let Q of $.trim().toLowerCase()){let J=Q.charCodeAt(0);if(!(J>=97&&J<=122||J>=48&&J<=57||Q==="_")||Q==="_"){if(!Z)W+="_",Z=!0;continue}W+=Q,Z=!1}return Z?W.slice(0,-1):W}function Db($){let W=2166136261;for(let Z=0;Z<$.length;Z++)W^=$.charCodeAt(Z),W=Math.imul(W,16777619);return(W>>>0).toString(36)}function JW($){let W=fb($)||"agent",Z=Db($).slice(0,6),Q=`${qj}${W}`;if(Q.length<=KQ)return Q;let J=KQ-qj.length-Z.length-1,j=W.slice(0,Math.max(1,J));return`${qj}${j}_${Z}`.slice(0,KQ)}function jW($){let W=new Set,Z=[];for(let Q of[...$].sort((J,j)=>J.name.localeCompare(j.name))){let J=JW(Q.name),j=J,X=2;while(W.has(j)){let Y=`_${X++}`,V=Math.max(1,KQ-Y.length);j=`${J.slice(0,V)}${Y}`}W.add(j),Z.push({toolName:j,config:Q})}return Z}function _b($,W){return{...$,providerId:W.providerId??$.providerId,modelId:W.modelId??$.modelId,maxIterations:W.maxIterations??$.maxIterations}}function M6($){return jW($.agents).map(({toolName:W,config:Z})=>{return Fb({name:W,description:`Use the "${Z.name}" subagent: ${Z.description}`,inputSchema:Ab(Ub),execute:async(J,j)=>{let X=$.configProvider.getRuntimeConfig(),Y=R$(_b(X,Z)),V=$.createSubAgentTools?await $.createSubAgentTools(Z,J,j):[],B=E$({kind:"subagent",prompt:Z.systemPrompt,configProvider:Y,tools:V,maxIterations:Z.maxIterations,parentAgentId:j.agentId,abortSignal:j.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),H=B.getAgentId(),G=B.getConversationId(),K=j.agentId,F={systemPrompt:Z.systemPrompt,task:J.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:H,conversationId:G,parentAgentId:K,input:F})}catch{}try{let A=await B.run(J.prompt),f={text:A.text,iterations:A.iterations,finishReason:A.finishReason,usage:{inputTokens:A.usage.inputTokens,outputTokens:A.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:G,parentAgentId:K,input:F,result:f,agentResult:A})}catch{}return f}catch(A){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:G,parentAgentId:K,input:F,error:A instanceof Error?A:Error(String(A))})}catch{}throw A}},timeoutMs:300000,retryable:!1})})}function b1(){return new Date().toISOString()}function $U($,W){if(W<=0)return 0;return Math.round($/W*100)}function Lb($,W){let Z=new Set;for(let J of W)if(J.status==="reviewed")Z.add(`${J.outcomeId}:${J.section}`);let Q=new Set;for(let J of $){if(J.status==="finalized")continue;for(let j of J.requiredSections)if(!Z.has(`${J.id}:${j}`))Q.add(`${J.id}:${j}`)}return[...Q].sort((J,j)=>J.localeCompare(j))}function N6($,W){let Z={idle:0,running:0,stopped:0},Q={pending:0,in_progress:0,blocked:0,completed:0},J={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},j={draft:0,in_review:0,finalized:0},X={draft:0,reviewed:0,rejected:0},Y=0,V=0;for(let U of W.members)if(Z[U.status]+=1,U.role==="lead")Y+=1;else V+=1;let B=[],H=[],G=W.tasks.filter((U)=>U.status==="completed").length,K=new Map(W.tasks.map((U)=>[U.id,U]));for(let U of W.tasks){if(Q[U.status]+=1,U.status==="blocked"){B.push(U.id);continue}if(U.status!=="pending")continue;if(U.dependsOn.every((D)=>{return K.get(D)?.status==="completed"}))H.push(U.id)}let F=[],A,f=0;for(let U of W.runs){if(J[U.status]+=1,U.status==="queued"||U.status==="running")F.push(U.id);let _=U.startedAt.getTime();if(_>=f)f=_,A=U.id}for(let U of W.outcomes)j[U.status]+=1;for(let U of W.outcomeFragments)X[U.status]+=1;return{teamName:$,updatedAt:b1(),members:{total:W.members.length,byStatus:Z,leadCount:Y,teammateCount:V},tasks:{total:W.tasks.length,byStatus:Q,blockedTaskIds:B,readyTaskIds:H,completionPct:$U(G,W.tasks.length)},runs:{total:W.runs.length,byStatus:J,activeRunIds:F,latestRunId:A},outcomes:{total:W.outcomes.length,byStatus:j,finalizedPct:$U(j.finalized,W.outcomes.length),missingRequiredSections:Lb(W.outcomes,W.outcomeFragments)},fragments:{total:W.outcomeFragments.length,byStatus:X}}}function R6($){let{event:W}=$;switch(W.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:b1(),taskId:W.task.id,agentId:W.task.assignee??W.task.createdBy};case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:b1(),runId:W.run.id,taskId:W.run.taskId,agentId:W.run.agentId,message:W.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:b1(),runId:W.run.id,taskId:W.run.taskId,agentId:W.run.agentId,message:W.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:b1(),outcomeId:W.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:b1(),outcomeId:W.fragment.outcomeId,fragmentId:W.fragment.id,agentId:W.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:b1(),taskId:W.message.taskId,agentId:W.message.fromAgentId,message:W.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:b1(),taskId:W.entry.taskId,agentId:W.entry.agentId,message:W.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:b1(),agentId:W.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:W.type,ts:b1()}}import{sanitizeFileName as Ob,TeamMessageType as m}from"@cline/shared";import{nanoid as Tb}from"nanoid";import{TeamMessageType as _o}from"@cline/shared";function Mj($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function WU($,W){return $?.status==="stopped"&&Mj(W)}var zb=600000,ZU="recovered_queued";function qb($){return`This is an automatic recovery of interrupted team run ${$.id}. The previous process stopped before completion. Continue the task safely, inspect the current workspace state before making changes, and avoid duplicating completed work.
523
+
524
+ ${$.message}`}class w6{agents=new Map;configs=new Map;onTeamEvent;constructor($,W){if(this.onTeamEvent=W,$)for(let[Z,Q]of Object.entries($))this.addAgent(Z,Q)}addAgent($,W){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let Z={...W,onEvent:(J)=>{W.onEvent?.(J),this.emitEvent({type:m.AgentEvent,agentId:$,event:J})}},Q=new N$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);this.agents.set($,Q),this.configs.set($,W)}removeAgent($){return this.configs.delete($),this.agents.delete($)}getAgent($){return this.agents.get($)}getAgentIds(){return Array.from(this.agents.keys())}get size(){return this.agents.size}async routeTo($,W){let Z=this.agents.get($);if(!Z)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:m.TaskStart,agentId:$,message:W});try{let Q=await Z.run(W);return this.emitEvent({type:m.TaskEnd,agentId:$,result:Q}),Q}catch(Q){let J=Q instanceof Error?Q:Error(String(Q));throw this.emitEvent({type:m.TaskEnd,agentId:$,error:J,messages:Z.getMessages()}),Q}}async continueTo($,W){let Z=this.agents.get($);if(!Z)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:m.TaskStart,agentId:$,message:W});try{let Q=await Z.continue(W);return this.emitEvent({type:m.TaskEnd,agentId:$,result:Q}),Q}catch(Q){let J=Q instanceof Error?Q:Error(String(Q));throw this.emitEvent({type:m.TaskEnd,agentId:$,error:J,messages:Z.getMessages()}),Q}}async runParallel($){let W=$.map(async(Z)=>{let Q=this.agents.get(Z.agentId);if(!Q)return{agentId:Z.agentId,result:void 0,error:Error(`Agent "${Z.agentId}" not found in team`),metadata:Z.metadata};this.emitEvent({type:m.TaskStart,agentId:Z.agentId,message:Z.message});try{let J=await Q.run(Z.message);return this.emitEvent({type:m.TaskEnd,agentId:Z.agentId,result:J}),{agentId:Z.agentId,result:J,metadata:Z.metadata}}catch(J){let j=J instanceof Error?J:Error(String(J));return this.emitEvent({type:m.TaskEnd,agentId:Z.agentId,error:j,messages:Q.getMessages()}),{agentId:Z.agentId,result:void 0,error:j,metadata:Z.metadata}}});return Promise.all(W)}async runSequential($){let W=[];for(let Z of $){let Q=this.agents.get(Z.agentId);if(!Q){W.push({agentId:Z.agentId,result:void 0,error:Error(`Agent "${Z.agentId}" not found in team`),metadata:Z.metadata});continue}this.emitEvent({type:m.TaskStart,agentId:Z.agentId,message:Z.message});try{let J=await Q.run(Z.message);this.emitEvent({type:m.TaskEnd,agentId:Z.agentId,result:J}),W.push({agentId:Z.agentId,result:J,metadata:Z.metadata})}catch(J){let j=J instanceof Error?J:Error(String(J));this.emitEvent({type:m.TaskEnd,agentId:Z.agentId,error:j,messages:Q.getMessages()}),W.push({agentId:Z.agentId,result:void 0,error:j,metadata:Z.metadata})}}return W}async runPipeline($,W,Z){let Q=[],J=W;for(let j of $){let X=this.agents.get(j);if(!X){Q.push({agentId:j,result:void 0,error:Error(`Agent "${j}" not found in team`)});break}this.emitEvent({type:m.TaskStart,agentId:j,message:J});try{let Y=await X.run(J);this.emitEvent({type:m.TaskEnd,agentId:j,result:Y}),Q.push({agentId:j,result:Y});let V=$.indexOf(j)+1;if(V<$.length){let B=$[V];J=Z?Z(Y,B):`Previous agent output:
525
525
  ${Y.text}
526
526
 
527
- Please continue from here.`}}catch(Y){let V=Y instanceof Error?Y:Error(String(Y));this.emitEvent({type:m.TaskEnd,agentId:j,error:V,messages:X.getMessages()}),Q.push({agentId:j,result:void 0,error:V});break}}return Q}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function zj($,W){return new E6($,W)}function tA($){let W=zj({worker:$.worker,reviewer:$.reviewer}),Z=W;return Z.doAndReview=async(Q)=>{let J=await W.routeTo("worker",Q),j=await W.routeTo("reviewer",`Please review this work:
527
+ Please continue from here.`}}catch(Y){let V=Y instanceof Error?Y:Error(String(Y));this.emitEvent({type:m.TaskEnd,agentId:j,error:V,messages:X.getMessages()}),Q.push({agentId:j,result:void 0,error:V});break}}return Q}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function Nj($,W){return new w6($,W)}function JU($){let W=Nj({worker:$.worker,reviewer:$.reviewer}),Z=W;return Z.doAndReview=async(Q)=>{let J=await W.routeTo("worker",Q),j=await W.routeTo("reviewer",`Please review this work:
528
528
 
529
- ${J.text}`);return{workerResult:J,reviewResult:j}},Z}class e2{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=[];queuedRunDispatchTimer;outcomes=new Map;outcomeFragments=new Map;missionLogIntervalSteps;missionLogIntervalMs;maxConcurrentRuns;constructor($){this.teamName=$.teamName,this.teamId=`t_${Ub(fb(10))}`,this.onTeamEvent=$.onTeamEvent,this.missionLogIntervalSteps=Math.max(1,$.missionLogIntervalSteps??3),this.missionLogIntervalMs=Math.max(1000,$.missionLogIntervalMs??120000),this.maxConcurrentRuns=Math.max(1,$.maxConcurrentRuns??2);let W=$.leadAgentId??"lead";this.members.set(W,{agentId:W,role:"lead",status:"idle",runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()})}getTeamId(){return this.teamId}getTeamName(){return this.teamName}getMemberRole($){return this.members.get($)?.role}getMemberIds(){return Array.from(this.members.keys())}getTeammateIds(){return Array.from(this.members.values()).filter(($)=>$.role==="teammate").map(($)=>$.agentId)}getTask($){return this.tasks.get($)}listTasks(){return Array.from(this.tasks.values())}listTaskItems($){return Array.from(this.tasks.values()).map((W)=>{let Z=this.getUnresolvedDependencies(W);return{...W,blockedBy:Z,isReady:W.status==="pending"&&!W.assignee&&Z.length===0}}).filter((W)=>{if($?.status&&W.status!==$.status)return!1;if($?.assignee&&W.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,W){let Z=W?.unreadOnly??!0,Q=W?.markRead??!0,J=W?.limit,j=this.mailbox.filter((Y)=>Y.toAgentId===$&&(!Z||!Y.readAt)),X=typeof J==="number"&&J>0?j.slice(Math.max(0,j.length-J)):j;if(Q){let Y=new Date;for(let V of X)if(!V.readAt)V.readAt=Y}return X.map((Y)=>({...Y}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let Z of this.tasks.values())$[Z.status]++;let W={draft:0,in_review:0,finalized:0};for(let Z of this.outcomes.values())W[Z.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((Z)=>({agentId:Z.agentId,role:Z.role,description:Z.description,status:Z.status})),taskCounts:$,unreadMessages:this.mailbox.filter((Z)=>!Z.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((Z)=>Z.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((Z)=>Z.status==="queued").length,outcomeCounts:W}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map(($)=>({agentId:$.agentId,role:$.role,description:$.description,status:$.status})),tasks:Array.from(this.tasks.values()).map(($)=>({...$})),mailbox:this.mailbox.map(($)=>({...$})),missionLog:this.missionLog.map(($)=>({...$})),runs:Array.from(this.runs.values()).map(($)=>({...$})),outcomes:Array.from(this.outcomes.values()).map(($)=>({...$})),outcomeFragments:Array.from(this.outcomeFragments.values()).map(($)=>({...$}))}}hydrateState($){this.clearQueuedRunDispatchTimer(),this.tasks.clear();for(let Z of $.tasks)this.tasks.set(Z.id,{...Z});this.mailbox.length=0,this.mailbox.push(...$.mailbox.map((Z)=>({...Z}))),this.missionLog.length=0,this.missionLog.push(...$.missionLog.map((Z)=>({...Z}))),this.runs.clear();for(let Z of $.runs??[])this.runs.set(Z.id,{...Z});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((Z)=>Z.status==="queued").map((Z)=>Z.id)),this.outcomes.clear();for(let Z of $.outcomes??[])this.outcomes.set(Z.id,{...Z});this.outcomeFragments.clear();for(let Z of $.outcomeFragments??[])this.outcomeFragments.set(Z.id,{...Z});let W=Array.from(this.members.values()).filter((Z)=>Z.role==="lead");this.members.clear();for(let Z of W)this.members.set(Z.agentId,{...Z,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let Z of $.members){if(Z.role!=="teammate")continue;this.members.set(Z.agentId,{agentId:Z.agentId,role:"teammate",description:Z.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,N6($.tasks.map((Z)=>Z.id),"task_")),this.messageCounter=Math.max(this.messageCounter,N6($.mailbox.map((Z)=>Z.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,N6($.missionLog.map((Z)=>Z.id),"log_")),this.runCounter=Math.max(this.runCounter,N6(($.runs??[]).map((Z)=>Z.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,N6(($.outcomes??[]).map((Z)=>Z.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,N6(($.outcomeFragments??[]).map((Z)=>Z.id),"frag_"))}isTeammateActive($){let W=this.members.get($);return!!W&&W.role==="teammate"&&!!W.agent}spawnTeammate({agentId:$,config:W}){let Z=this.members.get($);if(Z&&Z.role!=="teammate")throw Error(`Team member "${$}" already exists and is not a teammate`);if(Z&&Z.runningCount>0)throw Error(`Teammate "${$}" is currently running and cannot be respawned`);let Q={...W,apiTimeoutMs:Db,consumePendingUserMessage:()=>{let X=this.members.get($);if(!X||!X.pendingSteerMessage)return;let Y=X.pendingSteerMessage;return X.pendingSteerMessage=void 0,Y},onEvent:(X)=>{W.onEvent?.(X),this.emitEvent({type:m.AgentEvent,agentId:$,event:X}),this.trackMeaningfulEvent($,X)}},J=new M$(Q);if(Q.onEvent)J.subscribeEvents(Q.onEvent);let j={agentId:$,role:"teammate",description:W.role,status:"idle",agent:J,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,j),this.emitEvent({type:m.TeammateSpawned,agentId:$,role:W.role,teammate:{rolePrompt:W.systemPrompt,modelId:W.modelId,maxIterations:W.maxIterations,runtimeAgentId:J.getAgentId(),conversationId:J.getConversationId(),parentAgentId:null}}),{agentId:j.agentId,role:j.role,description:j.description,status:j.status}}shutdownTeammate($,W){let Z=this.members.get($);if(!Z||Z.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{Z.agent?.abort()}catch(Q){if(!Tj(Q))throw Q}Z.status="stopped",this.emitEvent({type:m.TeammateShutdown,agentId:$,reason:W})}updateTeammateConnections($){for(let W of this.members.values()){if(W.role!=="teammate"||!W.agent)continue;W.agent.updateConnection($)}}createTask($){let W=`task_${String(++this.taskCounter).padStart(4,"0")}`,Z=new Date,Q={id:W,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:Z,updatedAt:Z,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(W,Q),this.emitEvent({type:m.TeamTaskUpdated,task:{...Q}}),{...Q}}claimTask($,W){let Z=this.requireTask($);return this.assertDependenciesResolved(Z),Z.status="in_progress",Z.assignee=W,Z.updatedAt=new Date,this.emitEvent({type:m.TeamTaskUpdated,task:{...Z}}),this.appendMissionLog({agentId:W,taskId:$,kind:"progress",summary:`Claimed task "${Z.title}"`}),{...Z}}blockTask($,W,Z){let Q=this.requireTask($);return Q.status="blocked",Q.updatedAt=new Date,Q.summary=Z,this.emitEvent({type:m.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:W,taskId:$,kind:"blocked",summary:Z}),{...Q}}completeTask($,W,Z){let Q=this.requireTask($);if(Q.status="completed",Q.updatedAt=new Date,Q.summary=Z,!Q.assignee)Q.assignee=W;return this.emitEvent({type:m.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:W,taskId:$,kind:"done",summary:Z}),{...Q}}async routeToTeammate($,W,Z){let Q=this.members.get($);if(!Q||Q.role!=="teammate"||!Q.agent)throw Error(`Teammate "${$}" was not found`);if(!Q.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");Q.runningCount++,Q.status="running",this.emitEvent({type:m.TaskStart,agentId:$,message:W});try{let J=this.listMailbox($,{unreadOnly:!0,markRead:!0}),j=J.length>0?`${this.buildMailboxNotification(J)}
529
+ ${J.text}`);return{workerResult:J,reviewResult:j}},Z}class e2{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=[];queuedRunDispatchTimer;outcomes=new Map;outcomeFragments=new Map;missionLogIntervalSteps;missionLogIntervalMs;maxConcurrentRuns;constructor($){this.teamName=$.teamName,this.teamId=`t_${Ob(Tb(10))}`,this.onTeamEvent=$.onTeamEvent,this.missionLogIntervalSteps=Math.max(1,$.missionLogIntervalSteps??3),this.missionLogIntervalMs=Math.max(1000,$.missionLogIntervalMs??120000),this.maxConcurrentRuns=Math.max(1,$.maxConcurrentRuns??2);let W=$.leadAgentId??"lead";this.members.set(W,{agentId:W,role:"lead",status:"idle",runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()})}getTeamId(){return this.teamId}getTeamName(){return this.teamName}getMemberRole($){return this.members.get($)?.role}getMemberIds(){return Array.from(this.members.keys())}getTeammateIds(){return Array.from(this.members.values()).filter(($)=>$.role==="teammate").map(($)=>$.agentId)}getTask($){return this.tasks.get($)}listTasks(){return Array.from(this.tasks.values())}listTaskItems($){return Array.from(this.tasks.values()).map((W)=>{let Z=this.getUnresolvedDependencies(W);return{...W,blockedBy:Z,isReady:W.status==="pending"&&!W.assignee&&Z.length===0}}).filter((W)=>{if($?.status&&W.status!==$.status)return!1;if($?.assignee&&W.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,W){let Z=W?.unreadOnly??!0,Q=W?.markRead??!0,J=W?.limit,j=this.mailbox.filter((Y)=>Y.toAgentId===$&&(!Z||!Y.readAt)),X=typeof J==="number"&&J>0?j.slice(Math.max(0,j.length-J)):j;if(Q){let Y=new Date;for(let V of X)if(!V.readAt)V.readAt=Y}return X.map((Y)=>({...Y}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let Z of this.tasks.values())$[Z.status]++;let W={draft:0,in_review:0,finalized:0};for(let Z of this.outcomes.values())W[Z.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((Z)=>({agentId:Z.agentId,role:Z.role,description:Z.description,status:Z.status})),taskCounts:$,unreadMessages:this.mailbox.filter((Z)=>!Z.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((Z)=>Z.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((Z)=>Z.status==="queued").length,outcomeCounts:W}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map(($)=>({agentId:$.agentId,role:$.role,description:$.description,status:$.status})),tasks:Array.from(this.tasks.values()).map(($)=>({...$})),mailbox:this.mailbox.map(($)=>({...$})),missionLog:this.missionLog.map(($)=>({...$})),runs:Array.from(this.runs.values()).map(($)=>({...$})),outcomes:Array.from(this.outcomes.values()).map(($)=>({...$})),outcomeFragments:Array.from(this.outcomeFragments.values()).map(($)=>({...$}))}}hydrateState($){this.clearQueuedRunDispatchTimer(),this.tasks.clear();for(let Z of $.tasks)this.tasks.set(Z.id,{...Z});this.mailbox.length=0,this.mailbox.push(...$.mailbox.map((Z)=>({...Z}))),this.missionLog.length=0,this.missionLog.push(...$.missionLog.map((Z)=>({...Z}))),this.runs.clear();for(let Z of $.runs??[])this.runs.set(Z.id,{...Z});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((Z)=>Z.status==="queued").map((Z)=>Z.id)),this.outcomes.clear();for(let Z of $.outcomes??[])this.outcomes.set(Z.id,{...Z});this.outcomeFragments.clear();for(let Z of $.outcomeFragments??[])this.outcomeFragments.set(Z.id,{...Z});let W=Array.from(this.members.values()).filter((Z)=>Z.role==="lead");this.members.clear();for(let Z of W)this.members.set(Z.agentId,{...Z,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let Z of $.members){if(Z.role!=="teammate")continue;this.members.set(Z.agentId,{agentId:Z.agentId,role:"teammate",description:Z.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,E6($.tasks.map((Z)=>Z.id),"task_")),this.messageCounter=Math.max(this.messageCounter,E6($.mailbox.map((Z)=>Z.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,E6($.missionLog.map((Z)=>Z.id),"log_")),this.runCounter=Math.max(this.runCounter,E6(($.runs??[]).map((Z)=>Z.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,E6(($.outcomes??[]).map((Z)=>Z.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,E6(($.outcomeFragments??[]).map((Z)=>Z.id),"frag_"))}isTeammateActive($){let W=this.members.get($);return!!W&&W.role==="teammate"&&!!W.agent}spawnTeammate({agentId:$,config:W}){let Z=this.members.get($);if(Z&&Z.role!=="teammate")throw Error(`Team member "${$}" already exists and is not a teammate`);if(Z&&Z.runningCount>0)throw Error(`Teammate "${$}" is currently running and cannot be respawned`);let Q={...W,apiTimeoutMs:zb,consumePendingUserMessage:()=>{let X=this.members.get($);if(!X||!X.pendingSteerMessage)return;let Y=X.pendingSteerMessage;return X.pendingSteerMessage=void 0,Y},onEvent:(X)=>{W.onEvent?.(X),this.emitEvent({type:m.AgentEvent,agentId:$,event:X}),this.trackMeaningfulEvent($,X)}},J=new N$(Q);if(Q.onEvent)J.subscribeEvents(Q.onEvent);let j={agentId:$,role:"teammate",description:W.role,status:"idle",agent:J,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,j),this.emitEvent({type:m.TeammateSpawned,agentId:$,role:W.role,teammate:{rolePrompt:W.systemPrompt,modelId:W.modelId,maxIterations:W.maxIterations,runtimeAgentId:J.getAgentId(),conversationId:J.getConversationId(),parentAgentId:null}}),{agentId:j.agentId,role:j.role,description:j.description,status:j.status}}shutdownTeammate($,W){let Z=this.members.get($);if(!Z||Z.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{Z.agent?.abort()}catch(Q){if(!Mj(Q))throw Q}Z.status="stopped",this.emitEvent({type:m.TeammateShutdown,agentId:$,reason:W})}updateTeammateConnections($){for(let W of this.members.values()){if(W.role!=="teammate"||!W.agent)continue;W.agent.updateConnection($)}}createTask($){let W=`task_${String(++this.taskCounter).padStart(4,"0")}`,Z=new Date,Q={id:W,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:Z,updatedAt:Z,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(W,Q),this.emitEvent({type:m.TeamTaskUpdated,task:{...Q}}),{...Q}}claimTask($,W){let Z=this.requireTask($);return this.assertDependenciesResolved(Z),Z.status="in_progress",Z.assignee=W,Z.updatedAt=new Date,this.emitEvent({type:m.TeamTaskUpdated,task:{...Z}}),this.appendMissionLog({agentId:W,taskId:$,kind:"progress",summary:`Claimed task "${Z.title}"`}),{...Z}}blockTask($,W,Z){let Q=this.requireTask($);return Q.status="blocked",Q.updatedAt=new Date,Q.summary=Z,this.emitEvent({type:m.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:W,taskId:$,kind:"blocked",summary:Z}),{...Q}}completeTask($,W,Z){let Q=this.requireTask($);if(Q.status="completed",Q.updatedAt=new Date,Q.summary=Z,!Q.assignee)Q.assignee=W;return this.emitEvent({type:m.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:W,taskId:$,kind:"done",summary:Z}),{...Q}}async routeToTeammate($,W,Z){let Q=this.members.get($);if(!Q||Q.role!=="teammate"||!Q.agent)throw Error(`Teammate "${$}" was not found`);if(!Q.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");Q.runningCount++,Q.status="running",this.emitEvent({type:m.TaskStart,agentId:$,message:W});try{let J=this.listMailbox($,{unreadOnly:!0,markRead:!0}),j=J.length>0?`${this.buildMailboxNotification(J)}
530
530
 
531
- ${W}`:W,X=Z?.continueConversation?await Q.agent.continue(j):await Q.agent.run(j);return this.emitEvent({type:m.TaskEnd,agentId:$,result:X}),this.recordProgressStep($,`Completed a delegated run (${X.iterations} iterations)`,Z?.taskId,!0),X}catch(J){let j=J instanceof Error?J:Error(String(J));if(this.emitEvent({type:m.TaskEnd,agentId:$,error:j,messages:Q.agent.getMessages()}),!aA(Q,j))this.appendMissionLog({agentId:$,taskId:Z?.taskId,kind:"error",summary:j.message});throw j}finally{if(Q.runningCount--,Q.runningCount<=0&&this.members.get($)?.status!=="stopped")Q.status="idle"}}startTeammateRun($,W,Z){let Q=`run_${String(++this.runCounter).padStart(5,"0")}`,J={id:Q,agentId:$,taskId:Z?.taskId,status:"queued",message:W,priority:Z?.priority??0,retryCount:0,maxRetries:Math.max(0,Z?.maxRetries??0),continueConversation:Z?.continueConversation,startedAt:new Date(0),leaseOwner:Z?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(Q,J),this.runQueue.push(Q),this.emitEvent({type:m.RunQueued,run:{...J}}),this.dispatchQueuedRuns(),{...J}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let W=this.selectNextDispatchableQueuedRun();$=W.nextDelayedAttemptAt;let Z=W.index;if(Z<0){this.scheduleQueuedRunDispatch($);return}let[Q]=this.runQueue.splice(Z,1),J=Q?this.runs.get(Q):void 0;if(!J||J.status!=="queued")continue;this.executeQueuedRun(J)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,W=Number.NEGATIVE_INFINITY,Z,Q=Date.now();for(let J=0;J<this.runQueue.length;J++){let j=this.runs.get(this.runQueue[J]);if(!j||j.status!=="queued")continue;if(j.nextAttemptAt&&j.nextAttemptAt.getTime()>Q){if(!Z||j.nextAttemptAt<Z)Z=j.nextAttemptAt;continue}if(j.priority>W)W=j.priority,$=J}return{index:$,nextDelayedAttemptAt:Z}}scheduleQueuedRunDispatch($){if(!$)return;let W=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},W)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let W of this.runs.values())if(W.status==="running")$++;return $}async executeQueuedRun($){let W=$.currentActivity===oA;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:m.RunStarted,run:{...$}});let Z=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let Q=W?_b($):$.message,J=await this.routeToTeammate($.agentId,Q,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=J,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:m.RunCompleted,run:{...$}})}catch(Q){let J=Q instanceof Error?Q.message:String(Q??"Unknown error");$.error=J,$.endedAt=new Date;let j=this.members.get($.agentId);if(aA(j,Q))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:m.RunCancelled,run:{...$},reason:J});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:m.RunFailed,run:{...$}})}finally{clearInterval(Z),this.dispatchQueuedRuns()}}listRuns($){let W=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Z)=>{if(!W&&!["running","queued"].includes(Z.status))return!1;if($?.status&&Z.status!==$.status)return!1;if($?.agentId&&Z.agentId!==$.agentId)return!1;return!0}).map((Z)=>({...Z}))}getRun($){let W=this.runs.get($);return W?{...W}:void 0}async awaitRun($,W=250){let Z=this.runs.get($);if(!Z)throw Error(`Run "${$}" was not found`);while(Z.status==="queued"||Z.status==="running")await sA(W);return{...Z}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((W)=>["queued","running"].includes(W.status)))await sA($);return this.listRuns()}cancelRun($,W){let Z=this.runs.get($);if(!Z)throw Error(`Run "${$}" was not found`);if(Z.status==="completed"||Z.status==="failed")return{...Z};Z.status="cancelled",Z.error=W,Z.endedAt=new Date,Z.currentActivity="cancelled";let Q=this.runQueue.indexOf($);if(Q>=0)this.runQueue.splice(Q,1);return this.emitEvent({type:m.RunCancelled,run:{...Z},reason:W}),{...Z}}recoverActiveRuns($="runtime_recovered"){let W=[];for(let Z of this.runs.values()){if(!["queued","running"].includes(Z.status))continue;let Q=this.members.get(Z.agentId);if(!Q||Q.role!=="teammate"||!Q.agent){Z.status="interrupted",Z.error="teammate_unavailable_after_recovery",Z.endedAt=new Date,Z.currentActivity="interrupted",this.emitEvent({type:m.RunInterrupted,run:{...Z},reason:Z.error});continue}let J=new Date;if(Z.status="queued",Z.error=void 0,Z.endedAt=void 0,Z.heartbeatAt=J,Z.lastProgressAt=J,Z.lastProgressMessage=$,Z.currentActivity=oA,!this.runQueue.includes(Z.id))this.runQueue.push(Z.id);W.push({...Z}),this.emitEvent({type:m.RunQueued,run:{...Z}})}return this.dispatchQueuedRuns(),W}markStaleRunsInterrupted($="runtime_recovered"){let W=[];for(let Z of this.runs.values()){if(!["queued","running"].includes(Z.status))continue;Z.status="interrupted",Z.error=$,Z.endedAt=new Date,Z.currentActivity="interrupted",W.push({...Z}),this.emitEvent({type:m.RunInterrupted,run:{...Z},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),W}sendMessage($,W,Z,Q,J){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let j=this.members.get(W);if(!j)throw Error(`Unknown recipient "${W}"`);let X={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:W,subject:Z,body:Q,taskId:J,sentAt:new Date};if(this.mailbox.push(X),this.emitEvent({type:m.TeamMessage,message:{...X}}),j.role==="teammate"&&j.runningCount>0&&j.agent)j.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Z}". Use the team_read_mailbox tool to read it at your convenience.`;return{...X}}broadcast($,W,Z,Q){let J=[];for(let j of this.members.values()){if(j.agentId===$)continue;if(j.role==="lead")continue;J.push(this.sendMessage($,j.agentId,W,Z,Q?.taskId))}return J}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let W={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:$.agentId,taskId:$.taskId,kind:$.kind,summary:$.summary,evidence:$.evidence,nextAction:$.nextAction};this.missionLog.push(W);let Z=this.members.get($.agentId);if(Z)Z.lastMissionAt=Date.now(),Z.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:m.TeamMissionLog,entry:{...W}}),{...W}}createOutcome($){let W={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:$.title,status:"draft",requiredSections:[...new Set($.requiredSections)],createdBy:$.createdBy,createdAt:new Date};return this.outcomes.set(W.id,W),this.emitEvent({type:m.OutcomeCreated,outcome:{...W}}),{...W}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let W=this.outcomes.get($.outcomeId);if(!W)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!W.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Z={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(Z.id,Z),W.status==="draft")W.status="in_review";return this.emitEvent({type:m.OutcomeFragmentAttached,fragment:{...Z}}),{...Z}}reviewOutcomeFragment($){let W=this.outcomeFragments.get($.fragmentId);if(!W)throw Error(`Fragment "${$.fragmentId}" was not found`);return W.status=$.approved?"reviewed":"rejected",W.reviewedBy=$.reviewedBy,W.reviewedAt=new Date,this.emitEvent({type:m.OutcomeFragmentReviewed,fragment:{...W}}),{...W}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((W)=>W.outcomeId===$).map((W)=>({...W}))}finalizeOutcome($){let W=this.outcomes.get($);if(!W)throw Error(`Outcome "${$}" was not found`);let Z=this.listOutcomeFragments($);for(let Q of W.requiredSections)if(!Z.some((j)=>j.section===Q&&j.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${Q}" is missing a reviewed fragment.`);return W.status="finalized",W.finalizedAt=new Date,this.emitEvent({type:m.OutcomeFinalized,outcome:{...W}}),{...W}}cleanup(){for(let $ of this.members.values())if($.role==="teammate"&&$.runningCount>0)throw Error(`Cannot cleanup team while teammate "${$.agentId}" is still running`);if(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let $ of this.members.values())if($.role==="teammate")try{$.agent?.abort()}catch(W){if(!Tj(W))throw W}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[$,W]of this.members.entries())if(W.role==="teammate")this.members.delete($)}requireTask($){let W=this.tasks.get($);if(!W)throw Error(`Task "${$}" was not found`);return W}assertDependenciesResolved($){let W=this.getUnresolvedDependencies($);if(W.length>0)throw Error(`Task "${$.id}" is blocked by "${W[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((W)=>{let Z=this.tasks.get(W);return!Z||Z.status!=="completed"})}trackMeaningfulEvent($,W){if(this.recordRunActivityFromAgentEvent($,W),W.type==="iteration_end"&&W.hadToolCalls){this.recordProgressStep($,`Completed iteration ${W.iteration} with ${W.toolCallCount} tool call(s)`);return}if(W.type==="content_end"&&W.contentType==="tool"&&!W.error){this.recordProgressStep($,`Finished tool "${W.toolName??"unknown"}"`);return}if(W.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${W.iterations} iterations)`});return}if(W.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:W.error.message})}recordRunActivityFromAgentEvent($,W){let Z;switch(W.type){case"iteration_start":Z=`iteration_${W.iteration}_started`;break;case"content_start":if(W.contentType==="tool")Z=`running_tool_${W.toolName??"unknown"}`;break;case"content_end":if(W.contentType==="tool")Z=W.error?this.formatProgressErrorActivity(`tool_${W.toolName??"unknown"}_error`,W.error):`finished_tool_${W.toolName??"unknown"}`;break;case"done":Z="finalizing_response";break;case"error":Z=this.formatProgressErrorActivity("run_error",W.error.message);break;default:break}if(!Z)return;for(let Q of this.runs.values()){if(Q.agentId!==$||Q.status!=="running")continue;this.recordRunProgress(Q,Z)}}recordRunProgress($,W){let Z=new Date;$.heartbeatAt=Z,$.lastProgressAt=Z,$.lastProgressMessage=W,$.currentActivity=W,this.emitEvent({type:m.RunProgress,run:{...$},message:W})}formatProgressErrorActivity($,W){let Z=W.replace(/\s+/g," ").trim();if(Z.length===0)return $;let Q=Z.length>240?`${Z.slice(0,237).trimEnd()}...`:Z;return`${$}: ${Q}`}recordProgressStep($,W,Z,Q=!1){this.missionStepCounter++;let J=this.members.get($);if(!J)return;let j=this.missionStepCounter-J.lastMissionStep,X=Date.now()-J.lastMissionAt;if(!Q&&j<this.missionLogIntervalSteps&&X<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Z,kind:"progress",summary:W})}buildMailboxNotification($){if($.length===0)return"";let W=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Z of $)W.push(`--- Message from ${Z.fromAgentId} | subject: ${Z.subject} ---`),W.push(Z.body);return W.push("---"),W.join(`
532
- `)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function sA($){return new Promise((W)=>setTimeout(W,$))}function N6($,W){let Z=0;for(let Q of $){if(!Q.startsWith(W))continue;let J=Number.parseInt(Q.slice(W.length),10);if(Number.isFinite(J))Z=Math.max(Z,J)}return Z}function qj($,W){switch(W.type){case"run_queued":case"run_started":$.activeTeamRunIds.add(W.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let Z;if(W.type==="run_failed")Z=W.run.error;else if(W.type==="run_cancelled"||W.type==="run_interrupted")Z=W.run.error??W.reason;$.activeTeamRunIds.delete(W.run.id),$.pendingTeamRunUpdates.push({runId:W.run.id,agentId:W.run.agentId,taskId:W.run.taskId,status:W.type.replace("run_",""),error:Z,iterations:W.run.result?.iterations}),GQ($);break}default:break}}async function Mj($,W,Z){switch(W.type){case"run_progress":await Z("onTeamTaskProgress",$,W.run.agentId,W.message,{kind:W.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(W.event.type==="content_start"&&W.event.contentType==="text"&&typeof W.event.text==="string"){let Q=W.event.text.replace(/\s+/g," ").trim().slice(0,120);if(Q)await Z("onTeamTaskProgress",$,W.agentId,Q,{kind:"text"})}break;case"task_start":await Z("onTeamTaskStart",$,W.agentId,W.message);break;case"task_end":{if(W.error)await Z("onTeamTaskEnd",$,W.agentId,"failed",`[error] ${W.error.message}`,void 0,W.messages);else if(W.result?.finishReason==="aborted")await Z("onTeamTaskEnd",$,W.agentId,"cancelled","[done] aborted",W.result,W.result.messages);else await Z("onTeamTaskEnd",$,W.agentId,"completed",`[done] ${W.result?.finishReason??"completed"}`,W.result,W.result?.messages);break}default:break}}function Rj($,W,Z,Q){if(!$.runtime.teamRuntime)return;let J=$.runtime.teamRuntime.getTeamName();Q({type:"team_progress",payload:{sessionId:W,teamName:J,lifecycle:R6({teamName:J,sessionId:W,event:Z}),summary:M6(J,$.runtime.teamRuntime.exportState())}})}function JW($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function Nj($,W){if($.aborting)return!1;if(!(W==="completed"||W==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&JW($)}function GQ($){let W=$.teamRunWaiters.splice(0);for(let Z of W)Z()}async function Ej($){while(!0){if($.aborting)return[];if($.pendingTeamRunUpdates.length>0){let W=[...$.pendingTeamRunUpdates];return $.pendingTeamRunUpdates.length=0,W}if($.activeTeamRunIds.size===0)return[];await new Promise((W)=>{$.teamRunWaiters.push(W)})}}function wj($,W){let Z=W.map((j)=>{let X=[`- ${j.runId} (${j.agentId}) -> ${j.status}`];if(j.taskId)X.push(` task=${j.taskId}`);if(typeof j.iterations==="number")X.push(` iterations=${j.iterations}`);if(j.error)X.push(` error=${j.error}`);return X.join("")}),Q=$.activeTeamRunIds.size,J=Q>0?`There are still ${Q} teammate run(s) in progress. Continue coordination and decide whether to wait for more updates.`:"No teammate runs are currently in progress. Continue coordination using these updates.";return jW(`System-delivered teammate async run updates:
531
+ ${W}`:W,X=Z?.continueConversation?await Q.agent.continue(j):await Q.agent.run(j);return this.emitEvent({type:m.TaskEnd,agentId:$,result:X}),this.recordProgressStep($,`Completed a delegated run (${X.iterations} iterations)`,Z?.taskId,!0),X}catch(J){let j=J instanceof Error?J:Error(String(J));if(this.emitEvent({type:m.TaskEnd,agentId:$,error:j,messages:Q.agent.getMessages()}),!WU(Q,j))this.appendMissionLog({agentId:$,taskId:Z?.taskId,kind:"error",summary:j.message});throw j}finally{if(Q.runningCount--,Q.runningCount<=0&&this.members.get($)?.status!=="stopped")Q.status="idle"}}startTeammateRun($,W,Z){let Q=`run_${String(++this.runCounter).padStart(5,"0")}`,J={id:Q,agentId:$,taskId:Z?.taskId,status:"queued",message:W,priority:Z?.priority??0,retryCount:0,maxRetries:Math.max(0,Z?.maxRetries??0),continueConversation:Z?.continueConversation,startedAt:new Date(0),leaseOwner:Z?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(Q,J),this.runQueue.push(Q),this.emitEvent({type:m.RunQueued,run:{...J}}),this.dispatchQueuedRuns(),{...J}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let W=this.selectNextDispatchableQueuedRun();$=W.nextDelayedAttemptAt;let Z=W.index;if(Z<0){this.scheduleQueuedRunDispatch($);return}let[Q]=this.runQueue.splice(Z,1),J=Q?this.runs.get(Q):void 0;if(!J||J.status!=="queued")continue;this.executeQueuedRun(J)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,W=Number.NEGATIVE_INFINITY,Z,Q=Date.now();for(let J=0;J<this.runQueue.length;J++){let j=this.runs.get(this.runQueue[J]);if(!j||j.status!=="queued")continue;if(j.nextAttemptAt&&j.nextAttemptAt.getTime()>Q){if(!Z||j.nextAttemptAt<Z)Z=j.nextAttemptAt;continue}if(j.priority>W)W=j.priority,$=J}return{index:$,nextDelayedAttemptAt:Z}}scheduleQueuedRunDispatch($){if(!$)return;let W=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},W)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let W of this.runs.values())if(W.status==="running")$++;return $}async executeQueuedRun($){let W=$.currentActivity===ZU;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:m.RunStarted,run:{...$}});let Z=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let Q=W?qb($):$.message,J=await this.routeToTeammate($.agentId,Q,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=J,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:m.RunCompleted,run:{...$}})}catch(Q){let J=Q instanceof Error?Q.message:String(Q??"Unknown error");$.error=J,$.endedAt=new Date;let j=this.members.get($.agentId);if(WU(j,Q))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:m.RunCancelled,run:{...$},reason:J});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:m.RunFailed,run:{...$}})}finally{clearInterval(Z),this.dispatchQueuedRuns()}}listRuns($){let W=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Z)=>{if(!W&&!["running","queued"].includes(Z.status))return!1;if($?.status&&Z.status!==$.status)return!1;if($?.agentId&&Z.agentId!==$.agentId)return!1;return!0}).map((Z)=>({...Z}))}getRun($){let W=this.runs.get($);return W?{...W}:void 0}async awaitRun($,W=250){let Z=this.runs.get($);if(!Z)throw Error(`Run "${$}" was not found`);while(Z.status==="queued"||Z.status==="running")await QU(W);return{...Z}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((W)=>["queued","running"].includes(W.status)))await QU($);return this.listRuns()}cancelRun($,W){let Z=this.runs.get($);if(!Z)throw Error(`Run "${$}" was not found`);if(Z.status==="completed"||Z.status==="failed")return{...Z};Z.status="cancelled",Z.error=W,Z.endedAt=new Date,Z.currentActivity="cancelled";let Q=this.runQueue.indexOf($);if(Q>=0)this.runQueue.splice(Q,1);return this.emitEvent({type:m.RunCancelled,run:{...Z},reason:W}),{...Z}}recoverActiveRuns($="runtime_recovered"){let W=[];for(let Z of this.runs.values()){if(!["queued","running"].includes(Z.status))continue;let Q=this.members.get(Z.agentId);if(!Q||Q.role!=="teammate"||!Q.agent){Z.status="interrupted",Z.error="teammate_unavailable_after_recovery",Z.endedAt=new Date,Z.currentActivity="interrupted",this.emitEvent({type:m.RunInterrupted,run:{...Z},reason:Z.error});continue}let J=new Date;if(Z.status="queued",Z.error=void 0,Z.endedAt=void 0,Z.heartbeatAt=J,Z.lastProgressAt=J,Z.lastProgressMessage=$,Z.currentActivity=ZU,!this.runQueue.includes(Z.id))this.runQueue.push(Z.id);W.push({...Z}),this.emitEvent({type:m.RunQueued,run:{...Z}})}return this.dispatchQueuedRuns(),W}markStaleRunsInterrupted($="runtime_recovered"){let W=[];for(let Z of this.runs.values()){if(!["queued","running"].includes(Z.status))continue;Z.status="interrupted",Z.error=$,Z.endedAt=new Date,Z.currentActivity="interrupted",W.push({...Z}),this.emitEvent({type:m.RunInterrupted,run:{...Z},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),W}sendMessage($,W,Z,Q,J){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let j=this.members.get(W);if(!j)throw Error(`Unknown recipient "${W}"`);let X={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:W,subject:Z,body:Q,taskId:J,sentAt:new Date};if(this.mailbox.push(X),this.emitEvent({type:m.TeamMessage,message:{...X}}),j.role==="teammate"&&j.runningCount>0&&j.agent)j.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Z}". Use the team_read_mailbox tool to read it at your convenience.`;return{...X}}broadcast($,W,Z,Q){let J=[];for(let j of this.members.values()){if(j.agentId===$)continue;if(j.role==="lead")continue;J.push(this.sendMessage($,j.agentId,W,Z,Q?.taskId))}return J}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let W={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:$.agentId,taskId:$.taskId,kind:$.kind,summary:$.summary,evidence:$.evidence,nextAction:$.nextAction};this.missionLog.push(W);let Z=this.members.get($.agentId);if(Z)Z.lastMissionAt=Date.now(),Z.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:m.TeamMissionLog,entry:{...W}}),{...W}}createOutcome($){let W={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:$.title,status:"draft",requiredSections:[...new Set($.requiredSections)],createdBy:$.createdBy,createdAt:new Date};return this.outcomes.set(W.id,W),this.emitEvent({type:m.OutcomeCreated,outcome:{...W}}),{...W}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let W=this.outcomes.get($.outcomeId);if(!W)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!W.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Z={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(Z.id,Z),W.status==="draft")W.status="in_review";return this.emitEvent({type:m.OutcomeFragmentAttached,fragment:{...Z}}),{...Z}}reviewOutcomeFragment($){let W=this.outcomeFragments.get($.fragmentId);if(!W)throw Error(`Fragment "${$.fragmentId}" was not found`);return W.status=$.approved?"reviewed":"rejected",W.reviewedBy=$.reviewedBy,W.reviewedAt=new Date,this.emitEvent({type:m.OutcomeFragmentReviewed,fragment:{...W}}),{...W}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((W)=>W.outcomeId===$).map((W)=>({...W}))}finalizeOutcome($){let W=this.outcomes.get($);if(!W)throw Error(`Outcome "${$}" was not found`);let Z=this.listOutcomeFragments($);for(let Q of W.requiredSections)if(!Z.some((j)=>j.section===Q&&j.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${Q}" is missing a reviewed fragment.`);return W.status="finalized",W.finalizedAt=new Date,this.emitEvent({type:m.OutcomeFinalized,outcome:{...W}}),{...W}}cleanup(){for(let $ of this.members.values())if($.role==="teammate"&&$.runningCount>0)throw Error(`Cannot cleanup team while teammate "${$.agentId}" is still running`);if(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let $ of this.members.values())if($.role==="teammate")try{$.agent?.abort()}catch(W){if(!Mj(W))throw W}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[$,W]of this.members.entries())if(W.role==="teammate")this.members.delete($)}requireTask($){let W=this.tasks.get($);if(!W)throw Error(`Task "${$}" was not found`);return W}assertDependenciesResolved($){let W=this.getUnresolvedDependencies($);if(W.length>0)throw Error(`Task "${$.id}" is blocked by "${W[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((W)=>{let Z=this.tasks.get(W);return!Z||Z.status!=="completed"})}trackMeaningfulEvent($,W){if(this.recordRunActivityFromAgentEvent($,W),W.type==="iteration_end"&&W.hadToolCalls){this.recordProgressStep($,`Completed iteration ${W.iteration} with ${W.toolCallCount} tool call(s)`);return}if(W.type==="content_end"&&W.contentType==="tool"&&!W.error){this.recordProgressStep($,`Finished tool "${W.toolName??"unknown"}"`);return}if(W.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${W.iterations} iterations)`});return}if(W.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:W.error.message})}recordRunActivityFromAgentEvent($,W){let Z;switch(W.type){case"iteration_start":Z=`iteration_${W.iteration}_started`;break;case"content_start":if(W.contentType==="tool")Z=`running_tool_${W.toolName??"unknown"}`;break;case"content_end":if(W.contentType==="tool")Z=W.error?this.formatProgressErrorActivity(`tool_${W.toolName??"unknown"}_error`,W.error):`finished_tool_${W.toolName??"unknown"}`;break;case"done":Z="finalizing_response";break;case"error":Z=this.formatProgressErrorActivity("run_error",W.error.message);break;default:break}if(!Z)return;for(let Q of this.runs.values()){if(Q.agentId!==$||Q.status!=="running")continue;this.recordRunProgress(Q,Z)}}recordRunProgress($,W){let Z=new Date;$.heartbeatAt=Z,$.lastProgressAt=Z,$.lastProgressMessage=W,$.currentActivity=W,this.emitEvent({type:m.RunProgress,run:{...$},message:W})}formatProgressErrorActivity($,W){let Z=W.replace(/\s+/g," ").trim();if(Z.length===0)return $;let Q=Z.length>240?`${Z.slice(0,237).trimEnd()}...`:Z;return`${$}: ${Q}`}recordProgressStep($,W,Z,Q=!1){this.missionStepCounter++;let J=this.members.get($);if(!J)return;let j=this.missionStepCounter-J.lastMissionStep,X=Date.now()-J.lastMissionAt;if(!Q&&j<this.missionLogIntervalSteps&&X<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Z,kind:"progress",summary:W})}buildMailboxNotification($){if($.length===0)return"";let W=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Z of $)W.push(`--- Message from ${Z.fromAgentId} | subject: ${Z.subject} ---`),W.push(Z.body);return W.push("---"),W.join(`
532
+ `)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function QU($){return new Promise((W)=>setTimeout(W,$))}function E6($,W){let Z=0;for(let Q of $){if(!Q.startsWith(W))continue;let J=Number.parseInt(Q.slice(W.length),10);if(Number.isFinite(J))Z=Math.max(Z,J)}return Z}function Rj($,W){switch(W.type){case"run_queued":case"run_started":$.activeTeamRunIds.add(W.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let Z;if(W.type==="run_failed")Z=W.run.error;else if(W.type==="run_cancelled"||W.type==="run_interrupted")Z=W.run.error??W.reason;$.activeTeamRunIds.delete(W.run.id),$.pendingTeamRunUpdates.push({runId:W.run.id,agentId:W.run.agentId,taskId:W.run.taskId,status:W.type.replace("run_",""),error:Z,iterations:W.run.result?.iterations}),FQ($);break}default:break}}async function Ej($,W,Z){switch(W.type){case"run_progress":await Z("onTeamTaskProgress",$,W.run.agentId,W.message,{kind:W.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(W.event.type==="content_start"&&W.event.contentType==="text"&&typeof W.event.text==="string"){let Q=W.event.text.replace(/\s+/g," ").trim().slice(0,120);if(Q)await Z("onTeamTaskProgress",$,W.agentId,Q,{kind:"text"})}break;case"task_start":await Z("onTeamTaskStart",$,W.agentId,W.message);break;case"task_end":{if(W.error)await Z("onTeamTaskEnd",$,W.agentId,"failed",`[error] ${W.error.message}`,void 0,W.messages);else if(W.result?.finishReason==="aborted")await Z("onTeamTaskEnd",$,W.agentId,"cancelled","[done] aborted",W.result,W.result.messages);else await Z("onTeamTaskEnd",$,W.agentId,"completed",`[done] ${W.result?.finishReason??"completed"}`,W.result,W.result?.messages);break}default:break}}function wj($,W,Z,Q){if(!$.runtime.teamRuntime)return;let J=$.runtime.teamRuntime.getTeamName();Q({type:"team_progress",payload:{sessionId:W,teamName:J,lifecycle:R6({teamName:J,sessionId:W,event:Z}),summary:N6(J,$.runtime.teamRuntime.exportState())}})}function XW($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function Cj($,W){if($.aborting)return!1;if(!(W==="completed"||W==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&XW($)}function FQ($){let W=$.teamRunWaiters.splice(0);for(let Z of W)Z()}async function Pj($){while(!0){if($.aborting)return[];if($.pendingTeamRunUpdates.length>0){let W=[...$.pendingTeamRunUpdates];return $.pendingTeamRunUpdates.length=0,W}if($.activeTeamRunIds.size===0)return[];await new Promise((W)=>{$.teamRunWaiters.push(W)})}}function Sj($,W){let Z=W.map((j)=>{let X=[`- ${j.runId} (${j.agentId}) -> ${j.status}`];if(j.taskId)X.push(` task=${j.taskId}`);if(typeof j.iterations==="number")X.push(` iterations=${j.iterations}`);if(j.error)X.push(` error=${j.error}`);return X.join("")}),Q=$.activeTeamRunIds.size,J=Q>0?`There are still ${Q} teammate run(s) in progress. Continue coordination and decide whether to wait for more updates.`:"No teammate runs are currently in progress. Continue coordination using these updates.";return YW(`System-delivered teammate async run updates:
533
533
  ${Z.join(`
534
534
  `)}
535
535
 
536
- ${J}`,$.config.mode)}function jW($,W){return Lb($,W==="plan"?"plan":W==="yolo"?"yolo":"act")}var Cj=4;class j${adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor($,W={}){this.adapter=$;this.manifestStore=new _j($,W.messagesArtifactUploader,W.logger),this.teamChildren=new BQ($,this.manifestStore,(Z,Q,J)=>this.toPersistedMessages(Z,Q,J),j$.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,W,Z){if(!$)return;return W?d9(W.messages,W,Z):u9($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,W){this.manifestStore.writeSessionManifest($,W)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let W=$.startedAt??X0(),Z=$.sessionId.trim(),Q=Z.length>0?Z:`${Date.now()}_${Tb(5)}`,J=this.manifestStore.artifacts.sessionMessagesPath(Q),j=this.manifestStore.artifacts.sessionCompactionPath(Q),X=this.manifestStore.artifacts.sessionManifestPath(Q),Y=r4({metadata:$.metadata,prompt:$.prompt}),V={version:1,session_id:Q,source:$.source,pid:$.pid,started_at:W,status:"running",interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt?.trim()||void 0,metadata:Y,messages_path:J};return await this.adapter.upsertSession({sessionId:Q,source:$.source,pid:$.pid,startedAt:W,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:null,parentAgentId:null,agentId:null,conversationId:null,isSubagent:!1,prompt:V.prompt??null,metadata:w$(V.metadata),hookPath:"",messagesPath:J,updatedAt:X0()}),this.manifestStore.initializeMessagesFile(Q,J,W),this.manifestStore.writeSessionManifest(X,V),{manifestPath:X,messagesPath:J,compactionPath:j,manifest:V}}async updateSessionStatus($,W,Z){let Q;if((await QG(()=>this.adapter.getSession($),async(j)=>{return Q=F0(W)?void 0:X0(),this.adapter.updateSession({sessionId:$,status:W,endedAt:Q??null,exitCode:F0(W)?null:typeof Z==="number"?Z:null,expectedStatusLock:j.statusLock})},Cj)).updated){if(W==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:Q}}return{updated:!1}}async updateSession($){for(let W=0;W<Cj;W++){let Z=await this.adapter.getSession($.sessionId);if(!Z)return{updated:!1};let Q=Z.metadata??void 0,J=$.metadata!==void 0?w$($.metadata)??{}:w$(Q)??{},j=E2(typeof Q?.title==="string"?Q.title:void 0),X=$.title!==void 0?E2($.title):j??C3($.prompt);if(X)J.title=X;else delete J.title;let Y=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:Y?Object.keys(J).length>0?J:null:void 0,title:X,expectedStatusLock:Z.statusLock})).updated)continue;let{path:B,manifest:H}=this.manifestStore.readManifestFile($.sessionId);if(H){if($.prompt!==void 0)H.prompt=$.prompt??void 0;let G=$.metadata!==void 0?w$($.metadata)??{}:w$(H.metadata)??{};if(X)G.title=X;H.metadata=Object.keys(G).length>0?G:void 0,this.manifestStore.writeSessionManifest(B,H)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,W){return this.teamChildren.appendSubagentHookAudit(W),Promise.resolve()}persistSessionMessages($,W,Z){let Q=u9(W);return this.manifestStore.persistSessionMessages($,Q,Z)}async readSessionCompactionState($){return await this.manifestStore.readSessionCompactionState($)}async persistSessionCompactionState($,W){await this.manifestStore.persistSessionCompactionState($,W)}async deleteSessionCompactionState($){await this.manifestStore.deleteSessionCompactionState($)}applySubagentStatus($,W){return this.teamChildren.applySubagentStatus($,W)}applySubagentStatusBySessionId($,W){return this.teamChildren.applySubagentStatusBySessionId($,W)}applyStatusToRunningChildSessions($,W){return this.teamChildren.applyStatusToRunningChildSessions($,W)}onTeamTaskStart($,W,Z){return this.teamChildren.onTeamTaskStart($,W,Z)}onTeamTaskEnd($,W,Z,Q,J,j){return this.teamChildren.onTeamTaskEnd($,W,Z,Q,J,j)}onTeamTaskProgress($,W,Z,Q){return this.teamChildren.onTeamTaskProgress($,W,Z,Q)}handleSubAgentStart($,W){return this.teamChildren.handleSubAgentStart($,W)}handleSubAgentEnd($,W){return this.teamChildren.handleSubAgentEnd($,W)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(W){return typeof W==="object"&&W!==null&&"code"in W&&W.code==="EPERM"}}async reconcileDeadRunningSession($){if(F0($.status)===!1||this.isPidAlive($.pid))return $;let W=X0(),Z=j$.STALE_REASON;for(let Q=0;Q<Cj;Q++){let J=await this.adapter.getSession($.sessionId);if(!J)return;if(F0(J.status)===!1)return J;let j={...J.metadata??{},terminal_marker:Z,terminal_marker_at:W,terminal_marker_pid:J.pid,terminal_marker_source:j$.STALE_SOURCE},X=await this.adapter.updateSession({sessionId:J.sessionId,status:"failed",endedAt:W,exitCode:1,metadata:j,expectedStatusLock:J.statusLock});if(!X.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(J.sessionId,"failed");let Y=ZG(J,{status:"failed",endedAt:W,exitCode:1,metadata:j}),{path:V}=this.manifestStore.readManifestFile(J.sessionId);return this.manifestStore.writeSessionManifest(V,Y),this.manifestStore.appendStaleSessionHookLog(W,J.sessionId,J.pid,Z,j$.STALE_SOURCE),{...J,status:"failed",endedAt:W,exitCode:1,metadata:j,statusLock:X.statusLock,updatedAt:W}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let W=Math.max(1,Math.floor($)),Z=Math.min(W*5,2000);await this.reconcileDeadSessions(Z);let Q=(await this.adapter.listSessions({limit:Z})).slice(0,W),J=await Promise.all(Q.map((j)=>this.manifestStore.readSessionManifestTitle(j.sessionId)));return Q.map((j,X)=>{let Y=w$(j.metadata??void 0),V=E2(J[X]),B=V?{...Y??{},title:V}:Y;return{...j,metadata:B}})}async reconcileDeadSessions($=2000){let W=Math.max(1,Math.floor($)),Z=(await Promise.all(["idle","running","pending"].map((J)=>this.adapter.listSessions({limit:W,status:J})))).flat(),Q=0;for(let J of Z){let j=await this.reconcileDeadRunningSession(J);if(j&&j.status!==J.status)Q++}return Q}async deleteSession($){let W=$.trim();if(!W)throw Error("session id is required");let Z=await this.adapter.getSession(W);if(!Z)return{deleted:!1};if(await this.adapter.deleteSession(W,!1),!Z.isSubagent){let Q=await this.adapter.listSessions({limit:2000,parentSessionId:W});await this.adapter.deleteSession(W,!0),await Promise.allSettled(Q.map(async(J)=>{await o3(J.cwd,J.sessionId),F5(J.messagesPath),await this.deleteSessionCompactionStateIfExists(J.sessionId),F5(this.manifestStore.artifacts.sessionManifestPath(J.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(J.sessionId)}))}if(await o3(Z.cwd,W),F5(Z.messagesPath),await this.deleteSessionCompactionStateIfExists(W),F5(this.manifestStore.artifacts.sessionManifestPath(W,!1)),Z.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(W);else{let Q=new Set([this.manifestStore.artifacts.sessionArtifactsDir(W)]);for(let J of[Z.messagesPath])if(typeof J==="string"&&J.trim().length>0)Q.add(Ob(J));for(let J of Q)this.manifestStore.artifacts.removeDir(J)}return{deleted:!0}}async deleteSessionCompactionStateIfExists($){try{await this.manifestStore.deleteSessionCompactionState($)}catch{}}}function Sj(){return new Date().toISOString()}function ZU($,W){let Z=`${$}.tmp`;Mb(Z,`${JSON.stringify(W,null,2)}
537
- `,"utf8"),qb(Z,$)}class QU{sessionsDirPath;constructor($=Rb()){this.sessionsDirPath=$}ensureSessionsDir(){if(!Pj(this.sessionsDirPath))zb(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return WU(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return WU(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!Pj($))return{version:1,sessions:{}};try{let W=JSON.parse($U($,"utf8"));if(W?.version===1&&W.sessions)return W}catch{}return{version:1,sessions:{}}}writeIndex($){ZU(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!Pj($))return{version:1,nextId:1,requests:[]};try{let W=JSON.parse($U($,"utf8"));if(W?.version===1&&typeof W.nextId==="number"&&Array.isArray(W.requests))return W}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){ZU(this.spawnQueuePath(),$)}async upsertSession($){let W=this.readIndex();W.sessions[$.sessionId]=$,this.writeIndex(W)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((W)=>$.parentSessionId!==void 0?W.parentSessionId===$.parentSessionId:!0).filter((W)=>$.status!==void 0?W.status===$.status:!0).sort((W,Z)=>Z.startedAt.localeCompare(W.startedAt)).slice(0,$.limit)}async updateSession($){let W=this.readIndex(),Z=W.sessions[$.sessionId];if(!Z)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&Z.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:Z.statusLock};let Q=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:Z.statusLock,J={...Z,status:$.status??Z.status,endedAt:$.endedAt!==void 0?$.endedAt:Z.endedAt??null,exitCode:$.exitCode!==void 0?$.exitCode:Z.exitCode??null,prompt:$.prompt!==void 0?$.prompt:Z.prompt??null,metadata:$.metadata!==void 0?$.metadata??null:Z.metadata??null,parentSessionId:$.parentSessionId!==void 0?$.parentSessionId??null:Z.parentSessionId??null,parentAgentId:$.parentAgentId!==void 0?$.parentAgentId??null:Z.parentAgentId??null,agentId:$.agentId!==void 0?$.agentId??null:Z.agentId??null,conversationId:$.conversationId!==void 0?$.conversationId??null:Z.conversationId??null,statusLock:Q,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:Z.isSubagent,updatedAt:Sj()};if($.setRunning)J.status="running",J.endedAt=null,J.exitCode=null;return W.sessions[$.sessionId]=J,this.writeIndex(W),{updated:!0,statusLock:J.statusLock}}async deleteSession($,W){let Z=this.readIndex();if(!Z.sessions[$])return!1;if(delete Z.sessions[$],W){for(let J of Object.values(Z.sessions))if(J.parentSessionId===$)delete Z.sessions[J.sessionId]}return this.writeIndex(Z),!0}async enqueueSpawnRequest($){let W=this.readQueue();W.requests.push({id:W.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:Sj()}),W.nextId+=1,this.writeQueue(W)}async claimSpawnRequest($,W){let Z=this.readQueue(),Q=Z.requests.find((J)=>J.rootSessionId===$&&J.parentAgentId===W&&!J.consumedAt);if(!Q)return;return Q.consumedAt=Sj(),this.writeQueue(Z),Q.task}}class bj extends j${constructor($,W={}){super(new QU($),W)}ensureSessionsDir(){return super.ensureSessionsDir()}}var XU={};E(XU,{CoreSessionService:()=>S1});import{existsSync as Nb,mkdirSync as Eb}from"node:fs";import{resolveSessionDataDir as wb}from"@cline/shared/storage";var yj=`
536
+ ${J}`,$.config.mode)}function YW($,W){return Mb($,W==="plan"?"plan":W==="yolo"?"yolo":"act")}var bj=4;class Y${adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor($,W={}){this.adapter=$;this.manifestStore=new Tj($,W.messagesArtifactUploader,W.logger),this.teamChildren=new GQ($,this.manifestStore,(Z,Q,J)=>this.toPersistedMessages(Z,Q,J),Y$.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,W,Z){if(!$)return;return W?l9(W.messages,W,Z):d9($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,W){this.manifestStore.writeSessionManifest($,W)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let W=$.startedAt??X0(),Z=$.sessionId.trim(),Q=Z.length>0?Z:`${Date.now()}_${Rb(5)}`,J=this.manifestStore.artifacts.sessionMessagesPath(Q),j=this.manifestStore.artifacts.sessionCompactionPath(Q),X=this.manifestStore.artifacts.sessionManifestPath(Q),Y=n4({metadata:$.metadata,prompt:$.prompt}),V={version:1,session_id:Q,source:$.source,pid:$.pid,started_at:W,status:"running",interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt?.trim()||void 0,metadata:Y,messages_path:J};return await this.adapter.upsertSession({sessionId:Q,source:$.source,pid:$.pid,startedAt:W,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:null,parentAgentId:null,agentId:null,conversationId:null,isSubagent:!1,prompt:V.prompt??null,metadata:C$(V.metadata),hookPath:"",messagesPath:J,updatedAt:X0()}),this.manifestStore.initializeMessagesFile(Q,J,W),this.manifestStore.writeSessionManifest(X,V),{manifestPath:X,messagesPath:J,compactionPath:j,manifest:V}}async updateSessionStatus($,W,Z){let Q;if((await XG(()=>this.adapter.getSession($),async(j)=>{return Q=K0(W)?void 0:X0(),this.adapter.updateSession({sessionId:$,status:W,endedAt:Q??null,exitCode:K0(W)?null:typeof Z==="number"?Z:null,expectedStatusLock:j.statusLock})},bj)).updated){if(W==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:Q}}return{updated:!1}}async updateSession($){for(let W=0;W<bj;W++){let Z=await this.adapter.getSession($.sessionId);if(!Z)return{updated:!1};let Q=Z.metadata??void 0,J=$.metadata!==void 0?C$($.metadata)??{}:C$(Q)??{},j=E2(typeof Q?.title==="string"?Q.title:void 0),X=$.title!==void 0?E2($.title):j??P3($.prompt);if(X)J.title=X;else delete J.title;let Y=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:Y?Object.keys(J).length>0?J:null:void 0,title:X,expectedStatusLock:Z.statusLock})).updated)continue;let{path:B,manifest:H}=this.manifestStore.readManifestFile($.sessionId);if(H){if($.prompt!==void 0)H.prompt=$.prompt??void 0;let G=$.metadata!==void 0?C$($.metadata)??{}:C$(H.metadata)??{};if(X)G.title=X;H.metadata=Object.keys(G).length>0?G:void 0,this.manifestStore.writeSessionManifest(B,H)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,W){return this.teamChildren.appendSubagentHookAudit(W),Promise.resolve()}persistSessionMessages($,W,Z){let Q=d9(W);return this.manifestStore.persistSessionMessages($,Q,Z)}async readSessionCompactionState($){return await this.manifestStore.readSessionCompactionState($)}async persistSessionCompactionState($,W){await this.manifestStore.persistSessionCompactionState($,W)}async deleteSessionCompactionState($){await this.manifestStore.deleteSessionCompactionState($)}applySubagentStatus($,W){return this.teamChildren.applySubagentStatus($,W)}applySubagentStatusBySessionId($,W){return this.teamChildren.applySubagentStatusBySessionId($,W)}applyStatusToRunningChildSessions($,W){return this.teamChildren.applyStatusToRunningChildSessions($,W)}onTeamTaskStart($,W,Z){return this.teamChildren.onTeamTaskStart($,W,Z)}onTeamTaskEnd($,W,Z,Q,J,j){return this.teamChildren.onTeamTaskEnd($,W,Z,Q,J,j)}onTeamTaskProgress($,W,Z,Q){return this.teamChildren.onTeamTaskProgress($,W,Z,Q)}handleSubAgentStart($,W){return this.teamChildren.handleSubAgentStart($,W)}handleSubAgentEnd($,W){return this.teamChildren.handleSubAgentEnd($,W)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(W){return typeof W==="object"&&W!==null&&"code"in W&&W.code==="EPERM"}}async reconcileDeadRunningSession($){if(K0($.status)===!1||this.isPidAlive($.pid))return $;let W=X0(),Z=Y$.STALE_REASON;for(let Q=0;Q<bj;Q++){let J=await this.adapter.getSession($.sessionId);if(!J)return;if(K0(J.status)===!1)return J;let j={...J.metadata??{},terminal_marker:Z,terminal_marker_at:W,terminal_marker_pid:J.pid,terminal_marker_source:Y$.STALE_SOURCE},X=await this.adapter.updateSession({sessionId:J.sessionId,status:"failed",endedAt:W,exitCode:1,metadata:j,expectedStatusLock:J.statusLock});if(!X.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(J.sessionId,"failed");let Y=jG(J,{status:"failed",endedAt:W,exitCode:1,metadata:j}),{path:V}=this.manifestStore.readManifestFile(J.sessionId);return this.manifestStore.writeSessionManifest(V,Y),this.manifestStore.appendStaleSessionHookLog(W,J.sessionId,J.pid,Z,Y$.STALE_SOURCE),{...J,status:"failed",endedAt:W,exitCode:1,metadata:j,statusLock:X.statusLock,updatedAt:W}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let W=Math.max(1,Math.floor($)),Z=Math.min(W*5,2000);await this.reconcileDeadSessions(Z);let Q=(await this.adapter.listSessions({limit:Z})).slice(0,W),J=await Promise.all(Q.map((j)=>this.manifestStore.readSessionManifestTitle(j.sessionId)));return Q.map((j,X)=>{let Y=C$(j.metadata??void 0),V=E2(J[X]),B=V?{...Y??{},title:V}:Y;return{...j,metadata:B}})}async reconcileDeadSessions($=2000){let W=Math.max(1,Math.floor($)),Z=(await Promise.all(["idle","running","pending"].map((J)=>this.adapter.listSessions({limit:W,status:J})))).flat(),Q=0;for(let J of Z){let j=await this.reconcileDeadRunningSession(J);if(j&&j.status!==J.status)Q++}return Q}async deleteSession($){let W=$.trim();if(!W)throw Error("session id is required");let Z=await this.adapter.getSession(W);if(!Z)return{deleted:!1};if(await this.adapter.deleteSession(W,!1),!Z.isSubagent){let Q=await this.adapter.listSessions({limit:2000,parentSessionId:W});await this.adapter.deleteSession(W,!0),await Promise.allSettled(Q.map(async(J)=>{await s3(J.cwd,J.sessionId),U5(J.messagesPath),await this.deleteSessionCompactionStateIfExists(J.sessionId),U5(this.manifestStore.artifacts.sessionManifestPath(J.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(J.sessionId)}))}if(await s3(Z.cwd,W),U5(Z.messagesPath),await this.deleteSessionCompactionStateIfExists(W),U5(this.manifestStore.artifacts.sessionManifestPath(W,!1)),Z.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(W);else{let Q=new Set([this.manifestStore.artifacts.sessionArtifactsDir(W)]);for(let J of[Z.messagesPath])if(typeof J==="string"&&J.trim().length>0)Q.add(Nb(J));for(let J of Q)this.manifestStore.artifacts.removeDir(J)}return{deleted:!0}}async deleteSessionCompactionStateIfExists($){try{await this.manifestStore.deleteSessionCompactionState($)}catch{}}}function hj(){return new Date().toISOString()}function VU($,W){let Z=`${$}.tmp`;Cb(Z,`${JSON.stringify(W,null,2)}
537
+ `,"utf8"),wb(Z,$)}class BU{sessionsDirPath;constructor($=Pb()){this.sessionsDirPath=$}ensureSessionsDir(){if(!yj(this.sessionsDirPath))Eb(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return YU(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return YU(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!yj($))return{version:1,sessions:{}};try{let W=JSON.parse(XU($,"utf8"));if(W?.version===1&&W.sessions)return W}catch{}return{version:1,sessions:{}}}writeIndex($){VU(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!yj($))return{version:1,nextId:1,requests:[]};try{let W=JSON.parse(XU($,"utf8"));if(W?.version===1&&typeof W.nextId==="number"&&Array.isArray(W.requests))return W}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){VU(this.spawnQueuePath(),$)}async upsertSession($){let W=this.readIndex();W.sessions[$.sessionId]=$,this.writeIndex(W)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((W)=>$.parentSessionId!==void 0?W.parentSessionId===$.parentSessionId:!0).filter((W)=>$.status!==void 0?W.status===$.status:!0).sort((W,Z)=>Z.startedAt.localeCompare(W.startedAt)).slice(0,$.limit)}async updateSession($){let W=this.readIndex(),Z=W.sessions[$.sessionId];if(!Z)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&Z.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:Z.statusLock};let Q=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:Z.statusLock,J={...Z,status:$.status??Z.status,endedAt:$.endedAt!==void 0?$.endedAt:Z.endedAt??null,exitCode:$.exitCode!==void 0?$.exitCode:Z.exitCode??null,prompt:$.prompt!==void 0?$.prompt:Z.prompt??null,metadata:$.metadata!==void 0?$.metadata??null:Z.metadata??null,parentSessionId:$.parentSessionId!==void 0?$.parentSessionId??null:Z.parentSessionId??null,parentAgentId:$.parentAgentId!==void 0?$.parentAgentId??null:Z.parentAgentId??null,agentId:$.agentId!==void 0?$.agentId??null:Z.agentId??null,conversationId:$.conversationId!==void 0?$.conversationId??null:Z.conversationId??null,statusLock:Q,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:Z.isSubagent,updatedAt:hj()};if($.setRunning)J.status="running",J.endedAt=null,J.exitCode=null;return W.sessions[$.sessionId]=J,this.writeIndex(W),{updated:!0,statusLock:J.statusLock}}async deleteSession($,W){let Z=this.readIndex();if(!Z.sessions[$])return!1;if(delete Z.sessions[$],W){for(let J of Object.values(Z.sessions))if(J.parentSessionId===$)delete Z.sessions[J.sessionId]}return this.writeIndex(Z),!0}async enqueueSpawnRequest($){let W=this.readQueue();W.requests.push({id:W.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:hj()}),W.nextId+=1,this.writeQueue(W)}async claimSpawnRequest($,W){let Z=this.readQueue(),Q=Z.requests.find((J)=>J.rootSessionId===$&&J.parentAgentId===W&&!J.consumedAt);if(!Q)return;return Q.consumedAt=hj(),this.writeQueue(Z),Q.task}}class kj extends Y${constructor($,W={}){super(new BU($),W)}ensureSessionsDir(){return super.ensureSessionsDir()}}var KU={};w(KU,{CoreSessionService:()=>y1});import{existsSync as Sb,mkdirSync as bb}from"node:fs";import{resolveSessionDataDir as yb}from"@cline/shared/storage";var Ij=`
538
538
  session_id AS sessionId,
539
539
  source,
540
540
  pid,
@@ -561,52 +561,52 @@ ${J}`,$.config.mode)}function jW($,W){return Lb($,W==="plan"?"plan":W==="yolo"?"
561
561
  metadata_json AS metadata,
562
562
  hook_path AS hookPath,
563
563
  messages_path AS messagesPath,
564
- updated_at AS updatedAt`;function hj($){$.interactive=$.interactive===1,$.enableTools=$.enableTools===1,$.enableSpawn=$.enableSpawn===1,$.enableTeams=$.enableTeams===1,$.isSubagent=$.isSubagent===1;let W=$.metadata;if(typeof W==="string"&&W.trim())try{let Z=JSON.parse(W);$.metadata=Z&&typeof Z==="object"&&!Array.isArray(Z)?Z:null}catch{$.metadata=null}else $.metadata=null;return $}function kj($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function JU($){return{...$,tasks:$.tasks.map((W)=>({...W,createdAt:new Date(W.createdAt),updatedAt:new Date(W.updatedAt)})),mailbox:$.mailbox.map((W)=>({...W,sentAt:new Date(W.sentAt),readAt:W.readAt?new Date(W.readAt):void 0})),missionLog:$.missionLog.map((W)=>({...W,ts:new Date(W.ts)})),runs:($.runs??[]).map((W)=>({...W,startedAt:new Date(W.startedAt),endedAt:W.endedAt?new Date(W.endedAt):void 0,nextAttemptAt:W.nextAttemptAt?new Date(W.nextAttemptAt):void 0,heartbeatAt:W.heartbeatAt?new Date(W.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),finalizedAt:W.finalizedAt?new Date(W.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),reviewedAt:W.reviewedAt?new Date(W.reviewedAt):void 0}))}}class jU{store;sessionsDirPath;constructor($,W=wb()){this.store=$;this.sessionsDirPath=W}ensureSessionsDir(){if(!Nb(this.sessionsDirPath))Eb(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
564
+ updated_at AS updatedAt`;function xj($){$.interactive=$.interactive===1,$.enableTools=$.enableTools===1,$.enableSpawn=$.enableSpawn===1,$.enableTeams=$.enableTeams===1,$.isSubagent=$.isSubagent===1;let W=$.metadata;if(typeof W==="string"&&W.trim())try{let Z=JSON.parse(W);$.metadata=Z&&typeof Z==="object"&&!Array.isArray(Z)?Z:null}catch{$.metadata=null}else $.metadata=null;return $}function gj($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function HU($){return{...$,tasks:$.tasks.map((W)=>({...W,createdAt:new Date(W.createdAt),updatedAt:new Date(W.updatedAt)})),mailbox:$.mailbox.map((W)=>({...W,sentAt:new Date(W.sentAt),readAt:W.readAt?new Date(W.readAt):void 0})),missionLog:$.missionLog.map((W)=>({...W,ts:new Date(W.ts)})),runs:($.runs??[]).map((W)=>({...W,startedAt:new Date(W.startedAt),endedAt:W.endedAt?new Date(W.endedAt):void 0,nextAttemptAt:W.nextAttemptAt?new Date(W.nextAttemptAt):void 0,heartbeatAt:W.heartbeatAt?new Date(W.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),finalizedAt:W.finalizedAt?new Date(W.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),reviewedAt:W.reviewedAt?new Date(W.reviewedAt):void 0}))}}class GU{store;sessionsDirPath;constructor($,W=yb()){this.store=$;this.sessionsDirPath=W}ensureSessionsDir(){if(!Sb(this.sessionsDirPath))bb(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
565
565
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
566
566
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
567
567
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
568
568
  metadata_json, transcript_path, hook_path, messages_path, updated_at
569
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,$.statusLock,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.isSubagent?1:0,$.prompt??null,kj($.metadata),"",$.hookPath??"",$.messagesPath??null,$.updatedAt])}async getSession($){let W=this.store.queryOne(`SELECT ${yj} FROM sessions WHERE session_id = ?`,[$]);return W?hj(W):void 0}async listSessions($){let W=[],Z=[];if($.parentSessionId)W.push("parent_session_id = ?"),Z.push($.parentSessionId);if($.status)W.push("status = ?"),Z.push($.status);let Q=W.length>0?`WHERE ${W.join(" AND ")}`:"";return this.store.queryAll(`SELECT ${yj}
569
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,$.statusLock,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.isSubagent?1:0,$.prompt??null,gj($.metadata),"",$.hookPath??"",$.messagesPath??null,$.updatedAt])}async getSession($){let W=this.store.queryOne(`SELECT ${Ij} FROM sessions WHERE session_id = ?`,[$]);return W?xj(W):void 0}async listSessions($){let W=[],Z=[];if($.parentSessionId)W.push("parent_session_id = ?"),Z.push($.parentSessionId);if($.status)W.push("status = ?"),Z.push($.status);let Q=W.length>0?`WHERE ${W.join(" AND ")}`:"";return this.store.queryAll(`SELECT ${Ij}
570
570
  FROM sessions
571
571
  ${Q}
572
572
  ORDER BY started_at DESC
573
- LIMIT ?`,[...Z,$.limit]).map(hj)}async updateSession($){if($.setRunning){if($.expectedStatusLock===void 0)return{updated:!1,statusLock:0};return{updated:(this.store.run(`UPDATE sessions
573
+ LIMIT ?`,[...Z,$.limit]).map(xj)}async updateSession($){if($.setRunning){if($.expectedStatusLock===void 0)return{updated:!1,statusLock:0};return{updated:(this.store.run(`UPDATE sessions
574
574
  SET status = 'running', ended_at = NULL, exit_code = NULL, updated_at = ?, status_lock = ?,
575
575
  parent_session_id = ?, parent_agent_id = ?, agent_id = ?, conversation_id = ?, is_subagent = 1,
576
576
  prompt = COALESCE(prompt, ?)
577
- WHERE session_id = ? AND status_lock = ?`,[X0(),$.expectedStatusLock+1,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.prompt??null,$.sessionId,$.expectedStatusLock]).changes??0)>0,statusLock:$.expectedStatusLock+1}}let W=[],Z=[];if($.status!==void 0)W.push("status = ?"),Z.push($.status);if($.endedAt!==void 0)W.push("ended_at = ?"),Z.push($.endedAt);if($.exitCode!==void 0)W.push("exit_code = ?"),Z.push($.exitCode);if($.prompt!==void 0)W.push("prompt = ?"),Z.push($.prompt??null);if($.metadata!==void 0)W.push("metadata_json = ?"),Z.push(kj($.metadata));if($.parentSessionId!==void 0)W.push("parent_session_id = ?"),Z.push($.parentSessionId??null);if($.parentAgentId!==void 0)W.push("parent_agent_id = ?"),Z.push($.parentAgentId??null);if($.agentId!==void 0)W.push("agent_id = ?"),Z.push($.agentId??null);if($.conversationId!==void 0)W.push("conversation_id = ?"),Z.push($.conversationId??null);if(W.length===0){let X=await this.getSession($.sessionId);return{updated:!!X,statusLock:X?.statusLock??0}}let Q=0;if($.expectedStatusLock!==void 0)Q=$.expectedStatusLock+1,W.push("status_lock = ?"),Z.push(Q);W.push("updated_at = ?"),Z.push(X0());let J=`UPDATE sessions SET ${W.join(", ")} WHERE session_id = ?`;if(Z.push($.sessionId),$.expectedStatusLock!==void 0)J+=" AND status_lock = ?",Z.push($.expectedStatusLock);if((this.store.run(J,Z).changes??0)===0)return{updated:!1,statusLock:0};if($.expectedStatusLock===void 0)Q=(await this.getSession($.sessionId))?.statusLock??0;return{updated:!0,statusLock:Q}}async deleteSession($,W){let Z=this.store.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(W)this.store.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Z>0}async enqueueSpawnRequest($){this.store.run(`INSERT INTO subagent_spawn_queue (root_session_id, parent_agent_id, task, system_prompt, created_at, consumed_at)
577
+ WHERE session_id = ? AND status_lock = ?`,[X0(),$.expectedStatusLock+1,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.prompt??null,$.sessionId,$.expectedStatusLock]).changes??0)>0,statusLock:$.expectedStatusLock+1}}let W=[],Z=[];if($.status!==void 0)W.push("status = ?"),Z.push($.status);if($.endedAt!==void 0)W.push("ended_at = ?"),Z.push($.endedAt);if($.exitCode!==void 0)W.push("exit_code = ?"),Z.push($.exitCode);if($.prompt!==void 0)W.push("prompt = ?"),Z.push($.prompt??null);if($.metadata!==void 0)W.push("metadata_json = ?"),Z.push(gj($.metadata));if($.parentSessionId!==void 0)W.push("parent_session_id = ?"),Z.push($.parentSessionId??null);if($.parentAgentId!==void 0)W.push("parent_agent_id = ?"),Z.push($.parentAgentId??null);if($.agentId!==void 0)W.push("agent_id = ?"),Z.push($.agentId??null);if($.conversationId!==void 0)W.push("conversation_id = ?"),Z.push($.conversationId??null);if(W.length===0){let X=await this.getSession($.sessionId);return{updated:!!X,statusLock:X?.statusLock??0}}let Q=0;if($.expectedStatusLock!==void 0)Q=$.expectedStatusLock+1,W.push("status_lock = ?"),Z.push(Q);W.push("updated_at = ?"),Z.push(X0());let J=`UPDATE sessions SET ${W.join(", ")} WHERE session_id = ?`;if(Z.push($.sessionId),$.expectedStatusLock!==void 0)J+=" AND status_lock = ?",Z.push($.expectedStatusLock);if((this.store.run(J,Z).changes??0)===0)return{updated:!1,statusLock:0};if($.expectedStatusLock===void 0)Q=(await this.getSession($.sessionId))?.statusLock??0;return{updated:!0,statusLock:Q}}async deleteSession($,W){let Z=this.store.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(W)this.store.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Z>0}async enqueueSpawnRequest($){this.store.run(`INSERT INTO subagent_spawn_queue (root_session_id, parent_agent_id, task, system_prompt, created_at, consumed_at)
578
578
  VALUES (?, ?, ?, ?, ?, NULL)`,[$.rootSessionId,$.parentAgentId,$.task??null,$.systemPrompt??null,X0()])}async claimSpawnRequest($,W){let Z=this.store.queryOne(`SELECT id, task FROM subagent_spawn_queue
579
579
  WHERE root_session_id = ? AND parent_agent_id = ? AND consumed_at IS NULL
580
- ORDER BY id ASC LIMIT 1`,[$,W]);if(!Z||typeof Z.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[X0(),Z.id]),Z.task??void 0}}class S1 extends j${store;constructor($,W={}){super(new jU($,W.sessionArtifactsDir),W);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
580
+ ORDER BY id ASC LIMIT 1`,[$,W]);if(!Z||typeof Z.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[X0(),Z.id]),Z.task??void 0}}class y1 extends Y${store;constructor($,W={}){super(new GU($,W.sessionArtifactsDir),W);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
581
581
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
582
582
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
583
583
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
584
584
  metadata_json, transcript_path, hook_path, messages_path, updated_at
585
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,X0()])}}function Cb($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let W=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(W==="local"||W==="hub"||W==="remote")return W;return"auto"}var XW,YW;function Pb($,W){if($!=="auto"&&$!=="hub")return;if(W.hub?.endpoint?.trim())return;QQ(W.hub?.workspaceRoot?.trim()||W.hub?.cwd?.trim()||process.cwd())}async function Sb($){await $.reconcileDeadSessions?.().catch(()=>{})}function BU($){try{let W=new C1;return W.init(),new S1(W,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(W){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),VU($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:W,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new bj(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function YU($,W,Z){return new b1({sessionService:Z??$.sessionService??BU($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:W,fetch:$.fetch})}async function Ij($){if(XW)return XW;if(YW)return await YW;return YW=(async()=>{return XW=BU($),await Sb(XW),XW})().finally(()=>{YW=void 0}),await YW}async function w6($){let W=u0($.distinctId);$.telemetry?.setDistinctId(W);let Z=Cb($);if(Pb(Z,$),Z==="remote"){let Q=$.remote?.endpoint?.trim();if(!Q)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:Q}),new O6({endpoint:Q,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Z==="hub"){let Q=$.hub?.endpoint?.trim(),J=Q||await o2({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!J)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:J,explicitEndpoint:Q||void 0}),new Q$({url:J,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Z==="auto"){let Q=await s5({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(Q){$.logger?.log("Using discovered local hub runtime host",{url:Q});let J=new Q$({url:Q,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await J.connect(),J}catch(j){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:j}),VU($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:j,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),YU($,W)}return YU($,W)}var FU={};E(FU,{NoOpFeatureFlagsProvider:()=>W8,FeatureFlagsService:()=>$8});import{existsSync as bb,mkdirSync as yb,readFileSync as hb,writeFileSync as kb}from"node:fs";import{dirname as Ib}from"node:path";import{FEATURE_FLAGS as GU,FeatureFlagDefaultValue as xj}from"@cline/shared";var xb=3600000,gb=604800000,KU=1;class $8{provider;telemetry;logger;cacheTtlMs;cacheFilePath;persistentCacheMaxAgeMs;context;cache=new Map;cacheInfo={updateTime:0,userId:null};constructor($){this.provider=$.provider,this.telemetry=$.telemetry,this.logger=$.logger,this.cacheTtlMs=$.cacheTtlMs??xb,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??gb,this.context={...$.context??{}},this.hydrateFromPersistentCache()}setContext($){this.context={...$}}hydrateCache($){this.cacheInfo={updateTime:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload},this.rebuildCacheFromSnapshot($.flagsPayload)}getCacheSnapshot(){return{updateTime:this.cacheInfo.updateTime,userId:this.cacheInfo.userId,flagsPayload:this.cacheInfo.flagsPayload}}async poll($){let W=$??this.context.userId??null,Z=Date.now();if(Z-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===W)return}let Q=this.cacheInfo;this.cacheInfo={updateTime:Z,userId:W||null};try{let J=await this.provider.getAllFlagsAndPayloads({flagKeys:GU.length>0?GU:void 0,context:{...this.context,userId:W}});if(this.cacheInfo.userId!==W)return;this.cacheInfo.flagsPayload=J,this.rebuildCacheFromSnapshot(J),this.writePersistentCache()}catch(J){if(this.cacheInfo.userId!==W)return;throw this.cacheInfo=Q.updateTime?Q:{updateTime:0,userId:null},this.logger?.error?.("Error polling SDK feature flags",{error:J}),J}}hydrateFromPersistentCache(){let $=this.readPersistentCache();if($)this.hydrateCache($)}isFeatureFlagPayload($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every((W)=>this.isFeatureFlagPayload(W));if(typeof $==="object")return Object.values($).every((W)=>this.isFeatureFlagPayload(W));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=Object.entries($).filter(([,Q])=>this.isFeatureFlagPayload(Q));if(W.length===0)return;let Z={};for(let[Q,J]of W)Z[Q]=J;return Z}readPersistentCache(){try{if(!this.cacheFilePath||!bb(this.cacheFilePath))return;let $=JSON.parse(hb(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let W=$;if(W.version!==KU||typeof W.updatedAt!=="number"||!Number.isFinite(W.updatedAt)||Date.now()-W.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:W.updatedAt,userId:W.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(W.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(W.flagsPayload?.featureFlagPayloads)}}}catch($){this.logger?.error?.("Error reading SDK feature flags cache",{error:$});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;yb(Ib(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),W={version:KU,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};kb(this.cacheFilePath,`${JSON.stringify(W,null,2)}
586
- `,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let W=new Map;for(let Z of this.getReturnedFlagKeys($)){let Q=this.getFeatureFlag(Z);W.set(Z,Q??!1)}this.cache=W}getFeatureFlag($){try{let W=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Z=this.cacheInfo.flagsPayload?.featureFlags?.[$],Q=W??Z??xj[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==Q)this.telemetry?.capture({event:v.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Z}});return Q}catch(W){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:W}),xj[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??xj[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,W){if(process.env.IS_TEST==="true")this.cache.set($,W)}async dispose(){await this.provider.dispose()}}class W8{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}T6();var OU={};E(OU,{createCheckpointComparePlan:()=>FQ,compareCheckpointToWorkspace:()=>VW,buildCheckpointWorkspaceDiff:()=>AQ});import{execFile as cb}from"node:child_process";import*as _U from"node:fs/promises";import*as S6 from"node:path";import{promisify as ub}from"node:util";var fU={};E(fU,{trimMessagesToCheckpoint:()=>UU,trimMessagesBeforeCheckpoint:()=>mj,readSessionCheckpointHistory:()=>Z8,findCheckpointForRun:()=>P6,createRestoredCheckpointMetadata:()=>gj,createCheckpointRestorePlan:()=>vj,applyCheckpointToWorktree:()=>cj});import{execFile as mb}from"node:child_process";import{promisify as vb}from"node:util";var C6=vb(mb);function Z8($){let W=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(W?.history)?W.history:[]).filter((Q)=>!!Q&&typeof Q==="object"&&!Array.isArray(Q)).flatMap((Q)=>{let J=String(Q.ref??"").trim(),j=Number(Q.createdAt??0),X=Number(Q.runCount??0);if(J.length===0||!Number.isFinite(j)||!Number.isInteger(X)||X<1)return[];let Y=Q.kind==="stash"||Q.kind==="commit"?Q.kind:void 0;return[{ref:J,createdAt:j,runCount:X,...Y?{kind:Y}:{}}]})}function gj($,W){let Z=Z8($).filter((J)=>J.runCount<=W),Q=Z.at(-1);return Q?{latest:Q,history:Z}:void 0}function P6($,W){return $.reduce((Z,Q)=>{if(Q.runCount>W)return Z;if(!Z||Q.runCount>Z.runCount)return Q;return Z},void 0)}function AU($,W){let Z=0;for(let Q=0;Q<$.length;Q+=1){let J=$[Q];if(J?.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"?J.metadata:void 0)?.kind==="recovery_notice")continue;if(Z+=1,Z===W)return Q}throw Error(`Could not find user message for checkpoint run ${W}`)}function UU($,W){let Z=AU($,W);return $.slice(0,Z+1)}function mj($,W){let Z=AU($,W);return $.slice(0,Z)}function vj($){let W=$.checkpointRunCount;if(!Number.isInteger(W)||W<1)throw Error("checkpointRunCount must be a positive integer");let Z=P6(Z8($.session),W);if(!Z)throw Error(`No checkpoint found at or before run ${W} in session ${$.session.sessionId}`);let Q=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!Q)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Z,cwd:Q,...$.restoreMessages!==!1?{messages:UU($.messages??[],W)}:{}}}async function cj($,W){if((await C6("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await C6("git",["-C",$,"cat-file","-e",`${W.ref}^{commit}`],{windowsHide:!0}),await C6("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await C6("git",["-C",$,"clean","-fd"],{windowsHide:!0}),W.kind==="commit"){await C6("git",["-C",$,"reset","--hard",W.ref],{windowsHide:!0});return}await C6("git",["-C",$,"stash","apply",W.ref],{windowsHide:!0})}var db=ub(cb),lb=52428800;async function KQ($,W){let{stdout:Z}=await db("git",["-C",$,...W],{windowsHide:!0,maxBuffer:lb,encoding:"utf8"});return Z}function DU($){return $.split("\x00").filter(Boolean)}function LU($,W){let Z=S6.resolve($,W),Q=S6.relative($,Z);if(Q.startsWith("..")||S6.isAbsolute(Q))throw Error(`Checkpoint diff path escapes workspace: ${W}`);return Z}async function pb($,W,Z){try{return await KQ($,["show",`${W}:${Z}`])}catch{return""}}async function rb($,W){try{return await _U.readFile(LU($,W),"utf8")}catch{return""}}async function ib($,W){await KQ($,["cat-file","-e",`${W.ref}^{tree}`]);let[Z,Q]=await Promise.all([KQ($,["diff","--name-only","-z",W.ref,"--"]),KQ($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...DU(Z),...DU(Q)])].sort((j,X)=>j.localeCompare(X))}function FQ($){let W=$.checkpointRunCount;if(!Number.isInteger(W)||W<1)throw Error("checkpointRunCount must be a positive integer");let Z=P6(Z8($.session),W);if(!Z)throw Error(`No checkpoint found at or before run ${W} in session ${$.session.sessionId}`);let Q=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!Q)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Z,cwd:Q}}async function AQ($,W){let Z=await ib($,W);return(await Promise.all(Z.map(async(J)=>{let[j,X]=await Promise.all([pb($,W.ref,J),rb($,J)]);return{filePath:LU($,J),leftContent:j,rightContent:X}}))).filter((J)=>J.leftContent!==J.rightContent)}async function VW($){let W=FQ($),Z=await AQ(W.cwd,W.checkpoint);return{...W,diffs:Z}}class BW{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,W,Z,Q,J,j,X,Y,V,B){this.clientName=W,this.runtimeAddress=Z,this.host=$,this.prepare=Q,this.capabilities=J,this.logger=j,this.telemetry=X,this.distinctId=Y,this.featureFlags=V,this.settings=OF($),this.pendingPrompts=TF($),this.automation=new FJ(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=B?new r5({workspaceRoot:B.workspaceRoot??process.cwd(),specs:{cronSpecsDir:B.cronSpecsDir??B.cronDir,scope:AK(B.cronScope),workspaceRoot:B.workspaceRoot},runtimeHandlers:UK({host:$,getExtensionContext:()=>EZ({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:B.dbPath,logger:B.logger,pollIntervalMs:B.pollIntervalMs,claimLeaseSeconds:B.claimLeaseSeconds,globalMaxConcurrency:B.globalMaxConcurrency,watcherDebounceMs:B.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((H)=>{if(H.type!=="ended")return;this.disposeSessionBootstrap(H.payload.sessionId)})}static async create($={}){let W=u0($.distinctId),Z=w0($.capabilities),Q={...$,capabilities:Z,distinctId:W},J=await w6(Q),j=FK($.automation),X=$.featureFlags||new $8({provider:new W8,telemetry:$.telemetry,logger:$.logger,context:{distinctId:W,clientName:$.clientName}}),Y=new BW(J,$.clientName,J.runtimeAddress,$.prepare,Z,$.logger,$.telemetry,W,X,j?{...j,logger:$.logger}:void 0);if(j&&j.autoStart!==!1)await Y.automation.start();return Y}async disposeSessionBootstrap($){let W=this.activeSessionBootstraps.get($);if(!W)return;this.activeSessionBootstraps.delete($),await Promise.resolve(W.dispose?.())}async start($){let W=qF($),Z=await this.prepare?.(W);try{let Q=Z?await Z.applyToStartSessionInput(W):W,J=await this.host.startSession(SJ(Q,{defaultCapabilities:this.capabilities,withExtensionContext:(j)=>EZ({automationService:this.automationService,automation:this.automation,context:j,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Z)if(await this.host.getSession(J.sessionId))this.activeSessionBootstraps.set(J.sessionId,Z);else await Promise.resolve(Z.dispose?.());return MF({input:Q,sessionId:J.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),J}catch(Q){throw await Promise.resolve(Z?.dispose?.()),Q}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let W=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(W.map((Z)=>this.disposeSessionBootstrap(Z)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await oZ(this.host,$);list=async($=200,W={})=>await this.listHistory({...W,limit:$});delete=async($)=>{let W=await this.host.deleteSession($);if(W)await this.disposeSessionBootstrap($);return W};update=(...$)=>this.host.updateSession(...$);updateSessionCompactionState=(...$)=>this.host.updateSessionCompactionState(...$);readSessionCompactionState=(...$)=>this.host.readSessionCompactionState(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let W=$.start?SJ($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Z)=>EZ({automationService:this.automationService,automation:this.automation,context:Z,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:$.sessionId,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restore:$.restore,start:W})}async compareCheckpoint($){let W=$.sessionId.trim();if(!W)throw Error("sessionId is required");let Z=await this.host.getSession(W);if(!Z)throw Error(`Session ${W} not found`);return VW({session:Z,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,W){return this.host.subscribe($,W)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()};updateSessionConnection=(...$)=>{return this.host.updateSessionConnection?.(...$)??Promise.resolve()}}var zU={};E(zU,{resolvePluginSkillDirectoriesFromPaths:()=>a1,resolvePluginConfigSearchPaths:()=>e4,resolveAndLoadAgentPlugins:()=>i8,resolveAgentPluginPaths:()=>n1,loadAgentPluginsFromPathsWithDiagnostics:()=>C2,loadAgentPluginsFromPaths:()=>p9,loadAgentPluginFromPath:()=>s4,discoverPluginModulePaths:()=>$5});var RU={};E(RU,{toHookConfigFileName:()=>Q5,runSubprocessEvent:()=>b6,runHook:()=>h6,resolveHooksConfigSearchPaths:()=>W5,parseHookEventPayload:()=>y6,mergeAgentHooks:()=>y2,listHookConfigFiles:()=>S$,createSubprocessHooks:()=>DQ,createHookConfigFileHooks:()=>J5,createHookConfigFileExtension:()=>s8,createHookAuditHooks:()=>o8,createAgentHooksExtension:()=>n8,HookEventPayloadSchema:()=>fQ,HookEventNameSchema:()=>UQ,HookConfigFileName:()=>a8,HOOK_CONFIG_FILE_EVENT_MAP:()=>Z5,HOOKS_CONFIG_DIRECTORY_NAME:()=>s9});import{HookEventNameSchema as UQ,HookEventPayloadSchema as fQ,parseHookEventPayload as y6,resolveHookSessionContext as $y}from"@cline/shared";import{z as Q8}from"zod";import{spawn as nb}from"node:child_process";import{augmentNodeCommandForDebug as ab,withResolvedClineBuildEnv as ob}from"@cline/shared";function sb($){let W=$.trim();if(!W)return{};let Q=W.split(`
587
- `).map((j)=>j.trim()).filter(Boolean).filter((j)=>j.startsWith("HOOK_CONTROL\t")).map((j)=>j.slice(13)),J=Q.length>0?Q[Q.length-1]:W;try{return{parsedJson:JSON.parse(J)}}catch(j){return{parseError:j instanceof Error?j.message:"Failed to parse subprocess stdout JSON"}}}function tb($,W){let Z=$ instanceof Error?$:Error(String($)),Q=Z,J=W.join(" ");if(Q.code==="EACCES")return Error(`Failed to execute hook command "${J}" (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 "${J}": ${Z.message}`)}async function eb($,W){let Z=$.stdin;if(!Z)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((Q,J)=>{let j=(X)=>{Z.off("error",j);let Y=X.code;if(Y==="EPIPE"||Y==="ERR_STREAM_DESTROYED"){Q();return}J(X)};Z.once("error",j),Z.end(W,(X)=>{if(Z.off("error",j),X){let Y=X.code;if(Y==="EPIPE"||Y==="ERR_STREAM_DESTROYED"){Q();return}J(X);return}Q()})})}async function b6($,W){let Z=ab(W.command,{env:W.env,debugRole:"hook"});if(!Array.isArray(Z)||Z.length===0)throw Error("runSubprocessEvent requires a non-empty command");let Q=!!W.detached,J=nb(Z[0],Z.slice(1),{cwd:W.cwd,env:ob(W.env),stdio:Q?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Q,windowsHide:!0}),j=new Promise((K)=>{J.once("spawn",()=>{try{W.onSpawn?.({command:Z,pid:J.pid??void 0,detached:Q})}catch{}K()})}),X=new Promise((K,F)=>{J.once("error",(A)=>{F(tb(A,Z))})});if(await eb(J,JSON.stringify($)),Q){await Promise.race([j,X]),J.unref();return}if(!J.stdout||!J.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let Y="",V="",B=!1,H;J.stdout.on("data",(K)=>{Y+=K.toString()}),J.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((W.timeoutMs??0)>0)H=setTimeout(()=>{B=!0,J.kill("SIGKILL")},W.timeoutMs);J.once("close",(F)=>{if(H)clearTimeout(H);let{parsedJson:A,parseError:f}=sb(Y);K({exitCode:F,stdout:Y,stderr:V,parsedJson:A,parseError:f,timedOut:B})})});return await Promise.race([G,X])}var Wy=Q8.object({contextModification:Q8.string().optional(),cancel:Q8.boolean().optional(),review:Q8.boolean().optional(),errorMessage:Q8.string().optional(),context:Q8.string().optional(),overrideInput:Q8.unknown().optional()}).passthrough();var Zy=["agent","hook"];async function h6($,W={}){let Z=W.command??Zy;return await b6($,{command:Z,cwd:W.cwd,env:W.env,detached:W.detached,timeoutMs:W.timeoutMs,onSpawn:W.onSpawn})}function MU($){return $ instanceof Error?$:Error(String($))}function Qy($){if(!$||typeof $!=="object")return;let W=Wy.safeParse($);if(!W.success)return;let Z=W.data;if(!(("cancel"in Z)||("review"in Z)||("context"in Z)||("contextModification"in Z)||("overrideInput"in Z)||("errorMessage"in Z)))return;let J=typeof Z.context==="string"?Z.context:typeof Z.contextModification==="string"?Z.contextModification:typeof Z.errorMessage==="string"&&Z.errorMessage.length>0?Z.errorMessage:void 0;return{cancel:typeof Z.cancel==="boolean"?Z.cancel:void 0,review:typeof Z.review==="boolean"?Z.review:void 0,context:J,overrideInput:Object.hasOwn(Z,"overrideInput")?Z.overrideInput:void 0}}function qU($){if(!$||typeof $!=="object")return{};let W={};for(let[Z,Q]of Object.entries($))if(typeof Q==="string")W[Z]=Q;else W[Z]=JSON.stringify(Q);return W}function X$($,W,Z){let Q=Z.env??process.env,J=Q.CLINE_USER_ID?.trim()||Q.USER?.trim()||"unknown",j=Z.cwd||process.cwd();return{clineVersion:Q.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:W.conversationId,sessionContext:$y(Z.sessionContext,{hookName:$,conversationId:W.conversationId,agentId:W.agentId,parentAgentId:W.parentAgentId}),workspaceRoots:j?[j]:[],workspaceInfo:Z.workspaceInfo,userId:J,agent_id:W.agentId,parent_agent_id:W.parentAgentId}}function Jy($){return{name:$.name,message:$.message,stack:$.stack}}function jy($){let W=String($??"").toLowerCase();return W.includes("cancel")||W.includes("abort")||W.includes("interrupt")}function Xy($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function Yy($){return $.filter((W)=>W.type==="text"&&typeof W.text==="string").map((W)=>W.text).join("")}function Vy($){return{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input,output:$.result.output,error:$.result.isError?String($.result.output):void 0,durationMs:$.durationMs,startedAt:$.startedAt,endedAt:$.endedAt}}function By($){if(!$)return;let W={};if($.cancel===!0)W.stop=!0;if($.overrideInput!==void 0)W.input=$.overrideInput;return Object.keys(W).length>0?W:void 0}async function J8($,W){try{let Z=await h6($,{command:W.command,cwd:W.cwd,env:W.env,detached:!0,onSpawn:W.onSpawn});W.onDispatch?.({payload:$,result:Z,detached:!0})}catch(Z){W.onDispatchError?.(MU(Z),$)}}function DQ($={}){return{hooks:{beforeRun:async(Y)=>{let V=Xy(Y);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...X$("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await J8(H,$)}else{let H={...X$("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await J8(H,$)}return},beforeTool:async(Y)=>{let V={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},B={...X$("tool_call",V,$),hookName:"tool_call",iteration:Y.snapshot.iteration,tool_call:{id:Y.toolCall.toolCallId,name:Y.toolCall.toolName,input:Y.input},preToolUse:{toolName:Y.toolCall.toolName,parameters:qU(Y.input)}};try{let H=await h6(B,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:B,result:H,detached:!1}),H?.timedOut)throw Error("tool_call hook command timed out");if(H?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${H.parseError}`);return By(Qy(H?.parsedJson))}catch(H){$.onDispatchError?.(MU(H),B);return}},afterTool:async(Y)=>{let V=Vy(Y),B={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},H={...X$("tool_result",B,$),hookName:"tool_result",iteration:Y.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:qU(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await J8(H,$);return},afterRun:async({snapshot:Y,result:V})=>{let B={agentId:Y.agentId,conversationId:Y.conversationId??Y.runId??Y.agentId,parentAgentId:Y.parentAgentId??null};if(V.status==="completed"){let K={...X$("agent_end",B,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await J8(K,$);return}let H=V.status==="aborted"||jy(V.error?.message)?"agent_abort":"agent_error",G=H==="agent_error"?{...X$(H,B,$),hookName:H,iteration:V.iterations,error:Jy(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...X$(H,B,$),hookName:H,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await J8(G,$)},onEvent:async(Y)=>{if(Y.type!=="message-added"||Y.message.role!=="user")return;let V={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},B={...X$("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:Yy(Y.message.content),attachments:[]}};await J8(B,$)}},shutdown:async({agentId:Y,conversationId:V,parentAgentId:B,reason:H})=>{let G={...X$("session_shutdown",{agentId:Y,conversationId:V,parentAgentId:B},$),hookName:"session_shutdown",reason:H};await J8(G,$)}}}var vf={};E(vf,{writeHubDiscovery:()=>eZ,withHubStartupLock:()=>$Q,verifyHubConnection:()=>N1,truncateNotificationBody:()=>AW,toHubStatusUrl:()=>Qj,toHubHealthUrl:()=>WQ,stopLocalHubServerGracefully:()=>Uj,startHubWebSocketServer:()=>Y8,startHubServer:()=>gf,spawnDetachedHubServerWithRetry:()=>D6,spawnDetachedHubServer:()=>Bj,sendHubCommand:()=>SU,restartLocalHubIfIdleAfterStartupTimeout:()=>XQ,resolveWorkspaceHubOwnerContext:()=>jA,resolveSharedHubOwnerContext:()=>c0,resolveProductionHubOwnerContext:()=>J1,resolveHubUrl:()=>rj,resolveHubOwnerContext:()=>W$,resolveHubEndpointOptions:()=>Q1,resolveHubBuildId:()=>tZ,resolveDefaultHubPort:()=>f6,resolveDefaultHubPathname:()=>Vj,resolveDefaultHubHost:()=>Yj,resolveCompatibleLocalHubUrl:()=>s5,resolveClineDir:()=>WA,resolveClineDataDir:()=>i2,requestHubShutdown:()=>o5,rememberRecoverableLocalHubUrl:()=>d$,readHubDiscovery:()=>_0,readBearerToken:()=>NQ,probeHubServer:()=>Z$,probeHubConnection:()=>PU,prewarmDetachedHubServer:()=>QQ,normalizeHubWebSocketUrl:()=>l$,isLocalHubOrigin:()=>UX,isLocalHubHostName:()=>EQ,isHubReconnectableTransportError:()=>Fj,isHubCommandTimeoutError:()=>jQ,isDiscoveryFilePresent:()=>QA,ensureHubWebSocketServer:()=>wQ,ensureHubServer:()=>mf,ensureDetachedHubServer:()=>GA,ensureCompatibleLocalHubUrl:()=>o2,createLocalHubScheduleRuntimeHandlers:()=>CQ,createInMemoryHubOwnerContext:()=>ZA,createHubServerUrl:()=>f1,createHubAuthToken:()=>sZ,createConfiguredTelemetryService:()=>Y$,createConfiguredTelemetryHandle:()=>i$,connectToHub:()=>OQ,clearHubDiscovery:()=>v0,NodeHubClient:()=>D1,NativeHubTransportAdapter:()=>LW,HubUIClient:()=>aj,HubTransportError:()=>h0,HubSessionClient:()=>nj,HubServerTransport:()=>v6,HubScheduleService:()=>I6,HubScheduleCommandService:()=>k6,HubCommandError:()=>_6,DEFAULT_HUB_PORT:()=>jj,DEFAULT_HUB_PATHNAME:()=>Xj,DEFAULT_HUB_HOST:()=>Jj,BrowserWebSocketHubAdapter:()=>_W});import{createSessionId as Hy}from"@cline/shared";function j1($,W){return{version:$.version,requestId:$.requestId,ok:!0,payload:W}}function NU($,W,Z){return{version:$.version,requestId:$.requestId??Hy("hubreq_"),ok:!1,error:{code:W,message:Z}}}class k6{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return j1($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return j1($,{schedules:this.schedules.listSchedules({enabled:typeof $.payload?.enabled==="boolean"?$.payload.enabled:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0,tags:Array.isArray($.payload?.tags)?$.payload?.tags:void 0})});case"schedule.get":return j1($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return j1($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return j1($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return j1($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return j1($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return j1($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return j1($,{executions:this.schedules.listScheduleExecutions({scheduleId:typeof $.payload?.scheduleId==="string"?$.payload.scheduleId:void 0,status:typeof $.payload?.status==="string"?$.payload.status:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0})});case"schedule.stats":return j1($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return j1($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return j1($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return NU($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(W){return NU($,"schedule_command_failed",W instanceof Error?W.message:String(W))}}toCreateInput($){let W=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:W}}toUpdateInput($){let W=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:W}}}function LQ($){return $?new Date($).getTime():void 0}function Gy($){let W=$.metadata?{...$.metadata}:void 0;if(W)delete W.__hubScheduleCreatedBy,delete W.__hubScheduleCwd,delete W.__hubRuntimeOptions;return W}function _Q($){let W=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof W?.__hubScheduleCwd==="string"?W.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:LQ($.nextRunAt),lastRunAt:LQ($.lastRunAt),createdBy:typeof W?.__hubScheduleCreatedBy==="string"?W.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:W?.__hubRuntimeOptions&&typeof W.__hubRuntimeOptions==="object"&&!Array.isArray(W.__hubRuntimeOptions)?W.__hubRuntimeOptions:void 0,metadata:Gy($)}}function Ky($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function uj($,W){return{executionId:$.runId,scheduleId:W,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:LQ($.startedAt),endedAt:LQ($.completedAt),status:Ky($.status),errorMessage:$.error}}class I6{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new p5({dbPath:$.dbPath}),this.materializer=new v5({store:this.store}),this.runner=new c5({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,eventPublisher:$.eventPublisher,workspaceRoot:"",logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency})}async start(){if(this.disposed)throw Error("HubScheduleService has been disposed");if(this.started)return;this.started=!0,await this.runner.start()}async stop(){await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,await this.runner.dispose(),this.store.close()}createSchedule($){if(vJ($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return _Q(this.store.createHubSchedule($))}getSchedule($){let W=this.store.getHubSchedule($);return W?_Q(W):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((W)=>_Q(W))}updateSchedule($,W){if(W.cronPattern!==void 0)vJ(W.cronPattern);let Z=this.store.getHubSchedule($);if(!Z)return;let Q=W.workspaceRoot!==void 0?W.workspaceRoot.trim():Z.workspaceRoot;if((W.enabled??Z.enabled)&&!Q)throw Error("workspaceRoot is required for enabled schedules");let j=this.store.updateHubSchedule($,{...W,scheduleId:$});return j?_Q(j):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let W=this.store.enqueueHubScheduleRun($,"manual");if(!W)return;await this.runner.tick();let Z=this.store.getRun(W.runId)??W;return uj(Z,$)}triggerScheduleNowDetached($){let W=this.store.enqueueHubScheduleRun($,"manual");if(!W)return;return this.runner.tick().catch(()=>{return}),uj(W,$)}listScheduleExecutions($){let W=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Z={specId:W?.specId,limit:$.limit};return this.store.listRuns(Z).map((J)=>{let j=W??this.store.getSpec(J.specId);if(!j||j.source!=="hub-schedule")return;return uj(J,j.externalId)}).filter((J)=>{if(!J)return!1;return!$.status||J.status===$.status})}getScheduleStats($){let W=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(W.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Z=0,Q=0,J=0,j;for(let X of W){if(X.status==="success"||X.status==="completed")Z+=1;if(!j&&X.status!=="success"&&X.status!=="completed")j=X;if(X.startedAt&&X.endedAt)J+=X.endedAt-X.startedAt,Q+=1}return{totalRuns:W.length,successRate:Z/W.length,avgDurationSeconds:Q>0?J/Q/1000:0,lastFailure:j}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let W=this.store.getSpec($.specId);if(!W||W.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:W.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:W.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+W.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let W={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(W).flatMap((Z)=>Z.source==="hub-schedule"&&Z.nextRunAt?[{spec:Z,nextRunAt:Z.nextRunAt}]:[]).sort((Z,Q)=>String(Z.nextRunAt).localeCompare(String(Q.nextRunAt))).slice(0,$).map(({spec:Z,nextRunAt:Q})=>({scheduleId:Z.externalId,name:Z.title,nextRunAt:Q}))}}FW();import{resolveClineBuildEnv as ky}from"@cline/shared";function Iy($,W){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Z=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Z?`Failed to connect to hub at ${W} (${Z} event before socket open).`:`Failed to connect to hub at ${W}.`)}var xy="cline-hub-auth.";function gy($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function my($,W){let Z=new URL($),Q=new URL(W);return Z.search="",Z.hash="",Q.search="",Q.hash="",Z.toString()===Q.toString()}function CU(){return ky()==="production"?J1():c0()}async function vy($){let W=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),W)return W;let Z=CU(),Q=await _0(Z.discoveryPath);if(Q?.url&&my($.toString(),Q.url))return Q.authToken;return}async function rj($={}){let W=Q1($);if(!gy($)){let Z=CU(),Q=await _0(Z.discoveryPath);if(Q?.url)return Q.url}return f1(W.host,W.port,W.pathname)}async function OQ($){return await new Promise((W,Z)=>{(async()=>{let Q=new URL($),J=await vy(Q);Q.hash="";let j=new WebSocket(Q.toString(),J?[`${xy}${J}`]:void 0),X=new Map,Y=0;j.addEventListener("open",()=>{W({send(V){let B=V.requestId??`hub-client-${++Y}`;return new Promise((H,G)=>{X.set(B,{resolve:H,reject:G});let K={kind:"command",envelope:{...V,requestId:B}};j.send(JSON.stringify(K))})},close(){j.close()}})}),j.addEventListener("message",(V)=>{let B=JSON.parse(String(V.data));if(B.kind==="reply"&&B.envelope.requestId){let H=X.get(B.envelope.requestId);if(H)X.delete(B.envelope.requestId),H.resolve(B.envelope)}}),j.addEventListener("close",()=>{for(let V of X.values())V.reject(Error("Hub connection closed"));X.clear()}),j.addEventListener("error",(V)=>{Z(Iy(V,$))})})().catch(Z)})}async function PU($){try{return(await OQ($)).close(),!0}catch{return!1}}async function SU($,W){let Z=await rj($),Q=await OQ(Z);try{return await Q.send({version:W.version??"v1",clientId:W.clientId??"hub-client",...W})}finally{Q.close()}}function ij($){return $?JSON.parse(JSON.stringify($)):{}}function TQ($){let W=$?.session&&typeof $.session==="object"?$.session:void 0;if(!W)return;let Z=W.metadata&&typeof W.metadata==="object"?ij(W.metadata):void 0;return{sessionId:typeof W.sessionId==="string"?W.sessionId:"",parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,metadata:Z}}function bU($,W){return $.error?.message??`hub command failed: ${W}`}function cy($){let W=ij($);if(typeof W.error==="string"&&W.error.trim())return{...W,error:W.error.trim()};let Z=W.result&&typeof W.result==="object"?W.result:void 0;if(typeof Z?.text==="string"&&Z.text.trim())return{...W,error:Z.text.trim()};let Q=Z?.error&&typeof Z.error==="object"?Z.error:void 0;if(typeof Q?.message==="string"&&Q.message.trim())return{...W,error:Q.message.trim()};return W}function yU($){let W=$?.sessionId;return typeof W==="string"&&W.trim()?W.trim():void 0}function uy($){let W=$?.checkpoint;if(!W||typeof W!=="object"||Array.isArray(W))throw Error("hub checkpoint restore returned no checkpoint");let Z=W;if(typeof Z.ref!=="string"||typeof Z.createdAt!=="number"||typeof Z.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Z}function dy($){let W=ij($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||yU(W)||"",eventType:"schedule.execution.completed",payload:W};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||yU(W)||"",eventType:"schedule.execution.failed",payload:W};let Z=$.sessionId?.trim();if(!Z)return;switch($.event){case"iteration.started":return{sessionId:Z,eventType:"runtime.chat.iteration_start",payload:W};case"iteration.finished":return{sessionId:Z,eventType:"runtime.chat.iteration_end",payload:W};case"assistant.delta":return{sessionId:Z,eventType:"runtime.chat.text_delta",payload:W};case"usage.updated":return{sessionId:Z,eventType:"runtime.chat.usage",payload:W};case"tool.started":return{sessionId:Z,eventType:"runtime.chat.tool_call_start",payload:W};case"tool.finished":return{sessionId:Z,eventType:"runtime.chat.tool_call_end",payload:W};case"approval.requested":return{sessionId:Z,eventType:"approval.requested",payload:W};case"run.aborted":return{sessionId:Z,eventType:"runtime.chat.aborted",payload:W};case"run.failed":return{sessionId:Z,eventType:"runtime.chat.failed",payload:cy($.payload)};case"run.completed":return{sessionId:Z,eventType:"runtime.chat.completed",payload:W};default:return}}class nj{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new D1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-session-client",displayName:$.displayName??"hub session client",workspaceRoot:$.workspaceRoot,cwd:$.cwd})}async ensureMetadataApplied(){if(this.metadataApplied||!this.options.metadata){if(!this.options.metadata)await this.client.connect();return}await this.client.connect(),await this.client.command("client.update",{metadata:this.options.metadata}),this.metadataApplied=!0}async connect(){await this.ensureMetadataApplied()}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession($){await this.ensureMetadataApplied();let W=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),Z=TQ(W.payload);if(!Z?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Z.sessionId,startResult:{sessionId:Z.sessionId,manifestPath:"",messagesPath:Z.messagesPath??""}}}async sendRuntimeSession($,W,Z){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:W.prompt,mode:W.config.mode,attachments:W.attachments,delivery:W.delivery,timeoutSeconds:W.config.timeoutSeconds},$,Z)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let W;try{W=await this.client.command("session.get",void 0,$)}catch(Z){if($$(Z))return;throw Z}return TQ(W.payload)}async readMessages($){let W=$.trim();if(!W)return[];await this.ensureMetadataApplied();let Z=await this.client.command("session.messages",{sessionId:W},W);if(!Z.ok)throw Error(bU(Z,"session.messages"));let Q=Z.payload?.messages;return Array.isArray(Q)?Q:[]}async restore($){let W=$.sessionId.trim();if(!W)throw Error("sessionId is required");let Z=$.restore?.messages!==!1;if(Z&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let Q=$.config,J=await this.client.command("session.restore",{sessionId:W,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Q?{workspaceRoot:Q.workspaceRoot,cwd:Q.cwd,sessionConfig:{providerId:Q.provider,modelId:Q.model,apiKey:Q.apiKey,cwd:Q.cwd??Q.workspaceRoot,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:Q.mode??"act",rules:Q.rules,maxIterations:Q.maxIterations,enableTools:Q.enableTools,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},metadata:{source:Q.source??"cli",provider:Q.provider,model:Q.model,enableTools:Q.enableTools,enableSpawn:Q.enableSpawn,enableTeams:Q.enableTeams,prompt:void 0,interactive:Q.interactive!==!1},runtimeOptions:{mode:Q.mode,systemPrompt:Q.systemPrompt,maxIterations:Q.maxIterations,enableTools:Q.enableTools,enableSpawn:Q.enableSpawn,enableTeams:Q.enableTeams,autoApproveTools:Q.autoApproveTools,configExtensions:Q.configExtensions},modelSelection:{provider:Q.provider,model:Q.model,apiKey:Q.apiKey},toolPolicies:Q.toolPolicies}:{}},W);if(!J.ok)throw Error(bU(J,"session.restore"));let j=TQ(J.payload);if(Z&&!j?.sessionId)throw Error("hub checkpoint restore returned no session id");let X=Array.isArray(J.payload?.messages)?J.payload.messages:void 0,Y=uy(J.payload);return{sessionId:j?.sessionId,startResult:j?.sessionId?{sessionId:j.sessionId,manifestPath:"",messagesPath:j.messagesPath??""}:void 0,...X?{messages:X}:{},checkpoint:Y}}async listSessions($){await this.ensureMetadataApplied();let W=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(W.payload?.sessions)?W.payload?.sessions:[]).map((Q)=>TQ({session:Q})).filter((Q)=>Boolean(Q?.sessionId))}async deleteSession($,W=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:W})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,W){let Z=new Set(($.sessionIds??[]).map((J)=>J.trim()).filter(Boolean)),Q=this.client.subscribe((J)=>{let j=dy(J);if(!j)return;if(Z.size>0&&!Z.has(j.sessionId))return;W.onEvent?.(j)});return this.ensureMetadataApplied().catch((J)=>{W.onError?.(J instanceof Error?J:Error(String(J)))}),Q}streamTeamProgress($,W){let Z=this.client.subscribe((Q)=>{if(Q.event!=="team.progress"||!Q.payload)return;W.onProjection?.(Q.payload)});return this.ensureMetadataApplied().catch((Q)=>{W.onError?.(Q instanceof Error?Q:Error(String(Q)))}),Z}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let W=await this.client.command("schedule.list");return Array.isArray(W.payload?.schedules)?W.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,W){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...W})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,W){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list_executions",{scheduleId:$,limit:W});return Array.isArray(Z.payload?.executions)?Z.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let W=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(W.payload?.upcoming)?W.payload?.upcoming:[]}}class aj{client;constructor($){this.client=new D1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let W=await this.client.command("session.list",{limit:$});return Array.isArray(W.payload?.sessions)?W.payload.sessions:[]}subscribeUI($){return this.client.subscribe((W)=>{switch(W.event){case"ui.notify":$.onNotify?.(W.payload);break;case"ui.show_window":$.onShowWindow?.(W.payload);break;case"hub.client.registered":$.onClientRegistered?.(W.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(W.payload??{});break;case"session.created":$.onSessionCreated?.(W.payload??{});break;case"session.updated":$.onSessionUpdated?.(W.payload??{});break;case"session.detached":$.onSessionDetached?.(W.payload??{});break}})}}import{resolveClineBuildEnv as If}from"@cline/shared";function ly($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Z)=>{if(Z&&typeof Z==="object"&&"type"in Z&&Z.type==="text"&&"text"in Z&&typeof Z.text==="string")return Z.text.trim();return""}).filter(Boolean).join(`
588
- `).trim()||void 0}var hU=120,oj="...";function AW($){let W=$.trim();if(!W)return"";if(Buffer.byteLength(W,"utf8")<=hU)return W;let Z=hU-Buffer.byteLength(oj,"utf8");if(Z<=0)return oj;let Q="";for(let J of W){if(Buffer.byteLength(Q+J,"utf8")>Z)break;Q+=J}return`${Q}${oj}`}async function kU($){let W=$?.sessionId?.trim()||"unknown",Z=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await u$(Z)].reverse().find((V)=>V.role==="assistant"),j=J?ly(J.content):void 0,X=$?.workspaceRoot?.trim()||"workspace",Y=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():X;return{title:`Task completed (${W})`,body:AW(j&&j.length>0?j:Y.length>0?Y:X),severity:"info"}}import{captureSdkError as RQ,createSessionId as rh}from"@cline/shared";import{createSessionId as ny}from"@cline/shared";import{createSessionId as iy}from"@cline/shared";function py($){switch($){case"idle":return"idle";case"pending":return"pending";case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function ry($){let W=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())W.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())W.parentAgentId=$.parentAgentId;if($.agentId?.trim())W.agentId=$.agentId;if($.conversationId?.trim())W.conversationId=$.conversationId;if($.messagesPath?.trim())W.messagesPath=$.messagesPath;if($.prompt?.trim())W.prompt=$.prompt;if($.provider?.trim())W.provider=$.provider;if($.model?.trim())W.model=$.model;if($.source?.trim())W.source=$.source;if(typeof $.pid==="number")W.pid=$.pid;return Object.keys(W).length>0?W:void 0}function zQ($,W,Z,Q){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:W?.createdByClientId??"hub",status:py($.status),participants:W?[...W.participants.values()]:[],metadata:ry($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Z?{usage:{...Z}}:{},...Q?{aggregateUsage:{...Q}}:{}}}function u($,W){return{version:$.version,requestId:$.requestId,ok:!0,...W!==void 0?{payload:W}:{}}}function h($,W,Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:W,message:Z}}}function m6($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function P0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function j8($,W,Z){return{version:"v1",event:$,eventId:iy("hevt_"),sessionId:Z,timestamp:Date.now(),payload:W}}async function S0($,W){let Z=await $.sessionHost.getSession(W);if(!Z)return;let Q=await $.sessionHost.getAccumulatedUsage?.(W);return zQ(Z,$.sessionState.get(W),Q?.usage,Q?.aggregateUsage)}async function d0($,W){let Z=await $.sessionHost.getSession(W);if(!Z)return;let[Q,J]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(W):[],$.sessionHost.getAccumulatedUsage?.(W)]);return E1({session:Z,messages:Q,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function sj($,W,Z,Q,J={}){let j=$.sessionState.get(W);if(j){if(J.interactive!==void 0)j.interactive=J.interactive;if(Q==="creator"&&!j.createdByClientId)j.createdByClientId=Z;if(!j.participants.has(Z))j.participants.set(Z,{clientId:Z,attachedAt:Date.now(),role:Q});return j}let X={createdByClientId:Z,interactive:J.interactive??!0,participants:new Map([[Z,{clientId:Z,attachedAt:Date.now(),role:Q}]])};return $.sessionState.set(W,X),X}function IU($,W,Z,Q,J={}){let j=$.sessionState.get(W);if(j){if(J.interactive!==void 0)j.interactive=J.interactive;if(!j.participants.has(Z))j.participants.set(Z,{clientId:Z,attachedAt:Date.now(),role:Q});return j}let X={interactive:J.interactive??!0,participants:new Map([[Z,{clientId:Z,attachedAt:Date.now(),role:Q}]])};return $.sessionState.set(W,X),X}async function tj($,W){let Z=ny("approval_"),Q=W.sessionId;if($.sessionState.get(Q)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((j)=>{$.pendingApprovals.set(Z,{sessionId:Q,resolve:j}),$.publish($.buildEvent("approval.requested",{approvalId:Z,sessionId:W.sessionId,agentId:W.agentId,conversationId:W.conversationId,iteration:W.iteration,toolCallId:W.toolCallId,toolName:W.toolName,inputJson:JSON.stringify(W.input??null),policy:W.policy},Q))})}function ej($,W,Z){let Q=$.pendingApprovals.get(W);if(!Q)return;return $.pendingApprovals.delete(W),Q.resolve(Z),{sessionId:Q.sessionId}}function $X($,W,Z){let Q=0;for(let[J,j]of[...$.pendingApprovals.entries()]){if(!W({approvalId:J,sessionId:j.sessionId}))continue;$.pendingApprovals.delete(J),j.resolve({approved:!1,reason:Z}),$.publish($.buildEvent("approval.resolved",{approvalId:J,approved:!1,cancelled:!0,reason:Z},j.sessionId)),Q+=1}return Q}async function xU($,W){let Z=typeof W.payload?.approvalId==="string"?W.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Z))return h(W,"approval_not_found",`Unknown approval: ${Z}`);let J=typeof W.payload?.reason==="string"?W.payload.reason:W.payload?.payload&&typeof W.payload.payload==="object"&&!Array.isArray(W.payload.payload)&&typeof W.payload.payload.reason==="string"?W.payload.payload.reason:void 0,j=W.payload?.approved===!0,X=ej($,Z,{approved:j,reason:J});if(!X)return h(W,"approval_not_found",`Unknown approval: ${Z}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Z,approved:j,reason:J},X.sessionId)),u(W,{approvalId:Z,approved:j})}import{createSessionId as sy}from"@cline/shared";function ay($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var gU={debug:10,info:20,warn:30,error:40,silent:50};function oy(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function p($,W,Z={}){if(gU[$]<gU[oy()])return;let Q=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:W,...Object.fromEntries(Object.entries(Z).map(([J,j])=>[J,ay(j)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${Q}`);return}console.log(`[hub] ${Q}`)}function WX($,W){let Z=W instanceof Error?W.stack||W.message:String(W);p("error",$,{error:Z})}async function mU($,W,Z,Q,J,j){let X=sy("capreq_"),Y=performance.now();return p("info","capability.request.start",{requestId:X,sessionId:W,capabilityName:Z,targetClientId:J}),await new Promise((V,B)=>{$.pendingCapabilityRequests.set(X,{sessionId:W,targetClientId:J,capabilityName:Z,onProgress:j,resolve:(H)=>{if(p(H.ok?"info":"warn","capability.request.end",{requestId:X,sessionId:W,capabilityName:Z,targetClientId:J,ok:H.ok,error:H.error,durationMs:Math.round(performance.now()-Y)}),!H.ok){B(Error(H.error||`Capability ${Z} was rejected by ${J}.`));return}V(H.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:X,targetClientId:J,capabilityName:Z,payload:Q},W)),p("info","capability.request.published",{requestId:X,sessionId:W,capabilityName:Z,targetClientId:J})})}function vU($,W){let Z=typeof W.payload?.requestId==="string"?W.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(Z);if(!Q)return h(W,"capability_not_found",`Unknown capability request: ${Z}`);if((W.clientId?.trim()||"")!==Q.targetClientId)return h(W,"capability_wrong_client",`Capability request ${Z} is owned by ${Q.targetClientId}`);if(W.sessionId?.trim()&&W.sessionId.trim()!==Q.sessionId)return h(W,"capability_wrong_session",`Capability request ${Z} belongs to session ${Q.sessionId}`);let j=W.payload?.payload&&typeof W.payload.payload==="object"&&!Array.isArray(W.payload.payload)?W.payload.payload:{};return Q.onProgress?.(j),u(W,{requestId:Z})}function n$($,W,Z){let Q=0;for(let[J,j]of[...$.pendingCapabilityRequests.entries()]){if(!W({requestId:J,...j}))continue;$.pendingCapabilityRequests.delete(J),p("warn","capability.request.cancelled",{requestId:J,sessionId:j.sessionId,capabilityName:j.capabilityName,targetClientId:j.targetClientId,reason:Z}),j.resolve({ok:!1,error:Z}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:j.capabilityName,targetClientId:j.targetClientId,ok:!1,cancelled:!0,error:Z},j.sessionId)),Q+=1}return Q}async function cU($,W){let Z=typeof W.payload?.sessionId==="string"?W.payload.sessionId.trim():W.sessionId?.trim()||"",Q=typeof W.payload?.capabilityName==="string"?W.payload.capabilityName.trim():"",J=typeof W.payload?.targetClientId==="string"?W.payload.targetClientId.trim():"";if(!Z||!Q||!J)return h(W,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let j=W.payload?.payload&&typeof W.payload.payload==="object"&&!Array.isArray(W.payload.payload)?W.payload.payload:{},X=await $.requestCapability(Z,Q,j,J);return u(W,X)}catch(j){return h(W,"capability_request_failed",j instanceof Error?j.message:String(j))}}function uU($,W){let Z=typeof W.payload?.requestId==="string"?W.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(Z);if(!Q)return h(W,"capability_not_found",`Unknown capability request: ${Z}`);let J=W.clientId?.trim()||"";if(J!==Q.targetClientId)return h(W,"capability_wrong_client",`Capability request ${Z} is owned by ${Q.targetClientId}`);if(W.sessionId?.trim()&&W.sessionId.trim()!==Q.sessionId)return h(W,"capability_wrong_session",`Capability request ${Z} belongs to session ${Q.sessionId}`);$.pendingCapabilityRequests.delete(Z);let j=W.payload?.payload&&typeof W.payload.payload==="object"&&!Array.isArray(W.payload.payload)?W.payload.payload:void 0,X=typeof W.payload?.error==="string"?W.payload.error:void 0,Y=W.payload?.ok===!0;return p(Y?"info":"warn","capability.respond",{requestId:Z,sessionId:Q.sessionId,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,respondedByClientId:J,ok:Y,error:X}),Q.resolve({ok:Y,payload:j,error:X}),$.publish($.buildEvent("capability.resolved",{requestId:Z,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,respondedByClientId:J,ok:Y,payload:j,error:X},Q.sessionId)),u(W,{requestId:Z,ok:Y})}import{createSessionId as ty}from"@cline/shared";function dU($,W){let Z=W.payload,Q=Z?.clientId?.trim()||W.clientId?.trim()||ty("client_");return $.clients.set(Q,{clientId:Q,clientType:Z?.clientType??"unknown",displayName:Z?.displayName,actorKind:Z?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Z?.transport??"native",capabilities:Z?.capabilities??[],metadata:Z?.metadata,workspaceContext:Z?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:Q,clientType:Z?.clientType??"unknown",displayName:Z?.displayName,connectedAt:Date.now()})),u(W,{clientId:Q})}function lU($,W){let Z=W.clientId?.trim(),Q=Z?$.clients.get(Z):void 0;if(!Z||!Q)return h(W,"client_not_found","Client is not registered with this hub.");let J=m6(W.payload?.metadata);if(Q.lastSeenAt=Date.now(),J)Q.metadata=JSON.parse(JSON.stringify(J));return u(W)}function pU($,W,Z){let Q=W.clientId?.trim();if(Q)$.clients.delete(Q),Z(Q),$.publish($.buildEvent("hub.client.disconnected",{clientId:Q}));return u(W)}function rU($,W){return u(W,{clients:[...$.clients.values()]})}O0();import{existsSync as aU,mkdirSync as ey,readdirSync as $h,readFileSync as Wh,rmSync as Zh,writeFileSync as Qh}from"node:fs";import{dirname as Jh,join as iU}from"node:path";import{CONNECTOR_PLATFORMS as jh,connectorChannelsFromPlatforms as Xh,listConnectorCatalog as oU,shouldIncludeConnectorField as Yh}from"@cline/shared";import{resolveConnectorDataDir as Vh,resolveConnectorSettingsPath as QX}from"@cline/shared/storage";var Bh=1,nU={startedAt:($)=>typeof $.startedAt==="string"?$.startedAt:void 0,port:($)=>typeof $.port==="number"?$.port:void 0,baseUrl:($)=>typeof $.baseUrl==="string"?$.baseUrl:void 0,connectionMode:($)=>typeof $.connectionMode==="string"?$.connectionMode:void 0,userName:($)=>typeof $.userName==="string"?$.userName:void 0,botUsername:($)=>typeof $.botUsername==="string"?$.botUsername:void 0,applicationId:($)=>typeof $.applicationId==="string"?$.applicationId:void 0,phoneNumberId:($)=>typeof $.phoneNumberId==="string"?$.phoneNumberId:void 0},Hh={discord:{required:["userName","applicationId"],optional:["startedAt","port","baseUrl"]},telegram:{required:["botUsername"],optional:["startedAt"]},gchat:{required:["userName"],optional:["startedAt","port","baseUrl"]},linear:{required:["userName"],optional:["startedAt","port","baseUrl"]},slack:{required:["userName"],optional:["startedAt","connectionMode","port","baseUrl"]},whatsapp:{required:["userName"],optional:["startedAt","phoneNumberId","port","baseUrl"]}};function a$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function UW($){return typeof $==="string"?$.trim():void 0}function sU($){if(!aU($))return;try{let W=JSON.parse(Wh($,"utf8"));return a$(W)?W:void 0}catch{return}}function JX(){let $=sU(QX()),W=a$($?.connectors)?$.connectors:{},Z={};for(let[Q,J]of Object.entries(W)){if(!a$(J))continue;let j=UW(J.type),X=UW(J.configuredAt),Y=UW(J.updatedAt);if(!j||!X||!Y)continue;let V=qQ(J.values),B=a$(J.security)?{enabled:J.security.enabled===!0,values:qQ(J.security.values)}:void 0;Z[Q]={type:j,values:V,security:B,configuredAt:X,updatedAt:Y}}return{version:Bh,connectors:Z}}function tU($){let W=QX();ey(Jh(W),{recursive:!0}),Qh(W,`${JSON.stringify($,null,2)}
589
- `,"utf8")}function qQ($){if(!a$($))return{};let W={};for(let[Z,Q]of Object.entries($))if(typeof Q==="string")W[Z]=Q.trim();return W}function Gh($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function Kh($){let W=iU(Vh(),$);if(!aU(W))return[];return $h(W).filter((Z)=>Z.endsWith(".json")&&!Z.endsWith(".threads.json")).map((Z)=>iU(W,Z))}function Fh($,W,Z){let Q=W.botUsername??W.userName??W.applicationId??W.phoneNumberId??String(Z);return`${$}:${Q}`}function Ah($,W){let Z=sU(W);if(!Z)return;let Q=typeof Z.pid==="number"?Z.pid:void 0,J=typeof Z.hubUrl==="string"?Z.hubUrl:typeof Z.rpcAddress==="string"?Z.rpcAddress:void 0;if(!Q||!J||!Gh(Q))return;let j=Hh[$];if(!j)return;let X={};for(let Y of j.required){let V=nU[Y](Z);if(!V||typeof V==="string"&&!V.trim())return;X[Y]=V}for(let Y of j.optional){let V=nU[Y](Z);if(V!==void 0)X[Y]=V}return{id:Fh($,X,Q),type:$,pid:Q,hubUrl:J,...X}}function Uh(){let $=[];for(let{name:W}of oU())for(let Z of Kh(W)){let Q=Ah(W,Z);if(Q)$.push(Q)}return $.sort((W,Z)=>{if(W.type!==Z.type)return W.type.localeCompare(Z.type);let Q=W.botUsername??W.userName??"",J=Z.botUsername??Z.userName??"";return Q.localeCompare(J)})}function fh(){let $=JX();return Object.entries($.connectors).map(([W,Z])=>({id:W,type:Z.type,configuredAt:Z.configuredAt,updatedAt:Z.updatedAt})).sort((W,Z)=>W.type.localeCompare(Z.type))}function jX(){return{available:Xh(),active:Uh(),configured:fh()}}function Dh($,W){if($.required&&!W[$.flag]?.trim())throw Error(`${$.label} is required`)}function _h($,W){let Z={};for(let J of $.fields)Z[J.flag]=W[J.flag]??J.initialValue??"";let Q={};for(let J of $.fields){if(!Yh(J,Z))continue;Dh(J,Z),Q[J.flag]=Z[J.flag]}return Q}function Lh($){if(!a$($))throw Error("connector.configure payload must be an object.");let W=UW($.channel);if(!W)throw Error("channel is required");let Z=jh.find((K)=>K.id===W);if(!Z)throw Error(`unknown connector channel: ${W}`);if(!new Set(oU().map((K)=>K.name)).has(Z.id))throw Error(`connector channel is not available: ${W}`);let J=qQ($.values),j=_h(Z,J),X=a$($.security)?$.security:{},Y=X.enabled===!0,V=qQ(X.values);if(Y&&Z.security)for(let K of Z.security.fields){let F=V[K.key];if(!F)throw Error(K.requiredMessage);let A=K.validate?.(F);if(A)throw Error(A)}let B=JX(),H=new Date().toISOString(),G=B.connectors[W];return B.connectors[W]={type:W,values:j,security:Y?{enabled:!0,values:V}:{enabled:!1,values:{}},configuredAt:G?.configuredAt??H,updatedAt:H},tU(B),jX()}function Oh($){if(!a$($))throw Error("connector.delete_config payload must be an object.");let W=UW($.channel);if(!W)throw Error("channel is required");let Z=JX();if(delete Z.connectors[W],Object.keys(Z.connectors).length>0)tU(Z);else Zh(QX(),{force:!0});return jX()}function Th($){return $==="connector.configure"||$==="connector.delete_config"}function ZX($,W,Z){if(!Th(W.command))return;A8($.telemetry,{ulid:W.sessionId??W.requestId??"hub",tool:W.command,success:Z})}async function eU($,W){try{if(W.command==="connector.channels")return u(W,jX());if(W.command==="connector.configure"){let Z=Lh(W.payload);return ZX($,W,!0),u(W,Z)}if(W.command==="connector.delete_config"){let Z=Oh(W.payload);return ZX($,W,!0),u(W,Z)}return h(W,"unsupported_connector_command",`unsupported connector command: ${W.command}`)}catch(Z){return ZX($,W,!1),h(W,"connector_command_failed",Z instanceof Error?Z.message:String(Z))}}var zh=30000;function qh($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function Mh($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function Rh($,W,Z){let Q=Z instanceof Error&&Z.message.trim()?Z.message:`Unknown session: ${W}`;return h($,d2,Q)}function Nh($){return $?$:void 0}function Eh($){let W=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(W&&Number.isFinite(W)&&W>0)return Math.floor(W);let Z=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(Z&&Number.isFinite(Z)&&Z>0)return Math.floor(Z*1000);return}async function wh($,W,Z,Q){let J=performance.now(),j=!1,X={command:W.command,requestId:W.requestId,clientId:W.clientId,sessionId:Z.sessionId,timeoutMs:Q},Y=setInterval(()=>{if(j)return;let H=Math.round(performance.now()-J);p("warn","run.heartbeat",{...X,elapsedMs:H}),$.publish($.buildEvent("run.heartbeat",{requestId:W.requestId,elapsedMs:H,...Q?{timeoutMs:Q}:{}},Z.sessionId))},zh),V=$.sessionHost.runTurn(Z);V.then((H)=>{if(!j)return;p("warn","run.late_end",{...X,elapsedMs:Math.round(performance.now()-J),finishReason:H?.finishReason})},(H)=>{if(!j)return;p("error","run.late_error",{...X,elapsedMs:Math.round(performance.now()-J),error:H})});let B;try{if(!Q)return await V;return await Promise.race([V,new Promise((H,G)=>{B=setTimeout(()=>{let K=`Hub run ${W.command} timed out after ${Q}ms.`;j=!0,clearInterval(Y),G(Error(K)),p("error","run.timeout",{...X,elapsedMs:Math.round(performance.now()-J)}),$X($,(F)=>F.sessionId===Z.sessionId,K),n$($,(F)=>F.sessionId===Z.sessionId,K),$.sessionHost.abort(Z.sessionId,K).catch((F)=>{p("error","run.timeout_abort_failed",{...X,error:F})})},Q)})])}finally{if(j=!0,clearInterval(Y),B)clearTimeout(B)}}async function $f($,W){let Z=P0(W),Q=W.payload&&typeof W.payload==="object"?W.payload:{},J=typeof Q.prompt==="string"?Q.prompt:typeof Q.input==="string"?Q.input:"";if(!J.trim())return h(W,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Z));let j=Q.attachments&&typeof Q.attachments==="object"&&!Array.isArray(Q.attachments)?Q.attachments:void 0,X=Array.isArray(j?.userFiles)?j.userFiles.filter((H)=>typeof H==="string"):void 0,Y=Eh(Q);$.suppressNextTerminalEventBySession.set(Z,"run.start.reply");let V;try{V=await wh($,W,{sessionId:Z,prompt:J,mode:Nh(Q.mode),delivery:Q.delivery==="queue"||Q.delivery==="steer"?Q.delivery:void 0,userImages:Array.isArray(j?.userImages)?j.userImages:void 0,userFiles:X,timeoutMs:Y},Y)}catch(H){if($.suppressNextTerminalEventBySession.get(Z)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Z);if($$(H))return Rh(W,Z,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Z)),H}if(V){let H=await d0($,Z),G=Mh(V);if($.publish($.buildEvent(qh(V.finishReason),{reason:V.finishReason,...G?{error:G}:{},result:V,...H?{snapshot:H}:{}},Z)),$.suppressNextTerminalEventBySession.get(Z)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Z)}else $.suppressNextTerminalEventBySession.delete(Z);let B=await d0($,Z);return u(W,V||B?{...V?{result:V}:{},...B?{snapshot:B}:{}}:void 0)}async function Wf($,W){let Z=P0(W),Q=typeof W.payload?.reason==="string"?W.payload.reason:"Run was aborted before pending approval or capability request was resolved.";$X($,(J)=>J.sessionId===Z,Q);try{await $.sessionHost.abort(Z,W.payload?.reason)}catch(J){p("warn","run.abort_failed",{command:W.command,requestId:W.requestId,clientId:W.clientId,sessionId:Z,error:J})}finally{n$($,(J)=>J.sessionId===Z,Q)}return u(W,{applied:!0})}async function Zf($,W){let Z=y6(W.payload?.payload);if(!Z)return h(W,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Z),u(W,{applied:!0})}async function Qf($,W){switch(W.type){case"chunk":return;case"agent_event":await Ch($,W);return;case"hook":if(W.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:W.payload.toolName},W.payload.sessionId));else if(W.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:W.payload.toolName},W.payload.sessionId));return;case"team_progress":{let Z={type:"team_progress_projection",version:1,sessionId:W.payload.sessionId,summary:W.payload.summary,lastEvent:W.payload.lifecycle};$.publish($.buildEvent("team.progress",Z,W.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:W.payload.sessionId,prompts:W.payload.prompts},W.payload.sessionId));return;case"pending_prompt_submitted":{let Z={id:W.payload.id,prompt:W.payload.prompt,delivery:W.payload.delivery,attachmentCount:W.payload.attachmentCount,userImages:W.payload.userImages,userFiles:W.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:W.payload.sessionId,prompt:Z},W.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:W.payload.sessionId,snapshot:W.payload.snapshot},W.payload.sessionId));return;case"status":{let[Z,Q]=await Promise.all([S0($,W.payload.sessionId),d0($,W.payload.sessionId)]);if(Z)$.publish($.buildEvent("session.updated",{session:Z,...Q?{snapshot:Q}:{}},W.payload.sessionId));return}case"ended":await Ph($,W);return;default:return}}async function Ch($,W){let{sessionId:Z,event:Q}=W.payload;if(Q.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:Q.iteration},Z));return}if(Q.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:Q.iteration,hadToolCalls:Q.hadToolCalls,toolCallCount:Q.toolCallCount},Z));return}if(Q.type==="content_start"){if(Q.contentType==="text"&&typeof Q.text==="string"&&Q.text.length>0){$.publish($.buildEvent("assistant.delta",{text:Q.text},Z));return}if(Q.contentType==="reasoning"){if(Q.redacted&&!Q.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Z));return}if(typeof Q.reasoning==="string"&&Q.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:Q.reasoning,redacted:Q.redacted===!0},Z));return}if(Q.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:Q.toolCallId,toolName:Q.toolName,input:Q.input},Z));return}}if(Q.type==="content_end"){switch(Q.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:Q.text},Z));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:Q.reasoning},Z));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:Q.toolCallId,toolName:Q.toolName,output:Q.output,error:Q.error},Z));break}return}if(Q.type==="usage"){let J;try{J=await $.sessionHost.getAccumulatedUsage?.(Z)}catch{J=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Z,delta:{inputTokens:Q.inputTokens,outputTokens:Q.outputTokens,cacheReadTokens:Q.cacheReadTokens??0,cacheWriteTokens:Q.cacheWriteTokens??0,totalCost:Q.cost??0},totals:{inputTokens:Q.totalInputTokens,outputTokens:Q.totalOutputTokens,cacheReadTokens:Q.totalCacheReadTokens??0,cacheWriteTokens:Q.totalCacheWriteTokens??0,totalCost:Q.totalCost??0},usage:J?.usage,aggregateUsage:J?.aggregateUsage,agent:{kind:W.payload.teamRole==="teammate"?"teammate":Q.parentAgentId?"subagent":"lead",agentId:Q.agentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamAgentId:W.payload.teamAgentId,teamRole:W.payload.teamRole}},Z));return}if(Q.type==="done")$.publish($.buildEvent("agent.done",{reason:Q.reason,text:Q.text,iterations:Q.iterations,usage:Q.usage},Z))}async function Ph($,W){let Z=$.suppressNextTerminalEventBySession.get(W.payload.sessionId),Q=Z===W.payload.reason||Z==="run.start.reply";if(Q)$.suppressNextTerminalEventBySession.delete(W.payload.sessionId);let[J,j]=await Promise.all([S0($,W.payload.sessionId),d0($,W.payload.sessionId)]);if(W.payload.reason==="completed"){let X=await kU(J);$.publish($.buildEvent("ui.notify",X,W.payload.sessionId))}if(Q)return;$.publish($.buildEvent(W.payload.reason==="aborted"?"run.aborted":W.payload.reason==="error"||W.payload.reason==="failed"?"run.failed":"run.completed",{reason:W.payload.reason,...j?{snapshot:j}:{}},W.payload.sessionId))}import{createSessionId as Vf,parseRuntimeConfigExtensions as Bf}from"@cline/shared";var Jf={};E(Jf,{SessionVersioningService:()=>o$,SessionVersioningError:()=>l0});class l0 extends Error{code;constructor($,W){super(W);this.code=$;this.name="SessionVersioningError"}}function Sh($){let W=$.sessionId.trim();if(!W)throw new l0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new l0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new l0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new l0("invalid_restore","checkpointRunCount must be a positive integer");return W}class o${async restoreCheckpoint($){let W=$.restore?.messages!==!1,Z=$.restore?.workspace!==!1,Q=Sh({sessionId:$.sessionId,restoreMessages:W,restoreWorkspace:Z,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(Q);if(!J)throw new l0("session_not_found",`Session ${Q} not found`);let j=W?await $.readMessages(Q):void 0;if(W&&j?.length===0)throw new l0("session_messages_not_found",`No messages found for session ${Q}`);let X=vj({session:J,messages:j,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:W});if(Z)await($.applyWorkspaceCheckpoint??cj)(X.cwd,X.checkpoint);let Y=E1({session:J,messages:j});if(!W)return{checkpoint:X.checkpoint,sourceSnapshot:Y};let V=gj(J,$.checkpointRunCount),B=$.restore?.omitCheckpointMessageFromSession?mj(j??[],$.checkpointRunCount):X.messages??[],H={sourceSession:J,sourceMessages:j,sourceSnapshot:Y,plan:X,restoredCheckpointMetadata:V,initialMessages:B,restoreMessages:W,restoreWorkspace:Z,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new l0("invalid_restore","start is required when restore.messages is true");let G=$.buildStartInput?await $.buildStartInput(H,$.start):$.start,K=await $.startSession(G),F=$.getStartedSessionId?.(K);if(F)await($.retainCheckpointRefs??SG)(X.cwd,F,V?.history??[]);let A=F&&$.readRestoredSession?await $.readRestoredSession(F):void 0;return{sessionId:F,startResult:K,messages:X.messages,checkpoint:X.checkpoint,sourceSnapshot:Y,...A?{restoredSnapshot:E1({session:A,messages:B})}:{}}}}import{HUB_CHECKPOINT_CAPABILITY as Ke,HUB_COMPACTION_CAPABILITY as Fe,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Ae,HUB_HOOK_CAPABILITY_PREFIX as Ue,HUB_MISTAKE_LIMIT_CAPABILITY as fe,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as De,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as _e,isHubToolExecutorName as bh}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as qe,HUB_COMPACTION_CAPABILITY as Me,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Re,HUB_HOOK_CAPABILITY_PREFIX as Ne,HUB_MISTAKE_LIMIT_CAPABILITY as Ee,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as we,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Ce}from"@cline/shared";var yh=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function X8($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function hh($,W){let Z=typeof $.name==="string"?$.name.trim():"",Q=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",j=X8($.inputSchema);if(!Z||!Q||!j||!J||W.has(J))return;return W.add(J),{kind:"tool",capabilityName:J,name:Z,description:Q,inputSchema:j,...X8($.lifecycle)?{lifecycle:X8($.lifecycle)}:{}}}function YX($){if(!Array.isArray($))return[];let W=[],Z=new Set;for(let Q of $){if(!Q||typeof Q!=="object"||Array.isArray(Q))continue;let J=Q,j=J.kind,X=typeof J.capabilityName==="string"?J.capabilityName.trim():"";if(!X||Z.has(X))continue;if(j==="tool"){let Y=hh(J,Z);if(Y)W.push(Y);continue}if(j==="toolExecutor"){let Y=J.executor;if(!bh(Y))continue;Z.add(X),W.push({kind:"toolExecutor",capabilityName:X,executor:Y});continue}if(j==="hook"){let Y=typeof J.name==="string"?J.name.trim():"";if(!Y)continue;Z.add(X),W.push({kind:"hook",capabilityName:X,name:Y});continue}if(j==="compaction"){Z.add(X),W.push({kind:"compaction",capabilityName:X,...X8(J.config)?{config:X8(J.config)}:{}});continue}if(j==="checkpoint"){Z.add(X),W.push({kind:"checkpoint",capabilityName:X,...X8(J.config)?{config:X8(J.config)}:{}});continue}if(j==="mistakeLimit"){Z.add(X),W.push({kind:"mistakeLimit",capabilityName:X});continue}if(j==="userInstructionService")Z.add(X),W.push({kind:"userInstructionService",capabilityName:X})}return W}function Xf($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function kh($){return Object.hasOwn($,"update")?$.update:$}function fW($){return $.trim().replace(/^\/+/,"").toLowerCase()}function Ih($){let W=($??[]).map(fW).filter(Boolean);return W.length>0?new Set(W):void 0}function xh($,W,Z){if(!Z)return!0;let Q=fW($),J=fW(W),j=Q.includes(":")?Q.split(":").at(-1)??Q:Q,X=J.includes(":")?J.split(":").at(-1)??J:J;return Z.has(Q)||Z.has(J)||Z.has(j)||Z.has(X)}function XX($,W){let Z=Ih(W);return $.records.skill.map((Q)=>({id:Q.id,name:Q.item.name,description:"description"in Q.item&&typeof Q.item.description==="string"?Q.item.description:void 0,disabled:Q.item.disabled===!0,skill:Q.item})).filter((Q)=>xh(Q.id,Q.name,Z))}function jf($,W){let Z=async(Q,J)=>{let j=fW(Q),Y=XX($,W).filter((K)=>K.id===j||fW(K.name)===j||K.id.endsWith(`:${j}`)).filter((K)=>!K.disabled);if(Y.length!==1)return Y.length>1?`Skill "${Q}" is ambiguous. Use one of: ${Y.map((K)=>K.id).join(", ")}`:`Skill "${Q}" not found.`;let V=Y[0].skill,B=J?.trim(),H=B?`
585
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,X0()])}}function hb($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let W=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(W==="local"||W==="hub"||W==="remote")return W;return"auto"}var VW,BW;function kb($,W){if($!=="auto"&&$!=="hub")return;if(W.hub?.endpoint?.trim())return;jQ(W.hub?.workspaceRoot?.trim()||W.hub?.cwd?.trim()||process.cwd())}async function Ib($){await $.reconcileDeadSessions?.().catch(()=>{})}function UU($){try{let W=new S1;return W.init(),new y1(W,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(W){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),AU($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:W,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new kj(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function FU($,W,Z){return new h1({sessionService:Z??$.sessionService??UU($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:W,fetch:$.fetch})}async function mj($){if(VW)return VW;if(BW)return await BW;return BW=(async()=>{return VW=UU($),await Ib(VW),VW})().finally(()=>{BW=void 0}),await BW}async function C6($){let W=v0($.distinctId);$.telemetry?.setDistinctId(W);let Z=hb($);if(kb(Z,$),Z==="remote"){let Q=$.remote?.endpoint?.trim();if(!Q)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:Q}),new T6({endpoint:Q,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Z==="hub"){let Q=$.hub?.endpoint?.trim(),J=Q||await o2({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!J)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:J,explicitEndpoint:Q||void 0}),new j$({url:J,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Z==="auto"){let Q=await e5({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(Q){$.logger?.log("Using discovered local hub runtime host",{url:Q});let J=new j$({url:Q,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await J.connect(),J}catch(j){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:j}),AU($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:j,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),FU($,W)}return FU($,W)}var LU={};w(LU,{NoOpFeatureFlagsProvider:()=>W8,FeatureFlagsService:()=>$8});import{existsSync as xb,mkdirSync as gb,readFileSync as mb,writeFileSync as vb}from"node:fs";import{dirname as cb}from"node:path";import{FEATURE_FLAGS as DU,FeatureFlagDefaultValue as vj}from"@cline/shared";var ub=3600000,db=604800000,_U=1;class $8{provider;telemetry;logger;cacheTtlMs;cacheFilePath;persistentCacheMaxAgeMs;context;cache=new Map;cacheInfo={updateTime:0,userId:null};constructor($){this.provider=$.provider,this.telemetry=$.telemetry,this.logger=$.logger,this.cacheTtlMs=$.cacheTtlMs??ub,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??db,this.context={...$.context??{}},this.hydrateFromPersistentCache()}setContext($){this.context={...$}}hydrateCache($){this.cacheInfo={updateTime:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload},this.rebuildCacheFromSnapshot($.flagsPayload)}getCacheSnapshot(){return{updateTime:this.cacheInfo.updateTime,userId:this.cacheInfo.userId,flagsPayload:this.cacheInfo.flagsPayload}}async poll($){let W=$??this.context.userId??null,Z=Date.now();if(Z-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===W)return}let Q=this.cacheInfo;this.cacheInfo={updateTime:Z,userId:W||null};try{let J=await this.provider.getAllFlagsAndPayloads({flagKeys:DU.length>0?DU:void 0,context:{...this.context,userId:W}});if(this.cacheInfo.userId!==W)return;this.cacheInfo.flagsPayload=J,this.rebuildCacheFromSnapshot(J),this.writePersistentCache()}catch(J){if(this.cacheInfo.userId!==W)return;throw this.cacheInfo=Q.updateTime?Q:{updateTime:0,userId:null},this.logger?.error?.("Error polling SDK feature flags",{error:J}),J}}hydrateFromPersistentCache(){let $=this.readPersistentCache();if($)this.hydrateCache($)}isFeatureFlagPayload($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every((W)=>this.isFeatureFlagPayload(W));if(typeof $==="object")return Object.values($).every((W)=>this.isFeatureFlagPayload(W));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=Object.entries($).filter(([,Q])=>this.isFeatureFlagPayload(Q));if(W.length===0)return;let Z={};for(let[Q,J]of W)Z[Q]=J;return Z}readPersistentCache(){try{if(!this.cacheFilePath||!xb(this.cacheFilePath))return;let $=JSON.parse(mb(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let W=$;if(W.version!==_U||typeof W.updatedAt!=="number"||!Number.isFinite(W.updatedAt)||Date.now()-W.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:W.updatedAt,userId:W.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(W.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(W.flagsPayload?.featureFlagPayloads)}}}catch($){this.logger?.error?.("Error reading SDK feature flags cache",{error:$});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;gb(cb(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),W={version:_U,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};vb(this.cacheFilePath,`${JSON.stringify(W,null,2)}
586
+ `,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let W=new Map;for(let Z of this.getReturnedFlagKeys($)){let Q=this.getFeatureFlag(Z);W.set(Z,Q??!1)}this.cache=W}getFeatureFlag($){try{let W=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Z=this.cacheInfo.flagsPayload?.featureFlags?.[$],Q=W??Z??vj[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==Q)this.telemetry?.capture({event:v.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Z}});return Q}catch(W){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:W}),vj[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??vj[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,W){if(process.env.IS_TEST==="true")this.cache.set($,W)}async dispose(){await this.provider.dispose()}}class W8{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}z6();var RU={};w(RU,{createCheckpointComparePlan:()=>UQ,compareCheckpointToWorkspace:()=>HW,buildCheckpointWorkspaceDiff:()=>fQ});import{execFile as rb}from"node:child_process";import*as MU from"node:fs/promises";import*as b6 from"node:path";import{promisify as ib}from"node:util";var zU={};w(zU,{trimMessagesToCheckpoint:()=>TU,trimMessagesBeforeCheckpoint:()=>uj,readSessionCheckpointHistory:()=>Z8,findCheckpointForRun:()=>S6,createRestoredCheckpointMetadata:()=>cj,createCheckpointRestorePlan:()=>dj,applyCheckpointToWorktree:()=>lj});import{execFile as lb}from"node:child_process";import{promisify as pb}from"node:util";var P6=pb(lb);function Z8($){let W=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(W?.history)?W.history:[]).filter((Q)=>!!Q&&typeof Q==="object"&&!Array.isArray(Q)).flatMap((Q)=>{let J=String(Q.ref??"").trim(),j=Number(Q.createdAt??0),X=Number(Q.runCount??0);if(J.length===0||!Number.isFinite(j)||!Number.isInteger(X)||X<1)return[];let Y=Q.kind==="stash"||Q.kind==="commit"?Q.kind:void 0;return[{ref:J,createdAt:j,runCount:X,...Y?{kind:Y}:{}}]})}function cj($,W){let Z=Z8($).filter((J)=>J.runCount<=W),Q=Z.at(-1);return Q?{latest:Q,history:Z}:void 0}function S6($,W){return $.reduce((Z,Q)=>{if(Q.runCount>W)return Z;if(!Z||Q.runCount>Z.runCount)return Q;return Z},void 0)}function OU($,W){let Z=0;for(let Q=0;Q<$.length;Q+=1){let J=$[Q];if(J?.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"?J.metadata:void 0)?.kind==="recovery_notice")continue;if(Z+=1,Z===W)return Q}throw Error(`Could not find user message for checkpoint run ${W}`)}function TU($,W){let Z=OU($,W);return $.slice(0,Z+1)}function uj($,W){let Z=OU($,W);return $.slice(0,Z)}function dj($){let W=$.checkpointRunCount;if(!Number.isInteger(W)||W<1)throw Error("checkpointRunCount must be a positive integer");let Z=S6(Z8($.session),W);if(!Z)throw Error(`No checkpoint found at or before run ${W} in session ${$.session.sessionId}`);let Q=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!Q)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Z,cwd:Q,...$.restoreMessages!==!1?{messages:TU($.messages??[],W)}:{}}}async function lj($,W){if((await P6("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await P6("git",["-C",$,"cat-file","-e",`${W.ref}^{commit}`],{windowsHide:!0}),await P6("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await P6("git",["-C",$,"clean","-fd"],{windowsHide:!0}),W.kind==="commit"){await P6("git",["-C",$,"reset","--hard",W.ref],{windowsHide:!0});return}await P6("git",["-C",$,"stash","apply",W.ref],{windowsHide:!0})}var nb=ib(rb),ab=52428800;async function AQ($,W){let{stdout:Z}=await nb("git",["-C",$,...W],{windowsHide:!0,maxBuffer:ab,encoding:"utf8"});return Z}function qU($){return $.split("\x00").filter(Boolean)}function NU($,W){let Z=b6.resolve($,W),Q=b6.relative($,Z);if(Q.startsWith("..")||b6.isAbsolute(Q))throw Error(`Checkpoint diff path escapes workspace: ${W}`);return Z}async function ob($,W,Z){try{return await AQ($,["show",`${W}:${Z}`])}catch{return""}}async function sb($,W){try{return await MU.readFile(NU($,W),"utf8")}catch{return""}}async function tb($,W){await AQ($,["cat-file","-e",`${W.ref}^{tree}`]);let[Z,Q]=await Promise.all([AQ($,["diff","--name-only","-z",W.ref,"--"]),AQ($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...qU(Z),...qU(Q)])].sort((j,X)=>j.localeCompare(X))}function UQ($){let W=$.checkpointRunCount;if(!Number.isInteger(W)||W<1)throw Error("checkpointRunCount must be a positive integer");let Z=S6(Z8($.session),W);if(!Z)throw Error(`No checkpoint found at or before run ${W} in session ${$.session.sessionId}`);let Q=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!Q)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Z,cwd:Q}}async function fQ($,W){let Z=await tb($,W);return(await Promise.all(Z.map(async(J)=>{let[j,X]=await Promise.all([ob($,W.ref,J),sb($,J)]);return{filePath:NU($,J),leftContent:j,rightContent:X}}))).filter((J)=>J.leftContent!==J.rightContent)}async function HW($){let W=UQ($),Z=await fQ(W.cwd,W.checkpoint);return{...W,diffs:Z}}class GW{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,W,Z,Q,J,j,X,Y,V,B){this.clientName=W,this.runtimeAddress=Z,this.host=$,this.prepare=Q,this.capabilities=J,this.logger=j,this.telemetry=X,this.distinctId=Y,this.featureFlags=V,this.settings=RF($),this.pendingPrompts=EF($),this.automation=new fJ(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=B?new n5({workspaceRoot:B.workspaceRoot??process.cwd(),specs:{cronSpecsDir:B.cronSpecsDir??B.cronDir,scope:OK(B.cronScope),workspaceRoot:B.workspaceRoot},runtimeHandlers:TK({host:$,getExtensionContext:()=>CZ({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:B.dbPath,logger:B.logger,pollIntervalMs:B.pollIntervalMs,claimLeaseSeconds:B.claimLeaseSeconds,globalMaxConcurrency:B.globalMaxConcurrency,watcherDebounceMs:B.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((H)=>{if(H.type!=="ended")return;this.disposeSessionBootstrap(H.payload.sessionId)})}static async create($={}){let W=v0($.distinctId),Z=w0($.capabilities),Q={...$,capabilities:Z,distinctId:W},J=await C6(Q),j=LK($.automation),X=$.featureFlags||new $8({provider:new W8,telemetry:$.telemetry,logger:$.logger,context:{distinctId:W,clientName:$.clientName}}),Y=new GW(J,$.clientName,J.runtimeAddress,$.prepare,Z,$.logger,$.telemetry,W,X,j?{...j,logger:$.logger}:void 0);if(j&&j.autoStart!==!1)await Y.automation.start();return Y}async disposeSessionBootstrap($){let W=this.activeSessionBootstraps.get($);if(!W)return;this.activeSessionBootstraps.delete($),await Promise.resolve(W.dispose?.())}async start($){let W=CF($),Z=await this.prepare?.(W);try{let Q=Z?await Z.applyToStartSessionInput(W):W,J=await this.host.startSession(hJ(Q,{defaultCapabilities:this.capabilities,withExtensionContext:(j)=>CZ({automationService:this.automationService,automation:this.automation,context:j,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Z)if(await this.host.getSession(J.sessionId))this.activeSessionBootstraps.set(J.sessionId,Z);else await Promise.resolve(Z.dispose?.());return PF({input:Q,sessionId:J.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),J}catch(Q){throw await Promise.resolve(Z?.dispose?.()),Q}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let W=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(W.map((Z)=>this.disposeSessionBootstrap(Z)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await tZ(this.host,$);list=async($=200,W={})=>await this.listHistory({...W,limit:$});delete=async($)=>{let W=await this.host.deleteSession($);if(W)await this.disposeSessionBootstrap($);return W};update=(...$)=>this.host.updateSession(...$);updateSessionCompactionState=(...$)=>this.host.updateSessionCompactionState(...$);readSessionCompactionState=(...$)=>this.host.readSessionCompactionState(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let W=$.start?hJ($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Z)=>CZ({automationService:this.automationService,automation:this.automation,context:Z,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:$.sessionId,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restore:$.restore,start:W})}async compareCheckpoint($){let W=$.sessionId.trim();if(!W)throw Error("sessionId is required");let Z=await this.host.getSession(W);if(!Z)throw Error(`Session ${W} not found`);return HW({session:Z,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,W){return this.host.subscribe($,W)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()};updateSessionConnection=(...$)=>{return this.host.updateSessionConnection?.(...$)??Promise.resolve()}}var wU={};w(wU,{resolvePluginSkillDirectoriesFromPaths:()=>t1,resolvePluginConfigSearchPaths:()=>W5,resolveAndLoadAgentPlugins:()=>n8,resolveAgentPluginPaths:()=>s1,loadAgentPluginsFromPathsWithDiagnostics:()=>C2,loadAgentPluginsFromPaths:()=>r9,loadAgentPluginFromPath:()=>e4,discoverPluginModulePaths:()=>Z5});var SU={};w(SU,{toHookConfigFileName:()=>j5,runSubprocessEvent:()=>y6,runHook:()=>k6,resolveHooksConfigSearchPaths:()=>Q5,parseHookEventPayload:()=>h6,mergeAgentHooks:()=>y2,listHookConfigFiles:()=>S$,createSubprocessHooks:()=>LQ,createHookConfigFileHooks:()=>X5,createHookConfigFileExtension:()=>t8,createHookAuditHooks:()=>s8,createAgentHooksExtension:()=>a8,HookEventPayloadSchema:()=>_Q,HookEventNameSchema:()=>DQ,HookConfigFileName:()=>o8,HOOK_CONFIG_FILE_EVENT_MAP:()=>J5,HOOKS_CONFIG_DIRECTORY_NAME:()=>t9});import{HookEventNameSchema as DQ,HookEventPayloadSchema as _Q,parseHookEventPayload as h6,resolveHookSessionContext as jy}from"@cline/shared";import{z as Q8}from"zod";import{spawn as eb}from"node:child_process";import{augmentNodeCommandForDebug as $y,withResolvedClineBuildEnv as Wy}from"@cline/shared";function Zy($){let W=$.trim();if(!W)return{};let Q=W.split(`
587
+ `).map((j)=>j.trim()).filter(Boolean).filter((j)=>j.startsWith("HOOK_CONTROL\t")).map((j)=>j.slice(13)),J=Q.length>0?Q[Q.length-1]:W;try{return{parsedJson:JSON.parse(J)}}catch(j){return{parseError:j instanceof Error?j.message:"Failed to parse subprocess stdout JSON"}}}function Qy($,W){let Z=$ instanceof Error?$:Error(String($)),Q=Z,J=W.join(" ");if(Q.code==="EACCES")return Error(`Failed to execute hook command "${J}" (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 "${J}": ${Z.message}`)}async function Jy($,W){let Z=$.stdin;if(!Z)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((Q,J)=>{let j=(X)=>{Z.off("error",j);let Y=X.code;if(Y==="EPIPE"||Y==="ERR_STREAM_DESTROYED"){Q();return}J(X)};Z.once("error",j),Z.end(W,(X)=>{if(Z.off("error",j),X){let Y=X.code;if(Y==="EPIPE"||Y==="ERR_STREAM_DESTROYED"){Q();return}J(X);return}Q()})})}async function y6($,W){let Z=$y(W.command,{env:W.env,debugRole:"hook"});if(!Array.isArray(Z)||Z.length===0)throw Error("runSubprocessEvent requires a non-empty command");let Q=!!W.detached,J=eb(Z[0],Z.slice(1),{cwd:W.cwd,env:Wy(W.env),stdio:Q?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Q,windowsHide:!0}),j=new Promise((K)=>{J.once("spawn",()=>{try{W.onSpawn?.({command:Z,pid:J.pid??void 0,detached:Q})}catch{}K()})}),X=new Promise((K,F)=>{J.once("error",(A)=>{F(Qy(A,Z))})});if(await Jy(J,JSON.stringify($)),Q){await Promise.race([j,X]),J.unref();return}if(!J.stdout||!J.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let Y="",V="",B=!1,H;J.stdout.on("data",(K)=>{Y+=K.toString()}),J.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((W.timeoutMs??0)>0)H=setTimeout(()=>{B=!0,J.kill("SIGKILL")},W.timeoutMs);J.once("close",(F)=>{if(H)clearTimeout(H);let{parsedJson:A,parseError:f}=Zy(Y);K({exitCode:F,stdout:Y,stderr:V,parsedJson:A,parseError:f,timedOut:B})})});return await Promise.race([G,X])}var Xy=Q8.object({contextModification:Q8.string().optional(),cancel:Q8.boolean().optional(),review:Q8.boolean().optional(),errorMessage:Q8.string().optional(),context:Q8.string().optional(),overrideInput:Q8.unknown().optional()}).passthrough();var Yy=["agent","hook"];async function k6($,W={}){let Z=W.command??Yy;return await y6($,{command:Z,cwd:W.cwd,env:W.env,detached:W.detached,timeoutMs:W.timeoutMs,onSpawn:W.onSpawn})}function PU($){return $ instanceof Error?$:Error(String($))}function Vy($){if(!$||typeof $!=="object")return;let W=Xy.safeParse($);if(!W.success)return;let Z=W.data;if(!(("cancel"in Z)||("review"in Z)||("context"in Z)||("contextModification"in Z)||("overrideInput"in Z)||("errorMessage"in Z)))return;let J=typeof Z.context==="string"?Z.context:typeof Z.contextModification==="string"?Z.contextModification:typeof Z.errorMessage==="string"&&Z.errorMessage.length>0?Z.errorMessage:void 0;return{cancel:typeof Z.cancel==="boolean"?Z.cancel:void 0,review:typeof Z.review==="boolean"?Z.review:void 0,context:J,overrideInput:Object.hasOwn(Z,"overrideInput")?Z.overrideInput:void 0}}function CU($){if(!$||typeof $!=="object")return{};let W={};for(let[Z,Q]of Object.entries($))if(typeof Q==="string")W[Z]=Q;else W[Z]=JSON.stringify(Q);return W}function V$($,W,Z){let Q=Z.env??process.env,J=Q.CLINE_USER_ID?.trim()||Q.USER?.trim()||"unknown",j=Z.cwd||process.cwd();return{clineVersion:Q.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:W.conversationId,sessionContext:jy(Z.sessionContext,{hookName:$,conversationId:W.conversationId,agentId:W.agentId,parentAgentId:W.parentAgentId}),workspaceRoots:j?[j]:[],workspaceInfo:Z.workspaceInfo,userId:J,agent_id:W.agentId,parent_agent_id:W.parentAgentId}}function By($){return{name:$.name,message:$.message,stack:$.stack}}function Hy($){let W=String($??"").toLowerCase();return W.includes("cancel")||W.includes("abort")||W.includes("interrupt")}function Gy($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function Ky($){return $.filter((W)=>W.type==="text"&&typeof W.text==="string").map((W)=>W.text).join("")}function Fy($){return{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input,output:$.result.output,error:$.result.isError?String($.result.output):void 0,durationMs:$.durationMs,startedAt:$.startedAt,endedAt:$.endedAt}}function Ay($){if(!$)return;let W={};if($.cancel===!0)W.stop=!0;if($.overrideInput!==void 0)W.input=$.overrideInput;return Object.keys(W).length>0?W:void 0}async function J8($,W){try{let Z=await k6($,{command:W.command,cwd:W.cwd,env:W.env,detached:!0,onSpawn:W.onSpawn});W.onDispatch?.({payload:$,result:Z,detached:!0})}catch(Z){W.onDispatchError?.(PU(Z),$)}}function LQ($={}){return{hooks:{beforeRun:async(Y)=>{let V=Gy(Y);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...V$("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await J8(H,$)}else{let H={...V$("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await J8(H,$)}return},beforeTool:async(Y)=>{let V={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},B={...V$("tool_call",V,$),hookName:"tool_call",iteration:Y.snapshot.iteration,tool_call:{id:Y.toolCall.toolCallId,name:Y.toolCall.toolName,input:Y.input},preToolUse:{toolName:Y.toolCall.toolName,parameters:CU(Y.input)}};try{let H=await k6(B,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:B,result:H,detached:!1}),H?.timedOut)throw Error("tool_call hook command timed out");if(H?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${H.parseError}`);return Ay(Vy(H?.parsedJson))}catch(H){$.onDispatchError?.(PU(H),B);return}},afterTool:async(Y)=>{let V=Fy(Y),B={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},H={...V$("tool_result",B,$),hookName:"tool_result",iteration:Y.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:CU(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await J8(H,$);return},afterRun:async({snapshot:Y,result:V})=>{let B={agentId:Y.agentId,conversationId:Y.conversationId??Y.runId??Y.agentId,parentAgentId:Y.parentAgentId??null};if(V.status==="completed"){let K={...V$("agent_end",B,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await J8(K,$);return}let H=V.status==="aborted"||Hy(V.error?.message)?"agent_abort":"agent_error",G=H==="agent_error"?{...V$(H,B,$),hookName:H,iteration:V.iterations,error:By(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...V$(H,B,$),hookName:H,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await J8(G,$)},onEvent:async(Y)=>{if(Y.type!=="message-added"||Y.message.role!=="user")return;let V={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},B={...V$("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:Ky(Y.message.content),attachments:[]}};await J8(B,$)}},shutdown:async({agentId:Y,conversationId:V,parentAgentId:B,reason:H})=>{let G={...V$("session_shutdown",{agentId:Y,conversationId:V,parentAgentId:B},$),hookName:"session_shutdown",reason:H};await J8(G,$)}}}var rf={};w(rf,{writeHubDiscovery:()=>WQ,withHubStartupLock:()=>ZQ,verifyHubConnection:()=>w1,truncateNotificationBody:()=>fW,toHubStatusUrl:()=>Xj,toHubHealthUrl:()=>QQ,stopLocalHubServerGracefully:()=>_j,startHubWebSocketServer:()=>Y8,startHubServer:()=>lf,spawnDetachedHubServerWithRetry:()=>_6,spawnDetachedHubServer:()=>Kj,sendHubCommand:()=>xU,restartLocalHubIfIdleAfterStartupTimeout:()=>VQ,resolveWorkspaceHubOwnerContext:()=>GA,resolveSharedHubOwnerContext:()=>m0,resolveProductionHubOwnerContext:()=>Q1,resolveHubUrl:()=>aj,resolveHubOwnerContext:()=>Q$,resolveHubEndpointOptions:()=>Z1,resolveHubBuildId:()=>$Q,resolveDefaultHubPort:()=>D6,resolveDefaultHubPathname:()=>Gj,resolveDefaultHubHost:()=>Hj,resolveCompatibleLocalHubUrl:()=>e5,resolveClineDir:()=>YA,resolveClineDataDir:()=>i2,requestHubShutdown:()=>t5,rememberRecoverableLocalHubUrl:()=>d$,readHubDiscovery:()=>_0,readBearerToken:()=>wQ,probeHubServer:()=>J$,probeHubConnection:()=>IU,prewarmDetachedHubServer:()=>jQ,normalizeHubWebSocketUrl:()=>l$,isLocalHubOrigin:()=>_X,isLocalHubHostName:()=>CQ,isHubReconnectableTransportError:()=>fj,isHubCommandTimeoutError:()=>YQ,isDiscoveryFilePresent:()=>BA,ensureHubWebSocketServer:()=>PQ,ensureHubServer:()=>pf,ensureDetachedHubServer:()=>DA,ensureCompatibleLocalHubUrl:()=>o2,createLocalHubScheduleRuntimeHandlers:()=>SQ,createInMemoryHubOwnerContext:()=>VA,createHubServerUrl:()=>D1,createHubAuthToken:()=>eZ,createConfiguredTelemetryService:()=>B$,createConfiguredTelemetryHandle:()=>i$,connectToHub:()=>zQ,clearHubDiscovery:()=>g0,NodeHubClient:()=>_1,NativeHubTransportAdapter:()=>TW,HubUIClient:()=>tj,HubTransportError:()=>b0,HubSessionClient:()=>sj,HubServerTransport:()=>c6,HubScheduleService:()=>x6,HubScheduleCommandService:()=>I6,HubCommandError:()=>L6,DEFAULT_HUB_PORT:()=>Vj,DEFAULT_HUB_PATHNAME:()=>Bj,DEFAULT_HUB_HOST:()=>Yj,BrowserWebSocketHubAdapter:()=>OW});import{createSessionId as Uy}from"@cline/shared";function J1($,W){return{version:$.version,requestId:$.requestId,ok:!0,payload:W}}function bU($,W,Z){return{version:$.version,requestId:$.requestId??Uy("hubreq_"),ok:!1,error:{code:W,message:Z}}}class I6{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return J1($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return J1($,{schedules:this.schedules.listSchedules({enabled:typeof $.payload?.enabled==="boolean"?$.payload.enabled:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0,tags:Array.isArray($.payload?.tags)?$.payload?.tags:void 0})});case"schedule.get":return J1($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return J1($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return J1($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return J1($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return J1($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return J1($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return J1($,{executions:this.schedules.listScheduleExecutions({scheduleId:typeof $.payload?.scheduleId==="string"?$.payload.scheduleId:void 0,status:typeof $.payload?.status==="string"?$.payload.status:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0})});case"schedule.stats":return J1($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return J1($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return J1($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return bU($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(W){return bU($,"schedule_command_failed",W instanceof Error?W.message:String(W))}}toCreateInput($){let W=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:W}}toUpdateInput($){let W=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:W}}}function TQ($){return $?new Date($).getTime():void 0}function fy($){let W=$.metadata?{...$.metadata}:void 0;if(W)delete W.__hubScheduleCreatedBy,delete W.__hubScheduleCwd,delete W.__hubRuntimeOptions;return W}function OQ($){let W=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof W?.__hubScheduleCwd==="string"?W.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:TQ($.nextRunAt),lastRunAt:TQ($.lastRunAt),createdBy:typeof W?.__hubScheduleCreatedBy==="string"?W.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:W?.__hubRuntimeOptions&&typeof W.__hubRuntimeOptions==="object"&&!Array.isArray(W.__hubRuntimeOptions)?W.__hubRuntimeOptions:void 0,metadata:fy($)}}function Dy($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function pj($,W){return{executionId:$.runId,scheduleId:W,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:TQ($.startedAt),endedAt:TQ($.completedAt),status:Dy($.status),errorMessage:$.error}}class x6{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new i5({dbPath:$.dbPath}),this.materializer=new u5({store:this.store}),this.runner=new d5({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,eventPublisher:$.eventPublisher,workspaceRoot:"",logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency})}async start(){if(this.disposed)throw Error("HubScheduleService has been disposed");if(this.started)return;this.started=!0,await this.runner.start()}async stop(){await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,await this.runner.dispose(),this.store.close()}createSchedule($){if(dJ($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return OQ(this.store.createHubSchedule($))}getSchedule($){let W=this.store.getHubSchedule($);return W?OQ(W):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((W)=>OQ(W))}updateSchedule($,W){if(W.cronPattern!==void 0)dJ(W.cronPattern);let Z=this.store.getHubSchedule($);if(!Z)return;let Q=W.workspaceRoot!==void 0?W.workspaceRoot.trim():Z.workspaceRoot;if((W.enabled??Z.enabled)&&!Q)throw Error("workspaceRoot is required for enabled schedules");let j=this.store.updateHubSchedule($,{...W,scheduleId:$});return j?OQ(j):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let W=this.store.enqueueHubScheduleRun($,"manual");if(!W)return;await this.runner.tick();let Z=this.store.getRun(W.runId)??W;return pj(Z,$)}triggerScheduleNowDetached($){let W=this.store.enqueueHubScheduleRun($,"manual");if(!W)return;return this.runner.tick().catch(()=>{return}),pj(W,$)}listScheduleExecutions($){let W=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Z={specId:W?.specId,limit:$.limit};return this.store.listRuns(Z).map((J)=>{let j=W??this.store.getSpec(J.specId);if(!j||j.source!=="hub-schedule")return;return pj(J,j.externalId)}).filter((J)=>{if(!J)return!1;return!$.status||J.status===$.status})}getScheduleStats($){let W=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(W.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Z=0,Q=0,J=0,j;for(let X of W){if(X.status==="success"||X.status==="completed")Z+=1;if(!j&&X.status!=="success"&&X.status!=="completed")j=X;if(X.startedAt&&X.endedAt)J+=X.endedAt-X.startedAt,Q+=1}return{totalRuns:W.length,successRate:Z/W.length,avgDurationSeconds:Q>0?J/Q/1000:0,lastFailure:j}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let W=this.store.getSpec($.specId);if(!W||W.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:W.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:W.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+W.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let W={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(W).flatMap((Z)=>Z.source==="hub-schedule"&&Z.nextRunAt?[{spec:Z,nextRunAt:Z.nextRunAt}]:[]).sort((Z,Q)=>String(Z.nextRunAt).localeCompare(String(Q.nextRunAt))).slice(0,$).map(({spec:Z,nextRunAt:Q})=>({scheduleId:Z.externalId,name:Z.title,nextRunAt:Q}))}}UW();import{resolveClineBuildEnv as vy}from"@cline/shared";function cy($,W){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Z=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Z?`Failed to connect to hub at ${W} (${Z} event before socket open).`:`Failed to connect to hub at ${W}.`)}var uy="cline-hub-auth.";function dy($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function ly($,W){let Z=new URL($),Q=new URL(W);return Z.search="",Z.hash="",Q.search="",Q.hash="",Z.toString()===Q.toString()}function kU(){return vy()==="production"?Q1():m0()}async function py($){let W=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),W)return W;let Z=kU(),Q=await _0(Z.discoveryPath);if(Q?.url&&ly($.toString(),Q.url))return Q.authToken;return}async function aj($={}){let W=Z1($);if(!dy($)){let Z=kU(),Q=await _0(Z.discoveryPath);if(Q?.url)return Q.url}return D1(W.host,W.port,W.pathname)}async function zQ($){return await new Promise((W,Z)=>{(async()=>{let Q=new URL($),J=await py(Q);Q.hash="";let j=new WebSocket(Q.toString(),J?[`${uy}${J}`]:void 0),X=new Map,Y=0;j.addEventListener("open",()=>{W({send(V){let B=V.requestId??`hub-client-${++Y}`;return new Promise((H,G)=>{X.set(B,{resolve:H,reject:G});let K={kind:"command",envelope:{...V,requestId:B}};j.send(JSON.stringify(K))})},close(){j.close()}})}),j.addEventListener("message",(V)=>{let B=JSON.parse(String(V.data));if(B.kind==="reply"&&B.envelope.requestId){let H=X.get(B.envelope.requestId);if(H)X.delete(B.envelope.requestId),H.resolve(B.envelope)}}),j.addEventListener("close",()=>{for(let V of X.values())V.reject(Error("Hub connection closed"));X.clear()}),j.addEventListener("error",(V)=>{Z(cy(V,$))})})().catch(Z)})}async function IU($){try{return(await zQ($)).close(),!0}catch{return!1}}async function xU($,W){let Z=await aj($),Q=await zQ(Z);try{return await Q.send({version:W.version??"v1",clientId:W.clientId??"hub-client",...W})}finally{Q.close()}}function oj($){return $?JSON.parse(JSON.stringify($)):{}}function qQ($){let W=$?.session&&typeof $.session==="object"?$.session:void 0;if(!W)return;let Z=W.metadata&&typeof W.metadata==="object"?oj(W.metadata):void 0;return{sessionId:typeof W.sessionId==="string"?W.sessionId:"",parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,metadata:Z}}function gU($,W){return $.error?.message??`hub command failed: ${W}`}function ry($){let W=oj($);if(typeof W.error==="string"&&W.error.trim())return{...W,error:W.error.trim()};let Z=W.result&&typeof W.result==="object"?W.result:void 0;if(typeof Z?.text==="string"&&Z.text.trim())return{...W,error:Z.text.trim()};let Q=Z?.error&&typeof Z.error==="object"?Z.error:void 0;if(typeof Q?.message==="string"&&Q.message.trim())return{...W,error:Q.message.trim()};return W}function mU($){let W=$?.sessionId;return typeof W==="string"&&W.trim()?W.trim():void 0}function iy($){let W=$?.checkpoint;if(!W||typeof W!=="object"||Array.isArray(W))throw Error("hub checkpoint restore returned no checkpoint");let Z=W;if(typeof Z.ref!=="string"||typeof Z.createdAt!=="number"||typeof Z.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Z}function ny($){let W=oj($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||mU(W)||"",eventType:"schedule.execution.completed",payload:W};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||mU(W)||"",eventType:"schedule.execution.failed",payload:W};let Z=$.sessionId?.trim();if(!Z)return;switch($.event){case"iteration.started":return{sessionId:Z,eventType:"runtime.chat.iteration_start",payload:W};case"iteration.finished":return{sessionId:Z,eventType:"runtime.chat.iteration_end",payload:W};case"assistant.delta":return{sessionId:Z,eventType:"runtime.chat.text_delta",payload:W};case"usage.updated":return{sessionId:Z,eventType:"runtime.chat.usage",payload:W};case"session.notice":return{sessionId:Z,eventType:"runtime.chat.notice",payload:W};case"tool.started":return{sessionId:Z,eventType:"runtime.chat.tool_call_start",payload:W};case"tool.finished":return{sessionId:Z,eventType:"runtime.chat.tool_call_end",payload:W};case"approval.requested":return{sessionId:Z,eventType:"approval.requested",payload:W};case"run.aborted":return{sessionId:Z,eventType:"runtime.chat.aborted",payload:W};case"run.failed":return{sessionId:Z,eventType:"runtime.chat.failed",payload:ry($.payload)};case"run.completed":return{sessionId:Z,eventType:"runtime.chat.completed",payload:W};default:return}}class sj{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new _1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-session-client",displayName:$.displayName??"hub session client",workspaceRoot:$.workspaceRoot,cwd:$.cwd})}async ensureMetadataApplied(){if(this.metadataApplied||!this.options.metadata){if(!this.options.metadata)await this.client.connect();return}await this.client.connect(),await this.client.command("client.update",{metadata:this.options.metadata}),this.metadataApplied=!0}async connect(){await this.ensureMetadataApplied()}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession($){await this.ensureMetadataApplied();let W=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),Z=qQ(W.payload);if(!Z?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Z.sessionId,startResult:{sessionId:Z.sessionId,manifestPath:"",messagesPath:Z.messagesPath??""}}}async sendRuntimeSession($,W,Z){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:W.prompt,mode:W.config.mode,attachments:W.attachments,delivery:W.delivery,timeoutSeconds:W.config.timeoutSeconds},$,Z)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let W;try{W=await this.client.command("session.get",void 0,$)}catch(Z){if(Z$(Z))return;throw Z}return qQ(W.payload)}async readMessages($){let W=$.trim();if(!W)return[];await this.ensureMetadataApplied();let Z=await this.client.command("session.messages",{sessionId:W},W);if(!Z.ok)throw Error(gU(Z,"session.messages"));let Q=Z.payload?.messages;return Array.isArray(Q)?Q:[]}async restore($){let W=$.sessionId.trim();if(!W)throw Error("sessionId is required");let Z=$.restore?.messages!==!1;if(Z&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let Q=$.config,J=await this.client.command("session.restore",{sessionId:W,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Q?{workspaceRoot:Q.workspaceRoot,cwd:Q.cwd,sessionConfig:{providerId:Q.provider,modelId:Q.model,apiKey:Q.apiKey,cwd:Q.cwd??Q.workspaceRoot,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:Q.mode??"act",rules:Q.rules,maxIterations:Q.maxIterations,enableTools:Q.enableTools,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},metadata:{source:Q.source??"cli",provider:Q.provider,model:Q.model,enableTools:Q.enableTools,enableSpawn:Q.enableSpawn,enableTeams:Q.enableTeams,prompt:void 0,interactive:Q.interactive!==!1},runtimeOptions:{mode:Q.mode,systemPrompt:Q.systemPrompt,maxIterations:Q.maxIterations,enableTools:Q.enableTools,enableSpawn:Q.enableSpawn,enableTeams:Q.enableTeams,autoApproveTools:Q.autoApproveTools,configExtensions:Q.configExtensions},modelSelection:{provider:Q.provider,model:Q.model,apiKey:Q.apiKey},toolPolicies:Q.toolPolicies}:{}},W);if(!J.ok)throw Error(gU(J,"session.restore"));let j=qQ(J.payload);if(Z&&!j?.sessionId)throw Error("hub checkpoint restore returned no session id");let X=Array.isArray(J.payload?.messages)?J.payload.messages:void 0,Y=iy(J.payload);return{sessionId:j?.sessionId,startResult:j?.sessionId?{sessionId:j.sessionId,manifestPath:"",messagesPath:j.messagesPath??""}:void 0,...X?{messages:X}:{},checkpoint:Y}}async listSessions($){await this.ensureMetadataApplied();let W=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(W.payload?.sessions)?W.payload?.sessions:[]).map((Q)=>qQ({session:Q})).filter((Q)=>Boolean(Q?.sessionId))}async deleteSession($,W=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:W})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,W){let Z=new Set(($.sessionIds??[]).map((J)=>J.trim()).filter(Boolean)),Q=this.client.subscribe((J)=>{let j=ny(J);if(!j)return;if(Z.size>0&&!Z.has(j.sessionId))return;W.onEvent?.(j)});return this.ensureMetadataApplied().catch((J)=>{W.onError?.(J instanceof Error?J:Error(String(J)))}),Q}streamTeamProgress($,W){let Z=this.client.subscribe((Q)=>{if(Q.event!=="team.progress"||!Q.payload)return;W.onProjection?.(Q.payload)});return this.ensureMetadataApplied().catch((Q)=>{W.onError?.(Q instanceof Error?Q:Error(String(Q)))}),Z}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let W=await this.client.command("schedule.list");return Array.isArray(W.payload?.schedules)?W.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,W){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...W})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,W){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list_executions",{scheduleId:$,limit:W});return Array.isArray(Z.payload?.executions)?Z.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let W=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(W.payload?.upcoming)?W.payload?.upcoming:[]}}class tj{client;constructor($){this.client=new _1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let W=await this.client.command("session.list",{limit:$});return Array.isArray(W.payload?.sessions)?W.payload.sessions:[]}subscribeUI($){return this.client.subscribe((W)=>{switch(W.event){case"ui.notify":$.onNotify?.(W.payload);break;case"ui.show_window":$.onShowWindow?.(W.payload);break;case"hub.client.registered":$.onClientRegistered?.(W.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(W.payload??{});break;case"session.created":$.onSessionCreated?.(W.payload??{});break;case"session.updated":$.onSessionUpdated?.(W.payload??{});break;case"session.detached":$.onSessionDetached?.(W.payload??{});break}})}}import{resolveClineBuildEnv as uf}from"@cline/shared";function ay($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Z)=>{if(Z&&typeof Z==="object"&&"type"in Z&&Z.type==="text"&&"text"in Z&&typeof Z.text==="string")return Z.text.trim();return""}).filter(Boolean).join(`
588
+ `).trim()||void 0}var vU=120,ej="...";function fW($){let W=$.trim();if(!W)return"";if(Buffer.byteLength(W,"utf8")<=vU)return W;let Z=vU-Buffer.byteLength(ej,"utf8");if(Z<=0)return ej;let Q="";for(let J of W){if(Buffer.byteLength(Q+J,"utf8")>Z)break;Q+=J}return`${Q}${ej}`}async function cU($){let W=$?.sessionId?.trim()||"unknown",Z=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await u$(Z)].reverse().find((V)=>V.role==="assistant"),j=J?ay(J.content):void 0,X=$?.workspaceRoot?.trim()||"workspace",Y=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():X;return{title:`Task completed (${W})`,body:fW(j&&j.length>0?j:Y.length>0?Y:X),severity:"info"}}import{captureSdkError as EQ,createSessionId as sh}from"@cline/shared";import{createSessionId as ey}from"@cline/shared";import{createSessionId as ty}from"@cline/shared";function oy($){switch($){case"idle":return"idle";case"pending":return"pending";case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function sy($){let W=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())W.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())W.parentAgentId=$.parentAgentId;if($.agentId?.trim())W.agentId=$.agentId;if($.conversationId?.trim())W.conversationId=$.conversationId;if($.messagesPath?.trim())W.messagesPath=$.messagesPath;if($.prompt?.trim())W.prompt=$.prompt;if($.provider?.trim())W.provider=$.provider;if($.model?.trim())W.model=$.model;if($.source?.trim())W.source=$.source;if(typeof $.pid==="number")W.pid=$.pid;return Object.keys(W).length>0?W:void 0}function MQ($,W,Z,Q){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:W?.createdByClientId??"hub",status:oy($.status),participants:W?[...W.participants.values()]:[],metadata:sy($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Z?{usage:{...Z}}:{},...Q?{aggregateUsage:{...Q}}:{}}}function u($,W){return{version:$.version,requestId:$.requestId,ok:!0,...W!==void 0?{payload:W}:{}}}function h($,W,Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:W,message:Z}}}function v6($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function P0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function j8($,W,Z){return{version:"v1",event:$,eventId:ty("hevt_"),sessionId:Z,timestamp:Date.now(),payload:W}}async function S0($,W){let Z=await $.sessionHost.getSession(W);if(!Z)return;let Q=await $.sessionHost.getAccumulatedUsage?.(W);return MQ(Z,$.sessionState.get(W),Q?.usage,Q?.aggregateUsage)}async function c0($,W){let Z=await $.sessionHost.getSession(W);if(!Z)return;let[Q,J]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(W):[],$.sessionHost.getAccumulatedUsage?.(W)]);return C1({session:Z,messages:Q,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function $X($,W,Z,Q,J={}){let j=$.sessionState.get(W);if(j){if(J.interactive!==void 0)j.interactive=J.interactive;if(Q==="creator"&&!j.createdByClientId)j.createdByClientId=Z;if(!j.participants.has(Z))j.participants.set(Z,{clientId:Z,attachedAt:Date.now(),role:Q});return j}let X={createdByClientId:Z,interactive:J.interactive??!0,participants:new Map([[Z,{clientId:Z,attachedAt:Date.now(),role:Q}]])};return $.sessionState.set(W,X),X}function uU($,W,Z,Q,J={}){let j=$.sessionState.get(W);if(j){if(J.interactive!==void 0)j.interactive=J.interactive;if(!j.participants.has(Z))j.participants.set(Z,{clientId:Z,attachedAt:Date.now(),role:Q});return j}let X={interactive:J.interactive??!0,participants:new Map([[Z,{clientId:Z,attachedAt:Date.now(),role:Q}]])};return $.sessionState.set(W,X),X}async function WX($,W){let Z=ey("approval_"),Q=W.sessionId;if($.sessionState.get(Q)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((j)=>{$.pendingApprovals.set(Z,{sessionId:Q,resolve:j}),$.publish($.buildEvent("approval.requested",{approvalId:Z,sessionId:W.sessionId,agentId:W.agentId,conversationId:W.conversationId,iteration:W.iteration,toolCallId:W.toolCallId,toolName:W.toolName,inputJson:JSON.stringify(W.input??null),policy:W.policy},Q))})}function ZX($,W,Z){let Q=$.pendingApprovals.get(W);if(!Q)return;return $.pendingApprovals.delete(W),Q.resolve(Z),{sessionId:Q.sessionId}}function QX($,W,Z){let Q=0;for(let[J,j]of[...$.pendingApprovals.entries()]){if(!W({approvalId:J,sessionId:j.sessionId}))continue;$.pendingApprovals.delete(J),j.resolve({approved:!1,reason:Z}),$.publish($.buildEvent("approval.resolved",{approvalId:J,approved:!1,cancelled:!0,reason:Z},j.sessionId)),Q+=1}return Q}async function dU($,W){let Z=typeof W.payload?.approvalId==="string"?W.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Z))return h(W,"approval_not_found",`Unknown approval: ${Z}`);let J=typeof W.payload?.reason==="string"?W.payload.reason:W.payload?.payload&&typeof W.payload.payload==="object"&&!Array.isArray(W.payload.payload)&&typeof W.payload.payload.reason==="string"?W.payload.payload.reason:void 0,j=W.payload?.approved===!0,X=ZX($,Z,{approved:j,reason:J});if(!X)return h(W,"approval_not_found",`Unknown approval: ${Z}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Z,approved:j,reason:J},X.sessionId)),u(W,{approvalId:Z,approved:j})}import{createSessionId as Zh}from"@cline/shared";function $h($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var lU={debug:10,info:20,warn:30,error:40,silent:50};function Wh(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function i($,W,Z={}){if(lU[$]<lU[Wh()])return;let Q=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:W,...Object.fromEntries(Object.entries(Z).map(([J,j])=>[J,$h(j)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${Q}`);return}console.log(`[hub] ${Q}`)}function JX($,W){let Z=W instanceof Error?W.stack||W.message:String(W);i("error",$,{error:Z})}async function pU($,W,Z,Q,J,j){let X=Zh("capreq_"),Y=performance.now();return i("info","capability.request.start",{requestId:X,sessionId:W,capabilityName:Z,targetClientId:J}),await new Promise((V,B)=>{$.pendingCapabilityRequests.set(X,{sessionId:W,targetClientId:J,capabilityName:Z,onProgress:j,resolve:(H)=>{if(i(H.ok?"info":"warn","capability.request.end",{requestId:X,sessionId:W,capabilityName:Z,targetClientId:J,ok:H.ok,error:H.error,durationMs:Math.round(performance.now()-Y)}),!H.ok){B(Error(H.error||`Capability ${Z} was rejected by ${J}.`));return}V(H.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:X,targetClientId:J,capabilityName:Z,payload:Q},W)),i("info","capability.request.published",{requestId:X,sessionId:W,capabilityName:Z,targetClientId:J})})}function rU($,W){let Z=typeof W.payload?.requestId==="string"?W.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(Z);if(!Q)return h(W,"capability_not_found",`Unknown capability request: ${Z}`);if((W.clientId?.trim()||"")!==Q.targetClientId)return h(W,"capability_wrong_client",`Capability request ${Z} is owned by ${Q.targetClientId}`);if(W.sessionId?.trim()&&W.sessionId.trim()!==Q.sessionId)return h(W,"capability_wrong_session",`Capability request ${Z} belongs to session ${Q.sessionId}`);let j=W.payload?.payload&&typeof W.payload.payload==="object"&&!Array.isArray(W.payload.payload)?W.payload.payload:{};return Q.onProgress?.(j),u(W,{requestId:Z})}function n$($,W,Z){let Q=0;for(let[J,j]of[...$.pendingCapabilityRequests.entries()]){if(!W({requestId:J,...j}))continue;$.pendingCapabilityRequests.delete(J),i("warn","capability.request.cancelled",{requestId:J,sessionId:j.sessionId,capabilityName:j.capabilityName,targetClientId:j.targetClientId,reason:Z}),j.resolve({ok:!1,error:Z}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:j.capabilityName,targetClientId:j.targetClientId,ok:!1,cancelled:!0,error:Z},j.sessionId)),Q+=1}return Q}async function iU($,W){let Z=typeof W.payload?.sessionId==="string"?W.payload.sessionId.trim():W.sessionId?.trim()||"",Q=typeof W.payload?.capabilityName==="string"?W.payload.capabilityName.trim():"",J=typeof W.payload?.targetClientId==="string"?W.payload.targetClientId.trim():"";if(!Z||!Q||!J)return h(W,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let j=W.payload?.payload&&typeof W.payload.payload==="object"&&!Array.isArray(W.payload.payload)?W.payload.payload:{},X=await $.requestCapability(Z,Q,j,J);return u(W,X)}catch(j){return h(W,"capability_request_failed",j instanceof Error?j.message:String(j))}}function nU($,W){let Z=typeof W.payload?.requestId==="string"?W.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(Z);if(!Q)return h(W,"capability_not_found",`Unknown capability request: ${Z}`);let J=W.clientId?.trim()||"";if(J!==Q.targetClientId)return h(W,"capability_wrong_client",`Capability request ${Z} is owned by ${Q.targetClientId}`);if(W.sessionId?.trim()&&W.sessionId.trim()!==Q.sessionId)return h(W,"capability_wrong_session",`Capability request ${Z} belongs to session ${Q.sessionId}`);$.pendingCapabilityRequests.delete(Z);let j=W.payload?.payload&&typeof W.payload.payload==="object"&&!Array.isArray(W.payload.payload)?W.payload.payload:void 0,X=typeof W.payload?.error==="string"?W.payload.error:void 0,Y=W.payload?.ok===!0;return i(Y?"info":"warn","capability.respond",{requestId:Z,sessionId:Q.sessionId,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,respondedByClientId:J,ok:Y,error:X}),Q.resolve({ok:Y,payload:j,error:X}),$.publish($.buildEvent("capability.resolved",{requestId:Z,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,respondedByClientId:J,ok:Y,payload:j,error:X},Q.sessionId)),u(W,{requestId:Z,ok:Y})}import{createSessionId as Qh}from"@cline/shared";function aU($,W){let Z=W.payload,Q=Z?.clientId?.trim()||W.clientId?.trim()||Qh("client_");return $.clients.set(Q,{clientId:Q,clientType:Z?.clientType??"unknown",displayName:Z?.displayName,actorKind:Z?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Z?.transport??"native",capabilities:Z?.capabilities??[],metadata:Z?.metadata,workspaceContext:Z?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:Q,clientType:Z?.clientType??"unknown",displayName:Z?.displayName,connectedAt:Date.now()})),u(W,{clientId:Q})}function oU($,W){let Z=W.clientId?.trim(),Q=Z?$.clients.get(Z):void 0;if(!Z||!Q)return h(W,"client_not_found","Client is not registered with this hub.");let J=v6(W.payload?.metadata);if(Q.lastSeenAt=Date.now(),J)Q.metadata=JSON.parse(JSON.stringify(J));return u(W)}function sU($,W,Z){let Q=W.clientId?.trim();if(Q)$.clients.delete(Q),Z(Q),$.publish($.buildEvent("hub.client.disconnected",{clientId:Q}));return u(W)}function tU($,W){return u(W,{clients:[...$.clients.values()]})}O0();import{existsSync as Wf,mkdirSync as Jh,readdirSync as jh,readFileSync as Xh,rmSync as Yh,writeFileSync as Vh}from"node:fs";import{dirname as Bh,join as eU}from"node:path";import{CONNECTOR_PLATFORMS as Hh,connectorChannelsFromPlatforms as Gh,listConnectorCatalog as Zf,shouldIncludeConnectorField as Kh}from"@cline/shared";import{resolveConnectorDataDir as Fh,resolveConnectorSettingsPath as XX}from"@cline/shared/storage";var Ah=1,$f={startedAt:($)=>typeof $.startedAt==="string"?$.startedAt:void 0,port:($)=>typeof $.port==="number"?$.port:void 0,baseUrl:($)=>typeof $.baseUrl==="string"?$.baseUrl:void 0,connectionMode:($)=>typeof $.connectionMode==="string"?$.connectionMode:void 0,userName:($)=>typeof $.userName==="string"?$.userName:void 0,botUsername:($)=>typeof $.botUsername==="string"?$.botUsername:void 0,applicationId:($)=>typeof $.applicationId==="string"?$.applicationId:void 0,phoneNumberId:($)=>typeof $.phoneNumberId==="string"?$.phoneNumberId:void 0},Uh={discord:{required:["userName","applicationId"],optional:["startedAt","port","baseUrl"]},telegram:{required:["botUsername"],optional:["startedAt"]},gchat:{required:["userName"],optional:["startedAt","port","baseUrl"]},linear:{required:["userName"],optional:["startedAt","port","baseUrl"]},slack:{required:["userName"],optional:["startedAt","connectionMode","port","baseUrl"]},whatsapp:{required:["userName"],optional:["startedAt","phoneNumberId","port","baseUrl"]}};function a$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function DW($){return typeof $==="string"?$.trim():void 0}function Qf($){if(!Wf($))return;try{let W=JSON.parse(Xh($,"utf8"));return a$(W)?W:void 0}catch{return}}function YX(){let $=Qf(XX()),W=a$($?.connectors)?$.connectors:{},Z={};for(let[Q,J]of Object.entries(W)){if(!a$(J))continue;let j=DW(J.type),X=DW(J.configuredAt),Y=DW(J.updatedAt);if(!j||!X||!Y)continue;let V=NQ(J.values),B=a$(J.security)?{enabled:J.security.enabled===!0,values:NQ(J.security.values)}:void 0;Z[Q]={type:j,values:V,security:B,configuredAt:X,updatedAt:Y}}return{version:Ah,connectors:Z}}function Jf($){let W=XX();Jh(Bh(W),{recursive:!0}),Vh(W,`${JSON.stringify($,null,2)}
589
+ `,"utf8")}function NQ($){if(!a$($))return{};let W={};for(let[Z,Q]of Object.entries($))if(typeof Q==="string")W[Z]=Q.trim();return W}function fh($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function Dh($){let W=eU(Fh(),$);if(!Wf(W))return[];return jh(W).filter((Z)=>Z.endsWith(".json")&&!Z.endsWith(".threads.json")).map((Z)=>eU(W,Z))}function _h($,W,Z){let Q=W.botUsername??W.userName??W.applicationId??W.phoneNumberId??String(Z);return`${$}:${Q}`}function Lh($,W){let Z=Qf(W);if(!Z)return;let Q=typeof Z.pid==="number"?Z.pid:void 0,J=typeof Z.hubUrl==="string"?Z.hubUrl:typeof Z.rpcAddress==="string"?Z.rpcAddress:void 0;if(!Q||!J||!fh(Q))return;let j=Uh[$];if(!j)return;let X={};for(let Y of j.required){let V=$f[Y](Z);if(!V||typeof V==="string"&&!V.trim())return;X[Y]=V}for(let Y of j.optional){let V=$f[Y](Z);if(V!==void 0)X[Y]=V}return{id:_h($,X,Q),type:$,pid:Q,hubUrl:J,...X}}function Oh(){let $=[];for(let{name:W}of Zf())for(let Z of Dh(W)){let Q=Lh(W,Z);if(Q)$.push(Q)}return $.sort((W,Z)=>{if(W.type!==Z.type)return W.type.localeCompare(Z.type);let Q=W.botUsername??W.userName??"",J=Z.botUsername??Z.userName??"";return Q.localeCompare(J)})}function Th(){let $=YX();return Object.entries($.connectors).map(([W,Z])=>({id:W,type:Z.type,configuredAt:Z.configuredAt,updatedAt:Z.updatedAt})).sort((W,Z)=>W.type.localeCompare(Z.type))}function VX(){return{available:Gh(),active:Oh(),configured:Th()}}function zh($,W){if($.required&&!W[$.flag]?.trim())throw Error(`${$.label} is required`)}function qh($,W){let Z={};for(let J of $.fields)Z[J.flag]=W[J.flag]??J.initialValue??"";let Q={};for(let J of $.fields){if(!Kh(J,Z))continue;zh(J,Z),Q[J.flag]=Z[J.flag]}return Q}function Mh($){if(!a$($))throw Error("connector.configure payload must be an object.");let W=DW($.channel);if(!W)throw Error("channel is required");let Z=Hh.find((K)=>K.id===W);if(!Z)throw Error(`unknown connector channel: ${W}`);if(!new Set(Zf().map((K)=>K.name)).has(Z.id))throw Error(`connector channel is not available: ${W}`);let J=NQ($.values),j=qh(Z,J),X=a$($.security)?$.security:{},Y=X.enabled===!0,V=NQ(X.values);if(Y&&Z.security)for(let K of Z.security.fields){let F=V[K.key];if(!F)throw Error(K.requiredMessage);let A=K.validate?.(F);if(A)throw Error(A)}let B=YX(),H=new Date().toISOString(),G=B.connectors[W];return B.connectors[W]={type:W,values:j,security:Y?{enabled:!0,values:V}:{enabled:!1,values:{}},configuredAt:G?.configuredAt??H,updatedAt:H},Jf(B),VX()}function Nh($){if(!a$($))throw Error("connector.delete_config payload must be an object.");let W=DW($.channel);if(!W)throw Error("channel is required");let Z=YX();if(delete Z.connectors[W],Object.keys(Z.connectors).length>0)Jf(Z);else Yh(XX(),{force:!0});return VX()}function Rh($){return $==="connector.configure"||$==="connector.delete_config"}function jX($,W,Z){if(!Rh(W.command))return;U8($.telemetry,{ulid:W.sessionId??W.requestId??"hub",tool:W.command,success:Z})}async function jf($,W){try{if(W.command==="connector.channels")return u(W,VX());if(W.command==="connector.configure"){let Z=Mh(W.payload);return jX($,W,!0),u(W,Z)}if(W.command==="connector.delete_config"){let Z=Nh(W.payload);return jX($,W,!0),u(W,Z)}return h(W,"unsupported_connector_command",`unsupported connector command: ${W.command}`)}catch(Z){return jX($,W,!1),h(W,"connector_command_failed",Z instanceof Error?Z.message:String(Z))}}var Eh=30000;function wh($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function Ch($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function Ph($,W,Z){let Q=Z instanceof Error&&Z.message.trim()?Z.message:`Unknown session: ${W}`;return h($,d2,Q)}function Sh($){return $?$:void 0}function bh($){let W=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(W&&Number.isFinite(W)&&W>0)return Math.floor(W);let Z=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(Z&&Number.isFinite(Z)&&Z>0)return Math.floor(Z*1000);return}async function yh($,W,Z,Q){let J=performance.now(),j=!1,X={command:W.command,requestId:W.requestId,clientId:W.clientId,sessionId:Z.sessionId,timeoutMs:Q},Y=setInterval(()=>{if(j)return;let H=Math.round(performance.now()-J);i("warn","run.heartbeat",{...X,elapsedMs:H}),$.publish($.buildEvent("run.heartbeat",{requestId:W.requestId,elapsedMs:H,...Q?{timeoutMs:Q}:{}},Z.sessionId))},Eh),V=$.sessionHost.runTurn(Z);V.then((H)=>{if(!j)return;i("warn","run.late_end",{...X,elapsedMs:Math.round(performance.now()-J),finishReason:H?.finishReason})},(H)=>{if(!j)return;i("error","run.late_error",{...X,elapsedMs:Math.round(performance.now()-J),error:H})});let B;try{if(!Q)return await V;return await Promise.race([V,new Promise((H,G)=>{B=setTimeout(()=>{let K=`Hub run ${W.command} timed out after ${Q}ms.`;j=!0,clearInterval(Y),G(Error(K)),i("error","run.timeout",{...X,elapsedMs:Math.round(performance.now()-J)}),QX($,(F)=>F.sessionId===Z.sessionId,K),n$($,(F)=>F.sessionId===Z.sessionId,K),$.sessionHost.abort(Z.sessionId,K).catch((F)=>{i("error","run.timeout_abort_failed",{...X,error:F})})},Q)})])}finally{if(j=!0,clearInterval(Y),B)clearTimeout(B)}}async function Xf($,W){let Z=P0(W),Q=W.payload&&typeof W.payload==="object"?W.payload:{},J=typeof Q.prompt==="string"?Q.prompt:typeof Q.input==="string"?Q.input:"";if(!J.trim())return h(W,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Z));let j=Q.attachments&&typeof Q.attachments==="object"&&!Array.isArray(Q.attachments)?Q.attachments:void 0,X=Array.isArray(j?.userFiles)?j.userFiles.filter((H)=>typeof H==="string"):void 0,Y=bh(Q);$.suppressNextTerminalEventBySession.set(Z,"run.start.reply");let V;try{V=await yh($,W,{sessionId:Z,prompt:J,mode:Sh(Q.mode),delivery:Q.delivery==="queue"||Q.delivery==="steer"?Q.delivery:void 0,userImages:Array.isArray(j?.userImages)?j.userImages:void 0,userFiles:X,timeoutMs:Y},Y)}catch(H){if($.suppressNextTerminalEventBySession.get(Z)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Z);if(Z$(H))return Ph(W,Z,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Z)),H}if(V){let H=await c0($,Z),G=Ch(V);if($.publish($.buildEvent(wh(V.finishReason),{reason:V.finishReason,...G?{error:G}:{},result:V,...H?{snapshot:H}:{}},Z)),$.suppressNextTerminalEventBySession.get(Z)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Z)}else $.suppressNextTerminalEventBySession.delete(Z);let B=await c0($,Z);return u(W,V||B?{...V?{result:V}:{},...B?{snapshot:B}:{}}:void 0)}async function Yf($,W){let Z=P0(W),Q=typeof W.payload?.reason==="string"?W.payload.reason:"Run was aborted before pending approval or capability request was resolved.";QX($,(J)=>J.sessionId===Z,Q);try{await $.sessionHost.abort(Z,W.payload?.reason)}catch(J){i("warn","run.abort_failed",{command:W.command,requestId:W.requestId,clientId:W.clientId,sessionId:Z,error:J})}finally{n$($,(J)=>J.sessionId===Z,Q)}return u(W,{applied:!0})}async function Vf($,W){let Z=h6(W.payload?.payload);if(!Z)return h(W,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Z),u(W,{applied:!0})}async function Bf($,W){switch(W.type){case"chunk":return;case"agent_event":await hh($,W);return;case"hook":if(W.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:W.payload.toolName},W.payload.sessionId));else if(W.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:W.payload.toolName},W.payload.sessionId));return;case"team_progress":{let Z={type:"team_progress_projection",version:1,sessionId:W.payload.sessionId,summary:W.payload.summary,lastEvent:W.payload.lifecycle};$.publish($.buildEvent("team.progress",Z,W.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:W.payload.sessionId,prompts:W.payload.prompts},W.payload.sessionId));return;case"pending_prompt_submitted":{let Z={id:W.payload.id,prompt:W.payload.prompt,delivery:W.payload.delivery,attachmentCount:W.payload.attachmentCount,userImages:W.payload.userImages,userFiles:W.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:W.payload.sessionId,prompt:Z},W.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:W.payload.sessionId,snapshot:W.payload.snapshot},W.payload.sessionId));return;case"status":{let[Z,Q]=await Promise.all([S0($,W.payload.sessionId),c0($,W.payload.sessionId)]);if(Z)$.publish($.buildEvent("session.updated",{session:Z,...Q?{snapshot:Q}:{}},W.payload.sessionId));return}case"ended":await kh($,W);return;default:return}}async function hh($,W){let{sessionId:Z,event:Q}=W.payload;if(Q.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:Q.iteration},Z));return}if(Q.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:Q.iteration,hadToolCalls:Q.hadToolCalls,toolCallCount:Q.toolCallCount},Z));return}if(Q.type==="content_start"){if(Q.contentType==="text"&&typeof Q.text==="string"&&Q.text.length>0){$.publish($.buildEvent("assistant.delta",{text:Q.text},Z));return}if(Q.contentType==="reasoning"){if(Q.redacted&&!Q.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Z));return}if(typeof Q.reasoning==="string"&&Q.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:Q.reasoning,redacted:Q.redacted===!0},Z));return}if(Q.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:Q.toolCallId,toolName:Q.toolName,input:Q.input},Z));return}}if(Q.type==="content_end"){switch(Q.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:Q.text},Z));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:Q.reasoning},Z));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:Q.toolCallId,toolName:Q.toolName,output:Q.output,error:Q.error},Z));break}return}if(Q.type==="notice"){$.publish($.buildEvent("session.notice",{sessionId:Z,message:Q.message,noticeType:Q.noticeType,...Q.displayRole?{displayRole:Q.displayRole}:{},...Q.reason?{reason:Q.reason}:{},...Q.metadata?{metadata:Q.metadata}:{},agent:{kind:W.payload.teamRole==="teammate"?"teammate":Q.parentAgentId?"subagent":"lead",agentId:Q.agentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamAgentId:W.payload.teamAgentId,teamRole:W.payload.teamRole}},Z));return}if(Q.type==="usage"){let J;try{J=await $.sessionHost.getAccumulatedUsage?.(Z)}catch{J=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Z,delta:{inputTokens:Q.inputTokens,outputTokens:Q.outputTokens,cacheReadTokens:Q.cacheReadTokens??0,cacheWriteTokens:Q.cacheWriteTokens??0,totalCost:Q.cost??0},totals:{inputTokens:Q.totalInputTokens,outputTokens:Q.totalOutputTokens,cacheReadTokens:Q.totalCacheReadTokens??0,cacheWriteTokens:Q.totalCacheWriteTokens??0,totalCost:Q.totalCost??0},usage:J?.usage,aggregateUsage:J?.aggregateUsage,agent:{kind:W.payload.teamRole==="teammate"?"teammate":Q.parentAgentId?"subagent":"lead",agentId:Q.agentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamAgentId:W.payload.teamAgentId,teamRole:W.payload.teamRole}},Z));return}if(Q.type==="done")$.publish($.buildEvent("agent.done",{reason:Q.reason,text:Q.text,iterations:Q.iterations,usage:Q.usage},Z))}async function kh($,W){let Z=$.suppressNextTerminalEventBySession.get(W.payload.sessionId),Q=Z===W.payload.reason||Z==="run.start.reply";if(Q)$.suppressNextTerminalEventBySession.delete(W.payload.sessionId);let[J,j]=await Promise.all([S0($,W.payload.sessionId),c0($,W.payload.sessionId)]);if(W.payload.reason==="completed"){let X=await cU(J);$.publish($.buildEvent("ui.notify",X,W.payload.sessionId))}if(Q)return;$.publish($.buildEvent(W.payload.reason==="aborted"?"run.aborted":W.payload.reason==="error"||W.payload.reason==="failed"?"run.failed":"run.completed",{reason:W.payload.reason,...j?{snapshot:j}:{}},W.payload.sessionId))}import{createSessionId as Af,parseRuntimeConfigExtensions as Uf}from"@cline/shared";var Hf={};w(Hf,{SessionVersioningService:()=>o$,SessionVersioningError:()=>u0});class u0 extends Error{code;constructor($,W){super(W);this.code=$;this.name="SessionVersioningError"}}function Ih($){let W=$.sessionId.trim();if(!W)throw new u0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new u0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new u0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new u0("invalid_restore","checkpointRunCount must be a positive integer");return W}class o${async restoreCheckpoint($){let W=$.restore?.messages!==!1,Z=$.restore?.workspace!==!1,Q=Ih({sessionId:$.sessionId,restoreMessages:W,restoreWorkspace:Z,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(Q);if(!J)throw new u0("session_not_found",`Session ${Q} not found`);let j=W?await $.readMessages(Q):void 0;if(W&&j?.length===0)throw new u0("session_messages_not_found",`No messages found for session ${Q}`);let X=dj({session:J,messages:j,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:W});if(Z)await($.applyWorkspaceCheckpoint??lj)(X.cwd,X.checkpoint);let Y=C1({session:J,messages:j});if(!W)return{checkpoint:X.checkpoint,sourceSnapshot:Y};let V=cj(J,$.checkpointRunCount),B=$.restore?.omitCheckpointMessageFromSession?uj(j??[],$.checkpointRunCount):X.messages??[],H={sourceSession:J,sourceMessages:j,sourceSnapshot:Y,plan:X,restoredCheckpointMetadata:V,initialMessages:B,restoreMessages:W,restoreWorkspace:Z,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new u0("invalid_restore","start is required when restore.messages is true");let G=$.buildStartInput?await $.buildStartInput(H,$.start):$.start,K=await $.startSession(G),F=$.getStartedSessionId?.(K);if(F)await($.retainCheckpointRefs??hG)(X.cwd,F,V?.history??[]);let A=F&&$.readRestoredSession?await $.readRestoredSession(F):void 0;return{sessionId:F,startResult:K,messages:X.messages,checkpoint:X.checkpoint,sourceSnapshot:Y,...A?{restoredSnapshot:C1({session:A,messages:B})}:{}}}}import{HUB_CHECKPOINT_CAPABILITY as De,HUB_COMPACTION_CAPABILITY as _e,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Le,HUB_HOOK_CAPABILITY_PREFIX as Oe,HUB_MISTAKE_LIMIT_CAPABILITY as Te,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as ze,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as qe,isHubToolExecutorName as xh}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as we,HUB_COMPACTION_CAPABILITY as Ce,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Pe,HUB_HOOK_CAPABILITY_PREFIX as Se,HUB_MISTAKE_LIMIT_CAPABILITY as be,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as ye,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as he}from"@cline/shared";var gh=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function X8($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function mh($,W){let Z=typeof $.name==="string"?$.name.trim():"",Q=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",j=X8($.inputSchema);if(!Z||!Q||!j||!J||W.has(J))return;return W.add(J),{kind:"tool",capabilityName:J,name:Z,description:Q,inputSchema:j,...X8($.lifecycle)?{lifecycle:X8($.lifecycle)}:{}}}function HX($){if(!Array.isArray($))return[];let W=[],Z=new Set;for(let Q of $){if(!Q||typeof Q!=="object"||Array.isArray(Q))continue;let J=Q,j=J.kind,X=typeof J.capabilityName==="string"?J.capabilityName.trim():"";if(!X||Z.has(X))continue;if(j==="tool"){let Y=mh(J,Z);if(Y)W.push(Y);continue}if(j==="toolExecutor"){let Y=J.executor;if(!xh(Y))continue;Z.add(X),W.push({kind:"toolExecutor",capabilityName:X,executor:Y});continue}if(j==="hook"){let Y=typeof J.name==="string"?J.name.trim():"";if(!Y)continue;Z.add(X),W.push({kind:"hook",capabilityName:X,name:Y});continue}if(j==="compaction"){Z.add(X),W.push({kind:"compaction",capabilityName:X,...X8(J.config)?{config:X8(J.config)}:{}});continue}if(j==="checkpoint"){Z.add(X),W.push({kind:"checkpoint",capabilityName:X,...X8(J.config)?{config:X8(J.config)}:{}});continue}if(j==="mistakeLimit"){Z.add(X),W.push({kind:"mistakeLimit",capabilityName:X});continue}if(j==="userInstructionService")Z.add(X),W.push({kind:"userInstructionService",capabilityName:X})}return W}function Kf($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function vh($){return Object.hasOwn($,"update")?$.update:$}function _W($){return $.trim().replace(/^\/+/,"").toLowerCase()}function ch($){let W=($??[]).map(_W).filter(Boolean);return W.length>0?new Set(W):void 0}function uh($,W,Z){if(!Z)return!0;let Q=_W($),J=_W(W),j=Q.includes(":")?Q.split(":").at(-1)??Q:Q,X=J.includes(":")?J.split(":").at(-1)??J:J;return Z.has(Q)||Z.has(J)||Z.has(j)||Z.has(X)}function BX($,W){let Z=ch(W);return $.records.skill.map((Q)=>({id:Q.id,name:Q.item.name,description:"description"in Q.item&&typeof Q.item.description==="string"?Q.item.description:void 0,disabled:Q.item.disabled===!0,skill:Q.item})).filter((Q)=>uh(Q.id,Q.name,Z))}function Gf($,W){let Z=async(Q,J)=>{let j=_W(Q),Y=BX($,W).filter((K)=>K.id===j||_W(K.name)===j||K.id.endsWith(`:${j}`)).filter((K)=>!K.disabled);if(Y.length!==1)return Y.length>1?`Skill "${Q}" is ambiguous. Use one of: ${Y.map((K)=>K.id).join(", ")}`:`Skill "${Q}" not found.`;let V=Y[0].skill,B=J?.trim(),H=B?`
590
590
  <command-args>${B}</command-args>`:"",G=V.description?.trim()?`Description: ${V.description.trim()}
591
591
 
592
592
  `:"";return`<command-name>${V.name}</command-name>${H}
593
593
  <command-instructions>
594
594
  ${G}${V.instructions}
595
- </command-instructions>`};return Object.defineProperty(Z,"configuredSkills",{get:()=>XX($,W).map(({skill:Q,...J})=>J),enumerable:!0}),Z}function gh($,W,Z,Q){let J={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},j=async()=>{let X=await Q($,Z.capabilityName,{},W);if(X?.snapshot)J=X.snapshot};return{start:j,stop:()=>{},refreshType:async()=>{await j()},listRecords:(X)=>[...J.records[X]],listRuntimeCommands:()=>[...J.runtimeCommands],resolveRuntimeSlashCommand:(X)=>{if(!X.startsWith("/")||X.length<2)return X;let V=X.match(/^\/(\S+)/)?.[1];if(!V)return X;let B=J.runtimeCommands.find((H)=>H.name===V);return B?`${B.instructions}${X.slice(V.length+1)}`:X},hasConfiguredSkills:(X)=>XX(J,X).some((Y)=>!Y.disabled),createSkillsExecutor:(X)=>jf(J,X),createExtension:(X)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[X.includeRules?"rules":void 0,X.registerSkillsTool?"tools":void 0,X.includeSkills||X.includeWorkflows?"commands":void 0].filter((Y)=>Boolean(Y))},setup(Y){if(X.includeRules)Y.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>Y6(J.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(X.registerSkillsTool)Y.registerTool(K2(jf(J,X.allowedSkillNames)));for(let V of J.runtimeCommands.filter((B)=>B.kind==="skill"&&X.includeSkills||B.kind==="workflow"&&X.includeWorkflows))Y.registerCommand({name:V.name,description:V.description,handler:(B)=>{let H=B.trim();return H?`${V.instructions}
595
+ </command-instructions>`};return Object.defineProperty(Z,"configuredSkills",{get:()=>BX($,W).map(({skill:Q,...J})=>J),enumerable:!0}),Z}function dh($,W,Z,Q){let J={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},j=async()=>{let X=await Q($,Z.capabilityName,{},W);if(X?.snapshot)J=X.snapshot};return{start:j,stop:()=>{},refreshType:async()=>{await j()},listRecords:(X)=>[...J.records[X]],listRuntimeCommands:()=>[...J.runtimeCommands],resolveRuntimeSlashCommand:(X)=>{if(!X.startsWith("/")||X.length<2)return X;let V=X.match(/^\/(\S+)/)?.[1];if(!V)return X;let B=J.runtimeCommands.find((H)=>H.name===V);return B?`${B.instructions}${X.slice(V.length+1)}`:X},hasConfiguredSkills:(X)=>BX(J,X).some((Y)=>!Y.disabled),createSkillsExecutor:(X)=>Gf(J,X),createExtension:(X)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[X.includeRules?"rules":void 0,X.registerSkillsTool?"tools":void 0,X.includeSkills||X.includeWorkflows?"commands":void 0].filter((Y)=>Boolean(Y))},setup(Y){if(X.includeRules)Y.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>V6(J.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(X.registerSkillsTool)Y.registerTool(K2(Gf(J,X.allowedSkillNames)));for(let V of J.runtimeCommands.filter((B)=>B.kind==="skill"&&X.includeSkills||B.kind==="workflow"&&X.includeWorkflows))Y.registerCommand({name:V.name,description:V.description,handler:(B)=>{let H=B.trim();return H?`${V.instructions}
596
596
 
597
- ${H}`:V.instructions}})}})}}function mh($,W,Z,Q){let J=Z.map((j)=>[j.executor,async(...X)=>{let Y=X.at(-1),V=X.slice(0,-1);return(await Q($,j.capabilityName,{executor:j.executor,args:V,context:Xf(Y)},W))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function vh($,W,Z,Q){if(Z.length===0)return;return Z.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema,lifecycle:J.lifecycle,async execute(j,X){return(await Q($,J.capabilityName,{toolName:J.name,input:j,context:Xf(X)},W,X.emitUpdate?(V)=>{X.emitUpdate?.(kh(V))}:void 0))?.result}}))}function ch($,W,Z,Q){let J=new Map(Z.map((X)=>[X.name,X])),j={};for(let X of yh){let Y=J.get(X);if(!Y)continue;j[X]=async(V)=>{return(await Q($,Y.capabilityName,{context:V},W))?.control}}return Object.keys(j).length>0?j:void 0}function VX($){let W=$.contributions.filter((V)=>V.kind==="toolExecutor"),Z=$.contributions.filter((V)=>V.kind==="tool"),Q=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),j=$.contributions.find((V)=>V.kind==="checkpoint"),X=$.contributions.find((V)=>V.kind==="mistakeLimit"),Y=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:mh($.sessionId,$.targetClientId,W,$.requestCapability),localRuntime:{...Q.length>0?{hooks:ch($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...Z.length>0?{extraTools:vh($.sessionId,$.targetClientId,Z,$.requestCapability)}:{},...J?{compaction:{...$.sessionConfig?.compaction??{},...J.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,J.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...j?{checkpoint:{...$.sessionConfig?.checkpoint??{},...j.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}:{},...Y?{userInstructionService:gh($.sessionId,$.targetClientId,Y,$.requestCapability)}:{}}}}var Yf="hubCapabilityOwnerClientId";function MQ($){return typeof $==="string"&&$.trim().length>0?$.trim():void 0}function uh($){if($==="low"||$==="medium"||$==="high"||$==="xhigh"||$===null)return $;return}function dh($){let W=m6($)??{},Z={},Q=MQ(W.providerId);if(Q)Z.providerId=Q;let J=MQ(W.modelId);if(J)Z.modelId=J;let j=MQ(W.apiKey);if(j!==void 0)Z.apiKey=j;let X=MQ(W.baseUrl);if(X!==void 0)Z.baseUrl=X;if(W.headers&&typeof W.headers==="object")Z.headers=W.headers;if(W.providerConfig&&typeof W.providerConfig==="object")Z.providerConfig=W.providerConfig;if(Object.hasOwn(W,"thinking")){if(typeof W.thinking==="boolean"||W.thinking===null)Z.thinking=W.thinking}if(Object.hasOwn(W,"reasoningEffort")){let Y=uh(W.reasoningEffort);if(Y!==void 0)Z.reasoningEffort=Y}if(Object.hasOwn(W,"thinkingBudgetTokens")){if(typeof W.thinkingBudgetTokens==="number"&&Number.isFinite(W.thinkingBudgetTokens)&&W.thinkingBudgetTokens>0)Z.thinkingBudgetTokens=Math.trunc(W.thinkingBudgetTokens);else if(W.thinkingBudgetTokens===null)Z.thinkingBudgetTokens=null}return O2(Z)}function lh($,W){return $.sessionState.get(W)?.createdByClientId}function ph($){if(!$||!(Yf in $))return $;let W={...$};return delete W[Yf],W}function Hf($){let W=lh($.ctx,$.sessionId);if(!W)return h($.envelope,"session_wrong_client",`Session ${$.sessionId} has no owner`);if(W!==$.clientId)return h($.envelope,"session_wrong_client",`Session ${$.sessionId} is owned by ${W}`);return}async function Gf($,W,Z){let Q=performance.now(),J={command:W.command,requestId:W.requestId,clientId:W.clientId,sessionId:W.sessionId};p("info","session.create.begin",J);let j=W.payload&&typeof W.payload==="object"?W.payload:{},X=j.metadata&&typeof j.metadata==="object"?JSON.parse(JSON.stringify(j.metadata)):{},Y=j.sessionConfig&&typeof j.sessionConfig==="object"?JSON.parse(JSON.stringify(j.sessionConfig)):void 0,V=j.runtimeOptions&&typeof j.runtimeOptions==="object"?j.runtimeOptions:{},B=G1(j.initialCompactionState);if(typeof Y?.mode==="string")X.mode=Y.mode;else if(typeof V.mode==="string")X.mode=V.mode;if(typeof Y?.systemPrompt==="string")X.systemPrompt=Y.systemPrompt;else if(typeof V.systemPrompt==="string")X.systemPrompt=V.systemPrompt;if(Y?.checkpoint?.enabled===!0)X.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)X.checkpointEnabled=!0;let H=j.modelSelection&&typeof j.modelSelection==="object"?j.modelSelection:{},G=typeof j.workspaceRoot==="string"&&j.workspaceRoot.trim()?j.workspaceRoot.trim():typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():"";if(!G)return p("warn","session.create.invalid",{...J,reason:"missing_workspace_root"}),h(W,"invalid_session_create","session.create requires workspaceRoot or cwd");let K=W.clientId?.trim()||"hub-client",F=YX(V.clientContributions);p("info","session.create.contributions_parsed",{...J,clientId:K,workspaceRoot:G,cwd:typeof j.cwd==="string"?j.cwd:void 0,contributionCount:F.length});let f=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||Vf(),U=Bf(V.configExtensions);p("info","session.create.runtime_build.begin",{...J,sessionId:f,configExtensionCount:U?.length??0});let _=VX({sessionId:f,targetClientId:K,contributions:F,sessionConfig:Y,requestCapability:$.requestCapability});p("info","session.create.start_session.begin",{...J,sessionId:f,provider:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof X.provider==="string"?X.provider:"hub"),model:Y?.modelId??(typeof H.model==="string"?H.model:typeof X.model==="string"?X.model:"hub")});let D=await $.sessionHost.startSession({source:typeof X.source==="string"?X.source:void 0,interactive:X.interactive!==!1,sessionMetadata:Object.keys(X).length>0?X:void 0,initialMessages:Array.isArray(j.initialMessages)?j.initialMessages:void 0,initialCompactionState:B,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:U,..._.localRuntime},capabilities:{toolExecutors:_.toolExecutors,requestToolApproval:Z},config:{...Y??{},sessionId:f,providerId:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof X.provider==="string"?X.provider:"hub"),modelId:Y?.modelId??(typeof H.model==="string"?H.model:typeof X.model==="string"?X.model:"hub"),apiKey:Y?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:Y?.cwd??(typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():G),workspaceRoot:Y?.workspaceRoot??G,systemPrompt:Y?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:Y?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:Y?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:Y?.enableTools??V.enableTools!==!1,enableSpawnAgent:Y?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:Y?.enableAgentTeams??V.enableTeams!==!1,checkpoint:Y?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:Y?.teamName??(typeof X.teamName==="string"?X.teamName:void 0)},toolPolicies:j.toolPolicies&&typeof j.toolPolicies==="object"&&!Array.isArray(j.toolPolicies)?JSON.parse(JSON.stringify(j.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});p("info","session.create.start_session.end",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-Q),hasImmediateResult:!!D.result}),sj($,D.sessionId,K,"creator",{interactive:X.interactive!==!1}),p("info","session.create.read_records.begin",{...J,sessionId:D.sessionId});let[M,T]=await Promise.all([S0($,D.sessionId),d0($,D.sessionId)]);if(p("info","session.create.read_records.end",{...J,sessionId:D.sessionId,hasSession:!!M,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-Q)}),M)$.publish($.buildEvent("session.created",{session:M,...T?{snapshot:T}:{}},D.sessionId));return p("info","session.create.reply",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-Q)}),u(W,{session:M,...T?{snapshot:T}:{}})}async function Kf($,W,Z){let Q=W.payload&&typeof W.payload==="object"?W.payload:{},J=typeof Q.sessionId==="string"?Q.sessionId.trim():W.sessionId?.trim()||"",j=Q.checkpointRunCount;if(!J)return h(W,"invalid_restore","session.restore requires a session id");let X=Q.restore&&typeof Q.restore==="object"?Q.restore:{},Y=X.messages!==!1;if(typeof j!=="number")return h(W,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=Q.sessionConfig&&typeof Q.sessionConfig==="object"?JSON.parse(JSON.stringify(Q.sessionConfig)):void 0;if(Y&&!V)return h(W,"invalid_restore","sessionConfig is required when restore.messages is true");let B=Q.runtimeOptions&&typeof Q.runtimeOptions==="object"?Q.runtimeOptions:{},H=G1(Q.initialCompactionState),G=Q.metadata&&typeof Q.metadata==="object"?JSON.parse(JSON.stringify(Q.metadata)):{};if(typeof V?.mode==="string")G.mode=V.mode;else if(typeof B.mode==="string")G.mode=B.mode;if(typeof V?.systemPrompt==="string")G.systemPrompt=V.systemPrompt;else if(typeof B.systemPrompt==="string")G.systemPrompt=B.systemPrompt;if(V?.checkpoint?.enabled===!0)G.checkpointEnabled=!0;else if(B.checkpointEnabled===!0)G.checkpointEnabled=!0;let K=Q.modelSelection&&typeof Q.modelSelection==="object"?Q.modelSelection:{},F=W.clientId?.trim()||"hub-client",A=YX(B.clientContributions),U=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||Vf(),_=Bf(B.configExtensions),D=VX({sessionId:U,targetClientId:F,contributions:A,sessionConfig:V,requestCapability:$.requestCapability}),T=await new o$().restoreCheckpoint({sessionId:J,checkpointRunCount:j,restore:{messages:X.messages,workspace:X.workspace,omitCheckpointMessageFromSession:X.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(N)=>$.sessionHost.getSession(N),readMessages:(N)=>$.sessionHost.readSessionMessages(N),buildStartInput:(N)=>{if(N.restoredCheckpointMetadata)G.checkpoint=N.restoredCheckpointMetadata;let y=typeof Q.workspaceRoot==="string"&&Q.workspaceRoot.trim()?Q.workspaceRoot.trim():typeof Q.cwd==="string"&&Q.cwd.trim()?Q.cwd.trim():N.sourceSession.workspaceRoot||N.sourceSession.cwd;return{source:typeof G.source==="string"?G.source:void 0,interactive:G.interactive!==!1,sessionMetadata:{...G,restoredFromSessionId:J,restoredCheckpointRunCount:j},initialMessages:N.initialMessages,initialCompactionState:H,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:_,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Z},config:{...V??{},sessionId:U,providerId:V?.providerId??(typeof K.provider==="string"?K.provider:N.sourceSession.provider),modelId:V?.modelId??(typeof K.model==="string"?K.model:N.sourceSession.model),apiKey:V?.apiKey??(typeof K.apiKey==="string"?K.apiKey:""),cwd:V?.cwd??N.plan.cwd,workspaceRoot:V?.workspaceRoot??y,systemPrompt:V?.systemPrompt??(typeof B.systemPrompt==="string"?B.systemPrompt:""),mode:V?.mode??(B.mode==="plan"||B.mode==="yolo"?B.mode:"act"),maxIterations:V?.maxIterations??(typeof B.maxIterations==="number"?B.maxIterations:void 0),enableTools:V?.enableTools??B.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??B.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??B.enableTeams!==!1,checkpoint:V?.checkpoint??(B.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof G.teamName==="string"?G.teamName:void 0)},toolPolicies:Q.toolPolicies&&typeof Q.toolPolicies==="object"&&!Array.isArray(Q.toolPolicies)?JSON.parse(JSON.stringify(Q.toolPolicies)):B.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(N)=>$.sessionHost.startSession(N),getStartedSessionId:(N)=>N.sessionId,readRestoredSession:(N)=>$.sessionHost.getSession(N)});if(!Y)return u(W,{checkpoint:T.checkpoint});let O=T.startResult;if(!O)return h(W,"restore_failed","Checkpoint restore did not start a session");sj($,O.sessionId,F,"creator",{interactive:G.interactive!==!1});let[L,C]=await Promise.all([S0($,O.sessionId),d0($,O.sessionId)]);if(L)$.publish($.buildEvent("session.created",{session:L,...C?{snapshot:C}:{}},O.sessionId));return u(W,{session:L,...C?{snapshot:C}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof l0)return h(W,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return h(W,"restore_failed",V instanceof Error?V.message:String(V))}}async function Ff($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_attach","session.attach requires a session id");let Q=await S0($,Z);if(!Q)return h(W,"session_not_found",`Unknown session: ${Z}`);IU($,Z,W.clientId?.trim()||"hub-client","participant");let J=await S0($,Z);return $.publish($.buildEvent("session.attached",{session:J??Q},Z)),u(W,{session:J??Q})}async function Af($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_detach","session.detach requires a session id");let Q=W.clientId?.trim()||"hub-client",J=$.sessionState.get(Z);if(J){if(J.participants.delete(Q),J.createdByClientId===Q)J.createdByClientId=void 0;if(J.participants.size===0)$.sessionState.delete(Z)}n$($,(Y)=>Y.sessionId===Z&&Y.targetClientId===Q,`Capability owner client ${Q} detached before request was resolved.`);let[j,X]=await Promise.all([S0($,Z),d0($,Z)]);return $.publish($.buildEvent("session.detached",j?{session:j,...X?{snapshot:X}:{},clientId:Q}:{clientId:Q},Z)),u(W)}async function Uf($,W){let Z=P0(W),Q=W.payload?.includeSnapshot===!0,[J,j]=await Promise.all([S0($,Z),Q?d0($,Z):Promise.resolve(void 0)]);return J?u(W,{session:J,...j?{snapshot:j}:{}}):h(W,"session_not_found",`Unknown session: ${Z}`)}async function ff($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_id","session.messages requires a session id");if(!await S0($,Z))return h(W,"session_not_found",`Unknown session: ${Z}`);let J=await $.sessionHost.readSessionMessages(Z);return u(W,{sessionId:Z,messages:J})}async function Df($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_id","session.compaction.get requires a session id");if(!await S0($,Z))return h(W,"session_not_found",`Unknown session: ${Z}`);let J=W.clientId?.trim()||"hub-client",j=Hf({sessionId:Z,ctx:$,clientId:J,envelope:W});if(j)return j;let X=await $.sessionHost.readSessionCompactionState(Z);return u(W,{sessionId:Z,state:X})}async function _f($,W){let Z=typeof W.payload?.limit==="number"?W.payload.limit:200,J=(await $.sessionHost.listSessions(Z)).map((j)=>zQ(j,$.sessionState.get(j.sessionId)));return u(W,{sessions:J})}async function Lf($,W){let Z=P0(W),Q=ph(m6(W.payload?.metadata)),J=await $.sessionHost.updateSession(Z,{metadata:Q}),[j,X]=await Promise.all([S0($,Z),d0($,Z)]);if(j)$.publish($.buildEvent("session.updated",{session:j,...X?{snapshot:X}:{}},Z));return{version:W.version,requestId:W.requestId,ok:J.updated,payload:{updated:J.updated,session:j,...X?{snapshot:X}:{}}}}async function Of($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_update_connection","session.update_connection requires a session id");let Q=$.sessionHost.updateSessionConnection;if(!Q)return h(W,"unsupported_session_update_connection","runtime host does not support session connection updates");let J=m6(W.payload),j=dh(J?.updates);return await Q.call($.sessionHost,Z,j),u(W,{sessionId:Z,updated:!0})}async function Tf($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_id","session.compaction.update requires a session id");let Q=W.clientId?.trim()||"hub-client",J=await S0($,Z);if(!J)return h(W,"session_not_found",`Unknown session: ${Z}`);let j=Hf({sessionId:Z,ctx:$,clientId:Q,envelope:W});if(j)return j;let X=W.payload&&typeof W.payload==="object"?W.payload:{},Y=G1(X.state);if(!Y)return h(W,"invalid_compaction_state","session.compaction.update requires a valid compaction state");let V=await $.sessionHost.updateSessionCompactionState(Z,Y),[B,H]=V.updated?await Promise.all([S0($,Z),d0($,Z)]):[J,void 0];if(V.updated)$.publish($.buildEvent("session.updated",{session:B??J,...H?{snapshot:H}:{}},Z));return{version:W.version,requestId:W.requestId,ok:!0,payload:{updated:V.updated,session:B??J,...H?{snapshot:H}:{}}}}async function zf($,W){let Z=P0(W),Q=await $.sessionHost.deleteSession(Z);return $.sessionState.delete(Z),u(W,{deleted:Q})}async function qf($,W){let Z=P0(W),Q=$.sessionHost.pendingPrompts;if(!Q)return h(W,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await Q.list({sessionId:Z});return u(W,{sessionId:Z,prompts:J})}async function Mf($,W){let Z=P0(W),Q=typeof W.payload?.promptId==="string"?W.payload.promptId.trim():"",J=typeof W.payload?.prompt==="string"?W.payload.prompt:void 0,j=W.payload?.delivery==="queue"||W.payload?.delivery==="steer"?W.payload.delivery:void 0,X=$.sessionHost.pendingPrompts;if(!X)return h(W,"pending_prompts_unavailable","Pending prompt service is not available.");let Y=await X.update({sessionId:Z,promptId:Q,prompt:J,delivery:j});return u(W,Y)}async function Rf($,W){let Z=P0(W),Q=typeof W.payload?.promptId==="string"?W.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return h(W,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await J.delete({sessionId:Z,promptId:Q});return u(W,j)}function Nf($){switch($){case"schedule.create":return"schedule.created";case"schedule.update":case"schedule.enable":case"schedule.disable":return"schedule.updated";case"schedule.delete":return"schedule.deleted";case"schedule.trigger":return"schedule.triggered";default:return}}var ih=new Set(["skills","workflows","rules","tools","mcp"]);function BX($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function DW($,W){let Z=$[W];if(Z===void 0)return;if(typeof Z!=="string")throw Error(`settings payload '${W}' must be a string.`);return Z}function nh($,W){let Z=$[W];if(Z===void 0)return;if(typeof Z!=="boolean")throw Error(`settings payload '${W}' must be a boolean.`);return Z}function Ef($){if($===void 0)return{};if(!BX($))throw Error("settings.list payload must be an object.");return{cwd:DW($,"cwd"),workspaceRoot:DW($,"workspaceRoot"),availabilityContext:BX($.availabilityContext)?$.availabilityContext:void 0}}function ah($){if(!BX($))throw Error("settings.toggle payload must be an object.");let{type:W}=$;if(typeof W!=="string"||!ih.has(W))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...Ef($),type:W,id:DW($,"id"),path:DW($,"path"),name:DW($,"name"),enabled:nh($,"enabled")}}class v6{options;clients=new Map;listeners=new Map;sessionState=new Map;pendingApprovals=new Map;pendingCapabilityRequests=new Map;suppressNextTerminalEventBySession=new Map;schedules;scheduleCommands;settings;cronService;sessionHost;hubId=rh("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new b1({sessionService:new S1(new C1),fetch:$.fetch,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(W)=>this.publish(W),buildEvent:j8,requestCapability:(W,Z,Q,J,j)=>mU(this.ctx,W,Z,Q,J,j)},this.schedules=new I6({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(W,Z)=>{let Q=W==="schedule.execution.completed"?"schedule.execution_completed":W==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!Q)return;this.publish(j8(Q,Z&&typeof Z==="object"?Z:void 0))}}),this.scheduleCommands=new k6(this.schedules),this.settings=$.settingsService??new m$,$.cronOptions)this.cronService=new r5({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((W)=>{Qf(this.ctx,W).catch((Z)=>{WX("session event handling failed",Z),RQ(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Z,severity:"error",handled:!0,context:{eventType:W.type,sessionId:W.payload.sessionId}})})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}}async stop(){for(let $ of this.pendingApprovals.keys())ej(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(n$(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.sessionHost.dispose("hub_server_stop"),await this.schedules.dispose(),this.cronService)try{await this.cronService.dispose()}catch($){console.error("[hub] cron service stop failed",$)}}async handleCommand($){try{let W=await this.dispatchCommand($);return this.captureFailedReply($,W),W}catch(W){throw RQ(this.options.telemetry,{component:"core",operation:"hub.command",error:W,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),W}}async dispatchCommand($){switch($.command){case"client.register":return dU(this.ctx,$);case"client.update":return lU(this.ctx,$);case"client.unregister":return pU(this.ctx,$,(W)=>{this.listeners.delete(W),this.detachClientFromSessions(W)});case"client.list":return rU(this.ctx,$);case"session.create":return await Gf(this.ctx,$,(W)=>tj(this.ctx,W));case"session.restore":return await Kf(this.ctx,$,(W)=>tj(this.ctx,W));case"session.attach":return await Ff(this.ctx,$);case"session.detach":return await Af(this.ctx,$);case"session.get":return await Uf(this.ctx,$);case"session.messages":return await ff(this.ctx,$);case"session.compaction.get":return await Df(this.ctx,$);case"session.list":return await _f(this.ctx,$);case"session.update":return await Lf(this.ctx,$);case"session.update_connection":return await Of(this.ctx,$);case"session.compaction.update":return await Tf(this.ctx,$);case"session.pending_prompts":return await qf(this.ctx,$);case"session.update_pending_prompt":return await Mf(this.ctx,$);case"session.remove_pending_prompt":return await Rf(this.ctx,$);case"session.delete":return await zf(this.ctx,$);case"session.hook":return await Zf(this.ctx,$);case"run.start":case"session.send_input":return await $f(this.ctx,$);case"run.abort":return await Wf(this.ctx,$);case"capability.request":return await cU(this.ctx,$);case"approval.respond":return await xU(this.ctx,$);case"capability.respond":return uU(this.ctx,$);case"capability.progress":return vU(this.ctx,$);case"ui.notify":return this.publish(j8("ui.notify",$.payload??{})),u($);case"ui.show_window":return this.publish(j8("ui.show_window",$.payload??{})),u($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"connector.channels":case"connector.configure":case"connector.delete_config":return await eU(this.ctx,$);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let W=await this.scheduleCommands.handleCommand($);if(W.ok){let Z=Nf($.command);if(Z)this.publish(j8(Z,W.payload))}return W}}}captureFailedReply($,W){if(W.ok||!W.error||!oh(W.error.code))return;RQ(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(W.error.message),severity:W.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:W.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let W=await this.settings.list(Ef($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:W}}}catch(W){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:W instanceof Error?W.message:String(W)}}}}async handleSettingsToggle($){try{let W=await this.settings.toggle(ah($.payload));return this.publish(j8("settings.changed",{types:W.changedTypes,snapshot:W.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:W.snapshot,changedTypes:W.changedTypes}}}catch(W){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:W instanceof Error?W.message:String(W)}}}}subscribe($,W,Z){let Q=this.listeners.get($)??new Set,J={sessionId:Z?.sessionId,listener:W};return Q.add(J),this.listeners.set($,Q),()=>{let j=this.listeners.get($);if(!j)return;if(j.delete(J),j.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[W,Z]of this.sessionState.entries()){if(Z.participants.delete($),Z.createdByClientId===$)Z.createdByClientId=void 0;if(Z.participants.size===0)this.sessionState.delete(W)}n$(this.ctx,(W)=>W.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let W of this.listeners.values())for(let Z of W){if(Z.sessionId&&Z.sessionId!==$.sessionId)continue;try{Z.listener($)}catch(Q){WX(`listener threw while publishing ${$.event}`,Q),RQ(this.options.telemetry,{component:"core",operation:"hub.publish",error:Q,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function oh($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as $k}from"node:crypto";import Wk from"node:http";import Zk from"node:net";import{URL as FX}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as Pf,HUB_CAPABILITIES as Qk,isHubProtocolCompatible as Jk,MAX_CLIENT_HUB_PROTOCOL_VERSION as Sf,MIN_CLIENT_HUB_PROTOCOL_VERSION as bf}from"@cline/shared";import{WebSocketServer as jk}from"ws";import{captureSdkError as wf,HUB_COMMAND_SLOW_LOG_MS as sh,resolveHubCommandTimeoutMs as th,safeJsonParse as eh}from"@cline/shared";function HX($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function Cf($,W,Z){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:W,message:Z}}}class _W{transport;telemetry;constructor($,W){this.transport=$;this.telemetry=W}attach($){let W=new Map,Z=new Set,Q=!1,J=(V)=>{try{$.send(JSON.stringify(V))}catch(B){console.error(`[hub] failed to send websocket frame: ${B instanceof Error?B.stack||B.message:String(B)}`)}},j=(V)=>{J({kind:"event",envelope:V})},X=async(V)=>{try{let B=JSON.parse(V.data);switch(B.kind){case"command":{let H=performance.now(),G=!1,K=HX(B);p("info","command.start",K);let F=setTimeout(()=>{if(G)return;p("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-H)})},sh),A=this.transport.command(B.envelope);A.then((T)=>{if(!G)return;p(T.ok?"warn":"error","command.late_end",{...K,elapsedMs:Math.round(performance.now()-H),ok:T.ok,errorCode:T.error?.code,errorMessage:T.error?.message})},(T)=>{if(!G)return;p("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-H),error:T})});let f=!1,U,_,D=th(B.envelope.command,B.envelope.timeoutMs);try{_=D===null?await A:await Promise.race([A,new Promise((T)=>{U=setTimeout(()=>{f=!0,wf(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${B.envelope.command} did not complete within ${D}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:D}}),T(Cf(B,"hub_command_timeout",`Hub command ${B.envelope.command} did not complete within ${D}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${B.envelope.requestId}.`))},D)})])}catch(T){if(clearTimeout(F),U)clearTimeout(U);throw T}if(G=f,clearTimeout(F),U)clearTimeout(U);let M=Math.round(performance.now()-H);if(f)p("error","command.timeout",{...K,durationMs:M,timeoutMs:D});else p(_.ok?"info":"warn","command.end",{...K,durationMs:M,ok:_.ok,errorCode:_.error?.code,errorMessage:_.error?.message});if(B.envelope.command==="client.register"&&_.ok){let O=(B.envelope.payload??{}).clientId?.trim()||B.envelope.clientId?.trim();if(O)Z.add(O)}else if(B.envelope.command==="client.unregister"&&_.ok){let T=B.envelope.clientId?.trim();if(T)Z.delete(T)}J({kind:"reply",envelope:_});break}case"stream.subscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;if(W.has(H))break;let G=await this.transport.subscribe(B.clientId,j,{sessionId:B.sessionId});W.set(H,G);break}case"stream.unsubscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;W.get(H)?.(),W.delete(H);break}case"reply":case"event":break}}catch(B){let H=typeof V.data==="string"?eh(V.data):void 0;if(!H||H.kind!=="command"){p("error","rejected malformed websocket frame",{error:B});return}p("error","command.error",{...HX(H),error:B}),wf(this.telemetry,{component:"core",operation:"hub.websocket_command",error:B,severity:"error",handled:!0,context:HX(H)}),J({kind:"reply",envelope:Cf(H,"command_failed",B instanceof Error?B.message:"Unknown hub error")})}},Y=()=>{if(Q)return;Q=!0;for(let V of W.values())V();W.clear();for(let V of Z)this.transport.command({version:"v1",command:"client.unregister",clientId:V});Z.clear(),$.removeEventListener("message",X),$.removeEventListener("close",Y)};return $.addEventListener("message",X),$.addEventListener("close",Y),Y}}class LW{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,W,Z){return this.transport.subscribe($,W,Z)}}function Xk($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((W)=>Buffer.from(W))).toString();return String($)}function Yk($){return{send(W){$.send(W)},addEventListener(W,Z){if(W==="message"){$.on("message",(Q)=>{Z({data:Xk(Q)})});return}$.on("close",Z)},removeEventListener(){}}}function Vk($){try{$.write(`HTTP/1.1 400 Bad Request\r
597
+ ${H}`:V.instructions}})}})}}function lh($,W,Z,Q){let J=Z.map((j)=>[j.executor,async(...X)=>{let Y=X.at(-1),V=X.slice(0,-1);return(await Q($,j.capabilityName,{executor:j.executor,args:V,context:Kf(Y)},W))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function ph($,W,Z,Q){if(Z.length===0)return;return Z.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema,lifecycle:J.lifecycle,async execute(j,X){return(await Q($,J.capabilityName,{toolName:J.name,input:j,context:Kf(X)},W,X.emitUpdate?(V)=>{X.emitUpdate?.(vh(V))}:void 0))?.result}}))}function rh($,W,Z,Q){let J=new Map(Z.map((X)=>[X.name,X])),j={};for(let X of gh){let Y=J.get(X);if(!Y)continue;j[X]=async(V)=>{return(await Q($,Y.capabilityName,{context:V},W))?.control}}return Object.keys(j).length>0?j:void 0}function GX($){let W=$.contributions.filter((V)=>V.kind==="toolExecutor"),Z=$.contributions.filter((V)=>V.kind==="tool"),Q=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),j=$.contributions.find((V)=>V.kind==="checkpoint"),X=$.contributions.find((V)=>V.kind==="mistakeLimit"),Y=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:lh($.sessionId,$.targetClientId,W,$.requestCapability),localRuntime:{...Q.length>0?{hooks:rh($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...Z.length>0?{extraTools:ph($.sessionId,$.targetClientId,Z,$.requestCapability)}:{},...J?{compaction:{...$.sessionConfig?.compaction??{},...J.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,J.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...j?{checkpoint:{...$.sessionConfig?.checkpoint??{},...j.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}:{},...Y?{userInstructionService:dh($.sessionId,$.targetClientId,Y,$.requestCapability)}:{}}}}var Ff="hubCapabilityOwnerClientId";function RQ($){return typeof $==="string"&&$.trim().length>0?$.trim():void 0}function ih($){if($==="low"||$==="medium"||$==="high"||$==="xhigh"||$===null)return $;return}function nh($){let W=v6($)??{},Z={},Q=RQ(W.providerId);if(Q)Z.providerId=Q;let J=RQ(W.modelId);if(J)Z.modelId=J;let j=RQ(W.apiKey);if(j!==void 0)Z.apiKey=j;let X=RQ(W.baseUrl);if(X!==void 0)Z.baseUrl=X;if(W.headers&&typeof W.headers==="object")Z.headers=W.headers;if(W.providerConfig&&typeof W.providerConfig==="object")Z.providerConfig=W.providerConfig;if(Object.hasOwn(W,"thinking")){if(typeof W.thinking==="boolean"||W.thinking===null)Z.thinking=W.thinking}if(Object.hasOwn(W,"reasoningEffort")){let Y=ih(W.reasoningEffort);if(Y!==void 0)Z.reasoningEffort=Y}if(Object.hasOwn(W,"thinkingBudgetTokens")){if(typeof W.thinkingBudgetTokens==="number"&&Number.isFinite(W.thinkingBudgetTokens)&&W.thinkingBudgetTokens>0)Z.thinkingBudgetTokens=Math.trunc(W.thinkingBudgetTokens);else if(W.thinkingBudgetTokens===null)Z.thinkingBudgetTokens=null}return O2(Z)}function ah($,W){return $.sessionState.get(W)?.createdByClientId}function oh($){if(!$||!(Ff in $))return $;let W={...$};return delete W[Ff],W}function ff($){let W=ah($.ctx,$.sessionId);if(!W)return h($.envelope,"session_wrong_client",`Session ${$.sessionId} has no owner`);if(W!==$.clientId)return h($.envelope,"session_wrong_client",`Session ${$.sessionId} is owned by ${W}`);return}async function Df($,W,Z){let Q=performance.now(),J={command:W.command,requestId:W.requestId,clientId:W.clientId,sessionId:W.sessionId};i("info","session.create.begin",J);let j=W.payload&&typeof W.payload==="object"?W.payload:{},X=j.metadata&&typeof j.metadata==="object"?JSON.parse(JSON.stringify(j.metadata)):{},Y=j.sessionConfig&&typeof j.sessionConfig==="object"?JSON.parse(JSON.stringify(j.sessionConfig)):void 0,V=j.runtimeOptions&&typeof j.runtimeOptions==="object"?j.runtimeOptions:{},B=K1(j.initialCompactionState);if(typeof Y?.mode==="string")X.mode=Y.mode;else if(typeof V.mode==="string")X.mode=V.mode;if(typeof Y?.systemPrompt==="string")X.systemPrompt=Y.systemPrompt;else if(typeof V.systemPrompt==="string")X.systemPrompt=V.systemPrompt;if(Y?.checkpoint?.enabled===!0)X.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)X.checkpointEnabled=!0;let H=j.modelSelection&&typeof j.modelSelection==="object"?j.modelSelection:{},G=typeof j.workspaceRoot==="string"&&j.workspaceRoot.trim()?j.workspaceRoot.trim():typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():"";if(!G)return i("warn","session.create.invalid",{...J,reason:"missing_workspace_root"}),h(W,"invalid_session_create","session.create requires workspaceRoot or cwd");let K=W.clientId?.trim()||"hub-client",F=HX(V.clientContributions);i("info","session.create.contributions_parsed",{...J,clientId:K,workspaceRoot:G,cwd:typeof j.cwd==="string"?j.cwd:void 0,contributionCount:F.length});let f=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||Af(),U=Uf(V.configExtensions);i("info","session.create.runtime_build.begin",{...J,sessionId:f,configExtensionCount:U?.length??0});let _=GX({sessionId:f,targetClientId:K,contributions:F,sessionConfig:Y,requestCapability:$.requestCapability});i("info","session.create.start_session.begin",{...J,sessionId:f,provider:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof X.provider==="string"?X.provider:"hub"),model:Y?.modelId??(typeof H.model==="string"?H.model:typeof X.model==="string"?X.model:"hub")});let D=await $.sessionHost.startSession({source:typeof X.source==="string"?X.source:void 0,interactive:X.interactive!==!1,sessionMetadata:Object.keys(X).length>0?X:void 0,initialMessages:Array.isArray(j.initialMessages)?j.initialMessages:void 0,initialCompactionState:B,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:U,..._.localRuntime},capabilities:{toolExecutors:_.toolExecutors,requestToolApproval:Z},config:{...Y??{},sessionId:f,providerId:Y?.providerId??(typeof H.provider==="string"?H.provider:typeof X.provider==="string"?X.provider:"hub"),modelId:Y?.modelId??(typeof H.model==="string"?H.model:typeof X.model==="string"?X.model:"hub"),apiKey:Y?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:Y?.cwd??(typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():G),workspaceRoot:Y?.workspaceRoot??G,systemPrompt:Y?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:Y?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:Y?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:Y?.enableTools??V.enableTools!==!1,enableSpawnAgent:Y?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:Y?.enableAgentTeams??V.enableTeams!==!1,checkpoint:Y?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:Y?.teamName??(typeof X.teamName==="string"?X.teamName:void 0)},toolPolicies:j.toolPolicies&&typeof j.toolPolicies==="object"&&!Array.isArray(j.toolPolicies)?JSON.parse(JSON.stringify(j.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});i("info","session.create.start_session.end",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-Q),hasImmediateResult:!!D.result}),$X($,D.sessionId,K,"creator",{interactive:X.interactive!==!1}),i("info","session.create.read_records.begin",{...J,sessionId:D.sessionId});let[M,T]=await Promise.all([S0($,D.sessionId),c0($,D.sessionId)]);if(i("info","session.create.read_records.end",{...J,sessionId:D.sessionId,hasSession:!!M,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-Q)}),M)$.publish($.buildEvent("session.created",{session:M,...T?{snapshot:T}:{}},D.sessionId));return i("info","session.create.reply",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-Q)}),u(W,{session:M,...T?{snapshot:T}:{}})}async function _f($,W,Z){let Q=W.payload&&typeof W.payload==="object"?W.payload:{},J=typeof Q.sessionId==="string"?Q.sessionId.trim():W.sessionId?.trim()||"",j=Q.checkpointRunCount;if(!J)return h(W,"invalid_restore","session.restore requires a session id");let X=Q.restore&&typeof Q.restore==="object"?Q.restore:{},Y=X.messages!==!1;if(typeof j!=="number")return h(W,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=Q.sessionConfig&&typeof Q.sessionConfig==="object"?JSON.parse(JSON.stringify(Q.sessionConfig)):void 0;if(Y&&!V)return h(W,"invalid_restore","sessionConfig is required when restore.messages is true");let B=Q.runtimeOptions&&typeof Q.runtimeOptions==="object"?Q.runtimeOptions:{},H=K1(Q.initialCompactionState),G=Q.metadata&&typeof Q.metadata==="object"?JSON.parse(JSON.stringify(Q.metadata)):{};if(typeof V?.mode==="string")G.mode=V.mode;else if(typeof B.mode==="string")G.mode=B.mode;if(typeof V?.systemPrompt==="string")G.systemPrompt=V.systemPrompt;else if(typeof B.systemPrompt==="string")G.systemPrompt=B.systemPrompt;if(V?.checkpoint?.enabled===!0)G.checkpointEnabled=!0;else if(B.checkpointEnabled===!0)G.checkpointEnabled=!0;let K=Q.modelSelection&&typeof Q.modelSelection==="object"?Q.modelSelection:{},F=W.clientId?.trim()||"hub-client",A=HX(B.clientContributions),U=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||Af(),_=Uf(B.configExtensions),D=GX({sessionId:U,targetClientId:F,contributions:A,sessionConfig:V,requestCapability:$.requestCapability}),T=await new o$().restoreCheckpoint({sessionId:J,checkpointRunCount:j,restore:{messages:X.messages,workspace:X.workspace,omitCheckpointMessageFromSession:X.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(R)=>$.sessionHost.getSession(R),readMessages:(R)=>$.sessionHost.readSessionMessages(R),buildStartInput:(R)=>{if(R.restoredCheckpointMetadata)G.checkpoint=R.restoredCheckpointMetadata;let p=typeof Q.workspaceRoot==="string"&&Q.workspaceRoot.trim()?Q.workspaceRoot.trim():typeof Q.cwd==="string"&&Q.cwd.trim()?Q.cwd.trim():R.sourceSession.workspaceRoot||R.sourceSession.cwd;return{source:typeof G.source==="string"?G.source:void 0,interactive:G.interactive!==!1,sessionMetadata:{...G,restoredFromSessionId:J,restoredCheckpointRunCount:j},initialMessages:R.initialMessages,initialCompactionState:H,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:_,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Z},config:{...V??{},sessionId:U,providerId:V?.providerId??(typeof K.provider==="string"?K.provider:R.sourceSession.provider),modelId:V?.modelId??(typeof K.model==="string"?K.model:R.sourceSession.model),apiKey:V?.apiKey??(typeof K.apiKey==="string"?K.apiKey:""),cwd:V?.cwd??R.plan.cwd,workspaceRoot:V?.workspaceRoot??p,systemPrompt:V?.systemPrompt??(typeof B.systemPrompt==="string"?B.systemPrompt:""),mode:V?.mode??(B.mode==="plan"||B.mode==="yolo"?B.mode:"act"),maxIterations:V?.maxIterations??(typeof B.maxIterations==="number"?B.maxIterations:void 0),enableTools:V?.enableTools??B.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??B.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??B.enableTeams!==!1,checkpoint:V?.checkpoint??(B.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof G.teamName==="string"?G.teamName:void 0)},toolPolicies:Q.toolPolicies&&typeof Q.toolPolicies==="object"&&!Array.isArray(Q.toolPolicies)?JSON.parse(JSON.stringify(Q.toolPolicies)):B.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(R)=>$.sessionHost.startSession(R),getStartedSessionId:(R)=>R.sessionId,readRestoredSession:(R)=>$.sessionHost.getSession(R)});if(!Y)return u(W,{checkpoint:T.checkpoint});let O=T.startResult;if(!O)return h(W,"restore_failed","Checkpoint restore did not start a session");$X($,O.sessionId,F,"creator",{interactive:G.interactive!==!1});let[L,C]=await Promise.all([S0($,O.sessionId),c0($,O.sessionId)]);if(L)$.publish($.buildEvent("session.created",{session:L,...C?{snapshot:C}:{}},O.sessionId));return u(W,{session:L,...C?{snapshot:C}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof u0)return h(W,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return h(W,"restore_failed",V instanceof Error?V.message:String(V))}}async function Lf($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_attach","session.attach requires a session id");let Q=await S0($,Z);if(!Q)return h(W,"session_not_found",`Unknown session: ${Z}`);uU($,Z,W.clientId?.trim()||"hub-client","participant");let J=await S0($,Z);return $.publish($.buildEvent("session.attached",{session:J??Q},Z)),u(W,{session:J??Q})}async function Of($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_detach","session.detach requires a session id");let Q=W.clientId?.trim()||"hub-client",J=$.sessionState.get(Z);if(J){if(J.participants.delete(Q),J.createdByClientId===Q)J.createdByClientId=void 0;if(J.participants.size===0)$.sessionState.delete(Z)}n$($,(Y)=>Y.sessionId===Z&&Y.targetClientId===Q,`Capability owner client ${Q} detached before request was resolved.`);let[j,X]=await Promise.all([S0($,Z),c0($,Z)]);return $.publish($.buildEvent("session.detached",j?{session:j,...X?{snapshot:X}:{},clientId:Q}:{clientId:Q},Z)),u(W)}async function Tf($,W){let Z=P0(W),Q=W.payload?.includeSnapshot===!0,[J,j]=await Promise.all([S0($,Z),Q?c0($,Z):Promise.resolve(void 0)]);return J?u(W,{session:J,...j?{snapshot:j}:{}}):h(W,"session_not_found",`Unknown session: ${Z}`)}async function zf($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_id","session.messages requires a session id");if(!await S0($,Z))return h(W,"session_not_found",`Unknown session: ${Z}`);let J=await $.sessionHost.readSessionMessages(Z);return u(W,{sessionId:Z,messages:J})}async function qf($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_id","session.compaction.get requires a session id");if(!await S0($,Z))return h(W,"session_not_found",`Unknown session: ${Z}`);let J=W.clientId?.trim()||"hub-client",j=ff({sessionId:Z,ctx:$,clientId:J,envelope:W});if(j)return j;let X=await $.sessionHost.readSessionCompactionState(Z);return u(W,{sessionId:Z,state:X})}async function Mf($,W){let Z=typeof W.payload?.limit==="number"?W.payload.limit:200,J=(await $.sessionHost.listSessions(Z)).map((j)=>MQ(j,$.sessionState.get(j.sessionId)));return u(W,{sessions:J})}async function Nf($,W){let Z=P0(W),Q=oh(v6(W.payload?.metadata)),J=await $.sessionHost.updateSession(Z,{metadata:Q}),[j,X]=await Promise.all([S0($,Z),c0($,Z)]);if(j)$.publish($.buildEvent("session.updated",{session:j,...X?{snapshot:X}:{}},Z));return{version:W.version,requestId:W.requestId,ok:J.updated,payload:{updated:J.updated,session:j,...X?{snapshot:X}:{}}}}async function Rf($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_update_connection","session.update_connection requires a session id");let Q=$.sessionHost.updateSessionConnection;if(!Q)return h(W,"unsupported_session_update_connection","runtime host does not support session connection updates");let J=v6(W.payload),j=nh(J?.updates);return await Q.call($.sessionHost,Z,j),u(W,{sessionId:Z,updated:!0})}async function Ef($,W){let Z=P0(W);if(!Z)return h(W,"invalid_session_id","session.compaction.update requires a session id");let Q=W.clientId?.trim()||"hub-client",J=await S0($,Z);if(!J)return h(W,"session_not_found",`Unknown session: ${Z}`);let j=ff({sessionId:Z,ctx:$,clientId:Q,envelope:W});if(j)return j;let X=W.payload&&typeof W.payload==="object"?W.payload:{},Y=K1(X.state);if(!Y)return h(W,"invalid_compaction_state","session.compaction.update requires a valid compaction state");let V=await $.sessionHost.updateSessionCompactionState(Z,Y),[B,H]=V.updated?await Promise.all([S0($,Z),c0($,Z)]):[J,void 0];if(V.updated)$.publish($.buildEvent("session.updated",{session:B??J,...H?{snapshot:H}:{}},Z));return{version:W.version,requestId:W.requestId,ok:!0,payload:{updated:V.updated,session:B??J,...H?{snapshot:H}:{}}}}async function wf($,W){let Z=P0(W),Q=await $.sessionHost.deleteSession(Z);return $.sessionState.delete(Z),u(W,{deleted:Q})}async function Cf($,W){let Z=P0(W),Q=$.sessionHost.pendingPrompts;if(!Q)return h(W,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await Q.list({sessionId:Z});return u(W,{sessionId:Z,prompts:J})}async function Pf($,W){let Z=P0(W),Q=typeof W.payload?.promptId==="string"?W.payload.promptId.trim():"",J=typeof W.payload?.prompt==="string"?W.payload.prompt:void 0,j=W.payload?.delivery==="queue"||W.payload?.delivery==="steer"?W.payload.delivery:void 0,X=$.sessionHost.pendingPrompts;if(!X)return h(W,"pending_prompts_unavailable","Pending prompt service is not available.");let Y=await X.update({sessionId:Z,promptId:Q,prompt:J,delivery:j});return u(W,Y)}async function Sf($,W){let Z=P0(W),Q=typeof W.payload?.promptId==="string"?W.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return h(W,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await J.delete({sessionId:Z,promptId:Q});return u(W,j)}function bf($){switch($){case"schedule.create":return"schedule.created";case"schedule.update":case"schedule.enable":case"schedule.disable":return"schedule.updated";case"schedule.delete":return"schedule.deleted";case"schedule.trigger":return"schedule.triggered";default:return}}var th=new Set(["skills","workflows","rules","tools","mcp"]);function KX($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function LW($,W){let Z=$[W];if(Z===void 0)return;if(typeof Z!=="string")throw Error(`settings payload '${W}' must be a string.`);return Z}function eh($,W){let Z=$[W];if(Z===void 0)return;if(typeof Z!=="boolean")throw Error(`settings payload '${W}' must be a boolean.`);return Z}function yf($){if($===void 0)return{};if(!KX($))throw Error("settings.list payload must be an object.");return{cwd:LW($,"cwd"),workspaceRoot:LW($,"workspaceRoot"),availabilityContext:KX($.availabilityContext)?$.availabilityContext:void 0}}function $k($){if(!KX($))throw Error("settings.toggle payload must be an object.");let{type:W}=$;if(typeof W!=="string"||!th.has(W))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...yf($),type:W,id:LW($,"id"),path:LW($,"path"),name:LW($,"name"),enabled:eh($,"enabled")}}class c6{options;clients=new Map;listeners=new Map;sessionState=new Map;pendingApprovals=new Map;pendingCapabilityRequests=new Map;suppressNextTerminalEventBySession=new Map;schedules;scheduleCommands;settings;cronService;sessionHost;hubId=sh("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new h1({sessionService:new y1(new S1),fetch:$.fetch,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(W)=>this.publish(W),buildEvent:j8,requestCapability:(W,Z,Q,J,j)=>pU(this.ctx,W,Z,Q,J,j)},this.schedules=new x6({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(W,Z)=>{let Q=W==="schedule.execution.completed"?"schedule.execution_completed":W==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!Q)return;this.publish(j8(Q,Z&&typeof Z==="object"?Z:void 0))}}),this.scheduleCommands=new I6(this.schedules),this.settings=$.settingsService??new m$,$.cronOptions)this.cronService=new n5({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((W)=>{Bf(this.ctx,W).catch((Z)=>{JX("session event handling failed",Z),EQ(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Z,severity:"error",handled:!0,context:{eventType:W.type,sessionId:W.payload.sessionId}})})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}}async stop(){for(let $ of this.pendingApprovals.keys())ZX(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(n$(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.sessionHost.dispose("hub_server_stop"),await this.schedules.dispose(),this.cronService)try{await this.cronService.dispose()}catch($){console.error("[hub] cron service stop failed",$)}}async handleCommand($){try{let W=await this.dispatchCommand($);return this.captureFailedReply($,W),W}catch(W){throw EQ(this.options.telemetry,{component:"core",operation:"hub.command",error:W,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),W}}async dispatchCommand($){switch($.command){case"client.register":return aU(this.ctx,$);case"client.update":return oU(this.ctx,$);case"client.unregister":return sU(this.ctx,$,(W)=>{this.listeners.delete(W),this.detachClientFromSessions(W)});case"client.list":return tU(this.ctx,$);case"session.create":return await Df(this.ctx,$,(W)=>WX(this.ctx,W));case"session.restore":return await _f(this.ctx,$,(W)=>WX(this.ctx,W));case"session.attach":return await Lf(this.ctx,$);case"session.detach":return await Of(this.ctx,$);case"session.get":return await Tf(this.ctx,$);case"session.messages":return await zf(this.ctx,$);case"session.compaction.get":return await qf(this.ctx,$);case"session.list":return await Mf(this.ctx,$);case"session.update":return await Nf(this.ctx,$);case"session.update_connection":return await Rf(this.ctx,$);case"session.compaction.update":return await Ef(this.ctx,$);case"session.pending_prompts":return await Cf(this.ctx,$);case"session.update_pending_prompt":return await Pf(this.ctx,$);case"session.remove_pending_prompt":return await Sf(this.ctx,$);case"session.delete":return await wf(this.ctx,$);case"session.hook":return await Vf(this.ctx,$);case"run.start":case"session.send_input":return await Xf(this.ctx,$);case"run.abort":return await Yf(this.ctx,$);case"capability.request":return await iU(this.ctx,$);case"approval.respond":return await dU(this.ctx,$);case"capability.respond":return nU(this.ctx,$);case"capability.progress":return rU(this.ctx,$);case"ui.notify":return this.publish(j8("ui.notify",$.payload??{})),u($);case"ui.show_window":return this.publish(j8("ui.show_window",$.payload??{})),u($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"connector.channels":case"connector.configure":case"connector.delete_config":return await jf(this.ctx,$);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let W=await this.scheduleCommands.handleCommand($);if(W.ok){let Z=bf($.command);if(Z)this.publish(j8(Z,W.payload))}return W}}}captureFailedReply($,W){if(W.ok||!W.error||!Wk(W.error.code))return;EQ(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(W.error.message),severity:W.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:W.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let W=await this.settings.list(yf($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:W}}}catch(W){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:W instanceof Error?W.message:String(W)}}}}async handleSettingsToggle($){try{let W=await this.settings.toggle($k($.payload));return this.publish(j8("settings.changed",{types:W.changedTypes,snapshot:W.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:W.snapshot,changedTypes:W.changedTypes}}}catch(W){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:W instanceof Error?W.message:String(W)}}}}subscribe($,W,Z){let Q=this.listeners.get($)??new Set,J={sessionId:Z?.sessionId,listener:W};return Q.add(J),this.listeners.set($,Q),()=>{let j=this.listeners.get($);if(!j)return;if(j.delete(J),j.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[W,Z]of this.sessionState.entries()){if(Z.participants.delete($),Z.createdByClientId===$)Z.createdByClientId=void 0;if(Z.participants.size===0)this.sessionState.delete(W)}n$(this.ctx,(W)=>W.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let W of this.listeners.values())for(let Z of W){if(Z.sessionId&&Z.sessionId!==$.sessionId)continue;try{Z.listener($)}catch(Q){JX(`listener threw while publishing ${$.event}`,Q),EQ(this.options.telemetry,{component:"core",operation:"hub.publish",error:Q,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function Wk($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as jk}from"node:crypto";import Xk from"node:http";import Yk from"node:net";import{URL as fX}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as If,HUB_CAPABILITIES as Vk,isHubProtocolCompatible as Bk,MAX_CLIENT_HUB_PROTOCOL_VERSION as xf,MIN_CLIENT_HUB_PROTOCOL_VERSION as gf}from"@cline/shared";import{WebSocketServer as Hk}from"ws";import{captureSdkError as hf,HUB_COMMAND_SLOW_LOG_MS as Zk,resolveHubCommandTimeoutMs as Qk,safeJsonParse as Jk}from"@cline/shared";function FX($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function kf($,W,Z){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:W,message:Z}}}class OW{transport;telemetry;constructor($,W){this.transport=$;this.telemetry=W}attach($){let W=new Map,Z=new Set,Q=!1,J=(V)=>{try{$.send(JSON.stringify(V))}catch(B){console.error(`[hub] failed to send websocket frame: ${B instanceof Error?B.stack||B.message:String(B)}`)}},j=(V)=>{J({kind:"event",envelope:V})},X=async(V)=>{try{let B=JSON.parse(V.data);switch(B.kind){case"command":{let H=performance.now(),G=!1,K=FX(B);i("info","command.start",K);let F=setTimeout(()=>{if(G)return;i("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-H)})},Zk),A=this.transport.command(B.envelope);A.then((T)=>{if(!G)return;i(T.ok?"warn":"error","command.late_end",{...K,elapsedMs:Math.round(performance.now()-H),ok:T.ok,errorCode:T.error?.code,errorMessage:T.error?.message})},(T)=>{if(!G)return;i("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-H),error:T})});let f=!1,U,_,D=Qk(B.envelope.command,B.envelope.timeoutMs);try{_=D===null?await A:await Promise.race([A,new Promise((T)=>{U=setTimeout(()=>{f=!0,hf(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${B.envelope.command} did not complete within ${D}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:D}}),T(kf(B,"hub_command_timeout",`Hub command ${B.envelope.command} did not complete within ${D}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${B.envelope.requestId}.`))},D)})])}catch(T){if(clearTimeout(F),U)clearTimeout(U);throw T}if(G=f,clearTimeout(F),U)clearTimeout(U);let M=Math.round(performance.now()-H);if(f)i("error","command.timeout",{...K,durationMs:M,timeoutMs:D});else i(_.ok?"info":"warn","command.end",{...K,durationMs:M,ok:_.ok,errorCode:_.error?.code,errorMessage:_.error?.message});if(B.envelope.command==="client.register"&&_.ok){let O=(B.envelope.payload??{}).clientId?.trim()||B.envelope.clientId?.trim();if(O)Z.add(O)}else if(B.envelope.command==="client.unregister"&&_.ok){let T=B.envelope.clientId?.trim();if(T)Z.delete(T)}J({kind:"reply",envelope:_});break}case"stream.subscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;if(W.has(H))break;let G=await this.transport.subscribe(B.clientId,j,{sessionId:B.sessionId});W.set(H,G);break}case"stream.unsubscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;W.get(H)?.(),W.delete(H);break}case"reply":case"event":break}}catch(B){let H=typeof V.data==="string"?Jk(V.data):void 0;if(!H||H.kind!=="command"){i("error","rejected malformed websocket frame",{error:B});return}i("error","command.error",{...FX(H),error:B}),hf(this.telemetry,{component:"core",operation:"hub.websocket_command",error:B,severity:"error",handled:!0,context:FX(H)}),J({kind:"reply",envelope:kf(H,"command_failed",B instanceof Error?B.message:"Unknown hub error")})}},Y=()=>{if(Q)return;Q=!0;for(let V of W.values())V();W.clear();for(let V of Z)this.transport.command({version:"v1",command:"client.unregister",clientId:V});Z.clear(),$.removeEventListener("message",X),$.removeEventListener("close",Y)};return $.addEventListener("message",X),$.addEventListener("close",Y),Y}}class TW{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,W,Z){return this.transport.subscribe($,W,Z)}}function Gk($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((W)=>Buffer.from(W))).toString();return String($)}function Kk($){return{send(W){$.send(W)},addEventListener(W,Z){if(W==="message"){$.on("message",(Q)=>{Z({data:Gk(Q)})});return}$.on("close",Z)},removeEventListener(){}}}function Fk($){try{$.write(`HTTP/1.1 400 Bad Request\r
598
598
  Connection: close\r
599
599
  Content-Length: 0\r
600
600
  \r
601
- `),$.end()}catch{$.destroy()}}function Bk($){try{$.write(`HTTP/1.1 401 Unauthorized\r
601
+ `),$.end()}catch{$.destroy()}}function Ak($){try{$.write(`HTTP/1.1 401 Unauthorized\r
602
602
  Connection: close\r
603
603
  Content-Length: 0\r
604
604
  \r
605
- `),$.end()}catch{$.destroy()}}function GX($,W){if(!$||!W)return!1;let Z=Buffer.from($,"utf8"),Q=Buffer.from(W,"utf8");return Z.length===Q.length&&$k(Z,Q)}function yf($,W){let Z=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,Q=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",J=`Failed to start hub server on ${W.host}:${W.port}${W.pathname}: ${Q}`,j=Error(Z?`${J} (${Z})`:J);if(Z)$.code=Z,j.code=Z;if($ instanceof Error&&$.stack)j.stack=`${j.name}: ${j.message}
606
- Caused by: ${$.stack}`;return j}async function Hk($){return await new Promise((W,Z)=>{let Q=Zk.createServer();Q.once("error",Z),Q.listen(0,$,()=>{let J=Q.address();if(!J||typeof J==="string"){Q.close(()=>Z(Error("Failed to resolve free port")));return}let j=J.port;Q.close((X)=>{if(X){Z(X);return}W(j)})})})}function Gk($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var KX=new Map,hf="cline-hub-auth.",Kk=30000;function AX($){return Array.isArray($)?$.join(","):$??""}function kf($){return $===32||$===9}function NQ($){let W=AX($).trim(),Z="bearer";if(W.length<=6||W.slice(0,6).toLowerCase()!=="bearer"||!kf(W.charCodeAt(6)))return null;let Q=7;while(Q<W.length&&kf(W.charCodeAt(Q)))Q+=1;return W.slice(Q).trim()||null}function Fk($){for(let W of AX($).split(",")){let Z=W.trim();if(Z.startsWith(hf))return Z.slice(hf.length).trim()||null}return null}function EQ($){let W=$.trim().toLowerCase();return W==="localhost"||W==="127.0.0.1"||W==="::1"||W==="[::1]"}function UX($){let W=AX($).trim();if(!W)return!1;try{return EQ(new FX(W).hostname)}catch{return!1}}async function Y8($){let W=$.owner??W$(),Z=$.host??"127.0.0.1",Q=$.pathname??"/hub",J=$.port??f6(),j=J===0?await Hk(Z):J,X=j,Y=f1(Z,j,Q),V=tZ(),B=sZ(),H=new v6($);await H.start();let G=new _W(new LW(H),$.telemetry),K=new Set,F=new Date().toISOString(),A={protocolVersion:Pf,minClientProtocolVersion:bf,maxClientProtocolVersion:Sf,capabilities:Qk,coreVersion:n4.version,buildId:V,pid:process.pid,startedAt:F},f=new Set,U,_,D=async()=>{if(_)return _;return _=(async()=>{if(U)clearInterval(U),U=void 0;for(let L of f)L.terminate?.();f.clear();for(let L of K)L();if(K.clear(),await new Promise((L,C)=>{T.close((N)=>{if(N){C(N);return}L()})}),await new Promise((L,C)=>{M.close((N)=>{if(N){C(N);return}L()})}),await H.stop(),(await _0(W.discoveryPath))?.url===Y)await v0(W.discoveryPath)})(),_},M=Wk.createServer((O,L)=>{if((O.url??"/")==="/health"){let N=JSON.stringify({ok:!0,protocolVersion:A.protocolVersion,minClientProtocolVersion:A.minClientProtocolVersion,maxClientProtocolVersion:A.maxClientProtocolVersion,coreVersion:A.coreVersion,host:Z,port:X,url:Y});L.statusCode=200,L.setHeader("content-type","application/json"),L.end(N);return}if((O.url??"/")==="/status"){if(!GX(NQ(O.headers.authorization),B)){L.statusCode=401,L.end("Unauthorized");return}let N=JSON.stringify({hubId:H.getHubId(),...A,authToken:B,host:Z,port:X,url:Y,updatedAt:new Date().toISOString()});L.statusCode=200,L.setHeader("content-type","application/json"),L.end(N);return}if((O.url??"/")==="/version"){L.statusCode=200,L.setHeader("content-type","application/json"),L.end(JSON.stringify(A));return}if(new FX(O.url??"/",`http://${Z}:${X}`).pathname==="/shutdown"&&O.method==="POST"){if(!GX(NQ(O.headers.authorization),B)){L.statusCode=401,L.end("Unauthorized");return}L.statusCode=202,L.setHeader("content-type","application/json"),L.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{D()});return}L.statusCode=404,L.end("Not found")}),T=new jk({noServer:!0});U=setInterval(()=>{for(let O of f){if(O.isAlive===!1){try{O.terminate?.()}catch{}f.delete(O);continue}O.isAlive=!1;try{O.ping?.()}catch{try{O.terminate?.()}catch{}f.delete(O)}}},Kk),M.on("upgrade",(O,L,C)=>{if(new FX(O.url??"/",`http://${Z}:${X}`).pathname!==Q){L.destroy();return}if(!(GX(Fk(O.headers["sec-websocket-protocol"]),B)||EQ(Z)&&UX(O.headers.origin))){Bk(L);return}try{T.handleUpgrade(O,L,C,(P)=>{let d=P;d.isAlive=!0,d.on("pong",()=>{d.isAlive=!0}),f.add(d);let n=G.attach(Yk(P));K.add(n),P.once("close",()=>{f.delete(d),n(),K.delete(n)})})}catch{Vk(L)}});try{await new Promise((O,L)=>{M.once("error",(C)=>{L(yf(C,{host:Z,port:j,pathname:Q}))}),M.listen(j,Z,()=>{let C=M.address();if(!C||typeof C==="string"){L(yf(Error("Failed to resolve hub port"),{host:Z,port:j,pathname:Q}));return}X=C.port,Y=f1(Z,X,Q),O()})})}catch(O){if(U)clearInterval(U),U=void 0;throw await H.stop().catch(()=>{return}),O}return await eZ(W.discoveryPath,{hubId:H.getHubId(),protocolVersion:Pf,minClientProtocolVersion:bf,maxClientProtocolVersion:Sf,capabilities:[...A.capabilities],coreVersion:n4.version,buildId:V,authToken:B,host:Z,port:X,url:Y,pid:process.pid,startedAt:F,updatedAt:F}),{host:Z,port:X,url:Y,authToken:B,close:D}}async function wQ($){let W=$.owner??W$(),Z=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=$.host??"127.0.0.1",J=$.port??f6(),j=$.pathname??"/hub",X=f1(Q,J,j),Y=W.discoveryPath,V=(H)=>{if(!Z)d$(H.url,H.authToken);return H},B=KX.get(Y);if(B){let H=await B;if(H.url===X)return V({server:H,url:H.url,authToken:H.authToken,action:"reuse"})}return await $Q(W.discoveryPath,async()=>{let H=await _0(W.discoveryPath);if(H?.url&&(H.url===X||$.allowPortFallback===!0)){let F=await Z$(H.url,{authToken:H.authToken});if(F?.url&&Jk(F).compatible&&await N1(F.url,{authToken:H.authToken}))return V({url:F.url,authToken:H.authToken,action:"reuse"})}if(H?.url)await v0(W.discoveryPath);let K=async(F)=>{let A=Y8({...F,owner:W});KX.set(Y,A);try{let f=await A;return V({server:f,url:f.url,authToken:f.authToken,action:"started"})}catch(f){throw KX.delete(Y),f}};try{return await K($)}catch(F){if(!$.allowPortFallback||!Gk(F))throw F;return await K({...$,port:0})}})}function xf(){return If()==="production"?J1():c0()}function Ak($){return If()!=="production"&&!$}async function gf($){let W=Q1({host:$.host,port:$.port,pathname:$.pathname});return await Y8({...$,...W,owner:xf()})}async function mf($){let W=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=Q1({host:$.host,port:$.port,pathname:$.pathname});return await wQ({...$,...Z,allowPortFallback:$.allowPortFallback??Ak(W),owner:xf()})}PQ();var uf={};E(uf,{registerRemoteConfigSessionBlobUpload:()=>yQ,readRemoteConfigSessionBlobUploadMetadata:()=>fX,prepareRemoteConfigCoreIntegration:()=>_X,createRemoteConfigSessionMessagesArtifactUploader:()=>DX,buildRemoteConfigSessionBlobUploadMetadata:()=>SQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>bQ});import{buildRemoteConfigSessionBlobUploadMetadata as SQ,clearRemoteConfigSessionBlobUpload as Uk,createClineTelemetryServiceConfig as fk,createSessionId as Dk,createRemoteConfigSessionMessagesArtifactUploader as _k,prepareRemoteConfigRuntime as Lk,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as bQ,readRemoteConfigSessionBlobUploadMetadata as fX,registerRemoteConfigSessionBlobUpload as yQ}from"@cline/shared";function Ok($,W){let Z=$.telemetry||W.telemetryService?{...W.telemetryService??{},...$.telemetry??{}}:void 0;if(!Z)return;return Y$(fk(Z)).telemetry}function DX(){let $=_k();return{async uploadMessagesFile(W){await $.uploadMessagesFile(W)}}}async function _X($){let W=await Lk($),Z=Ok(W,$),Q=[W.pluginDefinition],J=W.claims?.subject,j=SQ(W.bundle?.remoteConfig,J),X;return{prepared:W,extensions:Q,telemetry:Z,applyToStartSessionInput(Y){let V=Y.config.extensions??[],B=Y.config.telemetry,H=j?Y.config.sessionId?.trim()||Dk():Y.config.sessionId;if(H&&j)X=H;let G=H&&j?yQ(H,W.bundle?.remoteConfig,J):void 0,K=G?{...Y.sessionMetadata??{},[bQ]:G}:Y.sessionMetadata;return{...Y,...K?{sessionMetadata:K}:{},config:{...Y.config,...H?{sessionId:H}:{},extensions:[...V,...Q],telemetry:Z??B}}},async dispose(){if(X)Uk(X)}}}var of={};E(of,{createTeamName:()=>IQ,DefaultRuntimeBuilder:()=>d6});import{hasRuntimeConfigExtension as hk}from"@cline/shared";import{nanoid as kk}from"nanoid";A1();var af={};E(af,{createLocalTeamStore:()=>zX,SqliteTeamStore:()=>V8,FileTeamStore:()=>OW});import{appendFileSync as Tk,existsSync as c6,mkdirSync as df,readdirSync as zk,readFileSync as lf,renameSync as qk,writeFileSync as Mk}from"node:fs";import{join as LX}from"node:path";import{resolveTeamDataDir as Rk}from"@cline/shared/storage";function pf(){return new Date().toISOString()}function OX($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function rf($){return{...$,tasks:$.tasks.map((W)=>({...W,createdAt:new Date(W.createdAt),updatedAt:new Date(W.updatedAt)})),mailbox:$.mailbox.map((W)=>({...W,sentAt:new Date(W.sentAt),readAt:W.readAt?new Date(W.readAt):void 0})),missionLog:$.missionLog.map((W)=>({...W,ts:new Date(W.ts)})),runs:($.runs??[]).map((W)=>({...W,startedAt:new Date(W.startedAt),endedAt:W.endedAt?new Date(W.endedAt):void 0,nextAttemptAt:W.nextAttemptAt?new Date(W.nextAttemptAt):void 0,heartbeatAt:W.heartbeatAt?new Date(W.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),finalizedAt:W.finalizedAt?new Date(W.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),reviewedAt:W.reviewedAt?new Date(W.reviewedAt):void 0}))}}class OW{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??Rk()}init(){this.ensureTeamDir()}listTeamNames(){if(!c6(this.teamDirPath))return[];return zk(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>c6(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let W=this.readEnvelope($);return W?.teamState?rf(W.teamState):void 0}readHistory($,W=200){let Z=this.historyPath($);if(!c6(Z))return[];return lf(Z,"utf8").split(`
607
- `).map((Q)=>Q.trim()).filter(Boolean).map((Q)=>{try{return JSON.parse(Q)}catch{return}}).filter((Q)=>Q!==void 0).reverse().slice(0,W)}loadRuntime($){let W=this.readEnvelope($);return{state:W?.teamState?rf(W.teamState):void 0,teammates:W?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,W){this.ensureTeamSubdir($),Tk(this.historyPath($),`${JSON.stringify({ts:pf(),eventType:W.type,payload:W})}
608
- `,"utf8")}persistRuntime($,W,Z){this.ensureTeamSubdir($);let Q={version:1,updatedAt:pf(),teamState:W,teammates:Z},J=this.statePath($),j=`${J}.tmp`;Mk(j,`${JSON.stringify(Q,null,2)}
609
- `,"utf8"),qk(j,J)}markInProgressRunsInterrupted($,W){let Z=this.readEnvelope($);if(!Z?.teamState?.runs?.length)return[];let Q=Z.teamState.runs.filter((j)=>j.status==="queued"||j.status==="running").map((j)=>j.id);if(Q.length===0)return[];let J=new Date;return Z.teamState={...Z.teamState,runs:Z.teamState.runs.map((j)=>j.status==="queued"||j.status==="running"?{...j,status:"interrupted",error:W,endedAt:J}:j)},this.persistRuntime($,Z.teamState,Z.teammates),Q}ensureTeamDir(){if(!c6(this.teamDirPath))df(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let W=LX(this.ensureTeamDir(),OX($));if(!c6(W))df(W,{recursive:!0});return W}statePath($){return LX(this.ensureTeamDir(),OX($),"state.json")}historyPath($){return LX(this.ensureTeamDir(),OX($),"task-history.jsonl")}readEnvelope($){let W=this.statePath($);if(!c6(W))return;try{let Z=JSON.parse(lf(W,"utf8"));if(Z?.version===1&&Z.teamState)return Z}catch{}return}}import{existsSync as Nk,mkdirSync as Ek}from"node:fs";import{join as wk}from"node:path";import{safeJsonParse as nf}from"@cline/shared";import{loadSqliteDb as Ck,nowIso as TX}from"@cline/shared/db";import{resolveDbDataDir as Pk}from"@cline/shared/storage";function Sk(){return Pk()}function u6($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function bk($){let W=nf($);if(!Array.isArray(W))return[];let Z=[];for(let Q of W){if(!Q||typeof Q!=="object")continue;let J=Q,j=J.agentId,X=J.rolePrompt;if(typeof j!=="string"||!j.trim())continue;if(typeof X!=="string"||!X.trim())continue;let Y={agentId:j.trim(),rolePrompt:X};if(typeof J.modelId==="string"&&J.modelId.trim())Y.modelId=J.modelId.trim();if(typeof J.maxIterations==="number"&&Number.isFinite(J.maxIterations))Y.maxIterations=Math.max(1,Math.floor(J.maxIterations));Z.push(Y)}return Z}function yk($){return{...$,tasks:$.tasks.map((W)=>({...W,createdAt:new Date(W.createdAt),updatedAt:new Date(W.updatedAt)})),mailbox:$.mailbox.map((W)=>({...W,sentAt:new Date(W.sentAt),readAt:W.readAt?new Date(W.readAt):void 0})),missionLog:$.missionLog.map((W)=>({...W,ts:new Date(W.ts)})),runs:($.runs??[]).map((W)=>({...W,startedAt:new Date(W.startedAt),endedAt:W.endedAt?new Date(W.endedAt):void 0,nextAttemptAt:W.nextAttemptAt?new Date(W.nextAttemptAt):void 0,heartbeatAt:W.heartbeatAt?new Date(W.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),finalizedAt:W.finalizedAt?new Date(W.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),reviewedAt:W.reviewedAt?new Date(W.reviewedAt):void 0}))}}class V8{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??Sk()}init(){this.getRawDb()}ensureTeamDir(){if(!Nk(this.teamDirPath))Ek(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return wk(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=Ck(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
605
+ `),$.end()}catch{$.destroy()}}function AX($,W){if(!$||!W)return!1;let Z=Buffer.from($,"utf8"),Q=Buffer.from(W,"utf8");return Z.length===Q.length&&jk(Z,Q)}function mf($,W){let Z=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,Q=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",J=`Failed to start hub server on ${W.host}:${W.port}${W.pathname}: ${Q}`,j=Error(Z?`${J} (${Z})`:J);if(Z)$.code=Z,j.code=Z;if($ instanceof Error&&$.stack)j.stack=`${j.name}: ${j.message}
606
+ Caused by: ${$.stack}`;return j}async function Uk($){return await new Promise((W,Z)=>{let Q=Yk.createServer();Q.once("error",Z),Q.listen(0,$,()=>{let J=Q.address();if(!J||typeof J==="string"){Q.close(()=>Z(Error("Failed to resolve free port")));return}let j=J.port;Q.close((X)=>{if(X){Z(X);return}W(j)})})})}function fk($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var UX=new Map,vf="cline-hub-auth.",Dk=30000;function DX($){return Array.isArray($)?$.join(","):$??""}function cf($){return $===32||$===9}function wQ($){let W=DX($).trim(),Z="bearer";if(W.length<=6||W.slice(0,6).toLowerCase()!=="bearer"||!cf(W.charCodeAt(6)))return null;let Q=7;while(Q<W.length&&cf(W.charCodeAt(Q)))Q+=1;return W.slice(Q).trim()||null}function _k($){for(let W of DX($).split(",")){let Z=W.trim();if(Z.startsWith(vf))return Z.slice(vf.length).trim()||null}return null}function CQ($){let W=$.trim().toLowerCase();return W==="localhost"||W==="127.0.0.1"||W==="::1"||W==="[::1]"}function _X($){let W=DX($).trim();if(!W)return!1;try{return CQ(new fX(W).hostname)}catch{return!1}}async function Y8($){let W=$.owner??Q$(),Z=$.host??"127.0.0.1",Q=$.pathname??"/hub",J=$.port??D6(),j=J===0?await Uk(Z):J,X=j,Y=D1(Z,j,Q),V=$Q(),B=eZ(),H=new c6($);await H.start();let G=new OW(new TW(H),$.telemetry),K=new Set,F=new Date().toISOString(),A={protocolVersion:If,minClientProtocolVersion:gf,maxClientProtocolVersion:xf,capabilities:Vk,coreVersion:o4.version,buildId:V,pid:process.pid,startedAt:F},f=new Set,U,_,D=async()=>{if(_)return _;return _=(async()=>{if(U)clearInterval(U),U=void 0;for(let L of f)L.terminate?.();f.clear();for(let L of K)L();if(K.clear(),await new Promise((L,C)=>{T.close((R)=>{if(R){C(R);return}L()})}),await new Promise((L,C)=>{M.close((R)=>{if(R){C(R);return}L()})}),await H.stop(),(await _0(W.discoveryPath))?.url===Y)await g0(W.discoveryPath)})(),_},M=Xk.createServer((O,L)=>{if((O.url??"/")==="/health"){let R=JSON.stringify({ok:!0,protocolVersion:A.protocolVersion,minClientProtocolVersion:A.minClientProtocolVersion,maxClientProtocolVersion:A.maxClientProtocolVersion,coreVersion:A.coreVersion,host:Z,port:X,url:Y});L.statusCode=200,L.setHeader("content-type","application/json"),L.end(R);return}if((O.url??"/")==="/status"){if(!AX(wQ(O.headers.authorization),B)){L.statusCode=401,L.end("Unauthorized");return}let R=JSON.stringify({hubId:H.getHubId(),...A,authToken:B,host:Z,port:X,url:Y,updatedAt:new Date().toISOString()});L.statusCode=200,L.setHeader("content-type","application/json"),L.end(R);return}if((O.url??"/")==="/version"){L.statusCode=200,L.setHeader("content-type","application/json"),L.end(JSON.stringify(A));return}if(new fX(O.url??"/",`http://${Z}:${X}`).pathname==="/shutdown"&&O.method==="POST"){if(!AX(wQ(O.headers.authorization),B)){L.statusCode=401,L.end("Unauthorized");return}L.statusCode=202,L.setHeader("content-type","application/json"),L.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{D()});return}L.statusCode=404,L.end("Not found")}),T=new Hk({noServer:!0});U=setInterval(()=>{for(let O of f){if(O.isAlive===!1){try{O.terminate?.()}catch{}f.delete(O);continue}O.isAlive=!1;try{O.ping?.()}catch{try{O.terminate?.()}catch{}f.delete(O)}}},Dk),M.on("upgrade",(O,L,C)=>{if(new fX(O.url??"/",`http://${Z}:${X}`).pathname!==Q){L.destroy();return}if(!(AX(_k(O.headers["sec-websocket-protocol"]),B)||CQ(Z)&&_X(O.headers.origin))){Ak(L);return}try{T.handleUpgrade(O,L,C,(x)=>{let P=x;P.isAlive=!0,P.on("pong",()=>{P.isAlive=!0}),f.add(P);let r=G.attach(Kk(x));K.add(r),x.once("close",()=>{f.delete(P),r(),K.delete(r)})})}catch{Fk(L)}});try{await new Promise((O,L)=>{M.once("error",(C)=>{L(mf(C,{host:Z,port:j,pathname:Q}))}),M.listen(j,Z,()=>{let C=M.address();if(!C||typeof C==="string"){L(mf(Error("Failed to resolve hub port"),{host:Z,port:j,pathname:Q}));return}X=C.port,Y=D1(Z,X,Q),O()})})}catch(O){if(U)clearInterval(U),U=void 0;throw await H.stop().catch(()=>{return}),O}return await WQ(W.discoveryPath,{hubId:H.getHubId(),protocolVersion:If,minClientProtocolVersion:gf,maxClientProtocolVersion:xf,capabilities:[...A.capabilities],coreVersion:o4.version,buildId:V,authToken:B,host:Z,port:X,url:Y,pid:process.pid,startedAt:F,updatedAt:F}),{host:Z,port:X,url:Y,authToken:B,close:D}}async function PQ($){let W=$.owner??Q$(),Z=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=$.host??"127.0.0.1",J=$.port??D6(),j=$.pathname??"/hub",X=D1(Q,J,j),Y=W.discoveryPath,V=(H)=>{if(!Z)d$(H.url,H.authToken);return H},B=UX.get(Y);if(B){let H=await B;if(H.url===X)return V({server:H,url:H.url,authToken:H.authToken,action:"reuse"})}return await ZQ(W.discoveryPath,async()=>{let H=await _0(W.discoveryPath);if(H?.url&&(H.url===X||$.allowPortFallback===!0)){let F=await J$(H.url,{authToken:H.authToken});if(F?.url&&Bk(F).compatible&&await w1(F.url,{authToken:H.authToken}))return V({url:F.url,authToken:H.authToken,action:"reuse"})}if(H?.url)await g0(W.discoveryPath);let K=async(F)=>{let A=Y8({...F,owner:W});UX.set(Y,A);try{let f=await A;return V({server:f,url:f.url,authToken:f.authToken,action:"started"})}catch(f){throw UX.delete(Y),f}};try{return await K($)}catch(F){if(!$.allowPortFallback||!fk(F))throw F;return await K({...$,port:0})}})}function df(){return uf()==="production"?Q1():m0()}function Lk($){return uf()!=="production"&&!$}async function lf($){let W=Z1({host:$.host,port:$.port,pathname:$.pathname});return await Y8({...$,...W,owner:df()})}async function pf($){let W=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=Z1({host:$.host,port:$.port,pathname:$.pathname});return await PQ({...$,...Z,allowPortFallback:$.allowPortFallback??Lk(W),owner:df()})}bQ();var af={};w(af,{registerRemoteConfigSessionBlobUpload:()=>kQ,readRemoteConfigSessionBlobUploadMetadata:()=>LX,prepareRemoteConfigCoreIntegration:()=>TX,createRemoteConfigSessionMessagesArtifactUploader:()=>OX,buildRemoteConfigSessionBlobUploadMetadata:()=>yQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>hQ});import{buildRemoteConfigSessionBlobUploadMetadata as yQ,clearRemoteConfigSessionBlobUpload as Ok,createClineTelemetryServiceConfig as Tk,createSessionId as zk,createRemoteConfigSessionMessagesArtifactUploader as qk,prepareRemoteConfigRuntime as Mk,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as hQ,readRemoteConfigSessionBlobUploadMetadata as LX,registerRemoteConfigSessionBlobUpload as kQ}from"@cline/shared";function Nk($,W){let Z=$.telemetry||W.telemetryService?{...W.telemetryService??{},...$.telemetry??{}}:void 0;if(!Z)return;return B$(Tk(Z)).telemetry}function OX(){let $=qk();return{async uploadMessagesFile(W){await $.uploadMessagesFile(W)}}}async function TX($){let W=await Mk($),Z=Nk(W,$),Q=[W.pluginDefinition],J=W.claims?.subject,j=yQ(W.bundle?.remoteConfig,J),X;return{prepared:W,extensions:Q,telemetry:Z,applyToStartSessionInput(Y){let V=Y.config.extensions??[],B=Y.config.telemetry,H=j?Y.config.sessionId?.trim()||zk():Y.config.sessionId;if(H&&j)X=H;let G=H&&j?kQ(H,W.bundle?.remoteConfig,J):void 0,K=G?{...Y.sessionMetadata??{},[hQ]:G}:Y.sessionMetadata;return{...Y,...K?{sessionMetadata:K}:{},config:{...Y.config,...H?{sessionId:H}:{},extensions:[...V,...Q],telemetry:Z??B}}},async dispose(){if(X)Ok(X)}}}var ZD={};w(ZD,{createTeamName:()=>gQ,DefaultRuntimeBuilder:()=>l6});import{hasRuntimeConfigExtension as mk}from"@cline/shared";import{nanoid as vk}from"nanoid";U1();var WD={};w(WD,{createLocalTeamStore:()=>NX,SqliteTeamStore:()=>V8,FileTeamStore:()=>zW});import{appendFileSync as Rk,existsSync as u6,mkdirSync as of,readdirSync as Ek,readFileSync as sf,renameSync as wk,writeFileSync as Ck}from"node:fs";import{join as zX}from"node:path";import{resolveTeamDataDir as Pk}from"@cline/shared/storage";function tf(){return new Date().toISOString()}function qX($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function ef($){return{...$,tasks:$.tasks.map((W)=>({...W,createdAt:new Date(W.createdAt),updatedAt:new Date(W.updatedAt)})),mailbox:$.mailbox.map((W)=>({...W,sentAt:new Date(W.sentAt),readAt:W.readAt?new Date(W.readAt):void 0})),missionLog:$.missionLog.map((W)=>({...W,ts:new Date(W.ts)})),runs:($.runs??[]).map((W)=>({...W,startedAt:new Date(W.startedAt),endedAt:W.endedAt?new Date(W.endedAt):void 0,nextAttemptAt:W.nextAttemptAt?new Date(W.nextAttemptAt):void 0,heartbeatAt:W.heartbeatAt?new Date(W.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),finalizedAt:W.finalizedAt?new Date(W.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),reviewedAt:W.reviewedAt?new Date(W.reviewedAt):void 0}))}}class zW{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??Pk()}init(){this.ensureTeamDir()}listTeamNames(){if(!u6(this.teamDirPath))return[];return Ek(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>u6(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let W=this.readEnvelope($);return W?.teamState?ef(W.teamState):void 0}readHistory($,W=200){let Z=this.historyPath($);if(!u6(Z))return[];return sf(Z,"utf8").split(`
607
+ `).map((Q)=>Q.trim()).filter(Boolean).map((Q)=>{try{return JSON.parse(Q)}catch{return}}).filter((Q)=>Q!==void 0).reverse().slice(0,W)}loadRuntime($){let W=this.readEnvelope($);return{state:W?.teamState?ef(W.teamState):void 0,teammates:W?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,W){this.ensureTeamSubdir($),Rk(this.historyPath($),`${JSON.stringify({ts:tf(),eventType:W.type,payload:W})}
608
+ `,"utf8")}persistRuntime($,W,Z){this.ensureTeamSubdir($);let Q={version:1,updatedAt:tf(),teamState:W,teammates:Z},J=this.statePath($),j=`${J}.tmp`;Ck(j,`${JSON.stringify(Q,null,2)}
609
+ `,"utf8"),wk(j,J)}markInProgressRunsInterrupted($,W){let Z=this.readEnvelope($);if(!Z?.teamState?.runs?.length)return[];let Q=Z.teamState.runs.filter((j)=>j.status==="queued"||j.status==="running").map((j)=>j.id);if(Q.length===0)return[];let J=new Date;return Z.teamState={...Z.teamState,runs:Z.teamState.runs.map((j)=>j.status==="queued"||j.status==="running"?{...j,status:"interrupted",error:W,endedAt:J}:j)},this.persistRuntime($,Z.teamState,Z.teammates),Q}ensureTeamDir(){if(!u6(this.teamDirPath))of(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let W=zX(this.ensureTeamDir(),qX($));if(!u6(W))of(W,{recursive:!0});return W}statePath($){return zX(this.ensureTeamDir(),qX($),"state.json")}historyPath($){return zX(this.ensureTeamDir(),qX($),"task-history.jsonl")}readEnvelope($){let W=this.statePath($);if(!u6(W))return;try{let Z=JSON.parse(sf(W,"utf8"));if(Z?.version===1&&Z.teamState)return Z}catch{}return}}import{existsSync as Sk,mkdirSync as bk}from"node:fs";import{join as yk}from"node:path";import{safeJsonParse as $D}from"@cline/shared";import{loadSqliteDb as hk,nowIso as MX}from"@cline/shared/db";import{resolveDbDataDir as kk}from"@cline/shared/storage";function Ik(){return kk()}function d6($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function xk($){let W=$D($);if(!Array.isArray(W))return[];let Z=[];for(let Q of W){if(!Q||typeof Q!=="object")continue;let J=Q,j=J.agentId,X=J.rolePrompt;if(typeof j!=="string"||!j.trim())continue;if(typeof X!=="string"||!X.trim())continue;let Y={agentId:j.trim(),rolePrompt:X};if(typeof J.modelId==="string"&&J.modelId.trim())Y.modelId=J.modelId.trim();if(typeof J.maxIterations==="number"&&Number.isFinite(J.maxIterations))Y.maxIterations=Math.max(1,Math.floor(J.maxIterations));Z.push(Y)}return Z}function gk($){return{...$,tasks:$.tasks.map((W)=>({...W,createdAt:new Date(W.createdAt),updatedAt:new Date(W.updatedAt)})),mailbox:$.mailbox.map((W)=>({...W,sentAt:new Date(W.sentAt),readAt:W.readAt?new Date(W.readAt):void 0})),missionLog:$.missionLog.map((W)=>({...W,ts:new Date(W.ts)})),runs:($.runs??[]).map((W)=>({...W,startedAt:new Date(W.startedAt),endedAt:W.endedAt?new Date(W.endedAt):void 0,nextAttemptAt:W.nextAttemptAt?new Date(W.nextAttemptAt):void 0,heartbeatAt:W.heartbeatAt?new Date(W.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),finalizedAt:W.finalizedAt?new Date(W.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((W)=>({...W,createdAt:new Date(W.createdAt),reviewedAt:W.reviewedAt?new Date(W.reviewedAt):void 0}))}}class V8{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??Ik()}init(){this.getRawDb()}ensureTeamDir(){if(!Sk(this.teamDirPath))bk(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return yk(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=hk(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
610
610
  CREATE TABLE IF NOT EXISTS team_store_schema_version (
611
611
  lock INTEGER PRIMARY KEY CHECK (lock = 1),
612
612
  version INTEGER NOT NULL
@@ -690,8 +690,8 @@ Caused by: ${$.stack}`;return j}async function Hk($){return await new Promise((W
690
690
  version INTEGER NOT NULL DEFAULT 1,
691
691
  PRIMARY KEY(team_name, fragment_id)
692
692
  );
693
- `)}run($,W=[]){return this.getRawDb().prepare($).run(...W)}queryOne($,W=[]){return this.getRawDb().prepare($).get(...W)??void 0}queryAll($,W=[]){return this.getRawDb().prepare($).all(...W)}withTransaction($){let W=this.getRawDb();W.exec("BEGIN IMMEDIATE;");try{$(),W.exec("COMMIT;")}catch(Z){try{W.exec("ROLLBACK;")}catch{}throw Z}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let W=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[u6($)]);if(!W)return;let Z=nf(W.state_json);if(!Z)return;try{return yk(Z)}catch{return}}readHistory($,W=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[u6($),W]).flatMap((Z)=>{try{return[{eventType:Z.event_type,payload:JSON.parse(Z.payload_json),ts:Z.ts}]}catch{return[]}})}loadRuntime($){let W=u6($),Z=this.readState(W),Q=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[W]),J=Q?bk(Q.teammates_json):[];return{state:Z,teammates:J,interruptedRunIds:[]}}appendTeamEvent($,W,Z,Q){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
694
- VALUES (?, ?, ?, ?, NULL, ?)`,[u6($),TX(),W,JSON.stringify(Z),Q??null])}persistRuntime($,W,Z){let Q=u6($),J=TX();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
693
+ `)}run($,W=[]){return this.getRawDb().prepare($).run(...W)}queryOne($,W=[]){return this.getRawDb().prepare($).get(...W)??void 0}queryAll($,W=[]){return this.getRawDb().prepare($).all(...W)}withTransaction($){let W=this.getRawDb();W.exec("BEGIN IMMEDIATE;");try{$(),W.exec("COMMIT;")}catch(Z){try{W.exec("ROLLBACK;")}catch{}throw Z}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let W=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[d6($)]);if(!W)return;let Z=$D(W.state_json);if(!Z)return;try{return gk(Z)}catch{return}}readHistory($,W=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[d6($),W]).flatMap((Z)=>{try{return[{eventType:Z.event_type,payload:JSON.parse(Z.payload_json),ts:Z.ts}]}catch{return[]}})}loadRuntime($){let W=d6($),Z=this.readState(W),Q=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[W]),J=Q?xk(Q.teammates_json):[];return{state:Z,teammates:J,interruptedRunIds:[]}}appendTeamEvent($,W,Z,Q){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
694
+ VALUES (?, ?, ?, ?, NULL, ?)`,[d6($),MX(),W,JSON.stringify(Z),Q??null])}persistRuntime($,W,Z){let Q=d6($),J=MX();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
695
695
  VALUES (?, ?, ?, ?)
696
696
  ON CONFLICT(team_name) DO UPDATE SET
697
697
  state_json = excluded.state_json,
@@ -736,29 +736,29 @@ Caused by: ${$.stack}`;return j}async function Hk($){return await new Promise((W
736
736
  status = excluded.status,
737
737
  reviewed_by = excluded.reviewed_by,
738
738
  reviewed_at = excluded.reviewed_at,
739
- version = team_outcome_fragments.version + 1`,[Q,j.outcomeId,j.id,j.section,j.sourceAgentId,j.sourceRunId??null,j.content,j.status,j.reviewedBy??null,j.reviewedAt?j.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,W){let Z=u6($),Q=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[Z]);if(Q.length===0)return[];let J=TX();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
740
- WHERE team_name = ? AND status IN ('queued', 'running')`,[W,J,Z]),Q.map((j)=>j.run_id)}handleTeamEvent($,W){this.appendTeamEvent($,W.type,W)}}function zX($={}){try{let W=new V8($);return W.init(),W}catch{let W=new OW({teamDir:$.teamDir});return W.init(),W}}function hQ($,W){return hk($,W)}function Ik($,W){let Z=W?.["*"]??{},Q=W?.[$]??{};return{...Z,...Q}.enabled!==!1}function xk($,W){return $.filter((Z)=>Ik(Z.name,W))}function qX($,W){return p1(xk($,W))}var gk={apply_diff:"editor",attempt_completion:"submit_and_exit",bash:"run_commands",execute_command:"run_commands",list_code_definition_names:"search_codebase",list_files:"run_commands",read_file:"read_files",replace_in_file:"editor",search_files:"search_codebase",use_skill:"skills",write_to_file:"editor"};function mk($){let W=$.trim().toLowerCase();return gk[W]??W}function vk($,W){if(W.tools===void 0)return $;let Z=new Set(W.tools.map(mk));if(W.skills!==void 0)Z.add("skills");return $.filter((Q)=>Z.has(Q.name))}function IQ(){return`team-${kk(5)}`}function kQ($,W,Z,Q,J,j,X,Y){let V=o0[l1({mode:Z})],B=b8(W,Q,Z,J??S8);return qX(R2({cwd:$,...V,enableSkills:!!X,...B,executors:{...X?{skills:X}:{},...Y??{}}}),j)}function ck($){return kQ($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,uk,$.toolExecutors).some((W)=>W.name==="skills")}var uk=async()=>"";async function dk($){let W=Q0();if(!t1({filePath:W}))return{tools:[]};let Z=new c2({clientFactory:K6({settingsPath:W})}),Q;try{Q=await v2(Z,{filePath:W})}catch(Y){await Z.dispose().catch(()=>{});let V=Y instanceof Error?Y.message:String(Y);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let J=Q.filter((Y)=>Y.disabled!==!0),j=await Promise.allSettled(J.map((Y)=>A6({serverName:Y.name,provider:Z}))),X=[];for(let[Y,V]of j.entries())if(V.status==="fulfilled")X.push(...V.value);else{let B=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${J[Y].name}", skipping: ${B}`)}return{tools:X,shutdown:async()=>{await Z.dispose()}}}function lk($,W){if(!$)return;for(let Z of $.getTeammateIds())try{$.shutdownTeammate(Z,W)}catch{}}function pk($){if($===void 0)return!0;switch($){case"session_stop":case"session_complete":case"session_error":case"session_manager_dispose":case"cli_run_shutdown":case"cli_interactive_shutdown":case"cli_interactive_startup_cancelled":case"provider_change":case"acp_shutdown":case"hub_server_stop":case"vscode_webview_dispose":return!0;default:return!1}}function rk($){let W=o0[l1({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??W.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??W.enableAgentTeams??!0,disableMcpSettingsTools:$.disableMcpSettingsTools===!0,yolo:$.yolo===!0,missionLogIntervalSteps:typeof $.missionLogIntervalSteps==="number"&&Number.isFinite($.missionLogIntervalSteps)?$.missionLogIntervalSteps:3,missionLogIntervalMs:typeof $.missionLogIntervalMs==="number"&&Number.isFinite($.missionLogIntervalMs)?$.missionLogIntervalMs:120000}}class d6{teamRuntimeEntries=new Map;async build($){let{config:W,hooks:Z,extensions:Q,logger:J,telemetry:j,createSpawnTool:X,onTeamRestored:Y,userInstructionService:V,configExtensions:B,toolExecutors:H}=$,G=$.onTeamEvent??(()=>{}),K=rk(W),F=W.workspaceRoot??W.cwd,A=$.toolPolicies??W.toolPolicies,f=M1(),U=[],_=W.teamName?.trim()||IQ(),D=W.sessionId?.trim()||_,M=K.enableSpawnAgent?z6({workspaceRoot:F}):{configs:[],errors:[]},T=M.configs.some((l)=>l.skills!==void 0),O=hQ(B,"rules"),L=hQ(B,"skills"),C=L||T,N=hQ(B,"workflows"),y=hQ(B,"plugins"),P=O||L||N,d=!1,n=Boolean(V),o=V,G$;for(let l of M.errors)(J??W.logger)?.log?.(`[agents] Failed to load agent config at ${l.path}: ${l.error.message}`);if(!o&&(P||T))o=I$({skills:C?{workspacePath:F,includePluginSkills:y,pluginSkillDirectories:y?$.pluginSkillDirectories:void 0,pluginPaths:W.pluginPaths,cwd:W.cwd}:{workspacePath:F},rules:{workspacePath:W.cwd},workflows:{workspacePath:W.cwd}});if(o)await o.start().catch(()=>{});let h1=K.enableTools&&L&&Boolean(o)&&o?.hasConfiguredSkills(W.skills)===!0&&ck({cwd:W.cwd,providerId:W.providerId,mode:K.mode,modelId:W.modelId,toolRoutingRules:W.toolRoutingRules,toolPolicies:A,toolExecutors:H}),x0=o&&P?o.createExtension({includeRules:O,includeSkills:L,includeWorkflows:N,registerSkillsTool:h1,allowedSkillNames:W.skills}):void 0,$2=x0?[...Q??W.extensions??[],x0]:Q??W.extensions;if(K.enableTools){if(U.push(...kQ(W.cwd,W.providerId,K.mode,W.modelId,W.toolRoutingRules,A,void 0,H)),!K.disableMcpSettingsTools){let l=await dk(W.logger);U.push(...l.tools),G$=l.shutdown}}let V0,K$=K.enableAgentTeams?zX():void 0,L0=K$?.loadRuntime(D),b0=L0?.state,L1=L0?.teammates??[],g=new Map(L1.map((l)=>[l.agentId,l])),q0=W.sessionId||_,I,e=[],y0=!1,B0=R$({providerId:W.providerId,modelId:W.modelId,cwd:W.cwd,apiKey:W.apiKey??"",baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking,reasoningEffort:W.reasoningEffort,thinkingBudgetTokens:W.thinkingBudgetTokens,maxTokensPerTurn:W.maxTokensPerTurn,maxIterations:W.maxIterations,hooks:Z,extensions:$2,logger:J??W.logger,telemetry:$.telemetry??W.telemetry,workspaceMetadata:W.workspaceMetadata});if(K.enableSpawnAgent){if(M.configs.length>0)U.push(...qX(q6({configProvider:B0,agents:M.configs,createSubAgentTools:(l)=>K.enableTools?vk(kQ(W.cwd,l.providerId??W.providerId,K.mode,l.modelId??W.modelId,W.toolRoutingRules,A,l.skills!==void 0&&o?.createSkillsExecutor?o.createSkillsExecutor(l.skills):void 0,H),l):[],hookErrorMode:W.hookErrorMode,toolPolicies:A,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),A))}if(!this.teamRuntimeEntries.has(q0))this.teamRuntimeEntries.set(q0,{delegatedAgentConfigProvider:B0});let kW=()=>{if(!K.enableAgentTeams)return;let l=this.teamRuntimeEntries.get(q0)??{delegatedAgentConfigProvider:B0};if(this.teamRuntimeEntries.set(q0,l),V0=l.runtime,!V0){if(V0=new e2({teamName:_,leadAgentId:W.sessionId||"lead",missionLogIntervalSteps:K.missionLogIntervalSteps,missionLogIntervalMs:K.missionLogIntervalMs,onTeamEvent:(H0)=>{if(G(H0),V0&&K$){if(H0.type==="teammate_spawned"&&H0.teammate?.rolePrompt){let k1={agentId:H0.agentId,rolePrompt:H0.teammate.rolePrompt,modelId:H0.teammate.modelId,maxIterations:H0.teammate.maxIterations};g.set(k1.agentId,k1)}if(H0.type==="teammate_shutdown"&&!pk(H0.reason))g.delete(H0.agentId);K$.handleTeamEvent(D,H0),K$.persistRuntime(D,V0.exportState(),Array.from(g.values()))}}}),b0)V0.hydrateState(b0),y0=!0;l.runtime=V0}if(!d){if(!V0)return;d=!0;let H0=I8({runtime:V0,leadAgentId:W.sessionId||"lead",restoredFromPersistence:Boolean(b0),restoredTeammates:L1,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(k1)=>{e=k1,I?.addTools(k1)},createBaseTools:K.enableTools?()=>kQ(W.cwd,W.providerId,K.mode,W.modelId,W.toolRoutingRules,A,void 0,H):void 0,teammateConfigProvider:B0});if(y0)V0.recoverActiveRuns("runtime_recovered");if(H0.restoredFromPersistence)Y?.();U.push(...H0.tools)}return V0};if(K.enableSpawnAgent&&X){let l=X();U.push({...l,execute:async(H0,k1)=>{return kW(),l.execute(H0,k1)}})}if(K.enableAgentTeams)kW();let K8=qX(U,A),z7=K8.some((l)=>l.name==="submit_and_exit"&&l.lifecycle?.completesRun===!0),IW=K.enableAgentTeams?()=>{let l=this.teamRuntimeEntries.get(q0)?.runtime;if(!l)return;let H0=l.listTasks(),k1=H0.some((F$)=>F$.status==="in_progress"||F$.status==="pending"),hY=l.listRuns({}),q_=hY.some((F$)=>F$.status==="running"||F$.status==="queued");if(k1||q_){let F$=H0.filter((r0)=>r0.status==="in_progress"||r0.status==="pending").map((r0)=>`${r0.id} (${r0.status}): ${r0.title}`).join(", "),kY=hY.filter((r0)=>r0.status==="running"||r0.status==="queued").map((r0)=>`${r0.id} (${r0.status})`).join(", "),q7=[];if(F$)q7.push(`Unfinished tasks: ${F$}`);if(kY)q7.push(`Active runs: ${kY}`);return`[SYSTEM] You still have team obligations. ${q7.join(". ")}. Use team_run_task to delegate work, or team_task with action=complete to mark tasks done, or team_await_runs to wait for active runs. Do NOT stop until all tasks are completed.`}return}:void 0,z_=z7?{requireCompletionTool:!0,...IW?{completionGuard:IW}:{}}:IW?{completionGuard:IW}:void 0;return{tools:K8,logger:J??W.logger,telemetry:j??W.telemetry,teamRuntime:V0,teamRestoredFromPersistence:Boolean(b0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(q0)?.delegatedAgentConfigProvider??B0,extensions:$2,completionPolicy:z_,registerLeadAgent:(l)=>{if(I=l,e.length>0)l.addTools(p1(e,[...f]))},shutdown:async(l)=>{if(lk(V0,l),this.teamRuntimeEntries.delete(q0),await G$?.(),!n)o?.stop()}}}}var tf={};E(tf,{requestDesktopToolApproval:()=>RX});import{mkdir as ik,readFile as nk,unlink as ak,writeFile as ok}from"node:fs/promises";import{join as sf}from"node:path";function sk($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function tk($){return new Promise((W)=>setTimeout(W,$))}async function MX($){try{await ak($)}catch{}}async function RX($,W={}){let Z=W.approvalDir?.trim(),Q=W.sessionId?.trim();if(!Z||!Q)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await ik(Z,{recursive:!0});let J=sk(`${$.toolCallId}`),j=sf(Z,`${Q}.request.${J}.json`),X=sf(Z,`${Q}.decision.${J}.json`),Y=W.nowIso??(()=>new Date().toISOString());await ok(j,`${JSON.stringify({requestId:J,sessionId:Q,createdAt:Y(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
741
- `,"utf8");let V=W.timeoutMs??300000,B=W.pollIntervalMs??200,H=Date.now();while(Date.now()-H<V){try{let G=await nk(X,"utf8"),K=JSON.parse(G),F={approved:K.approved===!0,reason:typeof K.reason==="string"?K.reason:void 0};return await Promise.all([MX(X),MX(j)]),F}catch{}await tk(B)}return await MX(j),{approved:!1,reason:"Tool approval request timed out"}}A1();var KD={};E(KD,{uninstallMarketplaceSkill:()=>lQ,uninstallMarketplacePlugin:()=>pQ,uninstallMarketplaceMcpServerFromSettings:()=>uQ,uninstallMarketplaceEntry:()=>cX,resolveMarketplaceMcpServerName:()=>NW,marketplaceEntryKey:()=>vX,isMarketplaceSkillInstalled:()=>dQ,getMarketplaceSkillCandidates:()=>EW,getGlobalMarketplaceSkillPaths:()=>wW,findInstalledGlobalMarketplaceSkillName:()=>CW});import{spawn as kI}from"node:child_process";import{existsSync as HD,rmSync as II}from"node:fs";import{homedir as xI,platform as gI}from"node:os";import{dirname as mI,join as BD}from"node:path";import{resolveClineDir as vI,resolveMcpSettingsPath as cI}from"@cline/shared/storage";var $D={};E($D,{parseMcpInstallArgs:()=>TW,installMcpServer:()=>NX,buildMcpInstallTransport:()=>xQ});function ek($){let W=($??"stdio").trim();if(W==="http"||W==="streamable-http")return"streamableHttp";if(W==="stdio"||W==="sse"||W==="streamableHttp")return W;throw Error(`Unsupported MCP transport "${W}". Expected stdio, sse, http, streamable-http, or streamableHttp.`)}function $I($){let W;try{W=new URL($)}catch{throw Error(`Invalid MCP server URL: ${$}`)}if(W.protocol!=="http:"&&W.protocol!=="https:")throw Error(`Invalid MCP server URL: ${$} (only http and https are supported)`)}function WI($){let W=$.indexOf(":");if(W<=0)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);let Z=$.slice(0,W).trim(),Q=$.slice(W+1).trim();if(!Z||!Q)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);if(!/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(Z))throw Error(`Invalid MCP header name "${Z}".`);return[Z,Q]}function ZI($){let W=$.indexOf("<");return W>=0&&$.indexOf(">",W+1)>W+1}function ef($){let W=[...$.headers??[]],Z=[],Q=$.transport,J=$.targetArgs??[];for(let j=0;j<J.length;j++){let X=J[j];if($.parseTransport&&X==="--transport"){let Y=J[j+1];if(!Y)throw Error("--transport requires a value");Q=Y,j++;continue}if($.parseTransport&&X?.startsWith("--transport=")){Q=X.slice(12);continue}if(X==="--header"){let Y=J[j+1];if(!Y)throw Error("--header requires a value");W.push(Y),j++;continue}if(X?.startsWith("--header=")){W.push(X.slice(9));continue}Z.push(X)}return{headers:W,targetArgs:Z,transport:Q}}function QI($){if($.length===0)return{warnings:[]};let W={},Z=[];for(let Q of $){let[J,j]=WI(Q);if(W[J]=j,ZI(j))Z.push(`Header "${J}" looks like it contains a placeholder. Update it in MCP settings before using this server.`)}return{headers:W,warnings:Z}}function xQ($){let W=$.name.trim();if(!W)throw Error("MCP server name is required");let{headers:Z,targetArgs:Q,transport:J}=ef({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),j=ek(J),{headers:X,warnings:Y}=QI(Z);if(j==="stdio"){if(Z.length>0)throw Error("Stdio MCP installs do not support request headers.");let[B,...H]=Q;if(!B?.trim())throw Error("Stdio MCP install requires a command after the server name, for example: cline mcp install fs --yes -- npx -y @modelcontextprotocol/server-filesystem /tmp");return{name:W,transport:{type:j,command:B,args:H.length>0?H:void 0},warnings:Y}}if(Q.length!==1)throw Error("Remote MCP install requires exactly one URL argument after the server name.");let V=Q[0]?.trim()??"";return $I(V),{name:W,transport:X?{type:j,url:V,headers:X}:{type:j,url:V},warnings:Y}}function TW($){let[W,...Z]=$;if(!W)throw Error("Marketplace MCP install args must start with a server name.");return{name:W,...ef({parseTransport:!0,targetArgs:Z})}}function JI($,W,Z){U1(Z,(Q)=>{let J=Q.mcpServers,j=J&&typeof J==="object"&&!Array.isArray(J)?{...J}:{};j[$]={transport:W},Q.mcpServers=j})}function NX($){let{name:W,transport:Z,warnings:Q}=xQ($);return JI(W,Z,$.settingsPath??Q0()),{name:W,status:"installed",transport:Z,warnings:Q}}A1();var VD={};E(VD,{uninstallPlugin:()=>MW});import{existsSync as p6,readdirSync as FI,readFileSync as AI,rmdirSync as UI,rmSync as fI,statSync as DI}from"node:fs";import{basename as X1,dirname as s$,extname as _I,isAbsolute as LI,join as V$,relative as OI,resolve as l6,sep as SX}from"node:path";import{discoverPluginModulePaths as TI,resolvePluginConfigSearchPaths as zI}from"@cline/shared/storage";var JD={};E(JD,{syncPluginMcpServersToSettings:()=>zW,removePluginMcpServersFromSettings:()=>qW,disablePluginMcpServersInSettings:()=>PX});import{existsSync as jI,mkdirSync as XI,readFileSync as YI,writeFileSync as VI}from"node:fs";import{dirname as ZD,isAbsolute as BI,relative as HI,resolve as WD}from"node:path";function B8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function gQ($,W){let Z=HI(WD($),WD(W));return Z===""||!Z.startsWith("..")&&!BI(Z)}function EX($){if(!jI($))return{mcpServers:{}};try{let W=JSON.parse(YI($,"utf8"));if(B8(W))return W}catch(W){throw Error(`Invalid MCP settings at "${$}": ${W instanceof Error?W.message:String(W)}`)}throw Error(`Invalid MCP settings at "${$}": expected an object`)}function wX($){if(B8($.mcpServers))return{...$.mcpServers};return{}}function CX($,W,Z){XI(ZD($),{recursive:!0}),VI($,`${JSON.stringify({...W,mcpServers:Z},null,2)}
742
- `,"utf8")}function QD($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((W)=>W.trim()).filter((W)=>W.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((W)=>W.trim()).filter((W)=>W.length>0))]}}function vQ($){if(!B8($))return;let W=$.metadata;return B8(W)?W:void 0}function mQ($,W){let Z=vQ($);if(!Z||Z.source!=="plugin")return!1;let Q=typeof Z.pluginName==="string"?Z.pluginName:typeof Z.plugin==="string"?Z.plugin:void 0,J=typeof Z.pluginPath==="string"?Z.pluginPath:void 0;if(W.pluginName&&Q===W.pluginName){if(!W.pluginPath||J===W.pluginPath)return!0}if(J&&W.pluginPath&&(J===W.pluginPath||gQ(W.pluginPath,J)||gQ(J,W.pluginPath)))return!0;if(Q&&W.pluginNames?.some((j)=>j===Q))return!0;if(J&&W.pluginPaths?.some((j)=>J===j||gQ(j,J)||gQ(J,j)))return!0;return!1}function GI($){let W=B8($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:ZD($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...W,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function KI($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let W=await r8({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Z=[],Q=[],J=(W.failures??[]).map((j)=>({pluginPath:j.pluginPath,pluginName:j.pluginName,message:j.message}));for(let j of W.extensions??[]){let X=j.__clinePluginPath;if(!X)continue;if(!j.setup){Z.push({pluginName:j.name,pluginPath:X});continue}let Y=[],V={registerTool:(B)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(B)=>{if(!j.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');Y.push(B)}};try{await j.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(B){J.push({pluginPath:X,pluginName:j.name,message:B instanceof Error?B.message:String(B)});continue}Z.push({pluginName:j.name,pluginPath:X});for(let B of Y)Q.push({pluginName:j.name,pluginPath:X,server:{...B,metadata:{...B.metadata??{},source:"plugin",pluginName:j.name,pluginPath:X}}})}return{plugins:Z,servers:Q,failures:J}}finally{await W.shutdown().catch(()=>{})}}async function zW($){let W=$.settingsPath??Q0(),Z={mutations:[],failures:[]},Q;try{Q=await KI($)}catch(B){for(let H of $.pluginPaths)Z.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Z}Z.failures.push(...Q.failures);let J;try{J=EX(W)}catch(B){for(let H of $.pluginPaths)Z.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Z}let j=wX(J),X=new Map,Y=new Map;for(let B of Q.plugins)X.set(B.pluginPath,new Set),Y.set(B.pluginPath,B.pluginName);let V=uZ(Q.servers.map((B)=>({server:B.server,owner:B,ownerLabel:B.pluginName})));for(let B of V){let H=B.owner;if(!X.has(H.pluginPath))X.set(H.pluginPath,new Set);if(B.name)X.get(H.pluginPath)?.add(B.name);if(!B.registration){Z.mutations.push({name:B.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:B.loadError??"invalid MCP server registration"});continue}let G=j[B.registration.name];if(G!==void 0){if(!mQ(G,{pluginName:H.pluginName,pluginPath:H.pluginPath})){Z.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}j[B.registration.name]=GI({registration:B.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:B8(G)?G:void 0}),Z.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:G===void 0?"created":"updated"})}for(let[B,H]of Object.entries(j)){let G=vQ(H),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=X.get(K);if(F&&mQ(H,{pluginPath:K})&&!F.has(B))delete j[B],Z.mutations.push({name:B,pluginName:typeof G?.pluginName==="string"?G.pluginName:Y.get(K)??"plugin",pluginPath:K,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Z.mutations.some((B)=>B.action!=="skipped"))try{CX(W,J,j)}catch(B){for(let H of $.pluginPaths)Z.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)})}return Z}function PX($){let W=$.settingsPath??Q0(),Z;try{Z=EX(W)}catch{return[]}let Q=wX(Z),J=QD($),j=[];for(let[X,Y]of Object.entries(Q)){if(!B8(Y)||!mQ(Y,J))continue;let V=vQ(Y);Q[X]={...Y,disabled:!0},j.push({name:X,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(j.length>0)CX(W,Z,Q);return j}function qW($){let W=$.settingsPath??Q0(),Z;try{Z=EX(W)}catch{return[]}let Q=wX(Z),J=QD($),j=[];for(let[X,Y]of Object.entries(Q)){if(!mQ(Y,J))continue;let V=vQ(Y);delete Q[X],j.push({name:X,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(j.length>0)CX(W,Z,Q);return j}var IX="_installed",qI="package",MI=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function bX($){return $.trim().toLowerCase()}function _1($,W){let Z=W?.trim();if(!Z)return;$.add(Z)}function RI($){return $.replace(/-[0-9a-f]{12}$/i,"")}function yX($){let W=_I($);return W?$.slice(0,-W.length):$}function hX($){if(!p6($))return;try{let W=JSON.parse(AI($,"utf8"));return typeof W.name==="string"?W.name.trim():void 0}catch{return}}function xX($,W){let Z=OI(W,$);return Z===""||!Z.startsWith("..")&&!LI(Z)}function jD($){let Z=l6($).split(SX),Q=Z.lastIndexOf(IX);if(Q<0)return;let J=Z[Q+1];if(!J)return;let j=MI.get(J)??1,X=Q+2+j;if(Z.length<X)return;let Y=Z.slice(0,X).join(SX)||SX;return p6(Y)?Y:void 0}function cQ($){try{return FI($,{withFileTypes:!0})}catch{return[]}}function NI($){let W=V$($,IX);if(!p6(W))return[];let Z=[];for(let Q of cQ(W)){if(!Q.isDirectory())continue;let J=V$(W,Q.name);if(Q.name==="git"){for(let j of cQ(J)){if(!j.isDirectory())continue;let X=V$(J,j.name);for(let Y of cQ(X))if(Y.isDirectory())Z.push(V$(X,Y.name))}continue}for(let j of cQ(J))if(j.isDirectory())Z.push(V$(J,j.name))}return Z.sort((Q,J)=>Q.localeCompare(J))}function XD($){try{return TI($)}catch{return[]}}function kX($){let W=XD($),Z=new Set;_1(Z,X1($)),_1(Z,RI(X1($))),_1(Z,hX(V$($,"package.json"))),_1(Z,hX(V$($,qI,"package.json")));for(let Q of W)_1(Z,X1(Q)),_1(Z,yX(X1(Q)));return{installPath:$,entryPaths:W,names:[...Z].sort((Q,J)=>Q.localeCompare(J)),installed:!0}}function EI($,W){let Z=l6($),Q=W.find((X)=>xX(Z,X));if(!Q)return;let J=s$(Z);while(J!==Q&&J!==s$(J)){if(p6(V$(J,"package.json")))return J;J=s$(J)}let j=X1(Z);if((j==="index.ts"||j==="index.js")&&s$(Z)!==Q)return s$(Z);return Z}function YD($,W){let Z=EI($,W);if(!Z)return;let Q=new Set;return _1(Q,X1($)),_1(Q,yX(X1($))),_1(Q,X1(Z)),_1(Q,yX(X1(Z))),_1(Q,hX(V$(Z,"package.json"))),{installPath:Z,entryPaths:[$],names:[...Q].sort((J,j)=>J.localeCompare(j)),installed:!1}}function wI($){let W=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return zI(W).filter((Z)=>p6(Z))}function CI($){let W=new Map;for(let Z of $){for(let Q of NI(Z))W.set(Q,kX(Q));for(let Q of XD(Z)){let J=jD(Q);if(J){if(!W.has(J))W.set(J,kX(J));continue}let j=YD(Q,$);if(j)W.set(j.installPath,j)}}return[...W.values()].sort((Z,Q)=>Z.installPath.localeCompare(Q.installPath))}function PI($,W){let Z=bX(W);if(!Z)return!1;if(bX($.installPath)===Z)return!0;return $.names.some((Q)=>bX(Q)===Z)}function SI($,W,Z){let Q=l6($);for(let j of W){if(xX(Q,j.installPath))return j;if(j.entryPaths.some((X)=>l6(X)===Q))return j}let J=jD(Q);if(J)return kX(J);if(p6(Q))return YD(Q,Z);return}function bI($){let W=R0(),Z=W.disabledPlugins;if(!Z?.length)return;let Q=Z.filter((J)=>{let j=l6(J);if(xX(j,$.installPath))return!1;return!$.entryPaths.some((X)=>l6(X)===j)});if(Q.length===Z.length)return;q1({...W,disabledPlugins:Q})}function yI($){let W=s$($);while(W!==s$(W)&&X1(W)!==IX){try{UI(W)}catch{return}W=s$(W)}}function hI($){return`${$.names[0]??X1($.installPath)} at ${$.installPath}`}async function MW($){let W=wI($),Z=CI(W),Q=$.path?.trim(),J=$.name?.trim(),j;if(Q){if(j=SI(Q,Z,W),!j)throw Error(`No plugin found at ${Q}`)}else{if(!J)throw Error("plugin uninstall requires a plugin name");let Y=Z.filter((V)=>PI(V,J));if(Y.length===0)throw Error(`No plugin found matching "${J}"`);if(Y.length>1)throw Error(`Multiple plugins match "${J}": ${Y.map(hI).join(", ")}`);j=Y[0]}let X=DI(j.installPath,{throwIfNoEntry:!1});if(!X)throw Error(`Plugin install path does not exist: ${j.installPath}`);if(qW({pluginPaths:[j.installPath,...j.entryPaths],pluginNames:j.names}),fI(j.installPath,{recursive:X.isDirectory(),force:!0}),bI(j),j.installed)yI(j.installPath);return{name:J||j.names[0]||X1(j.installPath),installPath:j.installPath,removedPaths:[j.installPath],entryPaths:j.entryPaths}}var gX=120000,RW=12000,uI=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,dI=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,lI=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,pI=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function mX($){return $.install?.args??[]}function rI(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||xI()}function iI($){let W=0,Z=$.length;while(W<Z&&($[W]==="."||$[W]==="-"))W++;while(Z>W&&($[Z-1]==="."||$[Z-1]==="-"))Z--;return $.slice(W,Z)}function nI($){return iI($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function GD($){return $.split(/\r?\n/).map((W)=>{if(!uI.test(W))return W;return W.replace(dI,"$1[redacted]").replace(lI,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(pI,"$1 [redacted]").replace(/((?:^|[^\w])(?:api\s+key|access\s+token|refresh\s+token|auth(?:orization)?\s+token|secret|password|credential)\s+(?:is\s+)?)(\S+)/gi,"$1[redacted]")}).join(`
743
- `).slice(-RW)}function aI($){let W=GD([$.stdout,$.stderr].filter(Boolean).join(`
744
- `)).trim();return W.length>0?W:void 0}function oI($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function sI($,W){return[$,...W].map((Z)=>oI(GD(Z).trim())).join(" ")}var tI=async($,W)=>new Promise((Z,Q)=>{let J=!1,j=!1,X=kI($,W,{env:process.env,shell:gI()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),Y="",V="",B=setTimeout(()=>{if(!J)X.kill("SIGKILL")},gX+5000),H=setTimeout(()=>{j=!0,V+=`
745
- Timed out after ${gX/1000}s.`,X.kill("SIGTERM")},gX);B.unref?.(),H.unref?.(),X.stdout?.on("data",(G)=>{if(Y+=String(G),Y.length>RW*2)Y=Y.slice(-RW)}),X.stderr?.on("data",(G)=>{if(V+=String(G),V.length>RW*2)V=V.slice(-RW)}),X.once("error",(G)=>{clearTimeout(H),clearTimeout(B),Q(G)}),X.once("close",(G,K)=>{J=!0,clearTimeout(H),clearTimeout(B),Z({exitCode:j?124:G??(K==="SIGINT"?130:1),stdout:Y,stderr:V})})});function vX($){return`${$.type}:${$.id}`}function NW($){let W=mX($);if(W.length===0)throw Error("Marketplace install args are required.");return TW(W).name}function uQ($,W={}){let Z=NW($),Q=W.mcpSettingsPath??cI(),J=U1(Q,(j)=>{let X=j.mcpServers&&typeof j.mcpServers==="object"&&!Array.isArray(j.mcpServers)?j.mcpServers:{},Y=Object.hasOwn(X,Z);if(Y)delete X[Z];return j.mcpServers=X,Y});return{name:Z,deleted:J}}function EW($){let W=new Set,Z=(J)=>{let j=nI(J??"");if(j&&j!=="skill")W.add(j)};Z($.id),Z($.name);let Q=mX($);for(let J=0;J<Q.length;J++){let j=Q[J];if((j==="--skill"||j==="-s")&&Q[J+1]){Z(Q[J+1]),J++;continue}let X=j.split("@").at(1);if(X)Z(X)}return[...W]}function wW($){return[BD(vI(),"skills",$,"SKILL.md"),BD(rI(),".agents","skills",$,"SKILL.md")].filter((W,Z,Q)=>Q.indexOf(W)===Z)}function CW($){if($.type!=="skill")return;return EW($).find((W)=>wW(W).some((Z)=>HD(Z)))}function dQ($){return CW($)!==void 0}function eI($){let W=[];if($.type!=="skill")return W;for(let Z of EW($))for(let Q of wW(Z)){if(!HD(Q))continue;let J=mI(Q);II(J,{recursive:!0,force:!0}),W.push(J)}return W}async function lQ($,W={}){let Z=CW($);if(!Z)return{id:$.id,type:"skill",status:"uninstalled",message:`${$.name??$.id} is not installed.`};let Q="npx",J=["-y","skills@latest","remove",Z,"-g","-y"],j=sI(Q,J),X=W.spawnCommand??tI,Y;try{Y=await X(Q,J)}catch(H){throw Error(`Failed to start ${$.name??$.id} uninstall command:
739
+ version = team_outcome_fragments.version + 1`,[Q,j.outcomeId,j.id,j.section,j.sourceAgentId,j.sourceRunId??null,j.content,j.status,j.reviewedBy??null,j.reviewedAt?j.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,W){let Z=d6($),Q=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[Z]);if(Q.length===0)return[];let J=MX();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
740
+ WHERE team_name = ? AND status IN ('queued', 'running')`,[W,J,Z]),Q.map((j)=>j.run_id)}handleTeamEvent($,W){this.appendTeamEvent($,W.type,W)}}function NX($={}){try{let W=new V8($);return W.init(),W}catch{let W=new zW({teamDir:$.teamDir});return W.init(),W}}function IQ($,W){return mk($,W)}function ck($,W){let Z=W?.["*"]??{},Q=W?.[$]??{};return{...Z,...Q}.enabled!==!1}function uk($,W){return $.filter((Z)=>ck(Z.name,W))}function RX($,W){return i1(uk($,W))}var dk={apply_diff:"editor",attempt_completion:"submit_and_exit",bash:"run_commands",execute_command:"run_commands",list_code_definition_names:"search_codebase",list_files:"run_commands",read_file:"read_files",replace_in_file:"editor",search_files:"search_codebase",use_skill:"skills",write_to_file:"editor"};function lk($){let W=$.trim().toLowerCase();return dk[W]??W}function pk($,W){if(W.tools===void 0)return $;let Z=new Set(W.tools.map(lk));if(W.skills!==void 0)Z.add("skills");return $.filter((Q)=>Z.has(Q.name))}function gQ(){return`team-${vk(5)}`}function xQ($,W,Z,Q,J,j,X,Y){let V=a0[r1({mode:Z})],B=y8(W,Q,Z,J??b8);return RX(N2({cwd:$,...V,enableSkills:!!X,...B,executors:{...X?{skills:X}:{},...Y??{}}}),j)}function rk($){return xQ($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,ik,$.toolExecutors).some((W)=>W.name==="skills")}var ik=async()=>"";async function nk($){let W=Q0();if(!$$({filePath:W}))return{tools:[]};let Z=new c2({clientFactory:F6({settingsPath:W})}),Q;try{Q=await v2(Z,{filePath:W})}catch(Y){await Z.dispose().catch(()=>{});let V=Y instanceof Error?Y.message:String(Y);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let J=Q.filter((Y)=>Y.disabled!==!0),j=await Promise.allSettled(J.map((Y)=>U6({serverName:Y.name,provider:Z}))),X=[];for(let[Y,V]of j.entries())if(V.status==="fulfilled")X.push(...V.value);else{let B=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${J[Y].name}", skipping: ${B}`)}return{tools:X,shutdown:async()=>{await Z.dispose()}}}function ak($,W){if(!$)return;for(let Z of $.getTeammateIds())try{$.shutdownTeammate(Z,W)}catch{}}function ok($){if($===void 0)return!0;switch($){case"session_stop":case"session_complete":case"session_error":case"session_manager_dispose":case"cli_run_shutdown":case"cli_interactive_shutdown":case"cli_interactive_startup_cancelled":case"provider_change":case"acp_shutdown":case"hub_server_stop":case"vscode_webview_dispose":return!0;default:return!1}}function sk($){let W=a0[r1({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??W.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??W.enableAgentTeams??!0,disableMcpSettingsTools:$.disableMcpSettingsTools===!0,yolo:$.yolo===!0,missionLogIntervalSteps:typeof $.missionLogIntervalSteps==="number"&&Number.isFinite($.missionLogIntervalSteps)?$.missionLogIntervalSteps:3,missionLogIntervalMs:typeof $.missionLogIntervalMs==="number"&&Number.isFinite($.missionLogIntervalMs)?$.missionLogIntervalMs:120000}}class l6{teamRuntimeEntries=new Map;async build($){let{config:W,hooks:Z,extensions:Q,logger:J,telemetry:j,createSpawnTool:X,onTeamRestored:Y,userInstructionService:V,configExtensions:B,toolExecutors:H}=$,G=$.onTeamEvent??(()=>{}),K=sk(W),F=W.workspaceRoot??W.cwd,A=$.toolPolicies??W.toolPolicies,f=N1(),U=[],_=W.teamName?.trim()||gQ(),D=W.sessionId?.trim()||_,M=K.enableSpawnAgent?q6({workspaceRoot:F}):{configs:[],errors:[]},T=M.configs.some((l)=>l.skills!==void 0),O=IQ(B,"rules"),L=IQ(B,"skills"),C=L||T,R=IQ(B,"workflows"),p=IQ(B,"plugins"),x=O||L||R,P=!1,r=Boolean(V),d=V,I1;for(let l of M.errors)(J??W.logger)?.log?.(`[agents] Failed to load agent config at ${l.path}: ${l.error.message}`);if(!d&&(x||T))d=I$({skills:C?{workspacePath:F,includePluginSkills:p,pluginSkillDirectories:p?$.pluginSkillDirectories:void 0,pluginPaths:W.pluginPaths,cwd:W.cwd}:{workspacePath:F},rules:{workspacePath:W.cwd},workflows:{workspacePath:W.cwd}});if(d)await d.start().catch(()=>{});let $2=K.enableTools&&L&&Boolean(d)&&d?.hasConfiguredSkills(W.skills)===!0&&rk({cwd:W.cwd,providerId:W.providerId,mode:K.mode,modelId:W.modelId,toolRoutingRules:W.toolRoutingRules,toolPolicies:A,toolExecutors:H}),F$=d&&x?d.createExtension({includeRules:O,includeSkills:L,includeWorkflows:R,registerSkillsTool:$2,allowedSkillNames:W.skills}):void 0,k0=F$?[...Q??W.extensions??[],F$]:Q??W.extensions;if(K.enableTools){if(U.push(...xQ(W.cwd,W.providerId,K.mode,W.modelId,W.toolRoutingRules,A,void 0,H)),!K.disableMcpSettingsTools){let l=await nk(W.logger);U.push(...l.tools),I1=l.shutdown}}let A0,O1=K.enableAgentTeams?NX():void 0,K8=O1?.loadRuntime(D),V0=K8?.state,l0=K8?.teammates??[],V1=new Map(l0.map((l)=>[l.agentId,l])),y=W.sessionId||_,B1,k=[],$0=!1,L0=R$({providerId:W.providerId,modelId:W.modelId,cwd:W.cwd,apiKey:W.apiKey??"",baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking,reasoningEffort:W.reasoningEffort,thinkingBudgetTokens:W.thinkingBudgetTokens,maxTokensPerTurn:W.maxTokensPerTurn,maxIterations:W.maxIterations,hooks:Z,extensions:k0,logger:J??W.logger,telemetry:$.telemetry??W.telemetry,workspaceMetadata:W.workspaceMetadata});if(K.enableSpawnAgent){if(M.configs.length>0)U.push(...RX(M6({configProvider:L0,agents:M.configs,createSubAgentTools:(l)=>K.enableTools?pk(xQ(W.cwd,l.providerId??W.providerId,K.mode,l.modelId??W.modelId,W.toolRoutingRules,A,l.skills!==void 0&&d?.createSkillsExecutor?d.createSkillsExecutor(l.skills):void 0,H),l):[],hookErrorMode:W.hookErrorMode,toolPolicies:A,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),A))}if(!this.teamRuntimeEntries.has(y))this.teamRuntimeEntries.set(y,{delegatedAgentConfigProvider:L0});let q0=()=>{if(!K.enableAgentTeams)return;let l=this.teamRuntimeEntries.get(y)??{delegatedAgentConfigProvider:L0};if(this.teamRuntimeEntries.set(y,l),A0=l.runtime,!A0){if(A0=new e2({teamName:_,leadAgentId:W.sessionId||"lead",missionLogIntervalSteps:K.missionLogIntervalSteps,missionLogIntervalMs:K.missionLogIntervalMs,onTeamEvent:(B0)=>{if(G(B0),A0&&O1){if(B0.type==="teammate_spawned"&&B0.teammate?.rolePrompt){let x1={agentId:B0.agentId,rolePrompt:B0.teammate.rolePrompt,modelId:B0.teammate.modelId,maxIterations:B0.teammate.maxIterations};V1.set(x1.agentId,x1)}if(B0.type==="teammate_shutdown"&&!ok(B0.reason))V1.delete(B0.agentId);O1.handleTeamEvent(D,B0),O1.persistRuntime(D,A0.exportState(),Array.from(V1.values()))}}}),V0)A0.hydrateState(V0),$0=!0;l.runtime=A0}if(!P){if(!A0)return;P=!0;let B0=x8({runtime:A0,leadAgentId:W.sessionId||"lead",restoredFromPersistence:Boolean(V0),restoredTeammates:l0,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(x1)=>{k=x1,B1?.addTools(x1)},createBaseTools:K.enableTools?()=>xQ(W.cwd,W.providerId,K.mode,W.modelId,W.toolRoutingRules,A,void 0,H):void 0,teammateConfigProvider:L0});if($0)A0.recoverActiveRuns("runtime_recovered");if(B0.restoredFromPersistence)Y?.();U.push(...B0.tools)}return A0};if(K.enableSpawnAgent&&X){let l=X();U.push({...l,execute:async(B0,x1)=>{return q0(),l.execute(B0,x1)}})}if(K.enableAgentTeams)q0();let xW=RX(U,A),s6=xW.some((l)=>l.name==="submit_and_exit"&&l.lifecycle?.completesRun===!0),F8=K.enableAgentTeams?()=>{let l=this.teamRuntimeEntries.get(y)?.runtime;if(!l)return;let B0=l.listTasks(),x1=B0.some((A$)=>A$.status==="in_progress"||A$.status==="pending"),xY=l.listRuns({}),C_=xY.some((A$)=>A$.status==="running"||A$.status==="queued");if(x1||C_){let A$=B0.filter((p0)=>p0.status==="in_progress"||p0.status==="pending").map((p0)=>`${p0.id} (${p0.status}): ${p0.title}`).join(", "),gY=xY.filter((p0)=>p0.status==="running"||p0.status==="queued").map((p0)=>`${p0.id} (${p0.status})`).join(", "),M7=[];if(A$)M7.push(`Unfinished tasks: ${A$}`);if(gY)M7.push(`Active runs: ${gY}`);return`[SYSTEM] You still have team obligations. ${M7.join(". ")}. Use team_run_task to delegate work, or team_task with action=complete to mark tasks done, or team_await_runs to wait for active runs. Do NOT stop until all tasks are completed.`}return}:void 0,w_=s6?{requireCompletionTool:!0,...F8?{completionGuard:F8}:{}}:F8?{completionGuard:F8}:void 0;return{tools:xW,logger:J??W.logger,telemetry:j??W.telemetry,teamRuntime:A0,teamRestoredFromPersistence:Boolean(V0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(y)?.delegatedAgentConfigProvider??L0,extensions:k0,completionPolicy:w_,registerLeadAgent:(l)=>{if(B1=l,k.length>0)l.addTools(i1(k,[...f]))},shutdown:async(l)=>{if(ak(A0,l),this.teamRuntimeEntries.delete(y),await I1?.(),!r)d?.stop()}}}}var JD={};w(JD,{requestDesktopToolApproval:()=>wX});import{mkdir as tk,readFile as ek,unlink as $I,writeFile as WI}from"node:fs/promises";import{join as QD}from"node:path";function ZI($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function QI($){return new Promise((W)=>setTimeout(W,$))}async function EX($){try{await $I($)}catch{}}async function wX($,W={}){let Z=W.approvalDir?.trim(),Q=W.sessionId?.trim();if(!Z||!Q)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await tk(Z,{recursive:!0});let J=ZI(`${$.toolCallId}`),j=QD(Z,`${Q}.request.${J}.json`),X=QD(Z,`${Q}.decision.${J}.json`),Y=W.nowIso??(()=>new Date().toISOString());await WI(j,`${JSON.stringify({requestId:J,sessionId:Q,createdAt:Y(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
741
+ `,"utf8");let V=W.timeoutMs??300000,B=W.pollIntervalMs??200,H=Date.now();while(Date.now()-H<V){try{let G=await ek(X,"utf8"),K=JSON.parse(G),F={approved:K.approved===!0,reason:typeof K.reason==="string"?K.reason:void 0};return await Promise.all([EX(X),EX(j)]),F}catch{}await QI(B)}return await EX(j),{approved:!1,reason:"Tool approval request timed out"}}U1();var _D={};w(_D,{uninstallMarketplaceSkill:()=>rQ,uninstallMarketplacePlugin:()=>iQ,uninstallMarketplaceMcpServerFromSettings:()=>lQ,uninstallMarketplaceEntry:()=>lX,resolveMarketplaceMcpServerName:()=>wW,marketplaceEntryKey:()=>dX,isMarketplaceSkillInstalled:()=>pQ,getMarketplaceSkillCandidates:()=>CW,getGlobalMarketplaceSkillPaths:()=>PW,findInstalledGlobalMarketplaceSkillName:()=>SW});import{spawn as vI}from"node:child_process";import{existsSync as fD,rmSync as cI}from"node:fs";import{homedir as uI,platform as dI}from"node:os";import{dirname as lI,join as UD}from"node:path";import{resolveClineDir as pI,resolveMcpSettingsPath as rI}from"@cline/shared/storage";var XD={};w(XD,{parseMcpInstallArgs:()=>qW,installMcpServer:()=>CX,buildMcpInstallTransport:()=>mQ});function JI($){let W=($??"stdio").trim();if(W==="http"||W==="streamable-http")return"streamableHttp";if(W==="stdio"||W==="sse"||W==="streamableHttp")return W;throw Error(`Unsupported MCP transport "${W}". Expected stdio, sse, http, streamable-http, or streamableHttp.`)}function jI($){let W;try{W=new URL($)}catch{throw Error(`Invalid MCP server URL: ${$}`)}if(W.protocol!=="http:"&&W.protocol!=="https:")throw Error(`Invalid MCP server URL: ${$} (only http and https are supported)`)}function XI($){let W=$.indexOf(":");if(W<=0)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);let Z=$.slice(0,W).trim(),Q=$.slice(W+1).trim();if(!Z||!Q)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);if(!/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(Z))throw Error(`Invalid MCP header name "${Z}".`);return[Z,Q]}function YI($){let W=$.indexOf("<");return W>=0&&$.indexOf(">",W+1)>W+1}function jD($){let W=[...$.headers??[]],Z=[],Q=$.transport,J=$.targetArgs??[];for(let j=0;j<J.length;j++){let X=J[j];if($.parseTransport&&X==="--transport"){let Y=J[j+1];if(!Y)throw Error("--transport requires a value");Q=Y,j++;continue}if($.parseTransport&&X?.startsWith("--transport=")){Q=X.slice(12);continue}if(X==="--header"){let Y=J[j+1];if(!Y)throw Error("--header requires a value");W.push(Y),j++;continue}if(X?.startsWith("--header=")){W.push(X.slice(9));continue}Z.push(X)}return{headers:W,targetArgs:Z,transport:Q}}function VI($){if($.length===0)return{warnings:[]};let W={},Z=[];for(let Q of $){let[J,j]=XI(Q);if(W[J]=j,YI(j))Z.push(`Header "${J}" looks like it contains a placeholder. Update it in MCP settings before using this server.`)}return{headers:W,warnings:Z}}function mQ($){let W=$.name.trim();if(!W)throw Error("MCP server name is required");let{headers:Z,targetArgs:Q,transport:J}=jD({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),j=JI(J),{headers:X,warnings:Y}=VI(Z);if(j==="stdio"){if(Z.length>0)throw Error("Stdio MCP installs do not support request headers.");let[B,...H]=Q;if(!B?.trim())throw Error("Stdio MCP install requires a command after the server name, for example: cline mcp install fs --yes -- npx -y @modelcontextprotocol/server-filesystem /tmp");return{name:W,transport:{type:j,command:B,args:H.length>0?H:void 0},warnings:Y}}if(Q.length!==1)throw Error("Remote MCP install requires exactly one URL argument after the server name.");let V=Q[0]?.trim()??"";return jI(V),{name:W,transport:X?{type:j,url:V,headers:X}:{type:j,url:V},warnings:Y}}function qW($){let[W,...Z]=$;if(!W)throw Error("Marketplace MCP install args must start with a server name.");return{name:W,...jD({parseTransport:!0,targetArgs:Z})}}function BI($,W,Z){f1(Z,(Q)=>{let J=Q.mcpServers,j=J&&typeof J==="object"&&!Array.isArray(J)?{...J}:{};j[$]={transport:W},Q.mcpServers=j})}function CX($){let{name:W,transport:Z,warnings:Q}=mQ($);return BI(W,Z,$.settingsPath??Q0()),{name:W,status:"installed",transport:Z,warnings:Q}}U1();var AD={};w(AD,{uninstallPlugin:()=>RW});import{existsSync as r6,readdirSync as _I,readFileSync as LI,rmdirSync as OI,rmSync as TI,statSync as zI}from"node:fs";import{basename as j1,dirname as s$,extname as qI,isAbsolute as MI,join as H$,relative as NI,resolve as p6,sep as hX}from"node:path";import{discoverPluginModulePaths as RI,resolvePluginConfigSearchPaths as EI}from"@cline/shared/storage";var HD={};w(HD,{syncPluginMcpServersToSettings:()=>MW,removePluginMcpServersFromSettings:()=>NW,disablePluginMcpServersInSettings:()=>yX});import{existsSync as HI,mkdirSync as GI,readFileSync as KI,writeFileSync as FI}from"node:fs";import{dirname as VD,isAbsolute as AI,relative as UI,resolve as YD}from"node:path";function B8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function vQ($,W){let Z=UI(YD($),YD(W));return Z===""||!Z.startsWith("..")&&!AI(Z)}function PX($){if(!HI($))return{mcpServers:{}};try{let W=JSON.parse(KI($,"utf8"));if(B8(W))return W}catch(W){throw Error(`Invalid MCP settings at "${$}": ${W instanceof Error?W.message:String(W)}`)}throw Error(`Invalid MCP settings at "${$}": expected an object`)}function SX($){if(B8($.mcpServers))return{...$.mcpServers};return{}}function bX($,W,Z){GI(VD($),{recursive:!0}),FI($,`${JSON.stringify({...W,mcpServers:Z},null,2)}
742
+ `,"utf8")}function BD($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((W)=>W.trim()).filter((W)=>W.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((W)=>W.trim()).filter((W)=>W.length>0))]}}function uQ($){if(!B8($))return;let W=$.metadata;return B8(W)?W:void 0}function cQ($,W){let Z=uQ($);if(!Z||Z.source!=="plugin")return!1;let Q=typeof Z.pluginName==="string"?Z.pluginName:typeof Z.plugin==="string"?Z.plugin:void 0,J=typeof Z.pluginPath==="string"?Z.pluginPath:void 0;if(W.pluginName&&Q===W.pluginName){if(!W.pluginPath||J===W.pluginPath)return!0}if(J&&W.pluginPath&&(J===W.pluginPath||vQ(W.pluginPath,J)||vQ(J,W.pluginPath)))return!0;if(Q&&W.pluginNames?.some((j)=>j===Q))return!0;if(J&&W.pluginPaths?.some((j)=>J===j||vQ(j,J)||vQ(J,j)))return!0;return!1}function fI($){let W=B8($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:VD($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...W,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function DI($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let W=await i8({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Z=[],Q=[],J=(W.failures??[]).map((j)=>({pluginPath:j.pluginPath,pluginName:j.pluginName,message:j.message}));for(let j of W.extensions??[]){let X=j.__clinePluginPath;if(!X)continue;if(!j.setup){Z.push({pluginName:j.name,pluginPath:X});continue}let Y=[],V={registerTool:(B)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(B)=>{if(!j.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');Y.push(B)}};try{await j.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(B){J.push({pluginPath:X,pluginName:j.name,message:B instanceof Error?B.message:String(B)});continue}Z.push({pluginName:j.name,pluginPath:X});for(let B of Y)Q.push({pluginName:j.name,pluginPath:X,server:{...B,metadata:{...B.metadata??{},source:"plugin",pluginName:j.name,pluginPath:X}}})}return{plugins:Z,servers:Q,failures:J}}finally{await W.shutdown().catch(()=>{})}}async function MW($){let W=$.settingsPath??Q0(),Z={mutations:[],failures:[]},Q;try{Q=await DI($)}catch(B){for(let H of $.pluginPaths)Z.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Z}Z.failures.push(...Q.failures);let J;try{J=PX(W)}catch(B){for(let H of $.pluginPaths)Z.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Z}let j=SX(J),X=new Map,Y=new Map;for(let B of Q.plugins)X.set(B.pluginPath,new Set),Y.set(B.pluginPath,B.pluginName);let V=lZ(Q.servers.map((B)=>({server:B.server,owner:B,ownerLabel:B.pluginName})));for(let B of V){let H=B.owner;if(!X.has(H.pluginPath))X.set(H.pluginPath,new Set);if(B.name)X.get(H.pluginPath)?.add(B.name);if(!B.registration){Z.mutations.push({name:B.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:B.loadError??"invalid MCP server registration"});continue}let G=j[B.registration.name];if(G!==void 0){if(!cQ(G,{pluginName:H.pluginName,pluginPath:H.pluginPath})){Z.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}j[B.registration.name]=fI({registration:B.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:B8(G)?G:void 0}),Z.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:G===void 0?"created":"updated"})}for(let[B,H]of Object.entries(j)){let G=uQ(H),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=X.get(K);if(F&&cQ(H,{pluginPath:K})&&!F.has(B))delete j[B],Z.mutations.push({name:B,pluginName:typeof G?.pluginName==="string"?G.pluginName:Y.get(K)??"plugin",pluginPath:K,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Z.mutations.some((B)=>B.action!=="skipped"))try{bX(W,J,j)}catch(B){for(let H of $.pluginPaths)Z.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)})}return Z}function yX($){let W=$.settingsPath??Q0(),Z;try{Z=PX(W)}catch{return[]}let Q=SX(Z),J=BD($),j=[];for(let[X,Y]of Object.entries(Q)){if(!B8(Y)||!cQ(Y,J))continue;let V=uQ(Y);Q[X]={...Y,disabled:!0},j.push({name:X,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(j.length>0)bX(W,Z,Q);return j}function NW($){let W=$.settingsPath??Q0(),Z;try{Z=PX(W)}catch{return[]}let Q=SX(Z),J=BD($),j=[];for(let[X,Y]of Object.entries(Q)){if(!cQ(Y,J))continue;let V=uQ(Y);delete Q[X],j.push({name:X,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(j.length>0)bX(W,Z,Q);return j}var mX="_installed",wI="package",CI=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function kX($){return $.trim().toLowerCase()}function L1($,W){let Z=W?.trim();if(!Z)return;$.add(Z)}function PI($){return $.replace(/-[0-9a-f]{12}$/i,"")}function IX($){let W=qI($);return W?$.slice(0,-W.length):$}function xX($){if(!r6($))return;try{let W=JSON.parse(LI($,"utf8"));return typeof W.name==="string"?W.name.trim():void 0}catch{return}}function vX($,W){let Z=NI(W,$);return Z===""||!Z.startsWith("..")&&!MI(Z)}function GD($){let Z=p6($).split(hX),Q=Z.lastIndexOf(mX);if(Q<0)return;let J=Z[Q+1];if(!J)return;let j=CI.get(J)??1,X=Q+2+j;if(Z.length<X)return;let Y=Z.slice(0,X).join(hX)||hX;return r6(Y)?Y:void 0}function dQ($){try{return _I($,{withFileTypes:!0})}catch{return[]}}function SI($){let W=H$($,mX);if(!r6(W))return[];let Z=[];for(let Q of dQ(W)){if(!Q.isDirectory())continue;let J=H$(W,Q.name);if(Q.name==="git"){for(let j of dQ(J)){if(!j.isDirectory())continue;let X=H$(J,j.name);for(let Y of dQ(X))if(Y.isDirectory())Z.push(H$(X,Y.name))}continue}for(let j of dQ(J))if(j.isDirectory())Z.push(H$(J,j.name))}return Z.sort((Q,J)=>Q.localeCompare(J))}function KD($){try{return RI($)}catch{return[]}}function gX($){let W=KD($),Z=new Set;L1(Z,j1($)),L1(Z,PI(j1($))),L1(Z,xX(H$($,"package.json"))),L1(Z,xX(H$($,wI,"package.json")));for(let Q of W)L1(Z,j1(Q)),L1(Z,IX(j1(Q)));return{installPath:$,entryPaths:W,names:[...Z].sort((Q,J)=>Q.localeCompare(J)),installed:!0}}function bI($,W){let Z=p6($),Q=W.find((X)=>vX(Z,X));if(!Q)return;let J=s$(Z);while(J!==Q&&J!==s$(J)){if(r6(H$(J,"package.json")))return J;J=s$(J)}let j=j1(Z);if((j==="index.ts"||j==="index.js")&&s$(Z)!==Q)return s$(Z);return Z}function FD($,W){let Z=bI($,W);if(!Z)return;let Q=new Set;return L1(Q,j1($)),L1(Q,IX(j1($))),L1(Q,j1(Z)),L1(Q,IX(j1(Z))),L1(Q,xX(H$(Z,"package.json"))),{installPath:Z,entryPaths:[$],names:[...Q].sort((J,j)=>J.localeCompare(j)),installed:!1}}function yI($){let W=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return EI(W).filter((Z)=>r6(Z))}function hI($){let W=new Map;for(let Z of $){for(let Q of SI(Z))W.set(Q,gX(Q));for(let Q of KD(Z)){let J=GD(Q);if(J){if(!W.has(J))W.set(J,gX(J));continue}let j=FD(Q,$);if(j)W.set(j.installPath,j)}}return[...W.values()].sort((Z,Q)=>Z.installPath.localeCompare(Q.installPath))}function kI($,W){let Z=kX(W);if(!Z)return!1;if(kX($.installPath)===Z)return!0;return $.names.some((Q)=>kX(Q)===Z)}function II($,W,Z){let Q=p6($);for(let j of W){if(vX(Q,j.installPath))return j;if(j.entryPaths.some((X)=>p6(X)===Q))return j}let J=GD(Q);if(J)return gX(J);if(r6(Q))return FD(Q,Z);return}function xI($){let W=N0(),Z=W.disabledPlugins;if(!Z?.length)return;let Q=Z.filter((J)=>{let j=p6(J);if(vX(j,$.installPath))return!1;return!$.entryPaths.some((X)=>p6(X)===j)});if(Q.length===Z.length)return;M1({...W,disabledPlugins:Q})}function gI($){let W=s$($);while(W!==s$(W)&&j1(W)!==mX){try{OI(W)}catch{return}W=s$(W)}}function mI($){return`${$.names[0]??j1($.installPath)} at ${$.installPath}`}async function RW($){let W=yI($),Z=hI(W),Q=$.path?.trim(),J=$.name?.trim(),j;if(Q){if(j=II(Q,Z,W),!j)throw Error(`No plugin found at ${Q}`)}else{if(!J)throw Error("plugin uninstall requires a plugin name");let Y=Z.filter((V)=>kI(V,J));if(Y.length===0)throw Error(`No plugin found matching "${J}"`);if(Y.length>1)throw Error(`Multiple plugins match "${J}": ${Y.map(mI).join(", ")}`);j=Y[0]}let X=zI(j.installPath,{throwIfNoEntry:!1});if(!X)throw Error(`Plugin install path does not exist: ${j.installPath}`);if(NW({pluginPaths:[j.installPath,...j.entryPaths],pluginNames:j.names}),TI(j.installPath,{recursive:X.isDirectory(),force:!0}),xI(j),j.installed)gI(j.installPath);return{name:J||j.names[0]||j1(j.installPath),installPath:j.installPath,removedPaths:[j.installPath],entryPaths:j.entryPaths}}var cX=120000,EW=12000,iI=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,nI=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,aI=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,oI=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function uX($){return $.install?.args??[]}function sI(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||uI()}function tI($){let W=0,Z=$.length;while(W<Z&&($[W]==="."||$[W]==="-"))W++;while(Z>W&&($[Z-1]==="."||$[Z-1]==="-"))Z--;return $.slice(W,Z)}function eI($){return tI($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function DD($){return $.split(/\r?\n/).map((W)=>{if(!iI.test(W))return W;return W.replace(nI,"$1[redacted]").replace(aI,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(oI,"$1 [redacted]").replace(/((?:^|[^\w])(?:api\s+key|access\s+token|refresh\s+token|auth(?:orization)?\s+token|secret|password|credential)\s+(?:is\s+)?)(\S+)/gi,"$1[redacted]")}).join(`
743
+ `).slice(-EW)}function $x($){let W=DD([$.stdout,$.stderr].filter(Boolean).join(`
744
+ `)).trim();return W.length>0?W:void 0}function Wx($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function Zx($,W){return[$,...W].map((Z)=>Wx(DD(Z).trim())).join(" ")}var Qx=async($,W)=>new Promise((Z,Q)=>{let J=!1,j=!1,X=vI($,W,{env:process.env,shell:dI()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),Y="",V="",B=setTimeout(()=>{if(!J)X.kill("SIGKILL")},cX+5000),H=setTimeout(()=>{j=!0,V+=`
745
+ Timed out after ${cX/1000}s.`,X.kill("SIGTERM")},cX);B.unref?.(),H.unref?.(),X.stdout?.on("data",(G)=>{if(Y+=String(G),Y.length>EW*2)Y=Y.slice(-EW)}),X.stderr?.on("data",(G)=>{if(V+=String(G),V.length>EW*2)V=V.slice(-EW)}),X.once("error",(G)=>{clearTimeout(H),clearTimeout(B),Q(G)}),X.once("close",(G,K)=>{J=!0,clearTimeout(H),clearTimeout(B),Z({exitCode:j?124:G??(K==="SIGINT"?130:1),stdout:Y,stderr:V})})});function dX($){return`${$.type}:${$.id}`}function wW($){let W=uX($);if(W.length===0)throw Error("Marketplace install args are required.");return qW(W).name}function lQ($,W={}){let Z=wW($),Q=W.mcpSettingsPath??rI(),J=f1(Q,(j)=>{let X=j.mcpServers&&typeof j.mcpServers==="object"&&!Array.isArray(j.mcpServers)?j.mcpServers:{},Y=Object.hasOwn(X,Z);if(Y)delete X[Z];return j.mcpServers=X,Y});return{name:Z,deleted:J}}function CW($){let W=new Set,Z=(J)=>{let j=eI(J??"");if(j&&j!=="skill")W.add(j)};Z($.id),Z($.name);let Q=uX($);for(let J=0;J<Q.length;J++){let j=Q[J];if((j==="--skill"||j==="-s")&&Q[J+1]){Z(Q[J+1]),J++;continue}let X=j.split("@").at(1);if(X)Z(X)}return[...W]}function PW($){return[UD(pI(),"skills",$,"SKILL.md"),UD(sI(),".agents","skills",$,"SKILL.md")].filter((W,Z,Q)=>Q.indexOf(W)===Z)}function SW($){if($.type!=="skill")return;return CW($).find((W)=>PW(W).some((Z)=>fD(Z)))}function pQ($){return SW($)!==void 0}function Jx($){let W=[];if($.type!=="skill")return W;for(let Z of CW($))for(let Q of PW(Z)){if(!fD(Q))continue;let J=lI(Q);cI(J,{recursive:!0,force:!0}),W.push(J)}return W}async function rQ($,W={}){let Z=SW($);if(!Z)return{id:$.id,type:"skill",status:"uninstalled",message:`${$.name??$.id} is not installed.`};let Q="npx",J=["-y","skills@latest","remove",Z,"-g","-y"],j=Zx(Q,J),X=W.spawnCommand??Qx,Y;try{Y=await X(Q,J)}catch(H){throw Error(`Failed to start ${$.name??$.id} uninstall command:
746
746
  ${j}
747
- ${H instanceof Error?H.message:String(H)}`)}let V=aI(Y);if(Y.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${Y.exitCode}.
747
+ ${H instanceof Error?H.message:String(H)}`)}let V=$x(Y);if(Y.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${Y.exitCode}.
748
748
  Command:
749
749
  ${j}${V?`
750
750
 
751
- ${V}`:""}`);let B=eI($);if(dQ($))throw Error(`Skill uninstall completed, but ${$.name??$.id} is still present in Cline's global skills directories.`);return{id:$.id,type:"skill",status:"uninstalled",message:`Uninstalled ${$.name??$.id}.`,output:[V,...B.map((H)=>`Removed: ${H}`)].filter(Boolean).join(`
752
- `)||void 0}}async function pQ($,W={}){let[Z]=mX($),Q=Z?.trim()||$.id;if(!Q)throw Error("Plugin marketplace uninstalls require a plugin name.");let J=await MW({name:Q,workspaceRoot:W.workspaceRoot});return{id:$.id,type:"plugin",status:"uninstalled",message:`Uninstalled ${$.name??J.name??$.id}.`,output:[`Path: ${J.installPath}`,...J.removedPaths.map((j)=>`Removed: ${j}`)].join(`
753
- `)}}async function cX($,W={}){if($.type==="mcp"){let Z=NW($);if(W.deleteMcpServer)await W.deleteMcpServer(Z);else uQ($,W);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Z??$.id}.`}}if($.type==="skill")return lQ($,W);if($.type==="plugin")return pQ($,W);throw Error(`Unsupported marketplace entry type: ${$.type}`)}var ND={};E(ND,{parsePluginSource:()=>$7,isOfficialPluginSlug:()=>eQ,installPlugin:()=>iX,collectPluginMcpOAuthCandidates:()=>W7});import{spawn as $x}from"node:child_process";import{createHash as Wx}from"node:crypto";import{existsSync as y1,mkdirSync as lX,readdirSync as Zx,readFileSync as Qx,renameSync as rQ,rmSync as aQ,statSync as pX}from"node:fs";import{cp as dX,mkdir as OD,writeFile as oQ}from"node:fs/promises";import{homedir as FD}from"node:os";import{basename as H$,dirname as AD,extname as Jx,join as s,relative as TD,resolve as t$,sep as jx}from"node:path";import{isPluginModulePath as nQ,resolveClineDir as Xx,resolvePluginModuleEntries as Yx}from"@cline/shared/storage";var r6="_installed",sQ="package",Vx="https://github.com/cline/plugins.git",UD=30000,iQ=10485760,fD="@cline/",Bx=["dependencies","devDependencies","optionalDependencies","peerDependencies"],Hx={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function tQ($){if($==="~")return FD();if($.startsWith("~/"))return s(FD(),$.slice(2));return $}function zD($){return $.split(jx).join("/")}function H8($){return Wx("sha256").update($).digest("hex").slice(0,12)}function Gx($){let W=0;while(W<$.length&&$[W]==="-")W++;let Z=$.length;while(Z>W&&$[Z-1]==="-")Z--;return $.slice(W,Z)}function B$($){let W="",Z=!1,Q=$.startsWith("@")?$.slice(1):$;for(let j of Q.slice(0,256)){if(j>="a"&&j<="z"||j>="A"&&j<="Z"||j>="0"&&j<="9"||j==="."||j==="_"||j==="-")W+=j,Z=j==="-";else if(!Z)W+="-",Z=!0;if(W.length>=80)break}return Gx(W)||"plugin"}function eQ($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function Kx($){return $?.trim()||Vx}function DD($){let Z=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Z?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Z[1]}}function Fx($){if($.startsWith(".")||$.startsWith("/")||$==="~"||$.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test($))return!1;let[W,...Z]=$.split("/");return!!W&&Z.length>=2&&W.includes(".")&&!W.startsWith(".")&&!W.endsWith(".")}function Ax($){let W=$.match(/^git@([^:]+):(.+)$/);if(W){let X=W[2]??"",Y=X.indexOf("@");if(Y<0)return{repo:$};return{repo:`git@${W[1]}:${X.slice(0,Y)}`,ref:X.slice(Y+1)||void 0}}if($.includes("://"))try{let X=new URL($),Y=X.pathname.replace(/^\/+/,""),V=Y.indexOf("@");if(V<0)return{repo:$};return X.pathname=`/${Y.slice(0,V)}`,{repo:X.toString().replace(/\/$/,""),ref:Y.slice(V+1)||void 0}}catch{return{repo:$}}let Z=$.indexOf("/");if(Z<0)return{repo:$};let Q=$.slice(0,Z),J=$.slice(Z+1),j=J.indexOf("@");if(j<0)return{repo:$};return{repo:`${Q}/${J.slice(0,j)}`,ref:J.slice(j+1)||void 0}}function Ux($){try{return decodeURIComponent($)}catch{return $}}function fx($){return H$(Ux($))||"plugin"}function Dx($){let W=$.split("/").filter(Boolean);return W.length>=5&&(W[2]==="blob"||W[2]==="raw")}function _D($){if(!/^https?:\/\//i.test($))return null;let W;try{W=new URL($)}catch{return null}let Z=W.hostname.toLowerCase(),Q=fx(W.pathname),J=nQ(Q),j=(Z==="github.com"||Z==="www.github.com")&&Dx(W.pathname);if(W.protocol!=="https:"){if(j||Z==="raw.githubusercontent.com"||J)throw Error(`Remote plugin file URLs must use https: ${$}`);return null}if(Z==="github.com"||Z==="www.github.com"){let X=W.pathname.split("/").filter(Boolean);if(!j)return null;if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:`https://raw.githubusercontent.com/${[X[0],X[1],...X.slice(3)].join("/")}`,filename:Q}}if(Z==="raw.githubusercontent.com"){if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:W.toString(),filename:Q}}if(!J)return null;return{type:"remote",url:W.toString(),filename:Q}}function LD($,W={}){let Z=$.trim(),Q=Z.startsWith("git:")&&!Z.startsWith("git://"),J=Q?Z.slice(4).trim():Z;if(!W.force&&!Q&&!/^(https?|ssh|git):\/\//i.test(J))return null;let{repo:j,ref:X}=Ax(J),Y="",V="";if(j.startsWith("git@")){let G=j.match(/^git@([^:]+):(.+)$/);Y=G?.[1]??"",V=G?.[2]??""}else if(/^(https?|ssh|git):\/\//i.test(j)){let G=new URL(j);Y=G.hostname,V=G.pathname.replace(/^\/+/,"")}else{let G=j.indexOf("/");if(G<0)return null;Y=j.slice(0,G),V=j.slice(G+1)}let B=V.replace(/\.git$/,"").replace(/^\/+/,"");if(!Y||!B||B.split("/").length<2)return null;return{type:"git",repo:j.startsWith("git@")||/^(https?|ssh|git):\/\//i.test(j)?j:`https://${j}`,ref:X,host:Y,path:B}}function $7($,W){let Z=$.trim();if(!Z)throw Error("plugin install requires a source");if(W==="npm"){let X=Z.startsWith("npm:")?Z.slice(4).trim():Z,{name:Y}=DD(X);return{type:"npm",spec:X,name:Y}}if(W==="git"){let X=LD(Z,{force:!0});if(!X)throw Error(`Invalid git plugin source: ${$}`);return X}if(W==="local")return{type:"local",path:$};if(W==="remote"){let X=_D(Z);if(!X)throw Error(`Invalid remote plugin source: ${$}`);return X}if(Z.startsWith("npm:")){let X=Z.slice(4).trim(),{name:Y}=DD(X);return{type:"npm",spec:X,name:Y}}if(Z.startsWith(".")||Z.startsWith("/")||Z==="~"||Z.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test(Z))return{type:"local",path:$};let J=_D(Z);if(J)return J;let j=LD(Z);if(j)return j;if(eQ(Z))return{type:"official",slug:Z};if(Fx(Z))throw Error(`Unrecognized plugin source "${$}". Use --git for hostname-style repositories or pass an explicit local path such as ./github.com/owner/repo.`);return{type:"local",path:$}}function _x($){return $?s($,".cline","plugins"):s(Xx(),"plugins")}function Lx($,W,Z){if(W.type==="npm")return s($,r6,"npm",`${B$(W.name)}-${H8(Z)}`);if(W.type==="git")return s($,r6,"git",B$(W.host),`${B$(W.path)}-${H8(Z)}`);if(W.type==="remote")return s($,r6,"remote",`${B$(W.filename)}-${H8(Z)}`);if(W.type==="official")return s($,r6,"official",`${B$(W.slug)}-${H8(Z)}`);return s($,r6,"local",`${B$(H$(tQ(W.path)))}-${H8(Z)}`)}function Ox($,W,Z){if($.type==="npm")return`npm:${$.spec}`;if($.type==="git")return`git:${$.repo}${$.ref?`#${$.ref}`:""}`;if($.type==="remote")return`remote:${$.url}`;if($.type==="official")return`official:${Z}#plugins/${$.slug}`;return`local:${t$(W,tQ($.path))}`}function Tx($,W){if($.type==="npm")return $.name;if($.type==="git")return B$(H$($.path));if($.type==="remote")return B$(H$($.filename,Jx($.filename)));if($.type==="official")return $.slug;return B$(H$(t$(W,tQ($.path))))}async function i6($,W,Z={}){await new Promise((Q,J)=>{let j=$x($,W,{cwd:Z.cwd,stdio:["ignore","ignore","pipe"],env:process.env,windowsHide:!0}),X="";j.stderr.on("data",(Y)=>{X+=String(Y)}),j.on("error",J),j.on("close",(Y)=>{if(Y===0){Q();return}let V=X.trim();J(Error(`${$} ${W.join(" ")} failed with exit code ${Y}${V?`: ${V}`:""}`))})})}function qD($){let W=s($,"package.json");if(!y1(W))return null;try{return JSON.parse(Qx(W,"utf8"))}catch{return null}}function zx($){let W=$?.cline?.plugins;if(!Array.isArray(W))return[];return W.flatMap((Z)=>{if(typeof Z==="string")return[Z];return Z.paths??[]})}async function qx($){let W=s($,"package.json"),Z=qD($);if(!Z)return;let Q=!1;for(let J of Bx){let j=Z[J];if(!j||typeof j!=="object")continue;for(let X of Object.keys(j)){if(!X.startsWith(fD))continue;delete j[X],delete Z.peerDependenciesMeta?.[X],Q=!0}if(Object.keys(j).length===0)delete Z[J]}if(Z.peerDependenciesMeta){for(let J of Object.keys(Z.peerDependenciesMeta)){if(!J.startsWith(fD))continue;delete Z.peerDependenciesMeta[J],Q=!0}if(Object.keys(Z.peerDependenciesMeta).length===0)delete Z.peerDependenciesMeta}if(!Q)return;await oQ(W,`${JSON.stringify(Z,null,2)}
754
- `,"utf8")}function Mx($,W){let Z=s($,"node_modules","@cline");if(!y1(Z))return;for(let Q of RD(Z)){if(`@cline/${Q.name}`===W)continue;aQ(s(Z,Q.name),{recursive:!0,force:!0})}}function MD($){let W=zx(qD($)).map((j)=>t$($,j)).filter((j)=>y1(j)&&pX(j).isFile()&&nQ(j));if(W.length>0)return W;let Z=Yx($);if(Z?.length)return Z;let Q=[],J=[$];while(J.length>0){let j=J.pop();if(!j)continue;for(let X of RD(j)){let Y=s(j,X.name);if(X.name==="node_modules"||X.name===".git")continue;if(X.isDirectory()){J.push(Y);continue}if(X.isFile()&&!X.name.startsWith(".")&&nQ(Y))Q.push(Y)}}return Q.sort((j,X)=>j.localeCompare(X))}function RD($){try{return Zx($,{withFileTypes:!0})}catch{return[]}}function Rx($,W){let Z=MD(W);if(Z.length===0)throw Error(`No plugin entry files found in ${W}`);return Z.map((Q)=>`./${zD(TD($,Q))}`)}async function Nx($,W,Z){let Q=Rx($,W);return await oQ(s($,"package.json"),JSON.stringify({...Hx,name:Z,cline:{plugins:[{paths:Q}]}},null,2),"utf8"),Q}async function Ex($,W,Z){let Q=s(W,sQ);return await OD(Q,{recursive:!0}),await oQ(s(Q,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await i6(Z,["install",$.spec,"--prefix",Q,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),Mx(Q,$.name),s(Q,"node_modules",$.name)}async function rX($,W){if(!y1(s($,"package.json")))return;await qx($),await i6(W,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function wx($,W,Z){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let Q=s(W,sQ),J=["clone","--filter=blob:none"];if($.ref)J.push("--branch",$.ref);J.push("--",$.repo,Q);try{await i6("git",J)}catch(j){if(!$.ref)throw j;await i6("git",["clone","--filter=blob:none","--",$.repo,Q]),await i6("git",["checkout","--detach",$.ref],{cwd:Q})}return await rX(Q,Z),Q}async function Cx($,W,Z,Q){let J=s(W,"repo");await i6("git",["clone","--filter=blob:none","--depth","1","--",Q,J]);let j=s(J,"plugins",$.slug);if(!y1(j)||!pX(j).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${Q}`);let X=s(W,sQ);return await dX(j,X,{recursive:!0,filter:(Y)=>{let V=H$(Y);return V!==".git"&&V!=="node_modules"}}),aQ(J,{recursive:!0,force:!0}),await rX(X,Z),X}function uX($){return Error(`Remote plugin file from ${$} exceeds the ${iQ} byte limit`)}function Px($){let W=$.headers.get("content-length");if(!W)return;let Z=Number(W);if(!Number.isFinite(Z)||Z<0)return;return Z}async function Sx($,W){let Z=Px($);if(Z!==void 0&&Z>iQ)throw uX(W);if(!$.body){let X=Buffer.from(await $.text(),"utf8");if(X.byteLength>iQ)throw uX(W);return X}let Q=$.body.getReader(),J=[],j=0;try{while(!0){let{done:X,value:Y}=await Q.read();if(X)break;let V=Buffer.from(Y);if(j+=V.byteLength,j>iQ)throw await Q.cancel().catch(()=>{return}),uX(W);J.push(V)}return Buffer.concat(J,j)}finally{Q.releaseLock()}}async function bx($,W){let Z=new AbortController,Q=setTimeout(()=>{Z.abort()},UD);try{let J=await fetch($.url,{signal:Z.signal});if(!J.ok){let X=J.statusText?` ${J.statusText}`:"";throw Error(`Failed to download plugin file from ${$.url}: ${J.status}${X}`)}let j=await Sx(J,$.url);return lX(W,{recursive:!0}),await oQ(s(W,$.filename),j),W}catch(J){if(J instanceof Error&&J.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${UD}ms`);throw J}finally{clearTimeout(Q)}}async function yx($,W,Z,Q){let J=t$(Z,tQ($.path));if(!y1(J))throw Error(`Plugin source path does not exist: ${J}`);let j=pX(J);if(j.isFile()){if(!nQ(J))throw Error(`Plugin file must be .js or .ts: ${J}`);lX(W,{recursive:!0});let Y=s(W,H$(J));return await dX(J,Y),W}if(!j.isDirectory())throw Error(`Plugin source must be a file or directory: ${J}`);let X=s(W,sQ);return await dX(J,X,{recursive:!0,filter:(Y)=>{let V=H$(Y);return V!==".git"&&V!=="node_modules"}}),await rX(X,Q),X}function hx($,W){if(y1($)&&!W)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function kx($,W,Z){if(lX(AD(W),{recursive:!0}),!y1(W)){rQ($,W);return}if(!Z)throw Error(`Plugin is already installed at ${W}. Use --force to replace it.`);let Q=s(AD(W),`.replace-${H$(W)}-${Date.now()}-${process.pid}-${H8(`${W}:${Math.random()}`)}`);rQ(W,Q);try{rQ($,W)}catch(J){if(!y1(W)&&y1(Q))rQ(Q,W);throw J}try{aQ(Q,{recursive:!0,force:!0})}catch{}}function Ix($){let W=$.transport;if(W.type==="stdio")return!1;return W.headers!==void 0&&Object.keys(W.headers).length>0}function xx($){let W=$.oauth?.tokens?.access_token;return typeof W==="string"&&W.trim().length>0}function gx($){let W=$.metadata;if(!W||W.source!=="plugin"||typeof W.pluginName!=="string"||typeof W.pluginPath!=="string")return;return{pluginName:W.pluginName,pluginPath:W.pluginPath}}function W7($){let W=new Set($.pluginPaths.map((J)=>t$(J)));if(W.size===0)return[];let Z;try{Z=e0({filePath:$.settingsPath??Q0()})}catch{return[]}let Q=[];for(let J of Z){let j=gx(J);if(!j||!W.has(t$(j.pluginPath)))continue;let X=J.transport.type;if(X==="stdio")continue;if(Ix(J)||xx(J))continue;Q.push({name:J.name,pluginName:j.pluginName,pluginPath:j.pluginPath,transportType:X,lastError:J.oauth?.lastError})}return Q.sort((J,j)=>J.name.localeCompare(j.name))}async function iX($){let W=$.source.trim(),Z=$7(W,$.sourceType),Q=$.cwd?.trim(),J=Q?t$(Q):process.cwd(),j=_x(Q?J:void 0),X=Kx($.officialPluginsRepo),Y=Ox(Z,J,X),V=Lx(j,Z,Y),B=Tx(Z,J),H=s(j,r6,".tmp"),G=s(H,`${Date.now()}-${process.pid}-${H8(`${W}:${Math.random()}`)}`),K=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;hx(V,F),await OD(H,{recursive:!0});let A;try{if(Z.type==="npm")A=await Ex(Z,G,K);else if(Z.type==="git")A=await wx(Z,G,K);else if(Z.type==="official")A=await Cx(Z,G,K,X);else if(Z.type==="remote")A=await bx(Z,G);else A=await yx(Z,G,J,K);let f=(Z.type==="local"||Z.type==="remote")&&A===G?MD(G).map((D)=>`./${zD(TD(G,D))}`):await Nx(G,A,B);if(f.length===0)throw Error(`No plugin entry files found for ${W}`);kx(G,V,F);let U={source:W,installPath:V,entryPaths:f.map((D)=>t$(V,D)),mcpSyncFailures:[],mcpOAuthCandidates:[]},_=await zW({pluginPaths:U.entryPaths,cwd:J,workspacePath:J});return U.mcpSyncFailures=_.failures,U.mcpOAuthCandidates=W7({pluginPaths:U.entryPaths}),U}catch(f){throw aQ(G,{recursive:!0,force:!0}),f}}var iD={};E(iD,{updateLocalProvider:()=>B7,saveLocalProviderSettings:()=>ZY,saveLocalProviderOAuthCredentials:()=>XY,resolveLocalClineAuthToken:()=>VY,refreshProviderModelsFromSource:()=>QY,normalizeOAuthProvider:()=>JY,markLocalProviderEnabled:()=>eX,loginLocalProvider:()=>jY,loginAndSaveLocalProviderOAuthCredentials:()=>YY,listLocalProviders:()=>$Y,getLocalProviderModels:()=>WY,ensureCustomProvidersLoaded:()=>X7,deleteLocalProvider:()=>H7,addLocalProvider:()=>tX});import*as I0 from"@cline/llms";import{existsSync as mx,mkdirSync as vx,readFileSync as cx,writeFileSync as ux}from"node:fs";import{mkdir as dx,readFile as lx,writeFile as px}from"node:fs/promises";import{dirname as nX,join as rx}from"node:path";import*as p0 from"@cline/llms";import{ModelCapabilitySchema as ix,ProviderCapabilitySchema as nx,ProviderClientSchema as ax,ProviderProtocolSchema as ox}from"@cline/shared";import{z as t}from"zod";var sx=t.object({id:t.string().optional(),name:t.string().optional(),maxTokens:t.number().optional(),contextWindow:t.number().optional(),maxInputTokens:t.number().optional(),capabilities:t.array(ix).optional(),supportsVision:t.boolean().optional(),supportsAttachments:t.boolean().optional(),supportsReasoning:t.boolean().optional()}).passthrough(),tx=t.object({name:t.string(),baseUrl:t.string(),defaultModelId:t.string().optional(),protocol:ox.optional(),client:ax.optional(),capabilities:t.array(nx).optional(),modelsSourceUrl:t.string().optional()}).passthrough(),ED=t.object({provider:tx.optional(),models:t.record(t.string(),sx).optional()}).passthrough(),wD=t.object({version:t.literal(1),providers:t.record(t.string(),ED)}),ex=t.object({version:t.literal(1),providers:t.record(t.string(),t.unknown())}),Z7=new Set;function CD($){return $.split(/[-_]/).filter(Boolean).map((W)=>W.charAt(0).toUpperCase()+W.slice(1)).join(" ")}function G8($){return rx(nX($.getFilePath()),"models.json")}function Q7(){return{version:1,providers:{}}}function PD($){let W=ex.safeParse($);if(!W.success)return Q7();let Z={};for(let[Q,J]of Object.entries(W.data.providers)){let j=ED.safeParse(J);if(j.success)Z[Q]=j.data}return{version:1,providers:Z}}function aX($){if(!mx($))return Q7();try{let W=cx($,"utf8");return PD(JSON.parse(W))}catch{}return Q7()}async function n6($){try{let W=await lx($,"utf8");return PD(JSON.parse(W))}catch{}return Q7()}function SD($,W){vx(nX($),{recursive:!0});let Z=wD.parse(W);ux($,`${JSON.stringify(Z,null,2)}
755
- `,"utf8")}async function J7($,W){await dx(nX($),{recursive:!0});let Z=wD.parse(W);await px($,`${JSON.stringify(Z,null,2)}
756
- `,"utf8")}function bD($,W){return{id:$,name:W.name??$,supportsAttachments:W.capabilities?.includes("files"),supportsVision:W.capabilities?.includes("images"),supportsReasoning:W.capabilities?.includes("reasoning")||W.thinkingConfig!=null}}function yD($){if(!$||$.length===0)return;let W=new Set;if($.includes("reasoning"))W.add("reasoning");if($.includes("prompt-cache"))W.add("prompt-cache");if($.includes("tools"))W.add("tools");return W.size>0?[...W]:void 0}function hD($){let W=new Set;if(!$||$.length===0)return[...W];if($.includes("streaming"))W.add("streaming");if($.includes("tools"))W.add("tools");if($.includes("reasoning"))W.add("reasoning");if($.includes("prompt-cache"))W.add("prompt-cache");if($.includes("vision"))W.add("images"),W.add("files");return[...W]}function $g($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function kD($,W){return $??W??"openai-chat"}function ID($,W,Z){return $??Z??(W==="openai-responses"?"openai":"openai-compatible")}function xD($,W,Z){let Q=new Set(W?.capabilities??Z??[]);if(W?.supportsVision)Q.add("images");if(W?.supportsAttachments)Q.add("files");if(W?.supportsReasoning)Q.add("reasoning");return{id:$,name:W?.name??$,maxTokens:W?.maxTokens,contextWindow:W?.contextWindow,maxInputTokens:W?.maxInputTokens,capabilities:Q.size>0?[...Q]:void 0}}function Wg($,W){for(let[Z,Q]of Object.entries(W??{})){let J=Q.id?.trim()||Z.trim();if(!J)continue;p0.registerModel($,J,xD(J,Q))}}function Zg($,W,Z){return{...W??{},id:$,name:W?.name??$,capabilities:W?.capabilities??Z}}function Qg($){return Object.assign({},...p0.resolveProviderModelCatalogKeys($).map((Z)=>p0.getGeneratedModelsForProvider(Z)))}function Jg($){let W=$.provider.trim();if(!W||p0.isBuiltInProviderId(W))return;let Z=$.baseUrl?.trim();if(!Z)return;let Q=p0.MODEL_COLLECTIONS_BY_PROVIDER_ID[W],J=Qg(W),j=hD($.capabilities),X=j.length>0?j:void 0,Y=$.model?.trim(),V={...J,...Q?.models??{}};if(Y)V[Y]=Zg(Y,V[Y],X);let B=Object.keys(V).filter(Boolean),H=Y||B[0];if(!H)return;let G=kD($.protocol,Q?.provider.protocol),K=ID($.client,G,Q?.provider.client);p0.registerProvider({provider:{id:W,name:Q?.provider.name??CD(W),description:Q?.provider.description,protocol:G,client:K,baseUrl:Z,modelsSourceUrl:Q?.provider.modelsSourceUrl,defaultModelId:H,capabilities:yD($.capabilities)??Q?.provider.capabilities,source:"file"},models:V})}function j7($){for(let W of Object.values($.providers))Jg(W.settings)}function PW($,W){let Z=W.models??{};if(!$g(W.provider)){Wg($,Z);return}let Q=hD(W.provider.capabilities),J=Object.entries(Z).map(([B,H])=>({id:H.id?.trim()||B.trim(),model:H})).filter(({id:B})=>B.length>0),j=W.provider.defaultModelId?.trim()||J[0]?.id||"default",X=kD(W.provider.protocol,void 0),Y=ID(W.provider.client,X,void 0),V=Object.fromEntries(J.map(({id:B,model:H})=>[B,{...xD(B,H,Q.length>0?Q:void 0),status:"active"}]));p0.registerProvider({provider:{id:$,name:W.provider.name.trim()||CD($),protocol:X,client:Y,baseUrl:W.provider.baseUrl,modelsSourceUrl:W.provider.modelsSourceUrl,defaultModelId:j,capabilities:yD(W.provider.capabilities),source:"file"},models:V})}function gD($){let W=G8($);if(Z7.has(W))return;let Z=aX(W);for(let[Q,J]of Object.entries(Z.providers))PW(Q,J);Z7.add(W)}async function X7($){let W=G8($);if(Z7.has(W))return;let Z=await n6(W);for(let[Q,J]of Object.entries(Z.providers))PW(Q,J);Z7.add(W)}var vD="cline-pass";function jg($){return $.apiKey??$.auth?.apiKey}function Xg($){return($.auth?.accessToken?.trim()??"").length>0}function cD($){return $.split(/[-_]/).filter(Boolean).map((W)=>W.charAt(0).toUpperCase()+W.slice(1)).join(" ")}function Yg($){let W=$.split(/\s+/).filter(Boolean);if(W.length===0)return"?";if(W.length===1)return W[0].slice(0,2).toUpperCase();return`${W[0][0]}${W[1][0]}`.toUpperCase()}function Vg($){let W=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Z=0;for(let Q of $)Z=Z*31+Q.charCodeAt(0)>>>0;return W[Z%W.length]}function uD($){return Object.entries($).sort(([W],[Z])=>W.localeCompare(Z)).map(([W,Z])=>bD(W,Z))}async function Bg($,W){let Z=await I0.getModelsForProvider($),Q=$===vD;if(!W&&!Q)return Z;let J=await Y5($,{loadLatestOnInit:Q,loadPrivateOnAuth:!0,failOnError:!1},W);if($==="litellm"&&J?.knownModels)return J.knownModels;if(Q&&J?.knownModels)return J.knownModels;return J?.knownModels?{...Z,...J.knownModels}:Z}function oX($){return[...new Set(($??[]).map((W)=>W.trim()).filter(Boolean))]}function Hg($){if(!$?.length)return;return[...new Set($)]}function Gg($,W){return Hg([...$??[],...W??[]])}function Kg($){let W=$?.popularRank;return typeof W==="number"&&Number.isFinite(W)?W:Number.MAX_SAFE_INTEGER}function Fg($){if(!$||typeof $!=="object")return!1;let W=$;return typeof W.path==="string"&&W.path.trim().length>0&&typeof W.label==="string"&&W.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(W.type))}function Ag($){let W=$?.configFields;if(!Array.isArray(W))return;return W.filter(Fg)}var Y7={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},mD={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function Ug($){if(!$)return[Y7];if($.source!=="system")return $.baseUrl?[Y7,mD]:[Y7];let W=[];if($.env?.length)W.push(Y7);if($.baseUrl)W.push(mD);return W}function fg($,W){return W.split(".").reduce((Z,Q)=>{if(!Z||typeof Z!=="object")return;return Z[Q]},$)}function Dg($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function _g($,W,Z){if(!$?.length)return;let Q={};for(let J of $){let X=Dg(J.path==="baseUrl"&&W?.baseUrl===void 0?Z?.baseUrl:fg(W,J.path))??J.defaultValue;if(X!==void 0)Q[J.path]=X}return Q}function dD($){let W=Object.entries($??{}).filter(([Z])=>Z.trim().length>0);return W.length>0?Object.fromEntries(W):void 0}function sX($,W){let Z=W?.includes("vision")??!1,Q=W?.includes("reasoning")??!1;return Object.fromEntries($.map((J)=>[J,{id:J,name:J,supportsVision:Z,supportsAttachments:Z,supportsReasoning:Q}]))}async function lD($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let W=$.modelsSourceUrl?await $Z($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...W])]}function pD($,W){let Z=$.read(),Q=!1;if(Z.providers[W])delete Z.providers[W],Q=!0;if(Z.lastUsedProvider===W)delete Z.lastUsedProvider,Q=!0;if(Q)$.write(Z);I0.unregisterProvider(W)}async function tX($,W){let Z=W.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=W.baseUrl.trim(),J=W.apiKey?.trim()??"";if(!Q&&!J){let A=G8($);if((await n6(A)).providers[Z]){let U=await H7($,{providerId:Z});return{providerId:Z,settingsPath:U.settingsPath,modelsPath:U.modelsPath,modelsCount:0}}return pD($,Z),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(I0.hasProvider(Z))throw Error(`provider "${Z}" already exists`);let j=W.name.trim();if(!j)throw Error("name is required");if(!Q)throw Error("baseUrl is required");let X=oX(W.models),Y=W.modelsSourceUrl?.trim(),V=await lD({providerId:Z,explicitModels:X,modelsSourceUrl:Y,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let B=W.defaultModelId?.trim()&&V.includes(W.defaultModelId.trim())?W.defaultModelId.trim():V[0],H=W.capabilities?.length?[...new Set(W.capabilities)]:void 0,G=dD(W.headers);$.saveProviderSettings({provider:Z,apiKey:J||void 0,baseUrl:Q,headers:G,timeout:W.timeoutMs,model:B,protocol:W.protocol,client:W.client},{setLastUsed:!1});let K=G8($),F=await n6(K);return F.providers[Z]={provider:{name:j,baseUrl:Q,defaultModelId:B,protocol:W.protocol,client:W.client,capabilities:H,modelsSourceUrl:Y},models:sX(V,H)},await J7(K,F),PW(Z,F.providers[Z]),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function B7($,W){let Z=W.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=G8($),J=await n6(Q),j=J.providers[Z];if(!j){let T=$.getProviderSettings(Z);if(!T)throw Error(`provider "${Z}" does not exist`);let O=W.modelsSourceUrl?.trim(),L=oX(W.models)[0]??T.model?.trim();if(!L&&!O)throw Error(`provider "${Z}" cannot be updated because no model is configured`);j={provider:{name:W.name?.trim()||cD(Z),baseUrl:W.baseUrl?.trim()??T.baseUrl?.trim()??"",defaultModelId:L,protocol:T.protocol,client:T.client,capabilities:T.capabilities},models:L?sX([L],T.capabilities):{}}}if(!j.provider)throw Error(`provider "${Z}" cannot be updated because it is a model overlay (no provider metadata)`);let X=W.name?.trim()??j.provider.name.trim();if(!X)throw Error("name is required");let Y=W.baseUrl?.trim()??j.provider.baseUrl.trim();if(!Y)throw Error("baseUrl is required");let V=W.capabilities===void 0?j.provider.capabilities:W.capabilities===null?void 0:[...new Set(W.capabilities)],B=W.protocol===void 0?j.provider.protocol:W.protocol??void 0,H=W.client===void 0?j.provider.client:W.client??void 0,G=oX(W.models),K=W.modelsSourceUrl===void 0?j.provider.modelsSourceUrl:W.modelsSourceUrl?.trim()||void 0,F=W.models!==void 0||W.modelsSourceUrl!==void 0&&!!K,A=Object.keys(j.models??{}).map((T)=>T.trim()).filter(Boolean),f=await lD({providerId:Z,explicitModels:G,modelsSourceUrl:K,fallbackModelIds:A,shouldRecompute:F});if(f.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let U=W.defaultModelId===void 0?j.provider.defaultModelId?.trim():W.defaultModelId?.trim(),_=U&&f.includes(U)?U:f[0],M={...$.getProviderSettings(Z)??{},provider:Z,baseUrl:Y,model:_};if(B)M.protocol=B;else delete M.protocol;if(H)M.client=H;else delete M.client;if(W.apiKey!==void 0){let T=W.apiKey?.trim()??"";if(T)M.apiKey=T;else delete M.apiKey}if(W.headers!==void 0){let T=dD(W.headers);if(T)M.headers=T;else delete M.headers}if(W.timeoutMs!==void 0)if(typeof W.timeoutMs==="number")M.timeout=W.timeoutMs;else delete M.timeout;return $.saveProviderSettings(M,{setLastUsed:!1}),J.providers[Z]={provider:{name:X,baseUrl:Y,defaultModelId:_,protocol:B,client:H,capabilities:V,modelsSourceUrl:K},models:sX(f,V)},await J7(Q,J),PW(Z,J.providers[Z]),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:Q,modelsCount:f.length}}async function H7($,W){let Z=W.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=G8($),J=await n6(Q);if(!J.providers[Z])throw Error(`provider "${Z}" does not exist`);return delete J.providers[Z],await J7(Q,J),I0.unregisterProvider(Z),pD($,Z),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:Q}}function eX($,W,Z={}){let Q=W.trim();if(!Q)throw Error("providerId is required");let J=$.read().providers[Q]?.settings;return $.saveProviderSettings({...J??{},provider:Q},{setLastUsed:!1,tokenSource:Z.tokenSource}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function $Y($,W={}){let Z=$.read(),Q=I0.getProviderIds(),J=await Promise.all(Q.map(async(X)=>{let[Y,V]=await Promise.all([I0.getProvider(X),I0.getModelsForProvider(X)]),B=uD(V),H=Z.providers[X]?.settings,G=$.getProviderSettings(X),K=Y?.name??cD(X),F=Gg(Y?.capabilities,G?.capabilities),A=Ag(Y?.metadata)??Ug(Y);return{provider:{id:X,name:K,models:B.length,color:Vg(X),letter:Yg(K),enabled:Boolean(H),apiKey:G?jg(G):void 0,oauthAccessTokenPresent:G?Xg(G):void 0,baseUrl:G?.baseUrl??Y?.baseUrl,defaultModelId:Y?.defaultModelId,protocol:G?.protocol??Y?.protocol,client:G?.client??Y?.client,capabilities:F,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:A,configValues:_g(A,G,Y),modelList:B},rank:Kg(Y?.metadata)}}));J.sort((X,Y)=>{if(X.rank!==Y.rank)return X.rank-Y.rank;return X.provider.name.localeCompare(Y.provider.name)||X.provider.id.localeCompare(Y.provider.id)});let j=J.map((X)=>X.provider);if(W.isClinePassEnabled!==!0)j=j.filter((X)=>X.id!==vD);return{providers:j,settingsPath:$.getFilePath()}}async function WY($,W){let Z=$.trim(),Q=await Bg(Z,W),J=uD(Q);return{providerId:Z,models:J}}function V7($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function rD($,W){if(!V7(W))return V7($)?{...$}:void 0;let Z=V7($)?{...$}:{};for(let[Q,J]of Object.entries(W)){if(J==null||J===""){delete Z[Q];continue}if(V7(J)){let j=rD(Z[Q],J);if(j&&Object.keys(j).length>0)Z[Q]=j;else delete Z[Q];continue}Z[Q]=J}return Object.keys(Z).length>0?Z:void 0}function ZY($,W){let Z=W.providerId.trim();if(W.enabled===!1){let j=$.read();if(delete j.providers[Z],j.lastUsedProvider===Z)delete j.lastUsedProvider;return $.write(j),{providerId:Z,enabled:!1,settingsPath:$.getFilePath()}}let J={...$.getProviderSettings(Z)??{},provider:Z};for(let j of["apiKey","baseUrl","model","region"])if(Object.hasOwn(W,j)&&typeof W[j]==="string")if(W[j].trim().length===0)delete J[j];else J[j]=W[j];for(let j of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(W,j))J[j]=W[j];for(let j of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(W,j)&&W[j]!=null){let X=rD(J[j],W[j]);if(X)J[j]=X;else delete J[j]}return $.saveProviderSettings(J,{setLastUsed:!1}),{providerId:Z,enabled:!0,settingsPath:$.getFilePath()}}async function QY($,W){let Z=W.trim(),Q=$.getProviderSettings(Z),j=I0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z]?.provider,X=Q?.baseUrl?.trim()||j?.baseUrl?.trim(),Y=WZ(X,j?.baseUrl,j?.modelsSourceUrl);if(!Q||!j||!X||!Y)return{providerId:Z,refreshed:!1};let V=await B7($,{providerId:Z,name:j.name,baseUrl:X,apiKey:Q.apiKey,headers:Q.headers??null,timeoutMs:Q.timeout??null,modelsSourceUrl:Y,protocol:Q.protocol??j.protocol??null,client:Q.client??j.client??null,capabilities:Q.capabilities??null});return{providerId:Z,refreshed:!0,modelsCount:V.modelsCount}}function JY($){let W=$.trim().toLowerCase(),Z=G0(W);if(Z)return Z.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function jY($,W,Z,Q){let J=G0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let j=J6({onPrompt:async(X)=>X.defaultValue??"",openUrl:Z,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return J.login({settings:W,callbacks:j,telemetry:Q})}function XY($,W,Z,Q,J){return J2({manager:$,providerId:W,settings:Z,credentials:Q,setLastUsed:J?.setLastUsed})}async function YY($,W,Z,Q){let J=J6({onPrompt:async(j)=>j.defaultValue??"",openUrl:Z,onOpenUrlError:({error:j})=>{throw j instanceof Error?j:Error(String(j))}});return Y4($,W,{callbacks:J,telemetry:Q})}function VY($){let W=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return W&&W.length>0?W:void 0}var nD={};E(nD,{getProviderConfigFields:()=>BY});import*as G7 from"@cline/llms";var Lg=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],Og={"openai-compatible":{description:"For Azure AI Foundry deployments, use a Base URL ending at /openai/deployments/<deployment> and set the Azure API version.",fields:{azureApiVersion:{label:"Azure API Version (optional)",placeholder:"2025-01-01-preview",note:"Required for Azure AI Foundry deployment URLs.",optional:!0}}},vertex:{mode:"replace",description:"Vertex AI can use Google Cloud Application Default Credentials with a project/region. An API key is optional for supported Gemini models.",fields:{gcpProjectId:{label:"Google Cloud Project ID",placeholder:"my-gcp-project"},gcpRegion:{label:"Google Cloud Region",placeholder:"us-central1",defaultValue:"us-central1"},apiKey:{label:"API Key (optional)",placeholder:"Leave blank to use Google Cloud credentials",optional:!0}}},bedrock:{mode:"replace",description:"AWS region is required for Bedrock. It can be auto-filled from AWS_REGION, AWS_DEFAULT_REGION, or ~/.aws/config.",fields:{awsRegion:{label:"AWS Region",placeholder:"us-east-1"},apiKey:{label:"AWS Bedrock API Key (optional)",placeholder:"Leave blank to use AWS profile/default chain",optional:!0},awsProfile:{label:"AWS Profile Name (optional)",placeholder:"default",optional:!0}}},ollama:{fields:{apiKey:{note:"Keep empty if no API key for local inference."}}},sapaicore:{mode:"replace",description:"SAP AI Core uses OAuth client credentials and an AI Core API URL, not a generic API key.",fields:{baseUrl:{label:"AI Core Base URL",placeholder:"https://api.ai.<region>.aws.ml.hana.ondemand.com"},sapClientId:{label:"Client ID",placeholder:"sb-...|xsuaa_std!b..."},sapClientSecret:{label:"Client Secret",placeholder:"SAP AI Core client secret"},sapTokenUrl:{label:"Token URL",placeholder:"https://<subdomain>.authentication.sap.hana.ondemand.com"},sapResourceGroup:{label:"Resource Group",placeholder:"default",optional:!0},sapDeploymentId:{label:"Deployment ID",placeholder:"SAP AI Core deployment id",optional:!0}}}};function Tg($,W){let Z={};for(let Q of Lg){let J=$[Q],j=W[Q];if(J||j)Z[Q]={...J,...j}}return Z}function zg($){let W=Og[$.providerId];if(!W)return $;return{...$,description:W.description??$.description,fields:W.mode==="replace"?W.fields:Tg($.fields,W.fields)}}var qg=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function Mg($,W){if(!W?.provider.baseUrl)return!1;if(W.provider.source!=="system")return!0;return qg.has($)}function BY($){let W=G7.normalizeProviderId($);if(Q2(W))return{providerId:W,authMethod:"oauth",fields:{}};let Z=G7.MODEL_COLLECTIONS_BY_PROVIDER_ID[W];if(Z?.provider.capabilities?.includes("local-auth"))return{providerId:W,authMethod:"local",fields:{}};let Q=Z?.provider.baseUrl,J={apiKey:{}};if(Mg(W,Z))J.baseUrl={defaultValue:Q};return zg({providerId:W,authMethod:"api-key",fields:J})}var tD={};E(tD,{resolveLegacyClineAuth:()=>KY,migrateLegacyProviderSettings:()=>SW});import{existsSync as Rg,readFileSync as Ng}from"node:fs";import{dirname as Eg,join as HY}from"node:path";import*as a6 from"@cline/llms";import{resolveClineDataDir as wg}from"@cline/shared/storage";var K7="openai",sD=a6.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,aD=128000;function KY($){let W=$?.trim();if(!W)return;try{let Z=JSON.parse(W);if(!Z)return;let Q=typeof Z.expiresAt==="number"&&Number.isFinite(Z.expiresAt)?Z.expiresAt<10000000000?Z.expiresAt*1000:Z.expiresAt:void 0;return{accessToken:Z.idToken,refreshToken:Z.refreshToken,expiresAt:Q,accountId:Z.userInfo?.id}}catch{return}}function b($){let W=$?.trim();return W?W:void 0}function Cg($){return $==="credentials"?"iam":$}function oD($){if(!Rg($))return;try{let W=Ng($,"utf8"),Z=JSON.parse(W);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function Pg($){let W=$.dataDir??wg(),Z=$.globalStatePath??HY(W,"globalState.json"),Q=$.secretsPath??HY(W,"secrets.json"),J=oD(Z),j=oD(Q);if(!J&&!j)return;return{globalState:J??{},secrets:j??{}}}function GY($){if($===K7)return sD;return $}function Sg($,W,Z,Q){let J=Z==="plan"?"planMode":"actMode",j=W===Q?b(Z==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,Y={openrouter:`${J}OpenRouterModelId`,cline:`${J}ClineModelId`,openai:`${J}OpenAiModelId`,ollama:`${J}OllamaModelId`,lmstudio:`${J}LmStudioModelId`,litellm:`${J}LiteLlmModelId`,requesty:`${J}RequestyModelId`,together:`${J}TogetherModelId`,fireworks:`${J}FireworksModelId`,sapaicore:`${J}SapAiCoreModelId`,groq:`${J}GroqModelId`,baseten:`${J}BasetenModelId`,huggingface:`${J}HuggingFaceModelId`,"huawei-cloud-maas":`${J}HuaweiCloudMaasModelId`,oca:`${J}OcaModelId`,aihubmix:`${J}AihubmixModelId`,hicap:`${J}HicapModelId`,nousResearch:`${J}NousResearchModelId`,"vercel-ai-gateway":`${J}VercelAiGatewayModelId`}[W];return(Y?b(typeof $[Y]==="string"?$[Y]:void 0):void 0)??j}function bg($,W,Z){let Q=Z==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,J=[...W==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...W==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(b).find(Boolean),j=J==="none"||J==="low"||J==="medium"||J==="high"||J==="xhigh"?J:void 0,X=typeof Q==="number"&&Number.isInteger(Q)&&Q>0?Q:void 0;if(!j&&X===void 0)return;return{...j?{effort:j}:{},...X!==void 0?{budgetTokens:X}:{}}}function yg($){let W=$["openai-codex-oauth-credentials"];if(!W)return;try{let Z=JSON.parse(W),Q=b(Z.access_token),J=b(Z.refresh_token),j=b(Z.accountId);if(!Q&&!J&&!j)return;return{...Q?{apiKey:Q}:{},auth:{...Q?{accessToken:Q}:{},...J?{refreshToken:J}:{},...j?{accountId:j}:{}}}}catch{return}}function hg($){let W=a6.getGeneratedModelsForProvider($),Q=a6.getProviderCollectionSync($)?.provider.defaultModelId;if(Q&&W[Q])return Q;return Object.keys(W)[0]??void 0}function kg($,W,Z,Q){let J=GY($),j=b(Q==="plan"?W.planModeApiProvider:W.actModeApiProvider),X=Sg(W,$,Q,j)??hg(J),Y=bg(W,J,Q),V=typeof W.requestTimeoutMs==="number"&&Number.isInteger(W.requestTimeoutMs)&&W.requestTimeoutMs>0?W.requestTimeoutMs:void 0,B={anthropic:Z.apiKey,cline:Z.clineApiKey,openai:Z.openAiApiKey,"openai-native":Z.openAiNativeApiKey,openrouter:Z.openRouterApiKey,bedrock:Z.awsBedrockApiKey,gemini:Z.geminiApiKey,ollama:Z.ollamaApiKey,deepseek:Z.deepSeekApiKey,requesty:Z.requestyApiKey,together:Z.togetherApiKey,fireworks:Z.fireworksApiKey,qwen:Z.qwenApiKey,doubao:Z.doubaoApiKey,mistral:Z.mistralApiKey,litellm:Z.liteLlmApiKey,asksage:Z.asksageApiKey,xai:Z.xaiApiKey,moonshot:Z.moonshotApiKey,zai:Z.zaiApiKey,huggingface:Z.huggingFaceApiKey,nebius:Z.nebiusApiKey,sambanova:Z.sambanovaApiKey,cerebras:Z.cerebrasApiKey,groq:Z.groqApiKey,"huawei-cloud-maas":Z.huaweiCloudMaasApiKey,baseten:Z.basetenApiKey,"vercel-ai-gateway":Z.vercelAiGatewayApiKey,dify:Z.difyApiKey,minimax:Z.minimaxApiKey,hicap:Z.hicapApiKey,aihubmix:Z.aihubmixApiKey,nousResearch:Z.nousResearchApiKey,oca:Z.ocaApiKey},H={};if($==="openai-codex")Object.assign(H,yg(Z));if($==="cline")try{let _=b(Z["cline:clineAccountId"]);if(_)H.auth={...H.auth??{},...KY(_)}}catch{}if($===K7&&W.openAiHeaders)H.headers=W.openAiHeaders;if($==="bedrock"){let _=Cg(W.awsAuthentication),D=_==="profile"||W.awsUseProfile===!0;H.aws={accessKey:b(Z.awsAccessKey),secretKey:b(Z.awsSecretKey),sessionToken:b(Z.awsSessionToken),region:b(W.awsRegion),authentication:_,profile:D?b(W.awsProfile):void 0,usePromptCache:W.awsBedrockUsePromptCache,useCrossRegionInference:W.awsUseCrossRegionInference,useGlobalInference:W.awsUseGlobalInference,endpoint:b(W.awsBedrockEndpoint),customModelBaseId:b(Q==="plan"?W.planModeAwsBedrockCustomModelBaseId:W.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")H.gcp={projectId:b(W.vertexProjectId),region:b(W.vertexRegion)};if($===K7&&(W.azureApiVersion||W.azureIdentity!==void 0))H.azure={apiVersion:b(W.azureApiVersion),useIdentity:W.azureIdentity};if($==="sapaicore"){let _=W.sapAiCoreUseOrchestrationMode??!0;H.sap={clientId:b(Z.sapAiCoreClientId),clientSecret:b(Z.sapAiCoreClientSecret),tokenUrl:b(W.sapAiCoreTokenUrl),resourceGroup:b(W.sapAiResourceGroup),deploymentId:_?void 0:b(Q==="plan"?W.planModeSapAiCoreDeploymentId:W.actModeSapAiCoreDeploymentId),useOrchestrationMode:_}}if($==="oca"){H.oca={mode:W.ocaMode};let _=b(Z.ocaRefreshToken);if(_)H.auth={...H.auth??{},refreshToken:_}}if($==="qwen")H.apiLine=W.qwenApiLine;if($==="moonshot")H.apiLine=W.moonshotApiLine;if($==="zai")H.apiLine=W.zaiApiLine;if($==="minimax")H.apiLine=W.minimaxApiLine;let G={anthropic:W.anthropicBaseUrl,openai:W.openAiBaseUrl,ollama:W.ollamaBaseUrl,lmstudio:W.lmStudioBaseUrl,litellm:W.liteLlmBaseUrl,gemini:W.geminiBaseUrl,requesty:W.requestyBaseUrl,asksage:W.asksageApiUrl,dify:W.difyBaseUrl,oca:W.ocaBaseUrl,aihubmix:W.aihubmixBaseUrl,sapaicore:W.sapAiCoreBaseUrl},K=b(B[$]),F=b(G[$]),A={provider:J,...K?{apiKey:K}:{},...X?{model:X}:{},...F?{baseUrl:F}:{},...Y?{reasoning:Y}:{},...V?{timeout:V}:{},...H},f=$6.safeParse(A);if(!f.success)return;return Object.keys(A).filter((_)=>_!=="provider").length>0?f.data:void 0}function Ig($,W){if($!==sD)return;if(!W.baseUrl||!W.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:W.baseUrl,defaultModelId:W.model},models:{[W.model]:{id:W.model,name:W.model,contextWindow:aD,maxInputTokens:aD,capabilities:["streaming","tools","images"]}}}}function xg($,W){let Z=new Set;for(let J of[$.actModeApiProvider,$.planModeApiProvider]){let j=b(J);if(j)Z.add(j)}if(b(W.apiKey))Z.add("anthropic");if(b(W.openRouterApiKey))Z.add("openrouter");if(b(W.openAiApiKey))Z.add(K7);if(b(W.openAiNativeApiKey))Z.add("openai-native");if(b(W["openai-codex-oauth-credentials"]))Z.add("openai-codex");if(b(W.geminiApiKey))Z.add("gemini");if(b(W.ollamaApiKey))Z.add("ollama");if(b(W.awsAccessKey)||b(W.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||b($.awsProfile))Z.add("bedrock");if(b($.vertexProjectId)||b($.vertexRegion))Z.add("vertex");if(b(W.clineApiKey))Z.add("cline");let Q=KY(b(W["cline:clineAccountId"]));if(Q?.accessToken||Q?.refreshToken||Q?.accountId)Z.add("cline");if(b(W.ocaApiKey))Z.add("oca");if(b(W.sapAiCoreClientId)||b(W.sapAiCoreClientSecret)||b($.sapAiCoreTokenUrl)||b($.sapAiCoreBaseUrl)||b($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Z.add("sapaicore");return Z}function SW($){let W=$.providerSettingsManager.read(),Z=Pg($);if(!Z)return{migrated:!1,providerCount:Object.keys(W.providers).length,lastUsedProvider:W.lastUsedProvider};let{globalState:Q,secrets:J}=Z,j=Q.mode==="plan"?"plan":"act",X=xg(Q,J),Y=k$();Y.providers={...W.providers},Y.lastUsedProvider=W.lastUsedProvider;let V=new Date().toISOString(),B=0,H=HY(Eg($.providerSettingsManager.getFilePath()),"models.json"),G=aX(H),K=0;for(let f of X){let U=GY(f);if(Y.providers[U])continue;let _=kg(f,Q,J,j);if(!_)continue;Y.providers[U]={settings:_,updatedAt:V,tokenSource:"migration"},B+=1;let D=Ig(U,_);if(D&&!G.providers[U])G.providers[U]=D,K+=1}if(B===0&&K===0)return{migrated:!1,providerCount:Object.keys(W.providers).length,lastUsedProvider:W.lastUsedProvider};let F=b(j==="plan"?Q.planModeApiProvider:Q.actModeApiProvider),A=F?GY(F):void 0;if(Y.lastUsedProvider=W.lastUsedProvider??(A&&Y.providers[A]?A:Object.keys(Y.providers)[0]),$.providerSettingsManager.write(Y),K>0)SD(H,G);return{migrated:B>0||K>0,providerCount:Object.keys(Y.providers).length,lastUsedProvider:Y.lastUsedProvider}}PQ();O0();FW();var eD={};E(eD,{FileTeamPersistenceStore:()=>F7});import{appendFileSync as gg,existsSync as FY,mkdirSync as mg,readFileSync as vg,renameSync as cg,unlinkSync as ug,writeFileSync as dg}from"node:fs";import{join as AY}from"node:path";import{resolveTeamDataDir as lg}from"@cline/shared/storage";function pg($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class F7{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let W=pg($.teamName),Z=$.baseDir?.trim()||lg();this.dirPath=AY(Z,W),this.statePath=AY(this.dirPath,"state.json"),this.taskHistoryPath=AY(this.dirPath,"task-history.jsonl")}loadState(){if(!FY(this.statePath))return;try{let $=vg(this.statePath,"utf8"),W=JSON.parse($);if(W.version!==1||!W.teamState)return;for(let Z of W.teammates??[])this.teammateSpecs.set(Z.agentId,Z);return JU(W.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec($){this.teammateSpecs.set($.agentId,$)}removeTeammateSpec($){this.teammateSpecs.delete($)}persist($){if(!this.hasPersistableState($)){this.clearPersistedState();return}this.ensureDir();let W={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Z=`${this.statePath}.tmp`;dg(Z,`${JSON.stringify(W,null,2)}
757
- `,"utf8"),cg(Z,this.statePath)}appendTaskHistory($){let W={};switch($.type){case"team_task_updated":W=$.task;break;case"team_message":W={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":W={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":W={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":W={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":W={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),gg(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:W})}
758
- `,"utf8")}ensureDir(){if(!FY(this.dirPath))mg(this.dirPath,{recursive:!0})}hasPersistableState($){let W=$.exportState();if(this.teammateSpecs.size>0)return!0;if(W.members.some((Z)=>Z.role==="teammate"))return!0;return W.tasks.length>0||W.mailbox.length>0||W.missionLog.length>0}clearPersistedState(){if(FY(this.statePath))ug(this.statePath)}}var $_={};E($_,{ChatViewStateSchema:()=>UY,ChatSummarySchema:()=>_7,ChatSessionStatusSchema:()=>U7,ChatSessionConfigSchema:()=>A7,ChatMessageSchema:()=>D7,ChatMessageRoleSchema:()=>f7});import{z as k}from"zod";var A7=k.object({workspaceRoot:k.string().min(1),cwd:k.string().optional(),provider:k.string().min(1),model:k.string().min(1),mode:k.enum(["act","plan"]).default("act"),apiKey:k.string(),systemPrompt:k.string().optional(),rules:k.string().optional(),maxIterations:k.number().int().positive().optional(),enableTools:k.boolean(),enableSpawn:k.boolean().optional(),enableTeams:k.boolean().optional(),autoApproveTools:k.boolean().optional(),missionStepInterval:k.number().int().positive().optional(),missionTimeIntervalMs:k.number().int().positive().optional()}),U7=k.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),f7=k.enum(["user","assistant","tool","system","status","error"]),D7=k.object({id:k.string().min(1),sessionId:k.string().nullable(),role:f7,content:k.string(),createdAt:k.number().int().nonnegative(),meta:k.object({stream:k.enum(["stdout","stderr"]).optional(),toolName:k.string().optional(),iteration:k.number().int().nonnegative().optional(),agentId:k.string().optional(),conversationId:k.string().optional(),hookEventName:k.string().optional(),inputTokens:k.number().int().nonnegative().optional(),outputTokens:k.number().int().nonnegative().optional(),checkpoint:k.object({ref:k.string(),createdAt:k.number().int().nonnegative(),runCount:k.number().int().positive(),kind:k.enum(["stash","commit"]).optional()}).optional()}).optional()}),_7=k.object({toolCalls:k.number().int().nonnegative(),tokensIn:k.number().int().nonnegative(),tokensOut:k.number().int().nonnegative()}),UY=k.object({sessionId:k.string().nullable(),status:U7,config:A7,messages:k.array(D7),rawTranscript:k.string(),error:k.string().nullable(),summary:_7});var W_={};E(W_,{CORE_BUILD_VERSION:()=>bW});var bW=c8;import{Agent as um,createAgentRuntime as dm}from"@cline/agents";var Z_={};E(Z_,{fetchClineRecommendedModels:()=>DY,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>L7});import{getClineEnvironmentConfig as rg}from"@cline/shared";var ig=5000,L7={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}],clinePass:[]};function ng($){return{recommended:$.recommended.map((W)=>({...W,tags:[...W.tags]})),free:$.free.map((W)=>({...W,tags:[...W.tags]})),clinePass:$.clinePass.map((W)=>({...W,tags:[...W.tags]}))}}function fY($){if(!$||typeof $!=="object")return null;let W=$;if(typeof W.id!=="string"||W.id.length===0)return null;return{id:W.id,name:typeof W.name==="string"&&W.name.length>0?W.name:W.id,description:typeof W.description==="string"?W.description:"",tags:Array.isArray(W.tags)?W.tags.filter((Z)=>typeof Z==="string"):[]}}function ag($){if(!$||typeof $!=="object")return null;let W=$,Z=Array.isArray(W.recommended)?W.recommended:[],Q=Array.isArray(W.free)?W.free:[],J=Array.isArray(W.clinePass)?W.clinePass:[],j=Z.map(fY).filter((V)=>V!==null),X=Q.map(fY).filter((V)=>V!==null),Y=J.map(fY).filter((V)=>V!==null);if(j.length===0&&X.length===0&&Y.length===0)return null;return{recommended:j,free:X,clinePass:Y}}function og($){let W=$.baseUrl?.trim();if(W)return W;let Z=rg().apiBaseUrl;try{return($.providerSettingsManager??new Y1).getProviderSettings("cline")?.baseUrl?.trim()||Z}catch{return Z}}async function sg($,W,Z){let Q=new AbortController,J=setTimeout(()=>Q.abort(),Z);try{return await $(W,{signal:Q.signal})}finally{clearTimeout(J)}}async function DY($={}){try{let W=og($),Z=$.fetchImpl??fetch,Q=await sg(Z,`${W}/api/v1/ai/cline/recommended-models`,$.timeoutMs??ig);if(!Q.ok)throw Error(`HTTP ${Q.status}`);let J=await Q.json(),j=ag(J);if(j)return j}catch{}return ng(L7)}var Q_={};E(Q_,{loadLlmsConfigFromFile:()=>LY,defineLlmsConfig:()=>_Y});import{readFile as tg}from"node:fs/promises";import eg from"node:path";function _Y($){return $}async function LY($){let W=eg.resolve($),Z=await tg(W,"utf8"),Q;try{Q=JSON.parse(Z)}catch(J){let j=J instanceof Error?J.message:String(J);throw Error(`Failed to parse JSON config at "${W}": ${j}`)}return $m(Q,W)}function $m($,W){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${W}": expected an object.`);let Q=$.providers;if(!Array.isArray(Q))throw Error(`Invalid llms config in "${W}": "providers" must be an array.`);if(!Q.length)throw Error(`Invalid llms config in "${W}": "providers" cannot be empty.`);return $}var B_={};E(B_,{createLlmsSdk:()=>TY,DefaultLlmsSdk:()=>yW});import{BUILT_IN_PROVIDER_IDS as X_,createHandler as Qm,createHandlerAsync as Jm,getProviderCollection as jm,hasProvider as Y_,registerAsyncHandler as Xm,registerHandler as Ym,registerModel as Vm,registerProvider as V_}from"@cline/llms";function J_($){return $?{...$}:{}}function Wm($,W){if($)return $;if(!W)return;let Z=globalThis.process;if(!Z?.env)return;return Z.env[W]}function Zm($,W){if(!W.length)throw Error(`Provider "${$}" must include at least one model.`)}function j_($){let W=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:W,defaultModel:$.collection.provider.defaultModelId,modelCount:W.length}}class OY{providers=new Map;register($){Zm($.id,$.models);let W=$.defaultModel??$.models[0];if(!W)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(W))throw Error(`Default model "${W}" is not included in configured models for "${$.id}".`);let Z=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Z?.models??[],...$.models]),defaultModel:W,defaults:{...Z?.defaults??{},...J_($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:Wm($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...J_($.settings)}})}registerModel($,W){let Z=this.providers.get($);if(!Z){this.providers.set($,{id:$,models:new Set([W]),defaultModel:W,defaults:{}});return}Z.models.add(W)}createHandlerConfig($){let W=this.require($.providerId),Z=$.modelId??W.defaultModel;if(!W.models.has(Z))throw Error(`Model "${Z}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Z,...W.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,W){return this.providers.get($)?.models.has(W)??!1}require($){let W=this.providers.get($);if(!W)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return W}}class yW{configuredProviders=new OY;constructor($){this.applyConfig($)}createHandler($){return Qm(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return Jm(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(V_($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)Ym($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)Xm($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let W=$.exposeModels??Object.keys($.models),Z=$.defaultModel??W[0];if(!Z)throw Error(`Provider "${$.id}" must define a default model.`);V_({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Z,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:W,defaultModel:Z,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){Vm($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...X_]}async getBuiltInProviders(){return(await Promise.all(X_.map((W)=>jm(W)))).filter((W)=>W!==void 0).map((W)=>j_({collection:W}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,W){return this.configuredProviders.hasModel($,W)}applyConfig($){for(let W of $.providers)this.configuredProviders.registerSelectionConfig(W);for(let W of $.models??[])this.registerModel(W);for(let W of $.customProviders??[])this.registerProvider(W);for(let W of this.configuredProviders.list()){let Z=Y_(W.id),Q=this.configuredProviders.createHandlerConfig({providerId:W.id,modelId:W.defaultModel}).routingProviderId,J=typeof Q==="string"&&Y_(Q);if(!Z&&!J)throw Error(`Provider "${W.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function TY($){return new yW($)}dj();async function Bm(){return Promise.resolve().then(() => (PQ(),cf))}function om(){return new Date().toISOString()}var sm="cline",tm="cline-pass";function em($){if(F_($)!=="providers.json")return;let W=qY($);if(F_(W)!=="settings")return;return qY(W)}class Y1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??am(),this.dataDir=$.dataDir??em(this.filePath),this.dataDir||!$.filePath)SW({providerSettingsManager:this,dataDir:this.dataDir});if(gD(this),j7(this.read()),zY(this.filePath))try{K_(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!zY(this.filePath))return k$();try{let $=pm(this.filePath,"utf8"),W=JSON.parse($),Z=W6.safeParse(W);if(Z.success){j7(Z.data);let Q=Z.data.providers.cline?.settings?.auth;return Z0(`providers.read providers=[${Object.keys(Z.data.providers).join(",")}] lastUsed=${Z.data.lastUsedProvider??"none"} clineAuthPresent=${!!Q?.accessToken} clineAccessTokenHash=${M0(Q?.accessToken)} clineRefreshTokenHash=${M0(Q?.refreshToken)}`),Z.data}}catch{}return k$()}write($){let W=W6.parse($),Z=qY(this.filePath);if(!zY(Z))lm(Z,{recursive:!0,mode:448});let Q=`${this.filePath}.${process.pid}.tmp`;try{nm(Q,`${JSON.stringify(W,null,2)}
759
- `,{encoding:"utf8",mode:384}),rm(Q,this.filePath)}catch(J){throw im(Q,{force:!0}),J}try{K_(this.filePath,384)}catch{}j7(W)}saveProviderSettings($,W={}){let Z=$6.parse($),Q=this.read(),J=Z.provider,j=W.setLastUsed!==!1,X=Q.providers[J],Y=W.tokenSource??X?.tokenSource??"manual",V={...Q,providers:{...Q.providers,[J]:{settings:Z,updatedAt:om(),tokenSource:Y}},lastUsedProvider:j?J:Q.lastUsedProvider};this.write(V);let B=Q.providers.cline?.settings?.auth,H=Z.provider==="cline"?Z.auth:V.providers.cline?.settings?.auth,G=!!B?.accessToken&&!H?.accessToken;return Z0(`providers.save providerId=${J} tokenSource=${Y} clineAuthWasPresent=${!!B?.accessToken} clineAuthIsPresent=${!!H?.accessToken} authDropped=${G}`),V}resolveProviderSettings($,W){let Z=$.providers[W]?.settings,J=G0(W)?.storageProviderId;if(!J||J===W)return Z;let j=$.providers[J]?.settings;if(!j)return Z;return $6.parse({...j.auth?{auth:j.auth}:{},...j.apiKey?{apiKey:j.apiKey}:{},...j.baseUrl?{baseUrl:j.baseUrl}:{},...Z??{},provider:W})}getProviderSettings($){let W=this.read();return this.resolveProviderSettings(W,$)}resolveLastUsedProviderId($,W){let Z=$.lastUsedProvider;if(Z===tm&&W.isClinePassEnabled===!1)return sm;return Z}getLastUsedProviderSettings($={}){let W=this.read(),Z=this.resolveLastUsedProviderId(W,$);if(!Z)return;return this.resolveProviderSettings(W,Z)}getProviderConfig($,W){let Z=this.getProviderSettings($);if(!Z)return;return t0(Z,W)}getLastUsedProviderConfig($={}){let W=this.getLastUsedProviderSettings($);if(!W)return;return t0(W,$)}async refreshCatalog(){try{await t8({})}catch{}}}O0();T6();function $v($,W){let Z=$?.expiresAt,Q=W?.expiresAt;return $?.accessToken===W?.accessToken&&$?.refreshToken===W?.refreshToken&&$?.accountId===W?.accountId&&Z===Q}class O7 extends Error{providerId;constructor($){super(`OAuth credentials for provider "${$}" are no longer valid. Re-run authentication for this provider.`);this.name="OAuthReauthRequiredError",this.providerId=$}}class MY{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new Y1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let W=G0($.providerId);if(!W)return null;return this.resolveWithSingleFlight(W.providerId,W.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,W,Z=!1){let Q=this.refreshInFlight.get(W);if(Q)return Q;let J=this.resolveProviderApiKeyInternal($,W,Z).catch((j)=>{throw j}).finally(()=>{this.refreshInFlight.delete(W)});return this.refreshInFlight.set(W,J),J}async resolveProviderApiKeyInternal($,W,Z){let Q=G0($);if(!Q)return null;let J=this.providerSettingsManager.getProviderSettings(W);if(!J)return Z0(`oauth.resolve providerId=${$} storageProviderId=${W} outcome=no_settings`),null;let j=V4($,J);if(!j)return Z0(`oauth.resolve providerId=${$} storageProviderId=${W} outcome=no_credentials`),null;Z0(`oauth.resolve.start providerId=${$} storageProviderId=${W} forceRefresh=${Z} accessTokenHash=${M0(j.access)} refreshTokenHash=${M0(j.refresh)}`);let X=await Q.refresh({settings:J,credentials:j,forceRefresh:Z,telemetry:this.telemetry});if(!X)throw Z0(`oauth.resolve providerId=${$} outcome=refresh_returned_null`),new O7($);let Y=J2({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:X,setLastUsed:!1,save:!1}),V=!$v(J.auth,Y.auth);if(V)Z0(`oauth.resolve.refreshed providerId=${$} newAccessTokenHash=${M0(X.access)} newRefreshTokenHash=${M0(X.refresh)} savingToDisk=true`),this.providerSettingsManager.saveProviderSettings(Y,{setLastUsed:!1,tokenSource:"oauth"});else Z0(`oauth.resolve providerId=${$} outcome=not_refreshed`);return{apiKey:Q.getApiKey(Y)??X.access,accountId:X.accountId,refreshed:V}}}import{normalizeUserInput as Wv}from"@cline/shared";import{nanoid as Zv}from"nanoid";class A_{list($){return $?V1($):[]}update($,W){if(!$)return{sessionId:W.sessionId,prompts:[],updated:!1};let Z=W.promptId.trim(),Q=$.pendingPrompts.findIndex((V)=>V.id===Z);if(Q<0)return{sessionId:W.sessionId,prompts:V1($),updated:!1};let J=$.pendingPrompts[Q];if(!J)return{sessionId:W.sessionId,prompts:V1($),updated:!1};let j=W.prompt===void 0?J.prompt:Wv(W.prompt).trim();if(!j)throw Error("prompt cannot be empty");let X=W.delivery??J.delivery,Y={...J,prompt:j,mode:W.mode??J.mode,delivery:X};return $.pendingPrompts.splice(Q,1),Qv($,Y,Q,J.delivery),{sessionId:W.sessionId,prompts:V1($),prompt:T7(Y),updated:!0}}delete($,W){if(!$)return{sessionId:W.sessionId,prompts:[],removed:!1};let Z=W.promptId.trim(),Q=$.pendingPrompts.findIndex((j)=>j.id===Z);if(Q<0)return{sessionId:W.sessionId,prompts:V1($),removed:!1};let[J]=$.pendingPrompts.splice(Q,1);return{sessionId:W.sessionId,prompts:V1($),prompt:J?T7(J):void 0,removed:!0}}enqueue($,W){let{prompt:Z,mode:Q,delivery:J,userImages:j,userFiles:X}=W,Y=$.pendingPrompts.findIndex((V)=>V.prompt===Z);if(Y>=0){let[V]=$.pendingPrompts.splice(Y,1),B={...V,prompt:Z,mode:Q??V.mode,userImages:j??V.userImages,userFiles:X??V.userFiles};if(J==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...B,delivery:"steer"});else $.pendingPrompts.push(B)}else{let V={id:`pending_${Date.now()}_${Zv(5)}`,prompt:Z,mode:Q,delivery:J,userImages:j,userFiles:X};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return V1($)}consumeSteer($){let W=$.pendingPrompts.findIndex((Q)=>Q.delivery==="steer");if(W<0)return{prompts:V1($)};let[Z]=$.pendingPrompts.splice(W,1);return{entry:Z,prompts:V1($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:V1($)}}requeueFront($,W){return $.pendingPrompts.unshift(W),V1($)}clear($){return $.pendingPrompts.length=0,[]}}class RY{deps;service=new A_;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let W=this.deps.getSession($.sessionId);if(!W||W.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Z=this.service.update(W,$);return this.emitPrompts(W),this.scheduleDrain($.sessionId,W),Z}delete($){let W=this.deps.getSession($.sessionId);if(!W||W.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Z=this.service.delete(W,$);return this.emitPrompts(W),this.scheduleDrain($.sessionId,W),Z}enqueue($,W){let Z=this.deps.getSession($);if(!Z||Z.aborting)return;this.service.enqueue(Z,W),this.emitPrompts(Z),this.scheduleDrain($,Z)}consumeSteer($){let W=this.deps.getSession($);if(!W)return;let{entry:Z}=this.service.consumeSteer(W);if(!Z)return;return this.emitPrompts(W),this.emitSubmitted(W,Z),Z}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:V1($)}})}scheduleDrain($,W){if(W.pendingPrompts.length===0||W.aborting||W.drainingPendingPrompts||!W.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let W=this.deps.getSession($);if(!W)return;if(W.aborting||W.drainingPendingPrompts)return;if(!W.agent.canStartRun())return;let{entry:Z}=this.service.shiftNext(W);if(!Z)return;this.emitPrompts(W),this.emitSubmitted(W,Z),W.drainingPendingPrompts=!0;let Q=!0;try{await this.deps.send({sessionId:$,prompt:Z.prompt,...Z.mode?{mode:Z.mode}:{},userImages:Z.userImages,userFiles:Z.userFiles})}catch{Q=!1,this.service.requeueFront(W,Z),this.emitPrompts(W)}finally{if(W.drainingPendingPrompts=!1,Q&&W.pendingPrompts.length>0&&W.status!=="failed"&&W.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,W){let Z=T7(W);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Z.id,prompt:Z.prompt,delivery:Z.delivery,attachmentCount:Z.attachmentCount,userImages:Z.userImages,userFiles:Z.userFiles}})}}function T7($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function V1($){return $.pendingPrompts.map(T7)}function Qv($,W,Z,Q){if(W.delivery==="steer")$.pendingPrompts.unshift(W);else if(Q==="steer")$.pendingPrompts.push(W);else $.pendingPrompts.splice(Z,0,W)}O0();class EY{deps;constructor($){this.deps=$}dispatchAgentEvent($,W,Z){let Q=this.deps.getSession($),J={sessionId:$,config:W,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},j=y3(Z),X=!!Q&&(!j.agentId||j.agentId===NY(Q.agent));h3(J,Z,X?{isPrimaryAgentEvent:!0,agentId:NY(Q.agent),conversationId:Q.agent.getConversationId(),...Q?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,W){let Z=this.deps.getSession($);if(Z){if(qj(Z,W),W.type==="agent_event"){let Q={sessionId:$,config:Z.config,liveSession:Z,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};h3(Q,W.event,{agentId:W.agentId,teamRole:"teammate",teamAgentId:W.agentId,isPrimaryAgentEvent:!1})}if(W.type==="teammate_spawned"){let Q=i1({agentId:W.teammate.runtimeAgentId??W.agentId,conversationId:W.teammate.conversationId,parentAgentId:W.teammate.parentAgentId,createdByAgentId:NY(Z.agent),teamId:Z.runtime.teamRuntime?.getTeamId(),teamName:Z.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:W.agentId});if(Q)U$(Z.config.telemetry,{ulid:$,modelId:W.teammate.modelId??Z.config.modelId,provider:Z.config.providerId,...Q})}}if(await Mj($,W,this.deps.invokeBackendOptional),Z)Rj(Z,$,W,this.deps.emit)}async handlePluginEvent($,W,Z){if(W.name==="plugin_log"){this.handlePluginLog($,W.payload);return}if(W.name==="automation_event"){let V=this.deps.getSession($)?.config.extensionContext?.automation??Z;if(!V)return;let B=W.payload&&typeof W.payload==="object"?W.payload:void 0;if(!B)return;await V.ingestEvent(B);return}if(W.name!=="steer_message"&&W.name!=="queue_message"&&W.name!=="pending_prompt")return;let Q=W.payload&&typeof W.payload==="object"?W.payload:void 0,J=typeof Q?.sessionId==="string"&&Q.sessionId.trim().length>0?Q.sessionId.trim():$,j=typeof Q?.prompt==="string"?Q.prompt.trim():"";if(!j)return;let X=W.name==="steer_message"?"steer":W.name==="queue_message"?"queue":Q?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(J,{prompt:j,delivery:X})}handlePluginLog($,W,Z){let Q=this.deps.getSession($),J=Z??Q?.config.extensionContext?.logger??Q?.config.logger;if(!J||!W||typeof W!=="object")return;let j=W,X=typeof j.message==="string"?j.message:"";if(!X)return;let Y=j.metadata&&typeof j.metadata==="object"?{...j.metadata}:{};if(Y.sessionId??=$,typeof j.pluginName==="string"&&j.pluginName)Y.pluginName=j.pluginName;if(j.level==="debug"){J.debug(X,Y);return}if(j.level==="error"){if(J.error)J.error(X,Y);else J.log(X,{...Y,severity:"error"});return}J.log(X,Y)}}function NY($){return $.getAgentId()}function wY($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:C$($.config),teamName:$.config.teamName?.trim()||void 0,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,parentSessionId:typeof $.sessionMetadata?.parentSessionId==="string"?$.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof $.sessionMetadata?.parentAgentId==="string"?$.sessionMetadata.parentAgentId:void 0,agentId:typeof $.sessionMetadata?.agentId==="string"?$.sessionMetadata.agentId:void 0,conversationId:typeof $.sessionMetadata?.conversationId==="string"?$.sessionMetadata.conversationId:void 0,isSubagent:typeof $.sessionMetadata?.isSubagent==="boolean"?$.sessionMetadata.isSubagent:!1,prompt:$.pendingPrompt,metadata:$.sessionMetadata,messagesPath:$.artifacts?.messagesPath,updatedAt:$.updatedAt??$.endedAt??$.startedAt}}function CY($,W){let Z=$[W];return typeof Z==="function"?Z:null}async function U_($,W,...Z){let Q=CY($,W);if(!Q)throw Error(`session service method not available: ${W}`);return Promise.resolve(Q.apply($,Z))}async function f_($,W,...Z){let Q=CY($,W);if(!Q)return;await Promise.resolve(Q.apply($,Z))}async function D_($,W,...Z){let Q=CY($,W);if(!Q)return;return await Promise.resolve(Q.apply($,Z))}A1();O0();function PY($,W,Z){return{onSubAgentEvent:(Q)=>$.onAgentEvent(Z,W,Q),onSubAgentStart:(Q)=>{let J=$.getSession(Z)?.runtime.teamRuntime;$.subAgentStarts.set(Q.subAgentId,{startedAt:Date.now(),rootSessionId:Z});let j=i1({agentId:Q.subAgentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:Q.parentAgentId});if(j)U$(W.telemetry,{ulid:Z,modelId:W.modelId,provider:W.providerId,...j});t6(W.telemetry,{event:"started",ulid:Z,durationMs:0,parentId:Q.parentAgentId,agentId:Q.subAgentId,...j}),$.invokeBackendOptional("handleSubAgentStart",Z,Q)},onSubAgentEnd:(Q)=>{let J=$.getSession(Z)?.runtime.teamRuntime,j=$.subAgentStarts.get(Q.subAgentId),X=j?Date.now()-j.startedAt:0,Y=Q.result?.text?Q.result.text.split(`
760
- `).length:0;t6(W.telemetry,{event:"ended",ulid:Z,durationMs:X,outputLines:Y,errorMessage:Q.error?String(Q.error):void 0,agentId:Q.subAgentId,parentId:Q.parentAgentId,...i1({agentId:Q.subAgentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:Q.parentAgentId})}),$.subAgentStarts.delete(Q.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Z,Q)}}}function SY($,W,Z,Q){let J=PY($,W,Z);return E$({configProvider:{getRuntimeConfig:()=>$.getSession(Z)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:W.providerId,modelId:W.modelId,cwd:W.cwd,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking,maxIterations:W.maxIterations,hooks:W.hooks,extensions:W.extensions,logger:W.logger,telemetry:W.telemetry},getConnectionConfig:()=>$.getSession(Z)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:W.providerId,modelId:W.modelId,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let X=W.enableTools?R2({cwd:W.cwd,...o0[l1({mode:W.mode})],executors:Q}):[];if(W.enableSpawnAgent)X.push(SY($,W,Z,Q));return p1(X)},...J})}import{readFile as Jv,stat as jv}from"node:fs/promises";var Xv=20480000;async function __($){let W=await jv($);if(!W.isFile())throw Error("Path is not a file");if(W.size>Xv)throw Error("File is too large to read into context.");let Z=await Jv($,"utf8");if(Z.includes("\x00"))throw Error("Cannot read binary file into context.");return Z}var L_=5000;function hW($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Av($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=$,Z=hW(W.inputTokens),Q=hW(W.outputTokens),J=hW(W.cacheReadTokens),j=hW(W.cacheWriteTokens),X=hW(W.totalCost);if(Z===void 0||Q===void 0||J===void 0||j===void 0||X===void 0)return;return{inputTokens:Z,outputTokens:Q,cacheReadTokens:J,cacheWriteTokens:j,totalCost:X}}function Uv($,W){return{inputTokens:Math.max($.inputTokens,W.inputTokens),outputTokens:Math.max($.outputTokens,W.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,W.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,W.cacheWriteTokens),totalCost:Math.max($.totalCost,W.totalCost)}}function O_($,W){if(!W)return!1;if($.source_message_count!==W.source_message_count)return $.source_message_count<W.source_message_count;return Date.parse($.updated_at)<Date.parse(W.updated_at)}class b1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new i5;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new o$;constructor($){let W=Vv();if(W)Fv(W);let Z=u0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new d6,this.createAgentInstance=$.createAgent??((Q)=>new M$(Q)),this.defaultCapabilities=w0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new Y1,this.oauthTokenManager=$.oauthTokenManager??new MY({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Z),this.defaultFetch=$.fetch,this.pendingPromptsController=new RY({getSession:(Q)=>this.sessions.get(Q),emit:(Q)=>this.emit(Q),send:(Q)=>this.runTurn(Q)}),this.pendingPrompts={list:async(Q)=>this.pendingPromptsController.list(Q.sessionId),update:async(Q)=>this.pendingPromptsController.update(Q),delete:async(Q)=>this.pendingPromptsController.delete(Q)},this.eventBridge=new EY({getSession:(Q)=>this.sessions.get(Q),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(Q)=>this.emit(Q),persistMessages:(Q,J,j)=>{this.invoke("persistSessionMessages",Q,J,j)},enqueuePendingPrompt:(Q,J)=>this.pendingPromptsController.enqueue(Q,J),invokeBackendOptional:(Q,...J)=>this.invokeOptional(Q,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let W=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!W?.apiKey)return $;return{...$,config:{...$.config,apiKey:W.apiKey}}}async startSession($){let W=$.source??A0.CLI,Z=X0(),Q=$.config.sessionId?.trim()??"",J=Q||Hv(),j=await this.applyInitialOAuthCredentials($),X=j.initialMessages??[],Y=X.length>0?v8(X):z0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let B=bY(V,J),H=bY(B,`${J}.messages.json`),G=bY(B,`${J}.json`),K=C$($.config),F=g0.parse({version:1,session_id:J,source:W,pid:process.pid,started_at:Z,status:"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:K,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:H}),A,f;if(Q.length>0&&X.length>0&&!j.prompt?.trim()){let I=await this.invokeOptionalValue("readSessionManifest",J);if(I)F=I,A={manifestPath:G,messagesPath:I.messages_path||H,compactionPath:I.compaction_path,manifest:I},f=await this.invokeOptionalValue("readSessionCompactionState",J)}let _=await this.seedAggregateUsageFromArtifacts({initialUsage:Y,sessionDir:B,rootMessagesPath:A?.messagesPath??H,manifest:F});this.usageBySession.set(J,Y),this.aggregateUsageBySession.set(J,_);let D=w0(this.defaultCapabilities,$.capabilities),M=D?.toolExecutors??this.toolExecutors,T=$.localRuntime,O=T?.extensionContext?.logger??T?.logger,L=T?.extensionContext?.automation,C,N={getSession:(I)=>this.sessions.get(I),subAgentStarts:this.subAgentStarts,onAgentEvent:(I,e,y0)=>this.eventBridge.dispatchAgentEvent(I,e,y0),invokeBackendOptional:(I,...e)=>this.invokeOptional(I,...e)};C=await XK({input:j,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:D,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(I)=>{if(I.name==="plugin_log"){this.eventBridge.handlePluginLog(J,I.payload,O);return}this.eventBridge.handlePluginEvent(J,I,L)},onTeamEvent:(I)=>{this.eventBridge.handleTeamEvent(J,I),C.config.onTeamEvent?.(I)},createSpawnTool:()=>SY(N,C.config,J,M),createSubAgentLifecycleCallbacks:(I)=>PY(N,I,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(I)=>{await this.persistSessionMetadata(J,()=>I)}});let y=await this.runtimeBuilder.build(C.runtimeBuilderInput),P=C.config,d=C.providerConfig;if(y.teamRuntime&&!P.teamName?.trim())P.teamName=y.teamRuntime.getTeamName();let n=[...y.tools,...P.extraTools??[]],o=y.extensions??C.extensions,G$=j.initialCompactionState,h1,x0=D4(P),$2=G$??f,V0=x0&&$2?{...$2,conversation_id:$2.conversation_id?.trim()||J}:void 0,K$=x0?_4({compact:x0,getState:()=>h1?.compactionState,saveState:async(I)=>{let e=h1;if(!e)return;let y0={...I,conversation_id:e.sessionId};try{if(!(await this.persistActiveSessionCompactionState(e,y0)).updated)P.logger?.debug?.("Skipped stale session compaction state",{sessionId:e.sessionId,sourceMessageCount:y0.source_message_count})}catch(B0){P.logger?.error?.("Failed to persist session compaction state",{sessionId:e.sessionId,error:B0}),e$(P.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:B0,context:{sessionId:e.sessionId,providerId:P.providerId,modelId:P.modelId}})}}}):void 0,L0={sessionId:J,providerId:d.providerId,modelId:d.modelId,apiKey:d.apiKey,baseUrl:d.baseUrl,headers:d.headers,knownModels:d.knownModels,providerConfig:d,thinking:P.thinking,reasoningEffort:P.reasoningEffort??d.reasoningEffort,thinkingBudgetTokens:P.thinkingBudgetTokens,maxTokensPerTurn:P.maxTokensPerTurn,systemPrompt:P.systemPrompt,maxIterations:P.maxIterations,execution:P.execution,prepareTurn:K$,tools:n,hooks:C.hooks,extensions:o,hookErrorMode:P.hookErrorMode,initialMessages:C.effectiveInput.initialMessages,userFileContentLoader:__,toolPolicies:C.toolPolicies,requestToolApproval:C.requestToolApproval?async(I)=>{let e=C.requestToolApproval,y0=this.sessions.get(J);if(y0)await this.markTurnPending(y0);try{if(!e)return{approved:!1,reason:"Tool approval callback is not configured."};return await e(I)}finally{let B0=this.sessions.get(J);if(B0?.status==="pending")await this.markTurnRunning(B0)}}:void 0,telemetry:P.telemetry,onConsecutiveMistakeLimitReached:P.onConsecutiveMistakeLimitReached,completionPolicy:y.completionPolicy,consumePendingUserMessage:()=>{let I=this.pendingPromptsController.consumeSteer(J);return I?jW(I.prompt,I.mode??P.mode):void 0},logger:y.logger??P.logger,extensionContext:P.extensionContext,onEvent:(I)=>this.eventBridge.dispatchAgentEvent(J,P,I)};L0.hooks={...L0.hooks,onEvent:async(I)=>{if(await C.hooks?.onEvent?.(I),I.type!=="assistant-message")return;let e=this.sessions.get(J);if(!e)return;let y0=e.agent.getMessages();try{await this.invoke("persistSessionMessages",J,y0,P.systemPrompt)}catch(B0){P.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:B0}),e$(P.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:B0,severity:"warn",handled:!0,context:{sessionId:J,providerId:P.providerId,modelId:P.modelId}})}}};let b0=this.createAgentInstance(L0);if(L0.onEvent)b0.subscribeEvents(L0.onEvent);y.registerLeadAgent?.(b0);let L1=i1({agentId:b0.getAgentId(),conversationId:b0.getConversationId(),teamId:y.teamRuntime?.getTeamId(),teamName:y.teamRuntime?.getTeamName(),teamRole:y.teamRuntime?"lead":void 0});if(VK(P,J,Q.length>0,K,L1),L1)U$(P.telemetry,{ulid:J,modelId:P.modelId,provider:P.providerId,...L1});if(y.teamRuntime)aW(P.telemetry,{ulid:J,teamId:y.teamRuntime.getTeamId(),teamName:y.teamRuntime.getTeamName(),leadAgentId:b0.getAgentId(),restoredFromPersistence:y.teamRestoredFromPersistence===!0});let g={sessionId:J,config:P,sessionMetadata:j.sessionMetadata,...A?{artifacts:A}:{},source:W,startedAt:A?.manifest.started_at??Z,updatedAt:A?.manifest.ended_at??A?.manifest.started_at??Z,pendingPrompt:F.prompt,runtime:y,agent:b0,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:X,compactionState:V0,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:C.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(h1=g,g.compactionState&&!this.isCompactionStateForSession(g.sessionId,g.compactionState,g))g.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:g.sessionId,conversationId:g.compactionState.conversation_id}),g.compactionState=void 0;if(this.sessions.set(J,g),this.emitStatus(J,"running"),X.length>0&&!A){if(await this.ensureSessionPersisted(g),await this.invoke("persistSessionMessages",g.sessionId,X,g.config.systemPrompt),g.compactionState){if(!(await this.persistActiveSessionCompactionState(g,g.compactionState)).updated)g.compactionState=void 0}if(!j.prompt?.trim())await this.updateStatus(g,"completed",0)}let q0;try{if(j.prompt?.trim())if(q0=await this.executeTurn(g,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!g.interactive)await this.finalizeSingleRun(g,q0.finishReason);else await this.completeInteractiveTurn(g,q0.finishReason)}catch(I){if(g.interactive&&g.aborting)q0=await this.completeAbortedInteractiveTurn(g);else{e$(g.config.telemetry,{component:"core",operation:"session.start",error:I,severity:"error",handled:!1,context:{sessionId:g.sessionId,providerId:g.config.providerId,modelId:g.config.modelId}});try{await this.failSession(g)}catch(e){g.config.logger?.error?.("Session failure cleanup threw",{sessionId:g.sessionId,error:e})}throw I}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:H,result:q0}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(W)=>this.getSession(W),readMessages:(W)=>this.readSessionMessages(W),buildStartInput:(W,Z)=>{let Q=W.restoredCheckpointMetadata?{...Z.sessionMetadata??{},checkpoint:W.restoredCheckpointMetadata}:Z.sessionMetadata;return{...Z,...Q?{sessionMetadata:Q}:{},initialMessages:W.initialMessages}},startSession:(W)=>this.startSession(W),getStartedSessionId:(W)=>W.sessionId,readRestoredSession:(W)=>this.getSession(W)})}async runTurn($){let W=this.getSessionOrThrow($.sessionId),Z=W.agent.canStartRun(),Q=$.delivery??(W.interactive&&!Z?"queue":void 0);if(W.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:Q??"immediate"}}),Q==="queue"||Q==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:Q,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(W,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!W.interactive)await this.finalizeSingleRun(W,J.finishReason);else await this.completeInteractiveTurn(W,J.finishReason);if(J.finishReason==="error"||J.finishReason==="aborted")return J;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),J}catch(J){if(W.interactive&&W.aborting)return await this.completeAbortedInteractiveTurn(W);throw e$(W.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:W.sessionId,providerId:W.config.providerId,modelId:W.config.modelId}}),await this.failSession(W),J}}async getAccumulatedUsage($){let W=oJ(this.usageBySession.get($)),Z=oJ(this.aggregateUsageBySession.get($));return W||Z?{usage:W,aggregateUsage:Z}:void 0}async abort($,W){let Z=this.sessions.get($);if(!Z)return;Z.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Z.aborting=!0,this.pendingPromptsController.clearAborted(Z),Z.agent.abort(W)}async stopSession($){let W=this.sessions.get($);if(!W)return;if(W.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),W.interactive&&!F0(W.status)){await this.releaseSessionRuntime(W,"session_stop");return}if(W.interactive&&W.agent.canStartRun()){await this.shutdownSession(W,{status:this.resolveInteractiveStopStatus(W),exitCode:this.resolveInteractiveStopExitCode(W),shutdownReason:"session_stop",endReason:"stopped"});return}W.aborting=!0,W.agent.abort(Error("session_stop")),await this.shutdownSession(W,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let W=[...this.sessions.values()];if(W.length===0)return;await Promise.allSettled(W.map((Z)=>Z.interactive&&!F0(Z.status)?this.releaseSessionRuntime(Z,$):Z.interactive&&Z.agent.canStartRun()?this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let W=this.sessions.get($);if(W)return wY(W);let Z=$.trim();if(!Z)return;let Q=await this.getRow(Z);if(Q)return p4(Q);let J=await this.readManifest(Z);return J?aZ(J):void 0}async listSessions($=200){let Z=(await this.listRows($)).map(p4),Q=new Set(Z.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(Q.has(J.sessionId))continue;Z.unshift(wY(J))}return Z.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let W=await this.invoke("deleteSession",$);if(W.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return W.deleted}async updateSession($,W){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:W.prompt,metadata:W.metadata,title:W.title}))?.updated===!0}}async updateSessionCompactionState($,W){let Z=$.trim();if(!Z)return{updated:!1};let Q=this.sessions.get(Z),J=Q?void 0:await this.getSession(Z);if(!(Q??J))return{updated:!1};if(Q){let Y=await this.readSessionMessages(Z),V=W.source_message_count>0&&Y.length>=W.source_message_count,B=V?Y:void 0;if(V){if(!await this.canPersistCompactionState(Z,W,Q,void 0,Y))return{updated:!1};Q.agent.restore(Y)}return await this.persistActiveSessionCompactionState(Q,W,B)}if(!await this.canPersistCompactionState(Z,W,void 0,J))return{updated:!1};let X=await this.invokeOptionalValue("readSessionCompactionState",Z);if(O_(W,X))return{updated:!1};return await this.invoke("persistSessionCompactionState",Z,W),{updated:!0}}async readSessionCompactionState($){let W=$.trim();if(!W)return;let Z=this.sessions.get(W);if(Z)for(;;){let Q=Z.compactionStateWriteQueue;if(!Q)return Z.compactionState;await Q.catch(()=>{return})}return await this.invokeOptionalValue("readSessionCompactionState",W)}isCompactionStateForSession($,W,Z,Q){let J=W.conversation_id?.trim();if(!J)return!0;if(J===$)return!0;let j=Z?.agent.getConversationId()?.trim()||Q?.conversationId?.trim();return j?J===j:!1}async canPersistCompactionState($,W,Z,Q,J){if(!W.conversation_id?.trim())return!1;if(!this.isCompactionStateForSession($,W,Z,Q))return!1;let j=J??Z?.agent.getMessages()??await this.readSessionMessages($);return j2(W,j)!==void 0}async persistActiveSessionCompactionState($,W,Z){if(!await this.canPersistCompactionState($.sessionId,W,$,void 0,Z))return{updated:!1};return await this.enqueueCompactionStateWrite($,async()=>{if(O_(W,$.compactionState))return{updated:!1};return await this.invoke("persistSessionCompactionState",$.sessionId,W),$.compactionState=W,{updated:!0}})}async enqueueCompactionStateWrite($,W){let Q=($.compactionStateWriteQueue??Promise.resolve()).catch(()=>{return}).then(W),J=Q.then(()=>{return},()=>{return});$.compactionStateWriteQueue=J;try{return await Q}finally{if($.compactionStateWriteQueue===J)$.compactionStateWriteQueue=void 0}}async readSessionMessages($){let W=$.trim();if(!W)return[];let Z=await this.getRow(W);if(Z?.messagesPath)return u$(Z.messagesPath);let Q=await this.readManifest(W);return u$(Q?.messages_path)}async dispatchHookEvent($){await dF($,{queueSpawnRequest:(W)=>this.invokeOptional("queueSpawnRequest",W),upsertSubagentSessionFromHook:(W)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",W),appendSubagentHookAudit:(W,Z)=>this.invokeOptional("appendSubagentHookAudit",W,Z),applySubagentStatus:(W,Z)=>this.invokeOptional("applySubagentStatus",W,Z)})}subscribe($,W){return this.events.subscribe($,W)}async updateSessionModel($,W){await this.updateSessionConnection($,{modelId:W})}async updateSessionConnection($,W){let Z=O2(W),Q=this.getSessionOrThrow($);if(Z.providerId!==void 0)Q.config.providerId=Z.providerId;if(Z.modelId!==void 0)Q.config.modelId=Z.modelId;if(Z.apiKey!==void 0)Q.config.apiKey=Z.apiKey;if(Z.baseUrl!==void 0)Q.config.baseUrl=Z.baseUrl;if(Z.headers!==void 0)Q.config.headers=Z.headers;if(Z.providerConfig!==void 0)Q.config.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"reasoningEffort"))Q.config.reasoningEffort=Z.reasoningEffort??void 0;if(Object.hasOwn(Z,"thinkingBudgetTokens"))Q.config.thinkingBudgetTokens=Z.thinkingBudgetTokens??void 0;if(Object.hasOwn(Z,"thinking")){if(Q.config.thinking=Z.thinking??void 0,Z.thinking===!1||Z.thinking===null)Q.config.reasoningEffort=void 0,Q.config.thinkingBudgetTokens=void 0}let J={...Z.providerId!==void 0?{providerId:Z.providerId}:{},...Z.modelId!==void 0?{modelId:Z.modelId}:{},...Z.apiKey!==void 0?{apiKey:Z.apiKey}:{},...Z.baseUrl!==void 0?{baseUrl:Z.baseUrl}:{},...Z.headers!==void 0?{headers:Z.headers}:{},...Z.providerConfig!==void 0?{providerConfig:Z.providerConfig}:{},...Object.hasOwn(Z,"reasoningEffort")?{reasoningEffort:Z.reasoningEffort??void 0}:{},...Object.hasOwn(Z,"thinking")?{thinking:Z.thinking??void 0}:{},...Object.hasOwn(Z,"thinkingBudgetTokens")?{thinkingBudgetTokens:Z.thinkingBudgetTokens??void 0}:{}};if(Z.thinking===!1||Z.thinking===null)J.reasoningEffort=void 0,J.thinkingBudgetTokens=void 0;let j={...Z.apiKey!==void 0?{apiKey:Z.apiKey}:{},...Z.baseUrl!==void 0?{baseUrl:Z.baseUrl}:{},...Z.headers!==void 0?{headers:Z.headers}:{}};if(Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults(J),Q.agent.updateConnection(Z),Q.runtime.teamRuntime?.updateTeammateConnections(j),Z.providerId||Z.modelId)await this.mutateSessionManifest(Q,(X)=>{if(Z.providerId)X.provider=Z.providerId;if(Z.modelId)X.model=Z.modelId})}async mutateSessionManifest($,W){let Z=$.artifacts;if(!Z)return;let Q=$.sessionId,j=(this.manifestMutationQueues.get(Q)??Promise.resolve()).then(async()=>{let Y=await this.invokeOptionalValue("readSessionManifest",Q)??Z.manifest;return W(Y),Z.manifest=Y,await this.invoke("writeSessionManifest",Z.manifestPath,Y),Y}),X=j.then(()=>{return},()=>{return});this.manifestMutationQueues.set(Q,X);try{return await j}finally{if(this.manifestMutationQueues.get(Q)===X)this.manifestMutationQueues.delete(Q)}}handlePluginEvent($,W,Z){return this.eventBridge.handlePluginEvent($,W,Z)}async executeTurn($,W){let Z=await this.prepareTurnInput($,W),Q=Z.prompt.trim(),J=Z?.userImages?.length,j=Z?.userFiles?.length;if(!Q&&!J&&!j)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=Q;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let X=await this.executeAgentTurn($,Q,Z.userImages,Z.userFiles);while(Nj($,X.finishReason)){let Y=await Ej($);if(Y.length===0)break;let V=wj($,Y);X=await this.executeAgentTurn($,V)}return X}async completeInteractiveTurn($,W){if(JW($))return;$.lastInteractiveTurnFinishReason=W,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let W=$.lastInteractiveTurnFinishReason;if(!W)return"cancelled";switch(W){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return W}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let W=new Date,Z=$.agent.getMessages(),Q=z0();return $.persistedMessages=Z,$.started=$.started||Z.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:Q}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:Q,messages:Z,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:W,endedAt:W,durationMs:0}}async executeAgentTurn($,W,Z,Q){let J=$.started||$.agent.getMessages().length>0,j=$.persistedMessages??$.agent.getMessages(),X=this.usageBySession.get($.sessionId)??z0(),Y=this.aggregateUsageBySession.get($.sessionId)??X;$.turnUsageBaseline=X,$.turnAggregateUsageBaseline=Y,$.turnPrimaryUsage=z0(),$.turnUsageByAgent=new Map,dW($.config.telemetry,$.sessionId,$.config.mode),F8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(W,Z,Q):()=>$.agent.run(W,Z,Q),B=await this.runWithAuthRetry($,V,j);$.started=!0;let H=d9(B.messages,B,j);$.persistedMessages=H;let G=i4($.turnUsageByAgent?.values()??[]),K=D0(X,B.usage),F=D0(D0(z0(),B.usage),G),A=D0(Y,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(f)=>({...f??{},totalCost:K.totalCost,aggregatedAgentsCost:A.totalCost,usage:K,aggregateUsage:A})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,B),B}catch(V){throw e$($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,W){if($.submitAndExitObserved)return;if(!W.toolCalls.some((Q)=>Q.name===T0.SUBMIT_AND_EXIT&&Q.error===void 0))return;$.submitAndExitObserved=!0,o6($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,W){let Z=C$($.config),Q=Kv(W.prompt).trim();if(!Q)return{prompt:"",userImages:W.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,W.userFiles)};let J=await C8(Q,Z);BK($.config.telemetry,J);let j=jW(J.prompt,W.mode??$.config.mode),X=this.resolveAbsoluteFilePaths($.config.cwd,W.userFiles),Y=this.resolveAbsoluteFilePaths(Z,J.matchedFiles),V=Array.from(new Set([...X,...Y]));return{prompt:j,userImages:W.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let W=C$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:W,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,W){let Z=this.sessions.get($),Q=await this.invokeOptionalValue("readSessionManifest",$)??Z?.artifacts?.manifest,J=W(Q?.metadata);if(!Z?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Z.sessionMetadata=J,Z.artifacts.manifest.metadata=J}async finalizeSingleRun($,W){if(JW($))return;let Z=W==="aborted"||$.aborting,Q=W==="error";await this.shutdownSession($,{status:Z?"cancelled":Q?"failed":"completed",exitCode:Q?1:0,shutdownReason:Q?"session_error":"session_complete",endReason:W})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,W){if(W.status==="completed"&&!$.submitAndExitObserved)o6($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});GQ($);let Z=[],Q=(J,j)=>{Z.push(j),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:j,severity:"warn"}),e$($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:W.status,shutdownReason:W.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,W.status,W.exitCode)}catch(J){Q("update_status",J)}try{await $.agent.shutdown(W.shutdownReason)}catch(J){Q("agent_shutdown",J)}}try{await Promise.resolve($.runtime.shutdown(W.shutdownReason))}catch(J){Q("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){Q("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:W.endReason,ts:Date.now()}}),Z.length>0&&W.status==="failed")throw Z[0]}async releaseSessionRuntime($,W){let Z=[],Q=(J,j)=>{Z.push(j),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:j,severity:"warn"}),e$($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:W,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(W)}catch(J){Q("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(W))}catch(J){Q("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){Q("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Z.length>0)throw Z[0]}async updateStatus($,W,Z){if(!$.artifacts)return;let Q=await this.invoke("updateSessionStatus",$.sessionId,W,Z);if(!Q.updated)return;let J=await this.mutateSessionManifest($,(j)=>{if(j.status=W,F0(W))delete j.ended_at,j.exit_code=null;else j.ended_at=Q.endedAt??X0(),j.exit_code=typeof Z==="number"?Z:null});if(!J)return;$.status=W,$.updatedAt=Q.endedAt??X0(),$.endedAt=F0(W)?null:J.ended_at,$.exitCode=J.exit_code,this.emitStatus($.sessionId,W)}async runWithAuthRetry($,W,Z){try{return await W()}catch(Q){if(!Q2($.config.providerId)||!Gv(Q))throw Q;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Z),W()}}async syncOAuthCredentials($,W){let Z=null;try{Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:W?.forceRefresh})}catch(Q){if(Q instanceof O7)throw Error(`${Q.providerId} requires re-authentication.`);throw Q}if(!Z?.apiKey||$.config.apiKey===Z.apiKey)return;$.config.apiKey=Z.apiKey,$.agent.updateConnection({apiKey:Z.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Z.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Z.apiKey})}getSessionOrThrow($){let W=this.sessions.get($);if(!W){let Z=new e1($);throw e$(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Z,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Z}return W}resolveAbsoluteFilePaths($,W){if(!W||W.length===0)return[];let Z=W.map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>Bv(Q)?Q:yY($,Q));return Array.from(new Set(Z))}getSessionAgentTelemetryIdentity($){return i1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let W=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Z=D0($.initialUsage,W);return this.withPersistedAggregateUsageFloor(Z,$.manifest)}async summarizePersistedTeammateUsage($,W,Z){let Q=yY(W),J=`${Z}.messages.json`,j;try{j=Yv($)}catch{return z0()}let X=z0();for(let Y of j){if(!Y.endsWith(".messages.json"))continue;if(Y===J)continue;let V=yY($,Y);if(V===Q)continue;let B=await u$(V);if(B.length===0)continue;X=D0(X,v8(B))}return X}withPersistedAggregateUsageFloor($,W){let Z=Av(W.metadata?.aggregateUsage);if(Z)return Uv($,Z);let Q=W.metadata?.aggregatedAgentsCost;if(typeof Q!=="number"||!Number.isFinite(Q)||Q<=$.totalCost)return $;return{...$,totalCost:Q}}emitStatus($,W){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:W}})}async emitSessionSnapshot($){let W=await this.getSession($);if(!W)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:E1({session:W,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),L_))}async getRow($){let W=$.trim();if(!W)return;return(await this.listRows(L_)).find((Q)=>Q.sessionId===W)}async readManifest($){let W=$.trim();if(!W)return;return await this.invokeOptionalValue("readSessionManifest",W)}invoke($,...W){return U_(this.sessionService,$,...W)}invokeOptional($,...W){return f_(this.sessionService,$,...W)}invokeOptionalValue($,...W){return D_(this.sessionService,$,...W)}}function Dv($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((W)=>({name:W.name,input:W.input,output:W.output,error:W.error,durationMs:W.durationMs}))}}function _v($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function CQ($={}){let W=new b1({sessionService:new S1(new C1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Z){let Q=(Z.cwd?.trim()||Z.workspaceRoot).trim(),J=await W.startSession({source:Z.source?.trim()||A0.CLI,interactive:!1,config:{providerId:fv(Z.provider),modelId:Z.model,apiKey:Z.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:_v(Z),maxIterations:Z.maxIterations,enableTools:Z.enableTools!==!1,enableSpawnAgent:Z.enableSpawn!==!1,enableAgentTeams:Z.enableTeams!==!1,disableMcpSettingsTools:Z.disableMcpSettingsTools,missionLogIntervalSteps:Z.missionStepInterval,missionLogIntervalMs:Z.missionTimeIntervalMs},toolPolicies:Z.toolPolicies??{"*":{autoApprove:Z.autoApproveTools!==!1}},localRuntime:{configExtensions:Z.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Z,Q){let J=await W.runTurn({sessionId:Z,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((j)=>j.content)});if(!J)throw Error("local hub schedule runtime returned no turn result");return{result:Dv(J)}},async abortSession(Z){return await W.abort(Z,Error("hub schedule abort")),{applied:!0}},async stopSession(Z){return await W.stopSession(Z),{applied:!0}}}}import{release as Lv}from"node:os";import{createClineTelemetryServiceConfig as Ov}from"@cline/shared";O0();FW();var Tv=300000,zv=5000;function T_(){let $=Ov({metadata:{extension_version:bW,cline_type:"hub",platform:"cline-hub-daemon",platform_version:process.version,os_type:process.platform,os_version:Lv()}}),W=i$($),Z,Q=()=>{try{return Z??=new Y1,Z.getProviderSettings("cline")?.auth?.accountId?.trim()||void 0}catch{return}},J,j=()=>{let Y=Q();if(!Y||Y===J)return;J=Y,B1(W.telemetry,{id:Y,provider:"cline"})};j();let X=setInterval(j,Tv);return X.unref?.(),{telemetry:W.telemetry,dispose:async()=>{clearInterval(X);let Y;await Promise.race([(async()=>{await W.flush(),await W.dispose()})(),new Promise((V)=>{Y=setTimeout(V,zv),Y.unref?.()})]),clearTimeout(Y)}}}Mv(process.env.CLINE_VCR);function Nv($){let W=process.cwd(),Z,Q,J;for(let j=0;j<$.length;j+=1){let X=$[j],Y=$[j+1];if(X==="--cwd"&&Y){W=Y,j+=1;continue}if(X==="--host"&&Y){Z=Y,j+=1;continue}if(X==="--port"&&Y){let V=Number(Y);if(Number.isFinite(V))Q=V;j+=1;continue}if(X==="--pathname"&&Y)J=Y,j+=1}return{cwd:W,host:Z,port:Q,pathname:J}}async function Ev(){let $=Nv(process.argv.slice(2));process.chdir($.cwd);let W=Q1({host:$.host,port:$.port,pathname:$.pathname}),Z=T_(),Q;try{Q=await Y8({host:W.host,port:W.port,pathname:W.pathname,owner:Rv()==="production"?J1():c0(),telemetry:Z.telemetry,runtimeHandlers:CQ({telemetry:Z.telemetry}),cronOptions:{workspaceRoot:$.cwd}})}catch(Y){throw await Z.dispose().catch(()=>{return}),Y}let J=async()=>{await Q.close(),await Z.dispose().catch(()=>{return}),process.exit(0)},j=!1,X=(Y,V)=>{if(j)return;j=!0;let B=V instanceof Error?V.stack||V.message:String(V);process.stderr.write(`[hub-daemon] ${Y}: ${B}
751
+ ${V}`:""}`);let B=Jx($);if(pQ($))throw Error(`Skill uninstall completed, but ${$.name??$.id} is still present in Cline's global skills directories.`);return{id:$.id,type:"skill",status:"uninstalled",message:`Uninstalled ${$.name??$.id}.`,output:[V,...B.map((H)=>`Removed: ${H}`)].filter(Boolean).join(`
752
+ `)||void 0}}async function iQ($,W={}){let[Z]=uX($),Q=Z?.trim()||$.id;if(!Q)throw Error("Plugin marketplace uninstalls require a plugin name.");let J=await RW({name:Q,workspaceRoot:W.workspaceRoot});return{id:$.id,type:"plugin",status:"uninstalled",message:`Uninstalled ${$.name??J.name??$.id}.`,output:[`Path: ${J.installPath}`,...J.removedPaths.map((j)=>`Removed: ${j}`)].join(`
753
+ `)}}async function lX($,W={}){if($.type==="mcp"){let Z=wW($);if(W.deleteMcpServer)await W.deleteMcpServer(Z);else lQ($,W);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Z??$.id}.`}}if($.type==="skill")return rQ($,W);if($.type==="plugin")return iQ($,W);throw Error(`Unsupported marketplace entry type: ${$.type}`)}var bD={};w(bD,{parsePluginSource:()=>Z7,isOfficialPluginSlug:()=>W7,installPlugin:()=>oX,collectPluginMcpOAuthCandidates:()=>Q7});import{spawn as jx}from"node:child_process";import{createHash as Xx}from"node:crypto";import{existsSync as k1,mkdirSync as iX,readdirSync as Yx,readFileSync as Vx,renameSync as nQ,rmSync as sQ,statSync as nX}from"node:fs";import{cp as rX,mkdir as RD,writeFile as tQ}from"node:fs/promises";import{homedir as LD}from"node:os";import{basename as K$,dirname as OD,extname as Bx,join as s,relative as ED,resolve as t$,sep as Hx}from"node:path";import{isPluginModulePath as oQ,resolveClineDir as Gx,resolvePluginModuleEntries as Kx}from"@cline/shared/storage";var i6="_installed",eQ="package",Fx="https://github.com/cline/plugins.git",TD=30000,aQ=10485760,zD="@cline/",Ax=["dependencies","devDependencies","optionalDependencies","peerDependencies"],Ux={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function $7($){if($==="~")return LD();if($.startsWith("~/"))return s(LD(),$.slice(2));return $}function wD($){return $.split(Hx).join("/")}function H8($){return Xx("sha256").update($).digest("hex").slice(0,12)}function fx($){let W=0;while(W<$.length&&$[W]==="-")W++;let Z=$.length;while(Z>W&&$[Z-1]==="-")Z--;return $.slice(W,Z)}function G$($){let W="",Z=!1,Q=$.startsWith("@")?$.slice(1):$;for(let j of Q.slice(0,256)){if(j>="a"&&j<="z"||j>="A"&&j<="Z"||j>="0"&&j<="9"||j==="."||j==="_"||j==="-")W+=j,Z=j==="-";else if(!Z)W+="-",Z=!0;if(W.length>=80)break}return fx(W)||"plugin"}function W7($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function Dx($){return $?.trim()||Fx}function qD($){let Z=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Z?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Z[1]}}function _x($){if($.startsWith(".")||$.startsWith("/")||$==="~"||$.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test($))return!1;let[W,...Z]=$.split("/");return!!W&&Z.length>=2&&W.includes(".")&&!W.startsWith(".")&&!W.endsWith(".")}function Lx($){let W=$.match(/^git@([^:]+):(.+)$/);if(W){let X=W[2]??"",Y=X.indexOf("@");if(Y<0)return{repo:$};return{repo:`git@${W[1]}:${X.slice(0,Y)}`,ref:X.slice(Y+1)||void 0}}if($.includes("://"))try{let X=new URL($),Y=X.pathname.replace(/^\/+/,""),V=Y.indexOf("@");if(V<0)return{repo:$};return X.pathname=`/${Y.slice(0,V)}`,{repo:X.toString().replace(/\/$/,""),ref:Y.slice(V+1)||void 0}}catch{return{repo:$}}let Z=$.indexOf("/");if(Z<0)return{repo:$};let Q=$.slice(0,Z),J=$.slice(Z+1),j=J.indexOf("@");if(j<0)return{repo:$};return{repo:`${Q}/${J.slice(0,j)}`,ref:J.slice(j+1)||void 0}}function Ox($){try{return decodeURIComponent($)}catch{return $}}function Tx($){return K$(Ox($))||"plugin"}function zx($){let W=$.split("/").filter(Boolean);return W.length>=5&&(W[2]==="blob"||W[2]==="raw")}function MD($){if(!/^https?:\/\//i.test($))return null;let W;try{W=new URL($)}catch{return null}let Z=W.hostname.toLowerCase(),Q=Tx(W.pathname),J=oQ(Q),j=(Z==="github.com"||Z==="www.github.com")&&zx(W.pathname);if(W.protocol!=="https:"){if(j||Z==="raw.githubusercontent.com"||J)throw Error(`Remote plugin file URLs must use https: ${$}`);return null}if(Z==="github.com"||Z==="www.github.com"){let X=W.pathname.split("/").filter(Boolean);if(!j)return null;if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:`https://raw.githubusercontent.com/${[X[0],X[1],...X.slice(3)].join("/")}`,filename:Q}}if(Z==="raw.githubusercontent.com"){if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:W.toString(),filename:Q}}if(!J)return null;return{type:"remote",url:W.toString(),filename:Q}}function ND($,W={}){let Z=$.trim(),Q=Z.startsWith("git:")&&!Z.startsWith("git://"),J=Q?Z.slice(4).trim():Z;if(!W.force&&!Q&&!/^(https?|ssh|git):\/\//i.test(J))return null;let{repo:j,ref:X}=Lx(J),Y="",V="";if(j.startsWith("git@")){let G=j.match(/^git@([^:]+):(.+)$/);Y=G?.[1]??"",V=G?.[2]??""}else if(/^(https?|ssh|git):\/\//i.test(j)){let G=new URL(j);Y=G.hostname,V=G.pathname.replace(/^\/+/,"")}else{let G=j.indexOf("/");if(G<0)return null;Y=j.slice(0,G),V=j.slice(G+1)}let B=V.replace(/\.git$/,"").replace(/^\/+/,"");if(!Y||!B||B.split("/").length<2)return null;return{type:"git",repo:j.startsWith("git@")||/^(https?|ssh|git):\/\//i.test(j)?j:`https://${j}`,ref:X,host:Y,path:B}}function Z7($,W){let Z=$.trim();if(!Z)throw Error("plugin install requires a source");if(W==="npm"){let X=Z.startsWith("npm:")?Z.slice(4).trim():Z,{name:Y}=qD(X);return{type:"npm",spec:X,name:Y}}if(W==="git"){let X=ND(Z,{force:!0});if(!X)throw Error(`Invalid git plugin source: ${$}`);return X}if(W==="local")return{type:"local",path:$};if(W==="remote"){let X=MD(Z);if(!X)throw Error(`Invalid remote plugin source: ${$}`);return X}if(Z.startsWith("npm:")){let X=Z.slice(4).trim(),{name:Y}=qD(X);return{type:"npm",spec:X,name:Y}}if(Z.startsWith(".")||Z.startsWith("/")||Z==="~"||Z.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test(Z))return{type:"local",path:$};let J=MD(Z);if(J)return J;let j=ND(Z);if(j)return j;if(W7(Z))return{type:"official",slug:Z};if(_x(Z))throw Error(`Unrecognized plugin source "${$}". Use --git for hostname-style repositories or pass an explicit local path such as ./github.com/owner/repo.`);return{type:"local",path:$}}function qx($){return $?s($,".cline","plugins"):s(Gx(),"plugins")}function Mx($,W,Z){if(W.type==="npm")return s($,i6,"npm",`${G$(W.name)}-${H8(Z)}`);if(W.type==="git")return s($,i6,"git",G$(W.host),`${G$(W.path)}-${H8(Z)}`);if(W.type==="remote")return s($,i6,"remote",`${G$(W.filename)}-${H8(Z)}`);if(W.type==="official")return s($,i6,"official",`${G$(W.slug)}-${H8(Z)}`);return s($,i6,"local",`${G$(K$($7(W.path)))}-${H8(Z)}`)}function Nx($,W,Z){if($.type==="npm")return`npm:${$.spec}`;if($.type==="git")return`git:${$.repo}${$.ref?`#${$.ref}`:""}`;if($.type==="remote")return`remote:${$.url}`;if($.type==="official")return`official:${Z}#plugins/${$.slug}`;return`local:${t$(W,$7($.path))}`}function Rx($,W){if($.type==="npm")return $.name;if($.type==="git")return G$(K$($.path));if($.type==="remote")return G$(K$($.filename,Bx($.filename)));if($.type==="official")return $.slug;return G$(K$(t$(W,$7($.path))))}async function n6($,W,Z={}){await new Promise((Q,J)=>{let j=jx($,W,{cwd:Z.cwd,stdio:["ignore","ignore","pipe"],env:process.env,windowsHide:!0}),X="";j.stderr.on("data",(Y)=>{X+=String(Y)}),j.on("error",J),j.on("close",(Y)=>{if(Y===0){Q();return}let V=X.trim();J(Error(`${$} ${W.join(" ")} failed with exit code ${Y}${V?`: ${V}`:""}`))})})}function CD($){let W=s($,"package.json");if(!k1(W))return null;try{return JSON.parse(Vx(W,"utf8"))}catch{return null}}function Ex($){let W=$?.cline?.plugins;if(!Array.isArray(W))return[];return W.flatMap((Z)=>{if(typeof Z==="string")return[Z];return Z.paths??[]})}async function wx($){let W=s($,"package.json"),Z=CD($);if(!Z)return;let Q=!1;for(let J of Ax){let j=Z[J];if(!j||typeof j!=="object")continue;for(let X of Object.keys(j)){if(!X.startsWith(zD))continue;delete j[X],delete Z.peerDependenciesMeta?.[X],Q=!0}if(Object.keys(j).length===0)delete Z[J]}if(Z.peerDependenciesMeta){for(let J of Object.keys(Z.peerDependenciesMeta)){if(!J.startsWith(zD))continue;delete Z.peerDependenciesMeta[J],Q=!0}if(Object.keys(Z.peerDependenciesMeta).length===0)delete Z.peerDependenciesMeta}if(!Q)return;await tQ(W,`${JSON.stringify(Z,null,2)}
754
+ `,"utf8")}function Cx($,W){let Z=s($,"node_modules","@cline");if(!k1(Z))return;for(let Q of SD(Z)){if(`@cline/${Q.name}`===W)continue;sQ(s(Z,Q.name),{recursive:!0,force:!0})}}function PD($){let W=Ex(CD($)).map((j)=>t$($,j)).filter((j)=>k1(j)&&nX(j).isFile()&&oQ(j));if(W.length>0)return W;let Z=Kx($);if(Z?.length)return Z;let Q=[],J=[$];while(J.length>0){let j=J.pop();if(!j)continue;for(let X of SD(j)){let Y=s(j,X.name);if(X.name==="node_modules"||X.name===".git")continue;if(X.isDirectory()){J.push(Y);continue}if(X.isFile()&&!X.name.startsWith(".")&&oQ(Y))Q.push(Y)}}return Q.sort((j,X)=>j.localeCompare(X))}function SD($){try{return Yx($,{withFileTypes:!0})}catch{return[]}}function Px($,W){let Z=PD(W);if(Z.length===0)throw Error(`No plugin entry files found in ${W}`);return Z.map((Q)=>`./${wD(ED($,Q))}`)}async function Sx($,W,Z){let Q=Px($,W);return await tQ(s($,"package.json"),JSON.stringify({...Ux,name:Z,cline:{plugins:[{paths:Q}]}},null,2),"utf8"),Q}async function bx($,W,Z){let Q=s(W,eQ);return await RD(Q,{recursive:!0}),await tQ(s(Q,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await n6(Z,["install",$.spec,"--prefix",Q,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),Cx(Q,$.name),s(Q,"node_modules",$.name)}async function aX($,W){if(!k1(s($,"package.json")))return;await wx($),await n6(W,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function yx($,W,Z){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let Q=s(W,eQ),J=["clone","--filter=blob:none"];if($.ref)J.push("--branch",$.ref);J.push("--",$.repo,Q);try{await n6("git",J)}catch(j){if(!$.ref)throw j;await n6("git",["clone","--filter=blob:none","--",$.repo,Q]),await n6("git",["checkout","--detach",$.ref],{cwd:Q})}return await aX(Q,Z),Q}async function hx($,W,Z,Q){let J=s(W,"repo");await n6("git",["clone","--filter=blob:none","--depth","1","--",Q,J]);let j=s(J,"plugins",$.slug);if(!k1(j)||!nX(j).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${Q}`);let X=s(W,eQ);return await rX(j,X,{recursive:!0,filter:(Y)=>{let V=K$(Y);return V!==".git"&&V!=="node_modules"}}),sQ(J,{recursive:!0,force:!0}),await aX(X,Z),X}function pX($){return Error(`Remote plugin file from ${$} exceeds the ${aQ} byte limit`)}function kx($){let W=$.headers.get("content-length");if(!W)return;let Z=Number(W);if(!Number.isFinite(Z)||Z<0)return;return Z}async function Ix($,W){let Z=kx($);if(Z!==void 0&&Z>aQ)throw pX(W);if(!$.body){let X=Buffer.from(await $.text(),"utf8");if(X.byteLength>aQ)throw pX(W);return X}let Q=$.body.getReader(),J=[],j=0;try{while(!0){let{done:X,value:Y}=await Q.read();if(X)break;let V=Buffer.from(Y);if(j+=V.byteLength,j>aQ)throw await Q.cancel().catch(()=>{return}),pX(W);J.push(V)}return Buffer.concat(J,j)}finally{Q.releaseLock()}}async function xx($,W){let Z=new AbortController,Q=setTimeout(()=>{Z.abort()},TD);try{let J=await fetch($.url,{signal:Z.signal});if(!J.ok){let X=J.statusText?` ${J.statusText}`:"";throw Error(`Failed to download plugin file from ${$.url}: ${J.status}${X}`)}let j=await Ix(J,$.url);return iX(W,{recursive:!0}),await tQ(s(W,$.filename),j),W}catch(J){if(J instanceof Error&&J.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${TD}ms`);throw J}finally{clearTimeout(Q)}}async function gx($,W,Z,Q){let J=t$(Z,$7($.path));if(!k1(J))throw Error(`Plugin source path does not exist: ${J}`);let j=nX(J);if(j.isFile()){if(!oQ(J))throw Error(`Plugin file must be .js or .ts: ${J}`);iX(W,{recursive:!0});let Y=s(W,K$(J));return await rX(J,Y),W}if(!j.isDirectory())throw Error(`Plugin source must be a file or directory: ${J}`);let X=s(W,eQ);return await rX(J,X,{recursive:!0,filter:(Y)=>{let V=K$(Y);return V!==".git"&&V!=="node_modules"}}),await aX(X,Q),X}function mx($,W){if(k1($)&&!W)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function vx($,W,Z){if(iX(OD(W),{recursive:!0}),!k1(W)){nQ($,W);return}if(!Z)throw Error(`Plugin is already installed at ${W}. Use --force to replace it.`);let Q=s(OD(W),`.replace-${K$(W)}-${Date.now()}-${process.pid}-${H8(`${W}:${Math.random()}`)}`);nQ(W,Q);try{nQ($,W)}catch(J){if(!k1(W)&&k1(Q))nQ(Q,W);throw J}try{sQ(Q,{recursive:!0,force:!0})}catch{}}function cx($){let W=$.transport;if(W.type==="stdio")return!1;return W.headers!==void 0&&Object.keys(W.headers).length>0}function ux($){let W=$.oauth?.tokens?.access_token;return typeof W==="string"&&W.trim().length>0}function dx($){let W=$.metadata;if(!W||W.source!=="plugin"||typeof W.pluginName!=="string"||typeof W.pluginPath!=="string")return;return{pluginName:W.pluginName,pluginPath:W.pluginPath}}function Q7($){let W=new Set($.pluginPaths.map((J)=>t$(J)));if(W.size===0)return[];let Z;try{Z=t0({filePath:$.settingsPath??Q0()})}catch{return[]}let Q=[];for(let J of Z){let j=dx(J);if(!j||!W.has(t$(j.pluginPath)))continue;let X=J.transport.type;if(X==="stdio")continue;if(cx(J)||ux(J))continue;Q.push({name:J.name,pluginName:j.pluginName,pluginPath:j.pluginPath,transportType:X,lastError:J.oauth?.lastError})}return Q.sort((J,j)=>J.name.localeCompare(j.name))}async function oX($){let W=$.source.trim(),Z=Z7(W,$.sourceType),Q=$.cwd?.trim(),J=Q?t$(Q):process.cwd(),j=qx(Q?J:void 0),X=Dx($.officialPluginsRepo),Y=Nx(Z,J,X),V=Mx(j,Z,Y),B=Rx(Z,J),H=s(j,i6,".tmp"),G=s(H,`${Date.now()}-${process.pid}-${H8(`${W}:${Math.random()}`)}`),K=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;mx(V,F),await RD(H,{recursive:!0});let A;try{if(Z.type==="npm")A=await bx(Z,G,K);else if(Z.type==="git")A=await yx(Z,G,K);else if(Z.type==="official")A=await hx(Z,G,K,X);else if(Z.type==="remote")A=await xx(Z,G);else A=await gx(Z,G,J,K);let f=(Z.type==="local"||Z.type==="remote")&&A===G?PD(G).map((D)=>`./${wD(ED(G,D))}`):await Sx(G,A,B);if(f.length===0)throw Error(`No plugin entry files found for ${W}`);vx(G,V,F);let U={source:W,installPath:V,entryPaths:f.map((D)=>t$(V,D)),mcpSyncFailures:[],mcpOAuthCandidates:[]},_=await MW({pluginPaths:U.entryPaths,cwd:J,workspacePath:J});return U.mcpSyncFailures=_.failures,U.mcpOAuthCandidates=Q7({pluginPaths:U.entryPaths}),U}catch(f){throw sQ(G,{recursive:!0,force:!0}),f}}var eD={};w(eD,{updateLocalProvider:()=>G7,saveLocalProviderSettings:()=>jY,saveLocalProviderOAuthCredentials:()=>BY,resolveLocalClineAuthToken:()=>GY,refreshProviderModelsFromSource:()=>XY,normalizeOAuthProvider:()=>YY,markLocalProviderEnabled:()=>ZY,loginLocalProvider:()=>VY,loginAndSaveLocalProviderOAuthCredentials:()=>HY,listLocalProviders:()=>QY,getLocalProviderModels:()=>JY,ensureCustomProvidersLoaded:()=>V7,deleteLocalProvider:()=>K7,addLocalProvider:()=>WY});import*as h0 from"@cline/llms";import{existsSync as lx,mkdirSync as px,readFileSync as rx,writeFileSync as ix}from"node:fs";import{mkdir as nx,readFile as ax,writeFile as ox}from"node:fs/promises";import{dirname as sX,join as sx}from"node:path";import*as d0 from"@cline/llms";import{ModelCapabilitySchema as tx,ProviderCapabilitySchema as ex,ProviderClientSchema as $g,ProviderProtocolSchema as Wg}from"@cline/shared";import{z as t}from"zod";var Zg=t.object({id:t.string().optional(),name:t.string().optional(),maxTokens:t.number().optional(),contextWindow:t.number().optional(),maxInputTokens:t.number().optional(),capabilities:t.array(tx).optional(),supportsVision:t.boolean().optional(),supportsAttachments:t.boolean().optional(),supportsReasoning:t.boolean().optional()}).passthrough(),Qg=t.object({name:t.string(),baseUrl:t.string(),defaultModelId:t.string().optional(),protocol:Wg.optional(),client:$g.optional(),capabilities:t.array(ex).optional(),modelsSourceUrl:t.string().optional()}).passthrough(),yD=t.object({provider:Qg.optional(),models:t.record(t.string(),Zg).optional()}).passthrough(),hD=t.object({version:t.literal(1),providers:t.record(t.string(),yD)}),Jg=t.object({version:t.literal(1),providers:t.record(t.string(),t.unknown())}),J7=new Set;function kD($){return $.split(/[-_]/).filter(Boolean).map((W)=>W.charAt(0).toUpperCase()+W.slice(1)).join(" ")}function G8($){return sx(sX($.getFilePath()),"models.json")}function j7(){return{version:1,providers:{}}}function ID($){let W=Jg.safeParse($);if(!W.success)return j7();let Z={};for(let[Q,J]of Object.entries(W.data.providers)){let j=yD.safeParse(J);if(j.success)Z[Q]=j.data}return{version:1,providers:Z}}function tX($){if(!lx($))return j7();try{let W=rx($,"utf8");return ID(JSON.parse(W))}catch{}return j7()}async function a6($){try{let W=await ax($,"utf8");return ID(JSON.parse(W))}catch{}return j7()}function xD($,W){px(sX($),{recursive:!0});let Z=hD.parse(W);ix($,`${JSON.stringify(Z,null,2)}
755
+ `,"utf8")}async function X7($,W){await nx(sX($),{recursive:!0});let Z=hD.parse(W);await ox($,`${JSON.stringify(Z,null,2)}
756
+ `,"utf8")}function gD($,W){return{id:$,name:W.name??$,supportsAttachments:W.capabilities?.includes("files"),supportsVision:W.capabilities?.includes("images"),supportsReasoning:W.capabilities?.includes("reasoning")||W.thinkingConfig!=null}}function mD($){if(!$||$.length===0)return;let W=new Set;if($.includes("reasoning"))W.add("reasoning");if($.includes("prompt-cache"))W.add("prompt-cache");if($.includes("tools"))W.add("tools");return W.size>0?[...W]:void 0}function vD($){let W=new Set;if(!$||$.length===0)return[...W];if($.includes("streaming"))W.add("streaming");if($.includes("tools"))W.add("tools");if($.includes("reasoning"))W.add("reasoning");if($.includes("prompt-cache"))W.add("prompt-cache");if($.includes("vision"))W.add("images"),W.add("files");return[...W]}function jg($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function cD($,W){return $??W??"openai-chat"}function uD($,W,Z){return $??Z??(W==="openai-responses"?"openai":"openai-compatible")}function dD($,W,Z){let Q=new Set(W?.capabilities??Z??[]);if(W?.supportsVision)Q.add("images");if(W?.supportsAttachments)Q.add("files");if(W?.supportsReasoning)Q.add("reasoning");return{id:$,name:W?.name??$,maxTokens:W?.maxTokens,contextWindow:W?.contextWindow,maxInputTokens:W?.maxInputTokens,capabilities:Q.size>0?[...Q]:void 0}}function Xg($,W){for(let[Z,Q]of Object.entries(W??{})){let J=Q.id?.trim()||Z.trim();if(!J)continue;d0.registerModel($,J,dD(J,Q))}}function Yg($,W,Z){return{...W??{},id:$,name:W?.name??$,capabilities:W?.capabilities??Z}}function Vg($){return Object.assign({},...d0.resolveProviderModelCatalogKeys($).map((Z)=>d0.getGeneratedModelsForProvider(Z)))}function Bg($){let W=$.provider.trim();if(!W||d0.isBuiltInProviderId(W))return;let Z=$.baseUrl?.trim();if(!Z)return;let Q=d0.MODEL_COLLECTIONS_BY_PROVIDER_ID[W],J=Vg(W),j=vD($.capabilities),X=j.length>0?j:void 0,Y=$.model?.trim(),V={...J,...Q?.models??{}};if(Y)V[Y]=Yg(Y,V[Y],X);let B=Object.keys(V).filter(Boolean),H=Y||B[0];if(!H)return;let G=cD($.protocol,Q?.provider.protocol),K=uD($.client,G,Q?.provider.client);d0.registerProvider({provider:{id:W,name:Q?.provider.name??kD(W),description:Q?.provider.description,protocol:G,client:K,baseUrl:Z,modelsSourceUrl:Q?.provider.modelsSourceUrl,defaultModelId:H,capabilities:mD($.capabilities)??Q?.provider.capabilities,source:"file"},models:V})}function Y7($){for(let W of Object.values($.providers))Bg(W.settings)}function bW($,W){let Z=W.models??{};if(!jg(W.provider)){Xg($,Z);return}let Q=vD(W.provider.capabilities),J=Object.entries(Z).map(([B,H])=>({id:H.id?.trim()||B.trim(),model:H})).filter(({id:B})=>B.length>0),j=W.provider.defaultModelId?.trim()||J[0]?.id||"default",X=cD(W.provider.protocol,void 0),Y=uD(W.provider.client,X,void 0),V=Object.fromEntries(J.map(({id:B,model:H})=>[B,{...dD(B,H,Q.length>0?Q:void 0),status:"active"}]));d0.registerProvider({provider:{id:$,name:W.provider.name.trim()||kD($),protocol:X,client:Y,baseUrl:W.provider.baseUrl,modelsSourceUrl:W.provider.modelsSourceUrl,defaultModelId:j,capabilities:mD(W.provider.capabilities),source:"file"},models:V})}function lD($){let W=G8($);if(J7.has(W))return;let Z=tX(W);for(let[Q,J]of Object.entries(Z.providers))bW(Q,J);J7.add(W)}async function V7($){let W=G8($);if(J7.has(W))return;let Z=await a6(W);for(let[Q,J]of Object.entries(Z.providers))bW(Q,J);J7.add(W)}var rD="cline-pass";function Hg($){return $.apiKey??$.auth?.apiKey}function Gg($){return($.auth?.accessToken?.trim()??"").length>0}function iD($){return $.split(/[-_]/).filter(Boolean).map((W)=>W.charAt(0).toUpperCase()+W.slice(1)).join(" ")}function Kg($){let W=$.split(/\s+/).filter(Boolean);if(W.length===0)return"?";if(W.length===1)return W[0].slice(0,2).toUpperCase();return`${W[0][0]}${W[1][0]}`.toUpperCase()}function Fg($){let W=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Z=0;for(let Q of $)Z=Z*31+Q.charCodeAt(0)>>>0;return W[Z%W.length]}function nD($){return Object.entries($).sort(([W],[Z])=>W.localeCompare(Z)).map(([W,Z])=>gD(W,Z))}async function Ag($,W){let Z=await h0.getModelsForProvider($),Q=$===rD;if(!W&&!Q)return Z;let J=await B5($,{loadLatestOnInit:Q,loadPrivateOnAuth:!0,failOnError:!1},W);if($==="litellm"&&J?.knownModels)return J.knownModels;if(Q&&J?.knownModels)return J.knownModels;return J?.knownModels?{...Z,...J.knownModels}:Z}function eX($){return[...new Set(($??[]).map((W)=>W.trim()).filter(Boolean))]}function Ug($){if(!$?.length)return;return[...new Set($)]}function fg($,W){return Ug([...$??[],...W??[]])}function Dg($){let W=$?.popularRank;return typeof W==="number"&&Number.isFinite(W)?W:Number.MAX_SAFE_INTEGER}function _g($){if(!$||typeof $!=="object")return!1;let W=$;return typeof W.path==="string"&&W.path.trim().length>0&&typeof W.label==="string"&&W.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(W.type))}function Lg($){let W=$?.configFields;if(!Array.isArray(W))return;return W.filter(_g)}var B7={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},pD={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function Og($){if(!$)return[B7];if($.source!=="system")return $.baseUrl?[B7,pD]:[B7];let W=[];if($.env?.length)W.push(B7);if($.baseUrl)W.push(pD);return W}function Tg($,W){return W.split(".").reduce((Z,Q)=>{if(!Z||typeof Z!=="object")return;return Z[Q]},$)}function zg($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function qg($,W,Z){if(!$?.length)return;let Q={};for(let J of $){let X=zg(J.path==="baseUrl"&&W?.baseUrl===void 0?Z?.baseUrl:Tg(W,J.path))??J.defaultValue;if(X!==void 0)Q[J.path]=X}return Q}function aD($){let W=Object.entries($??{}).filter(([Z])=>Z.trim().length>0);return W.length>0?Object.fromEntries(W):void 0}function $Y($,W){let Z=W?.includes("vision")??!1,Q=W?.includes("reasoning")??!1;return Object.fromEntries($.map((J)=>[J,{id:J,name:J,supportsVision:Z,supportsAttachments:Z,supportsReasoning:Q}]))}async function oD($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let W=$.modelsSourceUrl?await WZ($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...W])]}function sD($,W){let Z=$.read(),Q=!1;if(Z.providers[W])delete Z.providers[W],Q=!0;if(Z.lastUsedProvider===W)delete Z.lastUsedProvider,Q=!0;if(Q)$.write(Z);h0.unregisterProvider(W)}async function WY($,W){let Z=W.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=W.baseUrl.trim(),J=W.apiKey?.trim()??"";if(!Q&&!J){let A=G8($);if((await a6(A)).providers[Z]){let U=await K7($,{providerId:Z});return{providerId:Z,settingsPath:U.settingsPath,modelsPath:U.modelsPath,modelsCount:0}}return sD($,Z),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(h0.hasProvider(Z))throw Error(`provider "${Z}" already exists`);let j=W.name.trim();if(!j)throw Error("name is required");if(!Q)throw Error("baseUrl is required");let X=eX(W.models),Y=W.modelsSourceUrl?.trim(),V=await oD({providerId:Z,explicitModels:X,modelsSourceUrl:Y,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let B=W.defaultModelId?.trim()&&V.includes(W.defaultModelId.trim())?W.defaultModelId.trim():V[0],H=W.capabilities?.length?[...new Set(W.capabilities)]:void 0,G=aD(W.headers);$.saveProviderSettings({provider:Z,apiKey:J||void 0,baseUrl:Q,headers:G,timeout:W.timeoutMs,model:B,protocol:W.protocol,client:W.client},{setLastUsed:!1});let K=G8($),F=await a6(K);return F.providers[Z]={provider:{name:j,baseUrl:Q,defaultModelId:B,protocol:W.protocol,client:W.client,capabilities:H,modelsSourceUrl:Y},models:$Y(V,H)},await X7(K,F),bW(Z,F.providers[Z]),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function G7($,W){let Z=W.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=G8($),J=await a6(Q),j=J.providers[Z];if(!j){let T=$.getProviderSettings(Z);if(!T)throw Error(`provider "${Z}" does not exist`);let O=W.modelsSourceUrl?.trim(),L=eX(W.models)[0]??T.model?.trim();if(!L&&!O)throw Error(`provider "${Z}" cannot be updated because no model is configured`);j={provider:{name:W.name?.trim()||iD(Z),baseUrl:W.baseUrl?.trim()??T.baseUrl?.trim()??"",defaultModelId:L,protocol:T.protocol,client:T.client,capabilities:T.capabilities},models:L?$Y([L],T.capabilities):{}}}if(!j.provider)throw Error(`provider "${Z}" cannot be updated because it is a model overlay (no provider metadata)`);let X=W.name?.trim()??j.provider.name.trim();if(!X)throw Error("name is required");let Y=W.baseUrl?.trim()??j.provider.baseUrl.trim();if(!Y)throw Error("baseUrl is required");let V=W.capabilities===void 0?j.provider.capabilities:W.capabilities===null?void 0:[...new Set(W.capabilities)],B=W.protocol===void 0?j.provider.protocol:W.protocol??void 0,H=W.client===void 0?j.provider.client:W.client??void 0,G=eX(W.models),K=W.modelsSourceUrl===void 0?j.provider.modelsSourceUrl:W.modelsSourceUrl?.trim()||void 0,F=W.models!==void 0||W.modelsSourceUrl!==void 0&&!!K,A=Object.keys(j.models??{}).map((T)=>T.trim()).filter(Boolean),f=await oD({providerId:Z,explicitModels:G,modelsSourceUrl:K,fallbackModelIds:A,shouldRecompute:F});if(f.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let U=W.defaultModelId===void 0?j.provider.defaultModelId?.trim():W.defaultModelId?.trim(),_=U&&f.includes(U)?U:f[0],M={...$.getProviderSettings(Z)??{},provider:Z,baseUrl:Y,model:_};if(B)M.protocol=B;else delete M.protocol;if(H)M.client=H;else delete M.client;if(W.apiKey!==void 0){let T=W.apiKey?.trim()??"";if(T)M.apiKey=T;else delete M.apiKey}if(W.headers!==void 0){let T=aD(W.headers);if(T)M.headers=T;else delete M.headers}if(W.timeoutMs!==void 0)if(typeof W.timeoutMs==="number")M.timeout=W.timeoutMs;else delete M.timeout;return $.saveProviderSettings(M,{setLastUsed:!1}),J.providers[Z]={provider:{name:X,baseUrl:Y,defaultModelId:_,protocol:B,client:H,capabilities:V,modelsSourceUrl:K},models:$Y(f,V)},await X7(Q,J),bW(Z,J.providers[Z]),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:Q,modelsCount:f.length}}async function K7($,W){let Z=W.providerId.trim().toLowerCase();if(!Z)throw Error("providerId is required");let Q=G8($),J=await a6(Q);if(!J.providers[Z])throw Error(`provider "${Z}" does not exist`);return delete J.providers[Z],await X7(Q,J),h0.unregisterProvider(Z),sD($,Z),{providerId:Z,settingsPath:$.getFilePath(),modelsPath:Q}}function ZY($,W,Z={}){let Q=W.trim();if(!Q)throw Error("providerId is required");let J=$.read().providers[Q]?.settings;return $.saveProviderSettings({...J??{},provider:Q},{setLastUsed:!1,tokenSource:Z.tokenSource}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function QY($,W={}){let Z=$.read(),Q=h0.getProviderIds(),J=await Promise.all(Q.map(async(X)=>{let[Y,V]=await Promise.all([h0.getProvider(X),h0.getModelsForProvider(X)]),B=nD(V),H=Z.providers[X]?.settings,G=$.getProviderSettings(X),K=Y?.name??iD(X),F=fg(Y?.capabilities,G?.capabilities),A=Lg(Y?.metadata)??Og(Y);return{provider:{id:X,name:K,models:B.length,color:Fg(X),letter:Kg(K),enabled:Boolean(H),apiKey:G?Hg(G):void 0,oauthAccessTokenPresent:G?Gg(G):void 0,baseUrl:G?.baseUrl??Y?.baseUrl,defaultModelId:Y?.defaultModelId,protocol:G?.protocol??Y?.protocol,client:G?.client??Y?.client,capabilities:F,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:A,configValues:qg(A,G,Y),modelList:B},rank:Dg(Y?.metadata)}}));J.sort((X,Y)=>{if(X.rank!==Y.rank)return X.rank-Y.rank;return X.provider.name.localeCompare(Y.provider.name)||X.provider.id.localeCompare(Y.provider.id)});let j=J.map((X)=>X.provider);if(W.isClinePassEnabled!==!0)j=j.filter((X)=>X.id!==rD);return{providers:j,settingsPath:$.getFilePath()}}async function JY($,W){let Z=$.trim(),Q=await Ag(Z,W),J=nD(Q);return{providerId:Z,models:J}}function H7($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function tD($,W){if(!H7(W))return H7($)?{...$}:void 0;let Z=H7($)?{...$}:{};for(let[Q,J]of Object.entries(W)){if(J==null||J===""){delete Z[Q];continue}if(H7(J)){let j=tD(Z[Q],J);if(j&&Object.keys(j).length>0)Z[Q]=j;else delete Z[Q];continue}Z[Q]=J}return Object.keys(Z).length>0?Z:void 0}function jY($,W){let Z=W.providerId.trim();if(W.enabled===!1){let j=$.read();if(delete j.providers[Z],j.lastUsedProvider===Z)delete j.lastUsedProvider;return $.write(j),{providerId:Z,enabled:!1,settingsPath:$.getFilePath()}}let J={...$.getProviderSettings(Z)??{},provider:Z};for(let j of["apiKey","baseUrl","model","region"])if(Object.hasOwn(W,j)&&typeof W[j]==="string")if(W[j].trim().length===0)delete J[j];else J[j]=W[j];for(let j of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(W,j))J[j]=W[j];for(let j of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(W,j)&&W[j]!=null){let X=tD(J[j],W[j]);if(X)J[j]=X;else delete J[j]}return $.saveProviderSettings(J,{setLastUsed:!1}),{providerId:Z,enabled:!0,settingsPath:$.getFilePath()}}async function XY($,W){let Z=W.trim(),Q=$.getProviderSettings(Z),j=h0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z]?.provider,X=Q?.baseUrl?.trim()||j?.baseUrl?.trim(),Y=ZZ(X,j?.baseUrl,j?.modelsSourceUrl);if(!Q||!j||!X||!Y)return{providerId:Z,refreshed:!1};let V=await G7($,{providerId:Z,name:j.name,baseUrl:X,apiKey:Q.apiKey,headers:Q.headers??null,timeoutMs:Q.timeout??null,modelsSourceUrl:Y,protocol:Q.protocol??j.protocol??null,client:Q.client??j.client??null,capabilities:Q.capabilities??null});return{providerId:Z,refreshed:!0,modelsCount:V.modelsCount}}function YY($){let W=$.trim().toLowerCase(),Z=H0(W);if(Z)return Z.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function VY($,W,Z,Q){let J=H0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let j=j6({onPrompt:async(X)=>X.defaultValue??"",openUrl:Z,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return J.login({settings:W,callbacks:j,telemetry:Q})}function BY($,W,Z,Q,J){return J2({manager:$,providerId:W,settings:Z,credentials:Q,setLastUsed:J?.setLastUsed})}async function HY($,W,Z,Q){let J=j6({onPrompt:async(j)=>j.defaultValue??"",openUrl:Z,onOpenUrlError:({error:j})=>{throw j instanceof Error?j:Error(String(j))}});return B4($,W,{callbacks:J,telemetry:Q})}function GY($){let W=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return W&&W.length>0?W:void 0}var $_={};w($_,{getProviderConfigFields:()=>KY});import*as F7 from"@cline/llms";var Mg=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],Ng={"openai-compatible":{description:"For Azure AI Foundry deployments, use a Base URL ending at /openai/deployments/<deployment> and set the Azure API version.",fields:{azureApiVersion:{label:"Azure API Version (optional)",placeholder:"2025-01-01-preview",note:"Required for Azure AI Foundry deployment URLs.",optional:!0}}},vertex:{mode:"replace",description:"Vertex AI can use Google Cloud Application Default Credentials with a project/region. An API key is optional for supported Gemini models.",fields:{gcpProjectId:{label:"Google Cloud Project ID",placeholder:"my-gcp-project"},gcpRegion:{label:"Google Cloud Region",placeholder:"us-central1",defaultValue:"us-central1"},apiKey:{label:"API Key (optional)",placeholder:"Leave blank to use Google Cloud credentials",optional:!0}}},bedrock:{mode:"replace",description:"AWS region is required for Bedrock. It can be auto-filled from AWS_REGION, AWS_DEFAULT_REGION, or ~/.aws/config.",fields:{awsRegion:{label:"AWS Region",placeholder:"us-east-1"},apiKey:{label:"AWS Bedrock API Key (optional)",placeholder:"Leave blank to use AWS profile/default chain",optional:!0},awsProfile:{label:"AWS Profile Name (optional)",placeholder:"default",optional:!0}}},ollama:{fields:{apiKey:{note:"Keep empty if no API key for local inference."}}},sapaicore:{mode:"replace",description:"SAP AI Core uses OAuth client credentials and an AI Core API URL, not a generic API key.",fields:{baseUrl:{label:"AI Core Base URL",placeholder:"https://api.ai.<region>.aws.ml.hana.ondemand.com"},sapClientId:{label:"Client ID",placeholder:"sb-...|xsuaa_std!b..."},sapClientSecret:{label:"Client Secret",placeholder:"SAP AI Core client secret"},sapTokenUrl:{label:"Token URL",placeholder:"https://<subdomain>.authentication.sap.hana.ondemand.com"},sapResourceGroup:{label:"Resource Group",placeholder:"default",optional:!0},sapDeploymentId:{label:"Deployment ID",placeholder:"SAP AI Core deployment id",optional:!0}}}};function Rg($,W){let Z={};for(let Q of Mg){let J=$[Q],j=W[Q];if(J||j)Z[Q]={...J,...j}}return Z}function Eg($){let W=Ng[$.providerId];if(!W)return $;return{...$,description:W.description??$.description,fields:W.mode==="replace"?W.fields:Rg($.fields,W.fields)}}var wg=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function Cg($,W){if(!W?.provider.baseUrl)return!1;if(W.provider.source!=="system")return!0;return wg.has($)}function KY($){let W=F7.normalizeProviderId($);if(Q2(W))return{providerId:W,authMethod:"oauth",fields:{}};let Z=F7.MODEL_COLLECTIONS_BY_PROVIDER_ID[W];if(Z?.provider.capabilities?.includes("local-auth"))return{providerId:W,authMethod:"local",fields:{}};let Q=Z?.provider.baseUrl,J={apiKey:{}};if(Cg(W,Z))J.baseUrl={defaultValue:Q};return Eg({providerId:W,authMethod:"api-key",fields:J})}var J_={};w(J_,{resolveLegacyClineAuth:()=>UY,migrateLegacyProviderSettings:()=>yW});import{existsSync as Pg,readFileSync as Sg}from"node:fs";import{dirname as bg,join as FY}from"node:path";import*as o6 from"@cline/llms";import{resolveClineDataDir as yg}from"@cline/shared/storage";var A7="openai",Q_=o6.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,W_=128000;function UY($){let W=$?.trim();if(!W)return;try{let Z=JSON.parse(W);if(!Z)return;let Q=typeof Z.expiresAt==="number"&&Number.isFinite(Z.expiresAt)?Z.expiresAt<10000000000?Z.expiresAt*1000:Z.expiresAt:void 0;return{accessToken:Z.idToken,refreshToken:Z.refreshToken,expiresAt:Q,accountId:Z.userInfo?.id}}catch{return}}function b($){let W=$?.trim();return W?W:void 0}function hg($){return $==="credentials"?"iam":$}function Z_($){if(!Pg($))return;try{let W=Sg($,"utf8"),Z=JSON.parse(W);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function kg($){let W=$.dataDir??yg(),Z=$.globalStatePath??FY(W,"globalState.json"),Q=$.secretsPath??FY(W,"secrets.json"),J=Z_(Z),j=Z_(Q);if(!J&&!j)return;return{globalState:J??{},secrets:j??{}}}function AY($){if($===A7)return Q_;return $}function Ig($,W,Z,Q){let J=Z==="plan"?"planMode":"actMode",j=W===Q?b(Z==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,Y={openrouter:`${J}OpenRouterModelId`,cline:`${J}ClineModelId`,openai:`${J}OpenAiModelId`,ollama:`${J}OllamaModelId`,lmstudio:`${J}LmStudioModelId`,litellm:`${J}LiteLlmModelId`,requesty:`${J}RequestyModelId`,together:`${J}TogetherModelId`,fireworks:`${J}FireworksModelId`,sapaicore:`${J}SapAiCoreModelId`,groq:`${J}GroqModelId`,baseten:`${J}BasetenModelId`,huggingface:`${J}HuggingFaceModelId`,"huawei-cloud-maas":`${J}HuaweiCloudMaasModelId`,oca:`${J}OcaModelId`,aihubmix:`${J}AihubmixModelId`,hicap:`${J}HicapModelId`,nousResearch:`${J}NousResearchModelId`,"vercel-ai-gateway":`${J}VercelAiGatewayModelId`}[W];return(Y?b(typeof $[Y]==="string"?$[Y]:void 0):void 0)??j}function xg($,W,Z){let Q=Z==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,J=[...W==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...W==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(b).find(Boolean),j=J==="none"||J==="low"||J==="medium"||J==="high"||J==="xhigh"?J:void 0,X=typeof Q==="number"&&Number.isInteger(Q)&&Q>0?Q:void 0;if(!j&&X===void 0)return;return{...j?{effort:j}:{},...X!==void 0?{budgetTokens:X}:{}}}function gg($){let W=$["openai-codex-oauth-credentials"];if(!W)return;try{let Z=JSON.parse(W),Q=b(Z.access_token),J=b(Z.refresh_token),j=b(Z.accountId);if(!Q&&!J&&!j)return;return{...Q?{apiKey:Q}:{},auth:{...Q?{accessToken:Q}:{},...J?{refreshToken:J}:{},...j?{accountId:j}:{}}}}catch{return}}function mg($){let W=o6.getGeneratedModelsForProvider($),Q=o6.getProviderCollectionSync($)?.provider.defaultModelId;if(Q&&W[Q])return Q;return Object.keys(W)[0]??void 0}function vg($,W,Z,Q){let J=AY($),j=b(Q==="plan"?W.planModeApiProvider:W.actModeApiProvider),X=Ig(W,$,Q,j)??mg(J),Y=xg(W,J,Q),V=typeof W.requestTimeoutMs==="number"&&Number.isInteger(W.requestTimeoutMs)&&W.requestTimeoutMs>0?W.requestTimeoutMs:void 0,B={anthropic:Z.apiKey,cline:Z.clineApiKey,openai:Z.openAiApiKey,"openai-native":Z.openAiNativeApiKey,openrouter:Z.openRouterApiKey,bedrock:Z.awsBedrockApiKey,gemini:Z.geminiApiKey,ollama:Z.ollamaApiKey,deepseek:Z.deepSeekApiKey,requesty:Z.requestyApiKey,together:Z.togetherApiKey,fireworks:Z.fireworksApiKey,qwen:Z.qwenApiKey,doubao:Z.doubaoApiKey,mistral:Z.mistralApiKey,litellm:Z.liteLlmApiKey,asksage:Z.asksageApiKey,xai:Z.xaiApiKey,moonshot:Z.moonshotApiKey,zai:Z.zaiApiKey,huggingface:Z.huggingFaceApiKey,nebius:Z.nebiusApiKey,sambanova:Z.sambanovaApiKey,cerebras:Z.cerebrasApiKey,groq:Z.groqApiKey,"huawei-cloud-maas":Z.huaweiCloudMaasApiKey,baseten:Z.basetenApiKey,"vercel-ai-gateway":Z.vercelAiGatewayApiKey,dify:Z.difyApiKey,minimax:Z.minimaxApiKey,hicap:Z.hicapApiKey,aihubmix:Z.aihubmixApiKey,nousResearch:Z.nousResearchApiKey,oca:Z.ocaApiKey},H={};if($==="openai-codex")Object.assign(H,gg(Z));if($==="cline")try{let _=b(Z["cline:clineAccountId"]);if(_)H.auth={...H.auth??{},...UY(_)}}catch{}if($===A7&&W.openAiHeaders)H.headers=W.openAiHeaders;if($==="bedrock"){let _=hg(W.awsAuthentication),D=_==="profile"||W.awsUseProfile===!0;H.aws={accessKey:b(Z.awsAccessKey),secretKey:b(Z.awsSecretKey),sessionToken:b(Z.awsSessionToken),region:b(W.awsRegion),authentication:_,profile:D?b(W.awsProfile):void 0,usePromptCache:W.awsBedrockUsePromptCache,useCrossRegionInference:W.awsUseCrossRegionInference,useGlobalInference:W.awsUseGlobalInference,endpoint:b(W.awsBedrockEndpoint),customModelBaseId:b(Q==="plan"?W.planModeAwsBedrockCustomModelBaseId:W.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")H.gcp={projectId:b(W.vertexProjectId),region:b(W.vertexRegion)};if($===A7&&(W.azureApiVersion||W.azureIdentity!==void 0))H.azure={apiVersion:b(W.azureApiVersion),useIdentity:W.azureIdentity};if($==="sapaicore"){let _=W.sapAiCoreUseOrchestrationMode??!0;H.sap={clientId:b(Z.sapAiCoreClientId),clientSecret:b(Z.sapAiCoreClientSecret),tokenUrl:b(W.sapAiCoreTokenUrl),resourceGroup:b(W.sapAiResourceGroup),deploymentId:_?void 0:b(Q==="plan"?W.planModeSapAiCoreDeploymentId:W.actModeSapAiCoreDeploymentId),useOrchestrationMode:_}}if($==="oca"){H.oca={mode:W.ocaMode};let _=b(Z.ocaRefreshToken);if(_)H.auth={...H.auth??{},refreshToken:_}}if($==="qwen")H.apiLine=W.qwenApiLine;if($==="moonshot")H.apiLine=W.moonshotApiLine;if($==="zai")H.apiLine=W.zaiApiLine;if($==="minimax")H.apiLine=W.minimaxApiLine;let G={anthropic:W.anthropicBaseUrl,openai:W.openAiBaseUrl,ollama:W.ollamaBaseUrl,lmstudio:W.lmStudioBaseUrl,litellm:W.liteLlmBaseUrl,gemini:W.geminiBaseUrl,requesty:W.requestyBaseUrl,asksage:W.asksageApiUrl,dify:W.difyBaseUrl,oca:W.ocaBaseUrl,aihubmix:W.aihubmixBaseUrl,sapaicore:W.sapAiCoreBaseUrl},K=b(B[$]),F=b(G[$]),A={provider:J,...K?{apiKey:K}:{},...X?{model:X}:{},...F?{baseUrl:F}:{},...Y?{reasoning:Y}:{},...V?{timeout:V}:{},...H},f=W6.safeParse(A);if(!f.success)return;return Object.keys(A).filter((_)=>_!=="provider").length>0?f.data:void 0}function cg($,W){if($!==Q_)return;if(!W.baseUrl||!W.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:W.baseUrl,defaultModelId:W.model},models:{[W.model]:{id:W.model,name:W.model,contextWindow:W_,maxInputTokens:W_,capabilities:["streaming","tools","images"]}}}}function ug($,W){let Z=new Set;for(let J of[$.actModeApiProvider,$.planModeApiProvider]){let j=b(J);if(j)Z.add(j)}if(b(W.apiKey))Z.add("anthropic");if(b(W.openRouterApiKey))Z.add("openrouter");if(b(W.openAiApiKey))Z.add(A7);if(b(W.openAiNativeApiKey))Z.add("openai-native");if(b(W["openai-codex-oauth-credentials"]))Z.add("openai-codex");if(b(W.geminiApiKey))Z.add("gemini");if(b(W.ollamaApiKey))Z.add("ollama");if(b(W.awsAccessKey)||b(W.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||b($.awsProfile))Z.add("bedrock");if(b($.vertexProjectId)||b($.vertexRegion))Z.add("vertex");if(b(W.clineApiKey))Z.add("cline");let Q=UY(b(W["cline:clineAccountId"]));if(Q?.accessToken||Q?.refreshToken||Q?.accountId)Z.add("cline");if(b(W.ocaApiKey))Z.add("oca");if(b(W.sapAiCoreClientId)||b(W.sapAiCoreClientSecret)||b($.sapAiCoreTokenUrl)||b($.sapAiCoreBaseUrl)||b($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Z.add("sapaicore");return Z}function yW($){let W=$.providerSettingsManager.read(),Z=kg($);if(!Z)return{migrated:!1,providerCount:Object.keys(W.providers).length,lastUsedProvider:W.lastUsedProvider};let{globalState:Q,secrets:J}=Z,j=Q.mode==="plan"?"plan":"act",X=ug(Q,J),Y=k$();Y.providers={...W.providers},Y.lastUsedProvider=W.lastUsedProvider;let V=new Date().toISOString(),B=0,H=FY(bg($.providerSettingsManager.getFilePath()),"models.json"),G=tX(H),K=0;for(let f of X){let U=AY(f);if(Y.providers[U])continue;let _=vg(f,Q,J,j);if(!_)continue;Y.providers[U]={settings:_,updatedAt:V,tokenSource:"migration"},B+=1;let D=cg(U,_);if(D&&!G.providers[U])G.providers[U]=D,K+=1}if(B===0&&K===0)return{migrated:!1,providerCount:Object.keys(W.providers).length,lastUsedProvider:W.lastUsedProvider};let F=b(j==="plan"?Q.planModeApiProvider:Q.actModeApiProvider),A=F?AY(F):void 0;if(Y.lastUsedProvider=W.lastUsedProvider??(A&&Y.providers[A]?A:Object.keys(Y.providers)[0]),$.providerSettingsManager.write(Y),K>0)xD(H,G);return{migrated:B>0||K>0,providerCount:Object.keys(Y.providers).length,lastUsedProvider:Y.lastUsedProvider}}bQ();O0();UW();var j_={};w(j_,{FileTeamPersistenceStore:()=>U7});import{appendFileSync as dg,existsSync as fY,mkdirSync as lg,readFileSync as pg,renameSync as rg,unlinkSync as ig,writeFileSync as ng}from"node:fs";import{join as DY}from"node:path";import{resolveTeamDataDir as ag}from"@cline/shared/storage";function og($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class U7{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let W=og($.teamName),Z=$.baseDir?.trim()||ag();this.dirPath=DY(Z,W),this.statePath=DY(this.dirPath,"state.json"),this.taskHistoryPath=DY(this.dirPath,"task-history.jsonl")}loadState(){if(!fY(this.statePath))return;try{let $=pg(this.statePath,"utf8"),W=JSON.parse($);if(W.version!==1||!W.teamState)return;for(let Z of W.teammates??[])this.teammateSpecs.set(Z.agentId,Z);return HU(W.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec($){this.teammateSpecs.set($.agentId,$)}removeTeammateSpec($){this.teammateSpecs.delete($)}persist($){if(!this.hasPersistableState($)){this.clearPersistedState();return}this.ensureDir();let W={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Z=`${this.statePath}.tmp`;ng(Z,`${JSON.stringify(W,null,2)}
757
+ `,"utf8"),rg(Z,this.statePath)}appendTaskHistory($){let W={};switch($.type){case"team_task_updated":W=$.task;break;case"team_message":W={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":W={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":W={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":W={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":W={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),dg(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:W})}
758
+ `,"utf8")}ensureDir(){if(!fY(this.dirPath))lg(this.dirPath,{recursive:!0})}hasPersistableState($){let W=$.exportState();if(this.teammateSpecs.size>0)return!0;if(W.members.some((Z)=>Z.role==="teammate"))return!0;return W.tasks.length>0||W.mailbox.length>0||W.missionLog.length>0}clearPersistedState(){if(fY(this.statePath))ig(this.statePath)}}var X_={};w(X_,{ChatViewStateSchema:()=>_Y,ChatSummarySchema:()=>O7,ChatSessionStatusSchema:()=>D7,ChatSessionConfigSchema:()=>f7,ChatMessageSchema:()=>L7,ChatMessageRoleSchema:()=>_7});import{z as I}from"zod";var f7=I.object({workspaceRoot:I.string().min(1),cwd:I.string().optional(),provider:I.string().min(1),model:I.string().min(1),mode:I.enum(["act","plan"]).default("act"),apiKey:I.string(),systemPrompt:I.string().optional(),rules:I.string().optional(),maxIterations:I.number().int().positive().optional(),enableTools:I.boolean(),enableSpawn:I.boolean().optional(),enableTeams:I.boolean().optional(),autoApproveTools:I.boolean().optional(),missionStepInterval:I.number().int().positive().optional(),missionTimeIntervalMs:I.number().int().positive().optional()}),D7=I.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),_7=I.enum(["user","assistant","tool","system","status","error"]),L7=I.object({id:I.string().min(1),sessionId:I.string().nullable(),role:_7,content:I.string(),createdAt:I.number().int().nonnegative(),meta:I.object({stream:I.enum(["stdout","stderr"]).optional(),toolName:I.string().optional(),iteration:I.number().int().nonnegative().optional(),agentId:I.string().optional(),conversationId:I.string().optional(),hookEventName:I.string().optional(),inputTokens:I.number().int().nonnegative().optional(),outputTokens:I.number().int().nonnegative().optional(),checkpoint:I.object({ref:I.string(),createdAt:I.number().int().nonnegative(),runCount:I.number().int().positive(),kind:I.enum(["stash","commit"]).optional()}).optional()}).optional()}),O7=I.object({toolCalls:I.number().int().nonnegative(),tokensIn:I.number().int().nonnegative(),tokensOut:I.number().int().nonnegative()}),_Y=I.object({sessionId:I.string().nullable(),status:D7,config:f7,messages:I.array(L7),rawTranscript:I.string(),error:I.string().nullable(),summary:O7});var Y_={};w(Y_,{CORE_BUILD_VERSION:()=>hW});var hW=u8;import{Agent as im,createAgentRuntime as nm}from"@cline/agents";var V_={};w(V_,{fetchClineRecommendedModels:()=>OY,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>T7});import{getClineEnvironmentConfig as sg}from"@cline/shared";var tg=5000,T7={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}],clinePass:[]};function eg($){return{recommended:$.recommended.map((W)=>({...W,tags:[...W.tags]})),free:$.free.map((W)=>({...W,tags:[...W.tags]})),clinePass:$.clinePass.map((W)=>({...W,tags:[...W.tags]}))}}function LY($){if(!$||typeof $!=="object")return null;let W=$;if(typeof W.id!=="string"||W.id.length===0)return null;return{id:W.id,name:typeof W.name==="string"&&W.name.length>0?W.name:W.id,description:typeof W.description==="string"?W.description:"",tags:Array.isArray(W.tags)?W.tags.filter((Z)=>typeof Z==="string"):[]}}function $m($){if(!$||typeof $!=="object")return null;let W=$,Z=Array.isArray(W.recommended)?W.recommended:[],Q=Array.isArray(W.free)?W.free:[],J=Array.isArray(W.clinePass)?W.clinePass:[],j=Z.map(LY).filter((V)=>V!==null),X=Q.map(LY).filter((V)=>V!==null),Y=J.map(LY).filter((V)=>V!==null);if(j.length===0&&X.length===0&&Y.length===0)return null;return{recommended:j,free:X,clinePass:Y}}function Wm($){let W=$.baseUrl?.trim();if(W)return W;let Z=sg().apiBaseUrl;try{return($.providerSettingsManager??new X1).getProviderSettings("cline")?.baseUrl?.trim()||Z}catch{return Z}}async function Zm($,W,Z){let Q=new AbortController,J=setTimeout(()=>Q.abort(),Z);try{return await $(W,{signal:Q.signal})}finally{clearTimeout(J)}}async function OY($={}){try{let W=Wm($),Z=$.fetchImpl??fetch,Q=await Zm(Z,`${W}/api/v1/ai/cline/recommended-models`,$.timeoutMs??tg);if(!Q.ok)throw Error(`HTTP ${Q.status}`);let J=await Q.json(),j=$m(J);if(j)return j}catch{}return eg(T7)}var B_={};w(B_,{loadLlmsConfigFromFile:()=>zY,defineLlmsConfig:()=>TY});import{readFile as Qm}from"node:fs/promises";import Jm from"node:path";function TY($){return $}async function zY($){let W=Jm.resolve($),Z=await Qm(W,"utf8"),Q;try{Q=JSON.parse(Z)}catch(J){let j=J instanceof Error?J.message:String(J);throw Error(`Failed to parse JSON config at "${W}": ${j}`)}return jm(Q,W)}function jm($,W){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${W}": expected an object.`);let Q=$.providers;if(!Array.isArray(Q))throw Error(`Invalid llms config in "${W}": "providers" must be an array.`);if(!Q.length)throw Error(`Invalid llms config in "${W}": "providers" cannot be empty.`);return $}var U_={};w(U_,{createLlmsSdk:()=>MY,DefaultLlmsSdk:()=>kW});import{BUILT_IN_PROVIDER_IDS as K_,createHandler as Vm,createHandlerAsync as Bm,getProviderCollection as Hm,hasProvider as F_,registerAsyncHandler as Gm,registerHandler as Km,registerModel as Fm,registerProvider as A_}from"@cline/llms";function H_($){return $?{...$}:{}}function Xm($,W){if($)return $;if(!W)return;let Z=globalThis.process;if(!Z?.env)return;return Z.env[W]}function Ym($,W){if(!W.length)throw Error(`Provider "${$}" must include at least one model.`)}function G_($){let W=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:W,defaultModel:$.collection.provider.defaultModelId,modelCount:W.length}}class qY{providers=new Map;register($){Ym($.id,$.models);let W=$.defaultModel??$.models[0];if(!W)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(W))throw Error(`Default model "${W}" is not included in configured models for "${$.id}".`);let Z=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Z?.models??[],...$.models]),defaultModel:W,defaults:{...Z?.defaults??{},...H_($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:Xm($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...H_($.settings)}})}registerModel($,W){let Z=this.providers.get($);if(!Z){this.providers.set($,{id:$,models:new Set([W]),defaultModel:W,defaults:{}});return}Z.models.add(W)}createHandlerConfig($){let W=this.require($.providerId),Z=$.modelId??W.defaultModel;if(!W.models.has(Z))throw Error(`Model "${Z}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Z,...W.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,W){return this.providers.get($)?.models.has(W)??!1}require($){let W=this.providers.get($);if(!W)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return W}}class kW{configuredProviders=new qY;constructor($){this.applyConfig($)}createHandler($){return Vm(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return Bm(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(A_($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)Km($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)Gm($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let W=$.exposeModels??Object.keys($.models),Z=$.defaultModel??W[0];if(!Z)throw Error(`Provider "${$.id}" must define a default model.`);A_({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Z,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:W,defaultModel:Z,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){Fm($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...K_]}async getBuiltInProviders(){return(await Promise.all(K_.map((W)=>Hm(W)))).filter((W)=>W!==void 0).map((W)=>G_({collection:W}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,W){return this.configuredProviders.hasModel($,W)}applyConfig($){for(let W of $.providers)this.configuredProviders.registerSelectionConfig(W);for(let W of $.models??[])this.registerModel(W);for(let W of $.customProviders??[])this.registerProvider(W);for(let W of this.configuredProviders.list()){let Z=F_(W.id),Q=this.configuredProviders.createHandlerConfig({providerId:W.id,modelId:W.defaultModel}).routingProviderId,J=typeof Q==="string"&&F_(Q);if(!Z&&!J)throw Error(`Provider "${W.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function MY($){return new kW($)}rj();async function Am(){return Promise.resolve().then(() => (bQ(),nf))}function Wv(){return new Date().toISOString()}var Zv="cline",Qv="cline-pass";function Jv($){if(L_($)!=="providers.json")return;let W=RY($);if(L_(W)!=="settings")return;return RY(W)}class X1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??$v(),this.dataDir=$.dataDir??Jv(this.filePath),this.dataDir||!$.filePath)yW({providerSettingsManager:this,dataDir:this.dataDir});if(lD(this),Y7(this.read()),NY(this.filePath))try{__(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!NY(this.filePath))return k$();try{let $=om(this.filePath,"utf8"),W=JSON.parse($),Z=Z6.safeParse(W);if(Z.success){Y7(Z.data);let Q=Z.data.providers.cline?.settings?.auth;return Z0(`providers.read providers=[${Object.keys(Z.data.providers).join(",")}] lastUsed=${Z.data.lastUsedProvider??"none"} clineAuthPresent=${!!Q?.accessToken} clineAccessTokenHash=${M0(Q?.accessToken)} clineRefreshTokenHash=${M0(Q?.refreshToken)}`),Z.data}}catch{}return k$()}write($){let W=Z6.parse($),Z=RY(this.filePath);if(!NY(Z))am(Z,{recursive:!0,mode:448});let Q=`${this.filePath}.${process.pid}.tmp`;try{em(Q,`${JSON.stringify(W,null,2)}
759
+ `,{encoding:"utf8",mode:384}),sm(Q,this.filePath)}catch(J){throw tm(Q,{force:!0}),J}try{__(this.filePath,384)}catch{}Y7(W)}saveProviderSettings($,W={}){let Z=W6.parse($),Q=this.read(),J=Z.provider,j=W.setLastUsed!==!1,X=Q.providers[J],Y=W.tokenSource??X?.tokenSource??"manual",V={...Q,providers:{...Q.providers,[J]:{settings:Z,updatedAt:Wv(),tokenSource:Y}},lastUsedProvider:j?J:Q.lastUsedProvider};this.write(V);let B=Q.providers.cline?.settings?.auth,H=Z.provider==="cline"?Z.auth:V.providers.cline?.settings?.auth,G=!!B?.accessToken&&!H?.accessToken;return Z0(`providers.save providerId=${J} tokenSource=${Y} clineAuthWasPresent=${!!B?.accessToken} clineAuthIsPresent=${!!H?.accessToken} authDropped=${G}`),V}resolveProviderSettings($,W){let Z=$.providers[W]?.settings,J=H0(W)?.storageProviderId;if(!J||J===W)return Z;let j=$.providers[J]?.settings;if(!j)return Z;return W6.parse({...j.auth?{auth:j.auth}:{},...j.apiKey?{apiKey:j.apiKey}:{},...j.baseUrl?{baseUrl:j.baseUrl}:{},...Z??{},provider:W})}getProviderSettings($){let W=this.read();return this.resolveProviderSettings(W,$)}resolveLastUsedProviderId($,W){let Z=$.lastUsedProvider;if(Z===Qv&&W.isClinePassEnabled===!1)return Zv;return Z}getLastUsedProviderSettings($={}){let W=this.read(),Z=this.resolveLastUsedProviderId(W,$);if(!Z)return;return this.resolveProviderSettings(W,Z)}getProviderConfig($,W){let Z=this.getProviderSettings($);if(!Z)return;return s0(Z,W)}getLastUsedProviderConfig($={}){let W=this.getLastUsedProviderSettings($);if(!W)return;return s0(W,$)}async refreshCatalog(){try{await e8({})}catch{}}}O0();z6();function jv($,W){let Z=$?.expiresAt,Q=W?.expiresAt;return $?.accessToken===W?.accessToken&&$?.refreshToken===W?.refreshToken&&$?.accountId===W?.accountId&&Z===Q}class z7 extends Error{providerId;constructor($){super(`OAuth credentials for provider "${$}" are no longer valid. Re-run authentication for this provider.`);this.name="OAuthReauthRequiredError",this.providerId=$}}class EY{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new X1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let W=H0($.providerId);if(!W)return null;return this.resolveWithSingleFlight(W.providerId,W.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,W,Z=!1){let Q=this.refreshInFlight.get(W);if(Q)return Q;let J=this.resolveProviderApiKeyInternal($,W,Z).catch((j)=>{throw j}).finally(()=>{this.refreshInFlight.delete(W)});return this.refreshInFlight.set(W,J),J}async resolveProviderApiKeyInternal($,W,Z){let Q=H0($);if(!Q)return null;let J=this.providerSettingsManager.getProviderSettings(W);if(!J)return Z0(`oauth.resolve providerId=${$} storageProviderId=${W} outcome=no_settings`),null;let j=H4($,J);if(!j)return Z0(`oauth.resolve providerId=${$} storageProviderId=${W} outcome=no_credentials`),null;Z0(`oauth.resolve.start providerId=${$} storageProviderId=${W} forceRefresh=${Z} accessTokenHash=${M0(j.access)} refreshTokenHash=${M0(j.refresh)}`);let X=await Q.refresh({settings:J,credentials:j,forceRefresh:Z,telemetry:this.telemetry});if(!X)throw Z0(`oauth.resolve providerId=${$} outcome=refresh_returned_null`),new z7($);let Y=J2({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:X,setLastUsed:!1,save:!1}),V=!jv(J.auth,Y.auth);if(V)Z0(`oauth.resolve.refreshed providerId=${$} newAccessTokenHash=${M0(X.access)} newRefreshTokenHash=${M0(X.refresh)} savingToDisk=true`),this.providerSettingsManager.saveProviderSettings(Y,{setLastUsed:!1,tokenSource:"oauth"});else Z0(`oauth.resolve providerId=${$} outcome=not_refreshed`);return{apiKey:Q.getApiKey(Y)??X.access,accountId:X.accountId,refreshed:V}}}import{normalizeUserInput as Xv}from"@cline/shared";import{nanoid as Yv}from"nanoid";class O_{list($){return $?Y1($):[]}update($,W){if(!$)return{sessionId:W.sessionId,prompts:[],updated:!1};let Z=W.promptId.trim(),Q=$.pendingPrompts.findIndex((V)=>V.id===Z);if(Q<0)return{sessionId:W.sessionId,prompts:Y1($),updated:!1};let J=$.pendingPrompts[Q];if(!J)return{sessionId:W.sessionId,prompts:Y1($),updated:!1};let j=W.prompt===void 0?J.prompt:Xv(W.prompt).trim();if(!j)throw Error("prompt cannot be empty");let X=W.delivery??J.delivery,Y={...J,prompt:j,mode:W.mode??J.mode,delivery:X};return $.pendingPrompts.splice(Q,1),Vv($,Y,Q,J.delivery),{sessionId:W.sessionId,prompts:Y1($),prompt:q7(Y),updated:!0}}delete($,W){if(!$)return{sessionId:W.sessionId,prompts:[],removed:!1};let Z=W.promptId.trim(),Q=$.pendingPrompts.findIndex((j)=>j.id===Z);if(Q<0)return{sessionId:W.sessionId,prompts:Y1($),removed:!1};let[J]=$.pendingPrompts.splice(Q,1);return{sessionId:W.sessionId,prompts:Y1($),prompt:J?q7(J):void 0,removed:!0}}enqueue($,W){let{prompt:Z,mode:Q,delivery:J,userImages:j,userFiles:X}=W,Y=$.pendingPrompts.findIndex((V)=>V.prompt===Z);if(Y>=0){let[V]=$.pendingPrompts.splice(Y,1),B={...V,prompt:Z,mode:Q??V.mode,userImages:j??V.userImages,userFiles:X??V.userFiles};if(J==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...B,delivery:"steer"});else $.pendingPrompts.push(B)}else{let V={id:`pending_${Date.now()}_${Yv(5)}`,prompt:Z,mode:Q,delivery:J,userImages:j,userFiles:X};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return Y1($)}consumeSteer($){let W=$.pendingPrompts.findIndex((Q)=>Q.delivery==="steer");if(W<0)return{prompts:Y1($)};let[Z]=$.pendingPrompts.splice(W,1);return{entry:Z,prompts:Y1($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:Y1($)}}requeueFront($,W){return $.pendingPrompts.unshift(W),Y1($)}clear($){return $.pendingPrompts.length=0,[]}}class wY{deps;service=new O_;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let W=this.deps.getSession($.sessionId);if(!W||W.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Z=this.service.update(W,$);return this.emitPrompts(W),this.scheduleDrain($.sessionId,W),Z}delete($){let W=this.deps.getSession($.sessionId);if(!W||W.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Z=this.service.delete(W,$);return this.emitPrompts(W),this.scheduleDrain($.sessionId,W),Z}enqueue($,W){let Z=this.deps.getSession($);if(!Z||Z.aborting)return;this.service.enqueue(Z,W),this.emitPrompts(Z),this.scheduleDrain($,Z)}consumeSteer($){let W=this.deps.getSession($);if(!W)return;let{entry:Z}=this.service.consumeSteer(W);if(!Z)return;return this.emitPrompts(W),this.emitSubmitted(W,Z),Z}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:Y1($)}})}scheduleDrain($,W){if(W.pendingPrompts.length===0||W.aborting||W.drainingPendingPrompts||!W.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let W=this.deps.getSession($);if(!W)return;if(W.aborting||W.drainingPendingPrompts)return;if(!W.agent.canStartRun())return;let{entry:Z}=this.service.shiftNext(W);if(!Z)return;this.emitPrompts(W),this.emitSubmitted(W,Z),W.drainingPendingPrompts=!0;let Q=!0;try{await this.deps.send({sessionId:$,prompt:Z.prompt,...Z.mode?{mode:Z.mode}:{},userImages:Z.userImages,userFiles:Z.userFiles})}catch{Q=!1,this.service.requeueFront(W,Z),this.emitPrompts(W)}finally{if(W.drainingPendingPrompts=!1,Q&&W.pendingPrompts.length>0&&W.status!=="failed"&&W.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,W){let Z=q7(W);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Z.id,prompt:Z.prompt,delivery:Z.delivery,attachmentCount:Z.attachmentCount,userImages:Z.userImages,userFiles:Z.userFiles}})}}function q7($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function Y1($){return $.pendingPrompts.map(q7)}function Vv($,W,Z,Q){if(W.delivery==="steer")$.pendingPrompts.unshift(W);else if(Q==="steer")$.pendingPrompts.push(W);else $.pendingPrompts.splice(Z,0,W)}O0();class PY{deps;constructor($){this.deps=$}dispatchAgentEvent($,W,Z){let Q=this.deps.getSession($),J={sessionId:$,config:W,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},j=h3(Z),X=!!Q&&(!j.agentId||j.agentId===CY(Q.agent));k3(J,Z,X?{isPrimaryAgentEvent:!0,agentId:CY(Q.agent),conversationId:Q.agent.getConversationId(),...Q?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,W){let Z=this.deps.getSession($);if(Z){if(Rj(Z,W),W.type==="agent_event"){let Q={sessionId:$,config:Z.config,liveSession:Z,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};k3(Q,W.event,{agentId:W.agentId,teamRole:"teammate",teamAgentId:W.agentId,isPrimaryAgentEvent:!1})}if(W.type==="teammate_spawned"){let Q=a1({agentId:W.teammate.runtimeAgentId??W.agentId,conversationId:W.teammate.conversationId,parentAgentId:W.teammate.parentAgentId,createdByAgentId:CY(Z.agent),teamId:Z.runtime.teamRuntime?.getTeamId(),teamName:Z.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:W.agentId});if(Q)f$(Z.config.telemetry,{ulid:$,modelId:W.teammate.modelId??Z.config.modelId,provider:Z.config.providerId,...Q})}}if(await Ej($,W,this.deps.invokeBackendOptional),Z)wj(Z,$,W,this.deps.emit)}async handlePluginEvent($,W,Z){if(W.name==="plugin_log"){this.handlePluginLog($,W.payload);return}if(W.name==="automation_event"){let V=this.deps.getSession($)?.config.extensionContext?.automation??Z;if(!V)return;let B=W.payload&&typeof W.payload==="object"?W.payload:void 0;if(!B)return;await V.ingestEvent(B);return}if(W.name!=="steer_message"&&W.name!=="queue_message"&&W.name!=="pending_prompt")return;let Q=W.payload&&typeof W.payload==="object"?W.payload:void 0,J=typeof Q?.sessionId==="string"&&Q.sessionId.trim().length>0?Q.sessionId.trim():$,j=typeof Q?.prompt==="string"?Q.prompt.trim():"";if(!j)return;let X=W.name==="steer_message"?"steer":W.name==="queue_message"?"queue":Q?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(J,{prompt:j,delivery:X})}handlePluginLog($,W,Z){let Q=this.deps.getSession($),J=Z??Q?.config.extensionContext?.logger??Q?.config.logger;if(!J||!W||typeof W!=="object")return;let j=W,X=typeof j.message==="string"?j.message:"";if(!X)return;let Y=j.metadata&&typeof j.metadata==="object"?{...j.metadata}:{};if(Y.sessionId??=$,typeof j.pluginName==="string"&&j.pluginName)Y.pluginName=j.pluginName;if(j.level==="debug"){J.debug(X,Y);return}if(j.level==="error"){if(J.error)J.error(X,Y);else J.log(X,{...Y,severity:"error"});return}J.log(X,Y)}}function CY($){return $.getAgentId()}function SY($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:o1($.config),teamName:$.config.teamName?.trim()||void 0,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,parentSessionId:typeof $.sessionMetadata?.parentSessionId==="string"?$.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof $.sessionMetadata?.parentAgentId==="string"?$.sessionMetadata.parentAgentId:void 0,agentId:typeof $.sessionMetadata?.agentId==="string"?$.sessionMetadata.agentId:void 0,conversationId:typeof $.sessionMetadata?.conversationId==="string"?$.sessionMetadata.conversationId:void 0,isSubagent:typeof $.sessionMetadata?.isSubagent==="boolean"?$.sessionMetadata.isSubagent:!1,prompt:$.pendingPrompt,metadata:$.sessionMetadata,messagesPath:$.artifacts?.messagesPath,updatedAt:$.updatedAt??$.endedAt??$.startedAt}}function bY($,W){let Z=$[W];return typeof Z==="function"?Z:null}async function T_($,W,...Z){let Q=bY($,W);if(!Q)throw Error(`session service method not available: ${W}`);return Promise.resolve(Q.apply($,Z))}async function z_($,W,...Z){let Q=bY($,W);if(!Q)return;await Promise.resolve(Q.apply($,Z))}async function q_($,W,...Z){let Q=bY($,W);if(!Q)return;return await Promise.resolve(Q.apply($,Z))}U1();O0();function yY($,W,Z){return{onSubAgentEvent:(Q)=>$.onAgentEvent(Z,W,Q),onSubAgentStart:(Q)=>{let J=$.getSession(Z)?.runtime.teamRuntime;$.subAgentStarts.set(Q.subAgentId,{startedAt:Date.now(),rootSessionId:Z});let j=a1({agentId:Q.subAgentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:Q.parentAgentId});if(j)f$(W.telemetry,{ulid:Z,modelId:W.modelId,provider:W.providerId,...j});$4(W.telemetry,{event:"started",ulid:Z,durationMs:0,parentId:Q.parentAgentId,agentId:Q.subAgentId,...j}),$.invokeBackendOptional("handleSubAgentStart",Z,Q)},onSubAgentEnd:(Q)=>{let J=$.getSession(Z)?.runtime.teamRuntime,j=$.subAgentStarts.get(Q.subAgentId),X=j?Date.now()-j.startedAt:0,Y=Q.result?.text?Q.result.text.split(`
760
+ `).length:0;$4(W.telemetry,{event:"ended",ulid:Z,durationMs:X,outputLines:Y,errorMessage:Q.error?String(Q.error):void 0,agentId:Q.subAgentId,parentId:Q.parentAgentId,...a1({agentId:Q.subAgentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:Q.parentAgentId})}),$.subAgentStarts.delete(Q.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Z,Q)}}}function hY($,W,Z,Q){let J=yY($,W,Z);return w$({configProvider:{getRuntimeConfig:()=>$.getSession(Z)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:W.providerId,modelId:W.modelId,cwd:W.cwd,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking,maxIterations:W.maxIterations,hooks:W.hooks,extensions:W.extensions,logger:W.logger,telemetry:W.telemetry},getConnectionConfig:()=>$.getSession(Z)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:W.providerId,modelId:W.modelId,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,providerConfig:W.providerConfig,knownModels:W.knownModels,thinking:W.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let X=W.enableTools?N2({cwd:W.cwd,...a0[r1({mode:W.mode})],executors:Q}):[];if(W.enableSpawnAgent)X.push(hY($,W,Z,Q));return i1(X)},...J})}import{readFile as Bv,stat as Hv}from"node:fs/promises";var Gv=20480000;async function M_($){let W=await Hv($);if(!W.isFile())throw Error("Path is not a file");if(W.size>Gv)throw Error("File is too large to read into context.");let Z=await Bv($,"utf8");if(Z.includes("\x00"))throw Error("Cannot read binary file into context.");return Z}var N_=5000;function IW($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Lv($){if(!$||typeof $!=="object"||Array.isArray($))return;let W=$,Z=IW(W.inputTokens),Q=IW(W.outputTokens),J=IW(W.cacheReadTokens),j=IW(W.cacheWriteTokens),X=IW(W.totalCost);if(Z===void 0||Q===void 0||J===void 0||j===void 0||X===void 0)return;return{inputTokens:Z,outputTokens:Q,cacheReadTokens:J,cacheWriteTokens:j,totalCost:X}}function Ov($,W){return{inputTokens:Math.max($.inputTokens,W.inputTokens),outputTokens:Math.max($.outputTokens,W.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,W.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,W.cacheWriteTokens),totalCost:Math.max($.totalCost,W.totalCost)}}function R_($,W){if(!W)return!1;if($.source_message_count!==W.source_message_count)return $.source_message_count<W.source_message_count;return Date.parse($.updated_at)<Date.parse(W.updated_at)}class h1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new a5;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new o$;constructor($){let W=Fv();if(W)_v(W);let Z=v0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new l6,this.createAgentInstance=$.createAgent??((Q)=>new N$(Q)),this.defaultCapabilities=w0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new X1,this.oauthTokenManager=$.oauthTokenManager??new EY({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Z),this.defaultFetch=$.fetch,this.pendingPromptsController=new wY({getSession:(Q)=>this.sessions.get(Q),emit:(Q)=>this.emit(Q),send:(Q)=>this.runTurn(Q)}),this.pendingPrompts={list:async(Q)=>this.pendingPromptsController.list(Q.sessionId),update:async(Q)=>this.pendingPromptsController.update(Q),delete:async(Q)=>this.pendingPromptsController.delete(Q)},this.eventBridge=new PY({getSession:(Q)=>this.sessions.get(Q),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(Q)=>this.emit(Q),persistMessages:(Q,J,j)=>{this.invoke("persistSessionMessages",Q,J,j)},enqueuePendingPrompt:(Q,J)=>this.pendingPromptsController.enqueue(Q,J),invokeBackendOptional:(Q,...J)=>this.invokeOptional(Q,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let W=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!W?.apiKey)return $;return{...$,config:{...$.config,apiKey:W.apiKey}}}async startSession($){let W=$.source??F0.CLI,Z=X0(),Q=$.config.sessionId?.trim()??"",J=Q||Uv(),j=await this.applyInitialOAuthCredentials($),X=j.initialMessages??[],Y=X.length>0?c8(X):z0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let B=kY(V,J),H=kY(B,`${J}.messages.json`),G=kY(B,`${J}.json`),K=o1($.config),F=I0.parse({version:1,session_id:J,source:W,pid:process.pid,started_at:Z,status:"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:K,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:H}),A,f;if(Q.length>0&&X.length>0&&!j.prompt?.trim()){let k=await this.invokeOptionalValue("readSessionManifest",J);if(k)F=k,A={manifestPath:G,messagesPath:k.messages_path||H,compactionPath:k.compaction_path,manifest:k},f=await this.invokeOptionalValue("readSessionCompactionState",J)}let _=await this.seedAggregateUsageFromArtifacts({initialUsage:Y,sessionDir:B,rootMessagesPath:A?.messagesPath??H,manifest:F});this.usageBySession.set(J,Y),this.aggregateUsageBySession.set(J,_);let D=w0(this.defaultCapabilities,$.capabilities),M=D?.toolExecutors??this.toolExecutors,T=$.localRuntime,O=T?.extensionContext?.logger??T?.logger,L=T?.extensionContext?.automation,C,R={getSession:(k)=>this.sessions.get(k),subAgentStarts:this.subAgentStarts,onAgentEvent:(k,$0,L0)=>this.eventBridge.dispatchAgentEvent(k,$0,L0),invokeBackendOptional:(k,...$0)=>this.invokeOptional(k,...$0)};C=await KK({input:j,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:D,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(k)=>{if(k.name==="plugin_log"){this.eventBridge.handlePluginLog(J,k.payload,O);return}this.eventBridge.handlePluginEvent(J,k,L)},onTeamEvent:(k)=>{this.eventBridge.handleTeamEvent(J,k),C.config.onTeamEvent?.(k)},createSpawnTool:()=>hY(R,C.config,J,M),createSubAgentLifecycleCallbacks:(k)=>yY(R,k,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(k)=>{await this.persistSessionMetadata(J,()=>k)}});let p=NZ(j.sessionMetadata??A?.manifest.metadata,C.gitState);if(!A)F.metadata=p;let x=await this.runtimeBuilder.build(C.runtimeBuilderInput),P=C.config,r=C.providerConfig;if(x.teamRuntime&&!P.teamName?.trim())P.teamName=x.teamRuntime.getTeamName();let d=[...x.tools,...P.extraTools??[]],I1=x.extensions??C.extensions,$2=j.initialCompactionState,F$,k0=L4(P),A0=$2??f,O1=k0&&A0?{...A0,conversation_id:A0.conversation_id?.trim()||J}:void 0,K8=k0?O4({compact:k0,getState:()=>F$?.compactionState,saveState:async(k)=>{let $0=F$;if(!$0)return;let L0={...k,conversation_id:$0.sessionId};try{if(!(await this.persistActiveSessionCompactionState($0,L0)).updated)P.logger?.debug?.("Skipped stale session compaction state",{sessionId:$0.sessionId,sourceMessageCount:L0.source_message_count})}catch(q0){P.logger?.error?.("Failed to persist session compaction state",{sessionId:$0.sessionId,error:q0}),e$(P.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:q0,context:{sessionId:$0.sessionId,providerId:P.providerId,modelId:P.modelId}})}}}):void 0,V0={sessionId:J,providerId:r.providerId,modelId:r.modelId,apiKey:r.apiKey,baseUrl:r.baseUrl,headers:r.headers,knownModels:r.knownModels,providerConfig:r,thinking:P.thinking,reasoningEffort:P.reasoningEffort??r.reasoningEffort,thinkingBudgetTokens:P.thinkingBudgetTokens,maxTokensPerTurn:P.maxTokensPerTurn,systemPrompt:P.systemPrompt,maxIterations:P.maxIterations,execution:P.execution,prepareTurn:K8,tools:d,hooks:C.hooks,extensions:I1,hookErrorMode:P.hookErrorMode,initialMessages:C.effectiveInput.initialMessages,userFileContentLoader:M_,toolPolicies:C.toolPolicies,requestToolApproval:C.requestToolApproval?async(k)=>{let $0=C.requestToolApproval,L0=this.sessions.get(J);if(L0)await this.markTurnPending(L0);try{if(!$0)return{approved:!1,reason:"Tool approval callback is not configured."};return await $0(k)}finally{let q0=this.sessions.get(J);if(q0?.status==="pending")await this.markTurnRunning(q0)}}:void 0,telemetry:P.telemetry,onConsecutiveMistakeLimitReached:P.onConsecutiveMistakeLimitReached,completionPolicy:x.completionPolicy,consumePendingUserMessage:()=>{let k=this.pendingPromptsController.consumeSteer(J);return k?YW(k.prompt,k.mode??P.mode):void 0},logger:x.logger??P.logger,extensionContext:P.extensionContext,onEvent:(k)=>this.eventBridge.dispatchAgentEvent(J,P,k)};V0.hooks={...V0.hooks,onEvent:async(k)=>{if(await C.hooks?.onEvent?.(k),k.type!=="assistant-message")return;let $0=this.sessions.get(J);if(!$0)return;let L0=$0.agent.getMessages();try{await this.invoke("persistSessionMessages",J,L0,P.systemPrompt)}catch(q0){P.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:q0}),e$(P.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:q0,severity:"warn",handled:!0,context:{sessionId:J,providerId:P.providerId,modelId:P.modelId}})}}};let l0=this.createAgentInstance(V0);if(V0.onEvent)l0.subscribeEvents(V0.onEvent);x.registerLeadAgent?.(l0);let V1=a1({agentId:l0.getAgentId(),conversationId:l0.getConversationId(),teamId:x.teamRuntime?.getTeamId(),teamName:x.teamRuntime?.getTeamName(),teamRole:x.teamRuntime?"lead":void 0});if(AK(P,J,Q.length>0,K,V1),V1)f$(P.telemetry,{ulid:J,modelId:P.modelId,provider:P.providerId,...V1});if(x.teamRuntime)oW(P.telemetry,{ulid:J,teamId:x.teamRuntime.getTeamId(),teamName:x.teamRuntime.getTeamName(),leadAgentId:l0.getAgentId(),restoredFromPersistence:x.teamRestoredFromPersistence===!0});let y={sessionId:J,config:P,sessionMetadata:p,...A?{artifacts:A}:{},source:W,startedAt:A?.manifest.started_at??Z,updatedAt:A?.manifest.ended_at??A?.manifest.started_at??Z,pendingPrompt:F.prompt,runtime:x,agent:l0,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:X,compactionState:O1,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:C.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(F$=y,y.compactionState&&!this.isCompactionStateForSession(y.sessionId,y.compactionState,y))y.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:y.sessionId,conversationId:y.compactionState.conversation_id}),y.compactionState=void 0;if(this.sessions.set(J,y),A)await this.refreshActiveSessionGitMetadata(y,C.gitState);if(this.emitStatus(J,"running"),X.length>0&&!A){if(await this.ensureSessionPersisted(y),await this.invoke("persistSessionMessages",y.sessionId,X,y.config.systemPrompt),y.compactionState){if(!(await this.persistActiveSessionCompactionState(y,y.compactionState)).updated)y.compactionState=void 0}if(!j.prompt?.trim())await this.updateStatus(y,"completed",0)}let B1;try{if(j.prompt?.trim())if(B1=await this.executeTurn(y,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!y.interactive)await this.finalizeSingleRun(y,B1.finishReason);else await this.completeInteractiveTurn(y,B1.finishReason)}catch(k){if(y.interactive&&y.aborting)B1=await this.completeAbortedInteractiveTurn(y);else{e$(y.config.telemetry,{component:"core",operation:"session.start",error:k,severity:"error",handled:!1,context:{sessionId:y.sessionId,providerId:y.config.providerId,modelId:y.config.modelId}});try{await this.failSession(y)}catch($0){y.config.logger?.error?.("Session failure cleanup threw",{sessionId:y.sessionId,error:$0})}throw k}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:H,result:B1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(W)=>this.getSession(W),readMessages:(W)=>this.readSessionMessages(W),buildStartInput:(W,Z)=>{let Q=W.restoredCheckpointMetadata?{...Z.sessionMetadata??{},checkpoint:W.restoredCheckpointMetadata}:Z.sessionMetadata;return{...Z,...Q?{sessionMetadata:Q}:{},initialMessages:W.initialMessages}},startSession:(W)=>this.startSession(W),getStartedSessionId:(W)=>W.sessionId,readRestoredSession:(W)=>this.getSession(W)})}async runTurn($){let W=this.getSessionOrThrow($.sessionId),Z=W.agent.canStartRun(),Q=$.delivery??(W.interactive&&!Z?"queue":void 0);if(W.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:Q??"immediate"}}),Q==="queue"||Q==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:Q,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(W,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!W.interactive)await this.finalizeSingleRun(W,J.finishReason);else await this.completeInteractiveTurn(W,J.finishReason);if(J.finishReason==="error"||J.finishReason==="aborted")return J;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),J}catch(J){if(W.interactive&&W.aborting)return await this.completeAbortedInteractiveTurn(W);throw e$(W.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:W.sessionId,providerId:W.config.providerId,modelId:W.config.modelId}}),await this.failSession(W),J}}async getAccumulatedUsage($){let W=eJ(this.usageBySession.get($)),Z=eJ(this.aggregateUsageBySession.get($));return W||Z?{usage:W,aggregateUsage:Z}:void 0}async abort($,W){let Z=this.sessions.get($);if(!Z)return;Z.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Z.aborting=!0,this.pendingPromptsController.clearAborted(Z),Z.agent.abort(W)}async stopSession($){let W=this.sessions.get($);if(!W)return;if(W.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),W.interactive&&!K0(W.status)){await this.releaseSessionRuntime(W,"session_stop");return}if(W.interactive&&W.agent.canStartRun()){await this.shutdownSession(W,{status:this.resolveInteractiveStopStatus(W),exitCode:this.resolveInteractiveStopExitCode(W),shutdownReason:"session_stop",endReason:"stopped"});return}W.aborting=!0,W.agent.abort(Error("session_stop")),await this.shutdownSession(W,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let W=[...this.sessions.values()];if(W.length===0)return;await Promise.allSettled(W.map((Z)=>Z.interactive&&!K0(Z.status)?this.releaseSessionRuntime(Z,$):Z.interactive&&Z.agent.canStartRun()?this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let W=this.sessions.get($);if(W)return SY(W);let Z=$.trim();if(!Z)return;let Q=await this.getRow(Z);if(Q)return i4(Q);let J=await this.readManifest(Z);return J?sZ(J):void 0}async listSessions($=200){let Z=(await this.listRows($)).map(i4),Q=new Set(Z.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(Q.has(J.sessionId))continue;Z.unshift(SY(J))}return Z.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let W=await this.invoke("deleteSession",$);if(W.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return W.deleted}async updateSession($,W){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:W.prompt,metadata:W.metadata,title:W.title}))?.updated===!0}}async updateSessionCompactionState($,W){let Z=$.trim();if(!Z)return{updated:!1};let Q=this.sessions.get(Z),J=Q?void 0:await this.getSession(Z);if(!(Q??J))return{updated:!1};if(Q){let Y=await this.readSessionMessages(Z),V=W.source_message_count>0&&Y.length>=W.source_message_count,B=V?Y:void 0;if(V){if(!await this.canPersistCompactionState(Z,W,Q,void 0,Y))return{updated:!1};Q.agent.restore(Y)}return await this.persistActiveSessionCompactionState(Q,W,B)}if(!await this.canPersistCompactionState(Z,W,void 0,J))return{updated:!1};let X=await this.invokeOptionalValue("readSessionCompactionState",Z);if(R_(W,X))return{updated:!1};return await this.invoke("persistSessionCompactionState",Z,W),{updated:!0}}async readSessionCompactionState($){let W=$.trim();if(!W)return;let Z=this.sessions.get(W);if(Z)for(;;){let Q=Z.compactionStateWriteQueue;if(!Q)return Z.compactionState;await Q.catch(()=>{return})}return await this.invokeOptionalValue("readSessionCompactionState",W)}isCompactionStateForSession($,W,Z,Q){let J=W.conversation_id?.trim();if(!J)return!0;if(J===$)return!0;let j=Z?.agent.getConversationId()?.trim()||Q?.conversationId?.trim();return j?J===j:!1}async canPersistCompactionState($,W,Z,Q,J){if(!W.conversation_id?.trim())return!1;if(!this.isCompactionStateForSession($,W,Z,Q))return!1;let j=J??Z?.agent.getMessages()??await this.readSessionMessages($);return j2(W,j)!==void 0}async persistActiveSessionCompactionState($,W,Z){if(!await this.canPersistCompactionState($.sessionId,W,$,void 0,Z))return{updated:!1};return await this.enqueueCompactionStateWrite($,async()=>{if(R_(W,$.compactionState))return{updated:!1};return await this.invoke("persistSessionCompactionState",$.sessionId,W),$.compactionState=W,{updated:!0}})}async enqueueCompactionStateWrite($,W){let Q=($.compactionStateWriteQueue??Promise.resolve()).catch(()=>{return}).then(W),J=Q.then(()=>{return},()=>{return});$.compactionStateWriteQueue=J;try{return await Q}finally{if($.compactionStateWriteQueue===J)$.compactionStateWriteQueue=void 0}}async readSessionMessages($){let W=$.trim();if(!W)return[];let Z=await this.getRow(W);if(Z?.messagesPath)return u$(Z.messagesPath);let Q=await this.readManifest(W);return u$(Q?.messages_path)}async dispatchHookEvent($){await aF($,{queueSpawnRequest:(W)=>this.invokeOptional("queueSpawnRequest",W),upsertSubagentSessionFromHook:(W)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",W),appendSubagentHookAudit:(W,Z)=>this.invokeOptional("appendSubagentHookAudit",W,Z),applySubagentStatus:(W,Z)=>this.invokeOptional("applySubagentStatus",W,Z)})}subscribe($,W){return this.events.subscribe($,W)}async updateSessionModel($,W){await this.updateSessionConnection($,{modelId:W})}async updateSessionConnection($,W){let Z=O2(W),Q=this.getSessionOrThrow($);if(Z.providerId!==void 0)Q.config.providerId=Z.providerId;if(Z.modelId!==void 0)Q.config.modelId=Z.modelId;if(Z.apiKey!==void 0)Q.config.apiKey=Z.apiKey;if(Z.baseUrl!==void 0)Q.config.baseUrl=Z.baseUrl;if(Z.headers!==void 0)Q.config.headers=Z.headers;if(Z.providerConfig!==void 0)Q.config.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"reasoningEffort"))Q.config.reasoningEffort=Z.reasoningEffort??void 0;if(Object.hasOwn(Z,"thinkingBudgetTokens"))Q.config.thinkingBudgetTokens=Z.thinkingBudgetTokens??void 0;if(Object.hasOwn(Z,"thinking")){if(Q.config.thinking=Z.thinking??void 0,Z.thinking===!1||Z.thinking===null)Q.config.reasoningEffort=void 0,Q.config.thinkingBudgetTokens=void 0}let J={...Z.providerId!==void 0?{providerId:Z.providerId}:{},...Z.modelId!==void 0?{modelId:Z.modelId}:{},...Z.apiKey!==void 0?{apiKey:Z.apiKey}:{},...Z.baseUrl!==void 0?{baseUrl:Z.baseUrl}:{},...Z.headers!==void 0?{headers:Z.headers}:{},...Z.providerConfig!==void 0?{providerConfig:Z.providerConfig}:{},...Object.hasOwn(Z,"reasoningEffort")?{reasoningEffort:Z.reasoningEffort??void 0}:{},...Object.hasOwn(Z,"thinking")?{thinking:Z.thinking??void 0}:{},...Object.hasOwn(Z,"thinkingBudgetTokens")?{thinkingBudgetTokens:Z.thinkingBudgetTokens??void 0}:{}};if(Z.thinking===!1||Z.thinking===null)J.reasoningEffort=void 0,J.thinkingBudgetTokens=void 0;let j={...Z.apiKey!==void 0?{apiKey:Z.apiKey}:{},...Z.baseUrl!==void 0?{baseUrl:Z.baseUrl}:{},...Z.headers!==void 0?{headers:Z.headers}:{}};if(Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults(J),Q.agent.updateConnection(Z),Q.runtime.teamRuntime?.updateTeammateConnections(j),Z.providerId||Z.modelId)await this.mutateSessionManifest(Q,(X)=>{if(Z.providerId)X.provider=Z.providerId;if(Z.modelId)X.model=Z.modelId})}async mutateSessionManifest($,W){let Z=$.artifacts;if(!Z)return;let Q=$.sessionId,j=(this.manifestMutationQueues.get(Q)??Promise.resolve()).then(async()=>{let Y=await this.invokeOptionalValue("readSessionManifest",Q)??Z.manifest;return W(Y),Z.manifest=Y,await this.invoke("writeSessionManifest",Z.manifestPath,Y),Y}),X=j.then(()=>{return},()=>{return});this.manifestMutationQueues.set(Q,X);try{return await j}finally{if(this.manifestMutationQueues.get(Q)===X)this.manifestMutationQueues.delete(Q)}}handlePluginEvent($,W,Z){return this.eventBridge.handlePluginEvent($,W,Z)}async executeTurn($,W){let Z=await this.prepareTurnInput($,W),Q=Z.prompt.trim(),J=Z?.userImages?.length,j=Z?.userFiles?.length;if(!Q&&!J&&!j)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=Q;await this.ensureSessionPersisted($),await this.refreshActiveSessionGitMetadata($),await this.syncOAuthCredentials($),await this.markTurnRunning($);try{let X=await this.executeAgentTurn($,Q,Z.userImages,Z.userFiles);while(Cj($,X.finishReason)){let Y=await Pj($);if(Y.length===0)break;let V=Sj($,Y);X=await this.executeAgentTurn($,V)}return X}finally{await this.refreshActiveSessionGitMetadata($)}}async completeInteractiveTurn($,W){if(XW($))return;$.lastInteractiveTurnFinishReason=W,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let W=$.lastInteractiveTurnFinishReason;if(!W)return"cancelled";switch(W){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return W}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let W=new Date,Z=$.agent.getMessages(),Q=z0();return $.persistedMessages=Z,$.started=$.started||Z.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:Q}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:Q,messages:Z,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:W,endedAt:W,durationMs:0}}async executeAgentTurn($,W,Z,Q){let J=$.started||$.agent.getMessages().length>0,j=$.persistedMessages??$.agent.getMessages(),X=this.usageBySession.get($.sessionId)??z0(),Y=this.aggregateUsageBySession.get($.sessionId)??X;$.turnUsageBaseline=X,$.turnAggregateUsageBaseline=Y,$.turnPrimaryUsage=z0(),$.turnUsageByAgent=new Map,lW($.config.telemetry,$.sessionId,$.config.mode),A8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(W,Z,Q):()=>$.agent.run(W,Z,Q),B=await this.runWithAuthRetry($,V,j);$.started=!0;let H=l9(B.messages,B,j);$.persistedMessages=H;let G=a4($.turnUsageByAgent?.values()??[]),K=D0(X,B.usage),F=D0(D0(z0(),B.usage),G),A=D0(Y,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(f)=>({...f??{},totalCost:K.totalCost,aggregatedAgentsCost:A.totalCost,usage:K,aggregateUsage:A})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,B),B}catch(V){throw e$($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,W){if($.submitAndExitObserved)return;if(!W.toolCalls.some((Q)=>Q.name===T0.SUBMIT_AND_EXIT&&Q.error===void 0))return;$.submitAndExitObserved=!0,t6($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,W){let Z=o1($.config),Q=Dv(W.prompt).trim();if(!Q)return{prompt:"",userImages:W.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,W.userFiles)};let J=await P8(Q,Z);UK($.config.telemetry,J);let j=YW(J.prompt,W.mode??$.config.mode),X=this.resolveAbsoluteFilePaths($.config.cwd,W.userFiles),Y=this.resolveAbsoluteFilePaths(Z,J.matchedFiles),V=Array.from(new Set([...X,...Y]));return{prompt:j,userImages:W.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let W=o1($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:W,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async refreshActiveSessionGitMetadata($,W){try{let Z=W??await KJ(o1($.config));if(!Z||!$.artifacts)return;if(GJ($.artifacts.manifest.metadata,Z))return;await this.persistSessionMetadata($.sessionId,(Q)=>NZ({...Q??{},...$.sessionMetadata??{}},Z))}catch(Z){$.config.logger?.debug?.("Failed to refresh session git metadata",{sessionId:$.sessionId,error:Z})}}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,W){let Z=this.sessions.get($),Q=await this.invokeOptionalValue("readSessionManifest",$)??Z?.artifacts?.manifest,J=W(Q?.metadata);if(!Z?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Z.sessionMetadata=J,Z.artifacts.manifest.metadata=J}async finalizeSingleRun($,W){if(XW($))return;let Z=W==="aborted"||$.aborting,Q=W==="error";await this.shutdownSession($,{status:Z?"cancelled":Q?"failed":"completed",exitCode:Q?1:0,shutdownReason:Q?"session_error":"session_complete",endReason:W})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,W){if(W.status==="completed"&&!$.submitAndExitObserved)t6($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});FQ($);let Z=[],Q=(J,j)=>{Z.push(j),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:j,severity:"warn"}),e$($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:W.status,shutdownReason:W.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){await this.refreshActiveSessionGitMetadata($);try{await this.updateStatus($,W.status,W.exitCode)}catch(J){Q("update_status",J)}try{await $.agent.shutdown(W.shutdownReason)}catch(J){Q("agent_shutdown",J)}}try{await Promise.resolve($.runtime.shutdown(W.shutdownReason))}catch(J){Q("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){Q("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:W.endReason,ts:Date.now()}}),Z.length>0&&W.status==="failed")throw Z[0]}async releaseSessionRuntime($,W){let Z=[],Q=(J,j)=>{Z.push(j),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:j,severity:"warn"}),e$($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:W,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(W)}catch(J){Q("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(W))}catch(J){Q("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){Q("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Z.length>0)throw Z[0]}async updateStatus($,W,Z){if(!$.artifacts)return;let Q=await this.invoke("updateSessionStatus",$.sessionId,W,Z);if(!Q.updated)return;let J=await this.mutateSessionManifest($,(j)=>{if(j.status=W,K0(W))delete j.ended_at,j.exit_code=null;else j.ended_at=Q.endedAt??X0(),j.exit_code=typeof Z==="number"?Z:null});if(!J)return;$.status=W,$.updatedAt=Q.endedAt??X0(),$.endedAt=K0(W)?null:J.ended_at,$.exitCode=J.exit_code,this.emitStatus($.sessionId,W)}async runWithAuthRetry($,W,Z){try{return await W()}catch(Q){if(!Q2($.config.providerId)||!fv(Q))throw Q;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Z),W()}}async syncOAuthCredentials($,W){let Z=null;try{Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:W?.forceRefresh})}catch(Q){if(Q instanceof z7)throw Error(`${Q.providerId} requires re-authentication.`);throw Q}if(!Z?.apiKey||$.config.apiKey===Z.apiKey)return;$.config.apiKey=Z.apiKey,$.agent.updateConnection({apiKey:Z.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Z.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Z.apiKey})}getSessionOrThrow($){let W=this.sessions.get($);if(!W){let Z=new W$($);throw e$(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Z,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Z}return W}resolveAbsoluteFilePaths($,W){if(!W||W.length===0)return[];let Z=W.map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>Av(Q)?Q:IY($,Q));return Array.from(new Set(Z))}getSessionAgentTelemetryIdentity($){return a1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let W=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Z=D0($.initialUsage,W);return this.withPersistedAggregateUsageFloor(Z,$.manifest)}async summarizePersistedTeammateUsage($,W,Z){let Q=IY(W),J=`${Z}.messages.json`,j;try{j=Kv($)}catch{return z0()}let X=z0();for(let Y of j){if(!Y.endsWith(".messages.json"))continue;if(Y===J)continue;let V=IY($,Y);if(V===Q)continue;let B=await u$(V);if(B.length===0)continue;X=D0(X,c8(B))}return X}withPersistedAggregateUsageFloor($,W){let Z=Lv(W.metadata?.aggregateUsage);if(Z)return Ov($,Z);let Q=W.metadata?.aggregatedAgentsCost;if(typeof Q!=="number"||!Number.isFinite(Q)||Q<=$.totalCost)return $;return{...$,totalCost:Q}}emitStatus($,W){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:W}})}async emitSessionSnapshot($){let W=await this.getSession($);if(!W)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:C1({session:W,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),N_))}async getRow($){let W=$.trim();if(!W)return;return(await this.listRows(N_)).find((Q)=>Q.sessionId===W)}async readManifest($){let W=$.trim();if(!W)return;return await this.invokeOptionalValue("readSessionManifest",W)}invoke($,...W){return T_(this.sessionService,$,...W)}invokeOptional($,...W){return z_(this.sessionService,$,...W)}invokeOptionalValue($,...W){return q_(this.sessionService,$,...W)}}function zv($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((W)=>({name:W.name,input:W.input,output:W.output,error:W.error,durationMs:W.durationMs}))}}function qv($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function SQ($={}){let W=new h1({sessionService:new y1(new S1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Z){let Q=(Z.cwd?.trim()||Z.workspaceRoot).trim(),J=await W.startSession({source:Z.source?.trim()||F0.CLI,interactive:!1,config:{providerId:Tv(Z.provider),modelId:Z.model,apiKey:Z.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:qv(Z),maxIterations:Z.maxIterations,enableTools:Z.enableTools!==!1,enableSpawnAgent:Z.enableSpawn!==!1,enableAgentTeams:Z.enableTeams!==!1,disableMcpSettingsTools:Z.disableMcpSettingsTools,missionLogIntervalSteps:Z.missionStepInterval,missionLogIntervalMs:Z.missionTimeIntervalMs},toolPolicies:Z.toolPolicies??{"*":{autoApprove:Z.autoApproveTools!==!1}},localRuntime:{configExtensions:Z.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Z,Q){let J=await W.runTurn({sessionId:Z,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((j)=>j.content)});if(!J)throw Error("local hub schedule runtime returned no turn result");return{result:zv(J)}},async abortSession(Z){return await W.abort(Z,Error("hub schedule abort")),{applied:!0}},async stopSession(Z){return await W.stopSession(Z),{applied:!0}}}}import{release as Mv}from"node:os";import{createClineTelemetryServiceConfig as Nv}from"@cline/shared";O0();UW();var Rv=300000,Ev=5000;function E_(){let $=Nv({metadata:{extension_version:hW,cline_type:"hub",platform:"cline-hub-daemon",platform_version:process.version,os_type:process.platform,os_version:Mv()}}),W=i$($),Z,Q=()=>{try{return Z??=new X1,Z.getProviderSettings("cline")?.auth}catch{return}},J,j=()=>{let Y=Q(),V=Y?.accountId?.trim();if(!Y||!V)return;let B=`${V}:${Y.organizationId??""}`;if(B===J)return;J=B,H1(W.telemetry,{id:V,provider:"cline",organizationId:Y.organizationId,organizationName:Y.organizationName,memberId:Y.memberId})};j();let X=setInterval(j,Rv);return X.unref?.(),{telemetry:W.telemetry,dispose:async()=>{clearInterval(X);let Y;await Promise.race([(async()=>{await W.flush(),await W.dispose()})(),new Promise((V)=>{Y=setTimeout(V,Ev),Y.unref?.()})]),clearTimeout(Y)}}}Cv(process.env.CLINE_VCR);function Sv($){let W=process.cwd(),Z,Q,J;for(let j=0;j<$.length;j+=1){let X=$[j],Y=$[j+1];if(X==="--cwd"&&Y){W=Y,j+=1;continue}if(X==="--host"&&Y){Z=Y,j+=1;continue}if(X==="--port"&&Y){let V=Number(Y);if(Number.isFinite(V))Q=V;j+=1;continue}if(X==="--pathname"&&Y)J=Y,j+=1}return{cwd:W,host:Z,port:Q,pathname:J}}async function bv(){let $=Sv(process.argv.slice(2));process.chdir($.cwd);let W=Z1({host:$.host,port:$.port,pathname:$.pathname}),Z=E_(),Q;try{Q=await Y8({host:W.host,port:W.port,pathname:W.pathname,owner:Pv()==="production"?Q1():m0(),telemetry:Z.telemetry,runtimeHandlers:SQ({telemetry:Z.telemetry}),cronOptions:{workspaceRoot:$.cwd}})}catch(Y){throw await Z.dispose().catch(()=>{return}),Y}let J=async()=>{await Q.close(),await Z.dispose().catch(()=>{return}),process.exit(0)},j=!1,X=(Y,V)=>{if(j)return;j=!0;let B=V instanceof Error?V.stack||V.message:String(V);process.stderr.write(`[hub-daemon] ${Y}: ${B}
761
761
  `),Q.close().catch((H)=>{let G=H instanceof Error?H.stack||H.message:String(H);process.stderr.write(`[hub-daemon] shutdown after ${Y} failed: ${G}
762
- `)}).finally(()=>{Z.dispose().catch(()=>{return}).finally(()=>{process.exit(1)})})};process.on("SIGINT",()=>{J()}),process.on("SIGTERM",()=>{J()}),process.on("uncaughtException",(Y)=>{X("uncaughtException",Y)}),process.on("unhandledRejection",(Y)=>{if(Y instanceof qv){process.stderr.write(`[hub-daemon] ignored agent runtime abort rejection: ${Y.message}
763
- `);return}X("unhandledRejection",Y)}),await new Promise(()=>{})}Ev().catch(($)=>{let W=$ instanceof Error?$.stack||$.message:String($);process.stderr.write(`[hub-daemon] fatal: ${W}
762
+ `)}).finally(()=>{Z.dispose().catch(()=>{return}).finally(()=>{process.exit(1)})})};process.on("SIGINT",()=>{J()}),process.on("SIGTERM",()=>{J()}),process.on("uncaughtException",(Y)=>{X("uncaughtException",Y)}),process.on("unhandledRejection",(Y)=>{if(Y instanceof wv){process.stderr.write(`[hub-daemon] ignored agent runtime abort rejection: ${Y.message}
763
+ `);return}X("unhandledRejection",Y)}),await new Promise(()=>{})}bv().catch(($)=>{let W=$ instanceof Error?$.stack||$.message:String($);process.stderr.write(`[hub-daemon] fatal: ${W}
764
764
  `),process.exit(1)});