@cline/core 0.0.55 → 0.0.56

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.
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import{createRequire as NA}from"node:module";var MA=Object.defineProperty;var RA=($)=>$;function EA($,Z){this[$]=RA.bind(null,Z)}var n9=($,Z)=>{for(var Q in Z)MA($,Q,{get:Z[Q],enumerable:!0,configurable:!0,set:EA.bind(Z,Q)})};var F$=($,Z)=>()=>($&&(Z=$($=0)),Z);var fJ=NA(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as CA,captureAgentUnexpectedReasoningTokens as PA,SDK_ERROR_TELEMETRY_EVENT as SA}from"@cline/shared";function l($,Z,Q){$?.capture({event:Z,properties:Q})}function v4($){if(!$)return;return $.substring(0,bA)}function yA($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function hA($){return typeof $==="string"?$:$.message}function _J($,Z){return $.some((Q)=>Z.has(Q.trim().toLowerCase()))}function kA($){l($,I.CLIENT.EXTENSION_ACTIVATED)}function o9($,Z){let Q=[...Z.vcs_types],W={root_count:Z.root_count,vcs_types:Q,is_multi_root:Z.root_count>1,has_git:_J(Q,new Set(["git"])),has_mercurial:_J(Q,new Set(["mercurial","hg"]))};if(Z.init_duration_ms!==void 0)W.init_duration_ms=Z.init_duration_ms;if(Z.feature_flag_enabled!==void 0)W.feature_flag_enabled=Z.feature_flag_enabled;if(Z.is_remote_workspace!==void 0)W.is_remote_workspace=Z.is_remote_workspace;l($,I.WORKSPACE.INITIALIZED,W)}function t9($,Z,Q){l($,I.WORKSPACE.INIT_ERROR,{error_type:yA(Z),error_message:v4(hA(Z)),fallback_to_single_root:Q.fallback_to_single_root,workspace_count:Q.workspace_count??0})}function IA($,Z){l($,I.WORKSPACE.PATH_RESOLVED,{...Z})}function C1($,Z){l($,I.USER.AUTH_STARTED,{provider:Z})}function P1($,Z){l($,I.USER.AUTH_SUCCEEDED,{provider:Z})}function S1($,Z,Q){l($,I.USER.AUTH_FAILED,{provider:Z,errorMessage:v4(Q)})}function A$($,Z,Q){l($,I.USER.AUTH_LOGGED_OUT,{provider:Z,reason:Q})}function xA($,Z){l($,I.USER.PROVIDER_CONFIGURED,{provider:Z})}function zJ($,Z){$?.captureRequired(I.USER.TELEMETRY_OPT_OUT,Z)}function b1($,Z){let Q=Z.id?.trim();if(Q)$?.setDistinctId(Q);$?.updateCommonProperties({account_id:Z.id,account_email:Z.email,provider:Z.provider,organization_id:Z.organizationId,organization_name:Z.organizationName,member_id:Z.memberId})}function e9($,Z){l($,I.TASK.CREATED,Z)}function $Z($,Z){l($,I.TASK.RESTARTED,Z)}function c4($,Z){l($,I.TASK.COMPLETED,Z)}function Z8($,Z){l($,I.TASK.CONVERSATION_TURN,{...Z,timestamp:new Date().toISOString()})}function ZZ($,Z){l($,I.TASK.TOKEN_USAGE,Z)}function QZ($,Z,Q){l($,I.TASK.MODE_SWITCH,{ulid:Z,mode:Q})}function Q8($,Z){l($,I.TASK.TOOL_USED,Z)}function WZ($,Z){l($,I.TASK.SKILL_USED,Z)}function JZ($,Z){l($,I.TASK.DIFF_EDIT_FAILED,Z)}function u4($,Z){l($,I.TASK.PROVIDER_API_ERROR,{...Z,errorMessage:v4(Z.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function TJ($,Z){l($,I.SDK.TOOL_TIMEOUT,gA(Z))}function gA($){let Z={};for(let[Q,W]of Object.entries($))if(W!==void 0)Z[Q]=W;return Z}function XZ($,Z,Q){l($,I.TASK.MENTION_USED,{mentionType:Z,contentLength:Q,timestamp:new Date().toISOString()})}function YZ($,Z,Q,W){l($,I.TASK.MENTION_FAILED,{mentionType:Z,errorType:Q,errorMessage:v4(W),timestamp:new Date().toISOString()})}function jZ($,Z,Q,W,J){l($,I.TASK.MENTION_SEARCH_RESULTS,{queryLength:Z.length,resultCount:Q,searchType:W,isEmpty:J,timestamp:new Date().toISOString()})}function f$($,Z){l($,I.TASK.AGENT_CREATED,{...Z,timestamp:new Date().toISOString()})}function VZ($,Z){l($,I.TASK.AGENT_TEAM_CREATED,{...Z,timestamp:new Date().toISOString()})}function d4($,Z){l($,Z.event==="ended"?I.TASK.SUBAGENT_COMPLETED:I.TASK.SUBAGENT_STARTED,{...Z,timestamp:new Date().toISOString()})}function HZ($,Z,Q,W){l($,I.HOOKS.DISCOVERY_COMPLETED,{hookName:Z,globalCount:Q,workspaceCount:W,totalCount:Q+W,timestamp:new Date().toISOString()})}function BZ($,Z){l($,I.TASK.COMPACTION_EXECUTED,{...Z,timestamp:new Date().toISOString()})}function GZ($,Z){l($,I.TASK.COMPACTION_SKIPPED,{...Z,timestamp:new Date().toISOString()})}var bA=500,I;var G0=F$(()=>{I={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:CA},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",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"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:SA,TOOL_TIMEOUT:"sdk.tool_timeout"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as wU,readFileSync as CU,statSync as PU,writeFileSync as SU}from"node:fs";import{dirname as bU}from"node:path";import{resolveGlobalSettingsPath as DX}from"@cline/shared/storage";import{z as L$}from"zod";function j6(){return H6.parse({})}function hU(){V6=void 0}function kU($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function IU($){let Z;try{Z=CU($,"utf8")}catch{return j6()}try{let Q=H6.safeParse(JSON.parse(Z));return Q.success?Q.data:j6()}catch{return j6()}}function xU(){let $=DX(),Z=PU($,{throwIfNoEntry:!1}),Q=Z?.mtimeMs??0,W=Z?.size??0,J=V6;if(J&&J.path===$&&J.mtimeMs===Q&&J.size===W)return J;let X=kU(Z?IU($):j6());return V6={path:$,mtimeMs:Q,size:W,value:X},V6}function D0(){return xU().value}function G1($,Z={}){let Q=DX(),W=D0();wU(bU(Q),{recursive:!0});let J=H6.parse($);if(!W.telemetryOptOut&&J.telemetryOptOut)zJ(Z.telemetry);SU(Q,`${JSON.stringify(J,null,2)}
2
2
  `,"utf8"),hU()}function vZ(){return D0().telemetryOptOut}function gU($,Z={}){G1({...D0(),telemetryOptOut:$},Z)}function mU(){return D0().autoUpdateEnabled}function vU($,Z={}){G1({...D0(),autoUpdateEnabled:$},Z)}function cU(){return D0().compactionStrategy??"basic"}function uU($){G1({...D0(),compactionStrategy:$})}function K1($){return new Set($??D0().disabledTools??[])}function B6($){return new Set($??D0().disabledPlugins??[])}function dU($){return K1().has($)}function cZ($){let Z=D0(),Q=new Set(Z.disabledTools??[]),W=Q.has($);if(W)Q.delete($);else Q.add($);return G1({...Z,disabledTools:[...Q]}),!W}function LX($,Z){let Q=[...new Set($.map((X)=>X.trim()).filter(Boolean))];if(Q.length===0)return;let W=D0(),J=K1(W.disabledTools);for(let X of Q)if(Z)J.add(X);else J.delete(X);G1({...W,disabledTools:[...J]})}function _X($,Z){return LX([$],Z),Z}function lU($){return B6().has($)}function pU($,Z){let Q=$.trim();if(!Q)return;let W=D0(),J=B6(W.disabledPlugins);if(Z)J.add(Q);else J.delete(Q);G1({...W,disabledPlugins:[...J]})}function uZ($,Z){let Q=B6(Z);if(Q.size===0)return[...$];return $.filter((W)=>!Q.has(W))}function k1($,Z){let Q=K1(Z);if(Q.size===0)return[...$];return $.filter((W)=>!Q.has(W.name))}function dZ($,Z){if(!$||$.length===0)return $;let Q=K1(Z);if(Q.size===0)return $;return $.map((W)=>{if(!W.setup)return W;return{...W,setup:(J,X)=>W.setup?.({...J,registerTool:(Y)=>{if(!Q.has(Y.name))J.registerTool(Y)}},X)}})}var UX,yU,H6,V6;var r0=F$(()=>{G0();UX=L$.preprocess(($)=>Array.isArray($)?$.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter(Boolean):void 0,L$.array(L$.string()).optional()).transform(($)=>{if(!$)return;let Z=[...new Set($)].sort((Q,W)=>Q.localeCompare(W));return Z.length>0?Z:void 0}),yU=L$.enum(["basic","agentic"]).catch("basic"),H6=L$.object({telemetryOptOut:L$.boolean().default(!1).catch(!1),autoUpdateEnabled:L$.boolean().default(!0).catch(!0),compactionStrategy:yU.optional(),disabledTools:UX.optional(),disabledPlugins:UX.optional()}).strip().transform(($)=>{let Z={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.compactionStrategy)Z.compactionStrategy=$.compactionStrategy;if($.disabledTools?.length)Z.disabledTools=$.disabledTools;if($.disabledPlugins?.length)Z.disabledPlugins=$.disabledPlugins;return Z})});var Xj={};n9(Xj,{normalizeUserMessage:()=>_z,buildInitialUserContent:()=>Lz});async function Lz($,Z,Q,W){let J=zz(Z),X=await Oz(Q,W);if(J.length===0&&!X)return $;let Y=[{type:"text",text:$},...J];if(X)Y.push(...X);return Y}function _z($){if($==null)return"";if(typeof $==="string")return $;let Z=$.content;if(typeof Z==="string")return Z;if(!Array.isArray(Z))return"";let Q=[];for(let W of Z)if(W&&typeof W==="object"&&W.type==="text"){let J=W.text;if(typeof J==="string")Q.push(J)}return Q.join(`
3
3
  `)}function zz($){if(!$||$.length===0)return[];let Z=[];for(let Q of $){let W=Tz(Q);if(W)Z.push(W)}return Z}function Tz($){let Z=$.trim();if(!Z)return;let Q=Z.match(/^data:([^;,]+);base64,(.+)$/);if(Q){let W=Q[1],J=Q[2];if(!W||!J)return;return{type:"image",mediaType:W,data:J}}return{type:"image",mediaType:"image/png",data:Z}}async function Oz($,Z){if(!$||$.length===0)return;let Q=Z??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),W=await Promise.all($.map(async(J)=>{let X=J.replace(/\\/g,"/");try{let Y=await Q(J);return{type:"file",path:X,content:Y}}catch(Y){let j=Y instanceof Error?Y.message:String(Y);return{type:"file",path:X,content:`Error fetching content: ${j}`}}}));if(W.length===0)return;return W}var YV={};n9(YV,{updateMcpSettingsFileSync:()=>U1,updateMcpSettingsFile:()=>Y5,updateMcpServerOAuthStateAsync:()=>eQ,updateMcpServerOAuthState:()=>h8,setMcpServerDisabled:()=>b8,resolveMcpServerRegistrations:()=>$1,resolveDefaultMcpSettingsPath:()=>Z0,registerMcpServersFromSettingsFile:()=>k8,normalizeMcpServerOAuthState:()=>S2,loadMcpSettingsFile:()=>S8,listMcpServerOAuthStatuses:()=>$7,hasMcpSettingsFile:()=>C$,getMcpServerOAuthState:()=>y8,McpSettingsUpdateSkippedError:()=>J5,McpSettingsMutatorPurityError:()=>C2,McpSettingsLockTimeoutError:()=>P2});import{existsSync as pj,mkdirSync as iQ,readFileSync as rj,renameSync as sQ,rmdirSync as KT,rmSync as nQ,statSync as FT,unlinkSync as ij,writeFileSync as nj}from"node:fs";import{randomUUID as AT}from"node:crypto";import{dirname as aj,join as lj}from"node:path";import{setTimeout as fT}from"node:timers/promises";import{resolveMcpSettingsPath as UT}from"@cline/shared/storage";import{z as w}from"zod";function aQ($){if(!$)return;if($==="http")return"streamableHttp";return $}function Z0(){return UT()}function NT($,Z){iQ(aj($),{recursive:!0});let Q=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{nj(Q,Z,{encoding:"utf8",flag:"wx"}),sQ(Q,$)}catch(W){try{ij(Q)}catch{}throw W}}function CT($){Atomics.wait(wT,0,0,$)}function PT($){return`${$}.lock`}function ej(){return`${process.pid}.${Date.now()}.${AT()}`}function $V($,Z){iQ(aj($),{recursive:!0});let Q=`${$}.tmp.${Z}`;nQ(Q,{recursive:!0,force:!0}),iQ(Q,{recursive:!0}),nj(lj(Q,`owner.${Z}`),Z,{encoding:"utf8",flag:"wx"});try{return sQ(Q,$),{lockDir:$,ownerFile:lj($,`owner.${Z}`)}}catch(W){if(nQ(Q,{recursive:!0,force:!0}),pj($))return;throw W}}function ZV($,Z){let Q;try{Q=Date.now()-FT($).mtimeMs}catch(J){if(J.code==="ENOENT")return;throw J}if(Q<tQ)return;Z.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Q}ms); reclaiming.`,{severity:"warn"});let W=`${$}.stale.${ej()}`;try{sQ($,W)}catch(J){if(J.code==="ENOENT")return;throw J}nQ(W,{recursive:!0,force:!0})}function ST($){try{ij($.ownerFile)}catch(Z){if(Z.code!=="ENOENT")throw Z}try{KT($.lockDir)}catch(Z){let Q=Z.code;if(Q!=="ENOENT"&&Q!=="ENOTEMPTY"&&Q!=="EEXIST")throw Z}}function QV($){let Z=PT($);if(X5.has(Z))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:Z,token:ej()}}function bT($,Z){let{lockDir:Q,token:W}=QV($),J=Z.timeoutMs??tQ,X=Date.now();while(!0){let Y=$V(Q,W);if(Y)return X5.add(Q),Y;if(Date.now()-X>J)throw new P2(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);ZV(Q,Z),CT(tj)}}async function yT($,Z){let{lockDir:Q,token:W}=QV($),J=Z.timeoutMs??tQ,X=Date.now();while(!0){let Y=$V(Q,W);if(Y)return X5.add(Q),Y;if(Date.now()-X>J)throw new P2(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);ZV(Q,Z),await fT(tj)}}function WV($,Z,Q){try{let W=hT(Z),J=kT(W,Q);return NT(Z,`${JSON.stringify(W,null,2)}
4
- `),J}finally{X5.delete($.lockDir),ST($)}}function U1($,Z,Q={}){let W=bT($,Q);return WV(W,$,Z)}async function Y5($,Z,Q={}){let W=await yT($,Q);return WV(W,$,Z)}function hT($){let Z=xT($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function kT($,Z){let Q=JSON.stringify($),W=JSON.parse(Q),J=Z(W),X=JSON.stringify(W),Y=Z($);if(JSON.stringify($)!==X)throw new C2("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(Y)!==JSON.stringify(J))throw new C2("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return Y}function IT($){let Z=rj($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(W){let J=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${$}": ${J}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function xT($){try{return IT($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function JV($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function gT($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function S8($={}){let Z=$.filePath??Z0(),Q=rj(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(X){let Y=X instanceof Error?X.message:String(X);throw Error(`Failed to parse MCP settings JSON at "${Z}": ${Y}`)}let J=ET.safeParse(W);if(!J.success){let X=J.error.issues.map((Y)=>{let j=Y.path.join(".");return j?`${j}: ${Y.message}`:Y.message}).join("; ");throw Error(`Invalid MCP settings at "${Z}": ${X}`)}return J.data}function S2($){if(!$)return;let Z={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(Z).length>0?Z:void 0}function mT($){if($===void 0)return;let Z=oQ.safeParse($);if(!Z.success)return;return S2(Z.data)}function C$($={}){let Z=$.filePath??Z0();return pj(Z)}function $1($={}){let Z=S8($);return Object.entries(Z.mcpServers).map(([Q,W])=>({name:Q,transport:W.transport,disabled:W.disabled,metadata:W.metadata,oauth:W.oauth}))}function b8($){let Z=$.filePath??Z0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");U1(Z,(W)=>{let J=W.mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let X={...J},Y=JV(X,Q);if(!Y)throw Error(`Unknown MCP server: ${Q}`);let j={...Y};if($.disabled)j.disabled=!0;else delete j.disabled;gT(X,Q,j),W.mcpServers=X})}function y8($,Z={}){let Q=S8(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return S2(Q.mcpServers[$]?.oauth)}function XV($,Z){return(Q)=>{let W=Q.mcpServers,J=JV(W,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let X=mT(J.oauth)??{},Y=S2(Z(X));if(Y)J.oauth=Y;else delete J.oauth;return Y??{}}}function h8($,Z,Q={}){let W=Q.filePath??Z0();return U1(W,XV($,Z))}async function eQ($,Z,Q={}){let W=Q.filePath??Z0();return Y5(W,XV($,Z))}function $7($={}){return $1($).map((Q)=>{let W=Q.transport.type!=="stdio",J=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:W,oauthConfigured:W&&typeof J==="string"&&J.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,W)=>Q.serverName.localeCompare(W.serverName))}async function k8($,Z={}){let Q=$1(Z);for(let W of Q)await $.registerServer(W);return Q}var P8,sj,oQ,DT,LT,_T,zT,TT,OT,oj,qT,MT,RT,ET,J5,P2,C2,tQ=1e4,tj=25,wT,X5;var j5=F$(()=>{P8=w.record(w.string(),w.string()),sj=w.record(w.string(),w.unknown()),oQ=w.object({clientInformation:w.record(w.string(),w.unknown()).optional(),tokens:w.record(w.string(),w.unknown()).optional(),codeVerifier:w.string().optional(),discoveryState:w.record(w.string(),w.unknown()).optional(),redirectUrl:w.string().url().optional(),lastError:w.string().optional(),lastAuthenticatedAt:w.number().int().positive().optional()}).strip(),DT=w.object({type:w.literal("stdio"),command:w.string().min(1),args:w.array(w.string()).optional(),cwd:w.string().min(1).optional(),env:P8.optional()}),LT=w.object({type:w.literal("sse"),url:w.string().url(),headers:P8.optional()}),_T=w.object({type:w.literal("streamableHttp"),url:w.string().url(),headers:P8.optional()}),zT=w.discriminatedUnion("type",[DT,LT,_T]),TT=w.object({transport:zT,disabled:w.boolean().optional(),metadata:sj.optional(),oauth:oQ.optional()}),OT=w.enum(["stdio","sse","http","streamableHttp"]).optional(),oj=w.object({type:w.enum(["stdio","sse","streamableHttp"]).optional(),transportType:OT,disabled:w.boolean().optional(),metadata:sj.optional(),oauth:oQ.optional()});qT=oj.extend({command:w.string().min(1),args:w.array(w.string()).optional(),cwd:w.string().min(1).optional(),env:P8.optional()}).superRefine(($,Z)=>{let Q=$.type??aQ($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:w.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})),MT=oj.extend({url:w.string().url(),headers:P8.optional()}).superRefine(($,Z)=>{let Q=$.type??aQ($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:w.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??aQ($.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}}),RT=w.union([TT,qT,MT]),ET=w.object({mcpServers:w.record(w.string(),RT)}).passthrough();J5=class J5 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};P2=class P2 extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};C2=class C2 extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};wT=new Int32Array(new SharedArrayBuffer(4)),X5=new Set});import{existsSync as zE,mkdirSync as TE,readFileSync as OE,writeFileSync as qE}from"node:fs";import{resolve as ME}from"node:path";import{resolveSessionDataDir as RE}from"@cline/shared/storage";import{nanoid as EE}from"nanoid";import*as NE from"node-machine-id";function m0($){let Z=$?.trim();if(Z)return Z;let Q=PE();if(Q)return Q;return SE()}function CE(){let $=NE;return $.machineIdSync??$.default?.machineIdSync}function PE(){try{let $=CE();if(!$)return;return $().trim()||void 0}catch{return}}function SE(){let $=RE(),Z=ME($,wE);try{if(zE(Z)){let W=OE(Z,"utf8").trim();if(W.length>0)return W}}catch{}let Q=`cl-${EE()}`;try{TE($,{recursive:!0}),qE(Z,Q,"utf8")}catch{}return Q}var wE="machine-id";var g2=()=>{};class C4{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($,Z){if(!this.isEnabled())return;this.emitLog($,Z,!1)}emitRequired($,Z){this.emitLog($,Z,!0)}recordCounter($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.counters.get($);if(!X)X=this.meter.createCounter($,W?{description:W}:void 0),this.counters.set($,X);X.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.histograms.get($);if(!X)X=this.meter.createHistogram($,W?{description:W}:void 0),this.histograms.set($,X);X.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.buildAttributes(Q),Y=JSON.stringify(X),j=this.gaugeValues.get($);if(Z===null){if(j){if(j.delete(Y),j.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=j;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let H=this.meter.createObservableGauge($,W?{description:W}:void 0);H.addCallback((B)=>{for(let G of this.snapshotGaugeSeries($))B.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set($,H)}V.set(Y,{value:Z,attributes:X})}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($,Z,Q){if(!this.logger)return;let W=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:W})}buildAttributes($,Z=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...Z?{_required:!0}:{}}}snapshotGaugeSeries($){let Z=this.gaugeValues.get($);if(!Z)return[];return Array.from(Z.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,Z="",Q=new WeakSet,W=0){if(!$)return{};let J={},X=100,Y=10;for(let[j,V]of Object.entries($)){if(j==="__proto__"||j==="constructor"||j==="prototype")continue;let H=Z?`${Z}.${j}`:j;if(V===null||V===void 0){J[H]=String(V);continue}if(Array.isArray(V)){let B=V.length>X?V.slice(0,X):V;try{J[H]=JSON.stringify(B)}catch{J[H]="[UnserializableArray]"}if(V.length>X)J[`${H}_truncated`]=!0,J[`${H}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){J[H]=V.toISOString();continue}if(V instanceof Error){J[H]=V.message;continue}if(Q.has(V)){J[H]="[Circular]";continue}if(W>=Y){J[H]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(J,this.flattenProperties(V,H,Q,W+1));continue}if(JS(V)){J[H]=V;continue}try{J[H]=JSON.stringify(V)}catch{J[H]=String(V)}}return J}}function JS($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class z9{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,Z){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:Z})}emitRequired($,Z){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:Z})}recordCounter($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordHistogram($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordGauge($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:W,required:J===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class P4{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new z9({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 Z=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,Z)}captureRequired($,Z){let Q=this.buildAttributes(Z);for(let W of this.adapters)W.emitRequired($,Q)}recordCounter($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordCounter($,Z,X,W,J)}recordHistogram($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordHistogram($,Z,X,W,J)}recordGauge($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordGauge($,Z,X,W,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 V3=()=>{};import{metrics as XS,trace as YS}from"@opentelemetry/api";import{logs as jS}from"@opentelemetry/api-logs";import{OTLPLogExporter as VS}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as HS}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as BS}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as GS}from"@opentelemetry/resources";import{BatchLogRecordProcessor as KS,ConsoleLogRecordExporter as FS,LoggerProvider as AS}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as fS,MeterProvider as US,PeriodicExportingMetricReader as BK}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as DS,ConsoleSpanExporter as LS,SimpleSpanProcessor as _S}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as zS}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as TS,ATTR_SERVICE_VERSION as OS}from"@opentelemetry/semantic-conventions";class GK{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($,Z){this.resolveProperties(Z)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class S4{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=GS({[TS]:$.serviceName??"cline",...$.serviceVersion?{[OS]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)XS.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)jS.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return YS.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new C4({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new P4({...$,adapters:[Z],distinctId:m0($.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 Z=H3(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),W=Math.min(30000,Math.floor(Q*0.8)),J=Z.map((X)=>RS(X,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:W})).filter((X)=>X!==null);if(J.length===0)return null;return new US({resource:$,readers:J})}createTracerProvider($){let Z=H3(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,W=this.options.otlpTracesHeaders??this.options.otlpHeaders,J=[];for(let X of Z){let Y=MS(X,{endpoint:Q,headers:W,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(Y)J.push(Y)}if(J.length===0)return null;return new zS({resource:$,spanProcessors:J})}createLoggerProvider($){let Z=H3(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((W)=>{let J=qS(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new KS(J,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((W)=>W!==null);if(Q.length===0)return null;return new AS({resource:$,processors:Q})}}function T9($){let Z=new S4($),Q=Z.createTelemetryService($);return Q.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:Z,telemetry:Q}}function s$($){if(vZ())return{telemetry:new GK($)};if($.enabled!==!0)return{telemetry:new P4({...$,distinctId:m0($.distinctId)})};return T9($)}function O9($){let{telemetry:Z,provider:Q}=s$($);return{telemetry:Z,provider:Q,flush:async()=>{let X=Q;if(X&&typeof X.forceFlush==="function")try{await X.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])}}}function H3($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function qS($,Z){if($==="console")return new FS;if(!Z.endpoint)return null;let Q=B3(Z.endpoint,"/v1/logs");return new VS({url:Q,headers:Z.headers})}function MS($,Z){if($==="console")return new _S(new LS);if(!Z.endpoint)return null;let Q=B3(Z.endpoint,"/v1/traces");return new DS(new BS({url:Q,headers:Z.headers}))}function RS($,Z){if($==="console")return new BK({exporter:new fS,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=B3(Z.endpoint,"/v1/metrics");return new BK({exporter:new HS({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function B3($,Z){let Q=new URL($),W=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=W.endsWith(Z)?W:`${W}${Z}`,Q.toString()}var q9=F$(()=>{r0();g2();V3()});var LF={};n9(LF,{resolveCoreDistinctId:()=>m0,createOpenTelemetryTelemetryService:()=>T9,createConfiguredTelemetryService:()=>s$,createConfiguredTelemetryHandle:()=>O9,OpenTelemetryProvider:()=>S4,OpenTelemetryAdapter:()=>C4});var S9=F$(()=>{g2();q9()});import*as r00 from"@cline/llms";import{ClineNotSubscribedError as n00,ClineOrgIndividualInferenceSubscriptionError as a00,getClineOrgIndividualInferenceSubscriptionMessage as s00,getClineNotSubscribedMessage as o00,getClinePassSubscriptionUrl as t00,isClineNotSubscribedError as e00,isClineNotSubscribedMessage as $10,isClineOrgIndividualInferenceSubscriptionError as Z10,isClineOrgIndividualInferenceSubscriptionMessage as Q10}from"@cline/llms";import{buildClineSystemPrompt as J10,buildSdkErrorProperties as X10,ContributionRegistry as Y10,captureSdkError as j10,createClineTelemetryServiceConfig as V10,createClineTelemetryServiceMetadata as H10,createContributionRegistry as B10,createTool as G10,emptyWorkspaceManifest as K10,FEATURE_FLAGS as F10,FeatureFlagDefaultValue as A10,formatDisplayUserInput as f10,noopBasicLogger as U10,normalizeSdkError as D10,normalizeUserInput as L10,parseUserCommandEnvelope as _10,registerDisposable as z10,SDK_ERROR_TELEMETRY_EVENT as T10}from"@cline/shared";export*from"@cline/shared/storage";function wA($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function UJ($,Z,Q){let W=wA(Q);if(W)return W;let J=Z.trim();if(J){let X=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${X}`}return`Cline account request failed with status ${$}`}class a9{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let Z=$.apiBaseUrl.trim();if(!Z)throw Error("apiBaseUrl is required");this.apiBaseUrl=Z,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 Z=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(Z)}/balance`)}async fetchUsageTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/usages`)).items??[]}async fetchPaymentTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let Z=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)Z.searchParams.set("type",$.type);return this.request(`${Z.pathname}${Z.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}`)}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/balance`)}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(Z,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let Z=$?.trim();if(Z)return Z;let W=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(W)return W;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let Y=(await this.fetchUserOrganizations()).find((j)=>j.organizationId===$)?.memberId;if(!Y?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return Y}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let W=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,X=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let Y=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...W??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:J.signal});if(Y.status===204||Z?.expectNoContent){if(!Y.ok)throw Error(`Cline account request failed with status ${Y.status}`);return}let j=await Y.text(),V;if(j.trim())try{V=JSON.parse(j)}catch{if(!Y.ok)throw Error(UJ(Y.status,j,void 0));throw Error("Cline account response was not valid JSON")}if(!Y.ok)throw Error(UJ(Y.status,j,V));if(typeof V==="object"&&V!==null){let H=V;if(typeof H.success==="boolean"){if(!H.success)throw Error(H.error||"Cline account request failed");return H.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(X)}}}function DJ($){return $.action==="clineAccount"}async function LJ($,Z){switch($.operation){case"fetchMe":return Z.fetchMe();case"fetchBalance":return Z.fetchBalance($.userId);case"fetchUsageTransactions":return Z.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return Z.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return Z.fetchUserOrganizations();case"fetchOrganizationBalance":return Z.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return Z.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await Z.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return Z.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class s9{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 Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:Z})}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:Z,...$.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}}function m4($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((W)=>{$.onOpenUrlError?.({url:Z,error:W})})}catch(W){$.onOpenUrlError?.({url:Z,error:W})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}G0();import{getClineEnvironmentConfig as KZ}from"@cline/shared";function mA(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function H1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",W=$.timeoutMs??300000,J=$.successHtml??vA,X=mA(),Y=!1,j=null,V=null,H=null,B=(F)=>{if(Y)return;Y=!0,X.resolve(F)},G=()=>{if(j)clearTimeout(j),j=null;let F=H;if(H=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:F})).catch(()=>{})},K=async()=>{return j=setTimeout(()=>{G(),B(null)},W),X.promise};for(let F of $.ports){let A=Z.createServer((f,D)=>{try{let U=new URL(f.url||"",`http://${Q}:${F}`);if(U.pathname!==$.callbackPath){D.statusCode=404,D.end("Not found");return}let T={url:U,code:U.searchParams.get("code")??void 0,state:U.searchParams.get("state")??void 0,provider:U.searchParams.get("provider")??void 0,error:U.searchParams.get("error")??void 0};if(T.error){D.statusCode=400,D.end(`Authentication failed: ${T.error}`),G(),B(T);return}if(!T.code){D.statusCode=400,D.end("Missing authorization code");return}if($.expectedState&&T.state!==$.expectedState){D.statusCode=400,D.end("State mismatch");return}D.statusCode=200,D.setHeader("Content-Type","text/html; charset=utf-8"),D.end(J),G(),B(T)}catch{D.statusCode=500,D.end("Internal error")}}),L=await new Promise((f)=>{let D=(U)=>{A.off("error",D),f({bound:!1,error:U})};A.once("error",D),A.listen(F,Q,()=>{A.off("error",D),V=A,f({bound:!0})})});if(L.error){if(L.error.code==="EADDRINUSE")continue;throw G(),L.error}if(L.bound){H=F;let f=`http://${Q}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:F,callbackUrl:f})).catch(()=>{});return{callbackUrl:f,waitForCallback:K,cancelWait:()=>{G(),B(null)},close:()=>{G(),B(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var vA=`<!DOCTYPE html>
4
+ `),J}finally{X5.delete($.lockDir),ST($)}}function U1($,Z,Q={}){let W=bT($,Q);return WV(W,$,Z)}async function Y5($,Z,Q={}){let W=await yT($,Q);return WV(W,$,Z)}function hT($){let Z=xT($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function kT($,Z){let Q=JSON.stringify($),W=JSON.parse(Q),J=Z(W),X=JSON.stringify(W),Y=Z($);if(JSON.stringify($)!==X)throw new C2("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(Y)!==JSON.stringify(J))throw new C2("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return Y}function IT($){let Z=rj($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(W){let J=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${$}": ${J}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function xT($){try{return IT($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function JV($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function gT($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function S8($={}){let Z=$.filePath??Z0(),Q=rj(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(X){let Y=X instanceof Error?X.message:String(X);throw Error(`Failed to parse MCP settings JSON at "${Z}": ${Y}`)}let J=ET.safeParse(W);if(!J.success){let X=J.error.issues.map((Y)=>{let j=Y.path.join(".");return j?`${j}: ${Y.message}`:Y.message}).join("; ");throw Error(`Invalid MCP settings at "${Z}": ${X}`)}return J.data}function S2($){if(!$)return;let Z={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(Z).length>0?Z:void 0}function mT($){if($===void 0)return;let Z=oQ.safeParse($);if(!Z.success)return;return S2(Z.data)}function C$($={}){let Z=$.filePath??Z0();return pj(Z)}function $1($={}){let Z=S8($);return Object.entries(Z.mcpServers).map(([Q,W])=>({name:Q,transport:W.transport,disabled:W.disabled,metadata:W.metadata,oauth:W.oauth}))}function b8($){let Z=$.filePath??Z0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");U1(Z,(W)=>{let J=W.mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let X={...J},Y=JV(X,Q);if(!Y)throw Error(`Unknown MCP server: ${Q}`);let j={...Y};if($.disabled)j.disabled=!0;else delete j.disabled;gT(X,Q,j),W.mcpServers=X})}function y8($,Z={}){let Q=S8(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return S2(Q.mcpServers[$]?.oauth)}function XV($,Z){return(Q)=>{let W=Q.mcpServers,J=JV(W,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let X=mT(J.oauth)??{},Y=S2(Z(X));if(Y)J.oauth=Y;else delete J.oauth;return Y??{}}}function h8($,Z,Q={}){let W=Q.filePath??Z0();return U1(W,XV($,Z))}async function eQ($,Z,Q={}){let W=Q.filePath??Z0();return Y5(W,XV($,Z))}function $7($={}){return $1($).map((Q)=>{let W=Q.transport.type!=="stdio",J=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:W,oauthConfigured:W&&typeof J==="string"&&J.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,W)=>Q.serverName.localeCompare(W.serverName))}async function k8($,Z={}){let Q=$1(Z);for(let W of Q)await $.registerServer(W);return Q}var P8,sj,oQ,DT,LT,_T,zT,TT,OT,oj,qT,MT,RT,ET,J5,P2,C2,tQ=1e4,tj=25,wT,X5;var j5=F$(()=>{P8=w.record(w.string(),w.string()),sj=w.record(w.string(),w.unknown()),oQ=w.object({clientInformation:w.record(w.string(),w.unknown()).optional(),tokens:w.record(w.string(),w.unknown()).optional(),codeVerifier:w.string().optional(),discoveryState:w.record(w.string(),w.unknown()).optional(),redirectUrl:w.string().url().optional(),lastError:w.string().optional(),lastAuthenticatedAt:w.number().int().positive().optional()}).strip(),DT=w.object({type:w.literal("stdio"),command:w.string().min(1),args:w.array(w.string()).optional(),cwd:w.string().min(1).optional(),env:P8.optional()}),LT=w.object({type:w.literal("sse"),url:w.string().url(),headers:P8.optional()}),_T=w.object({type:w.literal("streamableHttp"),url:w.string().url(),headers:P8.optional()}),zT=w.discriminatedUnion("type",[DT,LT,_T]),TT=w.object({transport:zT,disabled:w.boolean().optional(),metadata:sj.optional(),oauth:oQ.optional()}),OT=w.enum(["stdio","sse","http","streamableHttp"]).optional(),oj=w.object({type:w.enum(["stdio","sse","streamableHttp"]).optional(),transportType:OT,disabled:w.boolean().optional(),metadata:sj.optional(),oauth:oQ.optional()});qT=oj.extend({command:w.string().min(1),args:w.array(w.string()).optional(),cwd:w.string().min(1).optional(),env:P8.optional()}).superRefine(($,Z)=>{let Q=$.type??aQ($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:w.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})),MT=oj.extend({url:w.string().url(),headers:P8.optional()}).superRefine(($,Z)=>{let Q=$.type??aQ($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:w.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??aQ($.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}}),RT=w.union([TT,qT,MT]),ET=w.object({mcpServers:w.record(w.string(),RT)}).passthrough();J5=class J5 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};P2=class P2 extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};C2=class C2 extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};wT=new Int32Array(new SharedArrayBuffer(4)),X5=new Set});import{existsSync as TE,mkdirSync as OE,readFileSync as qE,writeFileSync as ME}from"node:fs";import{resolve as RE}from"node:path";import{resolveSessionDataDir as EE}from"@cline/shared/storage";import{nanoid as NE}from"nanoid";import*as wE from"node-machine-id";function m0($){let Z=$?.trim();if(Z)return Z;let Q=SE();if(Q)return Q;return bE()}function PE(){let $=wE;return $.machineIdSync??$.default?.machineIdSync}function SE(){try{let $=PE();if(!$)return;return $().trim()||void 0}catch{return}}function bE(){let $=EE(),Z=RE($,CE);try{if(TE(Z)){let W=qE(Z,"utf8").trim();if(W.length>0)return W}}catch{}let Q=`cl-${NE()}`;try{OE($,{recursive:!0}),ME(Z,Q,"utf8")}catch{}return Q}var CE="machine-id";var g2=()=>{};class C4{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($,Z){if(!this.isEnabled())return;this.emitLog($,Z,!1)}emitRequired($,Z){this.emitLog($,Z,!0)}recordCounter($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.counters.get($);if(!X)X=this.meter.createCounter($,W?{description:W}:void 0),this.counters.set($,X);X.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.histograms.get($);if(!X)X=this.meter.createHistogram($,W?{description:W}:void 0),this.histograms.set($,X);X.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,W,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let X=this.buildAttributes(Q),Y=JSON.stringify(X),j=this.gaugeValues.get($);if(Z===null){if(j){if(j.delete(Y),j.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=j;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let H=this.meter.createObservableGauge($,W?{description:W}:void 0);H.addCallback((B)=>{for(let G of this.snapshotGaugeSeries($))B.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set($,H)}V.set(Y,{value:Z,attributes:X})}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($,Z,Q){if(!this.logger)return;let W=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:W})}buildAttributes($,Z=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...Z?{_required:!0}:{}}}snapshotGaugeSeries($){let Z=this.gaugeValues.get($);if(!Z)return[];return Array.from(Z.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,Z="",Q=new WeakSet,W=0){if(!$)return{};let J={},X=100,Y=10;for(let[j,V]of Object.entries($)){if(j==="__proto__"||j==="constructor"||j==="prototype")continue;let H=Z?`${Z}.${j}`:j;if(V===null||V===void 0){J[H]=String(V);continue}if(Array.isArray(V)){let B=V.length>X?V.slice(0,X):V;try{J[H]=JSON.stringify(B)}catch{J[H]="[UnserializableArray]"}if(V.length>X)J[`${H}_truncated`]=!0,J[`${H}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){J[H]=V.toISOString();continue}if(V instanceof Error){J[H]=V.message;continue}if(Q.has(V)){J[H]="[Circular]";continue}if(W>=Y){J[H]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(J,this.flattenProperties(V,H,Q,W+1));continue}if(XS(V)){J[H]=V;continue}try{J[H]=JSON.stringify(V)}catch{J[H]=String(V)}}return J}}function XS($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class z9{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,Z){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:Z})}emitRequired($,Z){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:Z})}recordCounter($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordHistogram($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordGauge($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:W,required:J===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class P4{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new z9({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 Z=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,Z)}captureRequired($,Z){let Q=this.buildAttributes(Z);for(let W of this.adapters)W.emitRequired($,Q)}recordCounter($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordCounter($,Z,X,W,J)}recordHistogram($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordHistogram($,Z,X,W,J)}recordGauge($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordGauge($,Z,X,W,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 V3=()=>{};import{metrics as YS,trace as jS}from"@opentelemetry/api";import{logs as VS}from"@opentelemetry/api-logs";import{OTLPLogExporter as HS}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as BS}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as GS}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as KS}from"@opentelemetry/resources";import{BatchLogRecordProcessor as FS,ConsoleLogRecordExporter as AS,LoggerProvider as fS}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as US,MeterProvider as DS,PeriodicExportingMetricReader as BK}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as LS,ConsoleSpanExporter as _S,SimpleSpanProcessor as zS}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as TS}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as OS,ATTR_SERVICE_VERSION as qS}from"@opentelemetry/semantic-conventions";class GK{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($,Z){this.resolveProperties(Z)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class S4{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=KS({[OS]:$.serviceName??"cline",...$.serviceVersion?{[qS]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)YS.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)VS.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return jS.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new C4({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new P4({...$,adapters:[Z],distinctId:m0($.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 Z=H3(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),W=Math.min(30000,Math.floor(Q*0.8)),J=Z.map((X)=>ES(X,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:W})).filter((X)=>X!==null);if(J.length===0)return null;return new DS({resource:$,readers:J})}createTracerProvider($){let Z=H3(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,W=this.options.otlpTracesHeaders??this.options.otlpHeaders,J=[];for(let X of Z){let Y=RS(X,{endpoint:Q,headers:W,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(Y)J.push(Y)}if(J.length===0)return null;return new TS({resource:$,spanProcessors:J})}createLoggerProvider($){let Z=H3(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((W)=>{let J=MS(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new FS(J,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((W)=>W!==null);if(Q.length===0)return null;return new fS({resource:$,processors:Q})}}function T9($){let Z=new S4($),Q=Z.createTelemetryService($);return Q.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:Z,telemetry:Q}}function s$($){if(vZ())return{telemetry:new GK($)};if($.enabled!==!0)return{telemetry:new P4({...$,distinctId:m0($.distinctId)})};return T9($)}function O9($){let{telemetry:Z,provider:Q}=s$($);return{telemetry:Z,provider:Q,flush:async()=>{let X=Q;if(X&&typeof X.forceFlush==="function")try{await X.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])}}}function H3($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function MS($,Z){if($==="console")return new AS;if(!Z.endpoint)return null;let Q=B3(Z.endpoint,"/v1/logs");return new HS({url:Q,headers:Z.headers})}function RS($,Z){if($==="console")return new zS(new _S);if(!Z.endpoint)return null;let Q=B3(Z.endpoint,"/v1/traces");return new LS(new GS({url:Q,headers:Z.headers}))}function ES($,Z){if($==="console")return new BK({exporter:new US,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=B3(Z.endpoint,"/v1/metrics");return new BK({exporter:new BS({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function B3($,Z){let Q=new URL($),W=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=W.endsWith(Z)?W:`${W}${Z}`,Q.toString()}var q9=F$(()=>{r0();g2();V3()});var LF={};n9(LF,{resolveCoreDistinctId:()=>m0,createOpenTelemetryTelemetryService:()=>T9,createConfiguredTelemetryService:()=>s$,createConfiguredTelemetryHandle:()=>O9,OpenTelemetryProvider:()=>S4,OpenTelemetryAdapter:()=>C4});var S9=F$(()=>{g2();q9()});import*as i00 from"@cline/llms";import{ClineNotSubscribedError as a00,ClineOrgIndividualInferenceSubscriptionError as s00,getClineOrgIndividualInferenceSubscriptionMessage as o00,getClineNotSubscribedMessage as t00,getClinePassSubscriptionUrl as e00,isClineNotSubscribedError as $10,isClineNotSubscribedMessage as Z10,isClineOrgIndividualInferenceSubscriptionError as Q10,isClineOrgIndividualInferenceSubscriptionMessage as W10}from"@cline/llms";import{buildClineSystemPrompt as X10,buildSdkErrorProperties as Y10,ContributionRegistry as j10,captureSdkError as V10,createClineTelemetryServiceConfig as H10,createClineTelemetryServiceMetadata as B10,createContributionRegistry as G10,createTool as K10,emptyWorkspaceManifest as F10,FEATURE_FLAGS as A10,FeatureFlagDefaultValue as f10,formatDisplayUserInput as U10,noopBasicLogger as D10,normalizeSdkError as L10,normalizeUserInput as _10,parseUserCommandEnvelope as z10,registerDisposable as T10,SDK_ERROR_TELEMETRY_EVENT as O10}from"@cline/shared";export*from"@cline/shared/storage";function wA($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function UJ($,Z,Q){let W=wA(Q);if(W)return W;let J=Z.trim();if(J){let X=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${X}`}return`Cline account request failed with status ${$}`}class a9{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let Z=$.apiBaseUrl.trim();if(!Z)throw Error("apiBaseUrl is required");this.apiBaseUrl=Z,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 Z=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(Z)}/balance`)}async fetchUsageTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/usages`)).items??[]}async fetchPaymentTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let Z=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)Z.searchParams.set("type",$.type);return this.request(`${Z.pathname}${Z.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}`)}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/balance`)}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(Z,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let Z=$?.trim();if(Z)return Z;let W=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(W)return W;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let Y=(await this.fetchUserOrganizations()).find((j)=>j.organizationId===$)?.memberId;if(!Y?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return Y}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let W=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,X=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let Y=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...W??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:J.signal});if(Y.status===204||Z?.expectNoContent){if(!Y.ok)throw Error(`Cline account request failed with status ${Y.status}`);return}let j=await Y.text(),V;if(j.trim())try{V=JSON.parse(j)}catch{if(!Y.ok)throw Error(UJ(Y.status,j,void 0));throw Error("Cline account response was not valid JSON")}if(!Y.ok)throw Error(UJ(Y.status,j,V));if(typeof V==="object"&&V!==null){let H=V;if(typeof H.success==="boolean"){if(!H.success)throw Error(H.error||"Cline account request failed");return H.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(X)}}}function DJ($){return $.action==="clineAccount"}async function LJ($,Z){switch($.operation){case"fetchMe":return Z.fetchMe();case"fetchBalance":return Z.fetchBalance($.userId);case"fetchUsageTransactions":return Z.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return Z.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return Z.fetchUserOrganizations();case"fetchOrganizationBalance":return Z.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return Z.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await Z.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return Z.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class s9{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 Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:Z})}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:Z,...$.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}}function m4($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((W)=>{$.onOpenUrlError?.({url:Z,error:W})})}catch(W){$.onOpenUrlError?.({url:Z,error:W})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}G0();import{getClineEnvironmentConfig as KZ}from"@cline/shared";function mA(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function H1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",W=$.timeoutMs??300000,J=$.successHtml??vA,X=mA(),Y=!1,j=null,V=null,H=null,B=(F)=>{if(Y)return;Y=!0,X.resolve(F)},G=()=>{if(j)clearTimeout(j),j=null;let F=H;if(H=null,V)V.close(),V.closeAllConnections?.(),V=null;if(F!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:F})).catch(()=>{})},K=async()=>{return j=setTimeout(()=>{G(),B(null)},W),X.promise};for(let F of $.ports){let A=Z.createServer((f,D)=>{try{let U=new URL(f.url||"",`http://${Q}:${F}`);if(U.pathname!==$.callbackPath){D.statusCode=404,D.end("Not found");return}let T={url:U,code:U.searchParams.get("code")??void 0,state:U.searchParams.get("state")??void 0,provider:U.searchParams.get("provider")??void 0,error:U.searchParams.get("error")??void 0};if(T.error){D.statusCode=400,D.end(`Authentication failed: ${T.error}`),G(),B(T);return}if(!T.code){D.statusCode=400,D.end("Missing authorization code");return}if($.expectedState&&T.state!==$.expectedState){D.statusCode=400,D.end("State mismatch");return}D.statusCode=200,D.setHeader("Content-Type","text/html; charset=utf-8"),D.end(J),G(),B(T)}catch{D.statusCode=500,D.end("Internal error")}}),L=await new Promise((f)=>{let D=(U)=>{A.off("error",D),f({bound:!1,error:U})};A.once("error",D),A.listen(F,Q,()=>{A.off("error",D),V=A,f({bound:!0})})});if(L.error){if(L.error.code==="EADDRINUSE")continue;throw G(),L.error}if(L.bound){H=F;let f=`http://${Q}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:F,callbackUrl:f})).catch(()=>{});return{callbackUrl:f,waitForCallback:K,cancelWait:()=>{G(),B(null)},close:()=>{G(),B(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var vA=`<!DOCTYPE html>
5
5
  <html lang="en">
6
6
  <head>
7
7
  <meta charset="utf-8">
@@ -51,7 +51,7 @@ ${Q.instructions}`).join(`
51
51
 
52
52
  `)}`}function R6($,Z){let Q=$?.trim(),W=Z?.trim();if(Q&&W)return`${Q}
53
53
 
54
- ${W}`;return Q||W||void 0}function jL($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(tX).sort((Q,W)=>Q.name.localeCompare(W.name))}function eX($){return M6(jL($))}import{validateWithZod as zv,zodToJsonSchema as Tv}from"@cline/shared";var L0={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"},U2=[L0.READ_FILES,L0.SEARCH_CODEBASE,L0.RUN_COMMANDS,L0.FETCH_WEB_CONTENT,L0.APPLY_PATCH,L0.EDITOR,L0.SKILLS,L0.ASK,L0.SUBMIT_AND_EXIT];G0();import{createTool as m1,validateWithZod as v1,zodToJsonSchema as f1}from"@cline/shared";var $Y="__clineInternalTelemetry";function ZY($){let Z=$?.__clineInternalTelemetry;return Z&&typeof Z==="object"&&"capture"in Z&&typeof Z.capture==="function"?Z:void 0}import{spawn as FY}from"node:child_process";import{StringDecoder as GL}from"node:string_decoder";import{getDefaultShell as KL,getShellArgs as FL}from"@cline/shared";import{validateWithZod as HL}from"@cline/shared";import{z as O}from"zod";var g1=6000,A8=O.string().describe("The absolute file path of a text file to read content from"),QY=O.object({start_line:O.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:O.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"),x1=O.object({path:A8,start_line:QY.shape.start_line,end_line:QY.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),N6=O.object({files:O.array(x1).describe("Array of file read requests. Omit start_line/end_line or set them to null to read from the start; provide integers to return only that inclusive one-based line range. 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.")}),WY=O.union([N6,x1,O.array(x1),O.array(O.string()),O.string(),O.object({files:O.array(O.union([A8,x1]))}),O.object({files:x1}),O.object({files:A8}),O.object({file_paths:O.array(A8)}),O.object({file_paths:O.string()}),O.object({paths:O.array(O.union([A8,x1]))}),O.object({paths:x1}),O.object({paths:O.string()})]),w6=O.object({queries:O.array(O.string()).describe("Array of regex search queries to execute")}),JY=O.union([w6,O.array(O.string()),O.string(),O.object({queries:O.string()})]),E6=O.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${g1*2} characters) to avoid timeouts.`),f8=O.object({command:O.string().min(1).describe("The executable to run directly without shell parsing."),args:O.array(O.string()).optional().describe("Optional argv list passed directly to the executable.")}),XY=O.union([E6,f8]),C6=O.object({commands:O.array(E6).describe("Array of complete shell command strings to execute.")}),VL=O.object({commands:O.array(XY)}),YY=O.union([C6,VL,O.object({commands:XY}),O.array(f8),f8,O.object({command:E6}),O.object({cmd:E6}),O.array(O.string()),O.string()]),jY=O.object({url:O.string().describe("The URL to fetch"),prompt:O.string().min(2).describe("Analysis prompt for the fetched content")}),P6=O.object({requests:O.array(jY).describe("Array of the URLs for the web fetch requests")}),S6=O.object({path:O.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:O.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 ${g1} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:O.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 ${g1} 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:O.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."),b6=O.object({input:O.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."),VY=O.union([b6,O.string()]),y6=O.object({skill:O.string().min(1).describe("Name of the skill to execute."),args:O.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),h6=O.object({question:O.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:O.array(O.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),k6=O.object({summary:O.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:O.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.
54
+ ${W}`;return Q||W||void 0}function jL($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(tX).sort((Q,W)=>Q.name.localeCompare(W.name))}function eX($){return M6(jL($))}import{validateWithZod as Tv,zodToJsonSchema as Ov}from"@cline/shared";var L0={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"},U2=[L0.READ_FILES,L0.SEARCH_CODEBASE,L0.RUN_COMMANDS,L0.FETCH_WEB_CONTENT,L0.APPLY_PATCH,L0.EDITOR,L0.SKILLS,L0.ASK,L0.SUBMIT_AND_EXIT];G0();import{createTool as m1,validateWithZod as v1,zodToJsonSchema as f1}from"@cline/shared";var $Y="__clineInternalTelemetry";function ZY($){let Z=$?.__clineInternalTelemetry;return Z&&typeof Z==="object"&&"capture"in Z&&typeof Z.capture==="function"?Z:void 0}import{spawn as FY}from"node:child_process";import{StringDecoder as GL}from"node:string_decoder";import{getDefaultShell as KL,getShellArgs as FL}from"@cline/shared";import{validateWithZod as HL}from"@cline/shared";import{z as O}from"zod";var g1=6000,A8=O.string().describe("The absolute file path of a text file to read content from"),QY=O.object({start_line:O.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:O.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"),x1=O.object({path:A8,start_line:QY.shape.start_line,end_line:QY.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),N6=O.object({files:O.array(x1).describe("Array of file read requests. Omit start_line/end_line or set them to null to read from the start; provide integers to return only that inclusive one-based line range. 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.")}),WY=O.union([N6,x1,O.array(x1),O.array(O.string()),O.string(),O.object({files:O.array(O.union([A8,x1]))}),O.object({files:x1}),O.object({files:A8}),O.object({file_paths:O.array(A8)}),O.object({file_paths:O.string()}),O.object({paths:O.array(O.union([A8,x1]))}),O.object({paths:x1}),O.object({paths:O.string()})]),w6=O.object({queries:O.array(O.string()).describe("Array of regex search queries to execute")}),JY=O.union([w6,O.array(O.string()),O.string(),O.object({queries:O.string()})]),E6=O.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${g1*2} characters) to avoid timeouts.`),f8=O.object({command:O.string().min(1).describe("The executable to run directly without shell parsing."),args:O.array(O.string()).optional().describe("Optional argv list passed directly to the executable.")}),XY=O.union([E6,f8]),C6=O.object({commands:O.array(E6).describe("Array of complete shell command strings to execute.")}),VL=O.object({commands:O.array(XY)}),YY=O.union([C6,VL,O.object({commands:XY}),O.array(f8),f8,O.object({command:E6}),O.object({cmd:E6}),O.array(O.string()),O.string()]),jY=O.object({url:O.string().describe("The URL to fetch"),prompt:O.string().min(2).describe("Analysis prompt for the fetched content")}),P6=O.object({requests:O.array(jY).describe("Array of the URLs for the web fetch requests")}),S6=O.object({path:O.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:O.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 ${g1} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:O.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 ${g1} 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:O.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."),b6=O.object({input:O.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."),VY=O.union([b6,O.string()]),y6=O.object({skill:O.string().min(1).describe("Name of the skill to execute."),args:O.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),h6=O.object({question:O.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:O.array(O.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),k6=O.object({summary:O.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:O.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.
55
55
  'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
56
56
  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 O$($){if($ instanceof Error)return $.message;return String($)}function HY($){if(typeof $.old_text==="string"&&$.old_text.length>g1)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${g1}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>g1)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${g1}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class D2 extends Error{timeoutMs;constructor($,Z){super($);this.name="TimeoutError",this.timeoutMs=Z}}function A1($,Z,Q){return Promise.race([$,new Promise((W,J)=>{setTimeout(()=>J(new D2(Q,Z)),Z)})])}function I6($){let{path:Z,start_line:Q,end_line:W}=$;if(Q==null&&W==null)return Z;return`${Z}:${Q??1}-${W??"EOF"}`}function BY($){let{start_line:Z,end_line:Q}=$;if(Z==null||Q==null||Z<=Q)return null;return`start_line must be less than or equal to end_line (received start_line: ${Z}, end_line: ${Q})`}function GY($){let Z=HL(YY,$);if(typeof Z==="string")return[Z];if(Array.isArray(Z))return Z;if("commands"in Z)return Array.isArray(Z.commands)?Z.commands:[Z.commands];if("command"in Z)return"args"in Z?[Z]:[Z.command];if("cmd"in Z)return[Z.cmd];return[Z]}function BL($){if(typeof $==="string")return $;let Z=$.args??[];if(Z.length===0)return $.command;let Q=Z.map((W)=>/[\s"]/u.test(W)?JSON.stringify(W):W);return`${$.command} ${Q.join(" ")}`}var OQ=200;function KY($){let Z=BL($);if(Z.length<=OQ)return Z;let Q=Z.length-OQ;return`${Z.slice(0,OQ)} ... [command truncated: ${Q} more chars; full command is in the tool call input]`}var q$=48000;function U8($,Z={}){let Q=Z.maxChars??48000,W=Z.totalChars??$.length;if($.length<=Q&&W<=Q)return $;let J=Math.ceil(Q/2),X=Math.max(1,Q-J);return`${$.slice(0,J)}
57
57
  [... output truncated: ${W} chars total. Refine the command (grep, head, tail) to view the elided middle ...]
@@ -449,13 +449,13 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
449
449
  error = ?,
450
450
  scheduled_for = COALESCE(?, scheduled_for),
451
451
  updated_at = ?
452
- WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,Z,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,Z){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(Z,F0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,F0(),$)}}class a8{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new n8({dbPath:$.dbPath});let Z=$.specs;this.reconciler=new M7({store:this.store,specs:Z}),this.materializer=new d8({store:this.store}),this.eventIngress=new G7({store:this.store,logger:$.logger}),this.runner=new l8({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:Z,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new R7({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let W=$.logger;if(W)if(W.error)W.error("cron.watcher.failed",{error:Q});else W.log("cron.watcher.failed",{error:Q})}})}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($)}}import{readdir as JM,readFile as GH}from"node:fs/promises";import{join as KH}from"node:path";import{formatDisplayUserInput as XM,normalizeUserInput as YM}from"@cline/shared";import{resolveSessionDataDir as FH}from"@cline/shared/storage";import{mkdirSync as aq,writeFileSync as sq}from"node:fs";import{dirname as oq}from"node:path";import{normalizeUserInput as tq}from"@cline/shared";import{nanoid as eq}from"nanoid";import{nanoid as iq}from"nanoid";function s8($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function L5($,Z){let Q=s8($),W=s8(Z),J=`${Q}__${W}`;return J.length>180?J.slice(0,180):J}function C7($,Z){let Q=s8($),W=s8(Z);return`${Q}__teamtask__${W}__${iq(6)}`}function o8($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+12),X=J.lastIndexOf("__");if(X<=0)return null;let Y=J.slice(0,X),j=J.slice(X+2);if(!W||!Y||!j)return null;return{rootSessionId:W,agentId:Y,teamTaskId:j}}function _5($){if(o8($))return null;let Z="__",Q=$.indexOf(Z);if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+Z.length);if(!W||!J)return null;return{rootSessionId:W,agentId:J}}function P7($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let Z=String($.reason??"").toLowerCase();if(Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt"))return"cancelled";if(Z.includes("fail")||Z.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as o}from"zod";var nq=o.enum(gZ),N0=o.object({version:o.literal(1),session_id:o.string().min(1),source:o.string().min(1),pid:o.number().int(),started_at:o.string().min(1),ended_at:o.string().min(1).optional(),exit_code:o.number().int().nullable().optional(),status:nq,interactive:o.boolean(),provider:o.string().min(1),model:o.string().min(1),cwd:o.string().min(1),workspace_root:o.string().min(1),team_name:o.string().min(1).optional(),enable_tools:o.boolean(),enable_spawn:o.boolean(),enable_teams:o.boolean(),prompt:o.string().optional(),metadata:o.record(o.string(),o.unknown()).optional(),messages_path:o.string().min(1).optional()});function QH($){if(!$)return!1;return Object.values($).some((Z)=>typeof Z==="function")}function b7($,Z){let Q=[...$??[],...Z??[]];if(Q.length===0)return;let W=[],J=new Set;for(let X of Q){if(J.has(X.name))continue;J.add(X.name),W.push(X)}return W}function WH($){return JSON.stringify($,(Z,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function D1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function S7($,Z){let Q={...$};Q.id=D1(Q.id)??eq();let W=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,J={id:D1(W?.id)??D1(Q.modelId)??D1(Z?.id),provider:D1(W?.provider)??D1(Q.providerId)??D1(Z?.provider),family:D1(W?.family)??D1(Z?.family)};if(delete Q.providerId,delete Q.modelId,J.id&&J.provider)Q.modelInfo={id:J.id,provider:J.provider,...J.family?{family:J.family}:{}};else delete Q.modelInfo;return Q}function z5($){return $.map((Z)=>S7(Z))}function T5($,Z,Q=[]){let W=$.map((V,H)=>{let B=Q[H],K=B?.role===V.role&&JSON.stringify(B.content)===JSON.stringify(V.content)?{...B,...V}:{...V};return S7(K)}),J=Q.length,X=[];for(let V=J;V<W.length;V+=1)if(W[V]?.role==="assistant")X.push(V);if(X.length===0){let V=[...W].reverse().findIndex((H)=>H.role==="assistant");if(V===-1)return W;X.push(W.length-1-V)}let Y=X[X.length-1],j=X.some((V)=>W[V]?.metrics);for(let V of X){let H=W[V],B=H.metrics;if(!B&&V===Y&&!j){let G=Z.usage;B={inputTokens:G.inputTokens,outputTokens:G.outputTokens,cacheReadTokens:G.cacheReadTokens??0,cacheWriteTokens:G.cacheWriteTokens??0,cost:G.totalCost}}W[V]={...S7(H,{id:Z.model.id,provider:Z.model.provider,family:Z.model.info?.family}),...B?{metrics:B}:{},ts:H.ts??Z.endedAt.getTime()}}return W}function t8($){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 $M=120;function I$($){let Z=$?.trim();return Z?Z.slice(0,$M):void 0}function y7($){let Z=tq($??"").trim();if(!Z)return;return I$(Z.split(`
452
+ WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,Z,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,Z){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(Z,F0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,F0(),$)}}class a8{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new n8({dbPath:$.dbPath});let Z=$.specs;this.reconciler=new M7({store:this.store,specs:Z}),this.materializer=new d8({store:this.store}),this.eventIngress=new G7({store:this.store,logger:$.logger}),this.runner=new l8({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:Z,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new R7({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let W=$.logger;if(W)if(W.error)W.error("cron.watcher.failed",{error:Q});else W.log("cron.watcher.failed",{error:Q})}})}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($)}}import{readdir as XM,readFile as GH}from"node:fs/promises";import{join as KH}from"node:path";import{formatDisplayUserInput as YM,normalizeUserInput as jM}from"@cline/shared";import{resolveSessionDataDir as FH}from"@cline/shared/storage";import{mkdirSync as aq,writeFileSync as sq}from"node:fs";import{dirname as oq}from"node:path";import{normalizeUserInput as tq,stripModeNotices as eq}from"@cline/shared";import{nanoid as $M}from"nanoid";import{nanoid as iq}from"nanoid";function s8($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function L5($,Z){let Q=s8($),W=s8(Z),J=`${Q}__${W}`;return J.length>180?J.slice(0,180):J}function C7($,Z){let Q=s8($),W=s8(Z);return`${Q}__teamtask__${W}__${iq(6)}`}function o8($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+12),X=J.lastIndexOf("__");if(X<=0)return null;let Y=J.slice(0,X),j=J.slice(X+2);if(!W||!Y||!j)return null;return{rootSessionId:W,agentId:Y,teamTaskId:j}}function _5($){if(o8($))return null;let Z="__",Q=$.indexOf(Z);if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+Z.length);if(!W||!J)return null;return{rootSessionId:W,agentId:J}}function P7($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let Z=String($.reason??"").toLowerCase();if(Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt"))return"cancelled";if(Z.includes("fail")||Z.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as o}from"zod";var nq=o.enum(gZ),N0=o.object({version:o.literal(1),session_id:o.string().min(1),source:o.string().min(1),pid:o.number().int(),started_at:o.string().min(1),ended_at:o.string().min(1).optional(),exit_code:o.number().int().nullable().optional(),status:nq,interactive:o.boolean(),provider:o.string().min(1),model:o.string().min(1),cwd:o.string().min(1),workspace_root:o.string().min(1),team_name:o.string().min(1).optional(),enable_tools:o.boolean(),enable_spawn:o.boolean(),enable_teams:o.boolean(),prompt:o.string().optional(),metadata:o.record(o.string(),o.unknown()).optional(),messages_path:o.string().min(1).optional()});function QH($){if(!$)return!1;return Object.values($).some((Z)=>typeof Z==="function")}function b7($,Z){let Q=[...$??[],...Z??[]];if(Q.length===0)return;let W=[],J=new Set;for(let X of Q){if(J.has(X.name))continue;J.add(X.name),W.push(X)}return W}function WH($){return JSON.stringify($,(Z,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function D1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function S7($,Z){let Q={...$};Q.id=D1(Q.id)??$M();let W=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,J={id:D1(W?.id)??D1(Q.modelId)??D1(Z?.id),provider:D1(W?.provider)??D1(Q.providerId)??D1(Z?.provider),family:D1(W?.family)??D1(Z?.family)};if(delete Q.providerId,delete Q.modelId,J.id&&J.provider)Q.modelInfo={id:J.id,provider:J.provider,...J.family?{family:J.family}:{}};else delete Q.modelInfo;return Q}function z5($){return $.map((Z)=>S7(Z))}function T5($,Z,Q=[]){let W=$.map((V,H)=>{let B=Q[H],K=B?.role===V.role&&JSON.stringify(B.content)===JSON.stringify(V.content)?{...B,...V}:{...V};return S7(K)}),J=Q.length,X=[];for(let V=J;V<W.length;V+=1)if(W[V]?.role==="assistant")X.push(V);if(X.length===0){let V=[...W].reverse().findIndex((H)=>H.role==="assistant");if(V===-1)return W;X.push(W.length-1-V)}let Y=X[X.length-1],j=X.some((V)=>W[V]?.metrics);for(let V of X){let H=W[V],B=H.metrics;if(!B&&V===Y&&!j){let G=Z.usage;B={inputTokens:G.inputTokens,outputTokens:G.outputTokens,cacheReadTokens:G.cacheReadTokens??0,cacheWriteTokens:G.cacheWriteTokens??0,cost:G.totalCost}}W[V]={...S7(H,{id:Z.model.id,provider:Z.model.provider,family:Z.model.info?.family}),...B?{metrics:B}:{},ts:H.ts??Z.endedAt.getTime()}}return W}function t8($){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 ZM=120;function I$($){let Z=$?.trim();return Z?Z.slice(0,ZM):void 0}function y7($){let Z=eq(tq($??"")).trim();if(!Z)return;return I$(Z.split(`
453
453
  `)[0]?.trim())}function i1($){if(!$)return;let Z={...$},Q=I$(typeof Z.title==="string"?Z.title:void 0);if(Q)Z.title=Q;else delete Z.title;return Object.keys(Z).length>0?Z:void 0}function e8($){let Z=i1($.metadata)??{},Q=$.title!==void 0?I$($.title):y7($.prompt);if(Q)Z.title=Q;return Object.keys(Z).length>0?Z:void 0}function h7($){let Z=o8($);if(Z)return{agent:"teammate",sessionId:Z.rootSessionId,taskType:"team"};let Q=_5($);if(Q)return{agent:"subagent",sessionId:Q.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function k7($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:z5($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function JH($,Z,Q){aq(oq($),{recursive:!0}),sq($,`${JSON.stringify(k7({updatedAt:Z,context:Q,messages:[]}),null,2)}
454
- `,"utf8")}function XH($,Z){return N0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:Z?.endedAt??$.endedAt??void 0,exit_code:Z?.exitCode??$.exitCode??void 0,status:Z?.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:Z?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function YH($,Z,Q){let W=0;while(!0){let J=await $();if(J===void 0)return{updated:!1};let X=await Z(J);if(typeof X==="object"&&X!==null&&"updated"in X&&X.updated===!1){if(W+=1,W>=Q)return X;continue}return X}}import{existsSync as ZM}from"node:fs";import{readFile as QM}from"node:fs/promises";import{formatDisplayUserInput as jH}from"@cline/shared";class $4{listeners=new Set;subscribe($,Z){let Q={listener:$,sessionId:Z?.sessionId?.trim()||void 0};return this.listeners.add(Q),()=>{this.listeners.delete(Q)}}emit($){let Z=$.payload.sessionId?.trim();for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==Z)continue;Q.listener($)}}get size(){return this.listeners.size}}async function n1($){let Z=$?.trim();if(!Z||!ZM(Z))return[];try{let Q=(await QM(Z,"utf8")).trim();if(!Q)return[];let W=JSON.parse(Q);if(Array.isArray(W))return VH(W);if(W&&typeof W==="object"&&!Array.isArray(W)){let J=W.messages;if(Array.isArray(J))return VH(J)}return[]}catch{return[]}}function WM($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:jH($.content)};return{...$,content:$.content.map((Z)=>{if(Z.type!=="text"||typeof Z.text!=="string")return Z;return{...Z,text:jH(Z.text)}})}}function VH($){return $.map(WM)}function I7($){return $?{...$}:void 0}async function HH($,Z){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await Z.queueSpawnRequest($);let W=await Z.upsertSubagentSessionFromHook($);if(!W)return;await Z.appendSubagentHookAudit(W,$),await Z.applySubagentStatus(W,$)}function Z4($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function x0($){let Z=Z4($);if(!Z)return;return Z.toLowerCase()==="unknown"?void 0:Z}function O5($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function jM($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function g7($){let Z=$??200;return Number.isFinite(Z)?Math.max(0,Math.floor(Z)):200}function VM($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function HM($){return $.isSubagent!==!0&&!Z4($.parentSessionId)}function BM($){let Z=$.match(/\d{13,}/g);if(!Z||Z.length===0)return 0;let Q=0;for(let W of Z){let J=Number.parseInt(W,10);if(Number.isFinite(J)&&J>Q)Q=J}return Q}function m7($){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 GM($){let Z=g7($);if(Z===0)return[];let Q=FH(),J=(await JM(Q,{withFileTypes:!0}).catch(()=>[])).filter((Y)=>Y.isDirectory()).map((Y)=>({entry:Y,recency:BM(Y.name.trim())})).sort((Y,j)=>j.recency-Y.recency||j.entry.name.localeCompare(Y.entry.name));return(await Promise.all(J.map(async({entry:Y})=>{let j=Y.name.trim();if(!j)return;let V=KH(Q,j,`${j}.json`),H=await GH(V,"utf8").catch(()=>{return});if(!H)return;let B;try{B=JSON.parse(H)}catch{return}let G=N0.safeParse(B);if(!G.success)return;return m7(G.data)}))).filter((Y)=>Boolean(Y)).sort((Y,j)=>j.startedAt.localeCompare(Y.startedAt)).slice(0,Z)}async function KM($,Z,Q){let W=g7(Z);if(W===0)return await $.listSessions(0),[];let J=Q.includeSubagents?W:VM(W),X=await $.listSessions(J);return(Q.includeSubagents?X:X.filter(HM)).slice(0,W)}function FM($){if(typeof $==="string")return $.trim();let Z=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let W=Q;if(W.type!=="text")continue;let J=W.text?.trim();if(J)Z.push(J)}return Z.join(`
455
- `).trim()}function BH($){return $.replace(/\s+/g," ").trim()}function AM($,Z){if($.length<=Z)return $;return`${$.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function fM($){for(let Z of["user","assistant"])for(let Q of $){if(Q.role!==Z)continue;let W=BH(FM(Q.content));if(!W)continue;let J=Z==="user"?BH(XM(W)):W,X=YM(J.split(`
456
- `)[0]??J);return AM(X,50)}return}function UM($){let Z=0;for(let Q of $)Z+=O5(Q.metrics?.cost)??0;return Z}function DM($){let Z,Q;for(let W=$.length-1;W>=0;W-=1){let J=$[W];if(!Z)Z=x0(J.modelInfo?.provider);if(!Q)Q=x0(J.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function LM($){return x0($?.provider)??x0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function _M($){return x0($?.model)??x0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function x7($,Z){let Q=jM($.metadata),W=Z4(Z?.title)??Z4(Q?.title),J=O5(Z?.totalCost)??O5(Q?.totalCost),X=Q||W!==void 0||J!==void 0?{...Q??{},...W!==void 0?{title:W}:{},...J!==void 0?{totalCost:J}:{}}:void 0;return{...$,provider:x0(Z?.provider)??x0($.provider)??LM(Q)??"",model:x0(Z?.model)??x0($.model)??_M(Q)??"",metadata:X}}function zM($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function TM($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!zM(Q)}async function OM($,Z){return await Promise.all(Z.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let W=await $.readSessionMessages(Q.sessionId);return TM(Q,W)?{...Q,status:"idle"}:Q}))}async function qM($,Z){return await Promise.all(Z.map(async(Q)=>{let W=x7(Q),J=Boolean(Z4(W.metadata?.title)),X=Boolean(x0(W.provider)),Y=Boolean(x0(W.model)),j=O5(W.metadata?.totalCost),V=j!==void 0&&j>0;if(J&&X&&Y&&V)return W;let H=await $.readSessionMessages(Q.sessionId);if(H.length===0)return W;let B=DM(H),G=UM(H);return x7(Q,{title:J?void 0:fM(H),provider:X?void 0:B.provider,model:Y?void 0:B.model,totalCost:V||G<=0?void 0:G})}))}async function v7($,Z={}){let Q=g7(Z.limit),W=Z.includeSubagents===!0,J=await KM($,Q,{includeSubagents:W}),X=Z.includeManifestFallback===!0&&J.length<Q?await GM(Math.min(Math.max(Q*2,100),500)):[],Y=new Map;for(let H of[...J,...X]){if(Y.has(H.sessionId))continue;Y.set(H.sessionId,H)}let j=X.length===0?J:Array.from(Y.values()).sort((H,B)=>B.startedAt.localeCompare(H.startedAt)).slice(0,Q),V=await OM($,j);if(Z.hydrate===!1)return V.map((H)=>x7(H));return await qM($,V)}async function MM($){let Z=$.trim();if(!Z)return;let Q=KH(FH(),Z,`${Z}.json`),W=await GH(Q,"utf8").catch(()=>{return});if(!W)return;try{let J=N0.safeParse(JSON.parse(W));return J.success?J.data.messages_path:void 0}catch{return}}async function RM($,Z={}){let Q=new Map;return await v7({listSessions:async(J)=>{let X=await $.listSessions(J);Q.clear();for(let Y of X)Q.set(Y.sessionId,Y);return X.map(t8)},readSessionMessages:async(J)=>{let X=Q.get(J)?.messagesPath??await MM(J);return await n1(X)}},Z)}import{captureSdkError as aG}from"@cline/shared";import{createSessionId as ER,isHubProtocolCompatible as NR,resolveClineBuildEnv as wR,resolveHubCommandTimeoutMs as CR}from"@cline/shared";import{spawn as QR}from"node:child_process";import{closeSync as WR,mkdirSync as JR,openSync as XR}from"node:fs";import{basename as YR,dirname as jR,join as VR}from"node:path";import{fileURLToPath as HR}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as BR,isHubDaemonProcess as wH,isHubProtocolCompatible as GR,resolveClineBuildEnv as CH,withResolvedClineBuildEnv as KR}from"@cline/shared";import{createHash as EM,randomBytes as NM}from"node:crypto";import{existsSync as wM}from"node:fs";import{chmod as CM,mkdir as c7,readFile as LH,rm as u7,writeFile as _H}from"node:fs/promises";import{dirname as zH,join as d7}from"node:path";import{resolveClineDataDir as W4,resolveClineDir as Pd}from"@cline/shared/storage";var fH="0.0.55";var Q4={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:fH,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"]};var PM="CLINE_HUB_DISCOVERY_PATH",SM="CLINE_HUB_BUILD_ID",UH=30000,bM=15000,yM=100;function hM($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function kM($){return EM("sha256").update($).digest("hex").slice(0,12)}function IM($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(Z){return Z instanceof Error&&"code"in Z?String(Z.code)==="EPERM":!1}}function TH(){return NM(32).toString("hex")}function xM($){return new Promise((Z)=>setTimeout(Z,$))}function gM($){return`${$}.lock`}async function mM($){try{let Z=JSON.parse(await LH(d7($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function DH($){await u7($,{recursive:!0,force:!0}).catch(()=>{return})}function OH(){return process.env[SM]?.trim()||String(Q4.version)}function x$($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${kM($)}`,Q=process.env[PM]?.trim()||d7(W4(),"locks","hub","owners",`${hM(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function bd($=`hub-${Date.now().toString(36)}`){return x$($)}async function A0($){try{let Z=JSON.parse(await LH($,"utf8"));if(typeof Z.hubId!=="string"||typeof Z.protocolVersion!=="string"||typeof Z.authToken!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string"||typeof Z.startedAt!=="string"||typeof Z.updatedAt!=="string")return;return{hubId:Z.hubId,protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,authToken:Z.authToken,host:Z.host,port:Z.port,url:Z.url,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:Z.startedAt,updatedAt:Z.updatedAt}}catch{return}}async function qH($,Z){await c7(zH($),{recursive:!0}),await u7($,{force:!0}).catch(()=>{return}),await _H($,`${JSON.stringify(Z,null,2)}
457
- `,{encoding:"utf8",mode:384}),await CM($,384)}async function a0($){await u7($,{force:!0}).catch(()=>{return})}async function MH($,Z){let Q=gM($);await c7(zH(Q),{recursive:!0});let W=Date.now()+bM;while(!0)try{await c7(Q,{recursive:!1}),await _H(d7(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
458
- `,"utf8");try{return await Z()}finally{await DH(Q)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let Y=await mM(Q),j=Y?Date.now()-Date.parse(Y.acquiredAt):UH+1;if(!Y||!IM(Y.pid)||j>UH){await DH(Q);continue}if(Date.now()>=W)throw Error(`Timed out waiting for hub startup lock ${Q}`);await xM(yM)}}async function g$($,Z){try{let Q=await fetch(Z?.authToken?vM($):RH($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let W=await Q.json();if(typeof W.protocolVersion!=="string"||typeof W.host!=="string"||typeof W.port!=="number"||typeof W.url!=="string")return;return{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((J)=>typeof J==="string"):void 0,coreVersion:typeof W.coreVersion==="string"?W.coreVersion:void 0,buildId:typeof W.buildId==="string"?W.buildId:void 0,host:W.host,port:W.port,url:W.url,hubId:typeof W.hubId==="string"?W.hubId:void 0,authToken:typeof W.authToken==="string"?W.authToken:void 0,pid:typeof W.pid==="number"?W.pid:void 0,startedAt:typeof W.startedAt==="string"?W.startedAt:void 0,updatedAt:typeof W.updatedAt==="string"?W.updatedAt:void 0}}catch{return}}function L1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function RH($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function vM($){let Z=new URL(RH($));return Z.pathname="/status",Z.toString()}function yd($){return wM($)}import{CLINE_HUB_DEV_PORT as cM,CLINE_HUB_PORT as uM,resolveClineBuildEnv as dM}from"@cline/shared";var lM="CLINE_HUB_HOST",pM="CLINE_HUB_PORT",rM="CLINE_HUB_PATHNAME",iM="127.0.0.1",nM=uM,aM="/hub";function EH($){return dM($)==="development"?cM:nM}function sM($={}){return($.env??process.env)[lM]?.trim()||iM}function q5($={}){let Q=($.env??process.env)[pM]?.trim();if(!Q)return EH($);let W=Number.parseInt(Q,10);if(!Number.isInteger(W)||W<1||W>65535)return EH($);return W}function oM($={}){return($.env??process.env)[rM]?.trim()||aM}function a1($={},Z={}){return{host:$.host??sM(Z),port:$.port??q5(Z),pathname:$.pathname??oM(Z)}}import{join as tM}from"node:path";var eM="shared:cline",$R="CLINE_HUB_DISCOVERY_PATH",ZR="hub-production";function vd($){let Z=b$($.trim());return x$(`workspace:${Z||$.trim()}`)}function _1($=eM){return x$($)}function s1(){return{ownerId:ZR,discoveryPath:process.env[$R]?.trim()||tM(W4(),"locks","hub","production.json")}}var FR=8000,AR=200,fR=3000,UR=100,DR=[100,250,500,1000,2000],LR="--cline-hub-daemon";function _R($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function zR(){try{let $=VR(W4(),"logs","hub-daemon.log");return JR(jR($),{recursive:!0}),{fd:XR($,"a"),logPath:$}}catch{return}}function PH(){return CH()==="production"?s1():_1()}function m$($){return GR($).compatible}function NH($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function v$($,Z){try{return await g$($,{authToken:Z})}catch{return}}async function TR($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await v$($))?.url)return!0;await new Promise((J)=>setTimeout(J,UR))}return!1}async function M5($,Z){if(await l7($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await TR($.url,fR);return await a0(Z).catch(()=>{return}),Q}async function J4($,Z){if(m$($))return!0;return M5($,Z)}async function SH($){if(CH()!=="production")return;let Z=_1();if(Z.discoveryPath===$.discoveryPath)return;let Q=await A0(Z.discoveryPath);if(Q?.url)await M5(Q,Z.discoveryPath);else await a0(Z.discoveryPath).catch(()=>{return})}function OR(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return HR(new URL(`./entry.${$}`,import.meta.url))}function qR($,Z){let Q=OR(),W=process.execPath?.trim();if(!W)throw Error("unable to resolve runtime executable for hub daemon");let J=YR(W).toLowerCase().includes("bun"),X=Q.startsWith("/$bunfs/"),Y=J&&Q.toLowerCase().endsWith(".ts"),j=X?[LR]:[...Y?["--conditions=development"]:[],Q];return{launcher:W,args:[...j,"--cwd",$,..._R(Z)],cwd:$,env:{...KR(process.env),CLINE_NO_INTERACTIVE:"1",[BR]:"1"}}}function MR($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Q="message"in $?$.message:void 0;return typeof Q==="string"&&Q.includes("ETXTBSY")}function RR($,Z={}){if(wH())return;let Q=qR($,Z),W=zR();try{QR(Q.launcher,Q.args,{detached:!0,stdio:W?["ignore",W.fd,W.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(W)WR(W.fd)}}async function R5($,Z={}){for(let Q=0;;Q++)try{RR($,Z);return}catch(W){let J=DR[Q];if(!MR(W)||J===void 0)throw W;await new Promise((X)=>setTimeout(X,J))}}function bH($,Z={}){if(wH())return;let Q=PH(),W=a1(Z),J=L1(W.host,W.port,W.pathname),X=Z.allowPortFallback===!0&&W.port!==0;SH(Q).catch(()=>{return}).then(()=>A0(Q.discoveryPath)).then(async(Y)=>{let j=!1;if(Y?.url)if(!Y.authToken){if(j=!0,!await M5(Y,Q.discoveryPath)&&!X)return}else{let B=await v$(Y.url,Y.authToken);if(B?.url&&m$(B)&&await o1(B.url,{authToken:Y.authToken}))return;if(B?.url)await J4({...B,authToken:Y.authToken},Q.discoveryPath);else await a0(Q.discoveryPath).catch(()=>{return})}let V=await v$(J);if(V?.url){if(m$(V)){if(!X||!j)return}else if(!await J4({...V,authToken:void 0},Q.discoveryPath)&&!X)return}let H=X?{...W,port:0}:W;await R5($,H)}).catch(()=>{})}async function od($,Z={}){let Q=PH(),W=Z.host!==void 0||Z.port!==void 0||Z.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=a1(Z),X=L1(J.host,J.port,J.pathname),Y=(F)=>{if(!W)k2(F.url,F.authToken);return F};await SH(Q).catch(()=>{return});let j=await A0(Q.discoveryPath),V=!1;if(j?.url){let F=j.authToken;if(!F)V=!0,await M5(j,Q.discoveryPath);else{let A=await v$(j.url,F);if(A?.url&&m$(A)&&await o1(A.url,{authToken:F}))return Y({url:A.url,authToken:F});if(A?.url)await J4({...A,authToken:F},Q.discoveryPath);else await a0(Q.discoveryPath).catch(()=>{return})}}let H=await v$(X);if(H?.url){let F=NH(H,j,X);if(m$(H))throw Error(`A compatible Cline Hub is already running at ${X}, 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 J4(F,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is already running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let G=Z.allowPortFallback===!0&&J.port!==0?{...J,port:0}:J;await R5($,G);let K=Date.now()+FR;while(Date.now()<K){let F=await A0(Q.discoveryPath);if(F?.url&&F.authToken){let L=await v$(F.url,F.authToken);if(L?.url&&m$(L)&&await o1(L.url,{authToken:F.authToken}))return Y({url:L.url,authToken:F.authToken})}let A=await v$(X);if(A?.url&&!m$(A)){let L=NH(A,F,X);if(!await J4(L,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is still running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((L)=>setTimeout(L,AR))}throw Error("Timed out waiting for detached hub startup.")}function N5(){return wR()==="production"?s1():_1()}function PR(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function xH($){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((Z)=>Buffer.from(Z))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return xH($.data);return String($)}function SR($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function yH($){let Z=$,Q=SR(Z.reason);return new g0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:p7,{closeCode:Z.code,closeReason:Q||void 0})}function bR($,Z){if($ instanceof g0)return $;if($ instanceof Error)return new g0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new g0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new g0("hub_connect_failed",Q);let W=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new g0("hub_connect_failed",W?`Failed to connect to hub at ${Z.toString()} (${W} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var yR=8000,hR=200,hH="*",kH=8000,kR="cline-hub-auth.",gH=new Map,mH=new Set,IR=3000,xR=3000,gR=100,p7="Hub connection closed",mR=250,vR=5000,IH=0.5;class g0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function cR($){return $ instanceof g0}class E5 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function vH($,Z){return $ instanceof E5&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function cH($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=n7($.toString());return Q?gH.get(Q):void 0}function uR($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function n7($){if(!uR($))return;let Z=new URL(I2($));return Z.search="",Z.hash="",Z.toString()}function r7($){let Z=n7($);return!!Z&&mH.has(Z)}function k2($,Z){let Q=n7($);if(Q){if(mH.add(Q),Z?.trim())gH.set(Q,Z)}return $}class z1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new g0("hub_connection_closed",p7);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),Z=this.options.authToken?.trim()||cH($);$.hash="";let W=new(PR())($.toString(),Z?[`${kR}${Z}`]:void 0);this.socket=W;let J=!1;this.connectPromise=new Promise((X,Y)=>{let j=!1,V=setTimeout(()=>{if(j)return;j=!0,J=!0,this.lastCloseError=new g0("hub_connect_timeout",`Timed out connecting to hub after ${kH}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{W.close()}catch{}Y(this.lastCloseError)},kH);W.addEventListener("open",()=>{if(j)return;j=!0,clearTimeout(V),X()}),W.addEventListener("error",(H)=>{if(j)return;j=!0,clearTimeout(V),this.lastCloseError=bR(H,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)}),W.addEventListener("close",(H)=>{if(j)return;if(j=!0,clearTimeout(V),!J)this.lastCloseError=yH(H),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)})}),W.addEventListener("message",(X)=>{this.handleFrame(JSON.parse(xH(X)))}),W.addEventListener("close",(X)=>{if(this.socket!==W)return;if(!J)this.lastCloseError=yH(X),this.sawSocketClose=!0;this.registered=!1;for(let Y of this.pendingReplies.values())Y.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 X of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(X));this.reconnectAttempt=0}subscribe($,Z){let Q=Z?.sessionId?.trim()||void 0,W={listener:$,sessionId:Q};return this.listeners.add(W),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(W))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,W){let J=0,X=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,W)}catch(Y){if(!X||J>=1||!await this.recoverLocalHubTransport(Y))throw Y;J+=1}}async commandOnce($,Z,Q,W){await this.connect();let J=ER("hubreq_"),X=CR($,W?.timeoutMs),Y=new Promise((V,H)=>{let B=X===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;H(new E5($,"hub_command_timeout",`Hub command ${$} timed out after ${X}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.`))},X);this.pendingReplies.set(J,{resolve:(G)=>{if(B)clearTimeout(B);V(G)},reject:(G)=>{if(B)clearTimeout(B);H(G)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:J,clientId:this.clientId,sessionId:Q,timeoutMs:X,payload:Z}})}catch(V){throw this.pendingReplies.delete(J),V}let j=await Y;if(!j.ok){if(j.error?.code===c8){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new P$(V,j.error.message)}throw new E5($,j.error?.code,j.error?.message??`Hub command ${$} failed`)}return j}async recoverLocalHubTransport($){if(!r7(this.currentUrl)||!cR($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await X4({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!Z)return!1;return this.currentUrl=Z,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(mR*2**this.reconnectAttempt,vR),Z=Math.round($*(1-IH)+Math.random()*$*IH);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},Z)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!r7(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await X4({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 g0("hub_connection_closed",p7),this.sawSocketClose=!1;for(let Z of this.pendingReplies.values())Z.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 g0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,Z){this.sendFrame({kind:$,clientId:this.clientId,...Z?{sessionId:Z}:{}})}adjustSubscriptionCount($,Z){let Q=this.subscriptionKeyForSessionId($),W=(this.subscriptionCounts.get(Q)??0)+Z;if(W<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(Z<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,W),Z>0&&W===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??hH}subscriptionSessionIdFromKey($){return $===hH?void 0:$}handleFrame($){switch($.kind){case"reply":{let Z=$.envelope.requestId;if(!Z)return;let Q=this.pendingReplies.get(Z);if(!Q)return;this.pendingReplies.delete(Z),Q.resolve($.envelope);return}case"event":for(let Z of this.listeners){if(Z.sessionId&&Z.sessionId!==$.envelope.sessionId?.trim())continue;Z.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function I2($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function o1($,Z){let Q=new z1({url:$,authToken:Z?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function i7($,Z){let Q=I2($),W=await g$(Q,{authToken:Z?.authToken});if(!W)return{status:"unreachable",url:Q};if(!NR(W).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await o1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function dR($){let Z=Date.now()+yR;while(Date.now()<Z){let Q=await A0($.discoveryPath);if(Q?.url){let W=await i7(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(W.status==="compatible")return k2(W.url,Q.authToken)}await new Promise((W)=>setTimeout(W,hR))}return}async function lR($){let Z=Date.now()+xR;while(Date.now()<Z){if(!(await g$($).catch(()=>{return}))?.url)return!0;await new Promise((W)=>setTimeout(W,gR))}return!1}function pR($,Z){try{return I2($)===I2(Z)}catch{return!1}}function rR($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let W=Q;if(W.status==="running"||W.status==="idle"||W.status==="pending")return!0;return Array.isArray(W.participants)&&W.participants.length>0})}async function iR($,Z,Q){let W=new z1({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let J=await W.command("session.list",{limit:500},void 0,{timeoutMs:IR});return!rR(J.payload)}catch{return!1}finally{await W.dispose().catch(()=>{return})}}async function a7($={}){if($.endpoint?.trim()){let J=await i7($.endpoint);return J.status==="compatible"?J.url:void 0}let Z=N5(),Q=await A0(Z.discoveryPath);if(!Q?.url)return;let W=await i7(Q.url,{authToken:Q.authToken});if(W.status==="compatible")return k2(W.url,Q.authToken);if(W.status==="protocol_mismatch")await a0(Z.discoveryPath).catch(()=>{return});return}async function X4($={}){let Z=await a7($);if(Z&&await o1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;let Q=N5();return await R5($.workspaceRoot??process.cwd()),await dR(Q)}async function l7($,Z){let Q=new URL($),W=Z?.trim()||cH(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:W?{authorization:`Bearer ${W}`}:void 0})).ok}async function nR($=N5()){let Z=await A0($.discoveryPath);if(!Z?.url)return!1;try{if(await l7(Z.url,Z.authToken))return!0}catch{}return!1}async function uH($){if(!r7($.url))return;let Z=N5(),Q=await A0(Z.discoveryPath);if(!Q?.url||!pR(Q.url,$.url))return;if(!await iR(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await nR())return;if(!await lR(Q.url))return;return await a0(Z.discoveryPath).catch(()=>{return}),await X4({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{captureSdkError as dH,createSessionId as lH,HUB_CHECKPOINT_CAPABILITY as tR,HUB_COMPACTION_CAPABILITY as eR,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as $E,HUB_HOOK_CAPABILITY_PREFIX as ZE,HUB_MISTAKE_LIMIT_CAPABILITY as QE,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as WE,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as JE,isHubToolExecutorName as XE}from"@cline/shared";function aR($){return $?JSON.parse(JSON.stringify($)):void 0}function sR($){return $?JSON.parse(JSON.stringify($)):void 0}function oR($){let Z=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,W=(Array.isArray(Z?.history)?Z.history:[]).filter((Y)=>!!Y&&typeof Y==="object"&&!Array.isArray(Y)).flatMap((Y)=>{let j=typeof Y.ref==="string"?Y.ref.trim():"",V=Number(Y.createdAt),H=Number(Y.runCount);if(!j||!Number.isFinite(V)||!Number.isInteger(H))return[];return[{ref:j,createdAt:V,runCount:H,...Y.kind==="stash"||Y.kind==="commit"?{kind:Y.kind}:{}}]}),J=W.at(-1),X=$?.checkpointEnabled===!0?!0:void 0;if(!X&&W.length===0)return;return{...X?{enabled:X}:{},...J?{latest:J}:{},history:W}}function t1($){let{session:Z}=$,Q=aR(Z.metadata);return{version:1,sessionId:Z.sessionId,source:Z.source,status:Z.status,createdAt:Z.startedAt,updatedAt:Z.updatedAt,endedAt:Z.endedAt??null,exitCode:Z.exitCode??null,interactive:Z.interactive,workspace:{cwd:Z.cwd,root:Z.workspaceRoot},model:{providerId:Z.provider,modelId:Z.model},capabilities:{enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams},lineage:{...Z.parentSessionId?{parentSessionId:Z.parentSessionId}:{},...Z.parentAgentId?{parentAgentId:Z.parentAgentId}:{},...Z.agentId?{agentId:Z.agentId}:{},...Z.conversationId?{conversationId:Z.conversationId}:{},isSubagent:Z.isSubagent},...Z.teamName?{team:{name:Z.teamName}}:{},...Z.prompt?{prompt:Z.prompt}:{},...Q?{metadata:Q}:{},...Z.messagesPath?{artifacts:{messagesPath:Z.messagesPath}}:{},...$.messages?{messages:sR($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let W=oR(Q);return W?{checkpoint:W}:{}})()}}function s7($){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 x2($){if(!$)return;return JSON.parse(JSON.stringify($))}var YE=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function pH($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function rH($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function iH($){let Z=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof Z.agentId==="string"?Z.agentId:"",conversationId:typeof Z.conversationId==="string"?Z.conversationId:"",iteration:typeof Z.iteration==="number"?Z.iteration:0,metadata:Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0}}function c$($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function nH($,Z){let Q={manifest:[],handlers:new Map};for(let J of Object.keys(Z.toolExecutors??{}).filter(XE)){let X=Z.toolExecutors?.[J];if(typeof X!=="function")continue;c$(Q,{kind:"toolExecutor",executor:J,capabilityName:`${WE}${J}`},async({payload:Y,abortSignal:j})=>{let V=Array.isArray(Y.args)?[...Y.args]:[],H={...iH(Y.context),signal:j};return{result:await X(...V,H)}})}for(let J of $?.extraTools??[])c$(Q,{kind:"tool",name:J.name,description:J.description,inputSchema:x2(J.inputSchema)??{},...J.lifecycle?{lifecycle:x2(J.lifecycle)}:{},capabilityName:`${$E}${J.name}`},async({payload:X,abortSignal:Y,progress:j})=>{let V={...iH(X.context),signal:Y};return{result:await J.execute(X.input,{...V,emitUpdate:(B)=>{j({update:B})}})}});let W=$?.hooks;if(W)for(let J of YE){let X=W[J];if(typeof X!=="function")continue;c$(Q,{kind:"hook",name:J,capabilityName:`${ZE}${J}`},async({payload:Y})=>({control:await X(Y.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;c$(Q,{kind:"compaction",capabilityName:eR,config:pH($.compaction)},async({payload:X})=>({result:await J(X.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;c$(Q,{kind:"checkpoint",capabilityName:tR,config:pH($.checkpoint)},async({payload:X})=>({result:await J(X.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;c$(Q,{kind:"mistakeLimit",capabilityName:QE},async({payload:X})=>({result:await J(X.context)}))}if($?.userInstructionService){let J=$.userInstructionService;c$(Q,{kind:"userInstructionService",capabilityName:JE},async()=>{return await J.start().catch(()=>{}),{snapshot:{records:{skill:J.listRecords("skill"),rule:J.listRecords("rule"),workflow:J.listRecords("workflow")},runtimeCommands:J.listRuntimeCommands()}}})}return Q}function tH($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let Z=$.message;if(typeof Z==="string"&&Z.trim())return Z.trim()}return}function jE($){return tH($)??"Capability request was cancelled."}function VE($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function HE($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function BE($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=typeof Z.inputTokens==="number"?Z.inputTokens:void 0,W=typeof Z.outputTokens==="number"?Z.outputTokens:void 0;if(Q===void 0||W===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:typeof Z.cacheReadTokens==="number"?Z.cacheReadTokens:0,cacheWriteTokens:typeof Z.cacheWriteTokens==="number"?Z.cacheWriteTokens:0,totalCost:typeof Z.totalCost==="number"?Z.totalCost:0}}function aH($){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 o7($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function e1($,Z){return o7($?.[Z])??0}function GE($){let Z=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,W=$?.agent&&typeof $.agent==="object"?$.agent:void 0,J=W?.teamRole==="teammate"||W?.teamRole==="lead"?W.teamRole:void 0;return{event:{type:"usage",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,inputTokens:e1(Z,"inputTokens"),outputTokens:e1(Z,"outputTokens"),cacheReadTokens:e1(Z,"cacheReadTokens"),cacheWriteTokens:e1(Z,"cacheWriteTokens"),cost:o7(Z?.totalCost),totalInputTokens:e1(Q,"inputTokens"),totalOutputTokens:e1(Q,"outputTokens"),totalCacheReadTokens:e1(Q,"cacheReadTokens"),totalCacheWriteTokens:e1(Q,"cacheWriteTokens"),totalCost:o7(Q?.totalCost)},teamAgentId:typeof W?.teamAgentId==="string"?W.teamAgentId:void 0,teamRole:J}}function KE($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,W=HE(Q)?Q:Q==="failed"?"error":"completed",J=BE($?.usage??Z?.usage);return{type:"done",reason:W,text:typeof $?.text==="string"?$.text:typeof Z?.text==="string"?Z.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof Z?.iterations==="number"?Z.iterations:0,usage:J}}function w5($,Z){return $.error?.message??`hub command failed: ${Z}`}function Y4($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function eH($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof Z?.agentId==="string"?Z.agentId:void 0),parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,isSubagent:typeof Z?.isSubagent==="boolean"?Z.isSubagent:!1,source:typeof Z?.source==="string"?Z.source:T0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:Y4($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:Y4($.status)==="completed"?0:Y4($.status)==="failed"?1:void 0,status:Y4($.status),interactive:Z?.interactive===!0,provider:typeof Z?.provider==="string"?Z.provider:"hub",model:typeof Z?.model==="string"?Z.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof Z?.teamName==="string"?Z.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??Z?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??Z?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??Z?.enableTeams===!0,prompt:typeof Z?.prompt==="string"?Z.prompt:void 0,metadata:Z,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,hookPath:typeof Z?.hookPath==="string"?Z.hookPath:void 0}}function $$($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function FE($){let Z=$$($?.snapshot);if(Z)return s7(Z);let Q=$?.session;return Q?eH(Q):void 0}function sH($,Z,Q){let W=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot||Z.config.cwd;return N0.parse({version:1,session_id:$,source:Z.source??T0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:Y4(Q?.status),interactive:Z.interactive===!0,provider:Z.config.providerId,model:Z.config.modelId,cwd:Q?.cwd?.trim()||Z.config.cwd,workspace_root:W,team_name:Z.config.teamName,enable_tools:Z.config.enableTools,enable_spawn:Z.config.enableSpawnAgent,enable_teams:Z.config.enableAgentTeams,prompt:Z.prompt?.trim()||void 0,metadata:Z.sessionMetadata&&Object.keys(Z.sessionMetadata).length>0?Z.sessionMetadata:void 0})}function oH($,Z){return N0.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??Z.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class u${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new $4;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,Z){this.clientContext=Z,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd},this.defaultCapabilities=O0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Q)=>this.requestPendingPromptsList(Q),update:(Q)=>this.requestPendingPromptUpdate(Q),delete:(Q)=>this.requestPendingPromptDelete(Q)},this.client=this.createClient($.url)}createClient($){return new z1({...this.clientOptions,url:$})}async replaceClient($){let Z=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(Z.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!vH($,"session.create"))return!1;let Z=await uH({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!Z)return!1;return await this.replaceClient(Z),!0}registerPlannedSession($,Z,Q){if(this.sessionCapabilities.set($,Z),Q.size>0)this.sessionClientContributionHandlers.set($,Q);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let Z=this.resolveCapabilities($),Q=nH($.localRuntime,Z),W=$.config.sessionId?.trim()||lH(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:x2({...$.config,sessionId:W}),metadata:{...$.sessionMetadata??{},source:$.source??T0.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:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:x2($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(W,Z,Q.handlers);let X;try{X=await J()}catch(H){if(this.cleanupPlannedSession(W),await this.recoverLocalHubStartupDeadlock(H)){this.registerPlannedSession(W,Z,Q.handlers);try{X=await J()}catch(B){throw this.cleanupPlannedSession(W),B}}else throw H}let Y=$$(X.payload?.snapshot),j=X.payload?.session,V=(Y?.sessionId??j?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(W),Error("Hub runtime did not return a session id.");if(V!==W)this.cleanupPlannedSession(W),this.registerPlannedSession(V,Z,Q.handlers);return{sessionId:V,manifest:Y?oH(Y,$):sH(V,$,j),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let W=$.start,J=W?this.resolveCapabilities(W):void 0,X=W?nH(W.localRuntime,J??{}):{manifest:[],handlers:new Map},Y=W?W.config.sessionId?.trim()||lH():void 0;if(Y&&J)this.sessionCapabilities.set(Y,J);if(Y&&X.handlers.size>0)this.sessionClientContributionHandlers.set(Y,X.handlers),this.ensureSessionSubscription(Y);let j;try{j=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.config.workspaceRoot?.trim()||W.config.cwd,cwd:W.config.cwd??$.cwd,sessionConfig:x2({...W.config,sessionId:Y}),metadata:{...W.sessionMetadata??{},source:W.source??T0.CORE,provider:W.config.providerId,model:W.config.modelId,enableTools:W.config.enableTools,enableSpawn:W.config.enableSpawnAgent,enableTeams:W.config.enableAgentTeams,teamName:W.config.teamName,prompt:W.prompt,interactive:W.interactive===!0},runtimeOptions:{...X.manifest.length>0?{clientContributions:X.manifest}:{},...W.localRuntime?.configExtensions?{configExtensions:W.localRuntime.configExtensions}:{}},toolPolicies:x2(W.toolPolicies)}:{}},Z)}catch(F){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw F}if(!j.ok){let F=typeof j.payload?.error==="string"?j.payload.error:"session.restore failed";if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error(F)}let V=$$(j.payload?.snapshot),H=j.payload?.session,B=(V?.sessionId??H?.sessionId)?.trim();if(Q&&!B){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error("Hub checkpoint restore returned no session id")}if(B&&Y&&B!==Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);if(B&&J)this.sessionCapabilities.set(B,J);if(B&&X.handlers.size>0)this.sessionClientContributionHandlers.set(B,X.handlers);if(B)this.ensureSessionSubscription(B);let G=Array.isArray(j.payload?.messages)?j.payload.messages:void 0,K=j.payload?.checkpoint;if(!K)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:B,startResult:B?{sessionId:B,manifest:V?oH(V,W??{}):sH(B,W??{},H),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:G,checkpoint:K}}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 Z=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,updated:Z.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,removed:Z.payload?.removed===!0}}async getAccumulatedUsage($){let Z=await this.client.command("session.get",{includeSnapshot:!0},$),Q=$$(Z.payload?.snapshot);if(Q){let Y=Q.usage?{...Q.usage}:void 0,j=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return Y||j?{usage:Y,aggregateUsage:j}:void 0}let W=Z.payload?.session,J=aH(W?.usage),X=aH(W?.aggregateUsage);return J||X?{usage:J,aggregateUsage:X}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:tH(Z)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,Z]of this.sessionSubscriptions){Z();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 Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(S$(Q))return;throw Q}return FE(Z.payload)}async listSessions($=100){let Z=await this.client.command("session.list",{limit:$}),Q=Array.isArray(Z.payload?.snapshots)?Z.payload.snapshots.flatMap((J)=>{let X=$$(J);return X?[s7(X)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(eH)}async listSettings($){let Z=await this.client.command("settings.list",rH($));if(!Z.ok)throw Error(w5(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",rH($));if(!Z.ok)throw Error(w5(Z,"settings.toggle"));return{snapshot:Z.payload?.snapshot,changedTypes:Array.isArray(Z.payload?.changedTypes)?Z.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,Z){let Q={...Z.metadata??{}};if(typeof Z.prompt==="string")Q.prompt=Z.prompt;if(typeof Z.title==="string")Q.title=Z.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw dH(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(w5(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:Z,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(w5(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,Z){return this.events.subscribe($,Z)}ensureSessionSubscription($){let Z=$.trim();if(!Z||this.sessionSubscriptions.has(Z))return;let Q=this.client.subscribe((W)=>{this.handleHubEvent(W)},{sessionId:Z});this.sessionSubscriptions.set(Z,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let Z=$.trim();if(!Z)return;this.sessionSubscriptions.get(Z)?.(),this.sessionSubscriptions.delete(Z),this.agentDoneEmittedForCurrentRunBySession.delete(Z)}resolveCapabilities($){return O0(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:KE($.payload)}})}handleHubEvent($){let Z=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!Z)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(Z);let Q=$$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,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 Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",W=$.payload?.redacted===!0;if(!Q&&!W)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:W}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:Z,payload:$.payload});return}case"usage.updated":{let Q=GE($.payload);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:Z,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"tool",toolCallId:Q,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 Q=$$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:Z,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:Z,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=$$($.payload?.snapshot),W=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:Z,payload:{...$.payload,reason:W}}),Q?.interactive===!0&&j0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:W,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{dH(this.telemetry,{component:"core",operation:$,error:Z,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let Z=$.sessionId?.trim();if(!Z)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let W=typeof $.payload?.requestId==="string"?$.payload.requestId:"",J=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!W)return;let X=this.sessionClientContributionHandlers.get(Z)?.get(J);if(!X){await this.client.command("capability.respond",{requestId:W,ok:!1,error:`No client contribution handler registered for capability ${J} in session ${Z}.`},Z).catch(()=>{});return}let Y=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},j=new AbortController;this.activeCapabilityAbortControllers.set(W,j);let V=(H)=>{this.client.command("capability.progress",{requestId:W,payload:H},Z).catch((B)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",B,$)})};try{let H=await X({payload:Y,abortSignal:j.signal,progress:V});if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!0,payload:H},Z)}catch(H){if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!1,error:H instanceof Error?H.message:String(H)},Z)}finally{this.activeCapabilityAbortControllers.delete(W)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let Z=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!Z)return;let Q=this.activeCapabilityAbortControllers.get(Z);if(!Q)return;Q.abort(jE($.payload.error))}async handleApprovalRequested($){let Z=$.sessionId?.trim();if(!Z)return;let Q=this.sessionCapabilities.get(Z)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let W=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",X=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!W||!J||!X)return;let Y=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},j=VE($.payload?.inputJson);this.pendingApprovalToolCallIds.add(J),this.emitToolCallContentStart({sessionId:Z,toolCallId:J,toolName:X,toolInput:j});let V=await Promise.resolve(Q({sessionId:Z,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:Z,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:J,toolName:X,input:j,policy:Y})).catch((H)=>({approved:!1,reason:H instanceof Error?H.message:`Tool approval request failed: ${String(H)}`}));await this.client.command("approval.respond",{approvalId:W,approved:V.approved,reason:V.reason},Z).catch(()=>{})}}class C5 extends u${constructor($){super({url:I2($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}import{existsSync as AE,mkdirSync as fE}from"node:fs";import{join as UE}from"node:path";import{asBool as j4,asOptionalString as Q1,asString as T1,ensureSessionSchema as DE,loadSqliteDb as LE,nowIso as P5,toBoolInt as V4}from"@cline/shared/db";import{resolveDbDataDir as _E}from"@cline/shared/storage";class Z${sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??_E()}init(){this.getRawDb()}ensureSessionsDir(){if(!AE(this.sessionsDirPath))fE(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return UE(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=LE(this.sessionDbPath());return DE($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}create($){let Z=P5();this.run(`INSERT OR REPLACE INTO sessions (
454
+ `,"utf8")}function XH($,Z){return N0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:Z?.endedAt??$.endedAt??void 0,exit_code:Z?.exitCode??$.exitCode??void 0,status:Z?.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:Z?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function YH($,Z,Q){let W=0;while(!0){let J=await $();if(J===void 0)return{updated:!1};let X=await Z(J);if(typeof X==="object"&&X!==null&&"updated"in X&&X.updated===!1){if(W+=1,W>=Q)return X;continue}return X}}import{existsSync as QM}from"node:fs";import{readFile as WM}from"node:fs/promises";import{formatDisplayUserInput as jH}from"@cline/shared";class $4{listeners=new Set;subscribe($,Z){let Q={listener:$,sessionId:Z?.sessionId?.trim()||void 0};return this.listeners.add(Q),()=>{this.listeners.delete(Q)}}emit($){let Z=$.payload.sessionId?.trim();for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==Z)continue;Q.listener($)}}get size(){return this.listeners.size}}async function n1($){let Z=$?.trim();if(!Z||!QM(Z))return[];try{let Q=(await WM(Z,"utf8")).trim();if(!Q)return[];let W=JSON.parse(Q);if(Array.isArray(W))return VH(W);if(W&&typeof W==="object"&&!Array.isArray(W)){let J=W.messages;if(Array.isArray(J))return VH(J)}return[]}catch{return[]}}function JM($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:jH($.content)};return{...$,content:$.content.map((Z)=>{if(Z.type!=="text"||typeof Z.text!=="string")return Z;return{...Z,text:jH(Z.text)}})}}function VH($){return $.map(JM)}function I7($){return $?{...$}:void 0}async function HH($,Z){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await Z.queueSpawnRequest($);let W=await Z.upsertSubagentSessionFromHook($);if(!W)return;await Z.appendSubagentHookAudit(W,$),await Z.applySubagentStatus(W,$)}function Z4($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function x0($){let Z=Z4($);if(!Z)return;return Z.toLowerCase()==="unknown"?void 0:Z}function O5($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function VM($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function g7($){let Z=$??200;return Number.isFinite(Z)?Math.max(0,Math.floor(Z)):200}function HM($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function BM($){return $.isSubagent!==!0&&!Z4($.parentSessionId)}function GM($){let Z=$.match(/\d{13,}/g);if(!Z||Z.length===0)return 0;let Q=0;for(let W of Z){let J=Number.parseInt(W,10);if(Number.isFinite(J)&&J>Q)Q=J}return Q}function m7($){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 KM($){let Z=g7($);if(Z===0)return[];let Q=FH(),J=(await XM(Q,{withFileTypes:!0}).catch(()=>[])).filter((Y)=>Y.isDirectory()).map((Y)=>({entry:Y,recency:GM(Y.name.trim())})).sort((Y,j)=>j.recency-Y.recency||j.entry.name.localeCompare(Y.entry.name));return(await Promise.all(J.map(async({entry:Y})=>{let j=Y.name.trim();if(!j)return;let V=KH(Q,j,`${j}.json`),H=await GH(V,"utf8").catch(()=>{return});if(!H)return;let B;try{B=JSON.parse(H)}catch{return}let G=N0.safeParse(B);if(!G.success)return;return m7(G.data)}))).filter((Y)=>Boolean(Y)).sort((Y,j)=>j.startedAt.localeCompare(Y.startedAt)).slice(0,Z)}async function FM($,Z,Q){let W=g7(Z);if(W===0)return await $.listSessions(0),[];let J=Q.includeSubagents?W:HM(W),X=await $.listSessions(J);return(Q.includeSubagents?X:X.filter(BM)).slice(0,W)}function AM($){if(typeof $==="string")return $.trim();let Z=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let W=Q;if(W.type!=="text")continue;let J=W.text?.trim();if(J)Z.push(J)}return Z.join(`
455
+ `).trim()}function BH($){return $.replace(/\s+/g," ").trim()}function fM($,Z){if($.length<=Z)return $;return`${$.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function UM($){for(let Z of["user","assistant"])for(let Q of $){if(Q.role!==Z)continue;let W=BH(AM(Q.content));if(!W)continue;let J=Z==="user"?BH(YM(W)):W,X=jM(J.split(`
456
+ `)[0]??J);return fM(X,50)}return}function DM($){let Z=0;for(let Q of $)Z+=O5(Q.metrics?.cost)??0;return Z}function LM($){let Z,Q;for(let W=$.length-1;W>=0;W-=1){let J=$[W];if(!Z)Z=x0(J.modelInfo?.provider);if(!Q)Q=x0(J.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function _M($){return x0($?.provider)??x0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function zM($){return x0($?.model)??x0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function x7($,Z){let Q=VM($.metadata),W=Z4(Z?.title)??Z4(Q?.title),J=O5(Z?.totalCost)??O5(Q?.totalCost),X=Q||W!==void 0||J!==void 0?{...Q??{},...W!==void 0?{title:W}:{},...J!==void 0?{totalCost:J}:{}}:void 0;return{...$,provider:x0(Z?.provider)??x0($.provider)??_M(Q)??"",model:x0(Z?.model)??x0($.model)??zM(Q)??"",metadata:X}}function TM($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function OM($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!TM(Q)}async function qM($,Z){return await Promise.all(Z.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let W=await $.readSessionMessages(Q.sessionId);return OM(Q,W)?{...Q,status:"idle"}:Q}))}async function MM($,Z){return await Promise.all(Z.map(async(Q)=>{let W=x7(Q),J=Boolean(Z4(W.metadata?.title)),X=Boolean(x0(W.provider)),Y=Boolean(x0(W.model)),j=O5(W.metadata?.totalCost),V=j!==void 0&&j>0;if(J&&X&&Y&&V)return W;let H=await $.readSessionMessages(Q.sessionId);if(H.length===0)return W;let B=LM(H),G=DM(H);return x7(Q,{title:J?void 0:UM(H),provider:X?void 0:B.provider,model:Y?void 0:B.model,totalCost:V||G<=0?void 0:G})}))}async function v7($,Z={}){let Q=g7(Z.limit),W=Z.includeSubagents===!0,J=await FM($,Q,{includeSubagents:W}),X=Z.includeManifestFallback===!0&&J.length<Q?await KM(Math.min(Math.max(Q*2,100),500)):[],Y=new Map;for(let H of[...J,...X]){if(Y.has(H.sessionId))continue;Y.set(H.sessionId,H)}let j=X.length===0?J:Array.from(Y.values()).sort((H,B)=>B.startedAt.localeCompare(H.startedAt)).slice(0,Q),V=await qM($,j);if(Z.hydrate===!1)return V.map((H)=>x7(H));return await MM($,V)}async function RM($){let Z=$.trim();if(!Z)return;let Q=KH(FH(),Z,`${Z}.json`),W=await GH(Q,"utf8").catch(()=>{return});if(!W)return;try{let J=N0.safeParse(JSON.parse(W));return J.success?J.data.messages_path:void 0}catch{return}}async function EM($,Z={}){let Q=new Map;return await v7({listSessions:async(J)=>{let X=await $.listSessions(J);Q.clear();for(let Y of X)Q.set(Y.sessionId,Y);return X.map(t8)},readSessionMessages:async(J)=>{let X=Q.get(J)?.messagesPath??await RM(J);return await n1(X)}},Z)}import{captureSdkError as aG}from"@cline/shared";import{createSessionId as NR,isHubProtocolCompatible as wR,resolveClineBuildEnv as CR,resolveHubCommandTimeoutMs as PR}from"@cline/shared";import{spawn as WR}from"node:child_process";import{closeSync as JR,mkdirSync as XR,openSync as YR}from"node:fs";import{basename as jR,dirname as VR,join as HR}from"node:path";import{fileURLToPath as BR}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as GR,isHubDaemonProcess as wH,isHubProtocolCompatible as KR,resolveClineBuildEnv as CH,withResolvedClineBuildEnv as FR}from"@cline/shared";import{createHash as NM,randomBytes as wM}from"node:crypto";import{existsSync as CM}from"node:fs";import{chmod as PM,mkdir as c7,readFile as LH,rm as u7,writeFile as _H}from"node:fs/promises";import{dirname as zH,join as d7}from"node:path";import{resolveClineDataDir as W4,resolveClineDir as Sd}from"@cline/shared/storage";var fH="0.0.56";var Q4={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:fH,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"]};var SM="CLINE_HUB_DISCOVERY_PATH",bM="CLINE_HUB_BUILD_ID",UH=30000,yM=15000,hM=100;function kM($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function IM($){return NM("sha256").update($).digest("hex").slice(0,12)}function xM($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(Z){return Z instanceof Error&&"code"in Z?String(Z.code)==="EPERM":!1}}function TH(){return wM(32).toString("hex")}function gM($){return new Promise((Z)=>setTimeout(Z,$))}function mM($){return`${$}.lock`}async function vM($){try{let Z=JSON.parse(await LH(d7($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function DH($){await u7($,{recursive:!0,force:!0}).catch(()=>{return})}function OH(){return process.env[bM]?.trim()||String(Q4.version)}function x$($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${IM($)}`,Q=process.env[SM]?.trim()||d7(W4(),"locks","hub","owners",`${kM(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function yd($=`hub-${Date.now().toString(36)}`){return x$($)}async function A0($){try{let Z=JSON.parse(await LH($,"utf8"));if(typeof Z.hubId!=="string"||typeof Z.protocolVersion!=="string"||typeof Z.authToken!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string"||typeof Z.startedAt!=="string"||typeof Z.updatedAt!=="string")return;return{hubId:Z.hubId,protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,authToken:Z.authToken,host:Z.host,port:Z.port,url:Z.url,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:Z.startedAt,updatedAt:Z.updatedAt}}catch{return}}async function qH($,Z){await c7(zH($),{recursive:!0}),await u7($,{force:!0}).catch(()=>{return}),await _H($,`${JSON.stringify(Z,null,2)}
457
+ `,{encoding:"utf8",mode:384}),await PM($,384)}async function a0($){await u7($,{force:!0}).catch(()=>{return})}async function MH($,Z){let Q=mM($);await c7(zH(Q),{recursive:!0});let W=Date.now()+yM;while(!0)try{await c7(Q,{recursive:!1}),await _H(d7(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
458
+ `,"utf8");try{return await Z()}finally{await DH(Q)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let Y=await vM(Q),j=Y?Date.now()-Date.parse(Y.acquiredAt):UH+1;if(!Y||!xM(Y.pid)||j>UH){await DH(Q);continue}if(Date.now()>=W)throw Error(`Timed out waiting for hub startup lock ${Q}`);await gM(hM)}}async function g$($,Z){try{let Q=await fetch(Z?.authToken?cM($):RH($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let W=await Q.json();if(typeof W.protocolVersion!=="string"||typeof W.host!=="string"||typeof W.port!=="number"||typeof W.url!=="string")return;return{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((J)=>typeof J==="string"):void 0,coreVersion:typeof W.coreVersion==="string"?W.coreVersion:void 0,buildId:typeof W.buildId==="string"?W.buildId:void 0,host:W.host,port:W.port,url:W.url,hubId:typeof W.hubId==="string"?W.hubId:void 0,authToken:typeof W.authToken==="string"?W.authToken:void 0,pid:typeof W.pid==="number"?W.pid:void 0,startedAt:typeof W.startedAt==="string"?W.startedAt:void 0,updatedAt:typeof W.updatedAt==="string"?W.updatedAt:void 0}}catch{return}}function L1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function RH($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function cM($){let Z=new URL(RH($));return Z.pathname="/status",Z.toString()}function hd($){return CM($)}import{CLINE_HUB_DEV_PORT as uM,CLINE_HUB_PORT as dM,resolveClineBuildEnv as lM}from"@cline/shared";var pM="CLINE_HUB_HOST",rM="CLINE_HUB_PORT",iM="CLINE_HUB_PATHNAME",nM="127.0.0.1",aM=dM,sM="/hub";function EH($){return lM($)==="development"?uM:aM}function oM($={}){return($.env??process.env)[pM]?.trim()||nM}function q5($={}){let Q=($.env??process.env)[rM]?.trim();if(!Q)return EH($);let W=Number.parseInt(Q,10);if(!Number.isInteger(W)||W<1||W>65535)return EH($);return W}function tM($={}){return($.env??process.env)[iM]?.trim()||sM}function a1($={},Z={}){return{host:$.host??oM(Z),port:$.port??q5(Z),pathname:$.pathname??tM(Z)}}import{join as eM}from"node:path";var $R="shared:cline",ZR="CLINE_HUB_DISCOVERY_PATH",QR="hub-production";function cd($){let Z=b$($.trim());return x$(`workspace:${Z||$.trim()}`)}function _1($=$R){return x$($)}function s1(){return{ownerId:QR,discoveryPath:process.env[ZR]?.trim()||eM(W4(),"locks","hub","production.json")}}var AR=8000,fR=200,UR=3000,DR=100,LR=[100,250,500,1000,2000],_R="--cline-hub-daemon";function zR($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function TR(){try{let $=HR(W4(),"logs","hub-daemon.log");return XR(VR($),{recursive:!0}),{fd:YR($,"a"),logPath:$}}catch{return}}function PH(){return CH()==="production"?s1():_1()}function m$($){return KR($).compatible}function NH($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function v$($,Z){try{return await g$($,{authToken:Z})}catch{return}}async function OR($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await v$($))?.url)return!0;await new Promise((J)=>setTimeout(J,DR))}return!1}async function M5($,Z){if(await l7($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await OR($.url,UR);return await a0(Z).catch(()=>{return}),Q}async function J4($,Z){if(m$($))return!0;return M5($,Z)}async function SH($){if(CH()!=="production")return;let Z=_1();if(Z.discoveryPath===$.discoveryPath)return;let Q=await A0(Z.discoveryPath);if(Q?.url)await M5(Q,Z.discoveryPath);else await a0(Z.discoveryPath).catch(()=>{return})}function qR(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return BR(new URL(`./entry.${$}`,import.meta.url))}function MR($,Z){let Q=qR(),W=process.execPath?.trim();if(!W)throw Error("unable to resolve runtime executable for hub daemon");let J=jR(W).toLowerCase().includes("bun"),X=Q.startsWith("/$bunfs/"),Y=J&&Q.toLowerCase().endsWith(".ts"),j=X?[_R]:[...Y?["--conditions=development"]:[],Q];return{launcher:W,args:[...j,"--cwd",$,...zR(Z)],cwd:$,env:{...FR(process.env),CLINE_NO_INTERACTIVE:"1",[GR]:"1"}}}function RR($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Q="message"in $?$.message:void 0;return typeof Q==="string"&&Q.includes("ETXTBSY")}function ER($,Z={}){if(wH())return;let Q=MR($,Z),W=TR();try{WR(Q.launcher,Q.args,{detached:!0,stdio:W?["ignore",W.fd,W.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(W)JR(W.fd)}}async function R5($,Z={}){for(let Q=0;;Q++)try{ER($,Z);return}catch(W){let J=LR[Q];if(!RR(W)||J===void 0)throw W;await new Promise((X)=>setTimeout(X,J))}}function bH($,Z={}){if(wH())return;let Q=PH(),W=a1(Z),J=L1(W.host,W.port,W.pathname),X=Z.allowPortFallback===!0&&W.port!==0;SH(Q).catch(()=>{return}).then(()=>A0(Q.discoveryPath)).then(async(Y)=>{let j=!1;if(Y?.url)if(!Y.authToken){if(j=!0,!await M5(Y,Q.discoveryPath)&&!X)return}else{let B=await v$(Y.url,Y.authToken);if(B?.url&&m$(B)&&await o1(B.url,{authToken:Y.authToken}))return;if(B?.url)await J4({...B,authToken:Y.authToken},Q.discoveryPath);else await a0(Q.discoveryPath).catch(()=>{return})}let V=await v$(J);if(V?.url){if(m$(V)){if(!X||!j)return}else if(!await J4({...V,authToken:void 0},Q.discoveryPath)&&!X)return}let H=X?{...W,port:0}:W;await R5($,H)}).catch(()=>{})}async function td($,Z={}){let Q=PH(),W=Z.host!==void 0||Z.port!==void 0||Z.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=a1(Z),X=L1(J.host,J.port,J.pathname),Y=(F)=>{if(!W)k2(F.url,F.authToken);return F};await SH(Q).catch(()=>{return});let j=await A0(Q.discoveryPath),V=!1;if(j?.url){let F=j.authToken;if(!F)V=!0,await M5(j,Q.discoveryPath);else{let A=await v$(j.url,F);if(A?.url&&m$(A)&&await o1(A.url,{authToken:F}))return Y({url:A.url,authToken:F});if(A?.url)await J4({...A,authToken:F},Q.discoveryPath);else await a0(Q.discoveryPath).catch(()=>{return})}}let H=await v$(X);if(H?.url){let F=NH(H,j,X);if(m$(H))throw Error(`A compatible Cline Hub is already running at ${X}, 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 J4(F,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is already running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let G=Z.allowPortFallback===!0&&J.port!==0?{...J,port:0}:J;await R5($,G);let K=Date.now()+AR;while(Date.now()<K){let F=await A0(Q.discoveryPath);if(F?.url&&F.authToken){let L=await v$(F.url,F.authToken);if(L?.url&&m$(L)&&await o1(L.url,{authToken:F.authToken}))return Y({url:L.url,authToken:F.authToken})}let A=await v$(X);if(A?.url&&!m$(A)){let L=NH(A,F,X);if(!await J4(L,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is still running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((L)=>setTimeout(L,fR))}throw Error("Timed out waiting for detached hub startup.")}function N5(){return CR()==="production"?s1():_1()}function SR(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function xH($){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((Z)=>Buffer.from(Z))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return xH($.data);return String($)}function bR($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function yH($){let Z=$,Q=bR(Z.reason);return new g0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:p7,{closeCode:Z.code,closeReason:Q||void 0})}function yR($,Z){if($ instanceof g0)return $;if($ instanceof Error)return new g0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new g0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new g0("hub_connect_failed",Q);let W=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new g0("hub_connect_failed",W?`Failed to connect to hub at ${Z.toString()} (${W} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var hR=8000,kR=200,hH="*",kH=8000,IR="cline-hub-auth.",gH=new Map,mH=new Set,xR=3000,gR=3000,mR=100,p7="Hub connection closed",vR=250,cR=5000,IH=0.5;class g0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function uR($){return $ instanceof g0}class E5 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function vH($,Z){return $ instanceof E5&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function cH($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=n7($.toString());return Q?gH.get(Q):void 0}function dR($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function n7($){if(!dR($))return;let Z=new URL(I2($));return Z.search="",Z.hash="",Z.toString()}function r7($){let Z=n7($);return!!Z&&mH.has(Z)}function k2($,Z){let Q=n7($);if(Q){if(mH.add(Q),Z?.trim())gH.set(Q,Z)}return $}class z1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new g0("hub_connection_closed",p7);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),Z=this.options.authToken?.trim()||cH($);$.hash="";let W=new(SR())($.toString(),Z?[`${IR}${Z}`]:void 0);this.socket=W;let J=!1;this.connectPromise=new Promise((X,Y)=>{let j=!1,V=setTimeout(()=>{if(j)return;j=!0,J=!0,this.lastCloseError=new g0("hub_connect_timeout",`Timed out connecting to hub after ${kH}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{W.close()}catch{}Y(this.lastCloseError)},kH);W.addEventListener("open",()=>{if(j)return;j=!0,clearTimeout(V),X()}),W.addEventListener("error",(H)=>{if(j)return;j=!0,clearTimeout(V),this.lastCloseError=yR(H,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)}),W.addEventListener("close",(H)=>{if(j)return;if(j=!0,clearTimeout(V),!J)this.lastCloseError=yH(H),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)})}),W.addEventListener("message",(X)=>{this.handleFrame(JSON.parse(xH(X)))}),W.addEventListener("close",(X)=>{if(this.socket!==W)return;if(!J)this.lastCloseError=yH(X),this.sawSocketClose=!0;this.registered=!1;for(let Y of this.pendingReplies.values())Y.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 X of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(X));this.reconnectAttempt=0}subscribe($,Z){let Q=Z?.sessionId?.trim()||void 0,W={listener:$,sessionId:Q};return this.listeners.add(W),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(W))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,W){let J=0,X=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,W)}catch(Y){if(!X||J>=1||!await this.recoverLocalHubTransport(Y))throw Y;J+=1}}async commandOnce($,Z,Q,W){await this.connect();let J=NR("hubreq_"),X=PR($,W?.timeoutMs),Y=new Promise((V,H)=>{let B=X===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;H(new E5($,"hub_command_timeout",`Hub command ${$} timed out after ${X}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.`))},X);this.pendingReplies.set(J,{resolve:(G)=>{if(B)clearTimeout(B);V(G)},reject:(G)=>{if(B)clearTimeout(B);H(G)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:J,clientId:this.clientId,sessionId:Q,timeoutMs:X,payload:Z}})}catch(V){throw this.pendingReplies.delete(J),V}let j=await Y;if(!j.ok){if(j.error?.code===c8){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new P$(V,j.error.message)}throw new E5($,j.error?.code,j.error?.message??`Hub command ${$} failed`)}return j}async recoverLocalHubTransport($){if(!r7(this.currentUrl)||!uR($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await X4({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!Z)return!1;return this.currentUrl=Z,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(vR*2**this.reconnectAttempt,cR),Z=Math.round($*(1-IH)+Math.random()*$*IH);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},Z)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!r7(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await X4({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 g0("hub_connection_closed",p7),this.sawSocketClose=!1;for(let Z of this.pendingReplies.values())Z.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 g0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,Z){this.sendFrame({kind:$,clientId:this.clientId,...Z?{sessionId:Z}:{}})}adjustSubscriptionCount($,Z){let Q=this.subscriptionKeyForSessionId($),W=(this.subscriptionCounts.get(Q)??0)+Z;if(W<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(Z<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,W),Z>0&&W===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??hH}subscriptionSessionIdFromKey($){return $===hH?void 0:$}handleFrame($){switch($.kind){case"reply":{let Z=$.envelope.requestId;if(!Z)return;let Q=this.pendingReplies.get(Z);if(!Q)return;this.pendingReplies.delete(Z),Q.resolve($.envelope);return}case"event":for(let Z of this.listeners){if(Z.sessionId&&Z.sessionId!==$.envelope.sessionId?.trim())continue;Z.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function I2($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function o1($,Z){let Q=new z1({url:$,authToken:Z?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function i7($,Z){let Q=I2($),W=await g$(Q,{authToken:Z?.authToken});if(!W)return{status:"unreachable",url:Q};if(!wR(W).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await o1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function lR($){let Z=Date.now()+hR;while(Date.now()<Z){let Q=await A0($.discoveryPath);if(Q?.url){let W=await i7(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(W.status==="compatible")return k2(W.url,Q.authToken)}await new Promise((W)=>setTimeout(W,kR))}return}async function pR($){let Z=Date.now()+gR;while(Date.now()<Z){if(!(await g$($).catch(()=>{return}))?.url)return!0;await new Promise((W)=>setTimeout(W,mR))}return!1}function rR($,Z){try{return I2($)===I2(Z)}catch{return!1}}function iR($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let W=Q;if(W.status==="running"||W.status==="idle"||W.status==="pending")return!0;return Array.isArray(W.participants)&&W.participants.length>0})}async function nR($,Z,Q){let W=new z1({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let J=await W.command("session.list",{limit:500},void 0,{timeoutMs:xR});return!iR(J.payload)}catch{return!1}finally{await W.dispose().catch(()=>{return})}}async function a7($={}){if($.endpoint?.trim()){let J=await i7($.endpoint);return J.status==="compatible"?J.url:void 0}let Z=N5(),Q=await A0(Z.discoveryPath);if(!Q?.url)return;let W=await i7(Q.url,{authToken:Q.authToken});if(W.status==="compatible")return k2(W.url,Q.authToken);if(W.status==="protocol_mismatch")await a0(Z.discoveryPath).catch(()=>{return});return}async function X4($={}){let Z=await a7($);if(Z&&await o1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;let Q=N5();return await R5($.workspaceRoot??process.cwd()),await lR(Q)}async function l7($,Z){let Q=new URL($),W=Z?.trim()||cH(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:W?{authorization:`Bearer ${W}`}:void 0})).ok}async function aR($=N5()){let Z=await A0($.discoveryPath);if(!Z?.url)return!1;try{if(await l7(Z.url,Z.authToken))return!0}catch{}return!1}async function uH($){if(!r7($.url))return;let Z=N5(),Q=await A0(Z.discoveryPath);if(!Q?.url||!rR(Q.url,$.url))return;if(!await nR(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await aR())return;if(!await pR(Q.url))return;return await a0(Z.discoveryPath).catch(()=>{return}),await X4({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{captureSdkError as dH,createSessionId as lH,HUB_CHECKPOINT_CAPABILITY as eR,HUB_COMPACTION_CAPABILITY as $E,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as ZE,HUB_HOOK_CAPABILITY_PREFIX as QE,HUB_MISTAKE_LIMIT_CAPABILITY as WE,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as JE,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as XE,isHubToolExecutorName as YE}from"@cline/shared";function sR($){return $?JSON.parse(JSON.stringify($)):void 0}function oR($){return $?JSON.parse(JSON.stringify($)):void 0}function tR($){let Z=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,W=(Array.isArray(Z?.history)?Z.history:[]).filter((Y)=>!!Y&&typeof Y==="object"&&!Array.isArray(Y)).flatMap((Y)=>{let j=typeof Y.ref==="string"?Y.ref.trim():"",V=Number(Y.createdAt),H=Number(Y.runCount);if(!j||!Number.isFinite(V)||!Number.isInteger(H))return[];return[{ref:j,createdAt:V,runCount:H,...Y.kind==="stash"||Y.kind==="commit"?{kind:Y.kind}:{}}]}),J=W.at(-1),X=$?.checkpointEnabled===!0?!0:void 0;if(!X&&W.length===0)return;return{...X?{enabled:X}:{},...J?{latest:J}:{},history:W}}function t1($){let{session:Z}=$,Q=sR(Z.metadata);return{version:1,sessionId:Z.sessionId,source:Z.source,status:Z.status,createdAt:Z.startedAt,updatedAt:Z.updatedAt,endedAt:Z.endedAt??null,exitCode:Z.exitCode??null,interactive:Z.interactive,workspace:{cwd:Z.cwd,root:Z.workspaceRoot},model:{providerId:Z.provider,modelId:Z.model},capabilities:{enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams},lineage:{...Z.parentSessionId?{parentSessionId:Z.parentSessionId}:{},...Z.parentAgentId?{parentAgentId:Z.parentAgentId}:{},...Z.agentId?{agentId:Z.agentId}:{},...Z.conversationId?{conversationId:Z.conversationId}:{},isSubagent:Z.isSubagent},...Z.teamName?{team:{name:Z.teamName}}:{},...Z.prompt?{prompt:Z.prompt}:{},...Q?{metadata:Q}:{},...Z.messagesPath?{artifacts:{messagesPath:Z.messagesPath}}:{},...$.messages?{messages:oR($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let W=tR(Q);return W?{checkpoint:W}:{}})()}}function s7($){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 x2($){if(!$)return;return JSON.parse(JSON.stringify($))}var jE=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function pH($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function rH($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function iH($){let Z=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof Z.agentId==="string"?Z.agentId:"",conversationId:typeof Z.conversationId==="string"?Z.conversationId:"",iteration:typeof Z.iteration==="number"?Z.iteration:0,metadata:Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0}}function c$($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function nH($,Z){let Q={manifest:[],handlers:new Map};for(let J of Object.keys(Z.toolExecutors??{}).filter(YE)){let X=Z.toolExecutors?.[J];if(typeof X!=="function")continue;c$(Q,{kind:"toolExecutor",executor:J,capabilityName:`${JE}${J}`},async({payload:Y,abortSignal:j})=>{let V=Array.isArray(Y.args)?[...Y.args]:[],H={...iH(Y.context),signal:j};return{result:await X(...V,H)}})}for(let J of $?.extraTools??[])c$(Q,{kind:"tool",name:J.name,description:J.description,inputSchema:x2(J.inputSchema)??{},...J.lifecycle?{lifecycle:x2(J.lifecycle)}:{},capabilityName:`${ZE}${J.name}`},async({payload:X,abortSignal:Y,progress:j})=>{let V={...iH(X.context),signal:Y};return{result:await J.execute(X.input,{...V,emitUpdate:(B)=>{j({update:B})}})}});let W=$?.hooks;if(W)for(let J of jE){let X=W[J];if(typeof X!=="function")continue;c$(Q,{kind:"hook",name:J,capabilityName:`${QE}${J}`},async({payload:Y})=>({control:await X(Y.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;c$(Q,{kind:"compaction",capabilityName:$E,config:pH($.compaction)},async({payload:X})=>({result:await J(X.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;c$(Q,{kind:"checkpoint",capabilityName:eR,config:pH($.checkpoint)},async({payload:X})=>({result:await J(X.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;c$(Q,{kind:"mistakeLimit",capabilityName:WE},async({payload:X})=>({result:await J(X.context)}))}if($?.userInstructionService){let J=$.userInstructionService;c$(Q,{kind:"userInstructionService",capabilityName:XE},async()=>{return await J.start().catch(()=>{}),{snapshot:{records:{skill:J.listRecords("skill"),rule:J.listRecords("rule"),workflow:J.listRecords("workflow")},runtimeCommands:J.listRuntimeCommands()}}})}return Q}function tH($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let Z=$.message;if(typeof Z==="string"&&Z.trim())return Z.trim()}return}function VE($){return tH($)??"Capability request was cancelled."}function HE($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function BE($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function GE($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=typeof Z.inputTokens==="number"?Z.inputTokens:void 0,W=typeof Z.outputTokens==="number"?Z.outputTokens:void 0;if(Q===void 0||W===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:typeof Z.cacheReadTokens==="number"?Z.cacheReadTokens:0,cacheWriteTokens:typeof Z.cacheWriteTokens==="number"?Z.cacheWriteTokens:0,totalCost:typeof Z.totalCost==="number"?Z.totalCost:0}}function aH($){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 o7($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function e1($,Z){return o7($?.[Z])??0}function KE($){let Z=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,W=$?.agent&&typeof $.agent==="object"?$.agent:void 0,J=W?.teamRole==="teammate"||W?.teamRole==="lead"?W.teamRole:void 0;return{event:{type:"usage",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,inputTokens:e1(Z,"inputTokens"),outputTokens:e1(Z,"outputTokens"),cacheReadTokens:e1(Z,"cacheReadTokens"),cacheWriteTokens:e1(Z,"cacheWriteTokens"),cost:o7(Z?.totalCost),totalInputTokens:e1(Q,"inputTokens"),totalOutputTokens:e1(Q,"outputTokens"),totalCacheReadTokens:e1(Q,"cacheReadTokens"),totalCacheWriteTokens:e1(Q,"cacheWriteTokens"),totalCost:o7(Q?.totalCost)},teamAgentId:typeof W?.teamAgentId==="string"?W.teamAgentId:void 0,teamRole:J}}function FE($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,W=BE(Q)?Q:Q==="failed"?"error":"completed",J=GE($?.usage??Z?.usage);return{type:"done",reason:W,text:typeof $?.text==="string"?$.text:typeof Z?.text==="string"?Z.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof Z?.iterations==="number"?Z.iterations:0,usage:J}}function w5($,Z){return $.error?.message??`hub command failed: ${Z}`}function Y4($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function eH($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof Z?.agentId==="string"?Z.agentId:void 0),parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,isSubagent:typeof Z?.isSubagent==="boolean"?Z.isSubagent:!1,source:typeof Z?.source==="string"?Z.source:T0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:Y4($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:Y4($.status)==="completed"?0:Y4($.status)==="failed"?1:void 0,status:Y4($.status),interactive:Z?.interactive===!0,provider:typeof Z?.provider==="string"?Z.provider:"hub",model:typeof Z?.model==="string"?Z.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof Z?.teamName==="string"?Z.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??Z?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??Z?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??Z?.enableTeams===!0,prompt:typeof Z?.prompt==="string"?Z.prompt:void 0,metadata:Z,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,hookPath:typeof Z?.hookPath==="string"?Z.hookPath:void 0}}function $$($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function AE($){let Z=$$($?.snapshot);if(Z)return s7(Z);let Q=$?.session;return Q?eH(Q):void 0}function sH($,Z,Q){let W=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot||Z.config.cwd;return N0.parse({version:1,session_id:$,source:Z.source??T0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:Y4(Q?.status),interactive:Z.interactive===!0,provider:Z.config.providerId,model:Z.config.modelId,cwd:Q?.cwd?.trim()||Z.config.cwd,workspace_root:W,team_name:Z.config.teamName,enable_tools:Z.config.enableTools,enable_spawn:Z.config.enableSpawnAgent,enable_teams:Z.config.enableAgentTeams,prompt:Z.prompt?.trim()||void 0,metadata:Z.sessionMetadata&&Object.keys(Z.sessionMetadata).length>0?Z.sessionMetadata:void 0})}function oH($,Z){return N0.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??Z.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class u${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new $4;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,Z){this.clientContext=Z,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd},this.defaultCapabilities=O0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Q)=>this.requestPendingPromptsList(Q),update:(Q)=>this.requestPendingPromptUpdate(Q),delete:(Q)=>this.requestPendingPromptDelete(Q)},this.client=this.createClient($.url)}createClient($){return new z1({...this.clientOptions,url:$})}async replaceClient($){let Z=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(Z.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!vH($,"session.create"))return!1;let Z=await uH({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!Z)return!1;return await this.replaceClient(Z),!0}registerPlannedSession($,Z,Q){if(this.sessionCapabilities.set($,Z),Q.size>0)this.sessionClientContributionHandlers.set($,Q);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let Z=this.resolveCapabilities($),Q=nH($.localRuntime,Z),W=$.config.sessionId?.trim()||lH(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:x2({...$.config,sessionId:W}),metadata:{...$.sessionMetadata??{},source:$.source??T0.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:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:x2($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(W,Z,Q.handlers);let X;try{X=await J()}catch(H){if(this.cleanupPlannedSession(W),await this.recoverLocalHubStartupDeadlock(H)){this.registerPlannedSession(W,Z,Q.handlers);try{X=await J()}catch(B){throw this.cleanupPlannedSession(W),B}}else throw H}let Y=$$(X.payload?.snapshot),j=X.payload?.session,V=(Y?.sessionId??j?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(W),Error("Hub runtime did not return a session id.");if(V!==W)this.cleanupPlannedSession(W),this.registerPlannedSession(V,Z,Q.handlers);return{sessionId:V,manifest:Y?oH(Y,$):sH(V,$,j),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let W=$.start,J=W?this.resolveCapabilities(W):void 0,X=W?nH(W.localRuntime,J??{}):{manifest:[],handlers:new Map},Y=W?W.config.sessionId?.trim()||lH():void 0;if(Y&&J)this.sessionCapabilities.set(Y,J);if(Y&&X.handlers.size>0)this.sessionClientContributionHandlers.set(Y,X.handlers),this.ensureSessionSubscription(Y);let j;try{j=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.config.workspaceRoot?.trim()||W.config.cwd,cwd:W.config.cwd??$.cwd,sessionConfig:x2({...W.config,sessionId:Y}),metadata:{...W.sessionMetadata??{},source:W.source??T0.CORE,provider:W.config.providerId,model:W.config.modelId,enableTools:W.config.enableTools,enableSpawn:W.config.enableSpawnAgent,enableTeams:W.config.enableAgentTeams,teamName:W.config.teamName,prompt:W.prompt,interactive:W.interactive===!0},runtimeOptions:{...X.manifest.length>0?{clientContributions:X.manifest}:{},...W.localRuntime?.configExtensions?{configExtensions:W.localRuntime.configExtensions}:{}},toolPolicies:x2(W.toolPolicies)}:{}},Z)}catch(F){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw F}if(!j.ok){let F=typeof j.payload?.error==="string"?j.payload.error:"session.restore failed";if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error(F)}let V=$$(j.payload?.snapshot),H=j.payload?.session,B=(V?.sessionId??H?.sessionId)?.trim();if(Q&&!B){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error("Hub checkpoint restore returned no session id")}if(B&&Y&&B!==Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);if(B&&J)this.sessionCapabilities.set(B,J);if(B&&X.handlers.size>0)this.sessionClientContributionHandlers.set(B,X.handlers);if(B)this.ensureSessionSubscription(B);let G=Array.isArray(j.payload?.messages)?j.payload.messages:void 0,K=j.payload?.checkpoint;if(!K)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:B,startResult:B?{sessionId:B,manifest:V?oH(V,W??{}):sH(B,W??{},H),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:G,checkpoint:K}}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 Z=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,updated:Z.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,removed:Z.payload?.removed===!0}}async getAccumulatedUsage($){let Z=await this.client.command("session.get",{includeSnapshot:!0},$),Q=$$(Z.payload?.snapshot);if(Q){let Y=Q.usage?{...Q.usage}:void 0,j=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return Y||j?{usage:Y,aggregateUsage:j}:void 0}let W=Z.payload?.session,J=aH(W?.usage),X=aH(W?.aggregateUsage);return J||X?{usage:J,aggregateUsage:X}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:tH(Z)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,Z]of this.sessionSubscriptions){Z();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 Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(S$(Q))return;throw Q}return AE(Z.payload)}async listSessions($=100){let Z=await this.client.command("session.list",{limit:$}),Q=Array.isArray(Z.payload?.snapshots)?Z.payload.snapshots.flatMap((J)=>{let X=$$(J);return X?[s7(X)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(eH)}async listSettings($){let Z=await this.client.command("settings.list",rH($));if(!Z.ok)throw Error(w5(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",rH($));if(!Z.ok)throw Error(w5(Z,"settings.toggle"));return{snapshot:Z.payload?.snapshot,changedTypes:Array.isArray(Z.payload?.changedTypes)?Z.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,Z){let Q={...Z.metadata??{}};if(typeof Z.prompt==="string")Q.prompt=Z.prompt;if(typeof Z.title==="string")Q.title=Z.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw dH(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(w5(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:Z,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(w5(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,Z){return this.events.subscribe($,Z)}ensureSessionSubscription($){let Z=$.trim();if(!Z||this.sessionSubscriptions.has(Z))return;let Q=this.client.subscribe((W)=>{this.handleHubEvent(W)},{sessionId:Z});this.sessionSubscriptions.set(Z,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let Z=$.trim();if(!Z)return;this.sessionSubscriptions.get(Z)?.(),this.sessionSubscriptions.delete(Z),this.agentDoneEmittedForCurrentRunBySession.delete(Z)}resolveCapabilities($){return O0(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:FE($.payload)}})}handleHubEvent($){let Z=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!Z)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(Z);let Q=$$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,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 Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",W=$.payload?.redacted===!0;if(!Q&&!W)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:W}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:Z,payload:$.payload});return}case"usage.updated":{let Q=KE($.payload);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:Z,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"tool",toolCallId:Q,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 Q=$$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:Z,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:Z,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=$$($.payload?.snapshot),W=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:Z,payload:{...$.payload,reason:W}}),Q?.interactive===!0&&j0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:W,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{dH(this.telemetry,{component:"core",operation:$,error:Z,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let Z=$.sessionId?.trim();if(!Z)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let W=typeof $.payload?.requestId==="string"?$.payload.requestId:"",J=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!W)return;let X=this.sessionClientContributionHandlers.get(Z)?.get(J);if(!X){await this.client.command("capability.respond",{requestId:W,ok:!1,error:`No client contribution handler registered for capability ${J} in session ${Z}.`},Z).catch(()=>{});return}let Y=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},j=new AbortController;this.activeCapabilityAbortControllers.set(W,j);let V=(H)=>{this.client.command("capability.progress",{requestId:W,payload:H},Z).catch((B)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",B,$)})};try{let H=await X({payload:Y,abortSignal:j.signal,progress:V});if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!0,payload:H},Z)}catch(H){if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!1,error:H instanceof Error?H.message:String(H)},Z)}finally{this.activeCapabilityAbortControllers.delete(W)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let Z=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!Z)return;let Q=this.activeCapabilityAbortControllers.get(Z);if(!Q)return;Q.abort(VE($.payload.error))}async handleApprovalRequested($){let Z=$.sessionId?.trim();if(!Z)return;let Q=this.sessionCapabilities.get(Z)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let W=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",X=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!W||!J||!X)return;let Y=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},j=HE($.payload?.inputJson);this.pendingApprovalToolCallIds.add(J),this.emitToolCallContentStart({sessionId:Z,toolCallId:J,toolName:X,toolInput:j});let V=await Promise.resolve(Q({sessionId:Z,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:Z,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:J,toolName:X,input:j,policy:Y})).catch((H)=>({approved:!1,reason:H instanceof Error?H.message:`Tool approval request failed: ${String(H)}`}));await this.client.command("approval.respond",{approvalId:W,approved:V.approved,reason:V.reason},Z).catch(()=>{})}}class C5 extends u${constructor($){super({url:I2($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}import{existsSync as fE,mkdirSync as UE}from"node:fs";import{join as DE}from"node:path";import{asBool as j4,asOptionalString as Q1,asString as T1,ensureSessionSchema as LE,loadSqliteDb as _E,nowIso as P5,toBoolInt as V4}from"@cline/shared/db";import{resolveDbDataDir as zE}from"@cline/shared/storage";class Z${sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??zE()}init(){this.getRawDb()}ensureSessionsDir(){if(!fE(this.sessionsDirPath))UE(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return DE(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=_E(this.sessionDbPath());return LE($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}create($){let Z=P5();this.run(`INSERT OR REPLACE INTO sessions (
459
459
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
460
460
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
461
461
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
@@ -465,25 +465,25 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
465
465
  enable_tools, enable_spawn, enable_teams,
466
466
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
467
467
  prompt, metadata_json, hook_path, messages_path, updated_at
468
- FROM sessions WHERE session_id = ?`,[$]);if(!Z)return;return{sessionId:T1(Z.session_id),source:T1(Z.source),pid:Number(Z.pid??0),startedAt:T1(Z.started_at),endedAt:Z.ended_at??null,exitCode:Z.exit_code??null,status:T1(Z.status),interactive:j4(Z.interactive),provider:T1(Z.provider),model:T1(Z.model),cwd:T1(Z.cwd),workspaceRoot:T1(Z.workspace_root),teamName:Q1(Z.team_name),enableTools:j4(Z.enable_tools),enableSpawn:j4(Z.enable_spawn),enableTeams:j4(Z.enable_teams),parentSessionId:Q1(Z.parent_session_id),parentAgentId:Q1(Z.parent_agent_id),agentId:Q1(Z.agent_id),conversationId:Q1(Z.conversation_id),isSubagent:j4(Z.is_subagent),prompt:Q1(Z.prompt),metadata:(()=>{let Q=Q1(Z.metadata_json);if(!Q)return;try{let W=JSON.parse(Q);if(W&&typeof W==="object"&&!Array.isArray(W))return W}catch{}return})(),hookPath:Q1(Z.hook_path),messagesPath:Q1(Z.messages_path),updatedAt:Q1(Z.updated_at)??P5()}}list($=200){let Z=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Q=[];for(let W of Z){let J=this.get(T1(W.session_id));if(J)Q.push(J)}return Q}delete($,Z=!1){let Q=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(Z)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}}g2();import{existsSync as UW,mkdirSync as ON,readFileSync as UB,renameSync as qN,writeFileSync as MN}from"node:fs";import{join as DB}from"node:path";import{resolveSessionDataDir as RN}from"@cline/shared/storage";import{dirname as zN}from"node:path";import{nanoid as TN}from"nanoid";import{execFile as bE}from"node:child_process";import{promisify as yE}from"node:util";var hE=yE(bE);function t7($,Z){$?.log(Z,{severity:"warn"})}function kE($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))return;let Q=Z;if(!Q.latest||!Array.isArray(Q.history))return;let W=Q.latest,J=Q.history.filter((X)=>!!X&&typeof X==="object"&&typeof X.ref==="string"&&typeof X.createdAt==="number"&&typeof X.runCount==="number");if(typeof W.ref!=="string"||typeof W.createdAt!=="number"||typeof W.runCount!=="number")return;return{latest:W,history:J}}async function d$($,Z){let Q=await hE("git",["-C",$,...Z],{windowsHide:!0});return{stdout:Q.stdout.trim(),stderr:Q.stderr.trim()}}async function e7($,Z){if(!$)return;let Q=`refs/cline/checkpoints/${Z}/`;try{let{stdout:W}=await d$($,["for-each-ref","--format=%(refname)",Q]),J=W.trim().split(`
469
- `).filter(Boolean);await Promise.allSettled(J.map((X)=>d$($,["update-ref","-d",X])))}catch{}}async function $B($,Z,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((W)=>d$($,["update-ref",`refs/cline/checkpoints/${Z}/${W.runCount}`,W.ref])))}function IE($,Z){let Q=$.findIndex((W)=>W.runCount===Z.runCount);if(Q<0)return[...$,Z];return $.map((W,J)=>J===Q?Z:W)}function ZB($){let Z=$.initialRunCount??0,Q,W=async()=>{if(Q!==void 0)return Q;try{Q=(await d$($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Q=!1}return Q},J=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:Z});if(!await W())return;let X=async(H)=>{try{let G=(await d$($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:Z,kind:"commit"}}catch(B){t7($.logger,`${H}: ${B instanceof Error?B.message:String(B)}`);return}},Y=`cline checkpoint session=${$.sessionId} run=${Z}`,j="";try{j=(await d$($.cwd,["stash","create",Y])).stdout.trim()}catch(H){return t7($.logger,`Checkpoint snapshot failed: ${H instanceof Error?H.message:String(H)}`),X("Checkpoint HEAD fallback failed")}if(!j)return X("Checkpoint HEAD fallback failed");let V=`refs/cline/checkpoints/${$.sessionId}/${Z}`;try{await d$($.cwd,["update-ref",V,j])}catch(H){t7($.logger,`Checkpoint store failed: ${H instanceof Error?H.message:String(H)}`);return}return{ref:j,createdAt:Date.now(),runCount:Z,kind:"stash"}};return{beforeRun:async({snapshot:X})=>{if(X.parentAgentId!=null)return;Z+=1;return},beforeModel:async({snapshot:X})=>{if(X.parentAgentId!=null||X.iteration!==1||Z<1)return;let Y=await J();if(!Y)return;let j=await $.readSessionMetadata(),V=kE(j);if(V?.latest.ref===Y.ref)return;let H=IE(V?.history??[],Y);await $.writeSessionMetadata({...j??{},checkpoint:{latest:Y,history:H}});return}}}import{existsSync as b5,mkdirSync as xE,readdirSync as gE,rmdirSync as mE,rmSync as vE,unlinkSync as cE}from"node:fs";import{dirname as QB,join as S5}from"node:path";function $0(){return new Date().toISOString()}function H4($){if(!$||!b5($))return;try{cE($)}catch{}}function uE($){let Z=o8($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=_5($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class $W{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return S5(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!b5(Z))xE(Z,{recursive:!0});return Z}sessionMessagesPath($){return S5(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return S5(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!b5(Z)){Z=QB(Z);continue}try{if(gE(Z).length>0)break;mE(Z)}catch{break}Z=QB(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!b5($))return;try{vE($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:W,fileStem:J}=uE($),X=this.sessionArtifactsDir(W);return{messagesPath:S5(X,`${J}.messages.json`)}}}import{appendFileSync as dE,existsSync as lE,mkdirSync as WB,readFileSync as pE,writeFileSync as JB}from"node:fs";import{dirname as XB,join as rE}from"node:path";import{ensureHookLogDir as iE}from"@cline/shared/storage";class ZW{adapter;messagesArtifactUploader;logger;artifacts;constructor($,Z,Q){this.adapter=$;this.messagesArtifactUploader=Z;this.logger=Q;this.artifacts=new $W(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,Z,Q){JH(Z,Q,h7($))}writeSessionManifest($,Z){WB(XB($),{recursive:!0}),JB($,`${JSON.stringify(N0.parse(Z),null,2)}
470
- `,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let Z=this.artifacts.sessionManifestPath($,!1);if(!lE(Z))return{path:Z};try{return{path:Z,manifest:N0.parse(JSON.parse(pE(Z,"utf8")))}}catch{return{path:Z}}}async resolveArtifactPath($,Z,Q){let J=(await this.adapter.getSession($))?.[Z];return typeof J==="string"&&J.trim().length>0?J:Q($)}async persistSessionMessages($,Z,Q){let W=await this.resolveArtifactPath($,"messagesPath",(Y)=>this.artifacts.sessionMessagesPath(Y)),J=k7({updatedAt:$0(),context:h7($),messages:Z,systemPrompt:Q}),X=`${JSON.stringify(J,null,2)}
471
- `;if(WB(XB(W),{recursive:!0}),JB(W,X,"utf8"),!this.messagesArtifactUploader)return;try{let Y=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:W,contents:X,row:Y})}catch(Y){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:Y})}}appendStaleSessionHookLog($,Z,Q,W,J){let Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??rE(iE(),"hooks.jsonl");dE(Y,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:W,sessionId:Z,pid:Q,source:J})}
472
- `,"utf8")}}import{appendFileSync as nE}from"node:fs";import{join as aE}from"node:path";import{resolveRootSessionId as YB}from"@cline/shared";import{ensureHookLogDir as sE}from"@cline/shared/storage";import{z as QW}from"zod";var oE="subagent",tE=QW.looseObject({task:QW.string().optional(),systemPrompt:QW.string().optional()});class y5{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,Z,Q,W){this.adapter=$;this.manifestStore=Z;this.toPersistedMessages=Q;this.heartbeatLogIntervalMs=W}teamTaskQueueKey($,Z){return`${$}::${Z}`}activeTeamTaskSessionId($,Z){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,Z))?.at(-1)}buildSubsessionRow($,Z){return{sessionId:Z.sessionId,source:oE,pid:process.ppid,startedAt:Z.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:Z.parentSessionId,parentAgentId:Z.parentAgentId,agentId:Z.agentId,conversationId:Z.conversationId??null,isSubagent:!0,prompt:Z.prompt,metadata:e8({prompt:Z.prompt}),hookPath:"",messagesPath:Z.messagesPath,updatedAt:Z.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let Z=YB($.sessionContext);if(!Z)return;let Q=tE.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:Z,parentAgentId:$.agent_id,task:Q.success?Q.data.task:void 0,systemPrompt:Q.success?Q.data.systemPrompt:void 0})}async upsertSubagentSession($){let Z=$.rootSessionId;if(!Z)return;let Q=await this.adapter.getSession(Z);if(!Q)return;let W=L5(Z,$.agentId),J=await this.adapter.getSession(W),X=$0(),Y=this.manifestStore.artifacts.subagentArtifactPaths(W,$.agentId,this.activeTeamTaskSessionId(Z,$.parentAgentId)),j=$.prompt??J?.prompt??void 0;if(!j)j=await this.adapter.claimSpawnRequest(Z,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!J)return await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:W,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:j,startedAt:X,...Y})),this.manifestStore.initializeMessagesFile(W,Y.messagesPath,X),W;return await this.adapter.updateSession({sessionId:W,setRunning:!0,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:J.prompt??j??null,metadata:e8({metadata:J.metadata??void 0,prompt:J.prompt??j??null}),expectedStatusLock:J.statusLock}),W}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let Z=YB($.sessionContext);if(!Z)return;if($.hookName==="session_shutdown"){let Q=L5(Z,$.agent_id);return await this.adapter.getSession(Q)?Q:void 0}return await this.upsertSubagentSession({agentId:$.agent_id,parentAgentId:$.parent_agent_id,conversationId:$.taskId,rootSessionId:Z})}async applySubagentStatus($,Z){await this.applySubagentStatusBySessionId($,P7(Z))}async applySubagentStatusBySessionId($,Z){let Q=await this.adapter.getSession($);if(!Q)return;let W=j0(Z)?null:$0(),J=j0(Z)?null:Z==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:Z,endedAt:W,exitCode:J,expectedStatusLock:Q.statusLock})}async applyStatusToRunningChildSessions($,Z){if(!$)return;let Q=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let W of Q)await this.applySubagentStatusBySessionId(W.sessionId,Z)}async onTeamTaskStart($,Z,Q){let W=await this.adapter.getSession($);if(!W)return;let J=C7($,Z),X=$0(),{messagesPath:Y}=this.manifestStore.artifacts.subagentArtifactPaths(J,Z);await this.adapter.upsertSession(this.buildSubsessionRow(W,{sessionId:J,parentSessionId:$,parentAgentId:"lead",agentId:Z,prompt:Q||`Team task for ${Z}`,startedAt:X,messagesPath:Y})),this.manifestStore.initializeMessagesFile(J,Y,X);let j=this.teamTaskQueueKey($,Z),V=this.teamTaskSessionsByAgent.get(j)??[];V.push(J),this.teamTaskSessionsByAgent.set(j,V)}async onTeamTaskEnd($,Z,Q,W,J,X){let Y=this.teamTaskQueueKey($,Z),j=this.teamTaskSessionsByAgent.get(Y);if(!j||j.length===0)return;let V=j.shift();if(j.length===0)this.teamTaskSessionsByAgent.delete(Y);if(!V)return;let H=J?.messages??X,B=this.toPersistedMessages(H,J,X);if(B)await this.manifestStore.persistSessionMessages(V,B);await this.applySubagentStatusBySessionId(V,Q),this.teamTaskLastHeartbeatBySession.delete(V),this.teamTaskLastProgressLineBySession.delete(V)}async onTeamTaskProgress($,Z,Q,W){let J=this.teamTaskQueueKey($,Z),X=this.teamTaskSessionsByAgent.get(J)?.[0];if(!X)return;let Y=Q.trim();if(!Y)return;let j=W?.kind??"progress";if(j==="heartbeat"){let H=Date.now(),B=this.teamTaskLastHeartbeatBySession.get(X)??0;if(H-B<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(X,H)}let V=j==="heartbeat"?"[progress] heartbeat":j==="text"?`[progress] text: ${Y}`:`[progress] ${Y}`;if(this.teamTaskLastProgressLineBySession.get(X)===V)return;this.teamTaskLastProgressLineBySession.set(X,V)}async handleSubAgentStart($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;await this.applySubagentStatusBySessionId(Q,"running")}async handleSubAgentEnd($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;if(Z.error){await this.applySubagentStatusBySessionId(Q,"failed");return}let W=this.toPersistedMessages(Z.agentResult?.messages,Z.agentResult);if(W)await this.manifestStore.persistSessionMessages(Q,W);let J=Z.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Q,J==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Q=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??aE(sE(),"hooks.jsonl");nE(Q,`${JSON.stringify({ts:$0(),...$})}
473
- `,"utf8")}}import{formatUserInputBlock as _N}from"@cline/shared";import{existsSync as eE,readdirSync as $N,readFileSync as ZN}from"node:fs";import{basename as jB,extname as QN,join as WN}from"node:path";import{resolveAgentConfigSearchPaths as JN}from"@cline/shared/storage";import HB from"yaml";import{z as q0}from"zod";var BB=q0.object({name:q0.string().trim().min(1),description:q0.string().trim().min(1),tools:q0.union([q0.string(),q0.array(q0.string())]).optional(),skills:q0.union([q0.string(),q0.array(q0.string())]).optional(),providerId:q0.string().trim().min(1).optional(),modelId:q0.string().trim().min(1).optional(),maxIterations:q0.number().int().positive().optional()});function XN($){let Z=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!Z)throw Error("Missing YAML frontmatter block in agent config file.");let Q=Z[0].length,W=/^---[^\S\r\n]*(?:\r?\n|$)/gm;W.lastIndex=Q;let J,X=Array.from($.matchAll(W)).filter((Y)=>Y.index>=Q);for(let Y of X){let j=Y.index,V=$.slice(Q,j);try{let H=HB.parse(V);if(!H||typeof H!=="object"||Array.isArray(H))continue;BB.parse(H);let B=$.slice(j+Y[0].length);J={frontmatter:V,body:B}}catch{}}if(J)return J;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function VB($){if($===void 0)return;let Z=Array.isArray($)?$:$.split(",");return Array.from(new Set(Z.map((Q)=>Q.trim()).filter((Q)=>Q.length>0)))}function YN($){return $.trim().toLowerCase()}function jN($){let Z=QN($).toLowerCase();return Z===".yml"||Z===".yaml"}function WW($,Z={}){let{frontmatter:Q,body:W}=XN($),J=HB.parse(Q);if(!J||typeof J!=="object"||Array.isArray(J))throw Error("Agent config frontmatter must be a YAML mapping.");let X=BB.parse(J),Y=W.trim();if(!Y)throw Error("Missing system prompt body in agent config file.");return{name:X.name,description:X.description,tools:VB(X.tools),skills:VB(X.skills),providerId:X.providerId,modelId:X.modelId,maxIterations:X.maxIterations,systemPrompt:Y,path:Z.path}}function h5($){let Z=$.searchPaths??JN($.workspaceRoot),Q=new Map,W=[];for(let X of Z.filter(Boolean)){if(!eE(X))continue;let Y;try{Y=$N(X,{withFileTypes:!0})}catch(j){W.push({path:X,error:j instanceof Error?j:Error(String(j))});continue}for(let j of Y){if(!j.isFile()||!jN(j.name))continue;let V=WN(X,j.name);try{let H=ZN(V,"utf8"),B=WW(H,{path:V}),G=YN(B.name);if(!Q.has(G))Q.set(G,B)}catch(H){W.push({path:V,error:H instanceof Error?H:Error(String(H))})}}}return{configs:Array.from(Q.values()).sort((X,Y)=>(X.path?jB(X.path):X.name).localeCompare(Y.path?jB(Y.path):Y.name)),errors:W}}import{createTool as VN,zodToJsonSchema as HN}from"@cline/shared";import{z as GB}from"zod";var JW="subagent_",k5=64,BN=GB.object({prompt:GB.string().trim().min(1).describe("Task for the subagent to perform")});function GN($){let Z="",Q=!0;for(let W of $.trim().toLowerCase()){let J=W.charCodeAt(0);if(!(J>=97&&J<=122||J>=48&&J<=57||W==="_")||W==="_"){if(!Q)Z+="_",Q=!0;continue}Z+=W,Q=!1}return Q?Z.slice(0,-1):Z}function KN($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z^=$.charCodeAt(Q),Z=Math.imul(Z,16777619);return(Z>>>0).toString(36)}function XW($){let Z=GN($)||"agent",Q=KN($).slice(0,6),W=`${JW}${Z}`;if(W.length<=k5)return W;let J=k5-JW.length-Q.length-1,X=Z.slice(0,Math.max(1,J));return`${JW}${X}_${Q}`.slice(0,k5)}function YW($){let Z=new Set,Q=[];for(let W of[...$].sort((J,X)=>J.name.localeCompare(X.name))){let J=XW(W.name),X=J,Y=2;while(Z.has(X)){let j=`_${Y++}`,V=Math.max(1,k5-j.length);X=`${J.slice(0,V)}${j}`}Z.add(X),Q.push({toolName:X,config:W})}return Q}function FN($,Z){return{...$,providerId:Z.providerId??$.providerId,modelId:Z.modelId??$.modelId,maxIterations:Z.maxIterations??$.maxIterations}}function I5($){return YW($.agents).map(({toolName:Z,config:Q})=>{return VN({name:Z,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:HN(BN),execute:async(J,X)=>{let Y=$.configProvider.getRuntimeConfig(),j=R2(FN(Y,Q)),V=$.createSubAgentTools?await $.createSubAgentTools(Q,J,X):[],H=E2({kind:"subagent",prompt:Q.systemPrompt,configProvider:j,tools:V,maxIterations:Q.maxIterations,parentAgentId:X.agentId,abortSignal:X.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),B=H.getAgentId(),G=H.getConversationId(),K=X.agentId,F={systemPrompt:Q.systemPrompt,task:J.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:B,conversationId:G,parentAgentId:K,input:F})}catch{}try{let A=await H.run(J.prompt),L={text:A.text,iterations:A.iterations,finishReason:A.finishReason,usage:{inputTokens:A.usage.inputTokens,outputTokens:A.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:B,conversationId:G,parentAgentId:K,input:F,result:L,agentResult:A})}catch{}return L}catch(A){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:B,conversationId:G,parentAgentId:K,input:F,error:A instanceof Error?A:Error(String(A))})}catch{}throw A}},timeoutMs:300000,retryable:!1})})}function W1(){return new Date().toISOString()}function KB($,Z){if(Z<=0)return 0;return Math.round($/Z*100)}function AN($,Z){let Q=new Set;for(let J of Z)if(J.status==="reviewed")Q.add(`${J.outcomeId}:${J.section}`);let W=new Set;for(let J of $){if(J.status==="finalized")continue;for(let X of J.requiredSections)if(!Q.has(`${J.id}:${X}`))W.add(`${J.id}:${X}`)}return[...W].sort((J,X)=>J.localeCompare(X))}function x5($,Z){let Q={idle:0,running:0,stopped:0},W={pending:0,in_progress:0,blocked:0,completed:0},J={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},X={draft:0,in_review:0,finalized:0},Y={draft:0,reviewed:0,rejected:0},j=0,V=0;for(let f of Z.members)if(Q[f.status]+=1,f.role==="lead")j+=1;else V+=1;let H=[],B=[],G=Z.tasks.filter((f)=>f.status==="completed").length,K=new Map(Z.tasks.map((f)=>[f.id,f]));for(let f of Z.tasks){if(W[f.status]+=1,f.status==="blocked"){H.push(f.id);continue}if(f.status!=="pending")continue;if(f.dependsOn.every((U)=>{return K.get(U)?.status==="completed"}))B.push(f.id)}let F=[],A,L=0;for(let f of Z.runs){if(J[f.status]+=1,f.status==="queued"||f.status==="running")F.push(f.id);let D=f.startedAt.getTime();if(D>=L)L=D,A=f.id}for(let f of Z.outcomes)X[f.status]+=1;for(let f of Z.outcomeFragments)Y[f.status]+=1;return{teamName:$,updatedAt:W1(),members:{total:Z.members.length,byStatus:Q,leadCount:j,teammateCount:V},tasks:{total:Z.tasks.length,byStatus:W,blockedTaskIds:H,readyTaskIds:B,completionPct:KB(G,Z.tasks.length)},runs:{total:Z.runs.length,byStatus:J,activeRunIds:F,latestRunId:A},outcomes:{total:Z.outcomes.length,byStatus:X,finalizedPct:KB(X.finalized,Z.outcomes.length),missingRequiredSections:AN(Z.outcomes,Z.outcomeFragments)},fragments:{total:Z.outcomeFragments.length,byStatus:Y}}}function g5($){let{event:Z}=$;switch(Z.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1(),taskId:Z.task.id,agentId:Z.task.assignee??Z.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:Z.type,ts:W1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1(),outcomeId:Z.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1(),outcomeId:Z.fragment.outcomeId,fragmentId:Z.fragment.id,agentId:Z.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1(),taskId:Z.message.taskId,agentId:Z.message.fromAgentId,message:Z.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1(),taskId:Z.entry.taskId,agentId:Z.entry.agentId,message:Z.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1(),agentId:Z.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1()}}import{sanitizeFileName as fN,TeamMessageType as y}from"@cline/shared";import{nanoid as UN}from"nanoid";import{TeamMessageType as fp}from"@cline/shared";function jW($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function FB($,Z){return $?.status==="stopped"&&jW(Z)}var DN=600000,AB="recovered_queued";function LN($){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.
468
+ FROM sessions WHERE session_id = ?`,[$]);if(!Z)return;return{sessionId:T1(Z.session_id),source:T1(Z.source),pid:Number(Z.pid??0),startedAt:T1(Z.started_at),endedAt:Z.ended_at??null,exitCode:Z.exit_code??null,status:T1(Z.status),interactive:j4(Z.interactive),provider:T1(Z.provider),model:T1(Z.model),cwd:T1(Z.cwd),workspaceRoot:T1(Z.workspace_root),teamName:Q1(Z.team_name),enableTools:j4(Z.enable_tools),enableSpawn:j4(Z.enable_spawn),enableTeams:j4(Z.enable_teams),parentSessionId:Q1(Z.parent_session_id),parentAgentId:Q1(Z.parent_agent_id),agentId:Q1(Z.agent_id),conversationId:Q1(Z.conversation_id),isSubagent:j4(Z.is_subagent),prompt:Q1(Z.prompt),metadata:(()=>{let Q=Q1(Z.metadata_json);if(!Q)return;try{let W=JSON.parse(Q);if(W&&typeof W==="object"&&!Array.isArray(W))return W}catch{}return})(),hookPath:Q1(Z.hook_path),messagesPath:Q1(Z.messages_path),updatedAt:Q1(Z.updated_at)??P5()}}list($=200){let Z=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Q=[];for(let W of Z){let J=this.get(T1(W.session_id));if(J)Q.push(J)}return Q}delete($,Z=!1){let Q=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(Z)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}}g2();import{existsSync as UW,mkdirSync as qN,readFileSync as UB,renameSync as MN,writeFileSync as RN}from"node:fs";import{join as DB}from"node:path";import{resolveSessionDataDir as EN}from"@cline/shared/storage";import{dirname as TN}from"node:path";import{nanoid as ON}from"nanoid";import{execFile as yE}from"node:child_process";import{promisify as hE}from"node:util";var kE=hE(yE);function t7($,Z){$?.log(Z,{severity:"warn"})}function IE($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))return;let Q=Z;if(!Q.latest||!Array.isArray(Q.history))return;let W=Q.latest,J=Q.history.filter((X)=>!!X&&typeof X==="object"&&typeof X.ref==="string"&&typeof X.createdAt==="number"&&typeof X.runCount==="number");if(typeof W.ref!=="string"||typeof W.createdAt!=="number"||typeof W.runCount!=="number")return;return{latest:W,history:J}}async function d$($,Z){let Q=await kE("git",["-C",$,...Z],{windowsHide:!0});return{stdout:Q.stdout.trim(),stderr:Q.stderr.trim()}}async function e7($,Z){if(!$)return;let Q=`refs/cline/checkpoints/${Z}/`;try{let{stdout:W}=await d$($,["for-each-ref","--format=%(refname)",Q]),J=W.trim().split(`
469
+ `).filter(Boolean);await Promise.allSettled(J.map((X)=>d$($,["update-ref","-d",X])))}catch{}}async function $B($,Z,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((W)=>d$($,["update-ref",`refs/cline/checkpoints/${Z}/${W.runCount}`,W.ref])))}function xE($,Z){let Q=$.findIndex((W)=>W.runCount===Z.runCount);if(Q<0)return[...$,Z];return $.map((W,J)=>J===Q?Z:W)}function ZB($){let Z=$.initialRunCount??0,Q,W=async()=>{if(Q!==void 0)return Q;try{Q=(await d$($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Q=!1}return Q},J=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:Z});if(!await W())return;let X=async(H)=>{try{let G=(await d$($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:Z,kind:"commit"}}catch(B){t7($.logger,`${H}: ${B instanceof Error?B.message:String(B)}`);return}},Y=`cline checkpoint session=${$.sessionId} run=${Z}`,j="";try{j=(await d$($.cwd,["stash","create",Y])).stdout.trim()}catch(H){return t7($.logger,`Checkpoint snapshot failed: ${H instanceof Error?H.message:String(H)}`),X("Checkpoint HEAD fallback failed")}if(!j)return X("Checkpoint HEAD fallback failed");let V=`refs/cline/checkpoints/${$.sessionId}/${Z}`;try{await d$($.cwd,["update-ref",V,j])}catch(H){t7($.logger,`Checkpoint store failed: ${H instanceof Error?H.message:String(H)}`);return}return{ref:j,createdAt:Date.now(),runCount:Z,kind:"stash"}};return{beforeRun:async({snapshot:X})=>{if(X.parentAgentId!=null)return;Z+=1;return},beforeModel:async({snapshot:X})=>{if(X.parentAgentId!=null||X.iteration!==1||Z<1)return;let Y=await J();if(!Y)return;let j=await $.readSessionMetadata(),V=IE(j);if(V?.latest.ref===Y.ref)return;let H=xE(V?.history??[],Y);await $.writeSessionMetadata({...j??{},checkpoint:{latest:Y,history:H}});return}}}import{existsSync as b5,mkdirSync as gE,readdirSync as mE,rmdirSync as vE,rmSync as cE,unlinkSync as uE}from"node:fs";import{dirname as QB,join as S5}from"node:path";function $0(){return new Date().toISOString()}function H4($){if(!$||!b5($))return;try{uE($)}catch{}}function dE($){let Z=o8($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=_5($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class $W{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return S5(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!b5(Z))gE(Z,{recursive:!0});return Z}sessionMessagesPath($){return S5(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return S5(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!b5(Z)){Z=QB(Z);continue}try{if(mE(Z).length>0)break;vE(Z)}catch{break}Z=QB(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!b5($))return;try{cE($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:W,fileStem:J}=dE($),X=this.sessionArtifactsDir(W);return{messagesPath:S5(X,`${J}.messages.json`)}}}import{appendFileSync as lE,existsSync as pE,mkdirSync as WB,readFileSync as rE,writeFileSync as JB}from"node:fs";import{dirname as XB,join as iE}from"node:path";import{ensureHookLogDir as nE}from"@cline/shared/storage";class ZW{adapter;messagesArtifactUploader;logger;artifacts;constructor($,Z,Q){this.adapter=$;this.messagesArtifactUploader=Z;this.logger=Q;this.artifacts=new $W(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,Z,Q){JH(Z,Q,h7($))}writeSessionManifest($,Z){WB(XB($),{recursive:!0}),JB($,`${JSON.stringify(N0.parse(Z),null,2)}
470
+ `,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let Z=this.artifacts.sessionManifestPath($,!1);if(!pE(Z))return{path:Z};try{return{path:Z,manifest:N0.parse(JSON.parse(rE(Z,"utf8")))}}catch{return{path:Z}}}async resolveArtifactPath($,Z,Q){let J=(await this.adapter.getSession($))?.[Z];return typeof J==="string"&&J.trim().length>0?J:Q($)}async persistSessionMessages($,Z,Q){let W=await this.resolveArtifactPath($,"messagesPath",(Y)=>this.artifacts.sessionMessagesPath(Y)),J=k7({updatedAt:$0(),context:h7($),messages:Z,systemPrompt:Q}),X=`${JSON.stringify(J,null,2)}
471
+ `;if(WB(XB(W),{recursive:!0}),JB(W,X,"utf8"),!this.messagesArtifactUploader)return;try{let Y=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:W,contents:X,row:Y})}catch(Y){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:Y})}}appendStaleSessionHookLog($,Z,Q,W,J){let Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??iE(nE(),"hooks.jsonl");lE(Y,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:W,sessionId:Z,pid:Q,source:J})}
472
+ `,"utf8")}}import{appendFileSync as aE}from"node:fs";import{join as sE}from"node:path";import{resolveRootSessionId as YB}from"@cline/shared";import{ensureHookLogDir as oE}from"@cline/shared/storage";import{z as QW}from"zod";var tE="subagent",eE=QW.looseObject({task:QW.string().optional(),systemPrompt:QW.string().optional()});class y5{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,Z,Q,W){this.adapter=$;this.manifestStore=Z;this.toPersistedMessages=Q;this.heartbeatLogIntervalMs=W}teamTaskQueueKey($,Z){return`${$}::${Z}`}activeTeamTaskSessionId($,Z){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,Z))?.at(-1)}buildSubsessionRow($,Z){return{sessionId:Z.sessionId,source:tE,pid:process.ppid,startedAt:Z.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:Z.parentSessionId,parentAgentId:Z.parentAgentId,agentId:Z.agentId,conversationId:Z.conversationId??null,isSubagent:!0,prompt:Z.prompt,metadata:e8({prompt:Z.prompt}),hookPath:"",messagesPath:Z.messagesPath,updatedAt:Z.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let Z=YB($.sessionContext);if(!Z)return;let Q=eE.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:Z,parentAgentId:$.agent_id,task:Q.success?Q.data.task:void 0,systemPrompt:Q.success?Q.data.systemPrompt:void 0})}async upsertSubagentSession($){let Z=$.rootSessionId;if(!Z)return;let Q=await this.adapter.getSession(Z);if(!Q)return;let W=L5(Z,$.agentId),J=await this.adapter.getSession(W),X=$0(),Y=this.manifestStore.artifacts.subagentArtifactPaths(W,$.agentId,this.activeTeamTaskSessionId(Z,$.parentAgentId)),j=$.prompt??J?.prompt??void 0;if(!j)j=await this.adapter.claimSpawnRequest(Z,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!J)return await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:W,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:j,startedAt:X,...Y})),this.manifestStore.initializeMessagesFile(W,Y.messagesPath,X),W;return await this.adapter.updateSession({sessionId:W,setRunning:!0,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:J.prompt??j??null,metadata:e8({metadata:J.metadata??void 0,prompt:J.prompt??j??null}),expectedStatusLock:J.statusLock}),W}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let Z=YB($.sessionContext);if(!Z)return;if($.hookName==="session_shutdown"){let Q=L5(Z,$.agent_id);return await this.adapter.getSession(Q)?Q:void 0}return await this.upsertSubagentSession({agentId:$.agent_id,parentAgentId:$.parent_agent_id,conversationId:$.taskId,rootSessionId:Z})}async applySubagentStatus($,Z){await this.applySubagentStatusBySessionId($,P7(Z))}async applySubagentStatusBySessionId($,Z){let Q=await this.adapter.getSession($);if(!Q)return;let W=j0(Z)?null:$0(),J=j0(Z)?null:Z==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:Z,endedAt:W,exitCode:J,expectedStatusLock:Q.statusLock})}async applyStatusToRunningChildSessions($,Z){if(!$)return;let Q=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let W of Q)await this.applySubagentStatusBySessionId(W.sessionId,Z)}async onTeamTaskStart($,Z,Q){let W=await this.adapter.getSession($);if(!W)return;let J=C7($,Z),X=$0(),{messagesPath:Y}=this.manifestStore.artifacts.subagentArtifactPaths(J,Z);await this.adapter.upsertSession(this.buildSubsessionRow(W,{sessionId:J,parentSessionId:$,parentAgentId:"lead",agentId:Z,prompt:Q||`Team task for ${Z}`,startedAt:X,messagesPath:Y})),this.manifestStore.initializeMessagesFile(J,Y,X);let j=this.teamTaskQueueKey($,Z),V=this.teamTaskSessionsByAgent.get(j)??[];V.push(J),this.teamTaskSessionsByAgent.set(j,V)}async onTeamTaskEnd($,Z,Q,W,J,X){let Y=this.teamTaskQueueKey($,Z),j=this.teamTaskSessionsByAgent.get(Y);if(!j||j.length===0)return;let V=j.shift();if(j.length===0)this.teamTaskSessionsByAgent.delete(Y);if(!V)return;let H=J?.messages??X,B=this.toPersistedMessages(H,J,X);if(B)await this.manifestStore.persistSessionMessages(V,B);await this.applySubagentStatusBySessionId(V,Q),this.teamTaskLastHeartbeatBySession.delete(V),this.teamTaskLastProgressLineBySession.delete(V)}async onTeamTaskProgress($,Z,Q,W){let J=this.teamTaskQueueKey($,Z),X=this.teamTaskSessionsByAgent.get(J)?.[0];if(!X)return;let Y=Q.trim();if(!Y)return;let j=W?.kind??"progress";if(j==="heartbeat"){let H=Date.now(),B=this.teamTaskLastHeartbeatBySession.get(X)??0;if(H-B<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(X,H)}let V=j==="heartbeat"?"[progress] heartbeat":j==="text"?`[progress] text: ${Y}`:`[progress] ${Y}`;if(this.teamTaskLastProgressLineBySession.get(X)===V)return;this.teamTaskLastProgressLineBySession.set(X,V)}async handleSubAgentStart($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;await this.applySubagentStatusBySessionId(Q,"running")}async handleSubAgentEnd($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;if(Z.error){await this.applySubagentStatusBySessionId(Q,"failed");return}let W=this.toPersistedMessages(Z.agentResult?.messages,Z.agentResult);if(W)await this.manifestStore.persistSessionMessages(Q,W);let J=Z.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Q,J==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Q=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??sE(oE(),"hooks.jsonl");aE(Q,`${JSON.stringify({ts:$0(),...$})}
473
+ `,"utf8")}}import{formatUserInputBlock as zN}from"@cline/shared";import{existsSync as $N,readdirSync as ZN,readFileSync as QN}from"node:fs";import{basename as jB,extname as WN,join as JN}from"node:path";import{resolveAgentConfigSearchPaths as XN}from"@cline/shared/storage";import HB from"yaml";import{z as q0}from"zod";var BB=q0.object({name:q0.string().trim().min(1),description:q0.string().trim().min(1),tools:q0.union([q0.string(),q0.array(q0.string())]).optional(),skills:q0.union([q0.string(),q0.array(q0.string())]).optional(),providerId:q0.string().trim().min(1).optional(),modelId:q0.string().trim().min(1).optional(),maxIterations:q0.number().int().positive().optional()});function YN($){let Z=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!Z)throw Error("Missing YAML frontmatter block in agent config file.");let Q=Z[0].length,W=/^---[^\S\r\n]*(?:\r?\n|$)/gm;W.lastIndex=Q;let J,X=Array.from($.matchAll(W)).filter((Y)=>Y.index>=Q);for(let Y of X){let j=Y.index,V=$.slice(Q,j);try{let H=HB.parse(V);if(!H||typeof H!=="object"||Array.isArray(H))continue;BB.parse(H);let B=$.slice(j+Y[0].length);J={frontmatter:V,body:B}}catch{}}if(J)return J;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function VB($){if($===void 0)return;let Z=Array.isArray($)?$:$.split(",");return Array.from(new Set(Z.map((Q)=>Q.trim()).filter((Q)=>Q.length>0)))}function jN($){return $.trim().toLowerCase()}function VN($){let Z=WN($).toLowerCase();return Z===".yml"||Z===".yaml"}function WW($,Z={}){let{frontmatter:Q,body:W}=YN($),J=HB.parse(Q);if(!J||typeof J!=="object"||Array.isArray(J))throw Error("Agent config frontmatter must be a YAML mapping.");let X=BB.parse(J),Y=W.trim();if(!Y)throw Error("Missing system prompt body in agent config file.");return{name:X.name,description:X.description,tools:VB(X.tools),skills:VB(X.skills),providerId:X.providerId,modelId:X.modelId,maxIterations:X.maxIterations,systemPrompt:Y,path:Z.path}}function h5($){let Z=$.searchPaths??XN($.workspaceRoot),Q=new Map,W=[];for(let X of Z.filter(Boolean)){if(!$N(X))continue;let Y;try{Y=ZN(X,{withFileTypes:!0})}catch(j){W.push({path:X,error:j instanceof Error?j:Error(String(j))});continue}for(let j of Y){if(!j.isFile()||!VN(j.name))continue;let V=JN(X,j.name);try{let H=QN(V,"utf8"),B=WW(H,{path:V}),G=jN(B.name);if(!Q.has(G))Q.set(G,B)}catch(H){W.push({path:V,error:H instanceof Error?H:Error(String(H))})}}}return{configs:Array.from(Q.values()).sort((X,Y)=>(X.path?jB(X.path):X.name).localeCompare(Y.path?jB(Y.path):Y.name)),errors:W}}import{createTool as HN,zodToJsonSchema as BN}from"@cline/shared";import{z as GB}from"zod";var JW="subagent_",k5=64,GN=GB.object({prompt:GB.string().trim().min(1).describe("Task for the subagent to perform")});function KN($){let Z="",Q=!0;for(let W of $.trim().toLowerCase()){let J=W.charCodeAt(0);if(!(J>=97&&J<=122||J>=48&&J<=57||W==="_")||W==="_"){if(!Q)Z+="_",Q=!0;continue}Z+=W,Q=!1}return Q?Z.slice(0,-1):Z}function FN($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z^=$.charCodeAt(Q),Z=Math.imul(Z,16777619);return(Z>>>0).toString(36)}function XW($){let Z=KN($)||"agent",Q=FN($).slice(0,6),W=`${JW}${Z}`;if(W.length<=k5)return W;let J=k5-JW.length-Q.length-1,X=Z.slice(0,Math.max(1,J));return`${JW}${X}_${Q}`.slice(0,k5)}function YW($){let Z=new Set,Q=[];for(let W of[...$].sort((J,X)=>J.name.localeCompare(X.name))){let J=XW(W.name),X=J,Y=2;while(Z.has(X)){let j=`_${Y++}`,V=Math.max(1,k5-j.length);X=`${J.slice(0,V)}${j}`}Z.add(X),Q.push({toolName:X,config:W})}return Q}function AN($,Z){return{...$,providerId:Z.providerId??$.providerId,modelId:Z.modelId??$.modelId,maxIterations:Z.maxIterations??$.maxIterations}}function I5($){return YW($.agents).map(({toolName:Z,config:Q})=>{return HN({name:Z,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:BN(GN),execute:async(J,X)=>{let Y=$.configProvider.getRuntimeConfig(),j=R2(AN(Y,Q)),V=$.createSubAgentTools?await $.createSubAgentTools(Q,J,X):[],H=E2({kind:"subagent",prompt:Q.systemPrompt,configProvider:j,tools:V,maxIterations:Q.maxIterations,parentAgentId:X.agentId,abortSignal:X.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),B=H.getAgentId(),G=H.getConversationId(),K=X.agentId,F={systemPrompt:Q.systemPrompt,task:J.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:B,conversationId:G,parentAgentId:K,input:F})}catch{}try{let A=await H.run(J.prompt),L={text:A.text,iterations:A.iterations,finishReason:A.finishReason,usage:{inputTokens:A.usage.inputTokens,outputTokens:A.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:B,conversationId:G,parentAgentId:K,input:F,result:L,agentResult:A})}catch{}return L}catch(A){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:B,conversationId:G,parentAgentId:K,input:F,error:A instanceof Error?A:Error(String(A))})}catch{}throw A}},timeoutMs:300000,retryable:!1})})}function W1(){return new Date().toISOString()}function KB($,Z){if(Z<=0)return 0;return Math.round($/Z*100)}function fN($,Z){let Q=new Set;for(let J of Z)if(J.status==="reviewed")Q.add(`${J.outcomeId}:${J.section}`);let W=new Set;for(let J of $){if(J.status==="finalized")continue;for(let X of J.requiredSections)if(!Q.has(`${J.id}:${X}`))W.add(`${J.id}:${X}`)}return[...W].sort((J,X)=>J.localeCompare(X))}function x5($,Z){let Q={idle:0,running:0,stopped:0},W={pending:0,in_progress:0,blocked:0,completed:0},J={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},X={draft:0,in_review:0,finalized:0},Y={draft:0,reviewed:0,rejected:0},j=0,V=0;for(let f of Z.members)if(Q[f.status]+=1,f.role==="lead")j+=1;else V+=1;let H=[],B=[],G=Z.tasks.filter((f)=>f.status==="completed").length,K=new Map(Z.tasks.map((f)=>[f.id,f]));for(let f of Z.tasks){if(W[f.status]+=1,f.status==="blocked"){H.push(f.id);continue}if(f.status!=="pending")continue;if(f.dependsOn.every((U)=>{return K.get(U)?.status==="completed"}))B.push(f.id)}let F=[],A,L=0;for(let f of Z.runs){if(J[f.status]+=1,f.status==="queued"||f.status==="running")F.push(f.id);let D=f.startedAt.getTime();if(D>=L)L=D,A=f.id}for(let f of Z.outcomes)X[f.status]+=1;for(let f of Z.outcomeFragments)Y[f.status]+=1;return{teamName:$,updatedAt:W1(),members:{total:Z.members.length,byStatus:Q,leadCount:j,teammateCount:V},tasks:{total:Z.tasks.length,byStatus:W,blockedTaskIds:H,readyTaskIds:B,completionPct:KB(G,Z.tasks.length)},runs:{total:Z.runs.length,byStatus:J,activeRunIds:F,latestRunId:A},outcomes:{total:Z.outcomes.length,byStatus:X,finalizedPct:KB(X.finalized,Z.outcomes.length),missingRequiredSections:fN(Z.outcomes,Z.outcomeFragments)},fragments:{total:Z.outcomeFragments.length,byStatus:Y}}}function g5($){let{event:Z}=$;switch(Z.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1(),taskId:Z.task.id,agentId:Z.task.assignee??Z.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:Z.type,ts:W1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1(),outcomeId:Z.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1(),outcomeId:Z.fragment.outcomeId,fragmentId:Z.fragment.id,agentId:Z.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1(),taskId:Z.message.taskId,agentId:Z.message.fromAgentId,message:Z.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1(),taskId:Z.entry.taskId,agentId:Z.entry.agentId,message:Z.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1(),agentId:Z.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1()}}import{sanitizeFileName as UN,TeamMessageType as y}from"@cline/shared";import{nanoid as DN}from"nanoid";import{TeamMessageType as Up}from"@cline/shared";function jW($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function FB($,Z){return $?.status==="stopped"&&jW(Z)}var LN=600000,AB="recovered_queued";function _N($){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.
474
474
 
475
475
  ${$.message}`}class VW{agents=new Map;configs=new Map;onTeamEvent;constructor($,Z){if(this.onTeamEvent=Z,$)for(let[Q,W]of Object.entries($))this.addAgent(Q,W)}addAgent($,Z){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let Q={...Z,onEvent:(J)=>{Z.onEvent?.(J),this.emitEvent({type:y.AgentEvent,agentId:$,event:J})}},W=new l1(Q);if(Q.onEvent)W.subscribeEvents(Q.onEvent);this.agents.set($,W),this.configs.set($,Z)}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($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:y.TaskStart,agentId:$,message:Z});try{let W=await Q.run(Z);return this.emitEvent({type:y.TaskEnd,agentId:$,result:W}),W}catch(W){let J=W instanceof Error?W:Error(String(W));throw this.emitEvent({type:y.TaskEnd,agentId:$,error:J,messages:Q.getMessages()}),W}}async continueTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:y.TaskStart,agentId:$,message:Z});try{let W=await Q.continue(Z);return this.emitEvent({type:y.TaskEnd,agentId:$,result:W}),W}catch(W){let J=W instanceof Error?W:Error(String(W));throw this.emitEvent({type:y.TaskEnd,agentId:$,error:J,messages:Q.getMessages()}),W}}async runParallel($){let Z=$.map(async(Q)=>{let W=this.agents.get(Q.agentId);if(!W)return{agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata};this.emitEvent({type:y.TaskStart,agentId:Q.agentId,message:Q.message});try{let J=await W.run(Q.message);return this.emitEvent({type:y.TaskEnd,agentId:Q.agentId,result:J}),{agentId:Q.agentId,result:J,metadata:Q.metadata}}catch(J){let X=J instanceof Error?J:Error(String(J));return this.emitEvent({type:y.TaskEnd,agentId:Q.agentId,error:X,messages:W.getMessages()}),{agentId:Q.agentId,result:void 0,error:X,metadata:Q.metadata}}});return Promise.all(Z)}async runSequential($){let Z=[];for(let Q of $){let W=this.agents.get(Q.agentId);if(!W){Z.push({agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata});continue}this.emitEvent({type:y.TaskStart,agentId:Q.agentId,message:Q.message});try{let J=await W.run(Q.message);this.emitEvent({type:y.TaskEnd,agentId:Q.agentId,result:J}),Z.push({agentId:Q.agentId,result:J,metadata:Q.metadata})}catch(J){let X=J instanceof Error?J:Error(String(J));this.emitEvent({type:y.TaskEnd,agentId:Q.agentId,error:X,messages:W.getMessages()}),Z.push({agentId:Q.agentId,result:void 0,error:X,metadata:Q.metadata})}}return Z}async runPipeline($,Z,Q){let W=[],J=Z;for(let X of $){let Y=this.agents.get(X);if(!Y){W.push({agentId:X,result:void 0,error:Error(`Agent "${X}" not found in team`)});break}this.emitEvent({type:y.TaskStart,agentId:X,message:J});try{let j=await Y.run(J);this.emitEvent({type:y.TaskEnd,agentId:X,result:j}),W.push({agentId:X,result:j});let V=$.indexOf(X)+1;if(V<$.length){let H=$[V];J=Q?Q(j,H):`Previous agent output:
476
476
  ${j.text}
477
477
 
478
- Please continue from here.`}}catch(j){let V=j instanceof Error?j:Error(String(j));this.emitEvent({type:y.TaskEnd,agentId:X,error:V,messages:Y.getMessages()}),W.push({agentId:X,result:void 0,error:V});break}}return W}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{}}}class B4{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_${fN(UN(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 Z=$.leadAgentId??"lead";this.members.set(Z,{agentId:Z,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((Z)=>{let Q=this.getUnresolvedDependencies(Z);return{...Z,blockedBy:Q,isReady:Z.status==="pending"&&!Z.assignee&&Q.length===0}}).filter((Z)=>{if($?.status&&Z.status!==$.status)return!1;if($?.assignee&&Z.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,Z){let Q=Z?.unreadOnly??!0,W=Z?.markRead??!0,J=Z?.limit,X=this.mailbox.filter((j)=>j.toAgentId===$&&(!Q||!j.readAt)),Y=typeof J==="number"&&J>0?X.slice(Math.max(0,X.length-J)):X;if(W){let j=new Date;for(let V of Y)if(!V.readAt)V.readAt=j}return Y.map((j)=>({...j}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let Q of this.tasks.values())$[Q.status]++;let Z={draft:0,in_review:0,finalized:0};for(let Q of this.outcomes.values())Z[Q.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((Q)=>({agentId:Q.agentId,role:Q.role,description:Q.description,status:Q.status})),taskCounts:$,unreadMessages:this.mailbox.filter((Q)=>!Q.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").length,outcomeCounts:Z}}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 Q of $.tasks)this.tasks.set(Q.id,{...Q});this.mailbox.length=0,this.mailbox.push(...$.mailbox.map((Q)=>({...Q}))),this.missionLog.length=0,this.missionLog.push(...$.missionLog.map((Q)=>({...Q}))),this.runs.clear();for(let Q of $.runs??[])this.runs.set(Q.id,{...Q});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").map((Q)=>Q.id)),this.outcomes.clear();for(let Q of $.outcomes??[])this.outcomes.set(Q.id,{...Q});this.outcomeFragments.clear();for(let Q of $.outcomeFragments??[])this.outcomeFragments.set(Q.id,{...Q});let Z=Array.from(this.members.values()).filter((Q)=>Q.role==="lead");this.members.clear();for(let Q of Z)this.members.set(Q.agentId,{...Q,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let Q of $.members){if(Q.role!=="teammate")continue;this.members.set(Q.agentId,{agentId:Q.agentId,role:"teammate",description:Q.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,m2($.tasks.map((Q)=>Q.id),"task_")),this.messageCounter=Math.max(this.messageCounter,m2($.mailbox.map((Q)=>Q.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,m2($.missionLog.map((Q)=>Q.id),"log_")),this.runCounter=Math.max(this.runCounter,m2(($.runs??[]).map((Q)=>Q.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,m2(($.outcomes??[]).map((Q)=>Q.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,m2(($.outcomeFragments??[]).map((Q)=>Q.id),"frag_"))}isTeammateActive($){let Z=this.members.get($);return!!Z&&Z.role==="teammate"&&!!Z.agent}spawnTeammate({agentId:$,config:Z}){let Q=this.members.get($);if(Q&&Q.role!=="teammate")throw Error(`Team member "${$}" already exists and is not a teammate`);if(Q&&Q.runningCount>0)throw Error(`Teammate "${$}" is currently running and cannot be respawned`);let W={...Z,apiTimeoutMs:DN,consumePendingUserMessage:()=>{let Y=this.members.get($);if(!Y||!Y.pendingSteerMessage)return;let j=Y.pendingSteerMessage;return Y.pendingSteerMessage=void 0,j},onEvent:(Y)=>{Z.onEvent?.(Y),this.emitEvent({type:y.AgentEvent,agentId:$,event:Y}),this.trackMeaningfulEvent($,Y)}},J=new l1(W);if(W.onEvent)J.subscribeEvents(W.onEvent);let X={agentId:$,role:"teammate",description:Z.role,status:"idle",agent:J,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,X),this.emitEvent({type:y.TeammateSpawned,agentId:$,role:Z.role,teammate:{rolePrompt:Z.systemPrompt,modelId:Z.modelId,maxIterations:Z.maxIterations,runtimeAgentId:J.getAgentId(),conversationId:J.getConversationId(),parentAgentId:null}}),{agentId:X.agentId,role:X.role,description:X.description,status:X.status}}shutdownTeammate($,Z){let Q=this.members.get($);if(!Q||Q.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{Q.agent?.abort()}catch(W){if(!jW(W))throw W}Q.status="stopped",this.emitEvent({type:y.TeammateShutdown,agentId:$,reason:Z})}updateTeammateConnections($){for(let Z of this.members.values()){if(Z.role!=="teammate"||!Z.agent)continue;Z.agent.updateConnection($)}}createTask($){let Z=`task_${String(++this.taskCounter).padStart(4,"0")}`,Q=new Date,W={id:Z,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:Q,updatedAt:Q,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(Z,W),this.emitEvent({type:y.TeamTaskUpdated,task:{...W}}),{...W}}claimTask($,Z){let Q=this.requireTask($);return this.assertDependenciesResolved(Q),Q.status="in_progress",Q.assignee=Z,Q.updatedAt=new Date,this.emitEvent({type:y.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"progress",summary:`Claimed task "${Q.title}"`}),{...Q}}blockTask($,Z,Q){let W=this.requireTask($);return W.status="blocked",W.updatedAt=new Date,W.summary=Q,this.emitEvent({type:y.TeamTaskUpdated,task:{...W}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"blocked",summary:Q}),{...W}}completeTask($,Z,Q){let W=this.requireTask($);if(W.status="completed",W.updatedAt=new Date,W.summary=Q,!W.assignee)W.assignee=Z;return this.emitEvent({type:y.TeamTaskUpdated,task:{...W}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"done",summary:Q}),{...W}}async routeToTeammate($,Z,Q){let W=this.members.get($);if(!W||W.role!=="teammate"||!W.agent)throw Error(`Teammate "${$}" was not found`);if(!W.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");W.runningCount++,W.status="running",this.emitEvent({type:y.TaskStart,agentId:$,message:Z});try{let J=this.listMailbox($,{unreadOnly:!0,markRead:!0}),X=J.length>0?`${this.buildMailboxNotification(J)}
478
+ Please continue from here.`}}catch(j){let V=j instanceof Error?j:Error(String(j));this.emitEvent({type:y.TaskEnd,agentId:X,error:V,messages:Y.getMessages()}),W.push({agentId:X,result:void 0,error:V});break}}return W}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{}}}class B4{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_${UN(DN(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 Z=$.leadAgentId??"lead";this.members.set(Z,{agentId:Z,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((Z)=>{let Q=this.getUnresolvedDependencies(Z);return{...Z,blockedBy:Q,isReady:Z.status==="pending"&&!Z.assignee&&Q.length===0}}).filter((Z)=>{if($?.status&&Z.status!==$.status)return!1;if($?.assignee&&Z.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,Z){let Q=Z?.unreadOnly??!0,W=Z?.markRead??!0,J=Z?.limit,X=this.mailbox.filter((j)=>j.toAgentId===$&&(!Q||!j.readAt)),Y=typeof J==="number"&&J>0?X.slice(Math.max(0,X.length-J)):X;if(W){let j=new Date;for(let V of Y)if(!V.readAt)V.readAt=j}return Y.map((j)=>({...j}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let Q of this.tasks.values())$[Q.status]++;let Z={draft:0,in_review:0,finalized:0};for(let Q of this.outcomes.values())Z[Q.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((Q)=>({agentId:Q.agentId,role:Q.role,description:Q.description,status:Q.status})),taskCounts:$,unreadMessages:this.mailbox.filter((Q)=>!Q.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").length,outcomeCounts:Z}}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 Q of $.tasks)this.tasks.set(Q.id,{...Q});this.mailbox.length=0,this.mailbox.push(...$.mailbox.map((Q)=>({...Q}))),this.missionLog.length=0,this.missionLog.push(...$.missionLog.map((Q)=>({...Q}))),this.runs.clear();for(let Q of $.runs??[])this.runs.set(Q.id,{...Q});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").map((Q)=>Q.id)),this.outcomes.clear();for(let Q of $.outcomes??[])this.outcomes.set(Q.id,{...Q});this.outcomeFragments.clear();for(let Q of $.outcomeFragments??[])this.outcomeFragments.set(Q.id,{...Q});let Z=Array.from(this.members.values()).filter((Q)=>Q.role==="lead");this.members.clear();for(let Q of Z)this.members.set(Q.agentId,{...Q,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let Q of $.members){if(Q.role!=="teammate")continue;this.members.set(Q.agentId,{agentId:Q.agentId,role:"teammate",description:Q.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,m2($.tasks.map((Q)=>Q.id),"task_")),this.messageCounter=Math.max(this.messageCounter,m2($.mailbox.map((Q)=>Q.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,m2($.missionLog.map((Q)=>Q.id),"log_")),this.runCounter=Math.max(this.runCounter,m2(($.runs??[]).map((Q)=>Q.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,m2(($.outcomes??[]).map((Q)=>Q.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,m2(($.outcomeFragments??[]).map((Q)=>Q.id),"frag_"))}isTeammateActive($){let Z=this.members.get($);return!!Z&&Z.role==="teammate"&&!!Z.agent}spawnTeammate({agentId:$,config:Z}){let Q=this.members.get($);if(Q&&Q.role!=="teammate")throw Error(`Team member "${$}" already exists and is not a teammate`);if(Q&&Q.runningCount>0)throw Error(`Teammate "${$}" is currently running and cannot be respawned`);let W={...Z,apiTimeoutMs:LN,consumePendingUserMessage:()=>{let Y=this.members.get($);if(!Y||!Y.pendingSteerMessage)return;let j=Y.pendingSteerMessage;return Y.pendingSteerMessage=void 0,j},onEvent:(Y)=>{Z.onEvent?.(Y),this.emitEvent({type:y.AgentEvent,agentId:$,event:Y}),this.trackMeaningfulEvent($,Y)}},J=new l1(W);if(W.onEvent)J.subscribeEvents(W.onEvent);let X={agentId:$,role:"teammate",description:Z.role,status:"idle",agent:J,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,X),this.emitEvent({type:y.TeammateSpawned,agentId:$,role:Z.role,teammate:{rolePrompt:Z.systemPrompt,modelId:Z.modelId,maxIterations:Z.maxIterations,runtimeAgentId:J.getAgentId(),conversationId:J.getConversationId(),parentAgentId:null}}),{agentId:X.agentId,role:X.role,description:X.description,status:X.status}}shutdownTeammate($,Z){let Q=this.members.get($);if(!Q||Q.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{Q.agent?.abort()}catch(W){if(!jW(W))throw W}Q.status="stopped",this.emitEvent({type:y.TeammateShutdown,agentId:$,reason:Z})}updateTeammateConnections($){for(let Z of this.members.values()){if(Z.role!=="teammate"||!Z.agent)continue;Z.agent.updateConnection($)}}createTask($){let Z=`task_${String(++this.taskCounter).padStart(4,"0")}`,Q=new Date,W={id:Z,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:Q,updatedAt:Q,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(Z,W),this.emitEvent({type:y.TeamTaskUpdated,task:{...W}}),{...W}}claimTask($,Z){let Q=this.requireTask($);return this.assertDependenciesResolved(Q),Q.status="in_progress",Q.assignee=Z,Q.updatedAt=new Date,this.emitEvent({type:y.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"progress",summary:`Claimed task "${Q.title}"`}),{...Q}}blockTask($,Z,Q){let W=this.requireTask($);return W.status="blocked",W.updatedAt=new Date,W.summary=Q,this.emitEvent({type:y.TeamTaskUpdated,task:{...W}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"blocked",summary:Q}),{...W}}completeTask($,Z,Q){let W=this.requireTask($);if(W.status="completed",W.updatedAt=new Date,W.summary=Q,!W.assignee)W.assignee=Z;return this.emitEvent({type:y.TeamTaskUpdated,task:{...W}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"done",summary:Q}),{...W}}async routeToTeammate($,Z,Q){let W=this.members.get($);if(!W||W.role!=="teammate"||!W.agent)throw Error(`Teammate "${$}" was not found`);if(!W.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");W.runningCount++,W.status="running",this.emitEvent({type:y.TaskStart,agentId:$,message:Z});try{let J=this.listMailbox($,{unreadOnly:!0,markRead:!0}),X=J.length>0?`${this.buildMailboxNotification(J)}
479
479
 
480
- ${Z}`:Z,Y=Q?.continueConversation?await W.agent.continue(X):await W.agent.run(X);return this.emitEvent({type:y.TaskEnd,agentId:$,result:Y}),this.recordProgressStep($,`Completed a delegated run (${Y.iterations} iterations)`,Q?.taskId,!0),Y}catch(J){let X=J instanceof Error?J:Error(String(J));if(this.emitEvent({type:y.TaskEnd,agentId:$,error:X,messages:W.agent.getMessages()}),!FB(W,X))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:X.message});throw X}finally{if(W.runningCount--,W.runningCount<=0&&this.members.get($)?.status!=="stopped")W.status="idle"}}startTeammateRun($,Z,Q){let W=`run_${String(++this.runCounter).padStart(5,"0")}`,J={id:W,agentId:$,taskId:Q?.taskId,status:"queued",message:Z,priority:Q?.priority??0,retryCount:0,maxRetries:Math.max(0,Q?.maxRetries??0),continueConversation:Q?.continueConversation,startedAt:new Date(0),leaseOwner:Q?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(W,J),this.runQueue.push(W),this.emitEvent({type:y.RunQueued,run:{...J}}),this.dispatchQueuedRuns(),{...J}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let Z=this.selectNextDispatchableQueuedRun();$=Z.nextDelayedAttemptAt;let Q=Z.index;if(Q<0){this.scheduleQueuedRunDispatch($);return}let[W]=this.runQueue.splice(Q,1),J=W?this.runs.get(W):void 0;if(!J||J.status!=="queued")continue;this.executeQueuedRun(J)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,Z=Number.NEGATIVE_INFINITY,Q,W=Date.now();for(let J=0;J<this.runQueue.length;J++){let X=this.runs.get(this.runQueue[J]);if(!X||X.status!=="queued")continue;if(X.nextAttemptAt&&X.nextAttemptAt.getTime()>W){if(!Q||X.nextAttemptAt<Q)Q=X.nextAttemptAt;continue}if(X.priority>Z)Z=X.priority,$=J}return{index:$,nextDelayedAttemptAt:Q}}scheduleQueuedRunDispatch($){if(!$)return;let Z=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},Z)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let Z of this.runs.values())if(Z.status==="running")$++;return $}async executeQueuedRun($){let Z=$.currentActivity===AB;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:y.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let W=Z?LN($):$.message,J=await this.routeToTeammate($.agentId,W,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=J,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:y.RunCompleted,run:{...$}})}catch(W){let J=W instanceof Error?W.message:String(W??"Unknown error");$.error=J,$.endedAt=new Date;let X=this.members.get($.agentId);if(FB(X,W))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:y.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:y.RunFailed,run:{...$}})}finally{clearInterval(Q),this.dispatchQueuedRuns()}}listRuns($){let Z=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Q)=>{if(!Z&&!["running","queued"].includes(Q.status))return!1;if($?.status&&Q.status!==$.status)return!1;if($?.agentId&&Q.agentId!==$.agentId)return!1;return!0}).map((Q)=>({...Q}))}getRun($){let Z=this.runs.get($);return Z?{...Z}:void 0}async awaitRun($,Z=250){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);while(Q.status==="queued"||Q.status==="running")await fB(Z);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((Z)=>["queued","running"].includes(Z.status)))await fB($);return this.listRuns()}cancelRun($,Z){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);if(Q.status==="completed"||Q.status==="failed")return{...Q};Q.status="cancelled",Q.error=Z,Q.endedAt=new Date,Q.currentActivity="cancelled";let W=this.runQueue.indexOf($);if(W>=0)this.runQueue.splice(W,1);return this.emitEvent({type:y.RunCancelled,run:{...Q},reason:Z}),{...Q}}recoverActiveRuns($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;let W=this.members.get(Q.agentId);if(!W||W.role!=="teammate"||!W.agent){Q.status="interrupted",Q.error="teammate_unavailable_after_recovery",Q.endedAt=new Date,Q.currentActivity="interrupted",this.emitEvent({type:y.RunInterrupted,run:{...Q},reason:Q.error});continue}let J=new Date;if(Q.status="queued",Q.error=void 0,Q.endedAt=void 0,Q.heartbeatAt=J,Q.lastProgressAt=J,Q.lastProgressMessage=$,Q.currentActivity=AB,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);Z.push({...Q}),this.emitEvent({type:y.RunQueued,run:{...Q}})}return this.dispatchQueuedRuns(),Z}markStaleRunsInterrupted($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;Q.status="interrupted",Q.error=$,Q.endedAt=new Date,Q.currentActivity="interrupted",Z.push({...Q}),this.emitEvent({type:y.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),Z}sendMessage($,Z,Q,W,J){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let X=this.members.get(Z);if(!X)throw Error(`Unknown recipient "${Z}"`);let Y={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:Z,subject:Q,body:W,taskId:J,sentAt:new Date};if(this.mailbox.push(Y),this.emitEvent({type:y.TeamMessage,message:{...Y}}),X.role==="teammate"&&X.runningCount>0&&X.agent)X.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Q}". Use the team_read_mailbox tool to read it at your convenience.`;return{...Y}}broadcast($,Z,Q,W){let J=[];for(let X of this.members.values()){if(X.agentId===$)continue;if(X.role==="lead")continue;J.push(this.sendMessage($,X.agentId,Z,Q,W?.taskId))}return J}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let Z={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(Z);let Q=this.members.get($.agentId);if(Q)Q.lastMissionAt=Date.now(),Q.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:y.TeamMissionLog,entry:{...Z}}),{...Z}}createOutcome($){let Z={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(Z.id,Z),this.emitEvent({type:y.OutcomeCreated,outcome:{...Z}}),{...Z}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let Z=this.outcomes.get($.outcomeId);if(!Z)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!Z.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Q={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(Q.id,Q),Z.status==="draft")Z.status="in_review";return this.emitEvent({type:y.OutcomeFragmentAttached,fragment:{...Q}}),{...Q}}reviewOutcomeFragment($){let Z=this.outcomeFragments.get($.fragmentId);if(!Z)throw Error(`Fragment "${$.fragmentId}" was not found`);return Z.status=$.approved?"reviewed":"rejected",Z.reviewedBy=$.reviewedBy,Z.reviewedAt=new Date,this.emitEvent({type:y.OutcomeFragmentReviewed,fragment:{...Z}}),{...Z}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((Z)=>Z.outcomeId===$).map((Z)=>({...Z}))}finalizeOutcome($){let Z=this.outcomes.get($);if(!Z)throw Error(`Outcome "${$}" was not found`);let Q=this.listOutcomeFragments($);for(let W of Z.requiredSections)if(!Q.some((X)=>X.section===W&&X.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${W}" is missing a reviewed fragment.`);return Z.status="finalized",Z.finalizedAt=new Date,this.emitEvent({type:y.OutcomeFinalized,outcome:{...Z}}),{...Z}}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(Z){if(!jW(Z))throw Z}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[$,Z]of this.members.entries())if(Z.role==="teammate")this.members.delete($)}requireTask($){let Z=this.tasks.get($);if(!Z)throw Error(`Task "${$}" was not found`);return Z}assertDependenciesResolved($){let Z=this.getUnresolvedDependencies($);if(Z.length>0)throw Error(`Task "${$.id}" is blocked by "${Z[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((Z)=>{let Q=this.tasks.get(Z);return!Q||Q.status!=="completed"})}trackMeaningfulEvent($,Z){if(this.recordRunActivityFromAgentEvent($,Z),Z.type==="iteration_end"&&Z.hadToolCalls){this.recordProgressStep($,`Completed iteration ${Z.iteration} with ${Z.toolCallCount} tool call(s)`);return}if(Z.type==="content_end"&&Z.contentType==="tool"&&!Z.error){this.recordProgressStep($,`Finished tool "${Z.toolName??"unknown"}"`);return}if(Z.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${Z.iterations} iterations)`});return}if(Z.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:Z.error.message})}recordRunActivityFromAgentEvent($,Z){let Q;switch(Z.type){case"iteration_start":Q=`iteration_${Z.iteration}_started`;break;case"content_start":if(Z.contentType==="tool")Q=`running_tool_${Z.toolName??"unknown"}`;break;case"content_end":if(Z.contentType==="tool")Q=Z.error?this.formatProgressErrorActivity(`tool_${Z.toolName??"unknown"}_error`,Z.error):`finished_tool_${Z.toolName??"unknown"}`;break;case"done":Q="finalizing_response";break;case"error":Q=this.formatProgressErrorActivity("run_error",Z.error.message);break;default:break}if(!Q)return;for(let W of this.runs.values()){if(W.agentId!==$||W.status!=="running")continue;this.recordRunProgress(W,Q)}}recordRunProgress($,Z){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=Z,$.currentActivity=Z,this.emitEvent({type:y.RunProgress,run:{...$},message:Z})}formatProgressErrorActivity($,Z){let Q=Z.replace(/\s+/g," ").trim();if(Q.length===0)return $;let W=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${W}`}recordProgressStep($,Z,Q,W=!1){this.missionStepCounter++;let J=this.members.get($);if(!J)return;let X=this.missionStepCounter-J.lastMissionStep,Y=Date.now()-J.lastMissionAt;if(!W&&X<this.missionLogIntervalSteps&&Y<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Q,kind:"progress",summary:Z})}buildMailboxNotification($){if($.length===0)return"";let Z=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Q of $)Z.push(`--- Message from ${Q.fromAgentId} | subject: ${Q.subject} ---`),Z.push(Q.body);return Z.push("---"),Z.join(`
480
+ ${Z}`:Z,Y=Q?.continueConversation?await W.agent.continue(X):await W.agent.run(X);return this.emitEvent({type:y.TaskEnd,agentId:$,result:Y}),this.recordProgressStep($,`Completed a delegated run (${Y.iterations} iterations)`,Q?.taskId,!0),Y}catch(J){let X=J instanceof Error?J:Error(String(J));if(this.emitEvent({type:y.TaskEnd,agentId:$,error:X,messages:W.agent.getMessages()}),!FB(W,X))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:X.message});throw X}finally{if(W.runningCount--,W.runningCount<=0&&this.members.get($)?.status!=="stopped")W.status="idle"}}startTeammateRun($,Z,Q){let W=`run_${String(++this.runCounter).padStart(5,"0")}`,J={id:W,agentId:$,taskId:Q?.taskId,status:"queued",message:Z,priority:Q?.priority??0,retryCount:0,maxRetries:Math.max(0,Q?.maxRetries??0),continueConversation:Q?.continueConversation,startedAt:new Date(0),leaseOwner:Q?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(W,J),this.runQueue.push(W),this.emitEvent({type:y.RunQueued,run:{...J}}),this.dispatchQueuedRuns(),{...J}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let Z=this.selectNextDispatchableQueuedRun();$=Z.nextDelayedAttemptAt;let Q=Z.index;if(Q<0){this.scheduleQueuedRunDispatch($);return}let[W]=this.runQueue.splice(Q,1),J=W?this.runs.get(W):void 0;if(!J||J.status!=="queued")continue;this.executeQueuedRun(J)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,Z=Number.NEGATIVE_INFINITY,Q,W=Date.now();for(let J=0;J<this.runQueue.length;J++){let X=this.runs.get(this.runQueue[J]);if(!X||X.status!=="queued")continue;if(X.nextAttemptAt&&X.nextAttemptAt.getTime()>W){if(!Q||X.nextAttemptAt<Q)Q=X.nextAttemptAt;continue}if(X.priority>Z)Z=X.priority,$=J}return{index:$,nextDelayedAttemptAt:Q}}scheduleQueuedRunDispatch($){if(!$)return;let Z=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},Z)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let Z of this.runs.values())if(Z.status==="running")$++;return $}async executeQueuedRun($){let Z=$.currentActivity===AB;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:y.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let W=Z?_N($):$.message,J=await this.routeToTeammate($.agentId,W,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=J,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:y.RunCompleted,run:{...$}})}catch(W){let J=W instanceof Error?W.message:String(W??"Unknown error");$.error=J,$.endedAt=new Date;let X=this.members.get($.agentId);if(FB(X,W))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:y.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:y.RunFailed,run:{...$}})}finally{clearInterval(Q),this.dispatchQueuedRuns()}}listRuns($){let Z=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Q)=>{if(!Z&&!["running","queued"].includes(Q.status))return!1;if($?.status&&Q.status!==$.status)return!1;if($?.agentId&&Q.agentId!==$.agentId)return!1;return!0}).map((Q)=>({...Q}))}getRun($){let Z=this.runs.get($);return Z?{...Z}:void 0}async awaitRun($,Z=250){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);while(Q.status==="queued"||Q.status==="running")await fB(Z);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((Z)=>["queued","running"].includes(Z.status)))await fB($);return this.listRuns()}cancelRun($,Z){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);if(Q.status==="completed"||Q.status==="failed")return{...Q};Q.status="cancelled",Q.error=Z,Q.endedAt=new Date,Q.currentActivity="cancelled";let W=this.runQueue.indexOf($);if(W>=0)this.runQueue.splice(W,1);return this.emitEvent({type:y.RunCancelled,run:{...Q},reason:Z}),{...Q}}recoverActiveRuns($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;let W=this.members.get(Q.agentId);if(!W||W.role!=="teammate"||!W.agent){Q.status="interrupted",Q.error="teammate_unavailable_after_recovery",Q.endedAt=new Date,Q.currentActivity="interrupted",this.emitEvent({type:y.RunInterrupted,run:{...Q},reason:Q.error});continue}let J=new Date;if(Q.status="queued",Q.error=void 0,Q.endedAt=void 0,Q.heartbeatAt=J,Q.lastProgressAt=J,Q.lastProgressMessage=$,Q.currentActivity=AB,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);Z.push({...Q}),this.emitEvent({type:y.RunQueued,run:{...Q}})}return this.dispatchQueuedRuns(),Z}markStaleRunsInterrupted($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;Q.status="interrupted",Q.error=$,Q.endedAt=new Date,Q.currentActivity="interrupted",Z.push({...Q}),this.emitEvent({type:y.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),Z}sendMessage($,Z,Q,W,J){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let X=this.members.get(Z);if(!X)throw Error(`Unknown recipient "${Z}"`);let Y={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:Z,subject:Q,body:W,taskId:J,sentAt:new Date};if(this.mailbox.push(Y),this.emitEvent({type:y.TeamMessage,message:{...Y}}),X.role==="teammate"&&X.runningCount>0&&X.agent)X.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Q}". Use the team_read_mailbox tool to read it at your convenience.`;return{...Y}}broadcast($,Z,Q,W){let J=[];for(let X of this.members.values()){if(X.agentId===$)continue;if(X.role==="lead")continue;J.push(this.sendMessage($,X.agentId,Z,Q,W?.taskId))}return J}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let Z={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(Z);let Q=this.members.get($.agentId);if(Q)Q.lastMissionAt=Date.now(),Q.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:y.TeamMissionLog,entry:{...Z}}),{...Z}}createOutcome($){let Z={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(Z.id,Z),this.emitEvent({type:y.OutcomeCreated,outcome:{...Z}}),{...Z}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let Z=this.outcomes.get($.outcomeId);if(!Z)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!Z.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Q={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(Q.id,Q),Z.status==="draft")Z.status="in_review";return this.emitEvent({type:y.OutcomeFragmentAttached,fragment:{...Q}}),{...Q}}reviewOutcomeFragment($){let Z=this.outcomeFragments.get($.fragmentId);if(!Z)throw Error(`Fragment "${$.fragmentId}" was not found`);return Z.status=$.approved?"reviewed":"rejected",Z.reviewedBy=$.reviewedBy,Z.reviewedAt=new Date,this.emitEvent({type:y.OutcomeFragmentReviewed,fragment:{...Z}}),{...Z}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((Z)=>Z.outcomeId===$).map((Z)=>({...Z}))}finalizeOutcome($){let Z=this.outcomes.get($);if(!Z)throw Error(`Outcome "${$}" was not found`);let Q=this.listOutcomeFragments($);for(let W of Z.requiredSections)if(!Q.some((X)=>X.section===W&&X.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${W}" is missing a reviewed fragment.`);return Z.status="finalized",Z.finalizedAt=new Date,this.emitEvent({type:y.OutcomeFinalized,outcome:{...Z}}),{...Z}}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(Z){if(!jW(Z))throw Z}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[$,Z]of this.members.entries())if(Z.role==="teammate")this.members.delete($)}requireTask($){let Z=this.tasks.get($);if(!Z)throw Error(`Task "${$}" was not found`);return Z}assertDependenciesResolved($){let Z=this.getUnresolvedDependencies($);if(Z.length>0)throw Error(`Task "${$.id}" is blocked by "${Z[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((Z)=>{let Q=this.tasks.get(Z);return!Q||Q.status!=="completed"})}trackMeaningfulEvent($,Z){if(this.recordRunActivityFromAgentEvent($,Z),Z.type==="iteration_end"&&Z.hadToolCalls){this.recordProgressStep($,`Completed iteration ${Z.iteration} with ${Z.toolCallCount} tool call(s)`);return}if(Z.type==="content_end"&&Z.contentType==="tool"&&!Z.error){this.recordProgressStep($,`Finished tool "${Z.toolName??"unknown"}"`);return}if(Z.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${Z.iterations} iterations)`});return}if(Z.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:Z.error.message})}recordRunActivityFromAgentEvent($,Z){let Q;switch(Z.type){case"iteration_start":Q=`iteration_${Z.iteration}_started`;break;case"content_start":if(Z.contentType==="tool")Q=`running_tool_${Z.toolName??"unknown"}`;break;case"content_end":if(Z.contentType==="tool")Q=Z.error?this.formatProgressErrorActivity(`tool_${Z.toolName??"unknown"}_error`,Z.error):`finished_tool_${Z.toolName??"unknown"}`;break;case"done":Q="finalizing_response";break;case"error":Q=this.formatProgressErrorActivity("run_error",Z.error.message);break;default:break}if(!Q)return;for(let W of this.runs.values()){if(W.agentId!==$||W.status!=="running")continue;this.recordRunProgress(W,Q)}}recordRunProgress($,Z){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=Z,$.currentActivity=Z,this.emitEvent({type:y.RunProgress,run:{...$},message:Z})}formatProgressErrorActivity($,Z){let Q=Z.replace(/\s+/g," ").trim();if(Q.length===0)return $;let W=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${W}`}recordProgressStep($,Z,Q,W=!1){this.missionStepCounter++;let J=this.members.get($);if(!J)return;let X=this.missionStepCounter-J.lastMissionStep,Y=Date.now()-J.lastMissionAt;if(!W&&X<this.missionLogIntervalSteps&&Y<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Q,kind:"progress",summary:Z})}buildMailboxNotification($){if($.length===0)return"";let Z=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Q of $)Z.push(`--- Message from ${Q.fromAgentId} | subject: ${Q.subject} ---`),Z.push(Q.body);return Z.push("---"),Z.join(`
481
481
  `)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function fB($){return new Promise((Z)=>setTimeout(Z,$))}function m2($,Z){let Q=0;for(let W of $){if(!W.startsWith(Z))continue;let J=Number.parseInt(W.slice(Z.length),10);if(Number.isFinite(J))Q=Math.max(Q,J)}return Q}function HW($,Z){switch(Z.type){case"run_queued":case"run_started":$.activeTeamRunIds.add(Z.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let Q;if(Z.type==="run_failed")Q=Z.run.error;else if(Z.type==="run_cancelled"||Z.type==="run_interrupted")Q=Z.run.error??Z.reason;$.activeTeamRunIds.delete(Z.run.id),$.pendingTeamRunUpdates.push({runId:Z.run.id,agentId:Z.run.agentId,taskId:Z.run.taskId,status:Z.type.replace("run_",""),error:Q,iterations:Z.run.result?.iterations}),m5($);break}default:break}}async function BW($,Z,Q){switch(Z.type){case"run_progress":await Q("onTeamTaskProgress",$,Z.run.agentId,Z.message,{kind:Z.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(Z.event.type==="content_start"&&Z.event.contentType==="text"&&typeof Z.event.text==="string"){let W=Z.event.text.replace(/\s+/g," ").trim().slice(0,120);if(W)await Q("onTeamTaskProgress",$,Z.agentId,W,{kind:"text"})}break;case"task_start":await Q("onTeamTaskStart",$,Z.agentId,Z.message);break;case"task_end":{if(Z.error)await Q("onTeamTaskEnd",$,Z.agentId,"failed",`[error] ${Z.error.message}`,void 0,Z.messages);else if(Z.result?.finishReason==="aborted")await Q("onTeamTaskEnd",$,Z.agentId,"cancelled","[done] aborted",Z.result,Z.result.messages);else await Q("onTeamTaskEnd",$,Z.agentId,"completed",`[done] ${Z.result?.finishReason??"completed"}`,Z.result,Z.result?.messages);break}default:break}}function GW($,Z,Q,W){if(!$.runtime.teamRuntime)return;let J=$.runtime.teamRuntime.getTeamName();W({type:"team_progress",payload:{sessionId:Z,teamName:J,lifecycle:g5({teamName:J,sessionId:Z,event:Q}),summary:x5(J,$.runtime.teamRuntime.exportState())}})}function G4($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function KW($,Z){if($.aborting)return!1;if(!(Z==="completed"||Z==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&G4($)}function m5($){let Z=$.teamRunWaiters.splice(0);for(let Q of Z)Q()}async function FW($){while(!0){if($.aborting)return[];if($.pendingTeamRunUpdates.length>0){let Z=[...$.pendingTeamRunUpdates];return $.pendingTeamRunUpdates.length=0,Z}if($.activeTeamRunIds.size===0)return[];await new Promise((Z)=>{$.teamRunWaiters.push(Z)})}}function AW($,Z){let Q=Z.map((X)=>{let Y=[`- ${X.runId} (${X.agentId}) -> ${X.status}`];if(X.taskId)Y.push(` task=${X.taskId}`);if(typeof X.iterations==="number")Y.push(` iterations=${X.iterations}`);if(X.error)Y.push(` error=${X.error}`);return Y.join("")}),W=$.activeTeamRunIds.size,J=W>0?`There are still ${W} 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 K4(`System-delivered teammate async run updates:
482
482
  ${Q.join(`
483
483
  `)}
484
484
 
485
- ${J}`,$.config.mode)}function K4($,Z){return _N($,Z==="plan"?"plan":Z==="yolo"?"yolo":"act")}var fW=4;class O1{adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor($,Z={}){this.adapter=$;this.manifestStore=new ZW($,Z.messagesArtifactUploader,Z.logger),this.teamChildren=new y5($,this.manifestStore,(Q,W,J)=>this.toPersistedMessages(Q,W,J),O1.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,Z,Q){if(!$)return;return Z?T5(Z.messages,Z,Q):z5($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,Z){this.manifestStore.writeSessionManifest($,Z)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let Z=$.startedAt??$0(),Q=$.sessionId.trim(),W=Q.length>0?Q:`${Date.now()}_${TN(5)}`,J=this.manifestStore.artifacts.sessionMessagesPath(W),X=this.manifestStore.artifacts.sessionManifestPath(W),Y=e8({metadata:$.metadata,prompt:$.prompt}),j={version:1,session_id:W,source:$.source,pid:$.pid,started_at:Z,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:W,source:$.source,pid:$.pid,startedAt:Z,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:j.prompt??null,metadata:i1(j.metadata),hookPath:"",messagesPath:J,updatedAt:$0()}),this.manifestStore.initializeMessagesFile(W,J,Z),this.manifestStore.writeSessionManifest(X,j),{manifestPath:X,messagesPath:J,manifest:j}}async updateSessionStatus($,Z,Q){let W;if((await YH(()=>this.adapter.getSession($),async(X)=>{return W=j0(Z)?void 0:$0(),this.adapter.updateSession({sessionId:$,status:Z,endedAt:W??null,exitCode:j0(Z)?null:typeof Q==="number"?Q:null,expectedStatusLock:X.statusLock})},fW)).updated){if(Z==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:W}}return{updated:!1}}async updateSession($){for(let Z=0;Z<fW;Z++){let Q=await this.adapter.getSession($.sessionId);if(!Q)return{updated:!1};let W=Q.metadata??void 0,J=$.metadata!==void 0?i1($.metadata)??{}:i1(W)??{},X=I$(typeof W?.title==="string"?W.title:void 0),Y=$.title!==void 0?I$($.title):X??y7($.prompt);if(Y)J.title=Y;else delete J.title;let j=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:j?Object.keys(J).length>0?J:null:void 0,title:Y,expectedStatusLock:Q.statusLock})).updated)continue;let{path:H,manifest:B}=this.manifestStore.readManifestFile($.sessionId);if(B){if($.prompt!==void 0)B.prompt=$.prompt??void 0;let G=$.metadata!==void 0?i1($.metadata)??{}:i1(B.metadata)??{};if(Y)G.title=Y;B.metadata=Object.keys(G).length>0?G:void 0,this.manifestStore.writeSessionManifest(H,B)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,Z){return this.teamChildren.appendSubagentHookAudit(Z),Promise.resolve()}persistSessionMessages($,Z,Q){let W=z5(Z);return this.manifestStore.persistSessionMessages($,W,Q)}applySubagentStatus($,Z){return this.teamChildren.applySubagentStatus($,Z)}applySubagentStatusBySessionId($,Z){return this.teamChildren.applySubagentStatusBySessionId($,Z)}applyStatusToRunningChildSessions($,Z){return this.teamChildren.applyStatusToRunningChildSessions($,Z)}onTeamTaskStart($,Z,Q){return this.teamChildren.onTeamTaskStart($,Z,Q)}onTeamTaskEnd($,Z,Q,W,J,X){return this.teamChildren.onTeamTaskEnd($,Z,Q,W,J,X)}onTeamTaskProgress($,Z,Q,W){return this.teamChildren.onTeamTaskProgress($,Z,Q,W)}handleSubAgentStart($,Z){return this.teamChildren.handleSubAgentStart($,Z)}handleSubAgentEnd($,Z){return this.teamChildren.handleSubAgentEnd($,Z)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(Z){return typeof Z==="object"&&Z!==null&&"code"in Z&&Z.code==="EPERM"}}async reconcileDeadRunningSession($){if(j0($.status)===!1||this.isPidAlive($.pid))return $;let Z=$0(),Q=O1.STALE_REASON;for(let W=0;W<fW;W++){let J=await this.adapter.getSession($.sessionId);if(!J)return;if(j0(J.status)===!1)return J;let X={...J.metadata??{},terminal_marker:Q,terminal_marker_at:Z,terminal_marker_pid:J.pid,terminal_marker_source:O1.STALE_SOURCE},Y=await this.adapter.updateSession({sessionId:J.sessionId,status:"failed",endedAt:Z,exitCode:1,metadata:X,expectedStatusLock:J.statusLock});if(!Y.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(J.sessionId,"failed");let j=XH(J,{status:"failed",endedAt:Z,exitCode:1,metadata:X}),{path:V}=this.manifestStore.readManifestFile(J.sessionId);return this.manifestStore.writeSessionManifest(V,j),this.manifestStore.appendStaleSessionHookLog(Z,J.sessionId,J.pid,Q,O1.STALE_SOURCE),{...J,status:"failed",endedAt:Z,exitCode:1,metadata:X,statusLock:Y.statusLock,updatedAt:Z}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let Z=Math.max(1,Math.floor($)),Q=Math.min(Z*5,2000);return await this.reconcileDeadSessions(Q),(await this.adapter.listSessions({limit:Q})).slice(0,Z).map((J)=>{let X=i1(J.metadata??void 0),Y=this.manifestStore.readSessionManifest(J.sessionId),j=I$(typeof Y?.metadata?.title==="string"?Y.metadata.title:void 0),V=j?{...X??{},title:j}:X;return{...J,metadata:V}})}async reconcileDeadSessions($=2000){let Z=Math.max(1,Math.floor($)),Q=(await Promise.all(["idle","running","pending"].map((J)=>this.adapter.listSessions({limit:Z,status:J})))).flat(),W=0;for(let J of Q){let X=await this.reconcileDeadRunningSession(J);if(X&&X.status!==J.status)W++}return W}async deleteSession($){let Z=$.trim();if(!Z)throw Error("session id is required");let Q=await this.adapter.getSession(Z);if(!Q)return{deleted:!1};if(await this.adapter.deleteSession(Z,!1),!Q.isSubagent){let W=await this.adapter.listSessions({limit:2000,parentSessionId:Z});await this.adapter.deleteSession(Z,!0),await Promise.allSettled(W.map(async(J)=>{await e7(J.cwd,J.sessionId),H4(J.messagesPath),H4(this.manifestStore.artifacts.sessionManifestPath(J.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(J.sessionId)}))}if(await e7(Q.cwd,Z),H4(Q.messagesPath),H4(this.manifestStore.artifacts.sessionManifestPath(Z,!1)),Q.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(Z);else{let W=new Set([this.manifestStore.artifacts.sessionArtifactsDir(Z)]);for(let J of[Q.messagesPath])if(typeof J==="string"&&J.trim().length>0)W.add(zN(J));for(let J of W)this.manifestStore.artifacts.removeDir(J)}return{deleted:!0}}}function DW(){return new Date().toISOString()}function LB($,Z){let Q=`${$}.tmp`;MN(Q,`${JSON.stringify(Z,null,2)}
486
- `,"utf8"),qN(Q,$)}class _B{sessionsDirPath;constructor($=RN()){this.sessionsDirPath=$}ensureSessionsDir(){if(!UW(this.sessionsDirPath))ON(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return DB(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return DB(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!UW($))return{version:1,sessions:{}};try{let Z=JSON.parse(UB($,"utf8"));if(Z?.version===1&&Z.sessions)return Z}catch{}return{version:1,sessions:{}}}writeIndex($){LB(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!UW($))return{version:1,nextId:1,requests:[]};try{let Z=JSON.parse(UB($,"utf8"));if(Z?.version===1&&typeof Z.nextId==="number"&&Array.isArray(Z.requests))return Z}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){LB(this.spawnQueuePath(),$)}async upsertSession($){let Z=this.readIndex();Z.sessions[$.sessionId]=$,this.writeIndex(Z)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((Z)=>$.parentSessionId!==void 0?Z.parentSessionId===$.parentSessionId:!0).filter((Z)=>$.status!==void 0?Z.status===$.status:!0).sort((Z,Q)=>Q.startedAt.localeCompare(Z.startedAt)).slice(0,$.limit)}async updateSession($){let Z=this.readIndex(),Q=Z.sessions[$.sessionId];if(!Q)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&Q.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:Q.statusLock};let W=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:Q.statusLock,J={...Q,status:$.status??Q.status,endedAt:$.endedAt!==void 0?$.endedAt:Q.endedAt??null,exitCode:$.exitCode!==void 0?$.exitCode:Q.exitCode??null,prompt:$.prompt!==void 0?$.prompt:Q.prompt??null,metadata:$.metadata!==void 0?$.metadata??null:Q.metadata??null,parentSessionId:$.parentSessionId!==void 0?$.parentSessionId??null:Q.parentSessionId??null,parentAgentId:$.parentAgentId!==void 0?$.parentAgentId??null:Q.parentAgentId??null,agentId:$.agentId!==void 0?$.agentId??null:Q.agentId??null,conversationId:$.conversationId!==void 0?$.conversationId??null:Q.conversationId??null,statusLock:W,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:Q.isSubagent,updatedAt:DW()};if($.setRunning)J.status="running",J.endedAt=null,J.exitCode=null;return Z.sessions[$.sessionId]=J,this.writeIndex(Z),{updated:!0,statusLock:J.statusLock}}async deleteSession($,Z){let Q=this.readIndex();if(!Q.sessions[$])return!1;if(delete Q.sessions[$],Z){for(let J of Object.values(Q.sessions))if(J.parentSessionId===$)delete Q.sessions[J.sessionId]}return this.writeIndex(Q),!0}async enqueueSpawnRequest($){let Z=this.readQueue();Z.requests.push({id:Z.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:DW()}),Z.nextId+=1,this.writeQueue(Z)}async claimSpawnRequest($,Z){let Q=this.readQueue(),W=Q.requests.find((J)=>J.rootSessionId===$&&J.parentAgentId===Z&&!J.consumedAt);if(!W)return;return W.consumedAt=DW(),this.writeQueue(Q),W.task}}class LW extends O1{constructor($,Z={}){super(new _B($),Z)}ensureSessionsDir(){return super.ensureSessionsDir()}}import{existsSync as EN,mkdirSync as NN}from"node:fs";import{resolveSessionDataDir as wN}from"@cline/shared/storage";var _W=`
485
+ ${J}`,$.config.mode)}function K4($,Z){return zN($,Z==="plan"?"plan":Z==="yolo"?"yolo":"act")}var fW=4;class O1{adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor($,Z={}){this.adapter=$;this.manifestStore=new ZW($,Z.messagesArtifactUploader,Z.logger),this.teamChildren=new y5($,this.manifestStore,(Q,W,J)=>this.toPersistedMessages(Q,W,J),O1.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,Z,Q){if(!$)return;return Z?T5(Z.messages,Z,Q):z5($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,Z){this.manifestStore.writeSessionManifest($,Z)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let Z=$.startedAt??$0(),Q=$.sessionId.trim(),W=Q.length>0?Q:`${Date.now()}_${ON(5)}`,J=this.manifestStore.artifacts.sessionMessagesPath(W),X=this.manifestStore.artifacts.sessionManifestPath(W),Y=e8({metadata:$.metadata,prompt:$.prompt}),j={version:1,session_id:W,source:$.source,pid:$.pid,started_at:Z,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:W,source:$.source,pid:$.pid,startedAt:Z,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:j.prompt??null,metadata:i1(j.metadata),hookPath:"",messagesPath:J,updatedAt:$0()}),this.manifestStore.initializeMessagesFile(W,J,Z),this.manifestStore.writeSessionManifest(X,j),{manifestPath:X,messagesPath:J,manifest:j}}async updateSessionStatus($,Z,Q){let W;if((await YH(()=>this.adapter.getSession($),async(X)=>{return W=j0(Z)?void 0:$0(),this.adapter.updateSession({sessionId:$,status:Z,endedAt:W??null,exitCode:j0(Z)?null:typeof Q==="number"?Q:null,expectedStatusLock:X.statusLock})},fW)).updated){if(Z==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:W}}return{updated:!1}}async updateSession($){for(let Z=0;Z<fW;Z++){let Q=await this.adapter.getSession($.sessionId);if(!Q)return{updated:!1};let W=Q.metadata??void 0,J=$.metadata!==void 0?i1($.metadata)??{}:i1(W)??{},X=I$(typeof W?.title==="string"?W.title:void 0),Y=$.title!==void 0?I$($.title):X??y7($.prompt);if(Y)J.title=Y;else delete J.title;let j=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:j?Object.keys(J).length>0?J:null:void 0,title:Y,expectedStatusLock:Q.statusLock})).updated)continue;let{path:H,manifest:B}=this.manifestStore.readManifestFile($.sessionId);if(B){if($.prompt!==void 0)B.prompt=$.prompt??void 0;let G=$.metadata!==void 0?i1($.metadata)??{}:i1(B.metadata)??{};if(Y)G.title=Y;B.metadata=Object.keys(G).length>0?G:void 0,this.manifestStore.writeSessionManifest(H,B)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,Z){return this.teamChildren.appendSubagentHookAudit(Z),Promise.resolve()}persistSessionMessages($,Z,Q){let W=z5(Z);return this.manifestStore.persistSessionMessages($,W,Q)}applySubagentStatus($,Z){return this.teamChildren.applySubagentStatus($,Z)}applySubagentStatusBySessionId($,Z){return this.teamChildren.applySubagentStatusBySessionId($,Z)}applyStatusToRunningChildSessions($,Z){return this.teamChildren.applyStatusToRunningChildSessions($,Z)}onTeamTaskStart($,Z,Q){return this.teamChildren.onTeamTaskStart($,Z,Q)}onTeamTaskEnd($,Z,Q,W,J,X){return this.teamChildren.onTeamTaskEnd($,Z,Q,W,J,X)}onTeamTaskProgress($,Z,Q,W){return this.teamChildren.onTeamTaskProgress($,Z,Q,W)}handleSubAgentStart($,Z){return this.teamChildren.handleSubAgentStart($,Z)}handleSubAgentEnd($,Z){return this.teamChildren.handleSubAgentEnd($,Z)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(Z){return typeof Z==="object"&&Z!==null&&"code"in Z&&Z.code==="EPERM"}}async reconcileDeadRunningSession($){if(j0($.status)===!1||this.isPidAlive($.pid))return $;let Z=$0(),Q=O1.STALE_REASON;for(let W=0;W<fW;W++){let J=await this.adapter.getSession($.sessionId);if(!J)return;if(j0(J.status)===!1)return J;let X={...J.metadata??{},terminal_marker:Q,terminal_marker_at:Z,terminal_marker_pid:J.pid,terminal_marker_source:O1.STALE_SOURCE},Y=await this.adapter.updateSession({sessionId:J.sessionId,status:"failed",endedAt:Z,exitCode:1,metadata:X,expectedStatusLock:J.statusLock});if(!Y.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(J.sessionId,"failed");let j=XH(J,{status:"failed",endedAt:Z,exitCode:1,metadata:X}),{path:V}=this.manifestStore.readManifestFile(J.sessionId);return this.manifestStore.writeSessionManifest(V,j),this.manifestStore.appendStaleSessionHookLog(Z,J.sessionId,J.pid,Q,O1.STALE_SOURCE),{...J,status:"failed",endedAt:Z,exitCode:1,metadata:X,statusLock:Y.statusLock,updatedAt:Z}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let Z=Math.max(1,Math.floor($)),Q=Math.min(Z*5,2000);return await this.reconcileDeadSessions(Q),(await this.adapter.listSessions({limit:Q})).slice(0,Z).map((J)=>{let X=i1(J.metadata??void 0),Y=this.manifestStore.readSessionManifest(J.sessionId),j=I$(typeof Y?.metadata?.title==="string"?Y.metadata.title:void 0),V=j?{...X??{},title:j}:X;return{...J,metadata:V}})}async reconcileDeadSessions($=2000){let Z=Math.max(1,Math.floor($)),Q=(await Promise.all(["idle","running","pending"].map((J)=>this.adapter.listSessions({limit:Z,status:J})))).flat(),W=0;for(let J of Q){let X=await this.reconcileDeadRunningSession(J);if(X&&X.status!==J.status)W++}return W}async deleteSession($){let Z=$.trim();if(!Z)throw Error("session id is required");let Q=await this.adapter.getSession(Z);if(!Q)return{deleted:!1};if(await this.adapter.deleteSession(Z,!1),!Q.isSubagent){let W=await this.adapter.listSessions({limit:2000,parentSessionId:Z});await this.adapter.deleteSession(Z,!0),await Promise.allSettled(W.map(async(J)=>{await e7(J.cwd,J.sessionId),H4(J.messagesPath),H4(this.manifestStore.artifacts.sessionManifestPath(J.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(J.sessionId)}))}if(await e7(Q.cwd,Z),H4(Q.messagesPath),H4(this.manifestStore.artifacts.sessionManifestPath(Z,!1)),Q.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(Z);else{let W=new Set([this.manifestStore.artifacts.sessionArtifactsDir(Z)]);for(let J of[Q.messagesPath])if(typeof J==="string"&&J.trim().length>0)W.add(TN(J));for(let J of W)this.manifestStore.artifacts.removeDir(J)}return{deleted:!0}}}function DW(){return new Date().toISOString()}function LB($,Z){let Q=`${$}.tmp`;RN(Q,`${JSON.stringify(Z,null,2)}
486
+ `,"utf8"),MN(Q,$)}class _B{sessionsDirPath;constructor($=EN()){this.sessionsDirPath=$}ensureSessionsDir(){if(!UW(this.sessionsDirPath))qN(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return DB(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return DB(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!UW($))return{version:1,sessions:{}};try{let Z=JSON.parse(UB($,"utf8"));if(Z?.version===1&&Z.sessions)return Z}catch{}return{version:1,sessions:{}}}writeIndex($){LB(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!UW($))return{version:1,nextId:1,requests:[]};try{let Z=JSON.parse(UB($,"utf8"));if(Z?.version===1&&typeof Z.nextId==="number"&&Array.isArray(Z.requests))return Z}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){LB(this.spawnQueuePath(),$)}async upsertSession($){let Z=this.readIndex();Z.sessions[$.sessionId]=$,this.writeIndex(Z)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((Z)=>$.parentSessionId!==void 0?Z.parentSessionId===$.parentSessionId:!0).filter((Z)=>$.status!==void 0?Z.status===$.status:!0).sort((Z,Q)=>Q.startedAt.localeCompare(Z.startedAt)).slice(0,$.limit)}async updateSession($){let Z=this.readIndex(),Q=Z.sessions[$.sessionId];if(!Q)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&Q.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:Q.statusLock};let W=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:Q.statusLock,J={...Q,status:$.status??Q.status,endedAt:$.endedAt!==void 0?$.endedAt:Q.endedAt??null,exitCode:$.exitCode!==void 0?$.exitCode:Q.exitCode??null,prompt:$.prompt!==void 0?$.prompt:Q.prompt??null,metadata:$.metadata!==void 0?$.metadata??null:Q.metadata??null,parentSessionId:$.parentSessionId!==void 0?$.parentSessionId??null:Q.parentSessionId??null,parentAgentId:$.parentAgentId!==void 0?$.parentAgentId??null:Q.parentAgentId??null,agentId:$.agentId!==void 0?$.agentId??null:Q.agentId??null,conversationId:$.conversationId!==void 0?$.conversationId??null:Q.conversationId??null,statusLock:W,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:Q.isSubagent,updatedAt:DW()};if($.setRunning)J.status="running",J.endedAt=null,J.exitCode=null;return Z.sessions[$.sessionId]=J,this.writeIndex(Z),{updated:!0,statusLock:J.statusLock}}async deleteSession($,Z){let Q=this.readIndex();if(!Q.sessions[$])return!1;if(delete Q.sessions[$],Z){for(let J of Object.values(Q.sessions))if(J.parentSessionId===$)delete Q.sessions[J.sessionId]}return this.writeIndex(Q),!0}async enqueueSpawnRequest($){let Z=this.readQueue();Z.requests.push({id:Z.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:DW()}),Z.nextId+=1,this.writeQueue(Z)}async claimSpawnRequest($,Z){let Q=this.readQueue(),W=Q.requests.find((J)=>J.rootSessionId===$&&J.parentAgentId===Z&&!J.consumedAt);if(!W)return;return W.consumedAt=DW(),this.writeQueue(Q),W.task}}class LW extends O1{constructor($,Z={}){super(new _B($),Z)}ensureSessionsDir(){return super.ensureSessionsDir()}}import{existsSync as NN,mkdirSync as wN}from"node:fs";import{resolveSessionDataDir as CN}from"@cline/shared/storage";var _W=`
487
487
  session_id AS sessionId,
488
488
  source,
489
489
  pid,
@@ -510,7 +510,7 @@ ${J}`,$.config.mode)}function K4($,Z){return _N($,Z==="plan"?"plan":Z==="yolo"?"
510
510
  metadata_json AS metadata,
511
511
  hook_path AS hookPath,
512
512
  messages_path AS messagesPath,
513
- updated_at AS updatedAt`;function zW($){$.interactive=$.interactive===1,$.enableTools=$.enableTools===1,$.enableSpawn=$.enableSpawn===1,$.enableTeams=$.enableTeams===1,$.isSubagent=$.isSubagent===1;let Z=$.metadata;if(typeof Z==="string"&&Z.trim())try{let Q=JSON.parse(Z);$.metadata=Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:null}catch{$.metadata=null}else $.metadata=null;return $}function TW($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function zB($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class TB{store;sessionsDirPath;constructor($,Z=wN()){this.store=$;this.sessionsDirPath=Z}ensureSessionsDir(){if(!EN(this.sessionsDirPath))NN(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
513
+ updated_at AS updatedAt`;function zW($){$.interactive=$.interactive===1,$.enableTools=$.enableTools===1,$.enableSpawn=$.enableSpawn===1,$.enableTeams=$.enableTeams===1,$.isSubagent=$.isSubagent===1;let Z=$.metadata;if(typeof Z==="string"&&Z.trim())try{let Q=JSON.parse(Z);$.metadata=Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:null}catch{$.metadata=null}else $.metadata=null;return $}function TW($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function zB($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class TB{store;sessionsDirPath;constructor($,Z=CN()){this.store=$;this.sessionsDirPath=Z}ensureSessionsDir(){if(!NN(this.sessionsDirPath))wN(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
514
514
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
515
515
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
516
516
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
@@ -531,14 +531,14 @@ ${J}`,$.config.mode)}function K4($,Z){return _N($,Z==="plan"?"plan":Z==="yolo"?"
531
531
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
532
532
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
533
533
  metadata_json, transcript_path, hook_path, messages_path, updated_at
534
- ) 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,$0()])}}import{readdirSync as KP}from"node:fs";import{homedir as FP}from"node:os";import{isAbsolute as AP,join as Q3,resolve as W3}from"node:path";import{captureSdkError as i$,createSessionId as fP,isLikelyAuthError as UP,normalizeUserInput as DP}from"@cline/shared";import{setHomeDirIfUnset as LP}from"@cline/shared/storage";G0();import{createHandlerAsync as yN}from"@cline/llms";import{CHARS_PER_TOKEN as Wr,estimateTokens as OW}from"@cline/shared";var MB=200000,RB=0.9,v5=0.7,EB=16384,qW=20000,OB=1024,qB=2000,NB=2000,wB=8;function f4($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
535
- ...[truncated ${$.length-Z} chars]`}function CN($){let Z=MW($);if(typeof Z==="string")return Z;return Z.map((Q)=>{switch(Q.type){case"text":return Q.text;case"file":return`<file path="${Q.path}">
534
+ ) 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,$0()])}}import{readdirSync as FP}from"node:fs";import{homedir as AP}from"node:os";import{isAbsolute as fP,join as Q3,resolve as W3}from"node:path";import{captureSdkError as i$,createSessionId as UP,isLikelyAuthError as DP,normalizeUserInput as LP}from"@cline/shared";import{setHomeDirIfUnset as _P}from"@cline/shared/storage";G0();import{createHandlerAsync as hN}from"@cline/llms";import{CHARS_PER_TOKEN as Jr,estimateTokens as OW}from"@cline/shared";var MB=200000,RB=0.9,v5=0.7,EB=16384,qW=20000,OB=1024,qB=2000,NB=2000,wB=8;function f4($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
535
+ ...[truncated ${$.length-Z} chars]`}function PN($){let Z=MW($);if(typeof Z==="string")return Z;return Z.map((Q)=>{switch(Q.type){case"text":return Q.text;case"file":return`<file path="${Q.path}">
536
536
  ${Q.content}
537
537
  </file>`;case"image":return`[image:${Q.mediaType}]`;default:return""}}).join(`
538
- `)}function MW($){if(typeof $==="string")return f4($,qB);return $.map((Z)=>{switch(Z.type){case"text":return{...Z,text:f4(Z.text,qB)};case"file":return{...Z,content:f4(Z.content,NB)};case"image":return Z;default:return Z}})}function PN($){return Object.entries($).map(([Z,Q])=>`${Z}=${JSON.stringify(Q)}`).join(", ")}function CB($){if(typeof $.content==="string")return`[${$.role==="user"?"User":"Bot"}]: ${$.content}`;let Z=[];for(let Q of $.content)switch(Q.type){case"text":Z.push(`[${$.role==="user"?"User":"Bot"}]: ${Q.text}`);break;case"thinking":Z.push(`[Bot thinking]: ${f4(Q.thinking,2000)}`);break;case"redacted_thinking":Z.push("[Bot thinking]: [redacted]");break;case"tool_use":Z.push(`[Bot tool calls]: ${Q.name}(${PN(Q.input)})`);break;case"tool_result":Z.push(`[Tool result]: ${CN(Q.content)}`);break;case"file":Z.push(`[${$.role==="user"?"User":"Bot"} file ${Q.path}]: ${f4(Q.content,NB)}`);break;case"image":Z.push(`[${$.role==="user"?"User":"Bot"} image]: ${Q.mediaType}`);break}return Z.join(`
538
+ `)}function MW($){if(typeof $==="string")return f4($,qB);return $.map((Z)=>{switch(Z.type){case"text":return{...Z,text:f4(Z.text,qB)};case"file":return{...Z,content:f4(Z.content,NB)};case"image":return Z;default:return Z}})}function SN($){return Object.entries($).map(([Z,Q])=>`${Z}=${JSON.stringify(Q)}`).join(", ")}function CB($){if(typeof $.content==="string")return`[${$.role==="user"?"User":"Bot"}]: ${$.content}`;let Z=[];for(let Q of $.content)switch(Q.type){case"text":Z.push(`[${$.role==="user"?"User":"Bot"}]: ${Q.text}`);break;case"thinking":Z.push(`[Bot thinking]: ${f4(Q.thinking,2000)}`);break;case"redacted_thinking":Z.push("[Bot thinking]: [redacted]");break;case"tool_use":Z.push(`[Bot tool calls]: ${Q.name}(${SN(Q.input)})`);break;case"tool_result":Z.push(`[Tool result]: ${PN(Q.content)}`);break;case"file":Z.push(`[${$.role==="user"?"User":"Bot"} file ${Q.path}]: ${f4(Q.content,NB)}`);break;case"image":Z.push(`[${$.role==="user"?"User":"Bot"} image]: ${Q.mediaType}`);break}return Z.join(`
539
539
  `)}function PB($){return $.map(CB).join(`
540
540
 
541
- `).trim()}function SB(){let $=new WeakMap;return(Z)=>{let Q=Z,W=$.get(Q);if(typeof W==="number")return W;let J;try{J=JSON.stringify(Z)}catch{J=CB(Z)}let X=OW(J.length);return $.set(Q,X),X}}function U4($){return $.metadata?.kind==="compaction_summary"}function RW($){if(!U4($))return;let Z=$.metadata;if(!Z)return;let Q=Z.details;return{kind:"compaction_summary",summary:String(Z.summary??""),details:{readFiles:Array.isArray(Q?.readFiles)?Q.readFiles.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter((W)=>W.length>0):[],modifiedFiles:Array.isArray(Q?.modifiedFiles)?Q.modifiedFiles.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter((W)=>W.length>0):[]},tokensBefore:Number(Z.tokensBefore??0),generatedAt:Number(Z.generatedAt??0)}}function SN($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}function D4($){return $.role==="user"&&!SN($)&&!U4($)}function bB($){for(let Z=0;Z<$.length;Z+=1)if(D4($[Z]))return Z;return-1}function c5($){for(let Z=$.length-1;Z>=0;Z-=1)if(D4($[Z]))return Z;return 0}function yB($){for(let Z=$.length-1;Z>=0;Z-=1)if($[Z].role==="assistant")return Z;return-1}function hB($){for(let Z=$.length-1;Z>=0;Z-=1)if(U4($[Z]))return Z;return-1}function kB($,Z,Q){let W=c5($);if(W<=0)return 0;let J=0,X=$.length;for(let j=$.length-1;j>=0;j-=1)if(J+=Q($[j]),X=j,J>=Z)break;if(X<=0)return 0;let Y=Math.min(X,W);while(Y>0&&!D4($[Y]))Y-=1;return Y}function A4($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((Z)=>A4(Z));if($&&typeof $==="object"){let Z=$,Q=[];for(let W of["path","file_path","target_file","new_file_path","old_file_path"])Q.push(...A4(Z[W]));if(Array.isArray(Z.files)){for(let W of Z.files)if(W&&typeof W==="object")Q.push(...A4(W.path))}if(Array.isArray(Z.file_paths))Q.push(...A4(Z.file_paths));return Q}return[]}function F4($,Z){let Q=new Set($);for(let W of Z){let J=W.trim();if(!J)continue;Q.add(J)}return[...Q].sort((W,J)=>W.localeCompare(J))}function IB($){let Z=[],Q=[];for(let W of $){let J=RW(W);if(J){Z=F4(Z,J.details.readFiles),Q=F4(Q,J.details.modifiedFiles);continue}if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type==="file"){Z=F4(Z,[X.path]);continue}if(X.type!=="tool_use")continue;let Y=A4(X.input);if(X.name==="read_files"){Z=F4(Z,Y);continue}if(X.name==="editor"||X.name==="apply_patch")Q=F4(Q,Y)}}return{readFiles:Z,modifiedFiles:Q}}function bN($){let Z=$.readFiles.length>0?$.readFiles.map((W)=>`- ${W}`).join(`
541
+ `).trim()}function SB(){let $=new WeakMap;return(Z)=>{let Q=Z,W=$.get(Q);if(typeof W==="number")return W;let J;try{J=JSON.stringify(Z)}catch{J=CB(Z)}let X=OW(J.length);return $.set(Q,X),X}}function U4($){return $.metadata?.kind==="compaction_summary"}function RW($){if(!U4($))return;let Z=$.metadata;if(!Z)return;let Q=Z.details;return{kind:"compaction_summary",summary:String(Z.summary??""),details:{readFiles:Array.isArray(Q?.readFiles)?Q.readFiles.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter((W)=>W.length>0):[],modifiedFiles:Array.isArray(Q?.modifiedFiles)?Q.modifiedFiles.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter((W)=>W.length>0):[]},tokensBefore:Number(Z.tokensBefore??0),generatedAt:Number(Z.generatedAt??0)}}function bN($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}function D4($){return $.role==="user"&&!bN($)&&!U4($)}function bB($){for(let Z=0;Z<$.length;Z+=1)if(D4($[Z]))return Z;return-1}function c5($){for(let Z=$.length-1;Z>=0;Z-=1)if(D4($[Z]))return Z;return 0}function yB($){for(let Z=$.length-1;Z>=0;Z-=1)if($[Z].role==="assistant")return Z;return-1}function hB($){for(let Z=$.length-1;Z>=0;Z-=1)if(U4($[Z]))return Z;return-1}function kB($,Z,Q){let W=c5($);if(W<=0)return 0;let J=0,X=$.length;for(let j=$.length-1;j>=0;j-=1)if(J+=Q($[j]),X=j,J>=Z)break;if(X<=0)return 0;let Y=Math.min(X,W);while(Y>0&&!D4($[Y]))Y-=1;return Y}function A4($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((Z)=>A4(Z));if($&&typeof $==="object"){let Z=$,Q=[];for(let W of["path","file_path","target_file","new_file_path","old_file_path"])Q.push(...A4(Z[W]));if(Array.isArray(Z.files)){for(let W of Z.files)if(W&&typeof W==="object")Q.push(...A4(W.path))}if(Array.isArray(Z.file_paths))Q.push(...A4(Z.file_paths));return Q}return[]}function F4($,Z){let Q=new Set($);for(let W of Z){let J=W.trim();if(!J)continue;Q.add(J)}return[...Q].sort((W,J)=>W.localeCompare(J))}function IB($){let Z=[],Q=[];for(let W of $){let J=RW(W);if(J){Z=F4(Z,J.details.readFiles),Q=F4(Q,J.details.modifiedFiles);continue}if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type==="file"){Z=F4(Z,[X.path]);continue}if(X.type!=="tool_use")continue;let Y=A4(X.input);if(X.name==="read_files"){Z=F4(Z,Y);continue}if(X.name==="editor"||X.name==="apply_patch")Q=F4(Q,Y)}}return{readFiles:Z,modifiedFiles:Q}}function yN($){let Z=$.readFiles.length>0?$.readFiles.map((W)=>`- ${W}`).join(`
542
542
  `):"- none",Q=$.modifiedFiles.length>0?$.modifiedFiles.map((W)=>`- ${W}`).join(`
543
543
  `):"- none";return`## Files
544
544
  Read:
@@ -546,7 +546,7 @@ ${Z}
546
546
  Modified:
547
547
  ${Q}`}function xB($,Z){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
548
548
 
549
- ${bN(Z)}`.trim()}function gB($){let Z=[`Summarize this session for continuation. Be concise and factual.
549
+ ${yN(Z)}`.trim()}function gB($){let Z=[`Summarize this session for continuation. Be concise and factual.
550
550
 
551
551
  ## Goal
552
552
  One sentence: what is being built or fixed.
@@ -570,17 +570,17 @@ ${$.conversationText||"(empty)"}`),Z.join(`
570
570
 
571
571
  `)}function mB($){let Z=$.summarizer,Q=(J)=>{if(J.providerId==="openai-codex"){let{maxOutputTokens:X,...Y}=J;return{...Y,thinking:!1}}return{...J,maxOutputTokens:J.maxOutputTokens??OB,thinking:!1}};if(!Z)return Q($.activeProviderConfig);let W=Z.providerConfig?.providerId===Z.providerId?Z.providerConfig:void 0;return Q({...W??{},providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey??W?.apiKey,baseUrl:Z.baseUrl??W?.baseUrl,headers:Z.headers??W?.headers,knownModels:Z.knownModels??W?.knownModels,maxOutputTokens:Z.maxOutputTokens??OB})}function vB($){return{role:"user",content:`Context summary:
572
572
 
573
- ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}async function hN($){let Z=await yN($.providerConfig),Q="";for await(let W of Z.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(W.type==="text"){Q+=W.text;continue}if(W.type==="done"&&!W.success&&W.error)throw Error(W.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Q.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Q.trim()}function kN($){try{return JSON.stringify($).length}catch{return String($).length}}async function cB($){let Z=$.context.messages;if(Z.length<2)return;let Q=kB(Z,$.preserveRecentTokens,$.estimateMessageTokens);if(Q<=0||Q>=Z.length)return;let W=Z.slice(0,Q),J=hB(W),X=J>=0?RW(W[J])?.summary:void 0,Y=J>=0?W.slice(J+1):W;if(Y.length===0)return;let j=IB(W),V=PB(Y),H=gB({previousSummary:X,conversationText:V,fileOps:j});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:W.length,newMessagesToFold:Y.length,preservedMessages:Z.length-Q,previousSummaryChars:X?.length??0,conversationTextChars:V.length,summaryRequestChars:H.length,summaryRequestEstimatedTokens:OW(H.length),newMessagesJsonChars:kN(Y),maxInputTokens:$.context.maxInputTokens,triggerTokens:$.context.triggerTokens});let B=await hN({providerConfig:mB({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),request:H,logger:$.logger});if(!B.trim())return;let G=xB(B,j),K=Z.reduce((L,f)=>L+$.estimateMessageTokens(f),0),F=[vB({summary:G,fileOps:j,tokensBefore:K}),...Z.slice(Q)],A=F.reduce((L,f)=>L+$.estimateMessageTokens(f),0);return $.logger?.debug("Performed agentic compaction",{messagesBefore:Z.length,messagesAfter:F.length,messagesSummarized:Q,messagesPreserved:Z.length-Q,tokensBefore:K,tokensAfter:A,maxInputTokens:$.context.maxInputTokens}),{messages:F}}import{CHARS_PER_TOKEN as IN}from"@cline/shared";function xN($){if(U4($))return;if(typeof $.content==="string"){let Q=$.content.trim();return Q?{...$,content:Q}:void 0}let Z=$.content.filter((Q)=>Q.type!=="text"||Q.text.trim());if(Z.length===0)return;return{...$,content:Z.map((Q)=>Q.type==="text"?{...Q,text:Q.text.trim()}:Q.type==="tool_result"?{...Q,content:MW(Q.content)}:Q)}}function gN($,Z){return $.reduce((Q,W)=>Q+Z(W),0)}function uB($,Z){if($.length<=Z)return $;let Q=`
574
- ...`,W=Math.max(1,Z-Q.length);return`${$.slice(0,W)}${Q}`}function dB($,Z){let Q=Number.isFinite(Z)?Math.max(1,Z):1,W=Math.max(16,Q*IN);if(typeof $.content==="string"){let Y=uB($.content,W).trim();return{...$,content:Y||"..."}}let J=W,X=$.content.map((Y)=>{if(Y.type!=="text"||J<=0)return Y;let j=uB(Y.text,J).trim();return J-=j.length,{...Y,text:j||"..."}});return{...$,content:X}}function mN($,Z){let Q=bB($),W=c5($),J=yB($),X=[],Y=0;for(let j=0;j<$.length;j+=1){let V=xN($[j]);if(!V)continue;let H=Z(V);Y+=H,X.push({index:j,message:V,estimatedTokens:H,toolPairIds:pB(V),isFirstUser:j===Q,isLastUser:j===W,isLastAssistant:j===J})}return{candidates:X,totalTokens:Y}}function lB($,Z,Q,W){let J=$[Z],X=J.estimatedTokens;return J.message=Q,J.estimatedTokens=W(Q),J.toolPairIds=pB(Q),J.estimatedTokens-X}function pB($){if(!Array.isArray($.content))return[];let Z=[];for(let Q of $.content)if(Q.type==="tool_use")Z.push(Q.id);else if(Q.type==="tool_result")Z.push(Q.tool_use_id);return Z}function vN($){let Z=new Map;for(let Q of $)for(let W of Q.toolPairIds){let J=Z.get(W);if(J)J.add(Q);else Z.set(W,new Set([Q]))}return Z}function cN($,Z,Q){let W=new Set,J=[Q],X=0;while(X<J.length){let Y=J[X];if(X+=1,Y===void 0||!$.has(Y)||W.has(Y))continue;W.add(Y);for(let j of Y.toolPairIds)for(let V of Z.get(j)??[])if(!W.has(V))J.push(V)}return W}function uN($,Z){let Q=0;for(let W of $){if(Z.has(W))continue;$[Q]=W,Q+=1}$.length=Q}function u5($,Z,Q,W){let J=new Set($),X=vN($);for(let Y=0;Y<$.length&&W>Q;){if(!Z($[Y])){Y+=1;continue}let j=cN(J,X,$[Y]);if(j.size===0){Y+=1;continue}let V=0;for(let H of j)V+=H.estimatedTokens,J.delete(H);W-=V,uN($,j)}return W}function dN($,Z,Q,W,J){if(Q<=Z)return Q;for(let Y=$.length-1;Y>=0&&Q>Z;Y-=1){let j=$[Y];if(j.isFirstUser)continue;let V=Math.max(wB,j.estimatedTokens-(Q-Z));if(V>=j.estimatedTokens)continue;Q+=lB($,Y,dB(j.message,V),J)}if(Q<=Z)return Q;let X=$.findIndex((Y)=>Y.isFirstUser);if(X>=0){if($[X].estimatedTokens<=W)return Q;while(Q>Z){let j=$[X],V=Math.max(1,j.estimatedTokens-(Q-Z));if(V>=j.estimatedTokens)break;let H=j.estimatedTokens;if(Q+=lB($,X,dB(j.message,V),J),j.estimatedTokens>=H)break}}return Q}function lN($,Z){return JSON.stringify($)!==JSON.stringify(Z)}function pN($){let Z=c5($);if(Z<0||Z===0&&!D4($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,Z),protectedTail:$.slice(Z)}}function rB($){let Z=Math.max(1,Math.min($.context.targetTokens??Math.floor($.context.triggerTokens*v5),$.context.maxInputTokens)),{compactable:Q,protectedTail:W}=pN($.context.messages);if(Q.length===0)return;let J=gN(W,$.estimateMessageTokens),X=Math.max(1,Z-J),Y=mN(Q,$.estimateMessageTokens),{candidates:j}=Y;if(j.length===0)return;let V=Y.totalTokens,H=V;H=u5(j,(F)=>F.message.role==="assistant"&&!F.isLastAssistant,X,H),H=u5(j,(F)=>F.message.role==="user"&&!F.isFirstUser&&!F.isLastUser,X,H),H=u5(j,(F)=>F.message.role==="assistant"&&F.isLastAssistant,X,H),H=u5(j,(F)=>F.message.role==="user"&&F.isLastUser&&!F.isFirstUser,X,H),H=dN(j,X,H,$.context.triggerTokens,$.estimateMessageTokens);let B=[...j.map((F)=>F.message),...W];if(!lN($.context.messages,B))return;let G=V+J,K=H+J;return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:B.length,messagesRemoved:$.context.messages.length-B.length,tokensBefore:G,tokensAfter:K,targetTokens:Z,maxInputTokens:$.context.maxInputTokens}),{messages:B}}var rN=0.5,iN=0.5;function iB($){try{return JSON.stringify($).length}catch{return String($).length}}function L4($){return typeof $==="number"&&Number.isFinite($)&&$>0}function nN($){let Z=[];if(L4($.configMaxInputTokens))Z.push($.configMaxInputTokens);if(L4($.modelMaxInputTokens))Z.push($.modelMaxInputTokens);if(L4($.contextWindow)){Z.push($.contextWindow);let Q=L4($.modelMaxTokens)?$.contextWindow-$.modelMaxTokens:void 0;if(L4(Q)&&Q>=$.contextWindow*rN)Z.push(Q)}return Z.length>0?Math.min(...Z):MB}function aN($){let Z=0,Q=0,W=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type!=="tool_result")continue;let Y=iB(X.content);Z+=1,Q+=Y,W=Math.max(W,Y)}}return{toolResultCount:Z,toolResultSerializedChars:Q,maxToolResultSerializedChars:W}}var sN={basic:({context:$,estimateMessageTokens:Z,logger:Q})=>rB({context:$,estimateMessageTokens:Z,logger:Q}),agentic:({context:$,providerConfig:Z,compaction:Q,mode:W,estimateMessageTokens:J,logger:X})=>cB({context:$,providerConfig:Z,summarizer:Q?.summarizer,preserveRecentTokens:W==="manual"?Math.min(Q?.preserveRecentTokens??qW,$.triggerTokens):Q?.preserveRecentTokens??qW,estimateMessageTokens:J,logger:X})};function oN($){if(typeof $.config.reserveTokens==="number"){let Q=Math.max(0,$.config.reserveTokens),W=Math.max(0,$.maxInputTokens-Q);return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio==="number"){let Q=$.config.thresholdRatio,W=$.maxInputTokens*Q;return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:Q}}let Z=Math.max(0,Math.min($.maxInputTokens-EB,$.maxInputTokens*RB));return{shouldCompact:$.inputTokens>Z,triggerTokens:Z,thresholdRatio:$.maxInputTokens>0?Z/$.maxInputTokens:0}}function tN($){let Z=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,Z)),W=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*Q)));return{triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}function eN($){let Z=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*iN):Math.floor($.triggerTokens*v5),Q=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(Z,$.maxInputTokens,Q))}function $w($){let Z=0,Q=!1;for(let W of $)if(W.role==="user")Q=!0;else if(W.role==="assistant"&&Q)Z+=1,Q=!1;return Z}function EW($,Z={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let W=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=SB(),X=Q?.strategy??"basic",Y=sN[X],j=Z.mode??"auto",V=Q?.compact?"custom":X;return async(H)=>{let B=H.apiMessages.reduce((M,E)=>M+J(E),0),G=nN({configMaxInputTokens:Q?.maxInputTokens,modelMaxInputTokens:H.model.info?.maxInputTokens,contextWindow:H.model.info?.contextWindow,modelMaxTokens:H.model.info?.maxTokens}),K=oN({inputTokens:B,maxInputTokens:G,config:{maxInputTokens:Q?.maxInputTokens,reserveTokens:Q?.reserveTokens,thresholdRatio:Q?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:j,strategy:X,iteration:H.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:B,maxInputTokens:G,triggerTokens:K.triggerTokens,thresholdRatio:K.thresholdRatio,shouldCompact:K.shouldCompact,messageCount:H.messages.length,apiMessageCount:H.apiMessages.length,apiMessagesJsonChars:iB(H.apiMessages),...aN(H.apiMessages)}),j==="auto"&&!K.shouldCompact)return;let F=j==="manual"?tN({inputTokens:B,maxInputTokens:G,autoTriggerTokens:K.triggerTokens,manualTargetRatio:Z.manualTargetRatio}):K,A=j==="auto"?eN({maxInputTokens:G,modelMaxTokens:H.model.info?.maxTokens,triggerTokens:F.triggerTokens,messagePairCount:$w(H.messages)}):void 0,L={agentId:H.agentId,conversationId:H.conversationId,parentAgentId:H.parentAgentId,iteration:H.iteration,messages:H.messages,model:H.model,maxInputTokens:G,triggerTokens:F.triggerTokens,targetTokens:A,thresholdRatio:F.thresholdRatio,utilizationRatio:G>0?B/G:0},f=j==="manual"?"manual_compaction":"auto_compaction";H.emitStatusNotice?.(j==="manual"?"compacting":"auto-compacting",{kind:f,reason:f,iteration:H.iteration,triggerTokens:F.triggerTokens,maxInputTokens:G});let D=H.messages.length,U=Date.now(),T=Q?.compact?await Q.compact(L):await Y({context:L,providerConfig:{...W,abortSignal:H.abortSignal},compaction:Q,mode:j,estimateMessageTokens:J,logger:$.logger}),q=Date.now()-U,z=$.sessionId??H.conversationId,_={agentId:H.agentId,conversationId:H.conversationId,parentAgentId:H.parentAgentId??void 0};if(T?.messages){let M=T.messages.reduce((E,P)=>E+J(P),0);$.logger?.log("Context compaction completed",{severity:"info",strategy:X,maxInputTokens:G,inputTokens:B,afterTokens:M,tokensSaved:B-M,utilizationBefore:`${(B/G*100).toFixed(1)}%`,utilizationAfter:`${(M/G*100).toFixed(1)}%`,thresholdTrigger:`${(F.thresholdRatio*100).toFixed(1)}%`,messagesBefore:D,messagesAfter:T.messages.length,messagesRemoved:D-T.messages.length}),BZ($.telemetry,{ulid:z,strategy:V,mode:j,messagesBefore:D,messagesAfter:T.messages.length,messagesRemoved:D-T.messages.length,tokensBefore:B,tokensAfter:M,tokensSaved:B-M,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:q,provider:$.providerId,modelId:$.modelId,..._})}else GZ($.telemetry,{ulid:z,strategy:V,mode:j,reason:"no_result",tokensBefore:B,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:q,provider:$.providerId,modelId:$.modelId,..._});return T}}G0();function _0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function f0($,Z){return{inputTokens:$.inputTokens+Math.max(0,Z.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,Z.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,Z.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,Z.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,Z.totalCost??0)}}function d5($){let Z=_0();for(let Q of $)Z=f0(Z,Q);return Z}function v2($){return typeof $==="number"&&Number.isFinite($)?$:0}function l5($){let Z=_0();for(let Q of $){let W=Q.metrics;if(!W)continue;Z=f0(Z,{inputTokens:v2(W.inputTokens),outputTokens:v2(W.outputTokens),cacheReadTokens:v2(W.cacheReadTokens),cacheWriteTokens:v2(W.cacheWriteTokens),totalCost:v2(W.cost)})}return Z}function Zw($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let W=v2(Q.metrics?.inputTokens);return W>0?W:void 0}return}function Qw($){if(!$||typeof $!=="object")return;let Z=$,Q=Z.skill??Z.skill_name??Z.skillName;if(typeof Q!=="string")return;let W=Q.trim();return W.length>0?W:void 0}function NW($){if(!$||typeof $!=="object")return{};let Z=$;return{agentId:typeof Z.agentId==="string"?Z.agentId:void 0,conversationId:typeof Z.conversationId==="string"?Z.conversationId:void 0,parentAgentId:typeof Z.parentAgentId==="string"?Z.parentAgentId:void 0}}function q1($){let Z=$.agentId?.trim();if(!Z)return;let Q=$.parentAgentId?.trim()||void 0,W=$.teamRole,J="root";if(W==="teammate")J="team_teammate";else if(W==="lead")J="team_lead";else if(Q)J="subagent";return{agentId:Z,agentKind:J,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Q,createdByAgentId:$.createdByAgentId?.trim()||Q||void 0,isSubagent:Boolean(Q),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:W,teamAgentId:$.teamAgentId?.trim()||void 0}}function Ww($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function Jw($){let Z=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of Z){let W=Q?.trim();if(W)return W}return $.isPrimaryAgentEvent?"root":"unknown"}function wW($,Z,Q){let{sessionId:W,config:J,liveSession:X,emit:Y}=$,j=J.telemetry,V=X?.runtime.teamRuntime,H=Q?.isPrimaryAgentEvent??!0,B=NW(Z),G=q1({agentId:Q?.agentId??B.agentId,conversationId:Q?.conversationId??B.conversationId,parentAgentId:Q?.parentAgentId??B.parentAgentId,createdByAgentId:Q?.createdByAgentId,teamId:Q?.teamId??V?.getTeamId(),teamName:Q?.teamName??V?.getTeamName(),teamRole:Q?.teamRole,teamAgentId:Q?.teamAgentId});if(Z.type==="content_start"&&Z.contentType==="tool"&&Z.toolName==="skills"){let K=Qw(Z.input);if(K)WZ(j,{ulid:W,skillName:K,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:J.providerId,modelId:J.modelId,...G})}if(Z.type==="content_end"&&Z.contentType==="tool"){let K=Z.toolName??"unknown",F=!Z.error;if(Q8(j,{ulid:W,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))JZ(j,{ulid:W,modelId:J.modelId,provider:J.providerId,errorType:Z.error,...G})}if(Z.type==="notice"&&Z.reason==="api_error")u4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.message,...G});if(Z.type==="error")u4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.error?.message??"unknown error",...G});if(Z.type==="usage"&&X?.turnUsageBaseline){let K=Ww(Z);if(H){X.turnPrimaryUsage=f0(X.turnPrimaryUsage??_0(),K);let A=f0(X.turnUsageBaseline,X.turnPrimaryUsage);$.usageBySession.set(W,A),Z8(j,{ulid:W,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),ZZ(j,{ulid:W,tokensIn:Z.inputTokens,tokensOut:Z.outputTokens,cacheWriteTokens:Z.cacheWriteTokens,cacheReadTokens:Z.cacheReadTokens,totalCost:Z.cost,model:J.modelId,...G})}else{let A=Jw({isPrimaryAgentEvent:H,overrides:Q,eventMetadata:B}),L=X.turnUsageByAgent??new Map;X.turnUsageByAgent=L,L.set(A,f0(L.get(A)??_0(),K))}let F=f0(X.turnPrimaryUsage??_0(),d5(X.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(W,f0(X.turnAggregateUsageBaseline??X.turnUsageBaseline,F))}if(Z.type==="iteration_end"&&H)$.persistMessages(W,X?.agent.getMessages()??[],X?.config.systemPrompt);Y({type:"agent_event",payload:{sessionId:W,event:Z,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(H?"lead":void 0):void 0}}),Y({type:"chunk",payload:{sessionId:W,stream:"agent",chunk:WH(Z),ts:Date.now()}})}function W$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as bw}from"@cline/shared";import{spawn as Fw}from"node:child_process";import{appendFileSync as Aw,readFileSync as fw}from"node:fs";import{join as Uw}from"node:path";import{augmentNodeCommandForDebug as oB,withResolvedClineBuildEnv as hW}from"@cline/shared";import{ensureHookLogDir as aB}from"@cline/shared/storage";function p5($,Z){if(!Z)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:Z}}import{existsSync as Xw,readdirSync as Yw}from"node:fs";import{basename as jw,extname as Vw,join as Hw}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as nB,resolveHooksConfigSearchPaths as Bw}from"@cline/shared/storage";function CW($){return Bw($)}var r5;((B)=>{B.TaskStart="TaskStart";B.TaskResume="TaskResume";B.TaskCancel="TaskCancel";B.TaskComplete="TaskComplete";B.TaskError="TaskError";B.PreToolUse="PreToolUse";B.PostToolUse="PostToolUse";B.UserPromptSubmit="UserPromptSubmit";B.PreCompact="PreCompact";B.SessionShutdown="SessionShutdown"})(r5||={});var PW={["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"},Gw=new Map(Object.values(r5).map(($)=>[$.toLowerCase(),$])),Kw=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function SW($){let Z=Vw($).toLowerCase();if(!Kw.has(Z))return;let Q=jw($,Z).trim().toLowerCase();return Gw.get(Q)}function c2($){let Z=[],Q=new Set,W=CW($).filter((J)=>Xw(J));for(let J of W)try{for(let X of Yw(J,{withFileTypes:!0})){if(!X.isFile())continue;let Y=SW(X.name);if(!Y)continue;let j=Hw(J,X.name);if(Q.has(j))continue;Q.add(j),Z.push({fileName:Y,hookEventName:PW[Y],path:j})}}catch{}return Z.sort((J,X)=>J.path.localeCompare(X.path))}function n5($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))Z[Q]=typeof W==="string"?W:JSON.stringify(W);return Z}function i5($,Z,Q){let W=Q instanceof Error?`: ${Q.message}`:"",J=`${Z}${W}`;if($){try{$.log(J,{severity:"warn",...Q!==void 0?{error:Q}:{}})}catch{}return}console.warn(J)}function Dw($,Z){if(!Z)return $;if(!$)return{...Z};let Q=[$.context,Z.context].filter((J)=>typeof J==="string"&&J.length>0).join(`
575
- `),W=[...$.appendMessages??[],...Z.appendMessages??[]];return{cancel:$.cancel===!0||Z.cancel===!0?!0:void 0,review:$.review===!0||Z.review===!0?!0:void 0,context:Q||void 0,overrideInput:Z.overrideInput!==void 0?Z.overrideInput:$.overrideInput,systemPrompt:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,appendMessages:W.length>0?W:void 0}}function Lw($){if(!$||typeof $!=="object")return;let Z=$,Q=typeof Z.context==="string"?Z.context:typeof Z.contextModification==="string"?Z.contextModification:typeof Z.errorMessage==="string"?Z.errorMessage:void 0;return{cancel:typeof Z.cancel==="boolean"?Z.cancel:void 0,review:typeof Z.review==="boolean"?Z.review:void 0,context:Q,overrideInput:Object.hasOwn(Z,"overrideInput")?Z.overrideInput:void 0}}function bW($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function U0($,Z){let Q=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",W={rootSessionId:Z.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:W,workspaceRoots:Z.workspacePath?[Z.workspacePath]:[],workspaceInfo:Z.workspaceInfo,userId:Q,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function _w($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
576
- `).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse hook stdout JSON"}}}async function zw($,Z){let Q=$.stdin;if(!Q)throw Error("hook command failed to create stdin");await new Promise((W,J)=>{let X=!1,Y=()=>{Q.off("error",V),Q.off("finish",H),$.off("close",B)},j=(G)=>{if(X)return;if(X=!0,Y(),G){let K=G.code;if(K==="EPIPE"||K==="ERR_STREAM_DESTROYED"){W();return}J(G);return}W()},V=(G)=>j(G),H=()=>j(),B=()=>j();Q.on("error",V),Q.once("finish",H),$.once("close",B);try{Q.end(Z)}catch(G){j(G)}})}async function tB($,Z){if(Z.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await sB($,Z)}catch(Q){let W=qw(Z.command,process.platform,Q);if(!W)throw Q;return await sB($,{...Z,command:W})}}async function sB($,Z){let Q=oB(Z.command,{env:Z.env,debugRole:"hook"}),W=Fw(Q[0],Q.slice(1),{cwd:Z.cwd,env:hW(Z.env),stdio:Z.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Z.detached,windowsHide:!0}),J=new Promise((K)=>{W.once("spawn",()=>K())}),X=new Promise((K,F)=>{W.once("error",(A)=>F(A))}),Y=JSON.stringify($);if(await Promise.race([J,X]),await zw(W,Y),Z.detached){W.unref();return}if(!W.stdout||!W.stderr)throw Error("hook command failed to create stdout/stderr");let j="",V="",H=!1,B;W.stdout.on("data",(K)=>{j+=K.toString()}),W.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((Z.timeoutMs??0)>0)B=setTimeout(()=>{H=!0,W.kill("SIGKILL")},Z.timeoutMs);W.once("close",(F)=>{if(B)clearTimeout(B);let{parsedJson:A,parseError:L}=_w(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:H})})});return await Promise.race([G,X])}function Tw($){try{let Q=fw($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Q?.startsWith("#!"))return;let W=Q.slice(2).trim();if(!W)return;let J=W.split(/\s+/).filter(Boolean);return J.length>0?J:void 0}catch{return}}function Ow($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function qw($,Z=process.platform,Q){if(Z!=="win32"||!Ow(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function eB($){if($.length===0)return;let[Z,...Q]=$,W=Z.replace(/\\/g,"/").toLowerCase(),J=W.split("/").at(-1)??W;if(J==="env")return eB(Q);if(J==="bash"||J==="sh"||J==="zsh")return[J,...Q];if(J==="python3"||J==="python")return process.platform==="win32"?["py","-3",...Q]:[J,...Q];return $}function Mw($){let Z=Tw($);if(Z&&Z.length>0)return[...eB(Z)??Z,$];let Q=$.toLowerCase();if(Q.endsWith(".sh")||Q.endsWith(".bash")||Q.endsWith(".zsh"))return["bash",$];if(Q.endsWith(".js")||Q.endsWith(".mjs")||Q.endsWith(".cjs"))return oB(["node",$],{debugRole:"hook"});if(Q.endsWith(".ts")||Q.endsWith(".mts")||Q.endsWith(".cts"))return["bun","run",$];if(Q.endsWith(".py"))return process.platform==="win32"?["py","-3",$]:["python3",$];if(Q.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",$];return["bash",$]}function Rw($){let Z={};for(let Q of c2($)){if(!Q.hookEventName)continue;let W=Q.hookEventName,J=Z[W]??[];J.push(Mw(Q.path)),Z[W]=J}return Z}async function Ew($){let Z;for(let Q of $.commands){let W=Q.join(" ");try{let J=await tB($.payload,{command:Q,cwd:$.cwd,env:hW(process.env),detached:!1,timeoutMs:$.timeoutMs});if(J?.timedOut){i5($.logger,`hook command timed out: ${W}`);continue}if(J?.parseError){i5($.logger,`hook command returned invalid JSON control output: ${W} (${J.parseError})`);continue}Z=Dw(Z,Lw(J?.parsedJson))}catch(J){i5($.logger,`hook command failed: ${W}`,J)}}return Z}function l$($){for(let Z of $.commands){let Q=Z.join(" ");tB($.payload,{command:Z,cwd:$.cwd,env:hW(process.env),detached:!0}).catch((W)=>{i5($.logger,`hook command failed: ${Q}`,W)})}}function J$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function yW($,Z){return{...J$($.snapshot),userMessage:Z}}function $G($){return{...J$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function ZG($){return{...J$($.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 QG($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function Nw($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}function a5($){let Z={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(W)=>{let J=`${JSON.stringify({ts:new Date().toISOString(),...W})}
577
- `,Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??Uw(aB(),"hooks.jsonl");aB(Y),Aw(Y,J,"utf8")};return{beforeRun:async(W)=>{let J=yW(W,"");Q({...U0(J,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(W)=>{let J=$G(W);Q({...U0(J,Z),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:n5(J.call.input)}});return},afterTool:async(W)=>{let J=ZG(W);Q({...U0(J,Z),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:n5(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:W,result:J})=>{let X=J$(W);if(J.status==="completed"){Q({...U0(X,Z),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||bW(J.error?.message)){Q({...U0(X,Z),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Q({...U0(X,Z),hookName:"agent_error",iteration:J.iterations,error:{name:J.error.name,message:J.error.message,stack:J.error.stack}})},onEvent:async(W)=>{if(W.type!=="message-added"||W.message.role!=="user")return;let J=yW({snapshot:W.snapshot},QG(W.message.content));Q({...U0(J,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function kW($){let Z=Rw($.workspacePath);if(!Object.values(Z).some((G)=>G.length>0))return;let W=async(G,K)=>{let F=Z[K]??[];if(F.length===0)return;l$({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...U0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...U0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=Z.prompt_submit??[];if(K.length>0)l$({commands:K,cwd:$.cwd,logger:$.logger,payload:{...U0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},X=async(G)=>{let K=Z.tool_call??[];if(K.length===0)return;return Ew({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...U0(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:n5(G.call.input)}}})},Y=async(G)=>{let K=Z.tool_result??[];if(K.length===0)return;l$({commands:K,cwd:$.cwd,logger:$.logger,payload:{...U0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:n5(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}}})},j=async(G)=>{let K=Z.agent_end??[];if(K.length===0)return;l$({commands:K,cwd:$.cwd,logger:$.logger,payload:{...U0(G,$),hookName:"agent_end",iteration:G.iteration,turn:G.turn,taskComplete:{taskMetadata:{}}}})},V=async(G)=>{let K=Z.agent_error??[];if(K.length===0)return;l$({commands:K,cwd:$.cwd,logger:$.logger,payload:{...U0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},H=async(G)=>{if(bW(G.reason)){let F=Z.agent_abort??[];if(F.length>0)l$({commands:F,cwd:$.cwd,logger:$.logger,payload:{...U0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=Z.session_shutdown??[];if(K.length===0)return;l$({commands:K,cwd:$.cwd,logger:$.logger,payload:{...U0(G,$),hookName:"session_shutdown",reason:G.reason}})},B={};if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0||(Z.prompt_submit?.length??0)>0){if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0)B.beforeRun=async(G)=>{let K=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await W(J$(G.snapshot),K);return};if((Z.prompt_submit?.length??0)>0)B.onEvent=async(G)=>{if(G.type!=="message-added"||G.message.role!=="user")return;await J(yW({snapshot:G.snapshot},QG(G.message.content)))}}if((Z.tool_call?.length??0)>0)B.beforeTool=async(G)=>{let K=await X($G(G));return Nw(K)};if((Z.tool_result?.length??0)>0)B.afterTool=async(G)=>{await Y(ZG(G));return};if((Z.agent_end?.length??0)>0)B.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await j({...J$(G),iteration:K.iterations,turn:{outputText:K.outputText,status:K.status}})};if((Z.agent_error?.length??0)>0||(Z.agent_abort?.length??0)>0||(Z.session_shutdown?.length??0)>0){let G=B.afterRun;B.afterRun=async(K)=>{await G?.(K);let{snapshot:F,result:A}=K;if(A.status==="aborted"||bW(A.error?.message)){await H({...J$(F),reason:A.error?.message});return}if(A.error)await V({...J$(F),iteration:A.iterations,error:A.error})}}return B}function s5($){return p5("core.hook_config_files",kW($))}function p$($,Z){let Q=$.map((W)=>W[Z]).filter((W)=>typeof W==="function");if(Q.length===0)return;return async(W)=>{let J;for(let X of Q){let Y=await X(W);if(!Y||typeof Y!=="object")continue;let j=Y;J={...J??{},...j,stop:J?.stop===!0||j.stop===!0?!0:j.stop,options:J?.options||j.options?{...J?.options??{},...j.options??{}}:void 0}}return J}}function _4($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:p$(Z,"beforeRun"),afterRun:p$(Z,"afterRun"),beforeModel:p$(Z,"beforeModel"),afterModel:p$(Z,"afterModel"),beforeTool:p$(Z,"beforeTool"),afterTool:p$(Z,"afterTool"),onEvent:p$(Z,"onEvent")}}import{z as X$}from"zod";var z4=H2;var WG=X$.object({settings:H2,updatedAt:X$.string().datetime(),tokenSource:X$.enum(["manual","oauth","migration"]).default("manual")}),o5=X$.object({version:X$.literal(1),lastUsedProvider:X$.string().min(1).optional(),providers:X$.record(X$.string(),WG)});function u2(){return{version:1,providers:{}}}r0();import{upsertWorkspaceInfo as ww,WorkspaceManifestSchema as IW}from"@cline/shared";class t5{manifest;listeners=new Set;constructor($){this.manifest=IW.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await U5($);return this.manifest=ww(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=b$($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=IW.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let W=await this.addWorkspacePath(Z);return this.manifest=IW.parse({...this.manifest,currentWorkspacePath:W.rootPath}),this.emit({type:"workspace_switched",workspace:W}),W}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=b$($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}G0();import{createHash as Cw}from"node:crypto";var JG=new Set,XG=new Set;function Pw($){return Cw("sha256").update($).digest("hex")}function Sw($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function YG($){if(!$.telemetry)return;let Z=Pw($.rootPath),Q=$.rootCount??1;if(!JG.has(Z))JG.add(Z),o9($.telemetry,{root_count:Q,vcs_types:Sw($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!XG.has(Z)){XG.add(Z);let W=Error($.initError.message);W.name=$.initError.errorType||"Error",t9($.telemetry,W,{fallback_to_single_root:!0,workspace_count:Q})}}function yw($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function hw($,Z,Q){if(Z.length>0)for(let X of Z)Q?.log(X.message,{severity:"warn"});if($.length===0)return;let W=$.slice(0,3).map(yw).join("; "),J=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${W}${J}. Use --verbose for more details.`,{severity:"warn"});for(let X of $)Q?.log(`Plugin initialization failed (${X.phase}) for ${X.pluginPath}`,{severity:"warn",stack:X.stack,pluginPath:X.pluginPath,pluginName:X.pluginName})}function kw($,Z){let Q=typeof $.thinking==="boolean",W=typeof $.reasoningEffort==="string";if(!Q&&!W)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...W?{effort:$.reasoningEffort}:{}}}function jG($,Z){return bw($,Z)}function Iw($){let Z=0;for(let Q of $??[]){if(Q.role!=="user")continue;if(("metadata"in Q&&Q.metadata&&typeof Q.metadata==="object"&&!Array.isArray(Q.metadata)?Q.metadata:void 0)?.kind==="recovery_notice")continue;Z+=1}return Z}function xw($){let Z={...$.storedHeaders??{},...$.configHeaders??{}},Q=$.accountId?.trim()||gw($.accessToken);if(Z.originator="cline",Z.session_id=$.sessionId,Z["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,Q)Z["ChatGPT-Account-Id"]=Q;return Z}function gw($){let Z=$?.trim();if(!Z)return;let Q=z0(Z),W=Q?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let J=Q?.organizations?.[0]?.id;if(typeof J==="string"&&J.length>0)return J;let X=Q?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;return}function mw($,Z,Q,W,J){let X=Q.getProviderSettings($.providerId),Y=W||X?.modelCatalog?{...W??{},...X?.modelCatalog??{}}:void 0,j=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,V={...X??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??X?.apiKey,baseUrl:$.baseUrl??X?.baseUrl,headers:$.providerId==="openai-codex"?xw({sessionId:Z,configHeaders:$.headers,storedHeaders:X?.headers,accountId:X?.auth?.accountId,accessToken:$.apiKey??X?.auth?.accessToken??X?.apiKey}):$.headers??X?.headers,reasoning:kw($,X?.reasoning),modelCatalog:Y},H={...B1(V),...j??{}};if($.knownModels)H.knownModels=$.knownModels;if($.extensionContext)H.extensionContext=$.extensionContext;let G=$.fetch??H.fetch??J;if(G)H.fetch=G;return H}async function VG($){let{input:Z,sessionId:Q,providerSettingsManager:W,defaultTelemetry:J,defaultCapabilities:X,defaultToolPolicies:Y,defaultFetch:j,onPluginEvent:V,onTeamEvent:H,createSubAgentLifecycleCallbacks:B,createSpawnTool:G,localRuntime:K,readSessionMetadata:F,writeSessionMetadata:A}=$,L=W$(Z.config),{modelCatalogDefaults:f,userInstructionService:D,configExtensions:U,onTeamRestored:T,...q}=K??{},z=Object.keys(q).length>0?q:void 0,{workspaceInfo:_,workspaceMetadata:M,durationMs:E,vcsType:P,initError:c}=await mV(L),n=z?.extensionContext,a={...n??{},workspace:{..._,...n?.workspace??{}},session:{...n?.session??{},sessionId:Q},logger:n?.logger??z?.logger,telemetry:n?.telemetry??z?.telemetry??J};YG({telemetry:a.telemetry,rootPath:_.rootPath,workspaceInfo:_,rootCount:1,vcsType:P,durationMs:E,initError:c,featureFlagEnabled:!0});let t=s5({cwd:Z.config.cwd,workspacePath:L,rootSessionId:Q,logger:z?.logger,workspaceInfo:_}),p0=QH(z?.hooks)?void 0:a5({rootSessionId:Q,workspacePath:L,workspaceInfo:_}),K$=_4([z?.hooks,p0]),d;if(jG(U,"plugins"))try{d=await L6({pluginPaths:z?.pluginPaths,workspacePath:L,cwd:Z.config.cwd,onEvent:V,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:_,session:a.session,client:a.client,user:a.user,logger:a.logger,telemetry:a.telemetry,automation:a.automation}),hw(d.failures,d.warnings,z?.logger)}catch(W2){let r9=W2 instanceof Error?W2.message:String(W2);z?.logger?.log?.(`plugin loading failed; continuing without plugins (${r9})`)}let N=b7(t?[t]:void 0,b7(z?.extensions,dZ(d?.extensions))),X0=jG(U,"plugins")?T$(d?.pluginPaths??[]):void 0,Y0={...Z.config,...z??{},sessionId:Q,hooks:K$,extensions:N,extensionContext:a,telemetry:a.telemetry},R0=mw(Y0,Q,W,f,j),Z2=_4([Y0.hooks,Y0.checkpoint?.enabled===!0?ZB({cwd:Y0.cwd,sessionId:Q,logger:Y0.logger,createCheckpoint:Y0.checkpoint?.createCheckpoint,initialRunCount:Iw(Z.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),Y1={...Y0,providerConfig:R0,workspaceMetadata:M,hooks:Z2},t0=Z.toolPolicies??Y0.toolPolicies??Y,$8=O0(X,Z.capabilities),Q2=$8?.requestToolApproval,I4=$8?.toolExecutors,j1=B?.(Y1),x4=new t5({currentWorkspacePath:_.rootPath,workspaces:{[_.rootPath]:_}});return{effectiveInput:Z,config:Y1,providerConfig:R0,workspaceMetadata:M,workspaceInfo:_,extensions:N,hooks:Z2,toolPolicies:t0,requestToolApproval:Q2,pluginSandboxShutdown:d?.shutdown,runtimeBuilderInput:{config:Y1,hooks:Z2,extensions:N,onTeamEvent:H,createSpawnTool:G,onTeamRestored:T,onSubAgentEvent:j1?.onSubAgentEvent,onSubAgentStart:j1?.onSubAgentStart,onSubAgentEnd:j1?.onSubAgentEnd,userInstructionService:D,pluginSkillDirectories:X0,configExtensions:U,toolExecutors:I4,toolPolicies:t0,workspaceManager:x4,logger:Y1.logger,telemetry:Y1.telemetry,requestToolApproval:Q2}}}import{resolveDocumentsExtensionPath as vw}from"@cline/shared/storage";G0();function HG($,Z,Q,W,J){if(Q)$Z($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});else e9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});cw($.telemetry,{workspacePath:W})}function cw($,Z){let Q=vw("Hooks"),W=c2(Z.workspacePath),J=new Map;for(let X of W){let Y=X.hookEventName??"unknown",j=J.get(Y)??{global:0,workspace:0};if(X.path===Q||X.path.startsWith(`${Q}/`))j.global+=1;else j.workspace+=1;J.set(Y,j)}for(let[X,Y]of J.entries())HZ($,X,Y.global,Y.workspace)}function BG($,Z){for(let Q of Z.mentions)jZ($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)XZ($,"file",Q.length);for(let Q of Z.ignoredMentions)YZ($,"file","not_found",Q)}import{chmodSync as wG,existsSync as uW,mkdirSync as TC,readFileSync as OC,writeFileSync as qC}from"node:fs";import{basename as CG,dirname as dW}from"node:path";import{resolveProviderSettingsPath as MC}from"@cline/shared/storage";import{existsSync as uw,mkdirSync as dw,readFileSync as lw,writeFileSync as pw}from"node:fs";import{mkdir as rw,readFile as iw,writeFile as nw}from"node:fs/promises";import{dirname as xW,join as aw}from"node:path";import*as w0 from"@cline/llms";import{ModelCapabilitySchema as sw,ProviderCapabilitySchema as ow,ProviderClientSchema as tw,ProviderProtocolSchema as ew}from"@cline/shared";import{z as p}from"zod";var $C=p.object({id:p.string().optional(),name:p.string().optional(),maxTokens:p.number().optional(),contextWindow:p.number().optional(),maxInputTokens:p.number().optional(),capabilities:p.array(sw).optional(),supportsVision:p.boolean().optional(),supportsAttachments:p.boolean().optional(),supportsReasoning:p.boolean().optional()}).passthrough(),ZC=p.object({name:p.string(),baseUrl:p.string(),defaultModelId:p.string().optional(),protocol:ew.optional(),client:tw.optional(),capabilities:p.array(ow).optional(),modelsSourceUrl:p.string().optional()}).passthrough(),GG=p.object({provider:ZC.optional(),models:p.record(p.string(),$C).optional()}).passthrough(),KG=p.object({version:p.literal(1),providers:p.record(p.string(),GG)}),QC=p.object({version:p.literal(1),providers:p.record(p.string(),p.unknown())}),e5=new Set;function FG($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function r$($){return aw(xW($.getFilePath()),"models.json")}function $9(){return{version:1,providers:{}}}function AG($){let Z=QC.safeParse($);if(!Z.success)return $9();let Q={};for(let[W,J]of Object.entries(Z.data.providers)){let X=GG.safeParse(J);if(X.success)Q[W]=X.data}return{version:1,providers:Q}}function gW($){if(!uw($))return $9();try{let Z=lw($,"utf8");return AG(JSON.parse(Z))}catch{}return $9()}async function d2($){try{let Z=await iw($,"utf8");return AG(JSON.parse(Z))}catch{}return $9()}function fG($,Z){dw(xW($),{recursive:!0});let Q=KG.parse(Z);pw($,`${JSON.stringify(Q,null,2)}
578
- `,"utf8")}async function Z9($,Z){await rw(xW($),{recursive:!0});let Q=KG.parse(Z);await nw($,`${JSON.stringify(Q,null,2)}
579
- `,"utf8")}function UG($,Z){return{id:$,name:Z.name??$,supportsAttachments:Z.capabilities?.includes("files"),supportsVision:Z.capabilities?.includes("images"),supportsReasoning:Z.capabilities?.includes("reasoning")||Z.thinkingConfig!=null}}function DG($){if(!$||$.length===0)return;let Z=new Set;if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("tools"))Z.add("tools");return Z.size>0?[...Z]:void 0}function LG($){let Z=new Set;if(!$||$.length===0)return[...Z];if($.includes("streaming"))Z.add("streaming");if($.includes("tools"))Z.add("tools");if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("vision"))Z.add("images"),Z.add("files");return[...Z]}function WC($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function _G($,Z){return $??Z??"openai-chat"}function zG($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function TG($,Z,Q){let W=new Set(Z?.capabilities??Q??[]);if(Z?.supportsVision)W.add("images");if(Z?.supportsAttachments)W.add("files");if(Z?.supportsReasoning)W.add("reasoning");return{id:$,name:Z?.name??$,maxTokens:Z?.maxTokens,contextWindow:Z?.contextWindow,maxInputTokens:Z?.maxInputTokens,capabilities:W.size>0?[...W]:void 0}}function JC($,Z){for(let[Q,W]of Object.entries(Z??{})){let J=W.id?.trim()||Q.trim();if(!J)continue;w0.registerModel($,J,TG(J,W))}}function XC($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function YC($){return Object.assign({},...w0.resolveProviderModelCatalogKeys($).map((Q)=>w0.getGeneratedModelsForProvider(Q)))}function jC($){let Z=$.provider.trim();if(!Z||w0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let W=w0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],J=YC(Z),X=LG($.capabilities),Y=X.length>0?X:void 0,j=$.model?.trim(),V={...J,...W?.models??{}};if(j)V[j]=XC(j,V[j],Y);let H=Object.keys(V).filter(Boolean),B=j||H[0];if(!B)return;let G=_G($.protocol,W?.provider.protocol),K=zG($.client,G,W?.provider.client);w0.registerProvider({provider:{id:Z,name:W?.provider.name??FG(Z),description:W?.provider.description,protocol:G,client:K,baseUrl:Q,modelsSourceUrl:W?.provider.modelsSourceUrl,defaultModelId:B,capabilities:DG($.capabilities)??W?.provider.capabilities,source:"file"},models:V})}function Q9($){for(let Z of Object.values($.providers))jC(Z.settings)}function T4($,Z){let Q=Z.models??{};if(!WC(Z.provider)){JC($,Q);return}let W=LG(Z.provider.capabilities),J=Object.entries(Q).map(([H,B])=>({id:B.id?.trim()||H.trim(),model:B})).filter(({id:H})=>H.length>0),X=Z.provider.defaultModelId?.trim()||J[0]?.id||"default",Y=_G(Z.provider.protocol,void 0),j=zG(Z.provider.client,Y,void 0),V=Object.fromEntries(J.map(({id:H,model:B})=>[H,{...TG(H,B,W.length>0?W:void 0),status:"active"}]));w0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||FG($),protocol:Y,client:j,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:X,capabilities:DG(Z.provider.capabilities),source:"file"},models:V})}function OG($){let Z=r$($);if(e5.has(Z))return;let Q=gW(Z);for(let[W,J]of Object.entries(Q.providers))T4(W,J);e5.add(Z)}async function qG($){let Z=r$($);if(e5.has(Z))return;let Q=await d2(Z);for(let[W,J]of Object.entries(Q.providers))T4(W,J);e5.add(Z)}import{existsSync as VC,readFileSync as HC}from"node:fs";import{dirname as BC,join as mW}from"node:path";import*as l2 from"@cline/llms";import{resolveClineDataDir as GC}from"@cline/shared/storage";var W9="openai",EG=l2.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,MG=128000;function NG($){let Z=$?.trim();if(!Z)return;try{let Q=JSON.parse(Z);if(!Q)return;let W=typeof Q.expiresAt==="number"&&Number.isFinite(Q.expiresAt)?Q.expiresAt<10000000000?Q.expiresAt*1000:Q.expiresAt:void 0;return{accessToken:Q.idToken,refreshToken:Q.refreshToken,expiresAt:W,accountId:Q.userInfo?.id}}catch{return}}function C($){let Z=$?.trim();return Z?Z:void 0}function KC($){return $==="credentials"?"iam":$}function RG($){if(!VC($))return;try{let Z=HC($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function FC($){let Z=$.dataDir??GC(),Q=$.globalStatePath??mW(Z,"globalState.json"),W=$.secretsPath??mW(Z,"secrets.json"),J=RG(Q),X=RG(W);if(!J&&!X)return;return{globalState:J??{},secrets:X??{}}}function vW($){if($===W9)return EG;return $}function AC($,Z,Q,W){let J=Q==="plan"?"planMode":"actMode",X=Z===W?C(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,j={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`}[Z];return(j?C(typeof $[j]==="string"?$[j]:void 0):void 0)??X}function fC($,Z,Q){let W=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,J=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(C).find(Boolean),X=J==="none"||J==="low"||J==="medium"||J==="high"||J==="xhigh"?J:void 0,Y=typeof W==="number"&&Number.isInteger(W)&&W>0?W:void 0;if(!X&&Y===void 0)return;return{...X?{effort:X}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function UC($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),W=C(Q.access_token),J=C(Q.refresh_token),X=C(Q.accountId);if(!W&&!J&&!X)return;return{...W?{apiKey:W}:{},auth:{...W?{accessToken:W}:{},...J?{refreshToken:J}:{},...X?{accountId:X}:{}}}}catch{return}}function DC($){let Z=l2.getGeneratedModelsForProvider($),W=l2.getProviderCollectionSync($)?.provider.defaultModelId;if(W&&Z[W])return W;return Object.keys(Z)[0]??void 0}function LC($,Z,Q,W){let J=vW($),X=C(W==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),Y=AC(Z,$,W,X)??DC(J),j=fC(Z,J,W),V=typeof Z.requestTimeoutMs==="number"&&Number.isInteger(Z.requestTimeoutMs)&&Z.requestTimeoutMs>0?Z.requestTimeoutMs:void 0,H={anthropic:Q.apiKey,cline:Q.clineApiKey,openai:Q.openAiApiKey,"openai-native":Q.openAiNativeApiKey,openrouter:Q.openRouterApiKey,bedrock:Q.awsBedrockApiKey,gemini:Q.geminiApiKey,ollama:Q.ollamaApiKey,deepseek:Q.deepSeekApiKey,requesty:Q.requestyApiKey,together:Q.togetherApiKey,fireworks:Q.fireworksApiKey,qwen:Q.qwenApiKey,doubao:Q.doubaoApiKey,mistral:Q.mistralApiKey,litellm:Q.liteLlmApiKey,asksage:Q.asksageApiKey,xai:Q.xaiApiKey,moonshot:Q.moonshotApiKey,zai:Q.zaiApiKey,huggingface:Q.huggingFaceApiKey,nebius:Q.nebiusApiKey,sambanova:Q.sambanovaApiKey,cerebras:Q.cerebrasApiKey,groq:Q.groqApiKey,"huawei-cloud-maas":Q.huaweiCloudMaasApiKey,baseten:Q.basetenApiKey,"vercel-ai-gateway":Q.vercelAiGatewayApiKey,dify:Q.difyApiKey,minimax:Q.minimaxApiKey,hicap:Q.hicapApiKey,aihubmix:Q.aihubmixApiKey,nousResearch:Q.nousResearchApiKey,oca:Q.ocaApiKey},B={};if($==="openai-codex")Object.assign(B,UC(Q));if($==="cline")try{let D=C(Q["cline:clineAccountId"]);if(D)B.auth={...B.auth??{},...NG(D)}}catch{}if($===W9&&Z.openAiHeaders)B.headers=Z.openAiHeaders;if($==="bedrock"){let D=KC(Z.awsAuthentication),U=D==="profile"||Z.awsUseProfile===!0;B.aws={accessKey:C(Q.awsAccessKey),secretKey:C(Q.awsSecretKey),sessionToken:C(Q.awsSessionToken),region:C(Z.awsRegion),authentication:D,profile:U?C(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:C(Z.awsBedrockEndpoint),customModelBaseId:C(W==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")B.gcp={projectId:C(Z.vertexProjectId),region:C(Z.vertexRegion)};if($===W9&&(Z.azureApiVersion||Z.azureIdentity!==void 0))B.azure={apiVersion:C(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let D=Z.sapAiCoreUseOrchestrationMode??!0;B.sap={clientId:C(Q.sapAiCoreClientId),clientSecret:C(Q.sapAiCoreClientSecret),tokenUrl:C(Z.sapAiCoreTokenUrl),resourceGroup:C(Z.sapAiResourceGroup),deploymentId:D?void 0:C(W==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:D}}if($==="oca"){B.oca={mode:Z.ocaMode};let D=C(Q.ocaRefreshToken);if(D)B.auth={...B.auth??{},refreshToken:D}}if($==="qwen")B.apiLine=Z.qwenApiLine;if($==="moonshot")B.apiLine=Z.moonshotApiLine;if($==="zai")B.apiLine=Z.zaiApiLine;if($==="minimax")B.apiLine=Z.minimaxApiLine;let G={anthropic:Z.anthropicBaseUrl,openai:Z.openAiBaseUrl,ollama:Z.ollamaBaseUrl,lmstudio:Z.lmStudioBaseUrl,litellm:Z.liteLlmBaseUrl,gemini:Z.geminiBaseUrl,requesty:Z.requestyBaseUrl,asksage:Z.asksageApiUrl,dify:Z.difyBaseUrl,oca:Z.ocaBaseUrl,aihubmix:Z.aihubmixBaseUrl,sapaicore:Z.sapAiCoreBaseUrl},K=C(H[$]),F=C(G[$]),A={provider:J,...K?{apiKey:K}:{},...Y?{model:Y}:{},...F?{baseUrl:F}:{},...j?{reasoning:j}:{},...V?{timeout:V}:{},...B},L=z4.safeParse(A);if(!L.success)return;return Object.keys(A).filter((D)=>D!=="provider").length>0?L.data:void 0}function _C($,Z){if($!==EG)return;if(!Z.baseUrl||!Z.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:Z.baseUrl,defaultModelId:Z.model},models:{[Z.model]:{id:Z.model,name:Z.model,contextWindow:MG,maxInputTokens:MG,capabilities:["streaming","tools","images"]}}}}function zC($,Z){let Q=new Set;for(let J of[$.actModeApiProvider,$.planModeApiProvider]){let X=C(J);if(X)Q.add(X)}if(C(Z.apiKey))Q.add("anthropic");if(C(Z.openRouterApiKey))Q.add("openrouter");if(C(Z.openAiApiKey))Q.add(W9);if(C(Z.openAiNativeApiKey))Q.add("openai-native");if(C(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(C(Z.geminiApiKey))Q.add("gemini");if(C(Z.ollamaApiKey))Q.add("ollama");if(C(Z.awsAccessKey)||C(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||C($.awsProfile))Q.add("bedrock");if(C($.vertexProjectId)||C($.vertexRegion))Q.add("vertex");if(C(Z.clineApiKey))Q.add("cline");let W=NG(C(Z["cline:clineAccountId"]));if(W?.accessToken||W?.refreshToken||W?.accountId)Q.add("cline");if(C(Z.ocaApiKey))Q.add("oca");if(C(Z.sapAiCoreClientId)||C(Z.sapAiCoreClientSecret)||C($.sapAiCoreTokenUrl)||C($.sapAiCoreBaseUrl)||C($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function cW($){let Z=$.providerSettingsManager.read(),Q=FC($);if(!Q)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let{globalState:W,secrets:J}=Q,X=W.mode==="plan"?"plan":"act",Y=zC(W,J),j=u2();j.providers={...Z.providers},j.lastUsedProvider=Z.lastUsedProvider;let V=new Date().toISOString(),H=0,B=mW(BC($.providerSettingsManager.getFilePath()),"models.json"),G=gW(B),K=0;for(let L of Y){let f=vW(L);if(j.providers[f])continue;let D=LC(L,W,J,X);if(!D)continue;j.providers[f]={settings:D,updatedAt:V,tokenSource:"migration"},H+=1;let U=_C(f,D);if(U&&!G.providers[f])G.providers[f]=U,K+=1}if(H===0&&K===0)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let F=C(X==="plan"?W.planModeApiProvider:W.actModeApiProvider),A=F?vW(F):void 0;if(j.lastUsedProvider=Z.lastUsedProvider??(A&&j.providers[A]?A:Object.keys(j.providers)[0]),$.providerSettingsManager.write(j),K>0)fG(B,G);return{migrated:H>0||K>0,providerCount:Object.keys(j.providers).length,lastUsedProvider:j.lastUsedProvider}}function RC(){return new Date().toISOString()}var EC="cline",NC="cline-pass";function wC($){if(CG($)!=="providers.json")return;let Z=dW($);if(CG(Z)!=="settings")return;return dW(Z)}class Y${filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??MC(),this.dataDir=$.dataDir??wC(this.filePath),this.dataDir||!$.filePath)cW({providerSettingsManager:this,dataDir:this.dataDir});if(OG(this),Q9(this.read()),uW(this.filePath))try{wG(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!uW(this.filePath))return u2();try{let $=OC(this.filePath,"utf8"),Z=JSON.parse($),Q=o5.safeParse(Z);if(Q.success)return Q9(Q.data),Q.data}catch{}return u2()}write($){let Z=o5.parse($),Q=dW(this.filePath);if(!uW(Q))TC(Q,{recursive:!0,mode:448});qC(this.filePath,`${JSON.stringify(Z,null,2)}
580
- `,"utf8");try{wG(this.filePath,384)}catch{}Q9(Z)}saveProviderSettings($,Z={}){let Q=z4.parse($),W=this.read(),J=Q.provider,X=Z.setLastUsed!==!1,Y=W.providers[J],j=Z.tokenSource??Y?.tokenSource??"manual",V={...W,providers:{...W.providers,[J]:{settings:Q,updatedAt:RC(),tokenSource:j}},lastUsedProvider:X?J:W.lastUsedProvider};return this.write(V),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,J=B0(Z)?.storageProviderId;if(!J||J===Z)return Q;let X=$.providers[J]?.settings;if(!X)return Q;return z4.parse({...X.auth?{auth:X.auth}:{},...X.apiKey?{apiKey:X.apiKey}:{},...X.baseUrl?{baseUrl:X.baseUrl}:{},...Q??{},provider:Z})}getProviderSettings($){let Z=this.read();return this.resolveProviderSettings(Z,$)}resolveLastUsedProviderId($,Z){let Q=$.lastUsedProvider;if(Q===NC&&Z.isClinePassEnabled===!1)return EC;return Q}getLastUsedProviderSettings($={}){let Z=this.read(),Q=this.resolveLastUsedProviderId(Z,$);if(!Q)return;return this.resolveProviderSettings(Z,Q)}getProviderConfig($,Z){let Q=this.getProviderSettings($);if(!Q)return;return B1(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return B1(Z,$)}async refreshCatalog(){try{await J6({})}catch{}}}G0();g2();import{execFile as CC}from"node:child_process";import{promisify as PC}from"node:util";var p2=PC(CC);function O4($){let Z=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(Z?.history)?Z.history:[]).filter((W)=>!!W&&typeof W==="object"&&!Array.isArray(W)).flatMap((W)=>{let J=String(W.ref??"").trim(),X=Number(W.createdAt??0),Y=Number(W.runCount??0);if(J.length===0||!Number.isFinite(X)||!Number.isInteger(Y)||Y<1)return[];let j=W.kind==="stash"||W.kind==="commit"?W.kind:void 0;return[{ref:J,createdAt:X,runCount:Y,...j?{kind:j}:{}}]})}function PG($,Z){let Q=O4($).filter((J)=>J.runCount<=Z),W=Q.at(-1);return W?{latest:W,history:Q}:void 0}function J9($,Z){return $.reduce((Q,W)=>{if(W.runCount>Z)return Q;if(!Q||W.runCount>Q.runCount)return W;return Q},void 0)}function SG($,Z){let Q=0;for(let W=0;W<$.length;W+=1){let J=$[W];if(J?.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"?J.metadata:void 0)?.kind==="recovery_notice")continue;if(Q+=1,Q===Z)return W}throw Error(`Could not find user message for checkpoint run ${Z}`)}function SC($,Z){let Q=SG($,Z);return $.slice(0,Q+1)}function bG($,Z){let Q=SG($,Z);return $.slice(0,Q)}function yG($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=J9(O4($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:W,...$.restoreMessages!==!1?{messages:SC($.messages??[],Z)}:{}}}async function hG($,Z){if((await p2("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await p2("git",["-C",$,"cat-file","-e",`${Z.ref}^{commit}`],{windowsHide:!0}),await p2("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await p2("git",["-C",$,"clean","-fd"],{windowsHide:!0}),Z.kind==="commit"){await p2("git",["-C",$,"reset","--hard",Z.ref],{windowsHide:!0});return}await p2("git",["-C",$,"stash","apply",Z.ref],{windowsHide:!0})}class s0 extends Error{code;constructor($,Z){super(Z);this.code=$;this.name="SessionVersioningError"}}function bC($){let Z=$.sessionId.trim();if(!Z)throw new s0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new s0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new s0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new s0("invalid_restore","checkpointRunCount must be a positive integer");return Z}class r2{async restoreCheckpoint($){let Z=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,W=bC({sessionId:$.sessionId,restoreMessages:Z,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(W);if(!J)throw new s0("session_not_found",`Session ${W} not found`);let X=Z?await $.readMessages(W):void 0;if(Z&&X?.length===0)throw new s0("session_messages_not_found",`No messages found for session ${W}`);let Y=yG({session:J,messages:X,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:Z});if(Q)await($.applyWorkspaceCheckpoint??hG)(Y.cwd,Y.checkpoint);let j=t1({session:J,messages:X});if(!Z)return{checkpoint:Y.checkpoint,sourceSnapshot:j};let V=PG(J,$.checkpointRunCount),H=$.restore?.omitCheckpointMessageFromSession?bG(X??[],$.checkpointRunCount):Y.messages??[],B={sourceSession:J,sourceMessages:X,sourceSnapshot:j,plan:Y,restoredCheckpointMetadata:V,initialMessages:H,restoreMessages:Z,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new s0("invalid_restore","start is required when restore.messages is true");let G=$.buildStartInput?await $.buildStartInput(B,$.start):$.start,K=await $.startSession(G),F=$.getStartedSessionId?.(K);if(F)await($.retainCheckpointRefs??$B)(Y.cwd,F,V?.history??[]);let A=F&&$.readRestoredSession?await $.readRestoredSession(F):void 0;return{sessionId:F,startResult:K,messages:Y.messages,checkpoint:Y.checkpoint,sourceSnapshot:j,...A?{restoredSnapshot:t1({session:A,messages:H})}:{}}}}import{hasRuntimeConfigExtension as rC}from"@cline/shared";import{nanoid as iC}from"nanoid";r0();import{appendFileSync as yC,existsSync as i2,mkdirSync as kG,readdirSync as hC,readFileSync as IG,renameSync as kC,writeFileSync as IC}from"node:fs";import{join as lW}from"node:path";import{resolveTeamDataDir as xC}from"@cline/shared/storage";function xG(){return new Date().toISOString()}function pW($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function gG($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class X9{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??xC()}init(){this.ensureTeamDir()}listTeamNames(){if(!i2(this.teamDirPath))return[];return hC(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>i2(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let Z=this.readEnvelope($);return Z?.teamState?gG(Z.teamState):void 0}readHistory($,Z=200){let Q=this.historyPath($);if(!i2(Q))return[];return IG(Q,"utf8").split(`
581
- `).map((W)=>W.trim()).filter(Boolean).map((W)=>{try{return JSON.parse(W)}catch{return}}).filter((W)=>W!==void 0).reverse().slice(0,Z)}loadRuntime($){let Z=this.readEnvelope($);return{state:Z?.teamState?gG(Z.teamState):void 0,teammates:Z?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,Z){this.ensureTeamSubdir($),yC(this.historyPath($),`${JSON.stringify({ts:xG(),eventType:Z.type,payload:Z})}
582
- `,"utf8")}persistRuntime($,Z,Q){this.ensureTeamSubdir($);let W={version:1,updatedAt:xG(),teamState:Z,teammates:Q},J=this.statePath($),X=`${J}.tmp`;IC(X,`${JSON.stringify(W,null,2)}
583
- `,"utf8"),kC(X,J)}markInProgressRunsInterrupted($,Z){let Q=this.readEnvelope($);if(!Q?.teamState?.runs?.length)return[];let W=Q.teamState.runs.filter((X)=>X.status==="queued"||X.status==="running").map((X)=>X.id);if(W.length===0)return[];let J=new Date;return Q.teamState={...Q.teamState,runs:Q.teamState.runs.map((X)=>X.status==="queued"||X.status==="running"?{...X,status:"interrupted",error:Z,endedAt:J}:X)},this.persistRuntime($,Q.teamState,Q.teammates),W}ensureTeamDir(){if(!i2(this.teamDirPath))kG(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let Z=lW(this.ensureTeamDir(),pW($));if(!i2(Z))kG(Z,{recursive:!0});return Z}statePath($){return lW(this.ensureTeamDir(),pW($),"state.json")}historyPath($){return lW(this.ensureTeamDir(),pW($),"task-history.jsonl")}readEnvelope($){let Z=this.statePath($);if(!i2(Z))return;try{let Q=JSON.parse(IG(Z,"utf8"));if(Q?.version===1&&Q.teamState)return Q}catch{}return}}import{existsSync as gC,mkdirSync as mC}from"node:fs";import{join as vC}from"node:path";import{safeJsonParse as mG}from"@cline/shared";import{loadSqliteDb as cC,nowIso as rW}from"@cline/shared/db";import{resolveDbDataDir as uC}from"@cline/shared/storage";function dC(){return uC()}function n2($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function lC($){let Z=mG($);if(!Array.isArray(Z))return[];let Q=[];for(let W of Z){if(!W||typeof W!=="object")continue;let J=W,X=J.agentId,Y=J.rolePrompt;if(typeof X!=="string"||!X.trim())continue;if(typeof Y!=="string"||!Y.trim())continue;let j={agentId:X.trim(),rolePrompt:Y};if(typeof J.modelId==="string"&&J.modelId.trim())j.modelId=J.modelId.trim();if(typeof J.maxIterations==="number"&&Number.isFinite(J.maxIterations))j.maxIterations=Math.max(1,Math.floor(J.maxIterations));Q.push(j)}return Q}function pC($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class q4{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??dC()}init(){this.getRawDb()}ensureTeamDir(){if(!gC(this.teamDirPath))mC(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return vC(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=cC(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
573
+ ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}async function kN($){let Z=await hN($.providerConfig),Q="";for await(let W of Z.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(W.type==="text"){Q+=W.text;continue}if(W.type==="done"&&!W.success&&W.error)throw Error(W.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Q.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Q.trim()}function IN($){try{return JSON.stringify($).length}catch{return String($).length}}async function cB($){let Z=$.context.messages;if(Z.length<2)return;let Q=kB(Z,$.preserveRecentTokens,$.estimateMessageTokens);if(Q<=0||Q>=Z.length)return;let W=Z.slice(0,Q),J=hB(W),X=J>=0?RW(W[J])?.summary:void 0,Y=J>=0?W.slice(J+1):W;if(Y.length===0)return;let j=IB(W),V=PB(Y),H=gB({previousSummary:X,conversationText:V,fileOps:j});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:W.length,newMessagesToFold:Y.length,preservedMessages:Z.length-Q,previousSummaryChars:X?.length??0,conversationTextChars:V.length,summaryRequestChars:H.length,summaryRequestEstimatedTokens:OW(H.length),newMessagesJsonChars:IN(Y),maxInputTokens:$.context.maxInputTokens,triggerTokens:$.context.triggerTokens});let B=await kN({providerConfig:mB({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),request:H,logger:$.logger});if(!B.trim())return;let G=xB(B,j),K=Z.reduce((L,f)=>L+$.estimateMessageTokens(f),0),F=[vB({summary:G,fileOps:j,tokensBefore:K}),...Z.slice(Q)],A=F.reduce((L,f)=>L+$.estimateMessageTokens(f),0);return $.logger?.debug("Performed agentic compaction",{messagesBefore:Z.length,messagesAfter:F.length,messagesSummarized:Q,messagesPreserved:Z.length-Q,tokensBefore:K,tokensAfter:A,maxInputTokens:$.context.maxInputTokens}),{messages:F}}import{CHARS_PER_TOKEN as xN}from"@cline/shared";function gN($){if(U4($))return;if(typeof $.content==="string"){let Q=$.content.trim();return Q?{...$,content:Q}:void 0}let Z=$.content.filter((Q)=>Q.type!=="text"||Q.text.trim());if(Z.length===0)return;return{...$,content:Z.map((Q)=>Q.type==="text"?{...Q,text:Q.text.trim()}:Q.type==="tool_result"?{...Q,content:MW(Q.content)}:Q)}}function mN($,Z){return $.reduce((Q,W)=>Q+Z(W),0)}function uB($,Z){if($.length<=Z)return $;let Q=`
574
+ ...`,W=Math.max(1,Z-Q.length);return`${$.slice(0,W)}${Q}`}function dB($,Z){let Q=Number.isFinite(Z)?Math.max(1,Z):1,W=Math.max(16,Q*xN);if(typeof $.content==="string"){let Y=uB($.content,W).trim();return{...$,content:Y||"..."}}let J=W,X=$.content.map((Y)=>{if(Y.type!=="text"||J<=0)return Y;let j=uB(Y.text,J).trim();return J-=j.length,{...Y,text:j||"..."}});return{...$,content:X}}function vN($,Z){let Q=bB($),W=c5($),J=yB($),X=[],Y=0;for(let j=0;j<$.length;j+=1){let V=gN($[j]);if(!V)continue;let H=Z(V);Y+=H,X.push({index:j,message:V,estimatedTokens:H,toolPairIds:pB(V),isFirstUser:j===Q,isLastUser:j===W,isLastAssistant:j===J})}return{candidates:X,totalTokens:Y}}function lB($,Z,Q,W){let J=$[Z],X=J.estimatedTokens;return J.message=Q,J.estimatedTokens=W(Q),J.toolPairIds=pB(Q),J.estimatedTokens-X}function pB($){if(!Array.isArray($.content))return[];let Z=[];for(let Q of $.content)if(Q.type==="tool_use")Z.push(Q.id);else if(Q.type==="tool_result")Z.push(Q.tool_use_id);return Z}function cN($){let Z=new Map;for(let Q of $)for(let W of Q.toolPairIds){let J=Z.get(W);if(J)J.add(Q);else Z.set(W,new Set([Q]))}return Z}function uN($,Z,Q){let W=new Set,J=[Q],X=0;while(X<J.length){let Y=J[X];if(X+=1,Y===void 0||!$.has(Y)||W.has(Y))continue;W.add(Y);for(let j of Y.toolPairIds)for(let V of Z.get(j)??[])if(!W.has(V))J.push(V)}return W}function dN($,Z){let Q=0;for(let W of $){if(Z.has(W))continue;$[Q]=W,Q+=1}$.length=Q}function u5($,Z,Q,W){let J=new Set($),X=cN($);for(let Y=0;Y<$.length&&W>Q;){if(!Z($[Y])){Y+=1;continue}let j=uN(J,X,$[Y]);if(j.size===0){Y+=1;continue}let V=0;for(let H of j)V+=H.estimatedTokens,J.delete(H);W-=V,dN($,j)}return W}function lN($,Z,Q,W,J){if(Q<=Z)return Q;for(let Y=$.length-1;Y>=0&&Q>Z;Y-=1){let j=$[Y];if(j.isFirstUser)continue;let V=Math.max(wB,j.estimatedTokens-(Q-Z));if(V>=j.estimatedTokens)continue;Q+=lB($,Y,dB(j.message,V),J)}if(Q<=Z)return Q;let X=$.findIndex((Y)=>Y.isFirstUser);if(X>=0){if($[X].estimatedTokens<=W)return Q;while(Q>Z){let j=$[X],V=Math.max(1,j.estimatedTokens-(Q-Z));if(V>=j.estimatedTokens)break;let H=j.estimatedTokens;if(Q+=lB($,X,dB(j.message,V),J),j.estimatedTokens>=H)break}}return Q}function pN($,Z){return JSON.stringify($)!==JSON.stringify(Z)}function rN($){let Z=c5($);if(Z<0||Z===0&&!D4($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,Z),protectedTail:$.slice(Z)}}function rB($){let Z=Math.max(1,Math.min($.context.targetTokens??Math.floor($.context.triggerTokens*v5),$.context.maxInputTokens)),{compactable:Q,protectedTail:W}=rN($.context.messages);if(Q.length===0)return;let J=mN(W,$.estimateMessageTokens),X=Math.max(1,Z-J),Y=vN(Q,$.estimateMessageTokens),{candidates:j}=Y;if(j.length===0)return;let V=Y.totalTokens,H=V;H=u5(j,(F)=>F.message.role==="assistant"&&!F.isLastAssistant,X,H),H=u5(j,(F)=>F.message.role==="user"&&!F.isFirstUser&&!F.isLastUser,X,H),H=u5(j,(F)=>F.message.role==="assistant"&&F.isLastAssistant,X,H),H=u5(j,(F)=>F.message.role==="user"&&F.isLastUser&&!F.isFirstUser,X,H),H=lN(j,X,H,$.context.triggerTokens,$.estimateMessageTokens);let B=[...j.map((F)=>F.message),...W];if(!pN($.context.messages,B))return;let G=V+J,K=H+J;return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:B.length,messagesRemoved:$.context.messages.length-B.length,tokensBefore:G,tokensAfter:K,targetTokens:Z,maxInputTokens:$.context.maxInputTokens}),{messages:B}}var iN=0.5,nN=0.5;function iB($){try{return JSON.stringify($).length}catch{return String($).length}}function L4($){return typeof $==="number"&&Number.isFinite($)&&$>0}function aN($){let Z=[];if(L4($.configMaxInputTokens))Z.push($.configMaxInputTokens);if(L4($.modelMaxInputTokens))Z.push($.modelMaxInputTokens);if(L4($.contextWindow)){Z.push($.contextWindow);let Q=L4($.modelMaxTokens)?$.contextWindow-$.modelMaxTokens:void 0;if(L4(Q)&&Q>=$.contextWindow*iN)Z.push(Q)}return Z.length>0?Math.min(...Z):MB}function sN($){let Z=0,Q=0,W=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type!=="tool_result")continue;let Y=iB(X.content);Z+=1,Q+=Y,W=Math.max(W,Y)}}return{toolResultCount:Z,toolResultSerializedChars:Q,maxToolResultSerializedChars:W}}var oN={basic:({context:$,estimateMessageTokens:Z,logger:Q})=>rB({context:$,estimateMessageTokens:Z,logger:Q}),agentic:({context:$,providerConfig:Z,compaction:Q,mode:W,estimateMessageTokens:J,logger:X})=>cB({context:$,providerConfig:Z,summarizer:Q?.summarizer,preserveRecentTokens:W==="manual"?Math.min(Q?.preserveRecentTokens??qW,$.triggerTokens):Q?.preserveRecentTokens??qW,estimateMessageTokens:J,logger:X})};function tN($){if(typeof $.config.reserveTokens==="number"){let Q=Math.max(0,$.config.reserveTokens),W=Math.max(0,$.maxInputTokens-Q);return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio==="number"){let Q=$.config.thresholdRatio,W=$.maxInputTokens*Q;return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:Q}}let Z=Math.max(0,Math.min($.maxInputTokens-EB,$.maxInputTokens*RB));return{shouldCompact:$.inputTokens>Z,triggerTokens:Z,thresholdRatio:$.maxInputTokens>0?Z/$.maxInputTokens:0}}function eN($){let Z=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,Z)),W=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*Q)));return{triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}function $w($){let Z=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*nN):Math.floor($.triggerTokens*v5),Q=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(Z,$.maxInputTokens,Q))}function Zw($){let Z=0,Q=!1;for(let W of $)if(W.role==="user")Q=!0;else if(W.role==="assistant"&&Q)Z+=1,Q=!1;return Z}function EW($,Z={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let W=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=SB(),X=Q?.strategy??"basic",Y=oN[X],j=Z.mode??"auto",V=Q?.compact?"custom":X;return async(H)=>{let B=H.apiMessages.reduce((M,E)=>M+J(E),0),G=aN({configMaxInputTokens:Q?.maxInputTokens,modelMaxInputTokens:H.model.info?.maxInputTokens,contextWindow:H.model.info?.contextWindow,modelMaxTokens:H.model.info?.maxTokens}),K=tN({inputTokens:B,maxInputTokens:G,config:{maxInputTokens:Q?.maxInputTokens,reserveTokens:Q?.reserveTokens,thresholdRatio:Q?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:j,strategy:X,iteration:H.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:B,maxInputTokens:G,triggerTokens:K.triggerTokens,thresholdRatio:K.thresholdRatio,shouldCompact:K.shouldCompact,messageCount:H.messages.length,apiMessageCount:H.apiMessages.length,apiMessagesJsonChars:iB(H.apiMessages),...sN(H.apiMessages)}),j==="auto"&&!K.shouldCompact)return;let F=j==="manual"?eN({inputTokens:B,maxInputTokens:G,autoTriggerTokens:K.triggerTokens,manualTargetRatio:Z.manualTargetRatio}):K,A=j==="auto"?$w({maxInputTokens:G,modelMaxTokens:H.model.info?.maxTokens,triggerTokens:F.triggerTokens,messagePairCount:Zw(H.messages)}):void 0,L={agentId:H.agentId,conversationId:H.conversationId,parentAgentId:H.parentAgentId,iteration:H.iteration,messages:H.messages,model:H.model,maxInputTokens:G,triggerTokens:F.triggerTokens,targetTokens:A,thresholdRatio:F.thresholdRatio,utilizationRatio:G>0?B/G:0},f=j==="manual"?"manual_compaction":"auto_compaction";H.emitStatusNotice?.(j==="manual"?"compacting":"auto-compacting",{kind:f,reason:f,iteration:H.iteration,triggerTokens:F.triggerTokens,maxInputTokens:G});let D=H.messages.length,U=Date.now(),T=Q?.compact?await Q.compact(L):await Y({context:L,providerConfig:{...W,abortSignal:H.abortSignal},compaction:Q,mode:j,estimateMessageTokens:J,logger:$.logger}),q=Date.now()-U,z=$.sessionId??H.conversationId,_={agentId:H.agentId,conversationId:H.conversationId,parentAgentId:H.parentAgentId??void 0};if(T?.messages){let M=T.messages.reduce((E,P)=>E+J(P),0);$.logger?.log("Context compaction completed",{severity:"info",strategy:X,maxInputTokens:G,inputTokens:B,afterTokens:M,tokensSaved:B-M,utilizationBefore:`${(B/G*100).toFixed(1)}%`,utilizationAfter:`${(M/G*100).toFixed(1)}%`,thresholdTrigger:`${(F.thresholdRatio*100).toFixed(1)}%`,messagesBefore:D,messagesAfter:T.messages.length,messagesRemoved:D-T.messages.length}),BZ($.telemetry,{ulid:z,strategy:V,mode:j,messagesBefore:D,messagesAfter:T.messages.length,messagesRemoved:D-T.messages.length,tokensBefore:B,tokensAfter:M,tokensSaved:B-M,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:q,provider:$.providerId,modelId:$.modelId,..._})}else GZ($.telemetry,{ulid:z,strategy:V,mode:j,reason:"no_result",tokensBefore:B,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:q,provider:$.providerId,modelId:$.modelId,..._});return T}}G0();function _0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function f0($,Z){return{inputTokens:$.inputTokens+Math.max(0,Z.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,Z.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,Z.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,Z.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,Z.totalCost??0)}}function d5($){let Z=_0();for(let Q of $)Z=f0(Z,Q);return Z}function v2($){return typeof $==="number"&&Number.isFinite($)?$:0}function l5($){let Z=_0();for(let Q of $){let W=Q.metrics;if(!W)continue;Z=f0(Z,{inputTokens:v2(W.inputTokens),outputTokens:v2(W.outputTokens),cacheReadTokens:v2(W.cacheReadTokens),cacheWriteTokens:v2(W.cacheWriteTokens),totalCost:v2(W.cost)})}return Z}function Qw($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let W=v2(Q.metrics?.inputTokens);return W>0?W:void 0}return}function Ww($){if(!$||typeof $!=="object")return;let Z=$,Q=Z.skill??Z.skill_name??Z.skillName;if(typeof Q!=="string")return;let W=Q.trim();return W.length>0?W:void 0}function NW($){if(!$||typeof $!=="object")return{};let Z=$;return{agentId:typeof Z.agentId==="string"?Z.agentId:void 0,conversationId:typeof Z.conversationId==="string"?Z.conversationId:void 0,parentAgentId:typeof Z.parentAgentId==="string"?Z.parentAgentId:void 0}}function q1($){let Z=$.agentId?.trim();if(!Z)return;let Q=$.parentAgentId?.trim()||void 0,W=$.teamRole,J="root";if(W==="teammate")J="team_teammate";else if(W==="lead")J="team_lead";else if(Q)J="subagent";return{agentId:Z,agentKind:J,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Q,createdByAgentId:$.createdByAgentId?.trim()||Q||void 0,isSubagent:Boolean(Q),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:W,teamAgentId:$.teamAgentId?.trim()||void 0}}function Jw($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function Xw($){let Z=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of Z){let W=Q?.trim();if(W)return W}return $.isPrimaryAgentEvent?"root":"unknown"}function wW($,Z,Q){let{sessionId:W,config:J,liveSession:X,emit:Y}=$,j=J.telemetry,V=X?.runtime.teamRuntime,H=Q?.isPrimaryAgentEvent??!0,B=NW(Z),G=q1({agentId:Q?.agentId??B.agentId,conversationId:Q?.conversationId??B.conversationId,parentAgentId:Q?.parentAgentId??B.parentAgentId,createdByAgentId:Q?.createdByAgentId,teamId:Q?.teamId??V?.getTeamId(),teamName:Q?.teamName??V?.getTeamName(),teamRole:Q?.teamRole,teamAgentId:Q?.teamAgentId});if(Z.type==="content_start"&&Z.contentType==="tool"&&Z.toolName==="skills"){let K=Ww(Z.input);if(K)WZ(j,{ulid:W,skillName:K,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:J.providerId,modelId:J.modelId,...G})}if(Z.type==="content_end"&&Z.contentType==="tool"){let K=Z.toolName??"unknown",F=!Z.error;if(Q8(j,{ulid:W,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))JZ(j,{ulid:W,modelId:J.modelId,provider:J.providerId,errorType:Z.error,...G})}if(Z.type==="notice"&&Z.reason==="api_error")u4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.message,...G});if(Z.type==="error")u4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.error?.message??"unknown error",...G});if(Z.type==="usage"&&X?.turnUsageBaseline){let K=Jw(Z);if(H){X.turnPrimaryUsage=f0(X.turnPrimaryUsage??_0(),K);let A=f0(X.turnUsageBaseline,X.turnPrimaryUsage);$.usageBySession.set(W,A),Z8(j,{ulid:W,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),ZZ(j,{ulid:W,tokensIn:Z.inputTokens,tokensOut:Z.outputTokens,cacheWriteTokens:Z.cacheWriteTokens,cacheReadTokens:Z.cacheReadTokens,totalCost:Z.cost,model:J.modelId,...G})}else{let A=Xw({isPrimaryAgentEvent:H,overrides:Q,eventMetadata:B}),L=X.turnUsageByAgent??new Map;X.turnUsageByAgent=L,L.set(A,f0(L.get(A)??_0(),K))}let F=f0(X.turnPrimaryUsage??_0(),d5(X.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(W,f0(X.turnAggregateUsageBaseline??X.turnUsageBaseline,F))}if(Z.type==="iteration_end"&&H)$.persistMessages(W,X?.agent.getMessages()??[],X?.config.systemPrompt);Y({type:"agent_event",payload:{sessionId:W,event:Z,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(H?"lead":void 0):void 0}}),Y({type:"chunk",payload:{sessionId:W,stream:"agent",chunk:WH(Z),ts:Date.now()}})}function W$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as yw}from"@cline/shared";import{spawn as Aw}from"node:child_process";import{appendFileSync as fw,readFileSync as Uw}from"node:fs";import{join as Dw}from"node:path";import{augmentNodeCommandForDebug as oB,withResolvedClineBuildEnv as hW}from"@cline/shared";import{ensureHookLogDir as aB}from"@cline/shared/storage";function p5($,Z){if(!Z)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:Z}}import{existsSync as Yw,readdirSync as jw}from"node:fs";import{basename as Vw,extname as Hw,join as Bw}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as nB,resolveHooksConfigSearchPaths as Gw}from"@cline/shared/storage";function CW($){return Gw($)}var r5;((B)=>{B.TaskStart="TaskStart";B.TaskResume="TaskResume";B.TaskCancel="TaskCancel";B.TaskComplete="TaskComplete";B.TaskError="TaskError";B.PreToolUse="PreToolUse";B.PostToolUse="PostToolUse";B.UserPromptSubmit="UserPromptSubmit";B.PreCompact="PreCompact";B.SessionShutdown="SessionShutdown"})(r5||={});var PW={["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"},Kw=new Map(Object.values(r5).map(($)=>[$.toLowerCase(),$])),Fw=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function SW($){let Z=Hw($).toLowerCase();if(!Fw.has(Z))return;let Q=Vw($,Z).trim().toLowerCase();return Kw.get(Q)}function c2($){let Z=[],Q=new Set,W=CW($).filter((J)=>Yw(J));for(let J of W)try{for(let X of jw(J,{withFileTypes:!0})){if(!X.isFile())continue;let Y=SW(X.name);if(!Y)continue;let j=Bw(J,X.name);if(Q.has(j))continue;Q.add(j),Z.push({fileName:Y,hookEventName:PW[Y],path:j})}}catch{}return Z.sort((J,X)=>J.path.localeCompare(X.path))}function n5($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))Z[Q]=typeof W==="string"?W:JSON.stringify(W);return Z}function i5($,Z,Q){let W=Q instanceof Error?`: ${Q.message}`:"",J=`${Z}${W}`;if($){try{$.log(J,{severity:"warn",...Q!==void 0?{error:Q}:{}})}catch{}return}console.warn(J)}function Lw($,Z){if(!Z)return $;if(!$)return{...Z};let Q=[$.context,Z.context].filter((J)=>typeof J==="string"&&J.length>0).join(`
575
+ `),W=[...$.appendMessages??[],...Z.appendMessages??[]];return{cancel:$.cancel===!0||Z.cancel===!0?!0:void 0,review:$.review===!0||Z.review===!0?!0:void 0,context:Q||void 0,overrideInput:Z.overrideInput!==void 0?Z.overrideInput:$.overrideInput,systemPrompt:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,appendMessages:W.length>0?W:void 0}}function _w($){if(!$||typeof $!=="object")return;let Z=$,Q=typeof Z.context==="string"?Z.context:typeof Z.contextModification==="string"?Z.contextModification:typeof Z.errorMessage==="string"?Z.errorMessage:void 0;return{cancel:typeof Z.cancel==="boolean"?Z.cancel:void 0,review:typeof Z.review==="boolean"?Z.review:void 0,context:Q,overrideInput:Object.hasOwn(Z,"overrideInput")?Z.overrideInput:void 0}}function bW($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function U0($,Z){let Q=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",W={rootSessionId:Z.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:W,workspaceRoots:Z.workspacePath?[Z.workspacePath]:[],workspaceInfo:Z.workspaceInfo,userId:Q,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function zw($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
576
+ `).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse hook stdout JSON"}}}async function Tw($,Z){let Q=$.stdin;if(!Q)throw Error("hook command failed to create stdin");await new Promise((W,J)=>{let X=!1,Y=()=>{Q.off("error",V),Q.off("finish",H),$.off("close",B)},j=(G)=>{if(X)return;if(X=!0,Y(),G){let K=G.code;if(K==="EPIPE"||K==="ERR_STREAM_DESTROYED"){W();return}J(G);return}W()},V=(G)=>j(G),H=()=>j(),B=()=>j();Q.on("error",V),Q.once("finish",H),$.once("close",B);try{Q.end(Z)}catch(G){j(G)}})}async function tB($,Z){if(Z.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await sB($,Z)}catch(Q){let W=Mw(Z.command,process.platform,Q);if(!W)throw Q;return await sB($,{...Z,command:W})}}async function sB($,Z){let Q=oB(Z.command,{env:Z.env,debugRole:"hook"}),W=Aw(Q[0],Q.slice(1),{cwd:Z.cwd,env:hW(Z.env),stdio:Z.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Z.detached,windowsHide:!0}),J=new Promise((K)=>{W.once("spawn",()=>K())}),X=new Promise((K,F)=>{W.once("error",(A)=>F(A))}),Y=JSON.stringify($);if(await Promise.race([J,X]),await Tw(W,Y),Z.detached){W.unref();return}if(!W.stdout||!W.stderr)throw Error("hook command failed to create stdout/stderr");let j="",V="",H=!1,B;W.stdout.on("data",(K)=>{j+=K.toString()}),W.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((Z.timeoutMs??0)>0)B=setTimeout(()=>{H=!0,W.kill("SIGKILL")},Z.timeoutMs);W.once("close",(F)=>{if(B)clearTimeout(B);let{parsedJson:A,parseError:L}=zw(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:H})})});return await Promise.race([G,X])}function Ow($){try{let Q=Uw($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Q?.startsWith("#!"))return;let W=Q.slice(2).trim();if(!W)return;let J=W.split(/\s+/).filter(Boolean);return J.length>0?J:void 0}catch{return}}function qw($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function Mw($,Z=process.platform,Q){if(Z!=="win32"||!qw(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function eB($){if($.length===0)return;let[Z,...Q]=$,W=Z.replace(/\\/g,"/").toLowerCase(),J=W.split("/").at(-1)??W;if(J==="env")return eB(Q);if(J==="bash"||J==="sh"||J==="zsh")return[J,...Q];if(J==="python3"||J==="python")return process.platform==="win32"?["py","-3",...Q]:[J,...Q];return $}function Rw($){let Z=Ow($);if(Z&&Z.length>0)return[...eB(Z)??Z,$];let Q=$.toLowerCase();if(Q.endsWith(".sh")||Q.endsWith(".bash")||Q.endsWith(".zsh"))return["bash",$];if(Q.endsWith(".js")||Q.endsWith(".mjs")||Q.endsWith(".cjs"))return oB(["node",$],{debugRole:"hook"});if(Q.endsWith(".ts")||Q.endsWith(".mts")||Q.endsWith(".cts"))return["bun","run",$];if(Q.endsWith(".py"))return process.platform==="win32"?["py","-3",$]:["python3",$];if(Q.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",$];return["bash",$]}function Ew($){let Z={};for(let Q of c2($)){if(!Q.hookEventName)continue;let W=Q.hookEventName,J=Z[W]??[];J.push(Rw(Q.path)),Z[W]=J}return Z}async function Nw($){let Z;for(let Q of $.commands){let W=Q.join(" ");try{let J=await tB($.payload,{command:Q,cwd:$.cwd,env:hW(process.env),detached:!1,timeoutMs:$.timeoutMs});if(J?.timedOut){i5($.logger,`hook command timed out: ${W}`);continue}if(J?.parseError){i5($.logger,`hook command returned invalid JSON control output: ${W} (${J.parseError})`);continue}Z=Lw(Z,_w(J?.parsedJson))}catch(J){i5($.logger,`hook command failed: ${W}`,J)}}return Z}function l$($){for(let Z of $.commands){let Q=Z.join(" ");tB($.payload,{command:Z,cwd:$.cwd,env:hW(process.env),detached:!0}).catch((W)=>{i5($.logger,`hook command failed: ${Q}`,W)})}}function J$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function yW($,Z){return{...J$($.snapshot),userMessage:Z}}function $G($){return{...J$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function ZG($){return{...J$($.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 QG($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function ww($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}function a5($){let Z={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(W)=>{let J=`${JSON.stringify({ts:new Date().toISOString(),...W})}
577
+ `,Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??Dw(aB(),"hooks.jsonl");aB(Y),fw(Y,J,"utf8")};return{beforeRun:async(W)=>{let J=yW(W,"");Q({...U0(J,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(W)=>{let J=$G(W);Q({...U0(J,Z),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:n5(J.call.input)}});return},afterTool:async(W)=>{let J=ZG(W);Q({...U0(J,Z),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:n5(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:W,result:J})=>{let X=J$(W);if(J.status==="completed"){Q({...U0(X,Z),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||bW(J.error?.message)){Q({...U0(X,Z),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Q({...U0(X,Z),hookName:"agent_error",iteration:J.iterations,error:{name:J.error.name,message:J.error.message,stack:J.error.stack}})},onEvent:async(W)=>{if(W.type!=="message-added"||W.message.role!=="user")return;let J=yW({snapshot:W.snapshot},QG(W.message.content));Q({...U0(J,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function kW($){let Z=Ew($.workspacePath);if(!Object.values(Z).some((G)=>G.length>0))return;let W=async(G,K)=>{let F=Z[K]??[];if(F.length===0)return;l$({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...U0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...U0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=Z.prompt_submit??[];if(K.length>0)l$({commands:K,cwd:$.cwd,logger:$.logger,payload:{...U0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},X=async(G)=>{let K=Z.tool_call??[];if(K.length===0)return;return Nw({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...U0(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:n5(G.call.input)}}})},Y=async(G)=>{let K=Z.tool_result??[];if(K.length===0)return;l$({commands:K,cwd:$.cwd,logger:$.logger,payload:{...U0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:n5(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}}})},j=async(G)=>{let K=Z.agent_end??[];if(K.length===0)return;l$({commands:K,cwd:$.cwd,logger:$.logger,payload:{...U0(G,$),hookName:"agent_end",iteration:G.iteration,turn:G.turn,taskComplete:{taskMetadata:{}}}})},V=async(G)=>{let K=Z.agent_error??[];if(K.length===0)return;l$({commands:K,cwd:$.cwd,logger:$.logger,payload:{...U0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},H=async(G)=>{if(bW(G.reason)){let F=Z.agent_abort??[];if(F.length>0)l$({commands:F,cwd:$.cwd,logger:$.logger,payload:{...U0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=Z.session_shutdown??[];if(K.length===0)return;l$({commands:K,cwd:$.cwd,logger:$.logger,payload:{...U0(G,$),hookName:"session_shutdown",reason:G.reason}})},B={};if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0||(Z.prompt_submit?.length??0)>0){if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0)B.beforeRun=async(G)=>{let K=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await W(J$(G.snapshot),K);return};if((Z.prompt_submit?.length??0)>0)B.onEvent=async(G)=>{if(G.type!=="message-added"||G.message.role!=="user")return;await J(yW({snapshot:G.snapshot},QG(G.message.content)))}}if((Z.tool_call?.length??0)>0)B.beforeTool=async(G)=>{let K=await X($G(G));return ww(K)};if((Z.tool_result?.length??0)>0)B.afterTool=async(G)=>{await Y(ZG(G));return};if((Z.agent_end?.length??0)>0)B.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await j({...J$(G),iteration:K.iterations,turn:{outputText:K.outputText,status:K.status}})};if((Z.agent_error?.length??0)>0||(Z.agent_abort?.length??0)>0||(Z.session_shutdown?.length??0)>0){let G=B.afterRun;B.afterRun=async(K)=>{await G?.(K);let{snapshot:F,result:A}=K;if(A.status==="aborted"||bW(A.error?.message)){await H({...J$(F),reason:A.error?.message});return}if(A.error)await V({...J$(F),iteration:A.iterations,error:A.error})}}return B}function s5($){return p5("core.hook_config_files",kW($))}function p$($,Z){let Q=$.map((W)=>W[Z]).filter((W)=>typeof W==="function");if(Q.length===0)return;return async(W)=>{let J;for(let X of Q){let Y=await X(W);if(!Y||typeof Y!=="object")continue;let j=Y;J={...J??{},...j,stop:J?.stop===!0||j.stop===!0?!0:j.stop,options:J?.options||j.options?{...J?.options??{},...j.options??{}}:void 0}}return J}}function _4($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:p$(Z,"beforeRun"),afterRun:p$(Z,"afterRun"),beforeModel:p$(Z,"beforeModel"),afterModel:p$(Z,"afterModel"),beforeTool:p$(Z,"beforeTool"),afterTool:p$(Z,"afterTool"),onEvent:p$(Z,"onEvent")}}import{z as X$}from"zod";var z4=H2;var WG=X$.object({settings:H2,updatedAt:X$.string().datetime(),tokenSource:X$.enum(["manual","oauth","migration"]).default("manual")}),o5=X$.object({version:X$.literal(1),lastUsedProvider:X$.string().min(1).optional(),providers:X$.record(X$.string(),WG)});function u2(){return{version:1,providers:{}}}r0();import{upsertWorkspaceInfo as Cw,WorkspaceManifestSchema as IW}from"@cline/shared";class t5{manifest;listeners=new Set;constructor($){this.manifest=IW.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await U5($);return this.manifest=Cw(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=b$($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=IW.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let W=await this.addWorkspacePath(Z);return this.manifest=IW.parse({...this.manifest,currentWorkspacePath:W.rootPath}),this.emit({type:"workspace_switched",workspace:W}),W}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=b$($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}G0();import{createHash as Pw}from"node:crypto";var JG=new Set,XG=new Set;function Sw($){return Pw("sha256").update($).digest("hex")}function bw($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function YG($){if(!$.telemetry)return;let Z=Sw($.rootPath),Q=$.rootCount??1;if(!JG.has(Z))JG.add(Z),o9($.telemetry,{root_count:Q,vcs_types:bw($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!XG.has(Z)){XG.add(Z);let W=Error($.initError.message);W.name=$.initError.errorType||"Error",t9($.telemetry,W,{fallback_to_single_root:!0,workspace_count:Q})}}function hw($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function kw($,Z,Q){if(Z.length>0)for(let X of Z)Q?.log(X.message,{severity:"warn"});if($.length===0)return;let W=$.slice(0,3).map(hw).join("; "),J=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${W}${J}. Use --verbose for more details.`,{severity:"warn"});for(let X of $)Q?.log(`Plugin initialization failed (${X.phase}) for ${X.pluginPath}`,{severity:"warn",stack:X.stack,pluginPath:X.pluginPath,pluginName:X.pluginName})}function Iw($,Z){let Q=typeof $.thinking==="boolean",W=typeof $.reasoningEffort==="string";if(!Q&&!W)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...W?{effort:$.reasoningEffort}:{}}}function jG($,Z){return yw($,Z)}function xw($){let Z=0;for(let Q of $??[]){if(Q.role!=="user")continue;if(("metadata"in Q&&Q.metadata&&typeof Q.metadata==="object"&&!Array.isArray(Q.metadata)?Q.metadata:void 0)?.kind==="recovery_notice")continue;Z+=1}return Z}function gw($){let Z={...$.storedHeaders??{},...$.configHeaders??{}},Q=$.accountId?.trim()||mw($.accessToken);if(Z.originator="cline",Z.session_id=$.sessionId,Z["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,Q)Z["ChatGPT-Account-Id"]=Q;return Z}function mw($){let Z=$?.trim();if(!Z)return;let Q=z0(Z),W=Q?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let J=Q?.organizations?.[0]?.id;if(typeof J==="string"&&J.length>0)return J;let X=Q?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;return}function vw($,Z,Q,W,J){let X=Q.getProviderSettings($.providerId),Y=W||X?.modelCatalog?{...W??{},...X?.modelCatalog??{}}:void 0,j=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,V={...X??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??X?.apiKey,baseUrl:$.baseUrl??X?.baseUrl,headers:$.providerId==="openai-codex"?gw({sessionId:Z,configHeaders:$.headers,storedHeaders:X?.headers,accountId:X?.auth?.accountId,accessToken:$.apiKey??X?.auth?.accessToken??X?.apiKey}):$.headers??X?.headers,reasoning:Iw($,X?.reasoning),modelCatalog:Y},H={...B1(V),...j??{}};if($.knownModels)H.knownModels=$.knownModels;if($.extensionContext)H.extensionContext=$.extensionContext;let G=$.fetch??H.fetch??J;if(G)H.fetch=G;return H}async function VG($){let{input:Z,sessionId:Q,providerSettingsManager:W,defaultTelemetry:J,defaultCapabilities:X,defaultToolPolicies:Y,defaultFetch:j,onPluginEvent:V,onTeamEvent:H,createSubAgentLifecycleCallbacks:B,createSpawnTool:G,localRuntime:K,readSessionMetadata:F,writeSessionMetadata:A}=$,L=W$(Z.config),{modelCatalogDefaults:f,userInstructionService:D,configExtensions:U,onTeamRestored:T,...q}=K??{},z=Object.keys(q).length>0?q:void 0,{workspaceInfo:_,workspaceMetadata:M,durationMs:E,vcsType:P,initError:c}=await mV(L),n=z?.extensionContext,a={...n??{},workspace:{..._,...n?.workspace??{}},session:{...n?.session??{},sessionId:Q},logger:n?.logger??z?.logger,telemetry:n?.telemetry??z?.telemetry??J};YG({telemetry:a.telemetry,rootPath:_.rootPath,workspaceInfo:_,rootCount:1,vcsType:P,durationMs:E,initError:c,featureFlagEnabled:!0});let t=s5({cwd:Z.config.cwd,workspacePath:L,rootSessionId:Q,logger:z?.logger,workspaceInfo:_}),p0=QH(z?.hooks)?void 0:a5({rootSessionId:Q,workspacePath:L,workspaceInfo:_}),K$=_4([z?.hooks,p0]),d;if(jG(U,"plugins"))try{d=await L6({pluginPaths:z?.pluginPaths,workspacePath:L,cwd:Z.config.cwd,onEvent:V,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:_,session:a.session,client:a.client,user:a.user,logger:a.logger,telemetry:a.telemetry,automation:a.automation}),kw(d.failures,d.warnings,z?.logger)}catch(W2){let r9=W2 instanceof Error?W2.message:String(W2);z?.logger?.log?.(`plugin loading failed; continuing without plugins (${r9})`)}let N=b7(t?[t]:void 0,b7(z?.extensions,dZ(d?.extensions))),X0=jG(U,"plugins")?T$(d?.pluginPaths??[]):void 0,Y0={...Z.config,...z??{},sessionId:Q,hooks:K$,extensions:N,extensionContext:a,telemetry:a.telemetry},R0=vw(Y0,Q,W,f,j),Z2=_4([Y0.hooks,Y0.checkpoint?.enabled===!0?ZB({cwd:Y0.cwd,sessionId:Q,logger:Y0.logger,createCheckpoint:Y0.checkpoint?.createCheckpoint,initialRunCount:xw(Z.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),Y1={...Y0,providerConfig:R0,workspaceMetadata:M,hooks:Z2},t0=Z.toolPolicies??Y0.toolPolicies??Y,$8=O0(X,Z.capabilities),Q2=$8?.requestToolApproval,I4=$8?.toolExecutors,j1=B?.(Y1),x4=new t5({currentWorkspacePath:_.rootPath,workspaces:{[_.rootPath]:_}});return{effectiveInput:Z,config:Y1,providerConfig:R0,workspaceMetadata:M,workspaceInfo:_,extensions:N,hooks:Z2,toolPolicies:t0,requestToolApproval:Q2,pluginSandboxShutdown:d?.shutdown,runtimeBuilderInput:{config:Y1,hooks:Z2,extensions:N,onTeamEvent:H,createSpawnTool:G,onTeamRestored:T,onSubAgentEvent:j1?.onSubAgentEvent,onSubAgentStart:j1?.onSubAgentStart,onSubAgentEnd:j1?.onSubAgentEnd,userInstructionService:D,pluginSkillDirectories:X0,configExtensions:U,toolExecutors:I4,toolPolicies:t0,workspaceManager:x4,logger:Y1.logger,telemetry:Y1.telemetry,requestToolApproval:Q2}}}import{resolveDocumentsExtensionPath as cw}from"@cline/shared/storage";G0();function HG($,Z,Q,W,J){if(Q)$Z($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});else e9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});uw($.telemetry,{workspacePath:W})}function uw($,Z){let Q=cw("Hooks"),W=c2(Z.workspacePath),J=new Map;for(let X of W){let Y=X.hookEventName??"unknown",j=J.get(Y)??{global:0,workspace:0};if(X.path===Q||X.path.startsWith(`${Q}/`))j.global+=1;else j.workspace+=1;J.set(Y,j)}for(let[X,Y]of J.entries())HZ($,X,Y.global,Y.workspace)}function BG($,Z){for(let Q of Z.mentions)jZ($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)XZ($,"file",Q.length);for(let Q of Z.ignoredMentions)YZ($,"file","not_found",Q)}import{chmodSync as wG,existsSync as uW,mkdirSync as OC,readFileSync as qC,writeFileSync as MC}from"node:fs";import{basename as CG,dirname as dW}from"node:path";import{resolveProviderSettingsPath as RC}from"@cline/shared/storage";import{existsSync as dw,mkdirSync as lw,readFileSync as pw,writeFileSync as rw}from"node:fs";import{mkdir as iw,readFile as nw,writeFile as aw}from"node:fs/promises";import{dirname as xW,join as sw}from"node:path";import*as w0 from"@cline/llms";import{ModelCapabilitySchema as ow,ProviderCapabilitySchema as tw,ProviderClientSchema as ew,ProviderProtocolSchema as $C}from"@cline/shared";import{z as p}from"zod";var ZC=p.object({id:p.string().optional(),name:p.string().optional(),maxTokens:p.number().optional(),contextWindow:p.number().optional(),maxInputTokens:p.number().optional(),capabilities:p.array(ow).optional(),supportsVision:p.boolean().optional(),supportsAttachments:p.boolean().optional(),supportsReasoning:p.boolean().optional()}).passthrough(),QC=p.object({name:p.string(),baseUrl:p.string(),defaultModelId:p.string().optional(),protocol:$C.optional(),client:ew.optional(),capabilities:p.array(tw).optional(),modelsSourceUrl:p.string().optional()}).passthrough(),GG=p.object({provider:QC.optional(),models:p.record(p.string(),ZC).optional()}).passthrough(),KG=p.object({version:p.literal(1),providers:p.record(p.string(),GG)}),WC=p.object({version:p.literal(1),providers:p.record(p.string(),p.unknown())}),e5=new Set;function FG($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function r$($){return sw(xW($.getFilePath()),"models.json")}function $9(){return{version:1,providers:{}}}function AG($){let Z=WC.safeParse($);if(!Z.success)return $9();let Q={};for(let[W,J]of Object.entries(Z.data.providers)){let X=GG.safeParse(J);if(X.success)Q[W]=X.data}return{version:1,providers:Q}}function gW($){if(!dw($))return $9();try{let Z=pw($,"utf8");return AG(JSON.parse(Z))}catch{}return $9()}async function d2($){try{let Z=await nw($,"utf8");return AG(JSON.parse(Z))}catch{}return $9()}function fG($,Z){lw(xW($),{recursive:!0});let Q=KG.parse(Z);rw($,`${JSON.stringify(Q,null,2)}
578
+ `,"utf8")}async function Z9($,Z){await iw(xW($),{recursive:!0});let Q=KG.parse(Z);await aw($,`${JSON.stringify(Q,null,2)}
579
+ `,"utf8")}function UG($,Z){return{id:$,name:Z.name??$,supportsAttachments:Z.capabilities?.includes("files"),supportsVision:Z.capabilities?.includes("images"),supportsReasoning:Z.capabilities?.includes("reasoning")||Z.thinkingConfig!=null}}function DG($){if(!$||$.length===0)return;let Z=new Set;if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("tools"))Z.add("tools");return Z.size>0?[...Z]:void 0}function LG($){let Z=new Set;if(!$||$.length===0)return[...Z];if($.includes("streaming"))Z.add("streaming");if($.includes("tools"))Z.add("tools");if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("vision"))Z.add("images"),Z.add("files");return[...Z]}function JC($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function _G($,Z){return $??Z??"openai-chat"}function zG($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function TG($,Z,Q){let W=new Set(Z?.capabilities??Q??[]);if(Z?.supportsVision)W.add("images");if(Z?.supportsAttachments)W.add("files");if(Z?.supportsReasoning)W.add("reasoning");return{id:$,name:Z?.name??$,maxTokens:Z?.maxTokens,contextWindow:Z?.contextWindow,maxInputTokens:Z?.maxInputTokens,capabilities:W.size>0?[...W]:void 0}}function XC($,Z){for(let[Q,W]of Object.entries(Z??{})){let J=W.id?.trim()||Q.trim();if(!J)continue;w0.registerModel($,J,TG(J,W))}}function YC($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function jC($){return Object.assign({},...w0.resolveProviderModelCatalogKeys($).map((Q)=>w0.getGeneratedModelsForProvider(Q)))}function VC($){let Z=$.provider.trim();if(!Z||w0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let W=w0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],J=jC(Z),X=LG($.capabilities),Y=X.length>0?X:void 0,j=$.model?.trim(),V={...J,...W?.models??{}};if(j)V[j]=YC(j,V[j],Y);let H=Object.keys(V).filter(Boolean),B=j||H[0];if(!B)return;let G=_G($.protocol,W?.provider.protocol),K=zG($.client,G,W?.provider.client);w0.registerProvider({provider:{id:Z,name:W?.provider.name??FG(Z),description:W?.provider.description,protocol:G,client:K,baseUrl:Q,modelsSourceUrl:W?.provider.modelsSourceUrl,defaultModelId:B,capabilities:DG($.capabilities)??W?.provider.capabilities,source:"file"},models:V})}function Q9($){for(let Z of Object.values($.providers))VC(Z.settings)}function T4($,Z){let Q=Z.models??{};if(!JC(Z.provider)){XC($,Q);return}let W=LG(Z.provider.capabilities),J=Object.entries(Q).map(([H,B])=>({id:B.id?.trim()||H.trim(),model:B})).filter(({id:H})=>H.length>0),X=Z.provider.defaultModelId?.trim()||J[0]?.id||"default",Y=_G(Z.provider.protocol,void 0),j=zG(Z.provider.client,Y,void 0),V=Object.fromEntries(J.map(({id:H,model:B})=>[H,{...TG(H,B,W.length>0?W:void 0),status:"active"}]));w0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||FG($),protocol:Y,client:j,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:X,capabilities:DG(Z.provider.capabilities),source:"file"},models:V})}function OG($){let Z=r$($);if(e5.has(Z))return;let Q=gW(Z);for(let[W,J]of Object.entries(Q.providers))T4(W,J);e5.add(Z)}async function qG($){let Z=r$($);if(e5.has(Z))return;let Q=await d2(Z);for(let[W,J]of Object.entries(Q.providers))T4(W,J);e5.add(Z)}import{existsSync as HC,readFileSync as BC}from"node:fs";import{dirname as GC,join as mW}from"node:path";import*as l2 from"@cline/llms";import{resolveClineDataDir as KC}from"@cline/shared/storage";var W9="openai",EG=l2.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,MG=128000;function NG($){let Z=$?.trim();if(!Z)return;try{let Q=JSON.parse(Z);if(!Q)return;let W=typeof Q.expiresAt==="number"&&Number.isFinite(Q.expiresAt)?Q.expiresAt<10000000000?Q.expiresAt*1000:Q.expiresAt:void 0;return{accessToken:Q.idToken,refreshToken:Q.refreshToken,expiresAt:W,accountId:Q.userInfo?.id}}catch{return}}function C($){let Z=$?.trim();return Z?Z:void 0}function FC($){return $==="credentials"?"iam":$}function RG($){if(!HC($))return;try{let Z=BC($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function AC($){let Z=$.dataDir??KC(),Q=$.globalStatePath??mW(Z,"globalState.json"),W=$.secretsPath??mW(Z,"secrets.json"),J=RG(Q),X=RG(W);if(!J&&!X)return;return{globalState:J??{},secrets:X??{}}}function vW($){if($===W9)return EG;return $}function fC($,Z,Q,W){let J=Q==="plan"?"planMode":"actMode",X=Z===W?C(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,j={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`}[Z];return(j?C(typeof $[j]==="string"?$[j]:void 0):void 0)??X}function UC($,Z,Q){let W=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,J=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(C).find(Boolean),X=J==="none"||J==="low"||J==="medium"||J==="high"||J==="xhigh"?J:void 0,Y=typeof W==="number"&&Number.isInteger(W)&&W>0?W:void 0;if(!X&&Y===void 0)return;return{...X?{effort:X}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function DC($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),W=C(Q.access_token),J=C(Q.refresh_token),X=C(Q.accountId);if(!W&&!J&&!X)return;return{...W?{apiKey:W}:{},auth:{...W?{accessToken:W}:{},...J?{refreshToken:J}:{},...X?{accountId:X}:{}}}}catch{return}}function LC($){let Z=l2.getGeneratedModelsForProvider($),W=l2.getProviderCollectionSync($)?.provider.defaultModelId;if(W&&Z[W])return W;return Object.keys(Z)[0]??void 0}function _C($,Z,Q,W){let J=vW($),X=C(W==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),Y=fC(Z,$,W,X)??LC(J),j=UC(Z,J,W),V=typeof Z.requestTimeoutMs==="number"&&Number.isInteger(Z.requestTimeoutMs)&&Z.requestTimeoutMs>0?Z.requestTimeoutMs:void 0,H={anthropic:Q.apiKey,cline:Q.clineApiKey,openai:Q.openAiApiKey,"openai-native":Q.openAiNativeApiKey,openrouter:Q.openRouterApiKey,bedrock:Q.awsBedrockApiKey,gemini:Q.geminiApiKey,ollama:Q.ollamaApiKey,deepseek:Q.deepSeekApiKey,requesty:Q.requestyApiKey,together:Q.togetherApiKey,fireworks:Q.fireworksApiKey,qwen:Q.qwenApiKey,doubao:Q.doubaoApiKey,mistral:Q.mistralApiKey,litellm:Q.liteLlmApiKey,asksage:Q.asksageApiKey,xai:Q.xaiApiKey,moonshot:Q.moonshotApiKey,zai:Q.zaiApiKey,huggingface:Q.huggingFaceApiKey,nebius:Q.nebiusApiKey,sambanova:Q.sambanovaApiKey,cerebras:Q.cerebrasApiKey,groq:Q.groqApiKey,"huawei-cloud-maas":Q.huaweiCloudMaasApiKey,baseten:Q.basetenApiKey,"vercel-ai-gateway":Q.vercelAiGatewayApiKey,dify:Q.difyApiKey,minimax:Q.minimaxApiKey,hicap:Q.hicapApiKey,aihubmix:Q.aihubmixApiKey,nousResearch:Q.nousResearchApiKey,oca:Q.ocaApiKey},B={};if($==="openai-codex")Object.assign(B,DC(Q));if($==="cline")try{let D=C(Q["cline:clineAccountId"]);if(D)B.auth={...B.auth??{},...NG(D)}}catch{}if($===W9&&Z.openAiHeaders)B.headers=Z.openAiHeaders;if($==="bedrock"){let D=FC(Z.awsAuthentication),U=D==="profile"||Z.awsUseProfile===!0;B.aws={accessKey:C(Q.awsAccessKey),secretKey:C(Q.awsSecretKey),sessionToken:C(Q.awsSessionToken),region:C(Z.awsRegion),authentication:D,profile:U?C(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:C(Z.awsBedrockEndpoint),customModelBaseId:C(W==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")B.gcp={projectId:C(Z.vertexProjectId),region:C(Z.vertexRegion)};if($===W9&&(Z.azureApiVersion||Z.azureIdentity!==void 0))B.azure={apiVersion:C(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let D=Z.sapAiCoreUseOrchestrationMode??!0;B.sap={clientId:C(Q.sapAiCoreClientId),clientSecret:C(Q.sapAiCoreClientSecret),tokenUrl:C(Z.sapAiCoreTokenUrl),resourceGroup:C(Z.sapAiResourceGroup),deploymentId:D?void 0:C(W==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:D}}if($==="oca"){B.oca={mode:Z.ocaMode};let D=C(Q.ocaRefreshToken);if(D)B.auth={...B.auth??{},refreshToken:D}}if($==="qwen")B.apiLine=Z.qwenApiLine;if($==="moonshot")B.apiLine=Z.moonshotApiLine;if($==="zai")B.apiLine=Z.zaiApiLine;if($==="minimax")B.apiLine=Z.minimaxApiLine;let G={anthropic:Z.anthropicBaseUrl,openai:Z.openAiBaseUrl,ollama:Z.ollamaBaseUrl,lmstudio:Z.lmStudioBaseUrl,litellm:Z.liteLlmBaseUrl,gemini:Z.geminiBaseUrl,requesty:Z.requestyBaseUrl,asksage:Z.asksageApiUrl,dify:Z.difyBaseUrl,oca:Z.ocaBaseUrl,aihubmix:Z.aihubmixBaseUrl,sapaicore:Z.sapAiCoreBaseUrl},K=C(H[$]),F=C(G[$]),A={provider:J,...K?{apiKey:K}:{},...Y?{model:Y}:{},...F?{baseUrl:F}:{},...j?{reasoning:j}:{},...V?{timeout:V}:{},...B},L=z4.safeParse(A);if(!L.success)return;return Object.keys(A).filter((D)=>D!=="provider").length>0?L.data:void 0}function zC($,Z){if($!==EG)return;if(!Z.baseUrl||!Z.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:Z.baseUrl,defaultModelId:Z.model},models:{[Z.model]:{id:Z.model,name:Z.model,contextWindow:MG,maxInputTokens:MG,capabilities:["streaming","tools","images"]}}}}function TC($,Z){let Q=new Set;for(let J of[$.actModeApiProvider,$.planModeApiProvider]){let X=C(J);if(X)Q.add(X)}if(C(Z.apiKey))Q.add("anthropic");if(C(Z.openRouterApiKey))Q.add("openrouter");if(C(Z.openAiApiKey))Q.add(W9);if(C(Z.openAiNativeApiKey))Q.add("openai-native");if(C(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(C(Z.geminiApiKey))Q.add("gemini");if(C(Z.ollamaApiKey))Q.add("ollama");if(C(Z.awsAccessKey)||C(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||C($.awsProfile))Q.add("bedrock");if(C($.vertexProjectId)||C($.vertexRegion))Q.add("vertex");if(C(Z.clineApiKey))Q.add("cline");let W=NG(C(Z["cline:clineAccountId"]));if(W?.accessToken||W?.refreshToken||W?.accountId)Q.add("cline");if(C(Z.ocaApiKey))Q.add("oca");if(C(Z.sapAiCoreClientId)||C(Z.sapAiCoreClientSecret)||C($.sapAiCoreTokenUrl)||C($.sapAiCoreBaseUrl)||C($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function cW($){let Z=$.providerSettingsManager.read(),Q=AC($);if(!Q)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let{globalState:W,secrets:J}=Q,X=W.mode==="plan"?"plan":"act",Y=TC(W,J),j=u2();j.providers={...Z.providers},j.lastUsedProvider=Z.lastUsedProvider;let V=new Date().toISOString(),H=0,B=mW(GC($.providerSettingsManager.getFilePath()),"models.json"),G=gW(B),K=0;for(let L of Y){let f=vW(L);if(j.providers[f])continue;let D=_C(L,W,J,X);if(!D)continue;j.providers[f]={settings:D,updatedAt:V,tokenSource:"migration"},H+=1;let U=zC(f,D);if(U&&!G.providers[f])G.providers[f]=U,K+=1}if(H===0&&K===0)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let F=C(X==="plan"?W.planModeApiProvider:W.actModeApiProvider),A=F?vW(F):void 0;if(j.lastUsedProvider=Z.lastUsedProvider??(A&&j.providers[A]?A:Object.keys(j.providers)[0]),$.providerSettingsManager.write(j),K>0)fG(B,G);return{migrated:H>0||K>0,providerCount:Object.keys(j.providers).length,lastUsedProvider:j.lastUsedProvider}}function EC(){return new Date().toISOString()}var NC="cline",wC="cline-pass";function CC($){if(CG($)!=="providers.json")return;let Z=dW($);if(CG(Z)!=="settings")return;return dW(Z)}class Y${filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??RC(),this.dataDir=$.dataDir??CC(this.filePath),this.dataDir||!$.filePath)cW({providerSettingsManager:this,dataDir:this.dataDir});if(OG(this),Q9(this.read()),uW(this.filePath))try{wG(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!uW(this.filePath))return u2();try{let $=qC(this.filePath,"utf8"),Z=JSON.parse($),Q=o5.safeParse(Z);if(Q.success)return Q9(Q.data),Q.data}catch{}return u2()}write($){let Z=o5.parse($),Q=dW(this.filePath);if(!uW(Q))OC(Q,{recursive:!0,mode:448});MC(this.filePath,`${JSON.stringify(Z,null,2)}
580
+ `,"utf8");try{wG(this.filePath,384)}catch{}Q9(Z)}saveProviderSettings($,Z={}){let Q=z4.parse($),W=this.read(),J=Q.provider,X=Z.setLastUsed!==!1,Y=W.providers[J],j=Z.tokenSource??Y?.tokenSource??"manual",V={...W,providers:{...W.providers,[J]:{settings:Q,updatedAt:EC(),tokenSource:j}},lastUsedProvider:X?J:W.lastUsedProvider};return this.write(V),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,J=B0(Z)?.storageProviderId;if(!J||J===Z)return Q;let X=$.providers[J]?.settings;if(!X)return Q;return z4.parse({...X.auth?{auth:X.auth}:{},...X.apiKey?{apiKey:X.apiKey}:{},...X.baseUrl?{baseUrl:X.baseUrl}:{},...Q??{},provider:Z})}getProviderSettings($){let Z=this.read();return this.resolveProviderSettings(Z,$)}resolveLastUsedProviderId($,Z){let Q=$.lastUsedProvider;if(Q===wC&&Z.isClinePassEnabled===!1)return NC;return Q}getLastUsedProviderSettings($={}){let Z=this.read(),Q=this.resolveLastUsedProviderId(Z,$);if(!Q)return;return this.resolveProviderSettings(Z,Q)}getProviderConfig($,Z){let Q=this.getProviderSettings($);if(!Q)return;return B1(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return B1(Z,$)}async refreshCatalog(){try{await J6({})}catch{}}}G0();g2();import{execFile as PC}from"node:child_process";import{promisify as SC}from"node:util";var p2=SC(PC);function O4($){let Z=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(Z?.history)?Z.history:[]).filter((W)=>!!W&&typeof W==="object"&&!Array.isArray(W)).flatMap((W)=>{let J=String(W.ref??"").trim(),X=Number(W.createdAt??0),Y=Number(W.runCount??0);if(J.length===0||!Number.isFinite(X)||!Number.isInteger(Y)||Y<1)return[];let j=W.kind==="stash"||W.kind==="commit"?W.kind:void 0;return[{ref:J,createdAt:X,runCount:Y,...j?{kind:j}:{}}]})}function PG($,Z){let Q=O4($).filter((J)=>J.runCount<=Z),W=Q.at(-1);return W?{latest:W,history:Q}:void 0}function J9($,Z){return $.reduce((Q,W)=>{if(W.runCount>Z)return Q;if(!Q||W.runCount>Q.runCount)return W;return Q},void 0)}function SG($,Z){let Q=0;for(let W=0;W<$.length;W+=1){let J=$[W];if(J?.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"?J.metadata:void 0)?.kind==="recovery_notice")continue;if(Q+=1,Q===Z)return W}throw Error(`Could not find user message for checkpoint run ${Z}`)}function bC($,Z){let Q=SG($,Z);return $.slice(0,Q+1)}function bG($,Z){let Q=SG($,Z);return $.slice(0,Q)}function yG($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=J9(O4($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:W,...$.restoreMessages!==!1?{messages:bC($.messages??[],Z)}:{}}}async function hG($,Z){if((await p2("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await p2("git",["-C",$,"cat-file","-e",`${Z.ref}^{commit}`],{windowsHide:!0}),await p2("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await p2("git",["-C",$,"clean","-fd"],{windowsHide:!0}),Z.kind==="commit"){await p2("git",["-C",$,"reset","--hard",Z.ref],{windowsHide:!0});return}await p2("git",["-C",$,"stash","apply",Z.ref],{windowsHide:!0})}class s0 extends Error{code;constructor($,Z){super(Z);this.code=$;this.name="SessionVersioningError"}}function yC($){let Z=$.sessionId.trim();if(!Z)throw new s0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new s0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new s0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new s0("invalid_restore","checkpointRunCount must be a positive integer");return Z}class r2{async restoreCheckpoint($){let Z=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,W=yC({sessionId:$.sessionId,restoreMessages:Z,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(W);if(!J)throw new s0("session_not_found",`Session ${W} not found`);let X=Z?await $.readMessages(W):void 0;if(Z&&X?.length===0)throw new s0("session_messages_not_found",`No messages found for session ${W}`);let Y=yG({session:J,messages:X,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:Z});if(Q)await($.applyWorkspaceCheckpoint??hG)(Y.cwd,Y.checkpoint);let j=t1({session:J,messages:X});if(!Z)return{checkpoint:Y.checkpoint,sourceSnapshot:j};let V=PG(J,$.checkpointRunCount),H=$.restore?.omitCheckpointMessageFromSession?bG(X??[],$.checkpointRunCount):Y.messages??[],B={sourceSession:J,sourceMessages:X,sourceSnapshot:j,plan:Y,restoredCheckpointMetadata:V,initialMessages:H,restoreMessages:Z,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new s0("invalid_restore","start is required when restore.messages is true");let G=$.buildStartInput?await $.buildStartInput(B,$.start):$.start,K=await $.startSession(G),F=$.getStartedSessionId?.(K);if(F)await($.retainCheckpointRefs??$B)(Y.cwd,F,V?.history??[]);let A=F&&$.readRestoredSession?await $.readRestoredSession(F):void 0;return{sessionId:F,startResult:K,messages:Y.messages,checkpoint:Y.checkpoint,sourceSnapshot:j,...A?{restoredSnapshot:t1({session:A,messages:H})}:{}}}}import{hasRuntimeConfigExtension as iC}from"@cline/shared";import{nanoid as nC}from"nanoid";r0();import{appendFileSync as hC,existsSync as i2,mkdirSync as kG,readdirSync as kC,readFileSync as IG,renameSync as IC,writeFileSync as xC}from"node:fs";import{join as lW}from"node:path";import{resolveTeamDataDir as gC}from"@cline/shared/storage";function xG(){return new Date().toISOString()}function pW($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function gG($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class X9{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??gC()}init(){this.ensureTeamDir()}listTeamNames(){if(!i2(this.teamDirPath))return[];return kC(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>i2(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let Z=this.readEnvelope($);return Z?.teamState?gG(Z.teamState):void 0}readHistory($,Z=200){let Q=this.historyPath($);if(!i2(Q))return[];return IG(Q,"utf8").split(`
581
+ `).map((W)=>W.trim()).filter(Boolean).map((W)=>{try{return JSON.parse(W)}catch{return}}).filter((W)=>W!==void 0).reverse().slice(0,Z)}loadRuntime($){let Z=this.readEnvelope($);return{state:Z?.teamState?gG(Z.teamState):void 0,teammates:Z?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,Z){this.ensureTeamSubdir($),hC(this.historyPath($),`${JSON.stringify({ts:xG(),eventType:Z.type,payload:Z})}
582
+ `,"utf8")}persistRuntime($,Z,Q){this.ensureTeamSubdir($);let W={version:1,updatedAt:xG(),teamState:Z,teammates:Q},J=this.statePath($),X=`${J}.tmp`;xC(X,`${JSON.stringify(W,null,2)}
583
+ `,"utf8"),IC(X,J)}markInProgressRunsInterrupted($,Z){let Q=this.readEnvelope($);if(!Q?.teamState?.runs?.length)return[];let W=Q.teamState.runs.filter((X)=>X.status==="queued"||X.status==="running").map((X)=>X.id);if(W.length===0)return[];let J=new Date;return Q.teamState={...Q.teamState,runs:Q.teamState.runs.map((X)=>X.status==="queued"||X.status==="running"?{...X,status:"interrupted",error:Z,endedAt:J}:X)},this.persistRuntime($,Q.teamState,Q.teammates),W}ensureTeamDir(){if(!i2(this.teamDirPath))kG(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let Z=lW(this.ensureTeamDir(),pW($));if(!i2(Z))kG(Z,{recursive:!0});return Z}statePath($){return lW(this.ensureTeamDir(),pW($),"state.json")}historyPath($){return lW(this.ensureTeamDir(),pW($),"task-history.jsonl")}readEnvelope($){let Z=this.statePath($);if(!i2(Z))return;try{let Q=JSON.parse(IG(Z,"utf8"));if(Q?.version===1&&Q.teamState)return Q}catch{}return}}import{existsSync as mC,mkdirSync as vC}from"node:fs";import{join as cC}from"node:path";import{safeJsonParse as mG}from"@cline/shared";import{loadSqliteDb as uC,nowIso as rW}from"@cline/shared/db";import{resolveDbDataDir as dC}from"@cline/shared/storage";function lC(){return dC()}function n2($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function pC($){let Z=mG($);if(!Array.isArray(Z))return[];let Q=[];for(let W of Z){if(!W||typeof W!=="object")continue;let J=W,X=J.agentId,Y=J.rolePrompt;if(typeof X!=="string"||!X.trim())continue;if(typeof Y!=="string"||!Y.trim())continue;let j={agentId:X.trim(),rolePrompt:Y};if(typeof J.modelId==="string"&&J.modelId.trim())j.modelId=J.modelId.trim();if(typeof J.maxIterations==="number"&&Number.isFinite(J.maxIterations))j.maxIterations=Math.max(1,Math.floor(J.maxIterations));Q.push(j)}return Q}function rC($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class q4{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??lC()}init(){this.getRawDb()}ensureTeamDir(){if(!mC(this.teamDirPath))vC(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return cC(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=uC(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
584
584
  CREATE TABLE IF NOT EXISTS team_store_schema_version (
585
585
  lock INTEGER PRIMARY KEY CHECK (lock = 1),
586
586
  version INTEGER NOT NULL
@@ -664,7 +664,7 @@ ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fi
664
664
  version INTEGER NOT NULL DEFAULT 1,
665
665
  PRIMARY KEY(team_name, fragment_id)
666
666
  );
667
- `)}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}withTransaction($){let Z=this.getRawDb();Z.exec("BEGIN IMMEDIATE;");try{$(),Z.exec("COMMIT;")}catch(Q){try{Z.exec("ROLLBACK;")}catch{}throw Q}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let Z=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[n2($)]);if(!Z)return;let Q=mG(Z.state_json);if(!Q)return;try{return pC(Q)}catch{return}}readHistory($,Z=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[n2($),Z]).flatMap((Q)=>{try{return[{eventType:Q.event_type,payload:JSON.parse(Q.payload_json),ts:Q.ts}]}catch{return[]}})}loadRuntime($){let Z=n2($),Q=this.readState(Z),W=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[Z]),J=W?lC(W.teammates_json):[];return{state:Q,teammates:J,interruptedRunIds:[]}}appendTeamEvent($,Z,Q,W){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
667
+ `)}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}withTransaction($){let Z=this.getRawDb();Z.exec("BEGIN IMMEDIATE;");try{$(),Z.exec("COMMIT;")}catch(Q){try{Z.exec("ROLLBACK;")}catch{}throw Q}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let Z=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[n2($)]);if(!Z)return;let Q=mG(Z.state_json);if(!Q)return;try{return rC(Q)}catch{return}}readHistory($,Z=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[n2($),Z]).flatMap((Q)=>{try{return[{eventType:Q.event_type,payload:JSON.parse(Q.payload_json),ts:Q.ts}]}catch{return[]}})}loadRuntime($){let Z=n2($),Q=this.readState(Z),W=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[Z]),J=W?pC(W.teammates_json):[];return{state:Q,teammates:J,interruptedRunIds:[]}}appendTeamEvent($,Z,Q,W){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
668
668
  VALUES (?, ?, ?, ?, NULL, ?)`,[n2($),rW(),Z,JSON.stringify(Q),W??null])}persistRuntime($,Z,Q){let W=n2($),J=rW();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
669
669
  VALUES (?, ?, ?, ?)
670
670
  ON CONFLICT(team_name) DO UPDATE SET
@@ -711,42 +711,42 @@ ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fi
711
711
  reviewed_by = excluded.reviewed_by,
712
712
  reviewed_at = excluded.reviewed_at,
713
713
  version = team_outcome_fragments.version + 1`,[W,X.outcomeId,X.id,X.section,X.sourceAgentId,X.sourceRunId??null,X.content,X.status,X.reviewedBy??null,X.reviewedAt?X.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,Z){let Q=n2($),W=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[Q]);if(W.length===0)return[];let J=rW();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
714
- WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,J,Q]),W.map((X)=>X.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function vG($={}){try{let Z=new q4($);return Z.init(),Z}catch{let Z=new X9({teamDir:$.teamDir});return Z.init(),Z}}function Y9($,Z){return rC($,Z)}function nC($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function aC($,Z){return $.filter((Q)=>nC(Q.name,Z))}function iW($,Z){return k1(aC($,Z))}var sC={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 oC($){let Z=$.trim().toLowerCase();return sC[Z]??Z}function tC($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(oC));if(Z.skills!==void 0)Q.add("skills");return $.filter((W)=>Q.has(W.name))}function cG(){return`team-${iC(5)}`}function j9($,Z,Q,W,J,X,Y,j){let V=e0[u1({mode:Q})],H=_8(Z,W,Q,J??L8);return iW(w8({cwd:$,...V,enableSkills:!!Y,...H,executors:{...Y?{skills:Y}:{},...j??{}}}),X)}function eC($){return j9($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,$P,$.toolExecutors).some((Z)=>Z.name==="skills")}var $P=async()=>"";async function ZP($){let Z=Z0();if(!C$({filePath:Z}))return{tools:[]};let Q=new I8({clientFactory:G5({settingsPath:Z})}),W;try{W=await k8(Q,{filePath:Z})}catch(j){await Q.dispose().catch(()=>{});let V=j instanceof Error?j.message:String(j);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let J=W.filter((j)=>j.disabled!==!0),X=await Promise.allSettled(J.map((j)=>F5({serverName:j.name,provider:Q}))),Y=[];for(let[j,V]of X.entries())if(V.status==="fulfilled")Y.push(...V.value);else{let H=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${J[j].name}", skipping: ${H}`)}return{tools:Y,shutdown:async()=>{await Q.dispose()}}}function QP($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function WP($){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 JP($){let Z=e0[u1({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??Z.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??Z.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 V9{teamRuntimeEntries=new Map;async build($){let{config:Z,hooks:Q,extensions:W,logger:J,telemetry:X,createSpawnTool:Y,onTeamRestored:j,userInstructionService:V,configExtensions:H,toolExecutors:B}=$,G=$.onTeamEvent??(()=>{}),K=JP(Z),F=Z.workspaceRoot??Z.cwd,A=$.toolPolicies??Z.toolPolicies,L=K1(),f=[],D=Z.teamName?.trim()||cG(),U=Z.sessionId?.trim()||D,T=K.enableSpawnAgent?h5({workspaceRoot:F}):{configs:[],errors:[]},q=T.configs.some((x)=>x.skills!==void 0),z=Y9(H,"rules"),_=Y9(H,"skills"),M=_||q,E=Y9(H,"workflows"),P=Y9(H,"plugins"),c=z||_||E,n=!1,a=Boolean(V),t=V,p0;for(let x of T.errors)(J??Z.logger)?.log?.(`[agents] Failed to load agent config at ${x.path}: ${x.error.message}`);if(!t&&(c||q))t=w2({skills:M?{workspacePath:F,includePluginSkills:P,pluginSkillDirectories:P?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(t)await t.start().catch(()=>{});let K$=K.enableTools&&_&&Boolean(t)&&t?.hasConfiguredSkills(Z.skills)===!0&&eC({cwd:Z.cwd,providerId:Z.providerId,mode:K.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:A,toolExecutors:B}),d=t&&c?t.createExtension({includeRules:z,includeSkills:_,includeWorkflows:E,registerSkillsTool:K$,allowedSkillNames:Z.skills}):void 0,X1=d?[...W??Z.extensions??[],d]:W??Z.extensions;if(K.enableTools){if(f.push(...j9(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,B)),!K.disableMcpSettingsTools){let x=await ZP(Z.logger);f.push(...x.tools),p0=x.shutdown}}let N,X0=K.enableAgentTeams?vG():void 0,Y0=X0?.loadRuntime(U),R0=Y0?.state,Z2=Y0?.teammates??[],Y1=new Map(Z2.map((x)=>[x.agentId,x])),t0=Z.sessionId||D,$8,Q2=[],I4=!1,j1=R2({providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey??"",baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxTokensPerTurn:Z.maxTokensPerTurn,maxIterations:Z.maxIterations,hooks:Q,extensions:X1,logger:J??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(K.enableSpawnAgent){if(T.configs.length>0)f.push(...iW(I5({configProvider:j1,agents:T.configs,createSubAgentTools:(x)=>K.enableTools?tC(j9(Z.cwd,x.providerId??Z.providerId,K.mode,x.modelId??Z.modelId,Z.toolRoutingRules,A,x.skills!==void 0&&t?.createSkillsExecutor?t.createSkillsExecutor(x.skills):void 0,B),x):[],hookErrorMode:Z.hookErrorMode,toolPolicies:A,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),A))}if(!this.teamRuntimeEntries.has(t0))this.teamRuntimeEntries.set(t0,{delegatedAgentConfigProvider:j1});let x4=()=>{if(!K.enableAgentTeams)return;let x=this.teamRuntimeEntries.get(t0)??{delegatedAgentConfigProvider:j1};if(this.teamRuntimeEntries.set(t0,x),N=x.runtime,!N){if(N=new B4({teamName:D,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:K.missionLogIntervalSteps,missionLogIntervalMs:K.missionLogIntervalMs,onTeamEvent:(Q0)=>{if(G(Q0),N&&X0){if(Q0.type==="teammate_spawned"&&Q0.teammate?.rolePrompt){let V1={agentId:Q0.agentId,rolePrompt:Q0.teammate.rolePrompt,modelId:Q0.teammate.modelId,maxIterations:Q0.teammate.maxIterations};Y1.set(V1.agentId,V1)}if(Q0.type==="teammate_shutdown"&&!WP(Q0.reason))Y1.delete(Q0.agentId);X0.handleTeamEvent(U,Q0),X0.persistRuntime(U,N.exportState(),Array.from(Y1.values()))}}}),R0)N.hydrateState(R0),I4=!0;x.runtime=N}if(!n){if(!N)return;n=!0;let Q0=Q5({runtime:N,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(R0),restoredTeammates:Z2,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(V1)=>{Q2=V1,$8?.addTools(V1)},createBaseTools:K.enableTools?()=>j9(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,B):void 0,teammateConfigProvider:j1});if(I4)N.recoverActiveRuns("runtime_recovered");if(Q0.restoredFromPersistence)j?.();f.push(...Q0.tools)}return N};if(K.enableSpawnAgent&&Y){let x=Y();f.push({...x,execute:async(Q0,V1)=>{return x4(),x.execute(Q0,V1)}})}if(K.enableAgentTeams)x4();let W2=iW(f,A),r9=W2.some((x)=>x.name==="submit_and_exit"&&x.lifecycle?.completesRun===!0),g4=K.enableAgentTeams?()=>{let x=this.teamRuntimeEntries.get(t0)?.runtime;if(!x)return;let Q0=x.listTasks(),V1=Q0.some((w1)=>w1.status==="in_progress"||w1.status==="pending"),FJ=x.listRuns({}),qA=FJ.some((w1)=>w1.status==="running"||w1.status==="queued");if(V1||qA){let w1=Q0.filter((P0)=>P0.status==="in_progress"||P0.status==="pending").map((P0)=>`${P0.id} (${P0.status}): ${P0.title}`).join(", "),AJ=FJ.filter((P0)=>P0.status==="running"||P0.status==="queued").map((P0)=>`${P0.id} (${P0.status})`).join(", "),i9=[];if(w1)i9.push(`Unfinished tasks: ${w1}`);if(AJ)i9.push(`Active runs: ${AJ}`);return`[SYSTEM] You still have team obligations. ${i9.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,OA=r9?{requireCompletionTool:!0,...g4?{completionGuard:g4}:{}}:g4?{completionGuard:g4}:void 0;return{tools:W2,logger:J??Z.logger,telemetry:X??Z.telemetry,teamRuntime:N,teamRestoredFromPersistence:Boolean(R0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(t0)?.delegatedAgentConfigProvider??j1,extensions:X1,completionPolicy:OA,registerLeadAgent:(x)=>{if($8=x,Q2.length>0)x.addTools(k1(Q2,[...L]))},shutdown:async(x)=>{if(QP(N,x),this.teamRuntimeEntries.delete(t0),await p0?.(),!a)t?.stop()}}}}function XP($,Z){let Q=$?.expiresAt,W=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===W}class H9 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 nW{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new Y$,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=B0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let W=this.refreshInFlight.get(Z);if(W)return W;let J=this.resolveProviderApiKeyInternal($,Z,Q).catch((X)=>{throw X}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,J),J}async resolveProviderApiKeyInternal($,Z,Q){let W=B0($);if(!W)return null;let J=this.providerSettingsManager.getProviderSettings(Z);if(!J)return null;let X=CZ($,J);if(!X)return null;let Y=await W.refresh({settings:J,credentials:X,forceRefresh:Q,telemetry:this.telemetry});if(!Y)throw new H9($);let j=X8({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:Y,setLastUsed:!1,save:!1}),V=!XP(J.auth,j.auth);if(V)this.providerSettingsManager.saveProviderSettings(j,{setLastUsed:!1,tokenSource:"oauth"});return{apiKey:W.getApiKey(j)??Y.access,accountId:Y.accountId,refreshed:V}}}import{normalizeUserInput as YP}from"@cline/shared";import{nanoid as jP}from"nanoid";class uG{list($){return $?v0($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((V)=>V.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:v0($),updated:!1};let J=$.pendingPrompts[W];if(!J)return{sessionId:Z.sessionId,prompts:v0($),updated:!1};let X=Z.prompt===void 0?J.prompt:YP(Z.prompt).trim();if(!X)throw Error("prompt cannot be empty");let Y=Z.delivery??J.delivery,j={...J,prompt:X,mode:Z.mode??J.mode,delivery:Y};return $.pendingPrompts.splice(W,1),VP($,j,W,J.delivery),{sessionId:Z.sessionId,prompts:v0($),prompt:B9(j),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((X)=>X.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:v0($),removed:!1};let[J]=$.pendingPrompts.splice(W,1);return{sessionId:Z.sessionId,prompts:v0($),prompt:J?B9(J):void 0,removed:!0}}enqueue($,Z){let{prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y}=Z,j=$.pendingPrompts.findIndex((V)=>V.prompt===Q);if(j>=0){let[V]=$.pendingPrompts.splice(j,1),H={...V,prompt:Q,mode:W??V.mode,userImages:X??V.userImages,userFiles:Y??V.userFiles};if(J==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...H,delivery:"steer"});else $.pendingPrompts.push(H)}else{let V={id:`pending_${Date.now()}_${jP(5)}`,prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return v0($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((W)=>W.delivery==="steer");if(Z<0)return{prompts:v0($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:v0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:v0($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),v0($)}clear($){return $.pendingPrompts.length=0,[]}}class aW{deps;service=new uG;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}delete($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}enqueue($,Z){let Q=this.deps.getSession($);if(!Q||Q.aborting)return;this.service.enqueue(Q,Z),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let Z=this.deps.getSession($);if(!Z)return;let{entry:Q}=this.service.consumeSteer(Z);if(!Q)return;return this.emitPrompts(Z),this.emitSubmitted(Z,Q),Q}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:v0($)}})}scheduleDrain($,Z){if(Z.pendingPrompts.length===0||Z.aborting||Z.drainingPendingPrompts||!Z.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let Z=this.deps.getSession($);if(!Z)return;if(Z.aborting||Z.drainingPendingPrompts)return;if(!Z.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(Z);if(!Q)return;this.emitPrompts(Z),this.emitSubmitted(Z,Q),Z.drainingPendingPrompts=!0;let W=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{W=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,W&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=B9(Z);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}})}}function B9($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function v0($){return $.pendingPrompts.map(B9)}function VP($,Z,Q,W){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(W==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}G0();class oW{deps;constructor($){this.deps=$}dispatchAgentEvent($,Z,Q){let W=this.deps.getSession($),J={sessionId:$,config:Z,liveSession:W,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},X=NW(Q),Y=!!W&&(!X.agentId||X.agentId===sW(W.agent));wW(J,Q,Y?{isPrimaryAgentEvent:!0,agentId:sW(W.agent),conversationId:W.agent.getConversationId(),...W?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(HW(Q,Z),Z.type==="agent_event"){let W={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};wW(W,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let W=q1({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:sW(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(W)f$(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...W})}}if(await BW($,Z,this.deps.invokeBackendOptional),Q)GW(Q,$,Z,this.deps.emit)}async handlePluginEvent($,Z,Q){if(Z.name==="plugin_log"){this.handlePluginLog($,Z.payload);return}if(Z.name==="automation_event"){let V=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!V)return;let H=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!H)return;await V.ingestEvent(H);return}if(Z.name!=="steer_message"&&Z.name!=="queue_message"&&Z.name!=="pending_prompt")return;let W=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0,J=typeof W?.sessionId==="string"&&W.sessionId.trim().length>0?W.sessionId.trim():$,X=typeof W?.prompt==="string"?W.prompt.trim():"";if(!X)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":W?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(J,{prompt:X,delivery:Y})}handlePluginLog($,Z,Q){let W=this.deps.getSession($),J=Q??W?.config.extensionContext?.logger??W?.config.logger;if(!J||!Z||typeof Z!=="object")return;let X=Z,Y=typeof X.message==="string"?X.message:"";if(!Y)return;let j=X.metadata&&typeof X.metadata==="object"?{...X.metadata}:{};if(j.sessionId??=$,typeof X.pluginName==="string"&&X.pluginName)j.pluginName=X.pluginName;if(X.level==="debug"){J.debug(Y,j);return}if(X.level==="error"){if(J.error)J.error(Y,j);else J.log(Y,{...j,severity:"error"});return}J.log(Y,j)}}function sW($){return $.getAgentId()}function tW($){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:W$($.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 eW($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function dG($,Z,...Q){let W=eW($,Z);if(!W)throw Error(`session service method not available: ${Z}`);return Promise.resolve(W.apply($,Q))}async function lG($,Z,...Q){let W=eW($,Z);if(!W)return;await Promise.resolve(W.apply($,Q))}async function pG($,Z,...Q){let W=eW($,Z);if(!W)return;return await Promise.resolve(W.apply($,Q))}r0();G0();function $3($,Z,Q){return{onSubAgentEvent:(W)=>$.onAgentEvent(Q,Z,W),onSubAgentStart:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(W.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let X=q1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId});if(X)f$(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...X});d4(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:W.parentAgentId,agentId:W.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",Q,W)},onSubAgentEnd:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime,X=$.subAgentStarts.get(W.subAgentId),Y=X?Date.now()-X.startedAt:0,j=W.result?.text?W.result.text.split(`
715
- `).length:0;d4(Z.telemetry,{event:"ended",ulid:Q,durationMs:Y,outputLines:j,errorMessage:W.error?String(W.error):void 0,agentId:W.subAgentId,parentId:W.parentAgentId,...q1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId})}),$.subAgentStarts.delete(W.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,W)}}}function Z3($,Z,Q,W){let J=$3($,Z,Q);return N2({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let Y=Z.enableTools?w8({cwd:Z.cwd,...e0[u1({mode:Z.mode})],executors:W}):[];if(Z.enableSpawnAgent)Y.push(Z3($,Z,Q,W));return k1(Y)},...J})}import{readFile as HP,stat as BP}from"node:fs/promises";var GP=20480000;async function rG($){let Z=await BP($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>GP)throw Error("File is too large to read into context.");let Q=await HP($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var iG=5000;function M4($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function _P($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=M4(Z.inputTokens),W=M4(Z.outputTokens),J=M4(Z.cacheReadTokens),X=M4(Z.cacheWriteTokens),Y=M4(Z.totalCost);if(Q===void 0||W===void 0||J===void 0||X===void 0||Y===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:J,cacheWriteTokens:X,totalCost:Y}}function zP($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}class j${runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new $4;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new r2;constructor($){let Z=FP();if(Z)LP(Z);let Q=m0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new V9,this.createAgentInstance=$.createAgent??((W)=>new l1(W)),this.defaultCapabilities=O0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new Y$,this.oauthTokenManager=$.oauthTokenManager??new nW({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new aW({getSession:(W)=>this.sessions.get(W),emit:(W)=>this.emit(W),send:(W)=>this.runTurn(W)}),this.pendingPrompts={list:async(W)=>this.pendingPromptsController.list(W.sessionId),update:async(W)=>this.pendingPromptsController.update(W),delete:async(W)=>this.pendingPromptsController.delete(W)},this.eventBridge=new oW({getSession:(W)=>this.sessions.get(W),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(W)=>this.emit(W),persistMessages:(W,J,X)=>{this.invoke("persistSessionMessages",W,J,X)},enqueuePendingPrompt:(W,J)=>this.pendingPromptsController.enqueue(W,J),invokeBackendOptional:(W,...J)=>this.invokeOptional(W,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.source??T0.CLI,Q=$0(),W=$.config.sessionId?.trim()??"",J=W||fP(),X=await this.applyInitialOAuthCredentials($),Y=X.initialMessages??[],j=Y.length>0?l5(Y):_0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let H=Q3(V,J),B=Q3(H,`${J}.messages.json`),G=Q3(H,`${J}.json`),K=W$($.config),F=N0.parse({version:1,session_id:J,source:Z,pid:process.pid,started_at:Q,status:"running",interactive:$.interactive===!0,provider:X.config.providerId,model:X.config.modelId,cwd:X.config.cwd,workspace_root:K,team_name:X.config.teamName,enable_tools:X.config.enableTools,enable_spawn:X.config.enableSpawnAgent,enable_teams:X.config.enableAgentTeams,prompt:X.prompt?.trim()||void 0,messages_path:B}),A;if(W.length>0&&Y.length>0&&!X.prompt?.trim()){let N=await this.invokeOptionalValue("readSessionManifest",J);if(N)F=N,A={manifestPath:G,messagesPath:N.messages_path||B,manifest:N}}let f=await this.seedAggregateUsageFromArtifacts({initialUsage:j,sessionDir:H,rootMessagesPath:A?.messagesPath??B,manifest:F});this.usageBySession.set(J,j),this.aggregateUsageBySession.set(J,f);let D=O0(this.defaultCapabilities,$.capabilities),U=D?.toolExecutors??this.toolExecutors,T=$.localRuntime,q=T?.extensionContext?.logger??T?.logger,z=T?.extensionContext?.automation,_,M={getSession:(N)=>this.sessions.get(N),subAgentStarts:this.subAgentStarts,onAgentEvent:(N,X0,Y0)=>this.eventBridge.dispatchAgentEvent(N,X0,Y0),invokeBackendOptional:(N,...X0)=>this.invokeOptional(N,...X0)};_=await VG({input:X,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:D,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(N)=>{if(N.name==="plugin_log"){this.eventBridge.handlePluginLog(J,N.payload,q);return}this.eventBridge.handlePluginEvent(J,N,z)},onTeamEvent:(N)=>{this.eventBridge.handleTeamEvent(J,N),_.config.onTeamEvent?.(N)},createSpawnTool:()=>Z3(M,_.config,J,U),createSubAgentLifecycleCallbacks:(N)=>$3(M,N,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(N)=>{await this.persistSessionMetadata(J,()=>N)}});let E=await this.runtimeBuilder.build(_.runtimeBuilderInput),P=_.config,c=_.providerConfig;if(E.teamRuntime&&!P.teamName?.trim())P.teamName=E.teamRuntime.getTeamName();let n=[...E.tools,...P.extraTools??[]],a=E.extensions??_.extensions,t={sessionId:J,providerId:c.providerId,modelId:c.modelId,apiKey:c.apiKey,baseUrl:c.baseUrl,headers:c.headers,knownModels:c.knownModels,providerConfig:c,thinking:P.thinking,reasoningEffort:P.reasoningEffort??c.reasoningEffort,maxTokensPerTurn:P.maxTokensPerTurn,systemPrompt:P.systemPrompt,maxIterations:P.maxIterations,execution:P.execution,prepareTurn:EW(P),tools:n,hooks:_.hooks,extensions:a,hookErrorMode:P.hookErrorMode,initialMessages:_.effectiveInput.initialMessages,userFileContentLoader:rG,toolPolicies:_.toolPolicies,requestToolApproval:_.requestToolApproval?async(N)=>{let X0=_.requestToolApproval,Y0=this.sessions.get(J);if(Y0)await this.markTurnPending(Y0);try{if(!X0)return{approved:!1,reason:"Tool approval callback is not configured."};return await X0(N)}finally{let R0=this.sessions.get(J);if(R0?.status==="pending")await this.markTurnRunning(R0)}}:void 0,telemetry:P.telemetry,onConsecutiveMistakeLimitReached:P.onConsecutiveMistakeLimitReached,completionPolicy:E.completionPolicy,consumePendingUserMessage:()=>{let N=this.pendingPromptsController.consumeSteer(J);return N?K4(N.prompt,N.mode??P.mode):void 0},logger:E.logger??P.logger,extensionContext:P.extensionContext,onEvent:(N)=>this.eventBridge.dispatchAgentEvent(J,P,N)};t.hooks={...t.hooks,onEvent:async(N)=>{if(await _.hooks?.onEvent?.(N),N.type!=="assistant-message")return;let X0=this.sessions.get(J);if(!X0)return;let Y0=X0.agent.getMessages();try{await this.invoke("persistSessionMessages",J,Y0,P.systemPrompt)}catch(R0){P.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:R0}),i$(P.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:R0,severity:"warn",handled:!0,context:{sessionId:J,providerId:P.providerId,modelId:P.modelId}})}}};let p0=this.createAgentInstance(t);if(t.onEvent)p0.subscribeEvents(t.onEvent);E.registerLeadAgent?.(p0);let K$=q1({agentId:p0.getAgentId(),conversationId:p0.getConversationId(),teamId:E.teamRuntime?.getTeamId(),teamName:E.teamRuntime?.getTeamName(),teamRole:E.teamRuntime?"lead":void 0});if(HG(P,J,W.length>0,K,K$),K$)f$(P.telemetry,{ulid:J,modelId:P.modelId,provider:P.providerId,...K$});if(E.teamRuntime)VZ(P.telemetry,{ulid:J,teamId:E.teamRuntime.getTeamId(),teamName:E.teamRuntime.getTeamName(),leadAgentId:p0.getAgentId(),restoredFromPersistence:E.teamRestoredFromPersistence===!0});let d={sessionId:J,config:P,sessionMetadata:X.sessionMetadata,...A?{artifacts:A}:{},source:Z,startedAt:A?.manifest.started_at??Q,updatedAt:A?.manifest.ended_at??A?.manifest.started_at??Q,pendingPrompt:F.prompt,runtime:E,agent:p0,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:_.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(this.sessions.set(J,d),this.emitStatus(J,"running"),Y.length>0&&!A){if(await this.ensureSessionPersisted(d),await this.invoke("persistSessionMessages",d.sessionId,Y,d.config.systemPrompt),!X.prompt?.trim())await this.updateStatus(d,"completed",0)}let X1;try{if(X.prompt?.trim())if(X1=await this.executeTurn(d,{prompt:X.prompt,userImages:X.userImages,userFiles:X.userFiles}),!d.interactive)await this.finalizeSingleRun(d,X1.finishReason);else await this.completeInteractiveTurn(d,X1.finishReason)}catch(N){if(d.interactive&&d.aborting)X1=await this.completeAbortedInteractiveTurn(d);else{i$(d.config.telemetry,{component:"core",operation:"session.start",error:N,severity:"error",handled:!1,context:{sessionId:d.sessionId,providerId:d.config.providerId,modelId:d.config.modelId}});try{await this.failSession(d)}catch(X0){d.config.logger?.error?.("Session failure cleanup threw",{sessionId:d.sessionId,error:X0})}throw N}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:B,result:X1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let W=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...W?{sessionMetadata:W}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),W=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:W??"immediate"}}),W==="queue"||W==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:W,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,J.finishReason);else await this.completeInteractiveTurn(Z,J.finishReason);if(J.finishReason==="error"||J.finishReason==="aborted")return J;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),J}catch(J){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw i$(Z.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),J}}async getAccumulatedUsage($){let Z=I7(this.usageBySession.get($)),Q=I7(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,this.pendingPromptsController.clearAborted(Q),Q.agent.abort(Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!j0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!j0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return tW(Z);let Q=$.trim();if(!Q)return;let W=await this.getRow(Q);if(W)return t8(W);let J=await this.readManifest(Q);return J?m7(J):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(t8),W=new Set(Q.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(W.has(J.sessionId))continue;Q.unshift(tW(J))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return n1(Q.messagesPath);let W=await this.readManifest(Z);return n1(W?.messages_path)}async dispatchHookEvent($){await HH($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){let Q=this.getSessionOrThrow($);Q.config.modelId=Z,Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:Z}),Q.agent.updateConnection({modelId:Z})}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),W=Q.prompt.trim();if(!W)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=W;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let J=await this.executeAgentTurn($,W,Q.userImages,Q.userFiles);while(KW($,J.finishReason)){let X=await FW($);if(X.length===0)break;let Y=AW($,X);J=await this.executeAgentTurn($,Y)}return J}async completeInteractiveTurn($,Z){if(G4($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),W=_0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:W}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:W,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,W){let J=$.started||$.agent.getMessages().length>0,X=$.persistedMessages??$.agent.getMessages(),Y=this.usageBySession.get($.sessionId)??_0(),j=this.aggregateUsageBySession.get($.sessionId)??Y;$.turnUsageBaseline=Y,$.turnAggregateUsageBaseline=j,$.turnPrimaryUsage=_0(),$.turnUsageByAgent=new Map,QZ($.config.telemetry,$.sessionId,$.config.mode),Z8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(Z,Q,W):()=>$.agent.run(Z,Q,W),H=await this.runWithAuthRetry($,V,X);$.started=!0;let B=T5(H.messages,H,X);$.persistedMessages=B;let G=d5($.turnUsageByAgent?.values()??[]),K=f0(Y,H.usage),F=f0(f0(_0(),H.usage),G),A=f0(j,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(L)=>({...L??{},totalCost:K.totalCost,aggregatedAgentsCost:A.totalCost,usage:K,aggregateUsage:A})),await this.invoke("persistSessionMessages",$.sessionId,B,$.config.systemPrompt),this.observeTaskCompletionTool($,H),H}catch(V){throw i$($.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($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((W)=>W.name===L0.SUBMIT_AND_EXIT&&W.error===void 0))return;$.submitAndExitObserved=!0,c4($.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($,Z){let Q=W$($.config),W=DP(Z.prompt).trim();if(!W)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let J=await l6(W,Q);BG($.config.telemetry,J);let X=K4(J.prompt,Z.mode??$.config.mode),Y=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),j=this.resolveAbsoluteFilePaths(Q,J.matchedFiles),V=Array.from(new Set([...Y,...j]));return{prompt:X,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=W$($.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:Z,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($,Z){let Q=this.sessions.get($),W=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,J=Z(W?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Q.sessionMetadata=J,Q.artifacts.manifest.metadata=J}async finalizeSingleRun($,Z){if(G4($))return;let Q=Z==="aborted"||$.aborting,W=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":W?"failed":"completed",exitCode:W?1:0,shutdownReason:W?"session_error":"session_complete",endReason:Z})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(Z.status==="completed"&&!$.submitAndExitObserved)c4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});m5($);let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),i$($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,Z.status,Z.exitCode)}catch(J){W("update_status",J)}try{await $.agent.shutdown(Z.shutdownReason)}catch(J){W("agent_shutdown",J)}}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),i$($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(Z)}catch(J){W("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let W=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!W.updated)return;let J=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(J.status=Z,j0(Z))delete J.ended_at,J.exit_code=null;else J.ended_at=W.endedAt??$0(),J.exit_code=typeof Q==="number"?Q:null;$.artifacts.manifest=J,$.status=Z,$.updatedAt=W.endedAt??$0(),$.endedAt=j0(Z)?null:J.ended_at,$.exitCode=J.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,J),this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(W){if(!J8($.config.providerId)||!UP(W))throw W;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),Z()}}async syncOAuthCredentials($,Z){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:Z?.forceRefresh})}catch(W){if(W instanceof H9)throw Error(`${W.providerId} requires re-authentication.`);throw W}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new P$($);throw i$(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>AP(W)?W:W3($,W));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return q1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let Z=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=f0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let W=W3(Z),J=`${Q}.messages.json`,X;try{X=KP($)}catch{return _0()}let Y=_0();for(let j of X){if(!j.endsWith(".messages.json"))continue;if(j===J)continue;let V=W3($,j);if(V===W)continue;let H=await n1(V);if(H.length===0)continue;Y=f0(Y,l5(H))}return Y}withPersistedAggregateUsageFloor($,Z){let Q=_P(Z.metadata?.aggregateUsage);if(Q)return zP($,Q);let W=Z.metadata?.aggregatedAgentsCost;if(typeof W!=="number"||!Number.isFinite(W)||W<=$.totalCost)return $;return{...$,totalCost:W}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:t1({session:Z,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($)),iG))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(iG)).find((W)=>W.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return dG(this.sessionService,$,...Z)}invokeOptional($,...Z){return lG(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return pG(this.sessionService,$,...Z)}}function TP($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let Z=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(Z==="local"||Z==="hub"||Z==="remote")return Z;return"auto"}var R4,E4;function OP($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;bH(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function qP($){await $.reconcileDeadSessions?.().catch(()=>{})}function sG($){try{let Z=new Z$;return Z.init(),new Q$(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),aG($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new LW(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function nG($,Z,Q){return new j$({sessionService:Q??$.sessionService??sG($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function MP($){if(R4)return R4;if(E4)return await E4;return E4=(async()=>{return R4=sG($),await qP(R4),R4})().finally(()=>{E4=void 0}),await E4}async function G9($){let Z=m0($.distinctId);$.telemetry?.setDistinctId(Z);let Q=TP($);if(OP(Q,$),Q==="remote"){let W=$.remote?.endpoint?.trim();if(!W)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:W}),new C5({endpoint:W,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let W=$.hub?.endpoint?.trim(),J=W||await X4({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:W||void 0}),new u$({url:J,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Q==="auto"){let W=await a7({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(W){$.logger?.log("Using discovered local hub runtime host",{url:W});let J=new u$({url:W,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(X){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:X}),aG($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:X,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),nG($,Z)}return nG($,Z)}import{execFile as RP}from"node:child_process";import*as tG from"node:fs/promises";import*as a2 from"node:path";import{promisify as EP}from"node:util";var NP=EP(RP),wP=52428800;async function K9($,Z){let{stdout:Q}=await NP("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:wP,encoding:"utf8"});return Q}function oG($){return $.split("\x00").filter(Boolean)}function eG($,Z){let Q=a2.resolve($,Z),W=a2.relative($,Q);if(W.startsWith("..")||a2.isAbsolute(W))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function CP($,Z,Q){try{return await K9($,["show",`${Z}:${Q}`])}catch{return""}}async function PP($,Z){try{return await tG.readFile(eG($,Z),"utf8")}catch{return""}}async function SP($,Z){await K9($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,W]=await Promise.all([K9($,["diff","--name-only","-z",Z.ref,"--"]),K9($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...oG(Q),...oG(W)])].sort((X,Y)=>X.localeCompare(Y))}function $K($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=J9(O4($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Q,cwd:W}}async function ZK($,Z){let Q=await SP($,Z);return(await Promise.all(Q.map(async(J)=>{let[X,Y]=await Promise.all([CP($,Z.ref,J),PP($,J)]);return{filePath:eG($,J),leftContent:X,rightContent:Y}}))).filter((J)=>J.leftContent!==J.rightContent)}async function J3($){let Z=$K($),Q=await ZK(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}import{existsSync as bP,mkdirSync as yP,readFileSync as hP,writeFileSync as kP}from"node:fs";import{dirname as IP}from"node:path";import{FEATURE_FLAGS as QK,FeatureFlagDefaultValue as X3}from"@cline/shared";var xP=3600000,gP=604800000,WK=1;class N4{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??xP,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??gP,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 Z=$??this.context.userId??null,Q=Date.now();if(Q-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===Z)return}let W=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:Z||null};try{let J=await this.provider.getAllFlagsAndPayloads({flagKeys:QK.length>0?QK:void 0,context:{...this.context,userId:Z}});if(this.cacheInfo.userId!==Z)return;this.cacheInfo.flagsPayload=J,this.rebuildCacheFromSnapshot(J),this.writePersistentCache()}catch(J){if(this.cacheInfo.userId!==Z)return;throw this.cacheInfo=W.updateTime?W:{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((Z)=>this.isFeatureFlagPayload(Z));if(typeof $==="object")return Object.values($).every((Z)=>this.isFeatureFlagPayload(Z));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=Object.entries($).filter(([,W])=>this.isFeatureFlagPayload(W));if(Z.length===0)return;let Q={};for(let[W,J]of Z)Q[W]=J;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!bP(this.cacheFilePath))return;let $=JSON.parse(hP(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==WK||typeof Z.updatedAt!=="number"||!Number.isFinite(Z.updatedAt)||Date.now()-Z.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:Z.updatedAt,userId:Z.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(Z.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(Z.flagsPayload?.featureFlagPayloads)}}}catch($){this.logger?.error?.("Error reading SDK feature flags cache",{error:$});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;yP(IP(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:WK,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};kP(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
716
- `,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let Z=new Map;for(let Q of this.getReturnedFlagKeys($)){let W=this.getFeatureFlag(Q);Z.set(Q,W??!1)}this.cache=Z}getFeatureFlag($){try{let Z=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],W=Z??Q??X3[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==W)this.telemetry?.capture({event:I.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return W}catch(Z){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:Z}),X3[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??X3[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,Z){if(process.env.IS_TEST==="true")this.cache.set($,Z)}async dispose(){await this.provider.dispose()}}class w4{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}g2();class Y3{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,Z,Q,W,J,X,Y,j,V,H){this.clientName=Z,this.runtimeAddress=Q,this.host=$,this.prepare=W,this.capabilities=J,this.logger=X,this.telemetry=Y,this.distinctId=j,this.featureFlags=V,this.settings=SV($),this.pendingPrompts=bV($),this.automation=new mZ(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=H?new a8({workspaceRoot:H.workspaceRoot??process.cwd(),specs:{cronSpecsDir:H.cronSpecsDir??H.cronDir,scope:GX(H.cronScope),workspaceRoot:H.workspaceRoot},runtimeHandlers:KX({host:$,getExtensionContext:()=>Y6({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:H.dbPath,logger:H.logger,pollIntervalMs:H.pollIntervalMs,claimLeaseSeconds:H.claimLeaseSeconds,globalMaxConcurrency:H.globalMaxConcurrency,watcherDebounceMs:H.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((B)=>{if(B.type!=="ended")return;this.disposeSessionBootstrap(B.payload.sessionId)})}static async create($={}){let Z=m0($.distinctId),Q=O0($.capabilities),W={...$,capabilities:Q,distinctId:Z},J=await G9(W),X=BX($.automation),Y=$.featureFlags||new N4({provider:new w4,telemetry:$.telemetry,logger:$.logger,context:{distinctId:Z,clientName:$.clientName}}),j=new Y3(J,$.clientName,J.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,Z,Y,X?{...X,logger:$.logger}:void 0);if(X&&X.autoStart!==!1)await j.automation.start();return j}async disposeSessionBootstrap($){let Z=this.activeSessionBootstraps.get($);if(!Z)return;this.activeSessionBootstraps.delete($),await Promise.resolve(Z.dispose?.())}async start($){let Z=yV($),Q=await this.prepare?.(Z);try{let W=Q?await Q.applyToStartSessionInput(Z):Z,J=await this.host.startSession(V7(W,{defaultCapabilities:this.capabilities,withExtensionContext:(X)=>Y6({automationService:this.automationService,automation:this.automation,context:X,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Q)if(await this.host.getSession(J.sessionId))this.activeSessionBootstraps.set(J.sessionId,Q);else await Promise.resolve(Q.dispose?.());return hV({input:W,sessionId:J.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),J}catch(W){throw await Promise.resolve(Q?.dispose?.()),W}}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 Z=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(Z.map((Q)=>this.disposeSessionBootstrap(Q)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await v7(this.host,$);list=async($=200,Z={})=>await this.listHistory({...Z,limit:$});delete=async($)=>{let Z=await this.host.deleteSession($);if(Z)await this.disposeSessionBootstrap($);return Z};update=(...$)=>this.host.updateSession(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let Z=$.start?V7($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>Y6({automationService:this.automationService,automation:this.automation,context:Q,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:Z})}async compareCheckpoint($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=await this.host.getSession(Z);if(!Q)throw Error(`Session ${Z} not found`);return J3({session:Q,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,Z){return this.host.subscribe($,Z)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}import{HookEventNameSchema as XK,HookEventPayloadSchema as YK,parseHookEventPayload as A9,resolveHookSessionContext as pP}from"@cline/shared";import{z as n$}from"zod";import{spawn as mP}from"node:child_process";import{augmentNodeCommandForDebug as vP,withResolvedClineBuildEnv as cP}from"@cline/shared";function uP($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
717
- `).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse subprocess stdout JSON"}}}function dP($,Z){let Q=$ instanceof Error?$:Error(String($)),W=Q,J=Z.join(" ");if(W.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}": ${Q.message}`)}async function lP($,Z){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((W,J)=>{let X=(Y)=>{Q.off("error",X);let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y)};Q.once("error",X),Q.end(Z,(Y)=>{if(Q.off("error",X),Y){let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y);return}W()})})}async function F9($,Z){let Q=vP(Z.command,{env:Z.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let W=!!Z.detached,J=mP(Q[0],Q.slice(1),{cwd:Z.cwd,env:cP(Z.env),stdio:W?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:W,windowsHide:!0}),X=new Promise((K)=>{J.once("spawn",()=>{try{Z.onSpawn?.({command:Q,pid:J.pid??void 0,detached:W})}catch{}K()})}),Y=new Promise((K,F)=>{J.once("error",(A)=>{F(dP(A,Q))})});if(await lP(J,JSON.stringify($)),W){await Promise.race([X,Y]),J.unref();return}if(!J.stdout||!J.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let j="",V="",H=!1,B;J.stdout.on("data",(K)=>{j+=K.toString()}),J.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((Z.timeoutMs??0)>0)B=setTimeout(()=>{H=!0,J.kill("SIGKILL")},Z.timeoutMs);J.once("close",(F)=>{if(B)clearTimeout(B);let{parsedJson:A,parseError:L}=uP(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:H})})});return await Promise.race([G,Y])}var rP=n$.object({contextModification:n$.string().optional(),cancel:n$.boolean().optional(),review:n$.boolean().optional(),errorMessage:n$.string().optional(),context:n$.string().optional(),overrideInput:n$.unknown().optional()}).passthrough();var iP=["agent","hook"];async function f9($,Z={}){let Q=Z.command??iP;return await F9($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function jK($){return $ instanceof Error?$:Error(String($))}function nP($){if(!$||typeof $!=="object")return;let Z=rP.safeParse($);if(!Z.success)return;let Q=Z.data;if(!(("cancel"in Q)||("review"in Q)||("context"in Q)||("contextModification"in Q)||("overrideInput"in Q)||("errorMessage"in Q)))return;let J=typeof Q.context==="string"?Q.context:typeof Q.contextModification==="string"?Q.contextModification:typeof Q.errorMessage==="string"&&Q.errorMessage.length>0?Q.errorMessage:void 0;return{cancel:typeof Q.cancel==="boolean"?Q.cancel:void 0,review:typeof Q.review==="boolean"?Q.review:void 0,context:J,overrideInput:Object.hasOwn(Q,"overrideInput")?Q.overrideInput:void 0}}function JK($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W;else Z[Q]=JSON.stringify(W);return Z}function M1($,Z,Q){let W=Q.env??process.env,J=W.CLINE_USER_ID?.trim()||W.USER?.trim()||"unknown",X=Q.cwd||process.cwd();return{clineVersion:W.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:Z.conversationId,sessionContext:pP(Q.sessionContext,{hookName:$,conversationId:Z.conversationId,agentId:Z.agentId,parentAgentId:Z.parentAgentId}),workspaceRoots:X?[X]:[],workspaceInfo:Q.workspaceInfo,userId:J,agent_id:Z.agentId,parent_agent_id:Z.parentAgentId}}function aP($){return{name:$.name,message:$.message,stack:$.stack}}function sP($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function oP($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function tP($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function eP($){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 $S($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}async function a$($,Z){try{let Q=await f9($,{command:Z.command,cwd:Z.cwd,env:Z.env,detached:!0,onSpawn:Z.onSpawn});Z.onDispatch?.({payload:$,result:Q,detached:!0})}catch(Q){Z.onDispatchError?.(jK(Q),$)}}function VK($={}){return{hooks:{beforeRun:async(j)=>{let V=oP(j);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let B={...M1("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await a$(B,$)}else{let B={...M1("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await a$(B,$)}return},beforeTool:async(j)=>{let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...M1("tool_call",V,$),hookName:"tool_call",iteration:j.snapshot.iteration,tool_call:{id:j.toolCall.toolCallId,name:j.toolCall.toolName,input:j.input},preToolUse:{toolName:j.toolCall.toolName,parameters:JK(j.input)}};try{let B=await f9(H,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:H,result:B,detached:!1}),B?.timedOut)throw Error("tool_call hook command timed out");if(B?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${B.parseError}`);return $S(nP(B?.parsedJson))}catch(B){$.onDispatchError?.(jK(B),H);return}},afterTool:async(j)=>{let V=eP(j),H={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},B={...M1("tool_result",H,$),hookName:"tool_result",iteration:j.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:JK(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await a$(B,$);return},afterRun:async({snapshot:j,result:V})=>{let H={agentId:j.agentId,conversationId:j.conversationId??j.runId??j.agentId,parentAgentId:j.parentAgentId??null};if(V.status==="completed"){let K={...M1("agent_end",H,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await a$(K,$);return}let B=V.status==="aborted"||sP(V.error?.message)?"agent_abort":"agent_error",G=B==="agent_error"?{...M1(B,H,$),hookName:B,iteration:V.iterations,error:aP(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...M1(B,H,$),hookName:B,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await a$(G,$)},onEvent:async(j)=>{if(j.type!=="message-added"||j.message.role!=="user")return;let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...M1("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:tP(j.message.content),attachments:[]}};await a$(H,$)}},shutdown:async({agentId:j,conversationId:V,parentAgentId:H,reason:B})=>{let G={...M1("session_shutdown",{agentId:j,conversationId:V,parentAgentId:H},$),hookName:"session_shutdown",reason:B};await a$(G,$)}}}import{createSessionId as ZS}from"@cline/shared";function c0($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function HK($,Z,Q){return{version:$.version,requestId:$.requestId??ZS("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class U9{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return c0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return c0($,{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 c0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return c0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return c0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return c0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return c0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return c0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return c0($,{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 c0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return c0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return c0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return HK($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Z){return HK($,"schedule_command_failed",Z instanceof Error?Z.message:String(Z))}}toCreateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:Z}}toUpdateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:Z}}}function L9($){return $?new Date($).getTime():void 0}function QS($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function D9($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof Z?.__hubScheduleCwd==="string"?Z.__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:L9($.nextRunAt),lastRunAt:L9($.lastRunAt),createdBy:typeof Z?.__hubScheduleCreatedBy==="string"?Z.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:Z?.__hubRuntimeOptions&&typeof Z.__hubRuntimeOptions==="object"&&!Array.isArray(Z.__hubRuntimeOptions)?Z.__hubRuntimeOptions:void 0,metadata:QS($)}}function WS($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function j3($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:L9($.startedAt),endedAt:L9($.completedAt),status:WS($.status),errorMessage:$.error}}class _9{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new n8({dbPath:$.dbPath}),this.materializer=new d8({store:this.store}),this.runner=new l8({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(_7($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return D9(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?D9(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>D9(Z))}updateSchedule($,Z){if(Z.cronPattern!==void 0)_7(Z.cronPattern);let Q=this.store.getHubSchedule($);if(!Q)return;let W=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot;if((Z.enabled??Q.enabled)&&!W)throw Error("workspaceRoot is required for enabled schedules");let X=this.store.updateHubSchedule($,{...Z,scheduleId:$});return X?D9(X):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;await this.runner.tick();let Q=this.store.getRun(Z.runId)??Z;return j3(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),j3(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((J)=>{let X=Z??this.store.getSpec(J.specId);if(!X||X.source!=="hub-schedule")return;return j3(J,X.externalId)}).filter((J)=>{if(!J)return!1;return!$.status||J.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,W=0,J=0,X;for(let Y of Z){if(Y.status==="success"||Y.status==="completed")Q+=1;if(!X&&Y.status!=="success"&&Y.status!=="completed")X=Y;if(Y.startedAt&&Y.endedAt)J+=Y.endedAt-Y.startedAt,W+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:W>0?J/W/1000:0,lastFailure:X}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let Z=this.store.getSpec($.specId);if(!Z||Z.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:Z.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:Z.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+Z.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let Z={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(Z).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,W)=>String(Q.nextRunAt).localeCompare(String(W.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:W})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:W}))}}q9();import{resolveClineBuildEnv as ES}from"@cline/shared";function NS($,Z){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Q?`Failed to connect to hub at ${Z} (${Q} event before socket open).`:`Failed to connect to hub at ${Z}.`)}var wS="cline-hub-auth.";function CS($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function PS($,Z){let Q=new URL($),W=new URL(Z);return Q.search="",Q.hash="",W.search="",W.hash="",Q.toString()===W.toString()}function KK(){return ES()==="production"?s1():_1()}async function SS($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=KK(),W=await A0(Q.discoveryPath);if(W?.url&&PS($.toString(),W.url))return W.authToken;return}async function bS($={}){let Z=a1($);if(!CS($)){let Q=KK(),W=await A0(Q.discoveryPath);if(W?.url)return W.url}return L1(Z.host,Z.port,Z.pathname)}async function FK($){return await new Promise((Z,Q)=>{(async()=>{let W=new URL($),J=await SS(W);W.hash="";let X=new WebSocket(W.toString(),J?[`${wS}${J}`]:void 0),Y=new Map,j=0;X.addEventListener("open",()=>{Z({send(V){let H=V.requestId??`hub-client-${++j}`;return new Promise((B,G)=>{Y.set(H,{resolve:B,reject:G});let K={kind:"command",envelope:{...V,requestId:H}};X.send(JSON.stringify(K))})},close(){X.close()}})}),X.addEventListener("message",(V)=>{let H=JSON.parse(String(V.data));if(H.kind==="reply"&&H.envelope.requestId){let B=Y.get(H.envelope.requestId);if(B)Y.delete(H.envelope.requestId),B.resolve(H.envelope)}}),X.addEventListener("close",()=>{for(let V of Y.values())V.reject(Error("Hub connection closed"));Y.clear()}),X.addEventListener("error",(V)=>{Q(NS(V,$))})})().catch(Q)})}async function ds($){try{return(await FK($)).close(),!0}catch{return!1}}async function ls($,Z){let Q=await bS($),W=await FK(Q);try{return await W.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{W.close()}}function G3($){return $?JSON.parse(JSON.stringify($)):{}}function M9($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?G3(Z.metadata):void 0;return{sessionId:typeof Z.sessionId==="string"?Z.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function AK($,Z){return $.error?.message??`hub command failed: ${Z}`}function yS($){let Z=G3($);if(typeof Z.error==="string"&&Z.error.trim())return{...Z,error:Z.error.trim()};let Q=Z.result&&typeof Z.result==="object"?Z.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...Z,error:Q.text.trim()};let W=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof W?.message==="string"&&W.message.trim())return{...Z,error:W.message.trim()};return Z}function fK($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function hS($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error("hub checkpoint restore returned no checkpoint");let Q=Z;if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Q}function kS($){let Z=G3($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||fK(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||fK(Z)||"",eventType:"schedule.execution.failed",payload:Z};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:Z};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:Z};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:Z};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:Z};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:Z};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:Z};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:Z};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:Z};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:yS($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class IS{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new z1({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 Z=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}),Q=M9(Z.payload);if(!Q?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}}}async sendRuntimeSession($,Z,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:Z.prompt,mode:Z.config.mode,attachments:Z.attachments,delivery:Z.delivery,timeoutSeconds:Z.config.timeoutSeconds},$,Q)).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 Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(S$(Q))return;throw Q}return M9(Z.payload)}async readMessages($){let Z=$.trim();if(!Z)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw Error(AK(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async restore($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let W=$.config,J=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.workspaceRoot,cwd:W.cwd,sessionConfig:{providerId:W.provider,modelId:W.model,apiKey:W.apiKey,cwd:W.cwd??W.workspaceRoot,workspaceRoot:W.workspaceRoot,systemPrompt:W.systemPrompt??"",mode:W.mode??"act",rules:W.rules,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawnAgent:W.enableSpawn!==!1,enableAgentTeams:W.enableTeams!==!1,disableMcpSettingsTools:W.disableMcpSettingsTools,missionLogIntervalSteps:W.missionStepInterval,missionLogIntervalMs:W.missionTimeIntervalMs},metadata:{source:W.source??"cli",provider:W.provider,model:W.model,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,prompt:void 0,interactive:W.interactive!==!1},runtimeOptions:{mode:W.mode,systemPrompt:W.systemPrompt,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,autoApproveTools:W.autoApproveTools,configExtensions:W.configExtensions},modelSelection:{provider:W.provider,model:W.model,apiKey:W.apiKey},toolPolicies:W.toolPolicies}:{}},Z);if(!J.ok)throw Error(AK(J,"session.restore"));let X=M9(J.payload);if(Q&&!X?.sessionId)throw Error("hub checkpoint restore returned no session id");let Y=Array.isArray(J.payload?.messages)?J.payload.messages:void 0,j=hS(J.payload);return{sessionId:X?.sessionId,startResult:X?.sessionId?{sessionId:X.sessionId,manifestPath:"",messagesPath:X.messagesPath??""}:void 0,...Y?{messages:Y}:{},checkpoint:j}}async listSessions($){await this.ensureMetadataApplied();let Z=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(Z.payload?.sessions)?Z.payload?.sessions:[]).map((W)=>M9({session:W})).filter((W)=>Boolean(W?.sessionId))}async deleteSession($,Z=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:Z})).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($,Z){let Q=new Set(($.sessionIds??[]).map((J)=>J.trim()).filter(Boolean)),W=this.client.subscribe((J)=>{let X=kS(J);if(!X)return;if(Q.size>0&&!Q.has(X.sessionId))return;Z.onEvent?.(X)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),W}streamTeamProgress($,Z){let Q=this.client.subscribe((W)=>{if(W.event!=="team.progress"||!W.payload)return;Z.onProjection?.(W.payload)});return this.ensureMetadataApplied().catch((W)=>{Z.onError?.(W instanceof Error?W:Error(String(W)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list");return Array.isArray(Z.payload?.schedules)?Z.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,Z){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...Z})).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($,Z){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:Z});return Array.isArray(Q.payload?.executions)?Q.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 Z=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(Z.payload?.upcoming)?Z.payload?.upcoming:[]}}class xS{client;constructor($){this.client=new z1({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 Z=await this.client.command("session.list",{limit:$});return Array.isArray(Z.payload?.sessions)?Z.payload.sessions:[]}subscribeUI($){return this.client.subscribe((Z)=>{switch(Z.event){case"ui.notify":$.onNotify?.(Z.payload);break;case"ui.show_window":$.onShowWindow?.(Z.payload);break;case"hub.client.registered":$.onClientRegistered?.(Z.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(Z.payload??{});break;case"session.created":$.onSessionCreated?.(Z.payload??{});break;case"session.updated":$.onSessionUpdated?.(Z.payload??{});break;case"session.detached":$.onSessionDetached?.(Z.payload??{});break}})}}import{normalizeProviderId as gS}from"@cline/llms";function mS($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function vS($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function Qo($={}){let Z=new j$({sessionService:new Q$(new Z$),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||T0.CLI,interactive:!1,config:{providerId:gS(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:vS(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{configExtensions:Q.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Q,W){let J=await Z.runTurn({sessionId:Q,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((X)=>X.content)});if(!J)throw Error("local hub schedule runtime returned no turn result");return{result:mS(J)}},async abortSession(Q){return await Z.abort(Q,Error("hub schedule abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}import{resolveClineBuildEnv as UF}from"@cline/shared";function cS($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
718
- `).trim()||void 0}var UK=120,K3="...";function F3($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=UK)return Z;let Q=UK-Buffer.byteLength(K3,"utf8");if(Q<=0)return K3;let W="";for(let J of Z){if(Buffer.byteLength(W+J,"utf8")>Q)break;W+=J}return`${W}${K3}`}async function DK($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await n1(Q)].reverse().find((V)=>V.role==="assistant"),X=J?cS(J.content):void 0,Y=$?.workspaceRoot?.trim()||"workspace",j=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():Y;return{title:`Task completed (${Z})`,body:F3(X&&X.length>0?X:j.length>0?j:Y),severity:"info"}}import{captureSdkError as C9,createSessionId as mb}from"@cline/shared";import{createSessionId as pS}from"@cline/shared";import{createSessionId as lS}from"@cline/shared";function uS($){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 dS($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())Z.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())Z.parentAgentId=$.parentAgentId;if($.agentId?.trim())Z.agentId=$.agentId;if($.conversationId?.trim())Z.conversationId=$.conversationId;if($.messagesPath?.trim())Z.messagesPath=$.messagesPath;if($.prompt?.trim())Z.prompt=$.prompt;if($.provider?.trim())Z.provider=$.provider;if($.model?.trim())Z.model=$.model;if($.source?.trim())Z.source=$.source;if(typeof $.pid==="number")Z.pid=$.pid;return Object.keys(Z).length>0?Z:void 0}function R9($,Z,Q,W){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:uS($.status),participants:Z?[...Z.participants.values()]:[],metadata:dS($),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,...Q?{usage:{...Q}}:{},...W?{aggregateUsage:{...W}}:{}}}function g($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function h($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function E9($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function C0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function o$($,Z,Q){return{version:"v1",event:$,eventId:lS("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function u0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let W=await $.sessionHost.getAccumulatedUsage?.(Z);return R9(Q,$.sessionState.get(Z),W?.usage,W?.aggregateUsage)}async function d0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[W,J]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return t1({session:Q,messages:W,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function N9($,Z,Q,W,J={}){let X=$.sessionState.get(Z);if(X){if(J.interactive!==void 0)X.interactive=J.interactive;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:W});return X}let Y={createdByClientId:Q,interactive:J.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:W}]])};return $.sessionState.set(Z,Y),Y}async function A3($,Z){let Q=pS("approval_"),W=Z.sessionId;if($.sessionState.get(W)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((X)=>{$.pendingApprovals.set(Q,{sessionId:W,resolve:X}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:Z.sessionId,agentId:Z.agentId,conversationId:Z.conversationId,iteration:Z.iteration,toolCallId:Z.toolCallId,toolName:Z.toolName,inputJson:JSON.stringify(Z.input??null),policy:Z.policy},W))})}function f3($,Z,Q){let W=$.pendingApprovals.get(Z);if(!W)return;return $.pendingApprovals.delete(Z),W.resolve(Q),{sessionId:W.sessionId}}function U3($,Z,Q){let W=0;for(let[J,X]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:J,sessionId:X.sessionId}))continue;$.pendingApprovals.delete(J),X.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:J,approved:!1,cancelled:!0,reason:Q},X.sessionId)),W+=1}return W}async function LK($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return h(Z,"approval_not_found",`Unknown approval: ${Q}`);let J=typeof Z.payload?.reason==="string"?Z.payload.reason:Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)&&typeof Z.payload.payload.reason==="string"?Z.payload.payload.reason:void 0,X=Z.payload?.approved===!0,Y=f3($,Q,{approved:X,reason:J});if(!Y)return h(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:X,reason:J},Y.sessionId)),g(Z,{approvalId:Q,approved:X})}import{createSessionId as nS}from"@cline/shared";function rS($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var _K={debug:10,info:20,warn:30,error:40,silent:50};function iS(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function m($,Z,Q={}){if(_K[$]<_K[iS()])return;let W=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([J,X])=>[J,rS(X)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${W}`);return}console.log(`[hub] ${W}`)}function D3($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);m("error",$,{error:Q})}async function zK($,Z,Q,W,J,X){let Y=nS("capreq_"),j=performance.now();return m("info","capability.request.start",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J}),await new Promise((V,H)=>{$.pendingCapabilityRequests.set(Y,{sessionId:Z,targetClientId:J,capabilityName:Q,onProgress:X,resolve:(B)=>{if(m(B.ok?"info":"warn","capability.request.end",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J,ok:B.ok,error:B.error,durationMs:Math.round(performance.now()-j)}),!B.ok){H(Error(B.error||`Capability ${Q} was rejected by ${J}.`));return}V(B.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:Y,targetClientId:J,capabilityName:Q,payload:W},Z)),m("info","capability.request.published",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J})})}function TK($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return h(Z,"capability_not_found",`Unknown capability request: ${Q}`);if((Z.clientId?.trim()||"")!==W.targetClientId)return h(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return h(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return W.onProgress?.(X),g(Z,{requestId:Q})}function V$($,Z,Q){let W=0;for(let[J,X]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:J,...X}))continue;$.pendingCapabilityRequests.delete(J),m("warn","capability.request.cancelled",{requestId:J,sessionId:X.sessionId,capabilityName:X.capabilityName,targetClientId:X.targetClientId,reason:Q}),X.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:X.capabilityName,targetClientId:X.targetClientId,ok:!1,cancelled:!0,error:Q},X.sessionId)),W+=1}return W}async function OK($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",W=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",J=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!W||!J)return h(Z,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{},Y=await $.requestCapability(Q,W,X,J);return g(Z,Y)}catch(X){return h(Z,"capability_request_failed",X instanceof Error?X.message:String(X))}}function qK($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return h(Z,"capability_not_found",`Unknown capability request: ${Q}`);let J=Z.clientId?.trim()||"";if(J!==W.targetClientId)return h(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return h(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);$.pendingCapabilityRequests.delete(Q);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,Y=typeof Z.payload?.error==="string"?Z.payload.error:void 0,j=Z.payload?.ok===!0;return m(j?"info":"warn","capability.respond",{requestId:Q,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,error:Y}),W.resolve({ok:j,payload:X,error:Y}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,payload:X,error:Y},W.sessionId)),g(Z,{requestId:Q,ok:j})}import{createSessionId as aS}from"@cline/shared";function MK($,Z){let Q=Z.payload,W=Q?.clientId?.trim()||Z.clientId?.trim()||aS("client_");return $.clients.set(W,{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,actorKind:Q?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Q?.transport??"native",capabilities:Q?.capabilities??[],metadata:Q?.metadata,workspaceContext:Q?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),g(Z,{clientId:W})}function RK($,Z){let Q=Z.clientId?.trim(),W=Q?$.clients.get(Q):void 0;if(!Q||!W)return h(Z,"client_not_found","Client is not registered with this hub.");let J=E9(Z.payload?.metadata);if(W.lastSeenAt=Date.now(),J)W.metadata=JSON.parse(JSON.stringify(J));return g(Z)}function EK($,Z,Q){let W=Z.clientId?.trim();if(W)$.clients.delete(W),Q(W),$.publish($.buildEvent("hub.client.disconnected",{clientId:W}));return g(Z)}function NK($,Z){return g(Z,{clients:[...$.clients.values()]})}G0();import{existsSync as PK,mkdirSync as sS,readdirSync as oS,readFileSync as tS,rmSync as eS,writeFileSync as $b}from"node:fs";import{dirname as Zb,join as wK}from"node:path";import{CONNECTOR_PLATFORMS as Qb,connectorChannelsFromPlatforms as Wb,listConnectorCatalog as SK,shouldIncludeConnectorField as Jb}from"@cline/shared";import{resolveConnectorDataDir as Xb,resolveConnectorSettingsPath as _3}from"@cline/shared/storage";var Yb=1,CK={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},jb={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 H$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function b4($){return typeof $==="string"?$.trim():void 0}function bK($){if(!PK($))return;try{let Z=JSON.parse(tS($,"utf8"));return H$(Z)?Z:void 0}catch{return}}function z3(){let $=bK(_3()),Z=H$($?.connectors)?$.connectors:{},Q={};for(let[W,J]of Object.entries(Z)){if(!H$(J))continue;let X=b4(J.type),Y=b4(J.configuredAt),j=b4(J.updatedAt);if(!X||!Y||!j)continue;let V=w9(J.values),H=H$(J.security)?{enabled:J.security.enabled===!0,values:w9(J.security.values)}:void 0;Q[W]={type:X,values:V,security:H,configuredAt:Y,updatedAt:j}}return{version:Yb,connectors:Q}}function yK($){let Z=_3();sS(Zb(Z),{recursive:!0}),$b(Z,`${JSON.stringify($,null,2)}
719
- `,"utf8")}function w9($){if(!H$($))return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W.trim();return Z}function Vb($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function Hb($){let Z=wK(Xb(),$);if(!PK(Z))return[];return oS(Z).filter((Q)=>Q.endsWith(".json")&&!Q.endsWith(".threads.json")).map((Q)=>wK(Z,Q))}function Bb($,Z,Q){let W=Z.botUsername??Z.userName??Z.applicationId??Z.phoneNumberId??String(Q);return`${$}:${W}`}function Gb($,Z){let Q=bK(Z);if(!Q)return;let W=typeof Q.pid==="number"?Q.pid:void 0,J=typeof Q.hubUrl==="string"?Q.hubUrl:typeof Q.rpcAddress==="string"?Q.rpcAddress:void 0;if(!W||!J||!Vb(W))return;let X=jb[$];if(!X)return;let Y={};for(let j of X.required){let V=CK[j](Q);if(!V||typeof V==="string"&&!V.trim())return;Y[j]=V}for(let j of X.optional){let V=CK[j](Q);if(V!==void 0)Y[j]=V}return{id:Bb($,Y,W),type:$,pid:W,hubUrl:J,...Y}}function Kb(){let $=[];for(let{name:Z}of SK())for(let Q of Hb(Z)){let W=Gb(Z,Q);if(W)$.push(W)}return $.sort((Z,Q)=>{if(Z.type!==Q.type)return Z.type.localeCompare(Q.type);let W=Z.botUsername??Z.userName??"",J=Q.botUsername??Q.userName??"";return W.localeCompare(J)})}function Fb(){let $=z3();return Object.entries($.connectors).map(([Z,Q])=>({id:Z,type:Q.type,configuredAt:Q.configuredAt,updatedAt:Q.updatedAt})).sort((Z,Q)=>Z.type.localeCompare(Q.type))}function T3(){return{available:Wb(),active:Kb(),configured:Fb()}}function Ab($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function fb($,Z){let Q={};for(let J of $.fields)Q[J.flag]=Z[J.flag]??J.initialValue??"";let W={};for(let J of $.fields){if(!Jb(J,Q))continue;Ab(J,Q),W[J.flag]=Q[J.flag]}return W}function Ub($){if(!H$($))throw Error("connector.configure payload must be an object.");let Z=b4($.channel);if(!Z)throw Error("channel is required");let Q=Qb.find((K)=>K.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(SK().map((K)=>K.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let J=w9($.values),X=fb(Q,J),Y=H$($.security)?$.security:{},j=Y.enabled===!0,V=w9(Y.values);if(j&&Q.security)for(let K of Q.security.fields){let F=V[K.key];if(!F)throw Error(K.requiredMessage);let A=K.validate?.(F);if(A)throw Error(A)}let H=z3(),B=new Date().toISOString(),G=H.connectors[Z];return H.connectors[Z]={type:Z,values:X,security:j?{enabled:!0,values:V}:{enabled:!1,values:{}},configuredAt:G?.configuredAt??B,updatedAt:B},yK(H),T3()}function Db($){if(!H$($))throw Error("connector.delete_config payload must be an object.");let Z=b4($.channel);if(!Z)throw Error("channel is required");let Q=z3();if(delete Q.connectors[Z],Object.keys(Q.connectors).length>0)yK(Q);else eS(_3(),{force:!0});return T3()}function Lb($){return $==="connector.configure"||$==="connector.delete_config"}function L3($,Z,Q){if(!Lb(Z.command))return;Q8($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function hK($,Z){try{if(Z.command==="connector.channels")return g(Z,T3());if(Z.command==="connector.configure"){let Q=Ub(Z.payload);return L3($,Z,!0),g(Z,Q)}if(Z.command==="connector.delete_config"){let Q=Db(Z.payload);return L3($,Z,!0),g(Z,Q)}return h(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return L3($,Z,!1),h(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var _b=30000;function zb($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function Tb($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function Ob($,Z,Q){let W=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return h($,c8,W)}function qb($){return $?$:void 0}function Mb($){let Z=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(Z&&Number.isFinite(Z)&&Z>0)return Math.floor(Z);let Q=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(Q&&Number.isFinite(Q)&&Q>0)return Math.floor(Q*1000);return}async function Rb($,Z,Q,W){let J=performance.now(),X=!1,Y={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:W},j=setInterval(()=>{if(X)return;let B=Math.round(performance.now()-J);m("warn","run.heartbeat",{...Y,elapsedMs:B}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:B,...W?{timeoutMs:W}:{}},Q.sessionId))},_b),V=$.sessionHost.runTurn(Q);V.then((B)=>{if(!X)return;m("warn","run.late_end",{...Y,elapsedMs:Math.round(performance.now()-J),finishReason:B?.finishReason})},(B)=>{if(!X)return;m("error","run.late_error",{...Y,elapsedMs:Math.round(performance.now()-J),error:B})});let H;try{if(!W)return await V;return await Promise.race([V,new Promise((B,G)=>{H=setTimeout(()=>{let K=`Hub run ${Z.command} timed out after ${W}ms.`;X=!0,clearInterval(j),G(Error(K)),m("error","run.timeout",{...Y,elapsedMs:Math.round(performance.now()-J)}),U3($,(F)=>F.sessionId===Q.sessionId,K),V$($,(F)=>F.sessionId===Q.sessionId,K),$.sessionHost.abort(Q.sessionId,K).catch((F)=>{m("error","run.timeout_abort_failed",{...Y,error:F})})},W)})])}finally{if(X=!0,clearInterval(j),H)clearTimeout(H)}}async function kK($,Z){let Q=C0(Z),W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.prompt==="string"?W.prompt:typeof W.input==="string"?W.input:"";if(!J.trim())return h(Z,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let X=W.attachments&&typeof W.attachments==="object"&&!Array.isArray(W.attachments)?W.attachments:void 0,Y=Array.isArray(X?.userFiles)?X.userFiles.filter((B)=>typeof B==="string"):void 0,j=Mb(W);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let V;try{V=await Rb($,Z,{sessionId:Q,prompt:J,mode:qb(W.mode),delivery:W.delivery==="queue"||W.delivery==="steer"?W.delivery:void 0,userImages:Array.isArray(X?.userImages)?X.userImages:void 0,userFiles:Y,timeoutMs:j},j)}catch(B){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(S$(B))return Ob(Z,Q,B);throw $.publish($.buildEvent("run.failed",{reason:"error",error:B instanceof Error?B.message:String(B)},Q)),B}if(V){let B=await d0($,Q),G=Tb(V);if($.publish($.buildEvent(zb(V.finishReason),{reason:V.finishReason,...G?{error:G}:{},result:V,...B?{snapshot:B}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let H=await d0($,Q);return g(Z,V||H?{...V?{result:V}:{},...H?{snapshot:H}:{}}:void 0)}async function IK($,Z){let Q=C0(Z),W=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";U3($,(J)=>J.sessionId===Q,W);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(J){m("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:J})}finally{V$($,(J)=>J.sessionId===Q,W)}return g(Z,{applied:!0})}async function xK($,Z){let Q=A9(Z.payload?.payload);if(!Q)return h(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),g(Z,{applied:!0})}async function gK($,Z){switch(Z.type){case"chunk":return;case"agent_event":await Eb($,Z);return;case"hook":if(Z.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:Z.payload.toolName},Z.payload.sessionId));else if(Z.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:Z.payload.toolName},Z.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:Z.payload.sessionId,summary:Z.payload.summary,lastEvent:Z.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,Z.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:Z.payload.sessionId,prompts:Z.payload.prompts},Z.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:Z.payload.id,prompt:Z.payload.prompt,delivery:Z.payload.delivery,attachmentCount:Z.payload.attachmentCount,userImages:Z.payload.userImages,userFiles:Z.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:Z.payload.sessionId,prompt:Q},Z.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:Z.payload.sessionId,snapshot:Z.payload.snapshot},Z.payload.sessionId));return;case"status":{let[Q,W]=await Promise.all([u0($,Z.payload.sessionId),d0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...W?{snapshot:W}:{}},Z.payload.sessionId));return}case"ended":await Nb($,Z);return;default:return}}async function Eb($,Z){let{sessionId:Q,event:W}=Z.payload;if(W.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:W.iteration},Q));return}if(W.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:W.iteration,hadToolCalls:W.hadToolCalls,toolCallCount:W.toolCallCount},Q));return}if(W.type==="content_start"){if(W.contentType==="text"&&typeof W.text==="string"&&W.text.length>0){$.publish($.buildEvent("assistant.delta",{text:W.text},Q));return}if(W.contentType==="reasoning"){if(W.redacted&&!W.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof W.reasoning==="string"&&W.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:W.reasoning,redacted:W.redacted===!0},Q));return}if(W.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:W.toolCallId,toolName:W.toolName,input:W.input},Q));return}}if(W.type==="content_end"){switch(W.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:W.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:W.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:W.toolCallId,toolName:W.toolName,output:W.output,error:W.error},Q));break}return}if(W.type==="usage"){let J;try{J=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{J=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:W.inputTokens,outputTokens:W.outputTokens,cacheReadTokens:W.cacheReadTokens??0,cacheWriteTokens:W.cacheWriteTokens??0,totalCost:W.cost??0},totals:{inputTokens:W.totalInputTokens,outputTokens:W.totalOutputTokens,cacheReadTokens:W.totalCacheReadTokens??0,cacheWriteTokens:W.totalCacheWriteTokens??0,totalCost:W.totalCost??0},usage:J?.usage,aggregateUsage:J?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":W.parentAgentId?"subagent":"lead",agentId:W.agentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(W.type==="done")$.publish($.buildEvent("agent.done",{reason:W.reason,text:W.text,iterations:W.iterations,usage:W.usage},Q))}async function Nb($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),W=Q===Z.payload.reason||Q==="run.start.reply";if(W)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[J,X]=await Promise.all([u0($,Z.payload.sessionId),d0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let Y=await DK(J);$.publish($.buildEvent("ui.notify",Y,Z.payload.sessionId))}if(W)return;$.publish($.buildEvent(Z.payload.reason==="aborted"?"run.aborted":Z.payload.reason==="error"||Z.payload.reason==="failed"?"run.failed":"run.completed",{reason:Z.payload.reason,...X?{snapshot:X}:{}},Z.payload.sessionId))}import{createSessionId as cK,parseRuntimeConfigExtensions as uK}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as vo,HUB_COMPACTION_CAPABILITY as co,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as uo,HUB_HOOK_CAPABILITY_PREFIX as lo,HUB_MISTAKE_LIMIT_CAPABILITY as po,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as ro,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as io,isHubToolExecutorName as wb}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as to,HUB_COMPACTION_CAPABILITY as eo,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as $t,HUB_HOOK_CAPABILITY_PREFIX as Zt,HUB_MISTAKE_LIMIT_CAPABILITY as Qt,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Wt,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Jt}from"@cline/shared";var Cb=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function t$($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function Pb($,Z){let Q=typeof $.name==="string"?$.name.trim():"",W=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",X=t$($.inputSchema);if(!Q||!W||!X||!J||Z.has(J))return;return Z.add(J),{kind:"tool",capabilityName:J,name:Q,description:W,inputSchema:X,...t$($.lifecycle)?{lifecycle:t$($.lifecycle)}:{}}}function q3($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let W of $){if(!W||typeof W!=="object"||Array.isArray(W))continue;let J=W,X=J.kind,Y=typeof J.capabilityName==="string"?J.capabilityName.trim():"";if(!Y||Q.has(Y))continue;if(X==="tool"){let j=Pb(J,Q);if(j)Z.push(j);continue}if(X==="toolExecutor"){let j=J.executor;if(!wb(j))continue;Q.add(Y),Z.push({kind:"toolExecutor",capabilityName:Y,executor:j});continue}if(X==="hook"){let j=typeof J.name==="string"?J.name.trim():"";if(!j)continue;Q.add(Y),Z.push({kind:"hook",capabilityName:Y,name:j});continue}if(X==="compaction"){Q.add(Y),Z.push({kind:"compaction",capabilityName:Y,...t$(J.config)?{config:t$(J.config)}:{}});continue}if(X==="checkpoint"){Q.add(Y),Z.push({kind:"checkpoint",capabilityName:Y,...t$(J.config)?{config:t$(J.config)}:{}});continue}if(X==="mistakeLimit"){Q.add(Y),Z.push({kind:"mistakeLimit",capabilityName:Y});continue}if(X==="userInstructionService")Q.add(Y),Z.push({kind:"userInstructionService",capabilityName:Y})}return Z}function vK($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function Sb($){return Object.hasOwn($,"update")?$.update:$}function y4($){return $.trim().replace(/^\/+/,"").toLowerCase()}function bb($){let Z=($??[]).map(y4).filter(Boolean);return Z.length>0?new Set(Z):void 0}function yb($,Z,Q){if(!Q)return!0;let W=y4($),J=y4(Z),X=W.includes(":")?W.split(":").at(-1)??W:W,Y=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(W)||Q.has(J)||Q.has(X)||Q.has(Y)}function O3($,Z){let Q=bb(Z);return $.records.skill.map((W)=>({id:W.id,name:W.item.name,description:"description"in W.item&&typeof W.item.description==="string"?W.item.description:void 0,disabled:W.item.disabled===!0,skill:W.item})).filter((W)=>yb(W.id,W.name,Q))}function mK($,Z){let Q=async(W,J)=>{let X=y4(W),j=O3($,Z).filter((K)=>K.id===X||y4(K.name)===X||K.id.endsWith(`:${X}`)).filter((K)=>!K.disabled);if(j.length!==1)return j.length>1?`Skill "${W}" is ambiguous. Use one of: ${j.map((K)=>K.id).join(", ")}`:`Skill "${W}" not found.`;let V=j[0].skill,H=J?.trim(),B=H?`
714
+ WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,J,Q]),W.map((X)=>X.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function vG($={}){try{let Z=new q4($);return Z.init(),Z}catch{let Z=new X9({teamDir:$.teamDir});return Z.init(),Z}}function Y9($,Z){return iC($,Z)}function aC($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function sC($,Z){return $.filter((Q)=>aC(Q.name,Z))}function iW($,Z){return k1(sC($,Z))}var oC={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 tC($){let Z=$.trim().toLowerCase();return oC[Z]??Z}function eC($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(tC));if(Z.skills!==void 0)Q.add("skills");return $.filter((W)=>Q.has(W.name))}function cG(){return`team-${nC(5)}`}function j9($,Z,Q,W,J,X,Y,j){let V=e0[u1({mode:Q})],H=_8(Z,W,Q,J??L8);return iW(w8({cwd:$,...V,enableSkills:!!Y,...H,executors:{...Y?{skills:Y}:{},...j??{}}}),X)}function $P($){return j9($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,ZP,$.toolExecutors).some((Z)=>Z.name==="skills")}var ZP=async()=>"";async function QP($){let Z=Z0();if(!C$({filePath:Z}))return{tools:[]};let Q=new I8({clientFactory:G5({settingsPath:Z})}),W;try{W=await k8(Q,{filePath:Z})}catch(j){await Q.dispose().catch(()=>{});let V=j instanceof Error?j.message:String(j);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let J=W.filter((j)=>j.disabled!==!0),X=await Promise.allSettled(J.map((j)=>F5({serverName:j.name,provider:Q}))),Y=[];for(let[j,V]of X.entries())if(V.status==="fulfilled")Y.push(...V.value);else{let H=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${J[j].name}", skipping: ${H}`)}return{tools:Y,shutdown:async()=>{await Q.dispose()}}}function WP($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function JP($){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 XP($){let Z=e0[u1({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??Z.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??Z.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 V9{teamRuntimeEntries=new Map;async build($){let{config:Z,hooks:Q,extensions:W,logger:J,telemetry:X,createSpawnTool:Y,onTeamRestored:j,userInstructionService:V,configExtensions:H,toolExecutors:B}=$,G=$.onTeamEvent??(()=>{}),K=XP(Z),F=Z.workspaceRoot??Z.cwd,A=$.toolPolicies??Z.toolPolicies,L=K1(),f=[],D=Z.teamName?.trim()||cG(),U=Z.sessionId?.trim()||D,T=K.enableSpawnAgent?h5({workspaceRoot:F}):{configs:[],errors:[]},q=T.configs.some((x)=>x.skills!==void 0),z=Y9(H,"rules"),_=Y9(H,"skills"),M=_||q,E=Y9(H,"workflows"),P=Y9(H,"plugins"),c=z||_||E,n=!1,a=Boolean(V),t=V,p0;for(let x of T.errors)(J??Z.logger)?.log?.(`[agents] Failed to load agent config at ${x.path}: ${x.error.message}`);if(!t&&(c||q))t=w2({skills:M?{workspacePath:F,includePluginSkills:P,pluginSkillDirectories:P?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(t)await t.start().catch(()=>{});let K$=K.enableTools&&_&&Boolean(t)&&t?.hasConfiguredSkills(Z.skills)===!0&&$P({cwd:Z.cwd,providerId:Z.providerId,mode:K.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:A,toolExecutors:B}),d=t&&c?t.createExtension({includeRules:z,includeSkills:_,includeWorkflows:E,registerSkillsTool:K$,allowedSkillNames:Z.skills}):void 0,X1=d?[...W??Z.extensions??[],d]:W??Z.extensions;if(K.enableTools){if(f.push(...j9(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,B)),!K.disableMcpSettingsTools){let x=await QP(Z.logger);f.push(...x.tools),p0=x.shutdown}}let N,X0=K.enableAgentTeams?vG():void 0,Y0=X0?.loadRuntime(U),R0=Y0?.state,Z2=Y0?.teammates??[],Y1=new Map(Z2.map((x)=>[x.agentId,x])),t0=Z.sessionId||D,$8,Q2=[],I4=!1,j1=R2({providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey??"",baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxTokensPerTurn:Z.maxTokensPerTurn,maxIterations:Z.maxIterations,hooks:Q,extensions:X1,logger:J??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(K.enableSpawnAgent){if(T.configs.length>0)f.push(...iW(I5({configProvider:j1,agents:T.configs,createSubAgentTools:(x)=>K.enableTools?eC(j9(Z.cwd,x.providerId??Z.providerId,K.mode,x.modelId??Z.modelId,Z.toolRoutingRules,A,x.skills!==void 0&&t?.createSkillsExecutor?t.createSkillsExecutor(x.skills):void 0,B),x):[],hookErrorMode:Z.hookErrorMode,toolPolicies:A,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),A))}if(!this.teamRuntimeEntries.has(t0))this.teamRuntimeEntries.set(t0,{delegatedAgentConfigProvider:j1});let x4=()=>{if(!K.enableAgentTeams)return;let x=this.teamRuntimeEntries.get(t0)??{delegatedAgentConfigProvider:j1};if(this.teamRuntimeEntries.set(t0,x),N=x.runtime,!N){if(N=new B4({teamName:D,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:K.missionLogIntervalSteps,missionLogIntervalMs:K.missionLogIntervalMs,onTeamEvent:(Q0)=>{if(G(Q0),N&&X0){if(Q0.type==="teammate_spawned"&&Q0.teammate?.rolePrompt){let V1={agentId:Q0.agentId,rolePrompt:Q0.teammate.rolePrompt,modelId:Q0.teammate.modelId,maxIterations:Q0.teammate.maxIterations};Y1.set(V1.agentId,V1)}if(Q0.type==="teammate_shutdown"&&!JP(Q0.reason))Y1.delete(Q0.agentId);X0.handleTeamEvent(U,Q0),X0.persistRuntime(U,N.exportState(),Array.from(Y1.values()))}}}),R0)N.hydrateState(R0),I4=!0;x.runtime=N}if(!n){if(!N)return;n=!0;let Q0=Q5({runtime:N,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(R0),restoredTeammates:Z2,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(V1)=>{Q2=V1,$8?.addTools(V1)},createBaseTools:K.enableTools?()=>j9(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,B):void 0,teammateConfigProvider:j1});if(I4)N.recoverActiveRuns("runtime_recovered");if(Q0.restoredFromPersistence)j?.();f.push(...Q0.tools)}return N};if(K.enableSpawnAgent&&Y){let x=Y();f.push({...x,execute:async(Q0,V1)=>{return x4(),x.execute(Q0,V1)}})}if(K.enableAgentTeams)x4();let W2=iW(f,A),r9=W2.some((x)=>x.name==="submit_and_exit"&&x.lifecycle?.completesRun===!0),g4=K.enableAgentTeams?()=>{let x=this.teamRuntimeEntries.get(t0)?.runtime;if(!x)return;let Q0=x.listTasks(),V1=Q0.some((w1)=>w1.status==="in_progress"||w1.status==="pending"),FJ=x.listRuns({}),qA=FJ.some((w1)=>w1.status==="running"||w1.status==="queued");if(V1||qA){let w1=Q0.filter((P0)=>P0.status==="in_progress"||P0.status==="pending").map((P0)=>`${P0.id} (${P0.status}): ${P0.title}`).join(", "),AJ=FJ.filter((P0)=>P0.status==="running"||P0.status==="queued").map((P0)=>`${P0.id} (${P0.status})`).join(", "),i9=[];if(w1)i9.push(`Unfinished tasks: ${w1}`);if(AJ)i9.push(`Active runs: ${AJ}`);return`[SYSTEM] You still have team obligations. ${i9.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,OA=r9?{requireCompletionTool:!0,...g4?{completionGuard:g4}:{}}:g4?{completionGuard:g4}:void 0;return{tools:W2,logger:J??Z.logger,telemetry:X??Z.telemetry,teamRuntime:N,teamRestoredFromPersistence:Boolean(R0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(t0)?.delegatedAgentConfigProvider??j1,extensions:X1,completionPolicy:OA,registerLeadAgent:(x)=>{if($8=x,Q2.length>0)x.addTools(k1(Q2,[...L]))},shutdown:async(x)=>{if(WP(N,x),this.teamRuntimeEntries.delete(t0),await p0?.(),!a)t?.stop()}}}}function YP($,Z){let Q=$?.expiresAt,W=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===W}class H9 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 nW{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new Y$,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=B0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let W=this.refreshInFlight.get(Z);if(W)return W;let J=this.resolveProviderApiKeyInternal($,Z,Q).catch((X)=>{throw X}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,J),J}async resolveProviderApiKeyInternal($,Z,Q){let W=B0($);if(!W)return null;let J=this.providerSettingsManager.getProviderSettings(Z);if(!J)return null;let X=CZ($,J);if(!X)return null;let Y=await W.refresh({settings:J,credentials:X,forceRefresh:Q,telemetry:this.telemetry});if(!Y)throw new H9($);let j=X8({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:Y,setLastUsed:!1,save:!1}),V=!YP(J.auth,j.auth);if(V)this.providerSettingsManager.saveProviderSettings(j,{setLastUsed:!1,tokenSource:"oauth"});return{apiKey:W.getApiKey(j)??Y.access,accountId:Y.accountId,refreshed:V}}}import{normalizeUserInput as jP}from"@cline/shared";import{nanoid as VP}from"nanoid";class uG{list($){return $?v0($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((V)=>V.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:v0($),updated:!1};let J=$.pendingPrompts[W];if(!J)return{sessionId:Z.sessionId,prompts:v0($),updated:!1};let X=Z.prompt===void 0?J.prompt:jP(Z.prompt).trim();if(!X)throw Error("prompt cannot be empty");let Y=Z.delivery??J.delivery,j={...J,prompt:X,mode:Z.mode??J.mode,delivery:Y};return $.pendingPrompts.splice(W,1),HP($,j,W,J.delivery),{sessionId:Z.sessionId,prompts:v0($),prompt:B9(j),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((X)=>X.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:v0($),removed:!1};let[J]=$.pendingPrompts.splice(W,1);return{sessionId:Z.sessionId,prompts:v0($),prompt:J?B9(J):void 0,removed:!0}}enqueue($,Z){let{prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y}=Z,j=$.pendingPrompts.findIndex((V)=>V.prompt===Q);if(j>=0){let[V]=$.pendingPrompts.splice(j,1),H={...V,prompt:Q,mode:W??V.mode,userImages:X??V.userImages,userFiles:Y??V.userFiles};if(J==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...H,delivery:"steer"});else $.pendingPrompts.push(H)}else{let V={id:`pending_${Date.now()}_${VP(5)}`,prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return v0($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((W)=>W.delivery==="steer");if(Z<0)return{prompts:v0($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:v0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:v0($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),v0($)}clear($){return $.pendingPrompts.length=0,[]}}class aW{deps;service=new uG;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}delete($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}enqueue($,Z){let Q=this.deps.getSession($);if(!Q||Q.aborting)return;this.service.enqueue(Q,Z),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let Z=this.deps.getSession($);if(!Z)return;let{entry:Q}=this.service.consumeSteer(Z);if(!Q)return;return this.emitPrompts(Z),this.emitSubmitted(Z,Q),Q}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:v0($)}})}scheduleDrain($,Z){if(Z.pendingPrompts.length===0||Z.aborting||Z.drainingPendingPrompts||!Z.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let Z=this.deps.getSession($);if(!Z)return;if(Z.aborting||Z.drainingPendingPrompts)return;if(!Z.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(Z);if(!Q)return;this.emitPrompts(Z),this.emitSubmitted(Z,Q),Z.drainingPendingPrompts=!0;let W=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{W=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,W&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=B9(Z);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}})}}function B9($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function v0($){return $.pendingPrompts.map(B9)}function HP($,Z,Q,W){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(W==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}G0();class oW{deps;constructor($){this.deps=$}dispatchAgentEvent($,Z,Q){let W=this.deps.getSession($),J={sessionId:$,config:Z,liveSession:W,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},X=NW(Q),Y=!!W&&(!X.agentId||X.agentId===sW(W.agent));wW(J,Q,Y?{isPrimaryAgentEvent:!0,agentId:sW(W.agent),conversationId:W.agent.getConversationId(),...W?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(HW(Q,Z),Z.type==="agent_event"){let W={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};wW(W,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let W=q1({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:sW(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(W)f$(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...W})}}if(await BW($,Z,this.deps.invokeBackendOptional),Q)GW(Q,$,Z,this.deps.emit)}async handlePluginEvent($,Z,Q){if(Z.name==="plugin_log"){this.handlePluginLog($,Z.payload);return}if(Z.name==="automation_event"){let V=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!V)return;let H=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!H)return;await V.ingestEvent(H);return}if(Z.name!=="steer_message"&&Z.name!=="queue_message"&&Z.name!=="pending_prompt")return;let W=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0,J=typeof W?.sessionId==="string"&&W.sessionId.trim().length>0?W.sessionId.trim():$,X=typeof W?.prompt==="string"?W.prompt.trim():"";if(!X)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":W?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(J,{prompt:X,delivery:Y})}handlePluginLog($,Z,Q){let W=this.deps.getSession($),J=Q??W?.config.extensionContext?.logger??W?.config.logger;if(!J||!Z||typeof Z!=="object")return;let X=Z,Y=typeof X.message==="string"?X.message:"";if(!Y)return;let j=X.metadata&&typeof X.metadata==="object"?{...X.metadata}:{};if(j.sessionId??=$,typeof X.pluginName==="string"&&X.pluginName)j.pluginName=X.pluginName;if(X.level==="debug"){J.debug(Y,j);return}if(X.level==="error"){if(J.error)J.error(Y,j);else J.log(Y,{...j,severity:"error"});return}J.log(Y,j)}}function sW($){return $.getAgentId()}function tW($){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:W$($.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 eW($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function dG($,Z,...Q){let W=eW($,Z);if(!W)throw Error(`session service method not available: ${Z}`);return Promise.resolve(W.apply($,Q))}async function lG($,Z,...Q){let W=eW($,Z);if(!W)return;await Promise.resolve(W.apply($,Q))}async function pG($,Z,...Q){let W=eW($,Z);if(!W)return;return await Promise.resolve(W.apply($,Q))}r0();G0();function $3($,Z,Q){return{onSubAgentEvent:(W)=>$.onAgentEvent(Q,Z,W),onSubAgentStart:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(W.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let X=q1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId});if(X)f$(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...X});d4(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:W.parentAgentId,agentId:W.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",Q,W)},onSubAgentEnd:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime,X=$.subAgentStarts.get(W.subAgentId),Y=X?Date.now()-X.startedAt:0,j=W.result?.text?W.result.text.split(`
715
+ `).length:0;d4(Z.telemetry,{event:"ended",ulid:Q,durationMs:Y,outputLines:j,errorMessage:W.error?String(W.error):void 0,agentId:W.subAgentId,parentId:W.parentAgentId,...q1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId})}),$.subAgentStarts.delete(W.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,W)}}}function Z3($,Z,Q,W){let J=$3($,Z,Q);return N2({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let Y=Z.enableTools?w8({cwd:Z.cwd,...e0[u1({mode:Z.mode})],executors:W}):[];if(Z.enableSpawnAgent)Y.push(Z3($,Z,Q,W));return k1(Y)},...J})}import{readFile as BP,stat as GP}from"node:fs/promises";var KP=20480000;async function rG($){let Z=await GP($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>KP)throw Error("File is too large to read into context.");let Q=await BP($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var iG=5000;function M4($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function zP($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=M4(Z.inputTokens),W=M4(Z.outputTokens),J=M4(Z.cacheReadTokens),X=M4(Z.cacheWriteTokens),Y=M4(Z.totalCost);if(Q===void 0||W===void 0||J===void 0||X===void 0||Y===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:J,cacheWriteTokens:X,totalCost:Y}}function TP($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}class j${runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new $4;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new r2;constructor($){let Z=AP();if(Z)_P(Z);let Q=m0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new V9,this.createAgentInstance=$.createAgent??((W)=>new l1(W)),this.defaultCapabilities=O0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new Y$,this.oauthTokenManager=$.oauthTokenManager??new nW({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new aW({getSession:(W)=>this.sessions.get(W),emit:(W)=>this.emit(W),send:(W)=>this.runTurn(W)}),this.pendingPrompts={list:async(W)=>this.pendingPromptsController.list(W.sessionId),update:async(W)=>this.pendingPromptsController.update(W),delete:async(W)=>this.pendingPromptsController.delete(W)},this.eventBridge=new oW({getSession:(W)=>this.sessions.get(W),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(W)=>this.emit(W),persistMessages:(W,J,X)=>{this.invoke("persistSessionMessages",W,J,X)},enqueuePendingPrompt:(W,J)=>this.pendingPromptsController.enqueue(W,J),invokeBackendOptional:(W,...J)=>this.invokeOptional(W,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.source??T0.CLI,Q=$0(),W=$.config.sessionId?.trim()??"",J=W||UP(),X=await this.applyInitialOAuthCredentials($),Y=X.initialMessages??[],j=Y.length>0?l5(Y):_0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let H=Q3(V,J),B=Q3(H,`${J}.messages.json`),G=Q3(H,`${J}.json`),K=W$($.config),F=N0.parse({version:1,session_id:J,source:Z,pid:process.pid,started_at:Q,status:"running",interactive:$.interactive===!0,provider:X.config.providerId,model:X.config.modelId,cwd:X.config.cwd,workspace_root:K,team_name:X.config.teamName,enable_tools:X.config.enableTools,enable_spawn:X.config.enableSpawnAgent,enable_teams:X.config.enableAgentTeams,prompt:X.prompt?.trim()||void 0,messages_path:B}),A;if(W.length>0&&Y.length>0&&!X.prompt?.trim()){let N=await this.invokeOptionalValue("readSessionManifest",J);if(N)F=N,A={manifestPath:G,messagesPath:N.messages_path||B,manifest:N}}let f=await this.seedAggregateUsageFromArtifacts({initialUsage:j,sessionDir:H,rootMessagesPath:A?.messagesPath??B,manifest:F});this.usageBySession.set(J,j),this.aggregateUsageBySession.set(J,f);let D=O0(this.defaultCapabilities,$.capabilities),U=D?.toolExecutors??this.toolExecutors,T=$.localRuntime,q=T?.extensionContext?.logger??T?.logger,z=T?.extensionContext?.automation,_,M={getSession:(N)=>this.sessions.get(N),subAgentStarts:this.subAgentStarts,onAgentEvent:(N,X0,Y0)=>this.eventBridge.dispatchAgentEvent(N,X0,Y0),invokeBackendOptional:(N,...X0)=>this.invokeOptional(N,...X0)};_=await VG({input:X,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:D,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(N)=>{if(N.name==="plugin_log"){this.eventBridge.handlePluginLog(J,N.payload,q);return}this.eventBridge.handlePluginEvent(J,N,z)},onTeamEvent:(N)=>{this.eventBridge.handleTeamEvent(J,N),_.config.onTeamEvent?.(N)},createSpawnTool:()=>Z3(M,_.config,J,U),createSubAgentLifecycleCallbacks:(N)=>$3(M,N,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(N)=>{await this.persistSessionMetadata(J,()=>N)}});let E=await this.runtimeBuilder.build(_.runtimeBuilderInput),P=_.config,c=_.providerConfig;if(E.teamRuntime&&!P.teamName?.trim())P.teamName=E.teamRuntime.getTeamName();let n=[...E.tools,...P.extraTools??[]],a=E.extensions??_.extensions,t={sessionId:J,providerId:c.providerId,modelId:c.modelId,apiKey:c.apiKey,baseUrl:c.baseUrl,headers:c.headers,knownModels:c.knownModels,providerConfig:c,thinking:P.thinking,reasoningEffort:P.reasoningEffort??c.reasoningEffort,maxTokensPerTurn:P.maxTokensPerTurn,systemPrompt:P.systemPrompt,maxIterations:P.maxIterations,execution:P.execution,prepareTurn:EW(P),tools:n,hooks:_.hooks,extensions:a,hookErrorMode:P.hookErrorMode,initialMessages:_.effectiveInput.initialMessages,userFileContentLoader:rG,toolPolicies:_.toolPolicies,requestToolApproval:_.requestToolApproval?async(N)=>{let X0=_.requestToolApproval,Y0=this.sessions.get(J);if(Y0)await this.markTurnPending(Y0);try{if(!X0)return{approved:!1,reason:"Tool approval callback is not configured."};return await X0(N)}finally{let R0=this.sessions.get(J);if(R0?.status==="pending")await this.markTurnRunning(R0)}}:void 0,telemetry:P.telemetry,onConsecutiveMistakeLimitReached:P.onConsecutiveMistakeLimitReached,completionPolicy:E.completionPolicy,consumePendingUserMessage:()=>{let N=this.pendingPromptsController.consumeSteer(J);return N?K4(N.prompt,N.mode??P.mode):void 0},logger:E.logger??P.logger,extensionContext:P.extensionContext,onEvent:(N)=>this.eventBridge.dispatchAgentEvent(J,P,N)};t.hooks={...t.hooks,onEvent:async(N)=>{if(await _.hooks?.onEvent?.(N),N.type!=="assistant-message")return;let X0=this.sessions.get(J);if(!X0)return;let Y0=X0.agent.getMessages();try{await this.invoke("persistSessionMessages",J,Y0,P.systemPrompt)}catch(R0){P.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:R0}),i$(P.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:R0,severity:"warn",handled:!0,context:{sessionId:J,providerId:P.providerId,modelId:P.modelId}})}}};let p0=this.createAgentInstance(t);if(t.onEvent)p0.subscribeEvents(t.onEvent);E.registerLeadAgent?.(p0);let K$=q1({agentId:p0.getAgentId(),conversationId:p0.getConversationId(),teamId:E.teamRuntime?.getTeamId(),teamName:E.teamRuntime?.getTeamName(),teamRole:E.teamRuntime?"lead":void 0});if(HG(P,J,W.length>0,K,K$),K$)f$(P.telemetry,{ulid:J,modelId:P.modelId,provider:P.providerId,...K$});if(E.teamRuntime)VZ(P.telemetry,{ulid:J,teamId:E.teamRuntime.getTeamId(),teamName:E.teamRuntime.getTeamName(),leadAgentId:p0.getAgentId(),restoredFromPersistence:E.teamRestoredFromPersistence===!0});let d={sessionId:J,config:P,sessionMetadata:X.sessionMetadata,...A?{artifacts:A}:{},source:Z,startedAt:A?.manifest.started_at??Q,updatedAt:A?.manifest.ended_at??A?.manifest.started_at??Q,pendingPrompt:F.prompt,runtime:E,agent:p0,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:_.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(this.sessions.set(J,d),this.emitStatus(J,"running"),Y.length>0&&!A){if(await this.ensureSessionPersisted(d),await this.invoke("persistSessionMessages",d.sessionId,Y,d.config.systemPrompt),!X.prompt?.trim())await this.updateStatus(d,"completed",0)}let X1;try{if(X.prompt?.trim())if(X1=await this.executeTurn(d,{prompt:X.prompt,userImages:X.userImages,userFiles:X.userFiles}),!d.interactive)await this.finalizeSingleRun(d,X1.finishReason);else await this.completeInteractiveTurn(d,X1.finishReason)}catch(N){if(d.interactive&&d.aborting)X1=await this.completeAbortedInteractiveTurn(d);else{i$(d.config.telemetry,{component:"core",operation:"session.start",error:N,severity:"error",handled:!1,context:{sessionId:d.sessionId,providerId:d.config.providerId,modelId:d.config.modelId}});try{await this.failSession(d)}catch(X0){d.config.logger?.error?.("Session failure cleanup threw",{sessionId:d.sessionId,error:X0})}throw N}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:B,result:X1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let W=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...W?{sessionMetadata:W}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),W=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:W??"immediate"}}),W==="queue"||W==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:W,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,J.finishReason);else await this.completeInteractiveTurn(Z,J.finishReason);if(J.finishReason==="error"||J.finishReason==="aborted")return J;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),J}catch(J){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw i$(Z.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),J}}async getAccumulatedUsage($){let Z=I7(this.usageBySession.get($)),Q=I7(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,this.pendingPromptsController.clearAborted(Q),Q.agent.abort(Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!j0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!j0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return tW(Z);let Q=$.trim();if(!Q)return;let W=await this.getRow(Q);if(W)return t8(W);let J=await this.readManifest(Q);return J?m7(J):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(t8),W=new Set(Q.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(W.has(J.sessionId))continue;Q.unshift(tW(J))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return n1(Q.messagesPath);let W=await this.readManifest(Z);return n1(W?.messages_path)}async dispatchHookEvent($){await HH($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){let Q=this.getSessionOrThrow($);Q.config.modelId=Z,Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:Z}),Q.agent.updateConnection({modelId:Z})}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),W=Q.prompt.trim();if(!W)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=W;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let J=await this.executeAgentTurn($,W,Q.userImages,Q.userFiles);while(KW($,J.finishReason)){let X=await FW($);if(X.length===0)break;let Y=AW($,X);J=await this.executeAgentTurn($,Y)}return J}async completeInteractiveTurn($,Z){if(G4($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),W=_0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:W}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:W,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,W){let J=$.started||$.agent.getMessages().length>0,X=$.persistedMessages??$.agent.getMessages(),Y=this.usageBySession.get($.sessionId)??_0(),j=this.aggregateUsageBySession.get($.sessionId)??Y;$.turnUsageBaseline=Y,$.turnAggregateUsageBaseline=j,$.turnPrimaryUsage=_0(),$.turnUsageByAgent=new Map,QZ($.config.telemetry,$.sessionId,$.config.mode),Z8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(Z,Q,W):()=>$.agent.run(Z,Q,W),H=await this.runWithAuthRetry($,V,X);$.started=!0;let B=T5(H.messages,H,X);$.persistedMessages=B;let G=d5($.turnUsageByAgent?.values()??[]),K=f0(Y,H.usage),F=f0(f0(_0(),H.usage),G),A=f0(j,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(L)=>({...L??{},totalCost:K.totalCost,aggregatedAgentsCost:A.totalCost,usage:K,aggregateUsage:A})),await this.invoke("persistSessionMessages",$.sessionId,B,$.config.systemPrompt),this.observeTaskCompletionTool($,H),H}catch(V){throw i$($.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($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((W)=>W.name===L0.SUBMIT_AND_EXIT&&W.error===void 0))return;$.submitAndExitObserved=!0,c4($.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($,Z){let Q=W$($.config),W=LP(Z.prompt).trim();if(!W)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let J=await l6(W,Q);BG($.config.telemetry,J);let X=K4(J.prompt,Z.mode??$.config.mode),Y=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),j=this.resolveAbsoluteFilePaths(Q,J.matchedFiles),V=Array.from(new Set([...Y,...j]));return{prompt:X,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=W$($.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:Z,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($,Z){let Q=this.sessions.get($),W=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,J=Z(W?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Q.sessionMetadata=J,Q.artifacts.manifest.metadata=J}async finalizeSingleRun($,Z){if(G4($))return;let Q=Z==="aborted"||$.aborting,W=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":W?"failed":"completed",exitCode:W?1:0,shutdownReason:W?"session_error":"session_complete",endReason:Z})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(Z.status==="completed"&&!$.submitAndExitObserved)c4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});m5($);let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),i$($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,Z.status,Z.exitCode)}catch(J){W("update_status",J)}try{await $.agent.shutdown(Z.shutdownReason)}catch(J){W("agent_shutdown",J)}}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),i$($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(Z)}catch(J){W("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let W=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!W.updated)return;let J=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(J.status=Z,j0(Z))delete J.ended_at,J.exit_code=null;else J.ended_at=W.endedAt??$0(),J.exit_code=typeof Q==="number"?Q:null;$.artifacts.manifest=J,$.status=Z,$.updatedAt=W.endedAt??$0(),$.endedAt=j0(Z)?null:J.ended_at,$.exitCode=J.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,J),this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(W){if(!J8($.config.providerId)||!DP(W))throw W;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),Z()}}async syncOAuthCredentials($,Z){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:Z?.forceRefresh})}catch(W){if(W instanceof H9)throw Error(`${W.providerId} requires re-authentication.`);throw W}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new P$($);throw i$(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>fP(W)?W:W3($,W));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return q1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let Z=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=f0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let W=W3(Z),J=`${Q}.messages.json`,X;try{X=FP($)}catch{return _0()}let Y=_0();for(let j of X){if(!j.endsWith(".messages.json"))continue;if(j===J)continue;let V=W3($,j);if(V===W)continue;let H=await n1(V);if(H.length===0)continue;Y=f0(Y,l5(H))}return Y}withPersistedAggregateUsageFloor($,Z){let Q=zP(Z.metadata?.aggregateUsage);if(Q)return TP($,Q);let W=Z.metadata?.aggregatedAgentsCost;if(typeof W!=="number"||!Number.isFinite(W)||W<=$.totalCost)return $;return{...$,totalCost:W}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:t1({session:Z,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($)),iG))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(iG)).find((W)=>W.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return dG(this.sessionService,$,...Z)}invokeOptional($,...Z){return lG(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return pG(this.sessionService,$,...Z)}}function OP($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let Z=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(Z==="local"||Z==="hub"||Z==="remote")return Z;return"auto"}var R4,E4;function qP($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;bH(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function MP($){await $.reconcileDeadSessions?.().catch(()=>{})}function sG($){try{let Z=new Z$;return Z.init(),new Q$(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),aG($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new LW(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function nG($,Z,Q){return new j$({sessionService:Q??$.sessionService??sG($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function RP($){if(R4)return R4;if(E4)return await E4;return E4=(async()=>{return R4=sG($),await MP(R4),R4})().finally(()=>{E4=void 0}),await E4}async function G9($){let Z=m0($.distinctId);$.telemetry?.setDistinctId(Z);let Q=OP($);if(qP(Q,$),Q==="remote"){let W=$.remote?.endpoint?.trim();if(!W)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:W}),new C5({endpoint:W,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let W=$.hub?.endpoint?.trim(),J=W||await X4({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:W||void 0}),new u$({url:J,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Q==="auto"){let W=await a7({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(W){$.logger?.log("Using discovered local hub runtime host",{url:W});let J=new u$({url:W,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(X){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:X}),aG($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:X,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),nG($,Z)}return nG($,Z)}import{execFile as EP}from"node:child_process";import*as tG from"node:fs/promises";import*as a2 from"node:path";import{promisify as NP}from"node:util";var wP=NP(EP),CP=52428800;async function K9($,Z){let{stdout:Q}=await wP("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:CP,encoding:"utf8"});return Q}function oG($){return $.split("\x00").filter(Boolean)}function eG($,Z){let Q=a2.resolve($,Z),W=a2.relative($,Q);if(W.startsWith("..")||a2.isAbsolute(W))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function PP($,Z,Q){try{return await K9($,["show",`${Z}:${Q}`])}catch{return""}}async function SP($,Z){try{return await tG.readFile(eG($,Z),"utf8")}catch{return""}}async function bP($,Z){await K9($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,W]=await Promise.all([K9($,["diff","--name-only","-z",Z.ref,"--"]),K9($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...oG(Q),...oG(W)])].sort((X,Y)=>X.localeCompare(Y))}function $K($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=J9(O4($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Q,cwd:W}}async function ZK($,Z){let Q=await bP($,Z);return(await Promise.all(Q.map(async(J)=>{let[X,Y]=await Promise.all([PP($,Z.ref,J),SP($,J)]);return{filePath:eG($,J),leftContent:X,rightContent:Y}}))).filter((J)=>J.leftContent!==J.rightContent)}async function J3($){let Z=$K($),Q=await ZK(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}import{existsSync as yP,mkdirSync as hP,readFileSync as kP,writeFileSync as IP}from"node:fs";import{dirname as xP}from"node:path";import{FEATURE_FLAGS as QK,FeatureFlagDefaultValue as X3}from"@cline/shared";var gP=3600000,mP=604800000,WK=1;class N4{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??gP,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??mP,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 Z=$??this.context.userId??null,Q=Date.now();if(Q-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===Z)return}let W=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:Z||null};try{let J=await this.provider.getAllFlagsAndPayloads({flagKeys:QK.length>0?QK:void 0,context:{...this.context,userId:Z}});if(this.cacheInfo.userId!==Z)return;this.cacheInfo.flagsPayload=J,this.rebuildCacheFromSnapshot(J),this.writePersistentCache()}catch(J){if(this.cacheInfo.userId!==Z)return;throw this.cacheInfo=W.updateTime?W:{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((Z)=>this.isFeatureFlagPayload(Z));if(typeof $==="object")return Object.values($).every((Z)=>this.isFeatureFlagPayload(Z));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=Object.entries($).filter(([,W])=>this.isFeatureFlagPayload(W));if(Z.length===0)return;let Q={};for(let[W,J]of Z)Q[W]=J;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!yP(this.cacheFilePath))return;let $=JSON.parse(kP(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==WK||typeof Z.updatedAt!=="number"||!Number.isFinite(Z.updatedAt)||Date.now()-Z.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:Z.updatedAt,userId:Z.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(Z.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(Z.flagsPayload?.featureFlagPayloads)}}}catch($){this.logger?.error?.("Error reading SDK feature flags cache",{error:$});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;hP(xP(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:WK,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};IP(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
716
+ `,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let Z=new Map;for(let Q of this.getReturnedFlagKeys($)){let W=this.getFeatureFlag(Q);Z.set(Q,W??!1)}this.cache=Z}getFeatureFlag($){try{let Z=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],W=Z??Q??X3[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==W)this.telemetry?.capture({event:I.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return W}catch(Z){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:Z}),X3[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??X3[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,Z){if(process.env.IS_TEST==="true")this.cache.set($,Z)}async dispose(){await this.provider.dispose()}}class w4{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}g2();class Y3{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,Z,Q,W,J,X,Y,j,V,H){this.clientName=Z,this.runtimeAddress=Q,this.host=$,this.prepare=W,this.capabilities=J,this.logger=X,this.telemetry=Y,this.distinctId=j,this.featureFlags=V,this.settings=SV($),this.pendingPrompts=bV($),this.automation=new mZ(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=H?new a8({workspaceRoot:H.workspaceRoot??process.cwd(),specs:{cronSpecsDir:H.cronSpecsDir??H.cronDir,scope:GX(H.cronScope),workspaceRoot:H.workspaceRoot},runtimeHandlers:KX({host:$,getExtensionContext:()=>Y6({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:H.dbPath,logger:H.logger,pollIntervalMs:H.pollIntervalMs,claimLeaseSeconds:H.claimLeaseSeconds,globalMaxConcurrency:H.globalMaxConcurrency,watcherDebounceMs:H.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((B)=>{if(B.type!=="ended")return;this.disposeSessionBootstrap(B.payload.sessionId)})}static async create($={}){let Z=m0($.distinctId),Q=O0($.capabilities),W={...$,capabilities:Q,distinctId:Z},J=await G9(W),X=BX($.automation),Y=$.featureFlags||new N4({provider:new w4,telemetry:$.telemetry,logger:$.logger,context:{distinctId:Z,clientName:$.clientName}}),j=new Y3(J,$.clientName,J.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,Z,Y,X?{...X,logger:$.logger}:void 0);if(X&&X.autoStart!==!1)await j.automation.start();return j}async disposeSessionBootstrap($){let Z=this.activeSessionBootstraps.get($);if(!Z)return;this.activeSessionBootstraps.delete($),await Promise.resolve(Z.dispose?.())}async start($){let Z=yV($),Q=await this.prepare?.(Z);try{let W=Q?await Q.applyToStartSessionInput(Z):Z,J=await this.host.startSession(V7(W,{defaultCapabilities:this.capabilities,withExtensionContext:(X)=>Y6({automationService:this.automationService,automation:this.automation,context:X,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Q)if(await this.host.getSession(J.sessionId))this.activeSessionBootstraps.set(J.sessionId,Q);else await Promise.resolve(Q.dispose?.());return hV({input:W,sessionId:J.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),J}catch(W){throw await Promise.resolve(Q?.dispose?.()),W}}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 Z=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(Z.map((Q)=>this.disposeSessionBootstrap(Q)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await v7(this.host,$);list=async($=200,Z={})=>await this.listHistory({...Z,limit:$});delete=async($)=>{let Z=await this.host.deleteSession($);if(Z)await this.disposeSessionBootstrap($);return Z};update=(...$)=>this.host.updateSession(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let Z=$.start?V7($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>Y6({automationService:this.automationService,automation:this.automation,context:Q,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:Z})}async compareCheckpoint($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=await this.host.getSession(Z);if(!Q)throw Error(`Session ${Z} not found`);return J3({session:Q,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,Z){return this.host.subscribe($,Z)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}import{HookEventNameSchema as XK,HookEventPayloadSchema as YK,parseHookEventPayload as A9,resolveHookSessionContext as rP}from"@cline/shared";import{z as n$}from"zod";import{spawn as vP}from"node:child_process";import{augmentNodeCommandForDebug as cP,withResolvedClineBuildEnv as uP}from"@cline/shared";function dP($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
717
+ `).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse subprocess stdout JSON"}}}function lP($,Z){let Q=$ instanceof Error?$:Error(String($)),W=Q,J=Z.join(" ");if(W.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}": ${Q.message}`)}async function pP($,Z){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((W,J)=>{let X=(Y)=>{Q.off("error",X);let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y)};Q.once("error",X),Q.end(Z,(Y)=>{if(Q.off("error",X),Y){let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y);return}W()})})}async function F9($,Z){let Q=cP(Z.command,{env:Z.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let W=!!Z.detached,J=vP(Q[0],Q.slice(1),{cwd:Z.cwd,env:uP(Z.env),stdio:W?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:W,windowsHide:!0}),X=new Promise((K)=>{J.once("spawn",()=>{try{Z.onSpawn?.({command:Q,pid:J.pid??void 0,detached:W})}catch{}K()})}),Y=new Promise((K,F)=>{J.once("error",(A)=>{F(lP(A,Q))})});if(await pP(J,JSON.stringify($)),W){await Promise.race([X,Y]),J.unref();return}if(!J.stdout||!J.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let j="",V="",H=!1,B;J.stdout.on("data",(K)=>{j+=K.toString()}),J.stderr.on("data",(K)=>{V+=K.toString()});let G=new Promise((K)=>{if((Z.timeoutMs??0)>0)B=setTimeout(()=>{H=!0,J.kill("SIGKILL")},Z.timeoutMs);J.once("close",(F)=>{if(B)clearTimeout(B);let{parsedJson:A,parseError:L}=dP(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:H})})});return await Promise.race([G,Y])}var iP=n$.object({contextModification:n$.string().optional(),cancel:n$.boolean().optional(),review:n$.boolean().optional(),errorMessage:n$.string().optional(),context:n$.string().optional(),overrideInput:n$.unknown().optional()}).passthrough();var nP=["agent","hook"];async function f9($,Z={}){let Q=Z.command??nP;return await F9($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function jK($){return $ instanceof Error?$:Error(String($))}function aP($){if(!$||typeof $!=="object")return;let Z=iP.safeParse($);if(!Z.success)return;let Q=Z.data;if(!(("cancel"in Q)||("review"in Q)||("context"in Q)||("contextModification"in Q)||("overrideInput"in Q)||("errorMessage"in Q)))return;let J=typeof Q.context==="string"?Q.context:typeof Q.contextModification==="string"?Q.contextModification:typeof Q.errorMessage==="string"&&Q.errorMessage.length>0?Q.errorMessage:void 0;return{cancel:typeof Q.cancel==="boolean"?Q.cancel:void 0,review:typeof Q.review==="boolean"?Q.review:void 0,context:J,overrideInput:Object.hasOwn(Q,"overrideInput")?Q.overrideInput:void 0}}function JK($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W;else Z[Q]=JSON.stringify(W);return Z}function M1($,Z,Q){let W=Q.env??process.env,J=W.CLINE_USER_ID?.trim()||W.USER?.trim()||"unknown",X=Q.cwd||process.cwd();return{clineVersion:W.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:Z.conversationId,sessionContext:rP(Q.sessionContext,{hookName:$,conversationId:Z.conversationId,agentId:Z.agentId,parentAgentId:Z.parentAgentId}),workspaceRoots:X?[X]:[],workspaceInfo:Q.workspaceInfo,userId:J,agent_id:Z.agentId,parent_agent_id:Z.parentAgentId}}function sP($){return{name:$.name,message:$.message,stack:$.stack}}function oP($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function tP($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function eP($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function $S($){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 ZS($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}async function a$($,Z){try{let Q=await f9($,{command:Z.command,cwd:Z.cwd,env:Z.env,detached:!0,onSpawn:Z.onSpawn});Z.onDispatch?.({payload:$,result:Q,detached:!0})}catch(Q){Z.onDispatchError?.(jK(Q),$)}}function VK($={}){return{hooks:{beforeRun:async(j)=>{let V=tP(j);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let B={...M1("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await a$(B,$)}else{let B={...M1("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await a$(B,$)}return},beforeTool:async(j)=>{let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...M1("tool_call",V,$),hookName:"tool_call",iteration:j.snapshot.iteration,tool_call:{id:j.toolCall.toolCallId,name:j.toolCall.toolName,input:j.input},preToolUse:{toolName:j.toolCall.toolName,parameters:JK(j.input)}};try{let B=await f9(H,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:H,result:B,detached:!1}),B?.timedOut)throw Error("tool_call hook command timed out");if(B?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${B.parseError}`);return ZS(aP(B?.parsedJson))}catch(B){$.onDispatchError?.(jK(B),H);return}},afterTool:async(j)=>{let V=$S(j),H={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},B={...M1("tool_result",H,$),hookName:"tool_result",iteration:j.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:JK(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await a$(B,$);return},afterRun:async({snapshot:j,result:V})=>{let H={agentId:j.agentId,conversationId:j.conversationId??j.runId??j.agentId,parentAgentId:j.parentAgentId??null};if(V.status==="completed"){let K={...M1("agent_end",H,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await a$(K,$);return}let B=V.status==="aborted"||oP(V.error?.message)?"agent_abort":"agent_error",G=B==="agent_error"?{...M1(B,H,$),hookName:B,iteration:V.iterations,error:sP(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...M1(B,H,$),hookName:B,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await a$(G,$)},onEvent:async(j)=>{if(j.type!=="message-added"||j.message.role!=="user")return;let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...M1("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:eP(j.message.content),attachments:[]}};await a$(H,$)}},shutdown:async({agentId:j,conversationId:V,parentAgentId:H,reason:B})=>{let G={...M1("session_shutdown",{agentId:j,conversationId:V,parentAgentId:H},$),hookName:"session_shutdown",reason:B};await a$(G,$)}}}import{createSessionId as QS}from"@cline/shared";function c0($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function HK($,Z,Q){return{version:$.version,requestId:$.requestId??QS("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class U9{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return c0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return c0($,{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 c0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return c0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return c0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return c0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return c0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return c0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return c0($,{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 c0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return c0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return c0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return HK($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Z){return HK($,"schedule_command_failed",Z instanceof Error?Z.message:String(Z))}}toCreateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:Z}}toUpdateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:Z}}}function L9($){return $?new Date($).getTime():void 0}function WS($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function D9($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof Z?.__hubScheduleCwd==="string"?Z.__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:L9($.nextRunAt),lastRunAt:L9($.lastRunAt),createdBy:typeof Z?.__hubScheduleCreatedBy==="string"?Z.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:Z?.__hubRuntimeOptions&&typeof Z.__hubRuntimeOptions==="object"&&!Array.isArray(Z.__hubRuntimeOptions)?Z.__hubRuntimeOptions:void 0,metadata:WS($)}}function JS($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function j3($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:L9($.startedAt),endedAt:L9($.completedAt),status:JS($.status),errorMessage:$.error}}class _9{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new n8({dbPath:$.dbPath}),this.materializer=new d8({store:this.store}),this.runner=new l8({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(_7($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return D9(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?D9(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>D9(Z))}updateSchedule($,Z){if(Z.cronPattern!==void 0)_7(Z.cronPattern);let Q=this.store.getHubSchedule($);if(!Q)return;let W=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot;if((Z.enabled??Q.enabled)&&!W)throw Error("workspaceRoot is required for enabled schedules");let X=this.store.updateHubSchedule($,{...Z,scheduleId:$});return X?D9(X):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;await this.runner.tick();let Q=this.store.getRun(Z.runId)??Z;return j3(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),j3(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((J)=>{let X=Z??this.store.getSpec(J.specId);if(!X||X.source!=="hub-schedule")return;return j3(J,X.externalId)}).filter((J)=>{if(!J)return!1;return!$.status||J.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,W=0,J=0,X;for(let Y of Z){if(Y.status==="success"||Y.status==="completed")Q+=1;if(!X&&Y.status!=="success"&&Y.status!=="completed")X=Y;if(Y.startedAt&&Y.endedAt)J+=Y.endedAt-Y.startedAt,W+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:W>0?J/W/1000:0,lastFailure:X}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let Z=this.store.getSpec($.specId);if(!Z||Z.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:Z.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:Z.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+Z.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let Z={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(Z).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,W)=>String(Q.nextRunAt).localeCompare(String(W.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:W})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:W}))}}q9();import{resolveClineBuildEnv as NS}from"@cline/shared";function wS($,Z){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Q?`Failed to connect to hub at ${Z} (${Q} event before socket open).`:`Failed to connect to hub at ${Z}.`)}var CS="cline-hub-auth.";function PS($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function SS($,Z){let Q=new URL($),W=new URL(Z);return Q.search="",Q.hash="",W.search="",W.hash="",Q.toString()===W.toString()}function KK(){return NS()==="production"?s1():_1()}async function bS($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=KK(),W=await A0(Q.discoveryPath);if(W?.url&&SS($.toString(),W.url))return W.authToken;return}async function yS($={}){let Z=a1($);if(!PS($)){let Q=KK(),W=await A0(Q.discoveryPath);if(W?.url)return W.url}return L1(Z.host,Z.port,Z.pathname)}async function FK($){return await new Promise((Z,Q)=>{(async()=>{let W=new URL($),J=await bS(W);W.hash="";let X=new WebSocket(W.toString(),J?[`${CS}${J}`]:void 0),Y=new Map,j=0;X.addEventListener("open",()=>{Z({send(V){let H=V.requestId??`hub-client-${++j}`;return new Promise((B,G)=>{Y.set(H,{resolve:B,reject:G});let K={kind:"command",envelope:{...V,requestId:H}};X.send(JSON.stringify(K))})},close(){X.close()}})}),X.addEventListener("message",(V)=>{let H=JSON.parse(String(V.data));if(H.kind==="reply"&&H.envelope.requestId){let B=Y.get(H.envelope.requestId);if(B)Y.delete(H.envelope.requestId),B.resolve(H.envelope)}}),X.addEventListener("close",()=>{for(let V of Y.values())V.reject(Error("Hub connection closed"));Y.clear()}),X.addEventListener("error",(V)=>{Q(wS(V,$))})})().catch(Q)})}async function ls($){try{return(await FK($)).close(),!0}catch{return!1}}async function ps($,Z){let Q=await yS($),W=await FK(Q);try{return await W.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{W.close()}}function G3($){return $?JSON.parse(JSON.stringify($)):{}}function M9($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?G3(Z.metadata):void 0;return{sessionId:typeof Z.sessionId==="string"?Z.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function AK($,Z){return $.error?.message??`hub command failed: ${Z}`}function hS($){let Z=G3($);if(typeof Z.error==="string"&&Z.error.trim())return{...Z,error:Z.error.trim()};let Q=Z.result&&typeof Z.result==="object"?Z.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...Z,error:Q.text.trim()};let W=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof W?.message==="string"&&W.message.trim())return{...Z,error:W.message.trim()};return Z}function fK($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function kS($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error("hub checkpoint restore returned no checkpoint");let Q=Z;if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Q}function IS($){let Z=G3($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||fK(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||fK(Z)||"",eventType:"schedule.execution.failed",payload:Z};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:Z};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:Z};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:Z};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:Z};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:Z};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:Z};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:Z};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:Z};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:hS($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class xS{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new z1({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 Z=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}),Q=M9(Z.payload);if(!Q?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}}}async sendRuntimeSession($,Z,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:Z.prompt,mode:Z.config.mode,attachments:Z.attachments,delivery:Z.delivery,timeoutSeconds:Z.config.timeoutSeconds},$,Q)).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 Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(S$(Q))return;throw Q}return M9(Z.payload)}async readMessages($){let Z=$.trim();if(!Z)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw Error(AK(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async restore($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let W=$.config,J=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.workspaceRoot,cwd:W.cwd,sessionConfig:{providerId:W.provider,modelId:W.model,apiKey:W.apiKey,cwd:W.cwd??W.workspaceRoot,workspaceRoot:W.workspaceRoot,systemPrompt:W.systemPrompt??"",mode:W.mode??"act",rules:W.rules,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawnAgent:W.enableSpawn!==!1,enableAgentTeams:W.enableTeams!==!1,disableMcpSettingsTools:W.disableMcpSettingsTools,missionLogIntervalSteps:W.missionStepInterval,missionLogIntervalMs:W.missionTimeIntervalMs},metadata:{source:W.source??"cli",provider:W.provider,model:W.model,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,prompt:void 0,interactive:W.interactive!==!1},runtimeOptions:{mode:W.mode,systemPrompt:W.systemPrompt,maxIterations:W.maxIterations,enableTools:W.enableTools,enableSpawn:W.enableSpawn,enableTeams:W.enableTeams,autoApproveTools:W.autoApproveTools,configExtensions:W.configExtensions},modelSelection:{provider:W.provider,model:W.model,apiKey:W.apiKey},toolPolicies:W.toolPolicies}:{}},Z);if(!J.ok)throw Error(AK(J,"session.restore"));let X=M9(J.payload);if(Q&&!X?.sessionId)throw Error("hub checkpoint restore returned no session id");let Y=Array.isArray(J.payload?.messages)?J.payload.messages:void 0,j=kS(J.payload);return{sessionId:X?.sessionId,startResult:X?.sessionId?{sessionId:X.sessionId,manifestPath:"",messagesPath:X.messagesPath??""}:void 0,...Y?{messages:Y}:{},checkpoint:j}}async listSessions($){await this.ensureMetadataApplied();let Z=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(Z.payload?.sessions)?Z.payload?.sessions:[]).map((W)=>M9({session:W})).filter((W)=>Boolean(W?.sessionId))}async deleteSession($,Z=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:Z})).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($,Z){let Q=new Set(($.sessionIds??[]).map((J)=>J.trim()).filter(Boolean)),W=this.client.subscribe((J)=>{let X=IS(J);if(!X)return;if(Q.size>0&&!Q.has(X.sessionId))return;Z.onEvent?.(X)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),W}streamTeamProgress($,Z){let Q=this.client.subscribe((W)=>{if(W.event!=="team.progress"||!W.payload)return;Z.onProjection?.(W.payload)});return this.ensureMetadataApplied().catch((W)=>{Z.onError?.(W instanceof Error?W:Error(String(W)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list");return Array.isArray(Z.payload?.schedules)?Z.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,Z){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...Z})).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($,Z){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:Z});return Array.isArray(Q.payload?.executions)?Q.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 Z=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(Z.payload?.upcoming)?Z.payload?.upcoming:[]}}class gS{client;constructor($){this.client=new z1({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 Z=await this.client.command("session.list",{limit:$});return Array.isArray(Z.payload?.sessions)?Z.payload.sessions:[]}subscribeUI($){return this.client.subscribe((Z)=>{switch(Z.event){case"ui.notify":$.onNotify?.(Z.payload);break;case"ui.show_window":$.onShowWindow?.(Z.payload);break;case"hub.client.registered":$.onClientRegistered?.(Z.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(Z.payload??{});break;case"session.created":$.onSessionCreated?.(Z.payload??{});break;case"session.updated":$.onSessionUpdated?.(Z.payload??{});break;case"session.detached":$.onSessionDetached?.(Z.payload??{});break}})}}import{normalizeProviderId as mS}from"@cline/llms";function vS($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function cS($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function Wo($={}){let Z=new j$({sessionService:new Q$(new Z$),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||T0.CLI,interactive:!1,config:{providerId:mS(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:cS(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{configExtensions:Q.configExtensions}});return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:J.manifestPath,messagesPath:J.messagesPath}}},async sendSession(Q,W){let J=await Z.runTurn({sessionId:Q,prompt:W.prompt,userImages:W.attachments?.userImages,userFiles:W.attachments?.userFiles?.map((X)=>X.content)});if(!J)throw Error("local hub schedule runtime returned no turn result");return{result:vS(J)}},async abortSession(Q){return await Z.abort(Q,Error("hub schedule abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}import{resolveClineBuildEnv as UF}from"@cline/shared";function uS($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
718
+ `).trim()||void 0}var UK=120,K3="...";function F3($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=UK)return Z;let Q=UK-Buffer.byteLength(K3,"utf8");if(Q<=0)return K3;let W="";for(let J of Z){if(Buffer.byteLength(W+J,"utf8")>Q)break;W+=J}return`${W}${K3}`}async function DK($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await n1(Q)].reverse().find((V)=>V.role==="assistant"),X=J?uS(J.content):void 0,Y=$?.workspaceRoot?.trim()||"workspace",j=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():Y;return{title:`Task completed (${Z})`,body:F3(X&&X.length>0?X:j.length>0?j:Y),severity:"info"}}import{captureSdkError as C9,createSessionId as vb}from"@cline/shared";import{createSessionId as rS}from"@cline/shared";import{createSessionId as pS}from"@cline/shared";function dS($){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 lS($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())Z.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())Z.parentAgentId=$.parentAgentId;if($.agentId?.trim())Z.agentId=$.agentId;if($.conversationId?.trim())Z.conversationId=$.conversationId;if($.messagesPath?.trim())Z.messagesPath=$.messagesPath;if($.prompt?.trim())Z.prompt=$.prompt;if($.provider?.trim())Z.provider=$.provider;if($.model?.trim())Z.model=$.model;if($.source?.trim())Z.source=$.source;if(typeof $.pid==="number")Z.pid=$.pid;return Object.keys(Z).length>0?Z:void 0}function R9($,Z,Q,W){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:dS($.status),participants:Z?[...Z.participants.values()]:[],metadata:lS($),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,...Q?{usage:{...Q}}:{},...W?{aggregateUsage:{...W}}:{}}}function g($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function h($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function E9($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function C0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function o$($,Z,Q){return{version:"v1",event:$,eventId:pS("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function u0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let W=await $.sessionHost.getAccumulatedUsage?.(Z);return R9(Q,$.sessionState.get(Z),W?.usage,W?.aggregateUsage)}async function d0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[W,J]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return t1({session:Q,messages:W,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function N9($,Z,Q,W,J={}){let X=$.sessionState.get(Z);if(X){if(J.interactive!==void 0)X.interactive=J.interactive;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:W});return X}let Y={createdByClientId:Q,interactive:J.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:W}]])};return $.sessionState.set(Z,Y),Y}async function A3($,Z){let Q=rS("approval_"),W=Z.sessionId;if($.sessionState.get(W)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((X)=>{$.pendingApprovals.set(Q,{sessionId:W,resolve:X}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:Z.sessionId,agentId:Z.agentId,conversationId:Z.conversationId,iteration:Z.iteration,toolCallId:Z.toolCallId,toolName:Z.toolName,inputJson:JSON.stringify(Z.input??null),policy:Z.policy},W))})}function f3($,Z,Q){let W=$.pendingApprovals.get(Z);if(!W)return;return $.pendingApprovals.delete(Z),W.resolve(Q),{sessionId:W.sessionId}}function U3($,Z,Q){let W=0;for(let[J,X]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:J,sessionId:X.sessionId}))continue;$.pendingApprovals.delete(J),X.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:J,approved:!1,cancelled:!0,reason:Q},X.sessionId)),W+=1}return W}async function LK($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return h(Z,"approval_not_found",`Unknown approval: ${Q}`);let J=typeof Z.payload?.reason==="string"?Z.payload.reason:Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)&&typeof Z.payload.payload.reason==="string"?Z.payload.payload.reason:void 0,X=Z.payload?.approved===!0,Y=f3($,Q,{approved:X,reason:J});if(!Y)return h(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:X,reason:J},Y.sessionId)),g(Z,{approvalId:Q,approved:X})}import{createSessionId as aS}from"@cline/shared";function iS($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var _K={debug:10,info:20,warn:30,error:40,silent:50};function nS(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function m($,Z,Q={}){if(_K[$]<_K[nS()])return;let W=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([J,X])=>[J,iS(X)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${W}`);return}console.log(`[hub] ${W}`)}function D3($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);m("error",$,{error:Q})}async function zK($,Z,Q,W,J,X){let Y=aS("capreq_"),j=performance.now();return m("info","capability.request.start",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J}),await new Promise((V,H)=>{$.pendingCapabilityRequests.set(Y,{sessionId:Z,targetClientId:J,capabilityName:Q,onProgress:X,resolve:(B)=>{if(m(B.ok?"info":"warn","capability.request.end",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J,ok:B.ok,error:B.error,durationMs:Math.round(performance.now()-j)}),!B.ok){H(Error(B.error||`Capability ${Q} was rejected by ${J}.`));return}V(B.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:Y,targetClientId:J,capabilityName:Q,payload:W},Z)),m("info","capability.request.published",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J})})}function TK($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return h(Z,"capability_not_found",`Unknown capability request: ${Q}`);if((Z.clientId?.trim()||"")!==W.targetClientId)return h(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return h(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return W.onProgress?.(X),g(Z,{requestId:Q})}function V$($,Z,Q){let W=0;for(let[J,X]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:J,...X}))continue;$.pendingCapabilityRequests.delete(J),m("warn","capability.request.cancelled",{requestId:J,sessionId:X.sessionId,capabilityName:X.capabilityName,targetClientId:X.targetClientId,reason:Q}),X.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:X.capabilityName,targetClientId:X.targetClientId,ok:!1,cancelled:!0,error:Q},X.sessionId)),W+=1}return W}async function OK($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",W=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",J=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!W||!J)return h(Z,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{},Y=await $.requestCapability(Q,W,X,J);return g(Z,Y)}catch(X){return h(Z,"capability_request_failed",X instanceof Error?X.message:String(X))}}function qK($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return h(Z,"capability_not_found",`Unknown capability request: ${Q}`);let J=Z.clientId?.trim()||"";if(J!==W.targetClientId)return h(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return h(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);$.pendingCapabilityRequests.delete(Q);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,Y=typeof Z.payload?.error==="string"?Z.payload.error:void 0,j=Z.payload?.ok===!0;return m(j?"info":"warn","capability.respond",{requestId:Q,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,error:Y}),W.resolve({ok:j,payload:X,error:Y}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,payload:X,error:Y},W.sessionId)),g(Z,{requestId:Q,ok:j})}import{createSessionId as sS}from"@cline/shared";function MK($,Z){let Q=Z.payload,W=Q?.clientId?.trim()||Z.clientId?.trim()||sS("client_");return $.clients.set(W,{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,actorKind:Q?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Q?.transport??"native",capabilities:Q?.capabilities??[],metadata:Q?.metadata,workspaceContext:Q?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),g(Z,{clientId:W})}function RK($,Z){let Q=Z.clientId?.trim(),W=Q?$.clients.get(Q):void 0;if(!Q||!W)return h(Z,"client_not_found","Client is not registered with this hub.");let J=E9(Z.payload?.metadata);if(W.lastSeenAt=Date.now(),J)W.metadata=JSON.parse(JSON.stringify(J));return g(Z)}function EK($,Z,Q){let W=Z.clientId?.trim();if(W)$.clients.delete(W),Q(W),$.publish($.buildEvent("hub.client.disconnected",{clientId:W}));return g(Z)}function NK($,Z){return g(Z,{clients:[...$.clients.values()]})}G0();import{existsSync as PK,mkdirSync as oS,readdirSync as tS,readFileSync as eS,rmSync as $b,writeFileSync as Zb}from"node:fs";import{dirname as Qb,join as wK}from"node:path";import{CONNECTOR_PLATFORMS as Wb,connectorChannelsFromPlatforms as Jb,listConnectorCatalog as SK,shouldIncludeConnectorField as Xb}from"@cline/shared";import{resolveConnectorDataDir as Yb,resolveConnectorSettingsPath as _3}from"@cline/shared/storage";var jb=1,CK={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},Vb={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 H$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function b4($){return typeof $==="string"?$.trim():void 0}function bK($){if(!PK($))return;try{let Z=JSON.parse(eS($,"utf8"));return H$(Z)?Z:void 0}catch{return}}function z3(){let $=bK(_3()),Z=H$($?.connectors)?$.connectors:{},Q={};for(let[W,J]of Object.entries(Z)){if(!H$(J))continue;let X=b4(J.type),Y=b4(J.configuredAt),j=b4(J.updatedAt);if(!X||!Y||!j)continue;let V=w9(J.values),H=H$(J.security)?{enabled:J.security.enabled===!0,values:w9(J.security.values)}:void 0;Q[W]={type:X,values:V,security:H,configuredAt:Y,updatedAt:j}}return{version:jb,connectors:Q}}function yK($){let Z=_3();oS(Qb(Z),{recursive:!0}),Zb(Z,`${JSON.stringify($,null,2)}
719
+ `,"utf8")}function w9($){if(!H$($))return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W.trim();return Z}function Hb($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function Bb($){let Z=wK(Yb(),$);if(!PK(Z))return[];return tS(Z).filter((Q)=>Q.endsWith(".json")&&!Q.endsWith(".threads.json")).map((Q)=>wK(Z,Q))}function Gb($,Z,Q){let W=Z.botUsername??Z.userName??Z.applicationId??Z.phoneNumberId??String(Q);return`${$}:${W}`}function Kb($,Z){let Q=bK(Z);if(!Q)return;let W=typeof Q.pid==="number"?Q.pid:void 0,J=typeof Q.hubUrl==="string"?Q.hubUrl:typeof Q.rpcAddress==="string"?Q.rpcAddress:void 0;if(!W||!J||!Hb(W))return;let X=Vb[$];if(!X)return;let Y={};for(let j of X.required){let V=CK[j](Q);if(!V||typeof V==="string"&&!V.trim())return;Y[j]=V}for(let j of X.optional){let V=CK[j](Q);if(V!==void 0)Y[j]=V}return{id:Gb($,Y,W),type:$,pid:W,hubUrl:J,...Y}}function Fb(){let $=[];for(let{name:Z}of SK())for(let Q of Bb(Z)){let W=Kb(Z,Q);if(W)$.push(W)}return $.sort((Z,Q)=>{if(Z.type!==Q.type)return Z.type.localeCompare(Q.type);let W=Z.botUsername??Z.userName??"",J=Q.botUsername??Q.userName??"";return W.localeCompare(J)})}function Ab(){let $=z3();return Object.entries($.connectors).map(([Z,Q])=>({id:Z,type:Q.type,configuredAt:Q.configuredAt,updatedAt:Q.updatedAt})).sort((Z,Q)=>Z.type.localeCompare(Q.type))}function T3(){return{available:Jb(),active:Fb(),configured:Ab()}}function fb($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function Ub($,Z){let Q={};for(let J of $.fields)Q[J.flag]=Z[J.flag]??J.initialValue??"";let W={};for(let J of $.fields){if(!Xb(J,Q))continue;fb(J,Q),W[J.flag]=Q[J.flag]}return W}function Db($){if(!H$($))throw Error("connector.configure payload must be an object.");let Z=b4($.channel);if(!Z)throw Error("channel is required");let Q=Wb.find((K)=>K.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(SK().map((K)=>K.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let J=w9($.values),X=Ub(Q,J),Y=H$($.security)?$.security:{},j=Y.enabled===!0,V=w9(Y.values);if(j&&Q.security)for(let K of Q.security.fields){let F=V[K.key];if(!F)throw Error(K.requiredMessage);let A=K.validate?.(F);if(A)throw Error(A)}let H=z3(),B=new Date().toISOString(),G=H.connectors[Z];return H.connectors[Z]={type:Z,values:X,security:j?{enabled:!0,values:V}:{enabled:!1,values:{}},configuredAt:G?.configuredAt??B,updatedAt:B},yK(H),T3()}function Lb($){if(!H$($))throw Error("connector.delete_config payload must be an object.");let Z=b4($.channel);if(!Z)throw Error("channel is required");let Q=z3();if(delete Q.connectors[Z],Object.keys(Q.connectors).length>0)yK(Q);else $b(_3(),{force:!0});return T3()}function _b($){return $==="connector.configure"||$==="connector.delete_config"}function L3($,Z,Q){if(!_b(Z.command))return;Q8($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function hK($,Z){try{if(Z.command==="connector.channels")return g(Z,T3());if(Z.command==="connector.configure"){let Q=Db(Z.payload);return L3($,Z,!0),g(Z,Q)}if(Z.command==="connector.delete_config"){let Q=Lb(Z.payload);return L3($,Z,!0),g(Z,Q)}return h(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return L3($,Z,!1),h(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var zb=30000;function Tb($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function Ob($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function qb($,Z,Q){let W=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return h($,c8,W)}function Mb($){return $?$:void 0}function Rb($){let Z=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(Z&&Number.isFinite(Z)&&Z>0)return Math.floor(Z);let Q=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(Q&&Number.isFinite(Q)&&Q>0)return Math.floor(Q*1000);return}async function Eb($,Z,Q,W){let J=performance.now(),X=!1,Y={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:W},j=setInterval(()=>{if(X)return;let B=Math.round(performance.now()-J);m("warn","run.heartbeat",{...Y,elapsedMs:B}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:B,...W?{timeoutMs:W}:{}},Q.sessionId))},zb),V=$.sessionHost.runTurn(Q);V.then((B)=>{if(!X)return;m("warn","run.late_end",{...Y,elapsedMs:Math.round(performance.now()-J),finishReason:B?.finishReason})},(B)=>{if(!X)return;m("error","run.late_error",{...Y,elapsedMs:Math.round(performance.now()-J),error:B})});let H;try{if(!W)return await V;return await Promise.race([V,new Promise((B,G)=>{H=setTimeout(()=>{let K=`Hub run ${Z.command} timed out after ${W}ms.`;X=!0,clearInterval(j),G(Error(K)),m("error","run.timeout",{...Y,elapsedMs:Math.round(performance.now()-J)}),U3($,(F)=>F.sessionId===Q.sessionId,K),V$($,(F)=>F.sessionId===Q.sessionId,K),$.sessionHost.abort(Q.sessionId,K).catch((F)=>{m("error","run.timeout_abort_failed",{...Y,error:F})})},W)})])}finally{if(X=!0,clearInterval(j),H)clearTimeout(H)}}async function kK($,Z){let Q=C0(Z),W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.prompt==="string"?W.prompt:typeof W.input==="string"?W.input:"";if(!J.trim())return h(Z,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let X=W.attachments&&typeof W.attachments==="object"&&!Array.isArray(W.attachments)?W.attachments:void 0,Y=Array.isArray(X?.userFiles)?X.userFiles.filter((B)=>typeof B==="string"):void 0,j=Rb(W);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let V;try{V=await Eb($,Z,{sessionId:Q,prompt:J,mode:Mb(W.mode),delivery:W.delivery==="queue"||W.delivery==="steer"?W.delivery:void 0,userImages:Array.isArray(X?.userImages)?X.userImages:void 0,userFiles:Y,timeoutMs:j},j)}catch(B){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(S$(B))return qb(Z,Q,B);throw $.publish($.buildEvent("run.failed",{reason:"error",error:B instanceof Error?B.message:String(B)},Q)),B}if(V){let B=await d0($,Q),G=Ob(V);if($.publish($.buildEvent(Tb(V.finishReason),{reason:V.finishReason,...G?{error:G}:{},result:V,...B?{snapshot:B}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let H=await d0($,Q);return g(Z,V||H?{...V?{result:V}:{},...H?{snapshot:H}:{}}:void 0)}async function IK($,Z){let Q=C0(Z),W=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";U3($,(J)=>J.sessionId===Q,W);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(J){m("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:J})}finally{V$($,(J)=>J.sessionId===Q,W)}return g(Z,{applied:!0})}async function xK($,Z){let Q=A9(Z.payload?.payload);if(!Q)return h(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),g(Z,{applied:!0})}async function gK($,Z){switch(Z.type){case"chunk":return;case"agent_event":await Nb($,Z);return;case"hook":if(Z.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:Z.payload.toolName},Z.payload.sessionId));else if(Z.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:Z.payload.toolName},Z.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:Z.payload.sessionId,summary:Z.payload.summary,lastEvent:Z.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,Z.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:Z.payload.sessionId,prompts:Z.payload.prompts},Z.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:Z.payload.id,prompt:Z.payload.prompt,delivery:Z.payload.delivery,attachmentCount:Z.payload.attachmentCount,userImages:Z.payload.userImages,userFiles:Z.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:Z.payload.sessionId,prompt:Q},Z.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:Z.payload.sessionId,snapshot:Z.payload.snapshot},Z.payload.sessionId));return;case"status":{let[Q,W]=await Promise.all([u0($,Z.payload.sessionId),d0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...W?{snapshot:W}:{}},Z.payload.sessionId));return}case"ended":await wb($,Z);return;default:return}}async function Nb($,Z){let{sessionId:Q,event:W}=Z.payload;if(W.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:W.iteration},Q));return}if(W.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:W.iteration,hadToolCalls:W.hadToolCalls,toolCallCount:W.toolCallCount},Q));return}if(W.type==="content_start"){if(W.contentType==="text"&&typeof W.text==="string"&&W.text.length>0){$.publish($.buildEvent("assistant.delta",{text:W.text},Q));return}if(W.contentType==="reasoning"){if(W.redacted&&!W.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof W.reasoning==="string"&&W.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:W.reasoning,redacted:W.redacted===!0},Q));return}if(W.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:W.toolCallId,toolName:W.toolName,input:W.input},Q));return}}if(W.type==="content_end"){switch(W.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:W.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:W.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:W.toolCallId,toolName:W.toolName,output:W.output,error:W.error},Q));break}return}if(W.type==="usage"){let J;try{J=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{J=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:W.inputTokens,outputTokens:W.outputTokens,cacheReadTokens:W.cacheReadTokens??0,cacheWriteTokens:W.cacheWriteTokens??0,totalCost:W.cost??0},totals:{inputTokens:W.totalInputTokens,outputTokens:W.totalOutputTokens,cacheReadTokens:W.totalCacheReadTokens??0,cacheWriteTokens:W.totalCacheWriteTokens??0,totalCost:W.totalCost??0},usage:J?.usage,aggregateUsage:J?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":W.parentAgentId?"subagent":"lead",agentId:W.agentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(W.type==="done")$.publish($.buildEvent("agent.done",{reason:W.reason,text:W.text,iterations:W.iterations,usage:W.usage},Q))}async function wb($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),W=Q===Z.payload.reason||Q==="run.start.reply";if(W)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[J,X]=await Promise.all([u0($,Z.payload.sessionId),d0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let Y=await DK(J);$.publish($.buildEvent("ui.notify",Y,Z.payload.sessionId))}if(W)return;$.publish($.buildEvent(Z.payload.reason==="aborted"?"run.aborted":Z.payload.reason==="error"||Z.payload.reason==="failed"?"run.failed":"run.completed",{reason:Z.payload.reason,...X?{snapshot:X}:{}},Z.payload.sessionId))}import{createSessionId as cK,parseRuntimeConfigExtensions as uK}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as co,HUB_COMPACTION_CAPABILITY as uo,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as lo,HUB_HOOK_CAPABILITY_PREFIX as po,HUB_MISTAKE_LIMIT_CAPABILITY as ro,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as io,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as no,isHubToolExecutorName as Cb}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as eo,HUB_COMPACTION_CAPABILITY as $t,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Zt,HUB_HOOK_CAPABILITY_PREFIX as Qt,HUB_MISTAKE_LIMIT_CAPABILITY as Wt,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Jt,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Xt}from"@cline/shared";var Pb=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function t$($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function Sb($,Z){let Q=typeof $.name==="string"?$.name.trim():"",W=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",X=t$($.inputSchema);if(!Q||!W||!X||!J||Z.has(J))return;return Z.add(J),{kind:"tool",capabilityName:J,name:Q,description:W,inputSchema:X,...t$($.lifecycle)?{lifecycle:t$($.lifecycle)}:{}}}function q3($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let W of $){if(!W||typeof W!=="object"||Array.isArray(W))continue;let J=W,X=J.kind,Y=typeof J.capabilityName==="string"?J.capabilityName.trim():"";if(!Y||Q.has(Y))continue;if(X==="tool"){let j=Sb(J,Q);if(j)Z.push(j);continue}if(X==="toolExecutor"){let j=J.executor;if(!Cb(j))continue;Q.add(Y),Z.push({kind:"toolExecutor",capabilityName:Y,executor:j});continue}if(X==="hook"){let j=typeof J.name==="string"?J.name.trim():"";if(!j)continue;Q.add(Y),Z.push({kind:"hook",capabilityName:Y,name:j});continue}if(X==="compaction"){Q.add(Y),Z.push({kind:"compaction",capabilityName:Y,...t$(J.config)?{config:t$(J.config)}:{}});continue}if(X==="checkpoint"){Q.add(Y),Z.push({kind:"checkpoint",capabilityName:Y,...t$(J.config)?{config:t$(J.config)}:{}});continue}if(X==="mistakeLimit"){Q.add(Y),Z.push({kind:"mistakeLimit",capabilityName:Y});continue}if(X==="userInstructionService")Q.add(Y),Z.push({kind:"userInstructionService",capabilityName:Y})}return Z}function vK($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function bb($){return Object.hasOwn($,"update")?$.update:$}function y4($){return $.trim().replace(/^\/+/,"").toLowerCase()}function yb($){let Z=($??[]).map(y4).filter(Boolean);return Z.length>0?new Set(Z):void 0}function hb($,Z,Q){if(!Q)return!0;let W=y4($),J=y4(Z),X=W.includes(":")?W.split(":").at(-1)??W:W,Y=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(W)||Q.has(J)||Q.has(X)||Q.has(Y)}function O3($,Z){let Q=yb(Z);return $.records.skill.map((W)=>({id:W.id,name:W.item.name,description:"description"in W.item&&typeof W.item.description==="string"?W.item.description:void 0,disabled:W.item.disabled===!0,skill:W.item})).filter((W)=>hb(W.id,W.name,Q))}function mK($,Z){let Q=async(W,J)=>{let X=y4(W),j=O3($,Z).filter((K)=>K.id===X||y4(K.name)===X||K.id.endsWith(`:${X}`)).filter((K)=>!K.disabled);if(j.length!==1)return j.length>1?`Skill "${W}" is ambiguous. Use one of: ${j.map((K)=>K.id).join(", ")}`:`Skill "${W}" not found.`;let V=j[0].skill,H=J?.trim(),B=H?`
720
720
  <command-args>${H}</command-args>`:"",G=V.description?.trim()?`Description: ${V.description.trim()}
721
721
 
722
722
  `:"";return`<command-name>${V.name}</command-name>${B}
723
723
  <command-instructions>
724
724
  ${G}${V.instructions}
725
- </command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>O3($,Z).map(({skill:W,...J})=>J),enumerable:!0}),Q}function hb($,Z,Q,W){let J={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},X=async()=>{let Y=await W($,Q.capabilityName,{},Z);if(Y?.snapshot)J=Y.snapshot};return{start:X,stop:()=>{},refreshType:async()=>{await X()},listRecords:(Y)=>[...J.records[Y]],listRuntimeCommands:()=>[...J.runtimeCommands],resolveRuntimeSlashCommand:(Y)=>{if(!Y.startsWith("/")||Y.length<2)return Y;let V=Y.match(/^\/(\S+)/)?.[1];if(!V)return Y;let H=J.runtimeCommands.find((B)=>B.name===V);return H?`${H.instructions}${Y.slice(V.length+1)}`:Y},hasConfiguredSkills:(Y)=>O3(J,Y).some((j)=>!j.disabled),createSkillsExecutor:(Y)=>mK(J,Y),createExtension:(Y)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[Y.includeRules?"rules":void 0,Y.registerSkillsTool?"tools":void 0,Y.includeSkills||Y.includeWorkflows?"commands":void 0].filter((j)=>Boolean(j))},setup(j){if(Y.includeRules)j.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>M6(J.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(Y.registerSkillsTool)j.registerTool(z2(mK(J,Y.allowedSkillNames)));for(let V of J.runtimeCommands.filter((H)=>H.kind==="skill"&&Y.includeSkills||H.kind==="workflow"&&Y.includeWorkflows))j.registerCommand({name:V.name,description:V.description,handler:(H)=>{let B=H.trim();return B?`${V.instructions}
725
+ </command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>O3($,Z).map(({skill:W,...J})=>J),enumerable:!0}),Q}function kb($,Z,Q,W){let J={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},X=async()=>{let Y=await W($,Q.capabilityName,{},Z);if(Y?.snapshot)J=Y.snapshot};return{start:X,stop:()=>{},refreshType:async()=>{await X()},listRecords:(Y)=>[...J.records[Y]],listRuntimeCommands:()=>[...J.runtimeCommands],resolveRuntimeSlashCommand:(Y)=>{if(!Y.startsWith("/")||Y.length<2)return Y;let V=Y.match(/^\/(\S+)/)?.[1];if(!V)return Y;let H=J.runtimeCommands.find((B)=>B.name===V);return H?`${H.instructions}${Y.slice(V.length+1)}`:Y},hasConfiguredSkills:(Y)=>O3(J,Y).some((j)=>!j.disabled),createSkillsExecutor:(Y)=>mK(J,Y),createExtension:(Y)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[Y.includeRules?"rules":void 0,Y.registerSkillsTool?"tools":void 0,Y.includeSkills||Y.includeWorkflows?"commands":void 0].filter((j)=>Boolean(j))},setup(j){if(Y.includeRules)j.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>M6(J.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(Y.registerSkillsTool)j.registerTool(z2(mK(J,Y.allowedSkillNames)));for(let V of J.runtimeCommands.filter((H)=>H.kind==="skill"&&Y.includeSkills||H.kind==="workflow"&&Y.includeWorkflows))j.registerCommand({name:V.name,description:V.description,handler:(H)=>{let B=H.trim();return B?`${V.instructions}
726
726
 
727
- ${B}`:V.instructions}})}})}}function kb($,Z,Q,W){let J=Q.map((X)=>[X.executor,async(...Y)=>{let j=Y.at(-1),V=Y.slice(0,-1);return(await W($,X.capabilityName,{executor:X.executor,args:V,context:vK(j)},Z))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function Ib($,Z,Q,W){if(Q.length===0)return;return Q.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema,lifecycle:J.lifecycle,async execute(X,Y){return(await W($,J.capabilityName,{toolName:J.name,input:X,context:vK(Y)},Z,Y.emitUpdate?(V)=>{Y.emitUpdate?.(Sb(V))}:void 0))?.result}}))}function xb($,Z,Q,W){let J=new Map(Q.map((Y)=>[Y.name,Y])),X={};for(let Y of Cb){let j=J.get(Y);if(!j)continue;X[Y]=async(V)=>{return(await W($,j.capabilityName,{context:V},Z))?.control}}return Object.keys(X).length>0?X:void 0}function M3($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),W=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),X=$.contributions.find((V)=>V.kind==="checkpoint"),Y=$.contributions.find((V)=>V.kind==="mistakeLimit"),j=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:kb($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...W.length>0?{hooks:xb($.sessionId,$.targetClientId,W,$.requestCapability)}:{},...Q.length>0?{extraTools:Ib($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...J?{compaction:{...$.sessionConfig?.compaction??{},...J.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,J.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{checkpoint:{...$.sessionConfig?.checkpoint??{},...X.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...Y?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,Y.capabilityName,{context:V},$.targetClientId))?.result}}:{},...j?{userInstructionService:hb($.sessionId,$.targetClientId,j,$.requestCapability)}:{}}}}var dK="hubCapabilityOwnerClientId";function lK($,Z){$[dK]=Z}function gb($){let Z=$?.[dK];return typeof Z==="string"&&Z.trim()?Z.trim():void 0}async function pK($,Z,Q){let W=performance.now(),J={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};m("info","session.create.begin",J);let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{},j=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0,V=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{};if(typeof j?.mode==="string")Y.mode=j.mode;else if(typeof V.mode==="string")Y.mode=V.mode;if(typeof j?.systemPrompt==="string")Y.systemPrompt=j.systemPrompt;else if(typeof V.systemPrompt==="string")Y.systemPrompt=V.systemPrompt;if(j?.checkpoint?.enabled===!0)Y.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)Y.checkpointEnabled=!0;let H=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},B=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():"";if(!B)return m("warn","session.create.invalid",{...J,reason:"missing_workspace_root"}),h(Z,"invalid_session_create","session.create requires workspaceRoot or cwd");let G=Z.clientId?.trim()||"hub-client",K=q3(V.clientContributions);if(m("info","session.create.contributions_parsed",{...J,clientId:G,workspaceRoot:B,cwd:typeof X.cwd==="string"?X.cwd:void 0,contributionCount:K.length}),K.length>0)lK(Y,G);let A=(typeof j?.sessionId==="string"?j.sessionId.trim():"")||cK(),L=uK(V.configExtensions);m("info","session.create.runtime_build.begin",{...J,sessionId:A,configExtensionCount:L?.length??0});let f=M3({sessionId:A,targetClientId:G,contributions:K,sessionConfig:j,requestCapability:$.requestCapability});m("info","session.create.start_session.begin",{...J,sessionId:A,provider:j?.providerId??(typeof H.provider==="string"?H.provider:typeof Y.provider==="string"?Y.provider:"hub"),model:j?.modelId??(typeof H.model==="string"?H.model:typeof Y.model==="string"?Y.model:"hub")});let D=await $.sessionHost.startSession({source:typeof Y.source==="string"?Y.source:void 0,interactive:Y.interactive!==!1,sessionMetadata:Object.keys(Y).length>0?Y:void 0,initialMessages:Array.isArray(X.initialMessages)?X.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:L,...f.localRuntime},capabilities:{toolExecutors:f.toolExecutors,requestToolApproval:Q},config:{...j??{},sessionId:A,providerId:j?.providerId??(typeof H.provider==="string"?H.provider:typeof Y.provider==="string"?Y.provider:"hub"),modelId:j?.modelId??(typeof H.model==="string"?H.model:typeof Y.model==="string"?Y.model:"hub"),apiKey:j?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:j?.cwd??(typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():B),workspaceRoot:j?.workspaceRoot??B,systemPrompt:j?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:j?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:j?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:j?.enableTools??V.enableTools!==!1,enableSpawnAgent:j?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:j?.enableAgentTeams??V.enableTeams!==!1,checkpoint:j?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:j?.teamName??(typeof Y.teamName==="string"?Y.teamName:void 0)},toolPolicies:X.toolPolicies&&typeof X.toolPolicies==="object"&&!Array.isArray(X.toolPolicies)?JSON.parse(JSON.stringify(X.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});m("info","session.create.start_session.end",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W),hasImmediateResult:!!D.result}),N9($,D.sessionId,G,"creator",{interactive:Y.interactive!==!1}),m("info","session.create.read_records.begin",{...J,sessionId:D.sessionId});let[U,T]=await Promise.all([u0($,D.sessionId),d0($,D.sessionId)]);if(m("info","session.create.read_records.end",{...J,sessionId:D.sessionId,hasSession:!!U,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-W)}),U)$.publish($.buildEvent("session.created",{session:U,...T?{snapshot:T}:{}},D.sessionId));return m("info","session.create.reply",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W)}),g(Z,{session:U,...T?{snapshot:T}:{}})}async function rK($,Z,Q){let W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.sessionId==="string"?W.sessionId.trim():Z.sessionId?.trim()||"",X=W.checkpointRunCount;if(!J)return h(Z,"invalid_restore","session.restore requires a session id");let Y=W.restore&&typeof W.restore==="object"?W.restore:{},j=Y.messages!==!1;if(typeof X!=="number")return h(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0;if(j&&!V)return h(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let H=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{},B=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{};if(typeof V?.mode==="string")B.mode=V.mode;else if(typeof H.mode==="string")B.mode=H.mode;if(typeof V?.systemPrompt==="string")B.systemPrompt=V.systemPrompt;else if(typeof H.systemPrompt==="string")B.systemPrompt=H.systemPrompt;if(V?.checkpoint?.enabled===!0)B.checkpointEnabled=!0;else if(H.checkpointEnabled===!0)B.checkpointEnabled=!0;let G=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},K=Z.clientId?.trim()||"hub-client",F=q3(H.clientContributions);if(F.length>0)lK(B,K);let L=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||cK(),f=uK(H.configExtensions),D=M3({sessionId:L,targetClientId:K,contributions:F,sessionConfig:V,requestCapability:$.requestCapability}),T=await new r2().restoreCheckpoint({sessionId:J,checkpointRunCount:X,restore:{messages:Y.messages,workspace:Y.workspace,omitCheckpointMessageFromSession:Y.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(M)=>$.sessionHost.getSession(M),readMessages:(M)=>$.sessionHost.readSessionMessages(M),buildStartInput:(M)=>{if(M.restoredCheckpointMetadata)B.checkpoint=M.restoredCheckpointMetadata;let E=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():M.sourceSession.workspaceRoot||M.sourceSession.cwd;return{source:typeof B.source==="string"?B.source:void 0,interactive:B.interactive!==!1,sessionMetadata:{...B,restoredFromSessionId:J,restoredCheckpointRunCount:X},initialMessages:M.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:f,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:L,providerId:V?.providerId??(typeof G.provider==="string"?G.provider:M.sourceSession.provider),modelId:V?.modelId??(typeof G.model==="string"?G.model:M.sourceSession.model),apiKey:V?.apiKey??(typeof G.apiKey==="string"?G.apiKey:""),cwd:V?.cwd??M.plan.cwd,workspaceRoot:V?.workspaceRoot??E,systemPrompt:V?.systemPrompt??(typeof H.systemPrompt==="string"?H.systemPrompt:""),mode:V?.mode??(H.mode==="plan"||H.mode==="yolo"?H.mode:"act"),maxIterations:V?.maxIterations??(typeof H.maxIterations==="number"?H.maxIterations:void 0),enableTools:V?.enableTools??H.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??H.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??H.enableTeams!==!1,checkpoint:V?.checkpoint??(H.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof B.teamName==="string"?B.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):H.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(M)=>$.sessionHost.startSession(M),getStartedSessionId:(M)=>M.sessionId,readRestoredSession:(M)=>$.sessionHost.getSession(M)});if(!j)return g(Z,{checkpoint:T.checkpoint});let q=T.startResult;if(!q)return h(Z,"restore_failed","Checkpoint restore did not start a session");N9($,q.sessionId,K,"creator",{interactive:B.interactive!==!1});let[z,_]=await Promise.all([u0($,q.sessionId),d0($,q.sessionId)]);if(z)$.publish($.buildEvent("session.created",{session:z,..._?{snapshot:_}:{}},q.sessionId));return g(Z,{session:z,..._?{snapshot:_}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof s0)return h(Z,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return h(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function iK($,Z){let Q=C0(Z);if(!Q)return h(Z,"invalid_session_attach","session.attach requires a session id");N9($,Q,Z.clientId?.trim()||"hub-client","participant");let W=await u0($,Q);if(W)$.publish($.buildEvent("session.attached",{session:W},Q));return W?g(Z,{session:W}):h(Z,"session_not_found",`Unknown session: ${Q}`)}async function nK($,Z){let Q=C0(Z);if(!Q)return h(Z,"invalid_session_detach","session.detach requires a session id");let W=Z.clientId?.trim()||"hub-client",[J]=await Promise.all([u0($,Q)]),X=gb(J?.metadata)??W,Y=$.sessionState.get(Q);if(Y){if(Y.participants.delete(W),Y.createdByClientId===W)Y.createdByClientId=X;if(Y.participants.size===0)$.sessionState.delete(Q)}V$($,(H)=>H.sessionId===Q&&H.targetClientId===W,`Capability owner client ${W} detached before request was resolved.`);let[j,V]=await Promise.all([u0($,Q),d0($,Q)]);return $.publish($.buildEvent("session.detached",j?{session:j,...V?{snapshot:V}:{},clientId:W}:{clientId:W},Q)),g(Z)}async function aK($,Z){let Q=C0(Z),W=Z.payload?.includeSnapshot===!0,[J,X]=await Promise.all([u0($,Q),W?d0($,Q):Promise.resolve(void 0)]);return J?g(Z,{session:J,...X?{snapshot:X}:{}}):h(Z,"session_not_found",`Unknown session: ${Q}`)}async function sK($,Z){let Q=C0(Z);if(!Q)return h(Z,"invalid_session_id","session.messages requires a session id");if(!await u0($,Q))return h(Z,"session_not_found",`Unknown session: ${Q}`);let J=await $.sessionHost.readSessionMessages(Q);return g(Z,{sessionId:Q,messages:J})}async function oK($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,J=(await $.sessionHost.listSessions(Q)).map((X)=>R9(X,$.sessionState.get(X.sessionId)));return g(Z,{sessions:J})}async function tK($,Z){let Q=C0(Z),W=E9(Z.payload?.metadata),J=await $.sessionHost.updateSession(Q,{metadata:W}),[X,Y]=await Promise.all([u0($,Q),d0($,Q)]);if(X)$.publish($.buildEvent("session.updated",{session:X,...Y?{snapshot:Y}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:J.updated,payload:{updated:J.updated,session:X,...Y?{snapshot:Y}:{}}}}async function eK($,Z){let Q=C0(Z),W=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),g(Z,{deleted:W})}async function $F($,Z){let Q=C0(Z),W=$.sessionHost.pendingPrompts;if(!W)return h(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await W.list({sessionId:Q});return g(Z,{sessionId:Q,prompts:J})}async function ZF($,Z){let Q=C0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,X=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,Y=$.sessionHost.pendingPrompts;if(!Y)return h(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await Y.update({sessionId:Q,promptId:W,prompt:J,delivery:X});return g(Z,j)}async function QF($,Z){let Q=C0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return h(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await J.delete({sessionId:Q,promptId:W});return g(Z,X)}function WF($){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 vb=new Set(["skills","workflows","rules","tools","mcp"]);function R3($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function h4($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="string")throw Error(`settings payload '${Z}' must be a string.`);return Q}function cb($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="boolean")throw Error(`settings payload '${Z}' must be a boolean.`);return Q}function JF($){if($===void 0)return{};if(!R3($))throw Error("settings.list payload must be an object.");return{cwd:h4($,"cwd"),workspaceRoot:h4($,"workspaceRoot"),availabilityContext:R3($.availabilityContext)?$.availabilityContext:void 0}}function ub($){if(!R3($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!vb.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...JF($),type:Z,id:h4($,"id"),path:h4($,"path"),name:h4($,"name"),enabled:cb($,"enabled")}}class P9{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=mb("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new j$({sessionService:new Q$(new Z$),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:(Z)=>this.publish(Z),buildEvent:o$,requestCapability:(Z,Q,W,J,X)=>zK(this.ctx,Z,Q,W,J,X)},this.schedules=new _9({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let W=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!W)return;this.publish(o$(W,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new U9(this.schedules),this.settings=$.settingsService??new h2,$.cronOptions)this.cronService=new a8({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{gK(this.ctx,Z).catch((Q)=>{D3("session event handling failed",Q),C9(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Q,severity:"error",handled:!0,context:{eventType:Z.type,sessionId:Z.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())f3(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(V$(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 Z=await this.dispatchCommand($);return this.captureFailedReply($,Z),Z}catch(Z){throw C9(this.options.telemetry,{component:"core",operation:"hub.command",error:Z,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),Z}}async dispatchCommand($){switch($.command){case"client.register":return MK(this.ctx,$);case"client.update":return RK(this.ctx,$);case"client.unregister":return EK(this.ctx,$,(Z)=>{this.listeners.delete(Z),this.detachClientFromSessions(Z)});case"client.list":return NK(this.ctx,$);case"session.create":return await pK(this.ctx,$,(Z)=>A3(this.ctx,Z));case"session.restore":return await rK(this.ctx,$,(Z)=>A3(this.ctx,Z));case"session.attach":return await iK(this.ctx,$);case"session.detach":return await nK(this.ctx,$);case"session.get":return await aK(this.ctx,$);case"session.messages":return await sK(this.ctx,$);case"session.list":return await oK(this.ctx,$);case"session.update":return await tK(this.ctx,$);case"session.pending_prompts":return await $F(this.ctx,$);case"session.update_pending_prompt":return await ZF(this.ctx,$);case"session.remove_pending_prompt":return await QF(this.ctx,$);case"session.delete":return await eK(this.ctx,$);case"session.hook":return await xK(this.ctx,$);case"run.start":case"session.send_input":return await kK(this.ctx,$);case"run.abort":return await IK(this.ctx,$);case"capability.request":return await OK(this.ctx,$);case"approval.respond":return await LK(this.ctx,$);case"capability.respond":return qK(this.ctx,$);case"capability.progress":return TK(this.ctx,$);case"ui.notify":return this.publish(o$("ui.notify",$.payload??{})),g($);case"ui.show_window":return this.publish(o$("ui.show_window",$.payload??{})),g($);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 hK(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 Z=await this.scheduleCommands.handleCommand($);if(Z.ok){let Q=WF($.command);if(Q)this.publish(o$(Q,Z.payload))}return Z}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!db(Z.error.code))return;C9(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(Z.error.message),severity:Z.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:Z.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let Z=await this.settings.list(JF($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:Z instanceof Error?Z.message:String(Z)}}}}async handleSettingsToggle($){try{let Z=await this.settings.toggle(ub($.payload));return this.publish(o$("settings.changed",{types:Z.changedTypes,snapshot:Z.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z.snapshot,changedTypes:Z.changedTypes}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:Z instanceof Error?Z.message:String(Z)}}}}subscribe($,Z,Q){let W=this.listeners.get($)??new Set,J={sessionId:Q?.sessionId,listener:Z};return W.add(J),this.listeners.set($,W),()=>{let X=this.listeners.get($);if(!X)return;if(X.delete(J),X.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries())if(Q.participants.delete($),Q.participants.size===0)this.sessionState.delete(Z);V$(this.ctx,(Z)=>Z.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let Z of this.listeners.values())for(let Q of Z){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(W){D3(`listener threw while publishing ${$.event}`,W),C9(this.options.telemetry,{component:"core",operation:"hub.publish",error:W,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function db($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as ib}from"node:crypto";import nb from"node:http";import ab from"node:net";import{URL as S3}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as jF,HUB_CAPABILITIES as sb,isHubProtocolCompatible as ob,MAX_CLIENT_HUB_PROTOCOL_VERSION as VF,MIN_CLIENT_HUB_PROTOCOL_VERSION as HF}from"@cline/shared";import{WebSocketServer as tb}from"ws";import{captureSdkError as XF,HUB_COMMAND_SLOW_LOG_MS as lb,resolveHubCommandTimeoutMs as pb,safeJsonParse as rb}from"@cline/shared";function E3($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function YF($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}class N3{transport;telemetry;constructor($,Z){this.transport=$;this.telemetry=Z}attach($){let Z=new Map,Q=new Set,W=!1,J=(V)=>{try{$.send(JSON.stringify(V))}catch(H){console.error(`[hub] failed to send websocket frame: ${H instanceof Error?H.stack||H.message:String(H)}`)}},X=(V)=>{J({kind:"event",envelope:V})},Y=async(V)=>{try{let H=JSON.parse(V.data);switch(H.kind){case"command":{let B=performance.now(),G=!1,K=E3(H);m("info","command.start",K);let F=setTimeout(()=>{if(G)return;m("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-B)})},lb),A=this.transport.command(H.envelope);A.then((q)=>{if(!G)return;m(q.ok?"warn":"error","command.late_end",{...K,elapsedMs:Math.round(performance.now()-B),ok:q.ok,errorCode:q.error?.code,errorMessage:q.error?.message})},(q)=>{if(!G)return;m("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-B),error:q})});let L=!1,f,D,U=pb(H.envelope.command,H.envelope.timeoutMs);try{D=U===null?await A:await Promise.race([A,new Promise((q)=>{f=setTimeout(()=>{L=!0,XF(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${H.envelope.command} did not complete within ${U}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:U}}),q(YF(H,"hub_command_timeout",`Hub command ${H.envelope.command} did not complete within ${U}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${H.envelope.requestId}.`))},U)})])}catch(q){if(clearTimeout(F),f)clearTimeout(f);throw q}if(G=L,clearTimeout(F),f)clearTimeout(f);let T=Math.round(performance.now()-B);if(L)m("error","command.timeout",{...K,durationMs:T,timeoutMs:U});else m(D.ok?"info":"warn","command.end",{...K,durationMs:T,ok:D.ok,errorCode:D.error?.code,errorMessage:D.error?.message});if(H.envelope.command==="client.register"&&D.ok){let z=(H.envelope.payload??{}).clientId?.trim()||H.envelope.clientId?.trim();if(z)Q.add(z)}else if(H.envelope.command==="client.unregister"&&D.ok){let q=H.envelope.clientId?.trim();if(q)Q.delete(q)}J({kind:"reply",envelope:D});break}case"stream.subscribe":{let B=`${H.clientId}:${H.sessionId??"*"}`;if(Z.has(B))break;let G=await this.transport.subscribe(H.clientId,X,{sessionId:H.sessionId});Z.set(B,G);break}case"stream.unsubscribe":{let B=`${H.clientId}:${H.sessionId??"*"}`;Z.get(B)?.(),Z.delete(B);break}case"reply":case"event":break}}catch(H){let B=typeof V.data==="string"?rb(V.data):void 0;if(!B||B.kind!=="command"){m("error","rejected malformed websocket frame",{error:H});return}m("error","command.error",{...E3(B),error:H}),XF(this.telemetry,{component:"core",operation:"hub.websocket_command",error:H,severity:"error",handled:!0,context:E3(B)}),J({kind:"reply",envelope:YF(B,"command_failed",H instanceof Error?H.message:"Unknown hub error")})}},j=()=>{if(W)return;W=!0;for(let V of Z.values())V();Z.clear();for(let V of Q)this.transport.command({version:"v1",command:"client.unregister",clientId:V});Q.clear(),$.removeEventListener("message",Y),$.removeEventListener("close",j)};return $.addEventListener("message",Y),$.addEventListener("close",j),j}}class w3{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}}function eb($){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((Z)=>Buffer.from(Z))).toString();return String($)}function $y($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(W)=>{Q({data:eb(W)})});return}$.on("close",Q)},removeEventListener(){}}}function Zy($){try{$.write(`HTTP/1.1 400 Bad Request\r
727
+ ${B}`:V.instructions}})}})}}function Ib($,Z,Q,W){let J=Q.map((X)=>[X.executor,async(...Y)=>{let j=Y.at(-1),V=Y.slice(0,-1);return(await W($,X.capabilityName,{executor:X.executor,args:V,context:vK(j)},Z))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function xb($,Z,Q,W){if(Q.length===0)return;return Q.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema,lifecycle:J.lifecycle,async execute(X,Y){return(await W($,J.capabilityName,{toolName:J.name,input:X,context:vK(Y)},Z,Y.emitUpdate?(V)=>{Y.emitUpdate?.(bb(V))}:void 0))?.result}}))}function gb($,Z,Q,W){let J=new Map(Q.map((Y)=>[Y.name,Y])),X={};for(let Y of Pb){let j=J.get(Y);if(!j)continue;X[Y]=async(V)=>{return(await W($,j.capabilityName,{context:V},Z))?.control}}return Object.keys(X).length>0?X:void 0}function M3($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),W=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),X=$.contributions.find((V)=>V.kind==="checkpoint"),Y=$.contributions.find((V)=>V.kind==="mistakeLimit"),j=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:Ib($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...W.length>0?{hooks:gb($.sessionId,$.targetClientId,W,$.requestCapability)}:{},...Q.length>0?{extraTools:xb($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...J?{compaction:{...$.sessionConfig?.compaction??{},...J.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,J.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...X?{checkpoint:{...$.sessionConfig?.checkpoint??{},...X.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...Y?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,Y.capabilityName,{context:V},$.targetClientId))?.result}}:{},...j?{userInstructionService:kb($.sessionId,$.targetClientId,j,$.requestCapability)}:{}}}}var dK="hubCapabilityOwnerClientId";function lK($,Z){$[dK]=Z}function mb($){let Z=$?.[dK];return typeof Z==="string"&&Z.trim()?Z.trim():void 0}async function pK($,Z,Q){let W=performance.now(),J={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};m("info","session.create.begin",J);let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{},j=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0,V=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{};if(typeof j?.mode==="string")Y.mode=j.mode;else if(typeof V.mode==="string")Y.mode=V.mode;if(typeof j?.systemPrompt==="string")Y.systemPrompt=j.systemPrompt;else if(typeof V.systemPrompt==="string")Y.systemPrompt=V.systemPrompt;if(j?.checkpoint?.enabled===!0)Y.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)Y.checkpointEnabled=!0;let H=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},B=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():"";if(!B)return m("warn","session.create.invalid",{...J,reason:"missing_workspace_root"}),h(Z,"invalid_session_create","session.create requires workspaceRoot or cwd");let G=Z.clientId?.trim()||"hub-client",K=q3(V.clientContributions);if(m("info","session.create.contributions_parsed",{...J,clientId:G,workspaceRoot:B,cwd:typeof X.cwd==="string"?X.cwd:void 0,contributionCount:K.length}),K.length>0)lK(Y,G);let A=(typeof j?.sessionId==="string"?j.sessionId.trim():"")||cK(),L=uK(V.configExtensions);m("info","session.create.runtime_build.begin",{...J,sessionId:A,configExtensionCount:L?.length??0});let f=M3({sessionId:A,targetClientId:G,contributions:K,sessionConfig:j,requestCapability:$.requestCapability});m("info","session.create.start_session.begin",{...J,sessionId:A,provider:j?.providerId??(typeof H.provider==="string"?H.provider:typeof Y.provider==="string"?Y.provider:"hub"),model:j?.modelId??(typeof H.model==="string"?H.model:typeof Y.model==="string"?Y.model:"hub")});let D=await $.sessionHost.startSession({source:typeof Y.source==="string"?Y.source:void 0,interactive:Y.interactive!==!1,sessionMetadata:Object.keys(Y).length>0?Y:void 0,initialMessages:Array.isArray(X.initialMessages)?X.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:L,...f.localRuntime},capabilities:{toolExecutors:f.toolExecutors,requestToolApproval:Q},config:{...j??{},sessionId:A,providerId:j?.providerId??(typeof H.provider==="string"?H.provider:typeof Y.provider==="string"?Y.provider:"hub"),modelId:j?.modelId??(typeof H.model==="string"?H.model:typeof Y.model==="string"?Y.model:"hub"),apiKey:j?.apiKey??(typeof H.apiKey==="string"?H.apiKey:void 0),cwd:j?.cwd??(typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():B),workspaceRoot:j?.workspaceRoot??B,systemPrompt:j?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:j?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:j?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:j?.enableTools??V.enableTools!==!1,enableSpawnAgent:j?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:j?.enableAgentTeams??V.enableTeams!==!1,checkpoint:j?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:j?.teamName??(typeof Y.teamName==="string"?Y.teamName:void 0)},toolPolicies:X.toolPolicies&&typeof X.toolPolicies==="object"&&!Array.isArray(X.toolPolicies)?JSON.parse(JSON.stringify(X.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});m("info","session.create.start_session.end",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W),hasImmediateResult:!!D.result}),N9($,D.sessionId,G,"creator",{interactive:Y.interactive!==!1}),m("info","session.create.read_records.begin",{...J,sessionId:D.sessionId});let[U,T]=await Promise.all([u0($,D.sessionId),d0($,D.sessionId)]);if(m("info","session.create.read_records.end",{...J,sessionId:D.sessionId,hasSession:!!U,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-W)}),U)$.publish($.buildEvent("session.created",{session:U,...T?{snapshot:T}:{}},D.sessionId));return m("info","session.create.reply",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W)}),g(Z,{session:U,...T?{snapshot:T}:{}})}async function rK($,Z,Q){let W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.sessionId==="string"?W.sessionId.trim():Z.sessionId?.trim()||"",X=W.checkpointRunCount;if(!J)return h(Z,"invalid_restore","session.restore requires a session id");let Y=W.restore&&typeof W.restore==="object"?W.restore:{},j=Y.messages!==!1;if(typeof X!=="number")return h(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0;if(j&&!V)return h(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let H=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{},B=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{};if(typeof V?.mode==="string")B.mode=V.mode;else if(typeof H.mode==="string")B.mode=H.mode;if(typeof V?.systemPrompt==="string")B.systemPrompt=V.systemPrompt;else if(typeof H.systemPrompt==="string")B.systemPrompt=H.systemPrompt;if(V?.checkpoint?.enabled===!0)B.checkpointEnabled=!0;else if(H.checkpointEnabled===!0)B.checkpointEnabled=!0;let G=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},K=Z.clientId?.trim()||"hub-client",F=q3(H.clientContributions);if(F.length>0)lK(B,K);let L=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||cK(),f=uK(H.configExtensions),D=M3({sessionId:L,targetClientId:K,contributions:F,sessionConfig:V,requestCapability:$.requestCapability}),T=await new r2().restoreCheckpoint({sessionId:J,checkpointRunCount:X,restore:{messages:Y.messages,workspace:Y.workspace,omitCheckpointMessageFromSession:Y.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(M)=>$.sessionHost.getSession(M),readMessages:(M)=>$.sessionHost.readSessionMessages(M),buildStartInput:(M)=>{if(M.restoredCheckpointMetadata)B.checkpoint=M.restoredCheckpointMetadata;let E=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():M.sourceSession.workspaceRoot||M.sourceSession.cwd;return{source:typeof B.source==="string"?B.source:void 0,interactive:B.interactive!==!1,sessionMetadata:{...B,restoredFromSessionId:J,restoredCheckpointRunCount:X},initialMessages:M.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:f,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:L,providerId:V?.providerId??(typeof G.provider==="string"?G.provider:M.sourceSession.provider),modelId:V?.modelId??(typeof G.model==="string"?G.model:M.sourceSession.model),apiKey:V?.apiKey??(typeof G.apiKey==="string"?G.apiKey:""),cwd:V?.cwd??M.plan.cwd,workspaceRoot:V?.workspaceRoot??E,systemPrompt:V?.systemPrompt??(typeof H.systemPrompt==="string"?H.systemPrompt:""),mode:V?.mode??(H.mode==="plan"||H.mode==="yolo"?H.mode:"act"),maxIterations:V?.maxIterations??(typeof H.maxIterations==="number"?H.maxIterations:void 0),enableTools:V?.enableTools??H.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??H.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??H.enableTeams!==!1,checkpoint:V?.checkpoint??(H.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof B.teamName==="string"?B.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):H.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(M)=>$.sessionHost.startSession(M),getStartedSessionId:(M)=>M.sessionId,readRestoredSession:(M)=>$.sessionHost.getSession(M)});if(!j)return g(Z,{checkpoint:T.checkpoint});let q=T.startResult;if(!q)return h(Z,"restore_failed","Checkpoint restore did not start a session");N9($,q.sessionId,K,"creator",{interactive:B.interactive!==!1});let[z,_]=await Promise.all([u0($,q.sessionId),d0($,q.sessionId)]);if(z)$.publish($.buildEvent("session.created",{session:z,..._?{snapshot:_}:{}},q.sessionId));return g(Z,{session:z,..._?{snapshot:_}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof s0)return h(Z,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return h(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function iK($,Z){let Q=C0(Z);if(!Q)return h(Z,"invalid_session_attach","session.attach requires a session id");N9($,Q,Z.clientId?.trim()||"hub-client","participant");let W=await u0($,Q);if(W)$.publish($.buildEvent("session.attached",{session:W},Q));return W?g(Z,{session:W}):h(Z,"session_not_found",`Unknown session: ${Q}`)}async function nK($,Z){let Q=C0(Z);if(!Q)return h(Z,"invalid_session_detach","session.detach requires a session id");let W=Z.clientId?.trim()||"hub-client",[J]=await Promise.all([u0($,Q)]),X=mb(J?.metadata)??W,Y=$.sessionState.get(Q);if(Y){if(Y.participants.delete(W),Y.createdByClientId===W)Y.createdByClientId=X;if(Y.participants.size===0)$.sessionState.delete(Q)}V$($,(H)=>H.sessionId===Q&&H.targetClientId===W,`Capability owner client ${W} detached before request was resolved.`);let[j,V]=await Promise.all([u0($,Q),d0($,Q)]);return $.publish($.buildEvent("session.detached",j?{session:j,...V?{snapshot:V}:{},clientId:W}:{clientId:W},Q)),g(Z)}async function aK($,Z){let Q=C0(Z),W=Z.payload?.includeSnapshot===!0,[J,X]=await Promise.all([u0($,Q),W?d0($,Q):Promise.resolve(void 0)]);return J?g(Z,{session:J,...X?{snapshot:X}:{}}):h(Z,"session_not_found",`Unknown session: ${Q}`)}async function sK($,Z){let Q=C0(Z);if(!Q)return h(Z,"invalid_session_id","session.messages requires a session id");if(!await u0($,Q))return h(Z,"session_not_found",`Unknown session: ${Q}`);let J=await $.sessionHost.readSessionMessages(Q);return g(Z,{sessionId:Q,messages:J})}async function oK($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,J=(await $.sessionHost.listSessions(Q)).map((X)=>R9(X,$.sessionState.get(X.sessionId)));return g(Z,{sessions:J})}async function tK($,Z){let Q=C0(Z),W=E9(Z.payload?.metadata),J=await $.sessionHost.updateSession(Q,{metadata:W}),[X,Y]=await Promise.all([u0($,Q),d0($,Q)]);if(X)$.publish($.buildEvent("session.updated",{session:X,...Y?{snapshot:Y}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:J.updated,payload:{updated:J.updated,session:X,...Y?{snapshot:Y}:{}}}}async function eK($,Z){let Q=C0(Z),W=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),g(Z,{deleted:W})}async function $F($,Z){let Q=C0(Z),W=$.sessionHost.pendingPrompts;if(!W)return h(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await W.list({sessionId:Q});return g(Z,{sessionId:Q,prompts:J})}async function ZF($,Z){let Q=C0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,X=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,Y=$.sessionHost.pendingPrompts;if(!Y)return h(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await Y.update({sessionId:Q,promptId:W,prompt:J,delivery:X});return g(Z,j)}async function QF($,Z){let Q=C0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return h(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await J.delete({sessionId:Q,promptId:W});return g(Z,X)}function WF($){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 cb=new Set(["skills","workflows","rules","tools","mcp"]);function R3($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function h4($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="string")throw Error(`settings payload '${Z}' must be a string.`);return Q}function ub($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="boolean")throw Error(`settings payload '${Z}' must be a boolean.`);return Q}function JF($){if($===void 0)return{};if(!R3($))throw Error("settings.list payload must be an object.");return{cwd:h4($,"cwd"),workspaceRoot:h4($,"workspaceRoot"),availabilityContext:R3($.availabilityContext)?$.availabilityContext:void 0}}function db($){if(!R3($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!cb.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...JF($),type:Z,id:h4($,"id"),path:h4($,"path"),name:h4($,"name"),enabled:ub($,"enabled")}}class P9{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=vb("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new j$({sessionService:new Q$(new Z$),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:(Z)=>this.publish(Z),buildEvent:o$,requestCapability:(Z,Q,W,J,X)=>zK(this.ctx,Z,Q,W,J,X)},this.schedules=new _9({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let W=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!W)return;this.publish(o$(W,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new U9(this.schedules),this.settings=$.settingsService??new h2,$.cronOptions)this.cronService=new a8({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{gK(this.ctx,Z).catch((Q)=>{D3("session event handling failed",Q),C9(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Q,severity:"error",handled:!0,context:{eventType:Z.type,sessionId:Z.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())f3(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(V$(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 Z=await this.dispatchCommand($);return this.captureFailedReply($,Z),Z}catch(Z){throw C9(this.options.telemetry,{component:"core",operation:"hub.command",error:Z,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),Z}}async dispatchCommand($){switch($.command){case"client.register":return MK(this.ctx,$);case"client.update":return RK(this.ctx,$);case"client.unregister":return EK(this.ctx,$,(Z)=>{this.listeners.delete(Z),this.detachClientFromSessions(Z)});case"client.list":return NK(this.ctx,$);case"session.create":return await pK(this.ctx,$,(Z)=>A3(this.ctx,Z));case"session.restore":return await rK(this.ctx,$,(Z)=>A3(this.ctx,Z));case"session.attach":return await iK(this.ctx,$);case"session.detach":return await nK(this.ctx,$);case"session.get":return await aK(this.ctx,$);case"session.messages":return await sK(this.ctx,$);case"session.list":return await oK(this.ctx,$);case"session.update":return await tK(this.ctx,$);case"session.pending_prompts":return await $F(this.ctx,$);case"session.update_pending_prompt":return await ZF(this.ctx,$);case"session.remove_pending_prompt":return await QF(this.ctx,$);case"session.delete":return await eK(this.ctx,$);case"session.hook":return await xK(this.ctx,$);case"run.start":case"session.send_input":return await kK(this.ctx,$);case"run.abort":return await IK(this.ctx,$);case"capability.request":return await OK(this.ctx,$);case"approval.respond":return await LK(this.ctx,$);case"capability.respond":return qK(this.ctx,$);case"capability.progress":return TK(this.ctx,$);case"ui.notify":return this.publish(o$("ui.notify",$.payload??{})),g($);case"ui.show_window":return this.publish(o$("ui.show_window",$.payload??{})),g($);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 hK(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 Z=await this.scheduleCommands.handleCommand($);if(Z.ok){let Q=WF($.command);if(Q)this.publish(o$(Q,Z.payload))}return Z}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!lb(Z.error.code))return;C9(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(Z.error.message),severity:Z.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:Z.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let Z=await this.settings.list(JF($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:Z instanceof Error?Z.message:String(Z)}}}}async handleSettingsToggle($){try{let Z=await this.settings.toggle(db($.payload));return this.publish(o$("settings.changed",{types:Z.changedTypes,snapshot:Z.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z.snapshot,changedTypes:Z.changedTypes}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:Z instanceof Error?Z.message:String(Z)}}}}subscribe($,Z,Q){let W=this.listeners.get($)??new Set,J={sessionId:Q?.sessionId,listener:Z};return W.add(J),this.listeners.set($,W),()=>{let X=this.listeners.get($);if(!X)return;if(X.delete(J),X.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries())if(Q.participants.delete($),Q.participants.size===0)this.sessionState.delete(Z);V$(this.ctx,(Z)=>Z.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let Z of this.listeners.values())for(let Q of Z){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(W){D3(`listener threw while publishing ${$.event}`,W),C9(this.options.telemetry,{component:"core",operation:"hub.publish",error:W,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function lb($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as nb}from"node:crypto";import ab from"node:http";import sb from"node:net";import{URL as S3}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as jF,HUB_CAPABILITIES as ob,isHubProtocolCompatible as tb,MAX_CLIENT_HUB_PROTOCOL_VERSION as VF,MIN_CLIENT_HUB_PROTOCOL_VERSION as HF}from"@cline/shared";import{WebSocketServer as eb}from"ws";import{captureSdkError as XF,HUB_COMMAND_SLOW_LOG_MS as pb,resolveHubCommandTimeoutMs as rb,safeJsonParse as ib}from"@cline/shared";function E3($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function YF($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}class N3{transport;telemetry;constructor($,Z){this.transport=$;this.telemetry=Z}attach($){let Z=new Map,Q=new Set,W=!1,J=(V)=>{try{$.send(JSON.stringify(V))}catch(H){console.error(`[hub] failed to send websocket frame: ${H instanceof Error?H.stack||H.message:String(H)}`)}},X=(V)=>{J({kind:"event",envelope:V})},Y=async(V)=>{try{let H=JSON.parse(V.data);switch(H.kind){case"command":{let B=performance.now(),G=!1,K=E3(H);m("info","command.start",K);let F=setTimeout(()=>{if(G)return;m("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-B)})},pb),A=this.transport.command(H.envelope);A.then((q)=>{if(!G)return;m(q.ok?"warn":"error","command.late_end",{...K,elapsedMs:Math.round(performance.now()-B),ok:q.ok,errorCode:q.error?.code,errorMessage:q.error?.message})},(q)=>{if(!G)return;m("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-B),error:q})});let L=!1,f,D,U=rb(H.envelope.command,H.envelope.timeoutMs);try{D=U===null?await A:await Promise.race([A,new Promise((q)=>{f=setTimeout(()=>{L=!0,XF(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${H.envelope.command} did not complete within ${U}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:U}}),q(YF(H,"hub_command_timeout",`Hub command ${H.envelope.command} did not complete within ${U}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${H.envelope.requestId}.`))},U)})])}catch(q){if(clearTimeout(F),f)clearTimeout(f);throw q}if(G=L,clearTimeout(F),f)clearTimeout(f);let T=Math.round(performance.now()-B);if(L)m("error","command.timeout",{...K,durationMs:T,timeoutMs:U});else m(D.ok?"info":"warn","command.end",{...K,durationMs:T,ok:D.ok,errorCode:D.error?.code,errorMessage:D.error?.message});if(H.envelope.command==="client.register"&&D.ok){let z=(H.envelope.payload??{}).clientId?.trim()||H.envelope.clientId?.trim();if(z)Q.add(z)}else if(H.envelope.command==="client.unregister"&&D.ok){let q=H.envelope.clientId?.trim();if(q)Q.delete(q)}J({kind:"reply",envelope:D});break}case"stream.subscribe":{let B=`${H.clientId}:${H.sessionId??"*"}`;if(Z.has(B))break;let G=await this.transport.subscribe(H.clientId,X,{sessionId:H.sessionId});Z.set(B,G);break}case"stream.unsubscribe":{let B=`${H.clientId}:${H.sessionId??"*"}`;Z.get(B)?.(),Z.delete(B);break}case"reply":case"event":break}}catch(H){let B=typeof V.data==="string"?ib(V.data):void 0;if(!B||B.kind!=="command"){m("error","rejected malformed websocket frame",{error:H});return}m("error","command.error",{...E3(B),error:H}),XF(this.telemetry,{component:"core",operation:"hub.websocket_command",error:H,severity:"error",handled:!0,context:E3(B)}),J({kind:"reply",envelope:YF(B,"command_failed",H instanceof Error?H.message:"Unknown hub error")})}},j=()=>{if(W)return;W=!0;for(let V of Z.values())V();Z.clear();for(let V of Q)this.transport.command({version:"v1",command:"client.unregister",clientId:V});Q.clear(),$.removeEventListener("message",Y),$.removeEventListener("close",j)};return $.addEventListener("message",Y),$.addEventListener("close",j),j}}class w3{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}}function $y($){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((Z)=>Buffer.from(Z))).toString();return String($)}function Zy($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(W)=>{Q({data:$y(W)})});return}$.on("close",Q)},removeEventListener(){}}}function Qy($){try{$.write(`HTTP/1.1 400 Bad Request\r
728
728
  Connection: close\r
729
729
  Content-Length: 0\r
730
730
  \r
731
- `),$.end()}catch{$.destroy()}}function Qy($){try{$.write(`HTTP/1.1 401 Unauthorized\r
731
+ `),$.end()}catch{$.destroy()}}function Wy($){try{$.write(`HTTP/1.1 401 Unauthorized\r
732
732
  Connection: close\r
733
733
  Content-Length: 0\r
734
734
  \r
735
- `),$.end()}catch{$.destroy()}}function C3($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),W=Buffer.from(Z,"utf8");return Q.length===W.length&&ib(Q,W)}function BF($,Z){let Q=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,W=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",J=`Failed to start hub server on ${Z.host}:${Z.port}${Z.pathname}: ${W}`,X=Error(Q?`${J} (${Q})`:J);if(Q)$.code=Q,X.code=Q;if($ instanceof Error&&$.stack)X.stack=`${X.name}: ${X.message}
736
- Caused by: ${$.stack}`;return X}async function Wy($){return await new Promise((Z,Q)=>{let W=ab.createServer();W.once("error",Q),W.listen(0,$,()=>{let J=W.address();if(!J||typeof J==="string"){W.close(()=>Q(Error("Failed to resolve free port")));return}let X=J.port;W.close((Y)=>{if(Y){Q(Y);return}Z(X)})})})}function Jy($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var P3=new Map,GF="cline-hub-auth.",Xy=30000;function b3($){return Array.isArray($)?$.join(","):$??""}function KF($){return $===32||$===9}function FF($){let Z=b3($).trim(),Q="bearer";if(Z.length<=6||Z.slice(0,6).toLowerCase()!=="bearer"||!KF(Z.charCodeAt(6)))return null;let W=7;while(W<Z.length&&KF(Z.charCodeAt(W)))W+=1;return Z.slice(W).trim()||null}function Yy($){for(let Z of b3($).split(",")){let Q=Z.trim();if(Q.startsWith(GF))return Q.slice(GF.length).trim()||null}return null}function AF($){let Z=$.trim().toLowerCase();return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"||Z==="[::1]"}function jy($){let Z=b3($).trim();if(!Z)return!1;try{return AF(new S3(Z).hostname)}catch{return!1}}async function y3($){let Z=$.owner??x$(),Q=$.host??"127.0.0.1",W=$.pathname??"/hub",J=$.port??q5(),X=J===0?await Wy(Q):J,Y=X,j=L1(Q,X,W),V=OH(),H=TH(),B=new P9($);await B.start();let G=new N3(new w3(B),$.telemetry),K=new Set,F=new Date().toISOString(),A={protocolVersion:jF,minClientProtocolVersion:HF,maxClientProtocolVersion:VF,capabilities:sb,coreVersion:Q4.version,buildId:V,pid:process.pid,startedAt:F},L=new Set,f,D,U=async()=>{if(D)return D;return D=(async()=>{if(f)clearInterval(f),f=void 0;for(let _ of L)_.terminate?.();L.clear();for(let _ of K)_();if(K.clear(),await new Promise((_,M)=>{q.close((E)=>{if(E){M(E);return}_()})}),await new Promise((_,M)=>{T.close((E)=>{if(E){M(E);return}_()})}),await B.stop(),(await A0(Z.discoveryPath))?.url===j)await a0(Z.discoveryPath)})(),D},T=nb.createServer((z,_)=>{if((z.url??"/")==="/health"){let E=JSON.stringify({ok:!0,protocolVersion:A.protocolVersion,minClientProtocolVersion:A.minClientProtocolVersion,maxClientProtocolVersion:A.maxClientProtocolVersion,coreVersion:A.coreVersion,host:Q,port:Y,url:j});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(E);return}if((z.url??"/")==="/status"){if(!C3(FF(z.headers.authorization),H)){_.statusCode=401,_.end("Unauthorized");return}let E=JSON.stringify({hubId:B.getHubId(),...A,authToken:H,host:Q,port:Y,url:j,updatedAt:new Date().toISOString()});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(E);return}if((z.url??"/")==="/version"){_.statusCode=200,_.setHeader("content-type","application/json"),_.end(JSON.stringify(A));return}if(new S3(z.url??"/",`http://${Q}:${Y}`).pathname==="/shutdown"&&z.method==="POST"){if(!C3(FF(z.headers.authorization),H)){_.statusCode=401,_.end("Unauthorized");return}_.statusCode=202,_.setHeader("content-type","application/json"),_.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{U()});return}_.statusCode=404,_.end("Not found")}),q=new tb({noServer:!0});f=setInterval(()=>{for(let z of L){if(z.isAlive===!1){try{z.terminate?.()}catch{}L.delete(z);continue}z.isAlive=!1;try{z.ping?.()}catch{try{z.terminate?.()}catch{}L.delete(z)}}},Xy),T.on("upgrade",(z,_,M)=>{if(new S3(z.url??"/",`http://${Q}:${Y}`).pathname!==W){_.destroy();return}if(!(C3(Yy(z.headers["sec-websocket-protocol"]),H)||AF(Q)&&jy(z.headers.origin))){Qy(_);return}try{q.handleUpgrade(z,_,M,(c)=>{let n=c;n.isAlive=!0,n.on("pong",()=>{n.isAlive=!0}),L.add(n);let a=G.attach($y(c));K.add(a),c.once("close",()=>{L.delete(n),a(),K.delete(a)})})}catch{Zy(_)}});try{await new Promise((z,_)=>{T.once("error",(M)=>{_(BF(M,{host:Q,port:X,pathname:W}))}),T.listen(X,Q,()=>{let M=T.address();if(!M||typeof M==="string"){_(BF(Error("Failed to resolve hub port"),{host:Q,port:X,pathname:W}));return}Y=M.port,j=L1(Q,Y,W),z()})})}catch(z){if(f)clearInterval(f),f=void 0;throw await B.stop().catch(()=>{return}),z}return await qH(Z.discoveryPath,{hubId:B.getHubId(),protocolVersion:jF,minClientProtocolVersion:HF,maxClientProtocolVersion:VF,capabilities:[...A.capabilities],coreVersion:Q4.version,buildId:V,authToken:H,host:Q,port:Y,url:j,pid:process.pid,startedAt:F,updatedAt:F}),{host:Q,port:Y,url:j,authToken:H,close:U}}async function fF($){let Z=$.owner??x$(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=$.host??"127.0.0.1",J=$.port??q5(),X=$.pathname??"/hub",Y=L1(W,J,X),j=Z.discoveryPath,V=(B)=>{if(!Q)k2(B.url,B.authToken);return B},H=P3.get(j);if(H){let B=await H;if(B.url===Y)return V({server:B,url:B.url,authToken:B.authToken,action:"reuse"})}return await MH(Z.discoveryPath,async()=>{let B=await A0(Z.discoveryPath);if(B?.url&&(B.url===Y||$.allowPortFallback===!0)){let F=await g$(B.url,{authToken:B.authToken});if(F?.url&&ob(F).compatible&&await o1(F.url,{authToken:B.authToken}))return V({url:F.url,authToken:B.authToken,action:"reuse"})}if(B?.url)await a0(Z.discoveryPath);let K=async(F)=>{let A=y3({...F,owner:Z});P3.set(j,A);try{let L=await A;return V({server:L,url:L.url,authToken:L.authToken,action:"started"})}catch(L){throw P3.delete(j),L}};try{return await K($)}catch(F){if(!$.allowPortFallback||!Jy(F))throw F;return await K({...$,port:0})}})}function DF(){return UF()==="production"?s1():_1()}function Vy($){return UF()!=="production"&&!$}async function Ve($){let Z=a1({host:$.host,port:$.port,pathname:$.pathname});return await y3({...$,...Z,owner:DF()})}async function He($){let Z=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=a1({host:$.host,port:$.port,pathname:$.pathname});return await fF({...$,...Q,allowPortFallback:$.allowPortFallback??Vy(Z),owner:DF()})}S9();import{buildRemoteConfigSessionBlobUploadMetadata as _F,clearRemoteConfigSessionBlobUpload as Hy,createClineTelemetryServiceConfig as By,createSessionId as Gy,createRemoteConfigSessionMessagesArtifactUploader as Ky,prepareRemoteConfigRuntime as Fy,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as zF,readRemoteConfigSessionBlobUploadMetadata as Ay,registerRemoteConfigSessionBlobUpload as TF}from"@cline/shared";function fy($,Z){let Q=$.telemetry||Z.telemetryService?{...Z.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return s$(By(Q)).telemetry}function Uy(){let $=Ky();return{async uploadMessagesFile(Z){await $.uploadMessagesFile(Z)}}}async function Dy($){let Z=await Fy($),Q=fy(Z,$),W=[Z.pluginDefinition],J=Z.claims?.subject,X=_F(Z.bundle?.remoteConfig,J),Y;return{prepared:Z,extensions:W,telemetry:Q,applyToStartSessionInput(j){let V=j.config.extensions??[],H=j.config.telemetry,B=X?j.config.sessionId?.trim()||Gy():j.config.sessionId;if(B&&X)Y=B;let G=B&&X?TF(B,Z.bundle?.remoteConfig,J):void 0,K=G?{...j.sessionMetadata??{},[zF]:G}:j.sessionMetadata;return{...j,...K?{sessionMetadata:K}:{},config:{...j.config,...B?{sessionId:B}:{},extensions:[...V,...W],telemetry:Q??H}}},async dispose(){if(Y)Hy(Y)}}}import{mkdir as Ly,readFile as _y,unlink as zy,writeFile as Ty}from"node:fs/promises";import{join as OF}from"node:path";function Oy($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function qy($){return new Promise((Z)=>setTimeout(Z,$))}async function h3($){try{await zy($)}catch{}}async function My($,Z={}){let Q=Z.approvalDir?.trim(),W=Z.sessionId?.trim();if(!Q||!W)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await Ly(Q,{recursive:!0});let J=Oy(`${$.toolCallId}`),X=OF(Q,`${W}.request.${J}.json`),Y=OF(Q,`${W}.decision.${J}.json`),j=Z.nowIso??(()=>new Date().toISOString());await Ty(X,`${JSON.stringify({requestId:J,sessionId:W,createdAt:j(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
737
- `,"utf8");let V=Z.timeoutMs??300000,H=Z.pollIntervalMs??200,B=Date.now();while(Date.now()-B<V){try{let G=await _y(Y,"utf8"),K=JSON.parse(G),F={approved:K.approved===!0,reason:typeof K.reason==="string"?K.reason:void 0};return await Promise.all([h3(Y),h3(X)]),F}catch{}await qy(H)}return await h3(X),{approved:!1,reason:"Tool approval request timed out"}}r0();function Ry($){let Z=($??"stdio").trim();if(Z==="http"||Z==="streamable-http")return"streamableHttp";if(Z==="stdio"||Z==="sse"||Z==="streamableHttp")return Z;throw Error(`Unsupported MCP transport "${Z}". Expected stdio, sse, http, streamable-http, or streamableHttp.`)}function Ey($){let Z;try{Z=new URL($)}catch{throw Error(`Invalid MCP server URL: ${$}`)}if(Z.protocol!=="http:"&&Z.protocol!=="https:")throw Error(`Invalid MCP server URL: ${$} (only http and https are supported)`)}function Ny($){let Z=$.indexOf(":");if(Z<=0)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);let Q=$.slice(0,Z).trim(),W=$.slice(Z+1).trim();if(!Q||!W)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);if(!/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(Q))throw Error(`Invalid MCP header name "${Q}".`);return[Q,W]}function wy($){let Z=$.indexOf("<");return Z>=0&&$.indexOf(">",Z+1)>Z+1}function qF($){let Z=[...$.headers??[]],Q=[],W=$.transport,J=$.targetArgs??[];for(let X=0;X<J.length;X++){let Y=J[X];if($.parseTransport&&Y==="--transport"){let j=J[X+1];if(!j)throw Error("--transport requires a value");W=j,X++;continue}if($.parseTransport&&Y?.startsWith("--transport=")){W=Y.slice(12);continue}if(Y==="--header"){let j=J[X+1];if(!j)throw Error("--header requires a value");Z.push(j),X++;continue}if(Y?.startsWith("--header=")){Z.push(Y.slice(9));continue}Q.push(Y)}return{headers:Z,targetArgs:Q,transport:W}}function Cy($){if($.length===0)return{warnings:[]};let Z={},Q=[];for(let W of $){let[J,X]=Ny(W);if(Z[J]=X,wy(X))Q.push(`Header "${J}" looks like it contains a placeholder. Update it in MCP settings before using this server.`)}return{headers:Z,warnings:Q}}function MF($){let Z=$.name.trim();if(!Z)throw Error("MCP server name is required");let{headers:Q,targetArgs:W,transport:J}=qF({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),X=Ry(J),{headers:Y,warnings:j}=Cy(Q);if(X==="stdio"){if(Q.length>0)throw Error("Stdio MCP installs do not support request headers.");let[H,...B]=W;if(!H?.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:Z,transport:{type:X,command:H,args:B.length>0?B:void 0},warnings:j}}if(W.length!==1)throw Error("Remote MCP install requires exactly one URL argument after the server name.");let V=W[0]?.trim()??"";return Ey(V),{name:Z,transport:Y?{type:X,url:V,headers:Y}:{type:X,url:V},warnings:j}}function k3($){let[Z,...Q]=$;if(!Z)throw Error("Marketplace MCP install args must start with a server name.");return{name:Z,...qF({parseTransport:!0,targetArgs:Q})}}function Py($,Z,Q){U1(Q,(W)=>{let J=W.mcpServers,X=J&&typeof J==="object"&&!Array.isArray(J)?{...J}:{};X[$]={transport:Z},W.mcpServers=X})}function Sy($){let{name:Z,transport:Q,warnings:W}=MF($);return Py(Z,Q,$.settingsPath??Z0()),{name:Z,status:"installed",transport:Q,warnings:W}}import{spawn as Hh}from"node:child_process";import{existsSync as bF,rmSync as Bh}from"node:fs";import{homedir as Gh,platform as Kh}from"node:os";import{dirname as Fh,join as SF}from"node:path";import{resolveClineDir as Ah,resolveMcpSettingsPath as fh}from"@cline/shared/storage";r0();import{existsSync as o2,readdirSync as cy,readFileSync as uy,rmdirSync as dy,rmSync as ly,statSync as py}from"node:fs";import{basename as l0,dirname as B$,extname as ry,isAbsolute as iy,join as R1,relative as ny,resolve as s2,sep as c3}from"node:path";import{discoverPluginModulePaths as ay,resolvePluginConfigSearchPaths as sy}from"@cline/shared/storage";import{existsSync as by,mkdirSync as yy,readFileSync as hy,writeFileSync as ky}from"node:fs";import{dirname as EF,isAbsolute as Iy,relative as xy,resolve as RF}from"node:path";function e$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function b9($,Z){let Q=xy(RF($),RF(Z));return Q===""||!Q.startsWith("..")&&!Iy(Q)}function I3($){if(!by($))return{mcpServers:{}};try{let Z=JSON.parse(hy($,"utf8"));if(e$(Z))return Z}catch(Z){throw Error(`Invalid MCP settings at "${$}": ${Z instanceof Error?Z.message:String(Z)}`)}throw Error(`Invalid MCP settings at "${$}": expected an object`)}function x3($){if(e$($.mcpServers))return{...$.mcpServers};return{}}function g3($,Z,Q){yy(EF($),{recursive:!0}),ky($,`${JSON.stringify({...Z,mcpServers:Q},null,2)}
738
- `,"utf8")}function NF($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))]}}function h9($){if(!e$($))return;let Z=$.metadata;return e$(Z)?Z:void 0}function y9($,Z){let Q=h9($);if(!Q||Q.source!=="plugin")return!1;let W=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,J=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&W===Z.pluginName){if(!Z.pluginPath||J===Z.pluginPath)return!0}if(J&&Z.pluginPath&&(J===Z.pluginPath||b9(Z.pluginPath,J)||b9(J,Z.pluginPath)))return!0;if(W&&Z.pluginNames?.some((X)=>X===W))return!0;if(J&&Z.pluginPaths?.some((X)=>J===X||b9(X,J)||b9(J,X)))return!0;return!1}function gy($){let Z=e$($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:EF($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function my($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await F2({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],W=[],J=(Z.failures??[]).map((X)=>({pluginPath:X.pluginPath,pluginName:X.pluginName,message:X.message}));for(let X of Z.extensions??[]){let Y=X.__clinePluginPath;if(!Y)continue;if(!X.setup){Q.push({pluginName:X.name,pluginPath:Y});continue}let j=[],V={registerTool:(H)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(H)=>{if(!X.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');j.push(H)}};try{await X.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(H){J.push({pluginPath:Y,pluginName:X.name,message:H instanceof Error?H.message:String(H)});continue}Q.push({pluginName:X.name,pluginPath:Y});for(let H of j)W.push({pluginName:X.name,pluginPath:Y,server:{...H,metadata:{...H.metadata??{},source:"plugin",pluginName:X.name,pluginPath:Y}}})}return{plugins:Q,servers:W,failures:J}}finally{await Z.shutdown().catch(()=>{})}}async function m3($){let Z=$.settingsPath??Z0(),Q={mutations:[],failures:[]},W;try{W=await my($)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)});return Q}Q.failures.push(...W.failures);let J;try{J=I3(Z)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)});return Q}let X=x3(J),Y=new Map,j=new Map;for(let H of W.plugins)Y.set(H.pluginPath,new Set),j.set(H.pluginPath,H.pluginName);let V=W7(W.servers.map((H)=>({server:H.server,owner:H,ownerLabel:H.pluginName})));for(let H of V){let B=H.owner;if(!Y.has(B.pluginPath))Y.set(B.pluginPath,new Set);if(H.name)Y.get(B.pluginPath)?.add(H.name);if(!H.registration){Q.mutations.push({name:H.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:"skipped",reason:H.loadError??"invalid MCP server registration"});continue}let G=X[H.registration.name];if(G!==void 0){if(!y9(G,{pluginName:B.pluginName,pluginPath:B.pluginPath})){Q.mutations.push({name:H.registration.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}X[H.registration.name]=gy({registration:H.registration,pluginName:B.pluginName,pluginPath:B.pluginPath,existing:e$(G)?G:void 0}),Q.mutations.push({name:H.registration.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:G===void 0?"created":"updated"})}for(let[H,B]of Object.entries(X)){let G=h9(B),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=Y.get(K);if(F&&y9(B,{pluginPath:K})&&!F.has(H))delete X[H],Q.mutations.push({name:H,pluginName:typeof G?.pluginName==="string"?G.pluginName:j.get(K)??"plugin",pluginPath:K,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((H)=>H.action!=="skipped"))try{g3(Z,J,X)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)})}return Q}function vy($){let Z=$.settingsPath??Z0(),Q;try{Q=I3(Z)}catch{return[]}let W=x3(Q),J=NF($),X=[];for(let[Y,j]of Object.entries(W)){if(!e$(j)||!y9(j,J))continue;let V=h9(j);W[Y]={...j,disabled:!0},X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(X.length>0)g3(Z,Q,W);return X}function v3($){let Z=$.settingsPath??Z0(),Q;try{Q=I3(Z)}catch{return[]}let W=x3(Q),J=NF($),X=[];for(let[Y,j]of Object.entries(W)){if(!y9(j,J))continue;let V=h9(j);delete W[Y],X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(X.length>0)g3(Z,Q,W);return X}var r3="_installed",oy="package",ty=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function u3($){return $.trim().toLowerCase()}function o0($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function ey($){return $.replace(/-[0-9a-f]{12}$/i,"")}function d3($){let Z=ry($);return Z?$.slice(0,-Z.length):$}function l3($){if(!o2($))return;try{let Z=JSON.parse(uy($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function i3($,Z){let Q=ny(Z,$);return Q===""||!Q.startsWith("..")&&!iy(Q)}function wF($){let Q=s2($).split(c3),W=Q.lastIndexOf(r3);if(W<0)return;let J=Q[W+1];if(!J)return;let X=ty.get(J)??1,Y=W+2+X;if(Q.length<Y)return;let j=Q.slice(0,Y).join(c3)||c3;return o2(j)?j:void 0}function k9($){try{return cy($,{withFileTypes:!0})}catch{return[]}}function $h($){let Z=R1($,r3);if(!o2(Z))return[];let Q=[];for(let W of k9(Z)){if(!W.isDirectory())continue;let J=R1(Z,W.name);if(W.name==="git"){for(let X of k9(J)){if(!X.isDirectory())continue;let Y=R1(J,X.name);for(let j of k9(Y))if(j.isDirectory())Q.push(R1(Y,j.name))}continue}for(let X of k9(J))if(X.isDirectory())Q.push(R1(J,X.name))}return Q.sort((W,J)=>W.localeCompare(J))}function CF($){try{return ay($)}catch{return[]}}function p3($){let Z=CF($),Q=new Set;o0(Q,l0($)),o0(Q,ey(l0($))),o0(Q,l3(R1($,"package.json"))),o0(Q,l3(R1($,oy,"package.json")));for(let W of Z)o0(Q,l0(W)),o0(Q,d3(l0(W)));return{installPath:$,entryPaths:Z,names:[...Q].sort((W,J)=>W.localeCompare(J)),installed:!0}}function Zh($,Z){let Q=s2($),W=Z.find((Y)=>i3(Q,Y));if(!W)return;let J=B$(Q);while(J!==W&&J!==B$(J)){if(o2(R1(J,"package.json")))return J;J=B$(J)}let X=l0(Q);if((X==="index.ts"||X==="index.js")&&B$(Q)!==W)return B$(Q);return Q}function PF($,Z){let Q=Zh($,Z);if(!Q)return;let W=new Set;return o0(W,l0($)),o0(W,d3(l0($))),o0(W,l0(Q)),o0(W,d3(l0(Q))),o0(W,l3(R1(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...W].sort((J,X)=>J.localeCompare(X)),installed:!1}}function Qh($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return sy(Z).filter((Q)=>o2(Q))}function Wh($){let Z=new Map;for(let Q of $){for(let W of $h(Q))Z.set(W,p3(W));for(let W of CF(Q)){let J=wF(W);if(J){if(!Z.has(J))Z.set(J,p3(J));continue}let X=PF(W,$);if(X)Z.set(X.installPath,X)}}return[...Z.values()].sort((Q,W)=>Q.installPath.localeCompare(W.installPath))}function Jh($,Z){let Q=u3(Z);if(!Q)return!1;if(u3($.installPath)===Q)return!0;return $.names.some((W)=>u3(W)===Q)}function Xh($,Z,Q){let W=s2($);for(let X of Z){if(i3(W,X.installPath))return X;if(X.entryPaths.some((Y)=>s2(Y)===W))return X}let J=wF(W);if(J)return p3(J);if(o2(W))return PF(W,Q);return}function Yh($){let Z=D0(),Q=Z.disabledPlugins;if(!Q?.length)return;let W=Q.filter((J)=>{let X=s2(J);if(i3(X,$.installPath))return!1;return!$.entryPaths.some((Y)=>s2(Y)===X)});if(W.length===Q.length)return;G1({...Z,disabledPlugins:W})}function jh($){let Z=B$($);while(Z!==B$(Z)&&l0(Z)!==r3){try{dy(Z)}catch{return}Z=B$(Z)}}function Vh($){return`${$.names[0]??l0($.installPath)} at ${$.installPath}`}async function n3($){let Z=Qh($),Q=Wh(Z),W=$.path?.trim(),J=$.name?.trim(),X;if(W){if(X=Xh(W,Q,Z),!X)throw Error(`No plugin found at ${W}`)}else{if(!J)throw Error("plugin uninstall requires a plugin name");let j=Q.filter((V)=>Jh(V,J));if(j.length===0)throw Error(`No plugin found matching "${J}"`);if(j.length>1)throw Error(`Multiple plugins match "${J}": ${j.map(Vh).join(", ")}`);X=j[0]}let Y=py(X.installPath,{throwIfNoEntry:!1});if(!Y)throw Error(`Plugin install path does not exist: ${X.installPath}`);if(v3({pluginPaths:[X.installPath,...X.entryPaths],pluginNames:X.names}),ly(X.installPath,{recursive:Y.isDirectory(),force:!0}),Yh(X),X.installed)jh(X.installPath);return{name:J||X.names[0]||l0(X.installPath),installPath:X.installPath,removedPaths:[X.installPath],entryPaths:X.entryPaths}}var a3=120000,k4=12000,Uh=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,Dh=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,Lh=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,_h=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function s3($){return $.install?.args??[]}function zh(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||Gh()}function Th($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function Oh($){return Th($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function yF($){return $.split(/\r?\n/).map((Z)=>{if(!Uh.test(Z))return Z;return Z.replace(Dh,"$1[redacted]").replace(Lh,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(_h,"$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(`
739
- `).slice(-k4)}function qh($){let Z=yF([$.stdout,$.stderr].filter(Boolean).join(`
740
- `)).trim();return Z.length>0?Z:void 0}function Mh($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function Rh($,Z){return[$,...Z].map((Q)=>Mh(yF(Q).trim())).join(" ")}var Eh=async($,Z)=>new Promise((Q,W)=>{let J=!1,X=!1,Y=Hh($,Z,{env:process.env,shell:Kh()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),j="",V="",H=setTimeout(()=>{if(!J)Y.kill("SIGKILL")},a3+5000),B=setTimeout(()=>{X=!0,V+=`
741
- Timed out after ${a3/1000}s.`,Y.kill("SIGTERM")},a3);H.unref?.(),B.unref?.(),Y.stdout?.on("data",(G)=>{if(j+=String(G),j.length>k4*2)j=j.slice(-k4)}),Y.stderr?.on("data",(G)=>{if(V+=String(G),V.length>k4*2)V=V.slice(-k4)}),Y.once("error",(G)=>{clearTimeout(B),clearTimeout(H),W(G)}),Y.once("close",(G,K)=>{J=!0,clearTimeout(B),clearTimeout(H),Q({exitCode:X?124:G??(K==="SIGINT"?130:1),stdout:j,stderr:V})})});function Nh($){return`${$.type}:${$.id}`}function o3($){let Z=s3($);if(Z.length===0)throw Error("Marketplace install args are required.");return k3(Z).name}function hF($,Z={}){let Q=o3($),W=Z.mcpSettingsPath??fh(),J=U1(W,(X)=>{let Y=X.mcpServers&&typeof X.mcpServers==="object"&&!Array.isArray(X.mcpServers)?X.mcpServers:{},j=Object.hasOwn(Y,Q);if(j)delete Y[Q];return X.mcpServers=Y,j});return{name:Q,deleted:J}}function t3($){let Z=new Set,Q=(J)=>{let X=Oh(J??"");if(X&&X!=="skill")Z.add(X)};Q($.id),Q($.name);let W=s3($);for(let J=0;J<W.length;J++){let X=W[J];if((X==="--skill"||X==="-s")&&W[J+1]){Q(W[J+1]),J++;continue}let Y=X.split("@").at(1);if(Y)Q(Y)}return[...Z]}function e3($){return[SF(Ah(),"skills",$,"SKILL.md"),SF(zh(),".agents","skills",$,"SKILL.md")].filter((Z,Q,W)=>W.indexOf(Z)===Q)}function $J($){if($.type!=="skill")return;return t3($).find((Z)=>e3(Z).some((Q)=>bF(Q)))}function kF($){return $J($)!==void 0}function wh($){let Z=[];if($.type!=="skill")return Z;for(let Q of t3($))for(let W of e3(Q)){if(!bF(W))continue;let J=Fh(W);Bh(J,{recursive:!0,force:!0}),Z.push(J)}return Z}async function IF($,Z={}){let Q=$J($);if(!Q)return{id:$.id,type:"skill",status:"uninstalled",message:`${$.name??$.id} is not installed.`};let W="npx",J=["-y","skills@latest","remove",Q,"-g","-y"],X=Rh(W,J),Y=Z.spawnCommand??Eh,j;try{j=await Y(W,J)}catch(B){throw Error(`Failed to start ${$.name??$.id} uninstall command:
735
+ `),$.end()}catch{$.destroy()}}function C3($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),W=Buffer.from(Z,"utf8");return Q.length===W.length&&nb(Q,W)}function BF($,Z){let Q=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,W=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",J=`Failed to start hub server on ${Z.host}:${Z.port}${Z.pathname}: ${W}`,X=Error(Q?`${J} (${Q})`:J);if(Q)$.code=Q,X.code=Q;if($ instanceof Error&&$.stack)X.stack=`${X.name}: ${X.message}
736
+ Caused by: ${$.stack}`;return X}async function Jy($){return await new Promise((Z,Q)=>{let W=sb.createServer();W.once("error",Q),W.listen(0,$,()=>{let J=W.address();if(!J||typeof J==="string"){W.close(()=>Q(Error("Failed to resolve free port")));return}let X=J.port;W.close((Y)=>{if(Y){Q(Y);return}Z(X)})})})}function Xy($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var P3=new Map,GF="cline-hub-auth.",Yy=30000;function b3($){return Array.isArray($)?$.join(","):$??""}function KF($){return $===32||$===9}function FF($){let Z=b3($).trim(),Q="bearer";if(Z.length<=6||Z.slice(0,6).toLowerCase()!=="bearer"||!KF(Z.charCodeAt(6)))return null;let W=7;while(W<Z.length&&KF(Z.charCodeAt(W)))W+=1;return Z.slice(W).trim()||null}function jy($){for(let Z of b3($).split(",")){let Q=Z.trim();if(Q.startsWith(GF))return Q.slice(GF.length).trim()||null}return null}function AF($){let Z=$.trim().toLowerCase();return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"||Z==="[::1]"}function Vy($){let Z=b3($).trim();if(!Z)return!1;try{return AF(new S3(Z).hostname)}catch{return!1}}async function y3($){let Z=$.owner??x$(),Q=$.host??"127.0.0.1",W=$.pathname??"/hub",J=$.port??q5(),X=J===0?await Jy(Q):J,Y=X,j=L1(Q,X,W),V=OH(),H=TH(),B=new P9($);await B.start();let G=new N3(new w3(B),$.telemetry),K=new Set,F=new Date().toISOString(),A={protocolVersion:jF,minClientProtocolVersion:HF,maxClientProtocolVersion:VF,capabilities:ob,coreVersion:Q4.version,buildId:V,pid:process.pid,startedAt:F},L=new Set,f,D,U=async()=>{if(D)return D;return D=(async()=>{if(f)clearInterval(f),f=void 0;for(let _ of L)_.terminate?.();L.clear();for(let _ of K)_();if(K.clear(),await new Promise((_,M)=>{q.close((E)=>{if(E){M(E);return}_()})}),await new Promise((_,M)=>{T.close((E)=>{if(E){M(E);return}_()})}),await B.stop(),(await A0(Z.discoveryPath))?.url===j)await a0(Z.discoveryPath)})(),D},T=ab.createServer((z,_)=>{if((z.url??"/")==="/health"){let E=JSON.stringify({ok:!0,protocolVersion:A.protocolVersion,minClientProtocolVersion:A.minClientProtocolVersion,maxClientProtocolVersion:A.maxClientProtocolVersion,coreVersion:A.coreVersion,host:Q,port:Y,url:j});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(E);return}if((z.url??"/")==="/status"){if(!C3(FF(z.headers.authorization),H)){_.statusCode=401,_.end("Unauthorized");return}let E=JSON.stringify({hubId:B.getHubId(),...A,authToken:H,host:Q,port:Y,url:j,updatedAt:new Date().toISOString()});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(E);return}if((z.url??"/")==="/version"){_.statusCode=200,_.setHeader("content-type","application/json"),_.end(JSON.stringify(A));return}if(new S3(z.url??"/",`http://${Q}:${Y}`).pathname==="/shutdown"&&z.method==="POST"){if(!C3(FF(z.headers.authorization),H)){_.statusCode=401,_.end("Unauthorized");return}_.statusCode=202,_.setHeader("content-type","application/json"),_.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{U()});return}_.statusCode=404,_.end("Not found")}),q=new eb({noServer:!0});f=setInterval(()=>{for(let z of L){if(z.isAlive===!1){try{z.terminate?.()}catch{}L.delete(z);continue}z.isAlive=!1;try{z.ping?.()}catch{try{z.terminate?.()}catch{}L.delete(z)}}},Yy),T.on("upgrade",(z,_,M)=>{if(new S3(z.url??"/",`http://${Q}:${Y}`).pathname!==W){_.destroy();return}if(!(C3(jy(z.headers["sec-websocket-protocol"]),H)||AF(Q)&&Vy(z.headers.origin))){Wy(_);return}try{q.handleUpgrade(z,_,M,(c)=>{let n=c;n.isAlive=!0,n.on("pong",()=>{n.isAlive=!0}),L.add(n);let a=G.attach(Zy(c));K.add(a),c.once("close",()=>{L.delete(n),a(),K.delete(a)})})}catch{Qy(_)}});try{await new Promise((z,_)=>{T.once("error",(M)=>{_(BF(M,{host:Q,port:X,pathname:W}))}),T.listen(X,Q,()=>{let M=T.address();if(!M||typeof M==="string"){_(BF(Error("Failed to resolve hub port"),{host:Q,port:X,pathname:W}));return}Y=M.port,j=L1(Q,Y,W),z()})})}catch(z){if(f)clearInterval(f),f=void 0;throw await B.stop().catch(()=>{return}),z}return await qH(Z.discoveryPath,{hubId:B.getHubId(),protocolVersion:jF,minClientProtocolVersion:HF,maxClientProtocolVersion:VF,capabilities:[...A.capabilities],coreVersion:Q4.version,buildId:V,authToken:H,host:Q,port:Y,url:j,pid:process.pid,startedAt:F,updatedAt:F}),{host:Q,port:Y,url:j,authToken:H,close:U}}async function fF($){let Z=$.owner??x$(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=$.host??"127.0.0.1",J=$.port??q5(),X=$.pathname??"/hub",Y=L1(W,J,X),j=Z.discoveryPath,V=(B)=>{if(!Q)k2(B.url,B.authToken);return B},H=P3.get(j);if(H){let B=await H;if(B.url===Y)return V({server:B,url:B.url,authToken:B.authToken,action:"reuse"})}return await MH(Z.discoveryPath,async()=>{let B=await A0(Z.discoveryPath);if(B?.url&&(B.url===Y||$.allowPortFallback===!0)){let F=await g$(B.url,{authToken:B.authToken});if(F?.url&&tb(F).compatible&&await o1(F.url,{authToken:B.authToken}))return V({url:F.url,authToken:B.authToken,action:"reuse"})}if(B?.url)await a0(Z.discoveryPath);let K=async(F)=>{let A=y3({...F,owner:Z});P3.set(j,A);try{let L=await A;return V({server:L,url:L.url,authToken:L.authToken,action:"started"})}catch(L){throw P3.delete(j),L}};try{return await K($)}catch(F){if(!$.allowPortFallback||!Xy(F))throw F;return await K({...$,port:0})}})}function DF(){return UF()==="production"?s1():_1()}function Hy($){return UF()!=="production"&&!$}async function He($){let Z=a1({host:$.host,port:$.port,pathname:$.pathname});return await y3({...$,...Z,owner:DF()})}async function Be($){let Z=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=a1({host:$.host,port:$.port,pathname:$.pathname});return await fF({...$,...Q,allowPortFallback:$.allowPortFallback??Hy(Z),owner:DF()})}S9();import{buildRemoteConfigSessionBlobUploadMetadata as _F,clearRemoteConfigSessionBlobUpload as By,createClineTelemetryServiceConfig as Gy,createSessionId as Ky,createRemoteConfigSessionMessagesArtifactUploader as Fy,prepareRemoteConfigRuntime as Ay,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as zF,readRemoteConfigSessionBlobUploadMetadata as fy,registerRemoteConfigSessionBlobUpload as TF}from"@cline/shared";function Uy($,Z){let Q=$.telemetry||Z.telemetryService?{...Z.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return s$(Gy(Q)).telemetry}function Dy(){let $=Fy();return{async uploadMessagesFile(Z){await $.uploadMessagesFile(Z)}}}async function Ly($){let Z=await Ay($),Q=Uy(Z,$),W=[Z.pluginDefinition],J=Z.claims?.subject,X=_F(Z.bundle?.remoteConfig,J),Y;return{prepared:Z,extensions:W,telemetry:Q,applyToStartSessionInput(j){let V=j.config.extensions??[],H=j.config.telemetry,B=X?j.config.sessionId?.trim()||Ky():j.config.sessionId;if(B&&X)Y=B;let G=B&&X?TF(B,Z.bundle?.remoteConfig,J):void 0,K=G?{...j.sessionMetadata??{},[zF]:G}:j.sessionMetadata;return{...j,...K?{sessionMetadata:K}:{},config:{...j.config,...B?{sessionId:B}:{},extensions:[...V,...W],telemetry:Q??H}}},async dispose(){if(Y)By(Y)}}}import{mkdir as _y,readFile as zy,unlink as Ty,writeFile as Oy}from"node:fs/promises";import{join as OF}from"node:path";function qy($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function My($){return new Promise((Z)=>setTimeout(Z,$))}async function h3($){try{await Ty($)}catch{}}async function Ry($,Z={}){let Q=Z.approvalDir?.trim(),W=Z.sessionId?.trim();if(!Q||!W)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await _y(Q,{recursive:!0});let J=qy(`${$.toolCallId}`),X=OF(Q,`${W}.request.${J}.json`),Y=OF(Q,`${W}.decision.${J}.json`),j=Z.nowIso??(()=>new Date().toISOString());await Oy(X,`${JSON.stringify({requestId:J,sessionId:W,createdAt:j(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
737
+ `,"utf8");let V=Z.timeoutMs??300000,H=Z.pollIntervalMs??200,B=Date.now();while(Date.now()-B<V){try{let G=await zy(Y,"utf8"),K=JSON.parse(G),F={approved:K.approved===!0,reason:typeof K.reason==="string"?K.reason:void 0};return await Promise.all([h3(Y),h3(X)]),F}catch{}await My(H)}return await h3(X),{approved:!1,reason:"Tool approval request timed out"}}r0();function Ey($){let Z=($??"stdio").trim();if(Z==="http"||Z==="streamable-http")return"streamableHttp";if(Z==="stdio"||Z==="sse"||Z==="streamableHttp")return Z;throw Error(`Unsupported MCP transport "${Z}". Expected stdio, sse, http, streamable-http, or streamableHttp.`)}function Ny($){let Z;try{Z=new URL($)}catch{throw Error(`Invalid MCP server URL: ${$}`)}if(Z.protocol!=="http:"&&Z.protocol!=="https:")throw Error(`Invalid MCP server URL: ${$} (only http and https are supported)`)}function wy($){let Z=$.indexOf(":");if(Z<=0)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);let Q=$.slice(0,Z).trim(),W=$.slice(Z+1).trim();if(!Q||!W)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);if(!/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(Q))throw Error(`Invalid MCP header name "${Q}".`);return[Q,W]}function Cy($){let Z=$.indexOf("<");return Z>=0&&$.indexOf(">",Z+1)>Z+1}function qF($){let Z=[...$.headers??[]],Q=[],W=$.transport,J=$.targetArgs??[];for(let X=0;X<J.length;X++){let Y=J[X];if($.parseTransport&&Y==="--transport"){let j=J[X+1];if(!j)throw Error("--transport requires a value");W=j,X++;continue}if($.parseTransport&&Y?.startsWith("--transport=")){W=Y.slice(12);continue}if(Y==="--header"){let j=J[X+1];if(!j)throw Error("--header requires a value");Z.push(j),X++;continue}if(Y?.startsWith("--header=")){Z.push(Y.slice(9));continue}Q.push(Y)}return{headers:Z,targetArgs:Q,transport:W}}function Py($){if($.length===0)return{warnings:[]};let Z={},Q=[];for(let W of $){let[J,X]=wy(W);if(Z[J]=X,Cy(X))Q.push(`Header "${J}" looks like it contains a placeholder. Update it in MCP settings before using this server.`)}return{headers:Z,warnings:Q}}function MF($){let Z=$.name.trim();if(!Z)throw Error("MCP server name is required");let{headers:Q,targetArgs:W,transport:J}=qF({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),X=Ey(J),{headers:Y,warnings:j}=Py(Q);if(X==="stdio"){if(Q.length>0)throw Error("Stdio MCP installs do not support request headers.");let[H,...B]=W;if(!H?.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:Z,transport:{type:X,command:H,args:B.length>0?B:void 0},warnings:j}}if(W.length!==1)throw Error("Remote MCP install requires exactly one URL argument after the server name.");let V=W[0]?.trim()??"";return Ny(V),{name:Z,transport:Y?{type:X,url:V,headers:Y}:{type:X,url:V},warnings:j}}function k3($){let[Z,...Q]=$;if(!Z)throw Error("Marketplace MCP install args must start with a server name.");return{name:Z,...qF({parseTransport:!0,targetArgs:Q})}}function Sy($,Z,Q){U1(Q,(W)=>{let J=W.mcpServers,X=J&&typeof J==="object"&&!Array.isArray(J)?{...J}:{};X[$]={transport:Z},W.mcpServers=X})}function by($){let{name:Z,transport:Q,warnings:W}=MF($);return Sy(Z,Q,$.settingsPath??Z0()),{name:Z,status:"installed",transport:Q,warnings:W}}import{spawn as Bh}from"node:child_process";import{existsSync as bF,rmSync as Gh}from"node:fs";import{homedir as Kh,platform as Fh}from"node:os";import{dirname as Ah,join as SF}from"node:path";import{resolveClineDir as fh,resolveMcpSettingsPath as Uh}from"@cline/shared/storage";r0();import{existsSync as o2,readdirSync as uy,readFileSync as dy,rmdirSync as ly,rmSync as py,statSync as ry}from"node:fs";import{basename as l0,dirname as B$,extname as iy,isAbsolute as ny,join as R1,relative as ay,resolve as s2,sep as c3}from"node:path";import{discoverPluginModulePaths as sy,resolvePluginConfigSearchPaths as oy}from"@cline/shared/storage";import{existsSync as yy,mkdirSync as hy,readFileSync as ky,writeFileSync as Iy}from"node:fs";import{dirname as EF,isAbsolute as xy,relative as gy,resolve as RF}from"node:path";function e$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function b9($,Z){let Q=gy(RF($),RF(Z));return Q===""||!Q.startsWith("..")&&!xy(Q)}function I3($){if(!yy($))return{mcpServers:{}};try{let Z=JSON.parse(ky($,"utf8"));if(e$(Z))return Z}catch(Z){throw Error(`Invalid MCP settings at "${$}": ${Z instanceof Error?Z.message:String(Z)}`)}throw Error(`Invalid MCP settings at "${$}": expected an object`)}function x3($){if(e$($.mcpServers))return{...$.mcpServers};return{}}function g3($,Z,Q){hy(EF($),{recursive:!0}),Iy($,`${JSON.stringify({...Z,mcpServers:Q},null,2)}
738
+ `,"utf8")}function NF($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))]}}function h9($){if(!e$($))return;let Z=$.metadata;return e$(Z)?Z:void 0}function y9($,Z){let Q=h9($);if(!Q||Q.source!=="plugin")return!1;let W=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,J=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&W===Z.pluginName){if(!Z.pluginPath||J===Z.pluginPath)return!0}if(J&&Z.pluginPath&&(J===Z.pluginPath||b9(Z.pluginPath,J)||b9(J,Z.pluginPath)))return!0;if(W&&Z.pluginNames?.some((X)=>X===W))return!0;if(J&&Z.pluginPaths?.some((X)=>J===X||b9(X,J)||b9(J,X)))return!0;return!1}function my($){let Z=e$($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:EF($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function vy($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await F2({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],W=[],J=(Z.failures??[]).map((X)=>({pluginPath:X.pluginPath,pluginName:X.pluginName,message:X.message}));for(let X of Z.extensions??[]){let Y=X.__clinePluginPath;if(!Y)continue;if(!X.setup){Q.push({pluginName:X.name,pluginPath:Y});continue}let j=[],V={registerTool:(H)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(H)=>{if(!X.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');j.push(H)}};try{await X.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(H){J.push({pluginPath:Y,pluginName:X.name,message:H instanceof Error?H.message:String(H)});continue}Q.push({pluginName:X.name,pluginPath:Y});for(let H of j)W.push({pluginName:X.name,pluginPath:Y,server:{...H,metadata:{...H.metadata??{},source:"plugin",pluginName:X.name,pluginPath:Y}}})}return{plugins:Q,servers:W,failures:J}}finally{await Z.shutdown().catch(()=>{})}}async function m3($){let Z=$.settingsPath??Z0(),Q={mutations:[],failures:[]},W;try{W=await vy($)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)});return Q}Q.failures.push(...W.failures);let J;try{J=I3(Z)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)});return Q}let X=x3(J),Y=new Map,j=new Map;for(let H of W.plugins)Y.set(H.pluginPath,new Set),j.set(H.pluginPath,H.pluginName);let V=W7(W.servers.map((H)=>({server:H.server,owner:H,ownerLabel:H.pluginName})));for(let H of V){let B=H.owner;if(!Y.has(B.pluginPath))Y.set(B.pluginPath,new Set);if(H.name)Y.get(B.pluginPath)?.add(H.name);if(!H.registration){Q.mutations.push({name:H.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:"skipped",reason:H.loadError??"invalid MCP server registration"});continue}let G=X[H.registration.name];if(G!==void 0){if(!y9(G,{pluginName:B.pluginName,pluginPath:B.pluginPath})){Q.mutations.push({name:H.registration.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}X[H.registration.name]=my({registration:H.registration,pluginName:B.pluginName,pluginPath:B.pluginPath,existing:e$(G)?G:void 0}),Q.mutations.push({name:H.registration.name,pluginName:B.pluginName,pluginPath:B.pluginPath,action:G===void 0?"created":"updated"})}for(let[H,B]of Object.entries(X)){let G=h9(B),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=Y.get(K);if(F&&y9(B,{pluginPath:K})&&!F.has(H))delete X[H],Q.mutations.push({name:H,pluginName:typeof G?.pluginName==="string"?G.pluginName:j.get(K)??"plugin",pluginPath:K,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((H)=>H.action!=="skipped"))try{g3(Z,J,X)}catch(H){for(let B of $.pluginPaths)Q.failures.push({pluginPath:B,message:H instanceof Error?H.message:String(H)})}return Q}function cy($){let Z=$.settingsPath??Z0(),Q;try{Q=I3(Z)}catch{return[]}let W=x3(Q),J=NF($),X=[];for(let[Y,j]of Object.entries(W)){if(!e$(j)||!y9(j,J))continue;let V=h9(j);W[Y]={...j,disabled:!0},X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(X.length>0)g3(Z,Q,W);return X}function v3($){let Z=$.settingsPath??Z0(),Q;try{Q=I3(Z)}catch{return[]}let W=x3(Q),J=NF($),X=[];for(let[Y,j]of Object.entries(W)){if(!y9(j,J))continue;let V=h9(j);delete W[Y],X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(X.length>0)g3(Z,Q,W);return X}var r3="_installed",ty="package",ey=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function u3($){return $.trim().toLowerCase()}function o0($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function $h($){return $.replace(/-[0-9a-f]{12}$/i,"")}function d3($){let Z=iy($);return Z?$.slice(0,-Z.length):$}function l3($){if(!o2($))return;try{let Z=JSON.parse(dy($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function i3($,Z){let Q=ay(Z,$);return Q===""||!Q.startsWith("..")&&!ny(Q)}function wF($){let Q=s2($).split(c3),W=Q.lastIndexOf(r3);if(W<0)return;let J=Q[W+1];if(!J)return;let X=ey.get(J)??1,Y=W+2+X;if(Q.length<Y)return;let j=Q.slice(0,Y).join(c3)||c3;return o2(j)?j:void 0}function k9($){try{return uy($,{withFileTypes:!0})}catch{return[]}}function Zh($){let Z=R1($,r3);if(!o2(Z))return[];let Q=[];for(let W of k9(Z)){if(!W.isDirectory())continue;let J=R1(Z,W.name);if(W.name==="git"){for(let X of k9(J)){if(!X.isDirectory())continue;let Y=R1(J,X.name);for(let j of k9(Y))if(j.isDirectory())Q.push(R1(Y,j.name))}continue}for(let X of k9(J))if(X.isDirectory())Q.push(R1(J,X.name))}return Q.sort((W,J)=>W.localeCompare(J))}function CF($){try{return sy($)}catch{return[]}}function p3($){let Z=CF($),Q=new Set;o0(Q,l0($)),o0(Q,$h(l0($))),o0(Q,l3(R1($,"package.json"))),o0(Q,l3(R1($,ty,"package.json")));for(let W of Z)o0(Q,l0(W)),o0(Q,d3(l0(W)));return{installPath:$,entryPaths:Z,names:[...Q].sort((W,J)=>W.localeCompare(J)),installed:!0}}function Qh($,Z){let Q=s2($),W=Z.find((Y)=>i3(Q,Y));if(!W)return;let J=B$(Q);while(J!==W&&J!==B$(J)){if(o2(R1(J,"package.json")))return J;J=B$(J)}let X=l0(Q);if((X==="index.ts"||X==="index.js")&&B$(Q)!==W)return B$(Q);return Q}function PF($,Z){let Q=Qh($,Z);if(!Q)return;let W=new Set;return o0(W,l0($)),o0(W,d3(l0($))),o0(W,l0(Q)),o0(W,d3(l0(Q))),o0(W,l3(R1(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...W].sort((J,X)=>J.localeCompare(X)),installed:!1}}function Wh($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return oy(Z).filter((Q)=>o2(Q))}function Jh($){let Z=new Map;for(let Q of $){for(let W of Zh(Q))Z.set(W,p3(W));for(let W of CF(Q)){let J=wF(W);if(J){if(!Z.has(J))Z.set(J,p3(J));continue}let X=PF(W,$);if(X)Z.set(X.installPath,X)}}return[...Z.values()].sort((Q,W)=>Q.installPath.localeCompare(W.installPath))}function Xh($,Z){let Q=u3(Z);if(!Q)return!1;if(u3($.installPath)===Q)return!0;return $.names.some((W)=>u3(W)===Q)}function Yh($,Z,Q){let W=s2($);for(let X of Z){if(i3(W,X.installPath))return X;if(X.entryPaths.some((Y)=>s2(Y)===W))return X}let J=wF(W);if(J)return p3(J);if(o2(W))return PF(W,Q);return}function jh($){let Z=D0(),Q=Z.disabledPlugins;if(!Q?.length)return;let W=Q.filter((J)=>{let X=s2(J);if(i3(X,$.installPath))return!1;return!$.entryPaths.some((Y)=>s2(Y)===X)});if(W.length===Q.length)return;G1({...Z,disabledPlugins:W})}function Vh($){let Z=B$($);while(Z!==B$(Z)&&l0(Z)!==r3){try{ly(Z)}catch{return}Z=B$(Z)}}function Hh($){return`${$.names[0]??l0($.installPath)} at ${$.installPath}`}async function n3($){let Z=Wh($),Q=Jh(Z),W=$.path?.trim(),J=$.name?.trim(),X;if(W){if(X=Yh(W,Q,Z),!X)throw Error(`No plugin found at ${W}`)}else{if(!J)throw Error("plugin uninstall requires a plugin name");let j=Q.filter((V)=>Xh(V,J));if(j.length===0)throw Error(`No plugin found matching "${J}"`);if(j.length>1)throw Error(`Multiple plugins match "${J}": ${j.map(Hh).join(", ")}`);X=j[0]}let Y=ry(X.installPath,{throwIfNoEntry:!1});if(!Y)throw Error(`Plugin install path does not exist: ${X.installPath}`);if(v3({pluginPaths:[X.installPath,...X.entryPaths],pluginNames:X.names}),py(X.installPath,{recursive:Y.isDirectory(),force:!0}),jh(X),X.installed)Vh(X.installPath);return{name:J||X.names[0]||l0(X.installPath),installPath:X.installPath,removedPaths:[X.installPath],entryPaths:X.entryPaths}}var a3=120000,k4=12000,Dh=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,Lh=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,_h=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,zh=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function s3($){return $.install?.args??[]}function Th(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||Kh()}function Oh($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function qh($){return Oh($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function yF($){return $.split(/\r?\n/).map((Z)=>{if(!Dh.test(Z))return Z;return Z.replace(Lh,"$1[redacted]").replace(_h,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(zh,"$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(`
739
+ `).slice(-k4)}function Mh($){let Z=yF([$.stdout,$.stderr].filter(Boolean).join(`
740
+ `)).trim();return Z.length>0?Z:void 0}function Rh($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function Eh($,Z){return[$,...Z].map((Q)=>Rh(yF(Q).trim())).join(" ")}var Nh=async($,Z)=>new Promise((Q,W)=>{let J=!1,X=!1,Y=Bh($,Z,{env:process.env,shell:Fh()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),j="",V="",H=setTimeout(()=>{if(!J)Y.kill("SIGKILL")},a3+5000),B=setTimeout(()=>{X=!0,V+=`
741
+ Timed out after ${a3/1000}s.`,Y.kill("SIGTERM")},a3);H.unref?.(),B.unref?.(),Y.stdout?.on("data",(G)=>{if(j+=String(G),j.length>k4*2)j=j.slice(-k4)}),Y.stderr?.on("data",(G)=>{if(V+=String(G),V.length>k4*2)V=V.slice(-k4)}),Y.once("error",(G)=>{clearTimeout(B),clearTimeout(H),W(G)}),Y.once("close",(G,K)=>{J=!0,clearTimeout(B),clearTimeout(H),Q({exitCode:X?124:G??(K==="SIGINT"?130:1),stdout:j,stderr:V})})});function wh($){return`${$.type}:${$.id}`}function o3($){let Z=s3($);if(Z.length===0)throw Error("Marketplace install args are required.");return k3(Z).name}function hF($,Z={}){let Q=o3($),W=Z.mcpSettingsPath??Uh(),J=U1(W,(X)=>{let Y=X.mcpServers&&typeof X.mcpServers==="object"&&!Array.isArray(X.mcpServers)?X.mcpServers:{},j=Object.hasOwn(Y,Q);if(j)delete Y[Q];return X.mcpServers=Y,j});return{name:Q,deleted:J}}function t3($){let Z=new Set,Q=(J)=>{let X=qh(J??"");if(X&&X!=="skill")Z.add(X)};Q($.id),Q($.name);let W=s3($);for(let J=0;J<W.length;J++){let X=W[J];if((X==="--skill"||X==="-s")&&W[J+1]){Q(W[J+1]),J++;continue}let Y=X.split("@").at(1);if(Y)Q(Y)}return[...Z]}function e3($){return[SF(fh(),"skills",$,"SKILL.md"),SF(Th(),".agents","skills",$,"SKILL.md")].filter((Z,Q,W)=>W.indexOf(Z)===Q)}function $J($){if($.type!=="skill")return;return t3($).find((Z)=>e3(Z).some((Q)=>bF(Q)))}function kF($){return $J($)!==void 0}function Ch($){let Z=[];if($.type!=="skill")return Z;for(let Q of t3($))for(let W of e3(Q)){if(!bF(W))continue;let J=Ah(W);Gh(J,{recursive:!0,force:!0}),Z.push(J)}return Z}async function IF($,Z={}){let Q=$J($);if(!Q)return{id:$.id,type:"skill",status:"uninstalled",message:`${$.name??$.id} is not installed.`};let W="npx",J=["-y","skills@latest","remove",Q,"-g","-y"],X=Eh(W,J),Y=Z.spawnCommand??Nh,j;try{j=await Y(W,J)}catch(B){throw Error(`Failed to start ${$.name??$.id} uninstall command:
742
742
  ${X}
743
- ${B instanceof Error?B.message:String(B)}`)}let V=qh(j);if(j.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${j.exitCode}.
743
+ ${B instanceof Error?B.message:String(B)}`)}let V=Mh(j);if(j.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${j.exitCode}.
744
744
  Command:
745
745
  ${X}${V?`
746
746
 
747
- ${V}`:""}`);let H=wh($);if(kF($))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,...H.map((B)=>`Removed: ${B}`)].filter(Boolean).join(`
747
+ ${V}`:""}`);let H=Ch($);if(kF($))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,...H.map((B)=>`Removed: ${B}`)].filter(Boolean).join(`
748
748
  `)||void 0}}async function xF($,Z={}){let[Q]=s3($),W=Q?.trim()||$.id;if(!W)throw Error("Plugin marketplace uninstalls require a plugin name.");let J=await n3({name:W,workspaceRoot:Z.workspaceRoot});return{id:$.id,type:"plugin",status:"uninstalled",message:`Uninstalled ${$.name??J.name??$.id}.`,output:[`Path: ${J.installPath}`,...J.removedPaths.map((X)=>`Removed: ${X}`)].join(`
749
- `)}}async function Ch($,Z={}){if($.type==="mcp"){let Q=o3($);if(Z.deleteMcpServer)await Z.deleteMcpServer(Q);else hF($,Z);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Q??$.id}.`}}if($.type==="skill")return IF($,Z);if($.type==="plugin")return xF($,Z);throw Error(`Unsupported marketplace entry type: ${$.type}`)}import{spawn as Ph}from"node:child_process";import{createHash as Sh}from"node:crypto";import{existsSync as J1,mkdirSync as WJ,readdirSync as bh,readFileSync as yh,renameSync as I9,rmSync as m9,statSync as JJ}from"node:fs";import{cp as QJ,mkdir as pF,writeFile as v9}from"node:fs/promises";import{homedir as gF}from"node:os";import{basename as N1,dirname as mF,extname as hh,join as r,relative as rF,resolve as G$,sep as kh}from"node:path";import{isPluginModulePath as g9,resolveClineDir as Ih,resolvePluginModuleEntries as xh}from"@cline/shared/storage";var t2="_installed",c9="package",gh="https://github.com/cline/plugins.git",vF=30000,x9=10485760,cF="@cline/",mh=["dependencies","devDependencies","optionalDependencies","peerDependencies"],vh={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function u9($){if($==="~")return gF();if($.startsWith("~/"))return r(gF(),$.slice(2));return $}function iF($){return $.split(kh).join("/")}function $2($){return Sh("sha256").update($).digest("hex").slice(0,12)}function ch($){let Z=0;while(Z<$.length&&$[Z]==="-")Z++;let Q=$.length;while(Q>Z&&$[Q-1]==="-")Q--;return $.slice(Z,Q)}function E1($){let Z="",Q=!1,W=$.startsWith("@")?$.slice(1):$;for(let X of W.slice(0,256)){if(X>="a"&&X<="z"||X>="A"&&X<="Z"||X>="0"&&X<="9"||X==="."||X==="_"||X==="-")Z+=X,Q=X==="-";else if(!Q)Z+="-",Q=!0;if(Z.length>=80)break}return ch(Z)||"plugin"}function nF($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function uh($){return $?.trim()||gh}function uF($){let Q=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Q?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Q[1]}}function dh($){if($.startsWith(".")||$.startsWith("/")||$==="~"||$.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test($))return!1;let[Z,...Q]=$.split("/");return!!Z&&Q.length>=2&&Z.includes(".")&&!Z.startsWith(".")&&!Z.endsWith(".")}function lh($){let Z=$.match(/^git@([^:]+):(.+)$/);if(Z){let Y=Z[2]??"",j=Y.indexOf("@");if(j<0)return{repo:$};return{repo:`git@${Z[1]}:${Y.slice(0,j)}`,ref:Y.slice(j+1)||void 0}}if($.includes("://"))try{let Y=new URL($),j=Y.pathname.replace(/^\/+/,""),V=j.indexOf("@");if(V<0)return{repo:$};return Y.pathname=`/${j.slice(0,V)}`,{repo:Y.toString().replace(/\/$/,""),ref:j.slice(V+1)||void 0}}catch{return{repo:$}}let Q=$.indexOf("/");if(Q<0)return{repo:$};let W=$.slice(0,Q),J=$.slice(Q+1),X=J.indexOf("@");if(X<0)return{repo:$};return{repo:`${W}/${J.slice(0,X)}`,ref:J.slice(X+1)||void 0}}function ph($){try{return decodeURIComponent($)}catch{return $}}function rh($){return N1(ph($))||"plugin"}function ih($){let Z=$.split("/").filter(Boolean);return Z.length>=5&&(Z[2]==="blob"||Z[2]==="raw")}function dF($){if(!/^https?:\/\//i.test($))return null;let Z;try{Z=new URL($)}catch{return null}let Q=Z.hostname.toLowerCase(),W=rh(Z.pathname),J=g9(W),X=(Q==="github.com"||Q==="www.github.com")&&ih(Z.pathname);if(Z.protocol!=="https:"){if(X||Q==="raw.githubusercontent.com"||J)throw Error(`Remote plugin file URLs must use https: ${$}`);return null}if(Q==="github.com"||Q==="www.github.com"){let Y=Z.pathname.split("/").filter(Boolean);if(!X)return null;if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:`https://raw.githubusercontent.com/${[Y[0],Y[1],...Y.slice(3)].join("/")}`,filename:W}}if(Q==="raw.githubusercontent.com"){if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:Z.toString(),filename:W}}if(!J)return null;return{type:"remote",url:Z.toString(),filename:W}}function lF($,Z={}){let Q=$.trim(),W=Q.startsWith("git:")&&!Q.startsWith("git://"),J=W?Q.slice(4).trim():Q;if(!Z.force&&!W&&!/^(https?|ssh|git):\/\//i.test(J))return null;let{repo:X,ref:Y}=lh(J),j="",V="";if(X.startsWith("git@")){let G=X.match(/^git@([^:]+):(.+)$/);j=G?.[1]??"",V=G?.[2]??""}else if(/^(https?|ssh|git):\/\//i.test(X)){let G=new URL(X);j=G.hostname,V=G.pathname.replace(/^\/+/,"")}else{let G=X.indexOf("/");if(G<0)return null;j=X.slice(0,G),V=X.slice(G+1)}let H=V.replace(/\.git$/,"").replace(/^\/+/,"");if(!j||!H||H.split("/").length<2)return null;return{type:"git",repo:X.startsWith("git@")||/^(https?|ssh|git):\/\//i.test(X)?X:`https://${X}`,ref:Y,host:j,path:H}}function aF($,Z){let Q=$.trim();if(!Q)throw Error("plugin install requires a source");if(Z==="npm"){let Y=Q.startsWith("npm:")?Q.slice(4).trim():Q,{name:j}=uF(Y);return{type:"npm",spec:Y,name:j}}if(Z==="git"){let Y=lF(Q,{force:!0});if(!Y)throw Error(`Invalid git plugin source: ${$}`);return Y}if(Z==="local")return{type:"local",path:$};if(Z==="remote"){let Y=dF(Q);if(!Y)throw Error(`Invalid remote plugin source: ${$}`);return Y}if(Q.startsWith("npm:")){let Y=Q.slice(4).trim(),{name:j}=uF(Y);return{type:"npm",spec:Y,name:j}}if(Q.startsWith(".")||Q.startsWith("/")||Q==="~"||Q.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test(Q))return{type:"local",path:$};let J=dF(Q);if(J)return J;let X=lF(Q);if(X)return X;if(nF(Q))return{type:"official",slug:Q};if(dh(Q))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 nh($){return $?r($,".cline","plugins"):r(Ih(),"plugins")}function ah($,Z,Q){if(Z.type==="npm")return r($,t2,"npm",`${E1(Z.name)}-${$2(Q)}`);if(Z.type==="git")return r($,t2,"git",E1(Z.host),`${E1(Z.path)}-${$2(Q)}`);if(Z.type==="remote")return r($,t2,"remote",`${E1(Z.filename)}-${$2(Q)}`);if(Z.type==="official")return r($,t2,"official",`${E1(Z.slug)}-${$2(Q)}`);return r($,t2,"local",`${E1(N1(u9(Z.path)))}-${$2(Q)}`)}function sh($,Z,Q){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:${Q}#plugins/${$.slug}`;return`local:${G$(Z,u9($.path))}`}function oh($,Z){if($.type==="npm")return $.name;if($.type==="git")return E1(N1($.path));if($.type==="remote")return E1(N1($.filename,hh($.filename)));if($.type==="official")return $.slug;return E1(N1(G$(Z,u9($.path))))}async function e2($,Z,Q={}){await new Promise((W,J)=>{let X=Ph($,Z,{cwd:Q.cwd,stdio:["ignore","ignore","pipe"],env:process.env,windowsHide:!0}),Y="";X.stderr.on("data",(j)=>{Y+=String(j)}),X.on("error",J),X.on("close",(j)=>{if(j===0){W();return}let V=Y.trim();J(Error(`${$} ${Z.join(" ")} failed with exit code ${j}${V?`: ${V}`:""}`))})})}function sF($){let Z=r($,"package.json");if(!J1(Z))return null;try{return JSON.parse(yh(Z,"utf8"))}catch{return null}}function th($){let Z=$?.cline?.plugins;if(!Array.isArray(Z))return[];return Z.flatMap((Q)=>{if(typeof Q==="string")return[Q];return Q.paths??[]})}async function eh($){let Z=r($,"package.json"),Q=sF($);if(!Q)return;let W=!1;for(let J of mh){let X=Q[J];if(!X||typeof X!=="object")continue;for(let Y of Object.keys(X)){if(!Y.startsWith(cF))continue;delete X[Y],delete Q.peerDependenciesMeta?.[Y],W=!0}if(Object.keys(X).length===0)delete Q[J]}if(Q.peerDependenciesMeta){for(let J of Object.keys(Q.peerDependenciesMeta)){if(!J.startsWith(cF))continue;delete Q.peerDependenciesMeta[J],W=!0}if(Object.keys(Q.peerDependenciesMeta).length===0)delete Q.peerDependenciesMeta}if(!W)return;await v9(Z,`${JSON.stringify(Q,null,2)}
750
- `,"utf8")}function $k($,Z){let Q=r($,"node_modules","@cline");if(!J1(Q))return;for(let W of tF(Q)){if(`@cline/${W.name}`===Z)continue;m9(r(Q,W.name),{recursive:!0,force:!0})}}function oF($){let Z=th(sF($)).map((X)=>G$($,X)).filter((X)=>J1(X)&&JJ(X).isFile()&&g9(X));if(Z.length>0)return Z;let Q=xh($);if(Q?.length)return Q;let W=[],J=[$];while(J.length>0){let X=J.pop();if(!X)continue;for(let Y of tF(X)){let j=r(X,Y.name);if(Y.name==="node_modules"||Y.name===".git")continue;if(Y.isDirectory()){J.push(j);continue}if(Y.isFile()&&!Y.name.startsWith(".")&&g9(j))W.push(j)}}return W.sort((X,Y)=>X.localeCompare(Y))}function tF($){try{return bh($,{withFileTypes:!0})}catch{return[]}}function Zk($,Z){let Q=oF(Z);if(Q.length===0)throw Error(`No plugin entry files found in ${Z}`);return Q.map((W)=>`./${iF(rF($,W))}`)}async function Qk($,Z,Q){let W=Zk($,Z);return await v9(r($,"package.json"),JSON.stringify({...vh,name:Q,cline:{plugins:[{paths:W}]}},null,2),"utf8"),W}async function Wk($,Z,Q){let W=r(Z,c9);return await pF(W,{recursive:!0}),await v9(r(W,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await e2(Q,["install",$.spec,"--prefix",W,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),$k(W,$.name),r(W,"node_modules",$.name)}async function XJ($,Z){if(!J1(r($,"package.json")))return;await eh($),await e2(Z,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function Jk($,Z,Q){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let W=r(Z,c9),J=["clone","--filter=blob:none"];if($.ref)J.push("--branch",$.ref);J.push("--",$.repo,W);try{await e2("git",J)}catch(X){if(!$.ref)throw X;await e2("git",["clone","--filter=blob:none","--",$.repo,W]),await e2("git",["checkout","--detach",$.ref],{cwd:W})}return await XJ(W,Q),W}async function Xk($,Z,Q,W){let J=r(Z,"repo");await e2("git",["clone","--filter=blob:none","--depth","1","--",W,J]);let X=r(J,"plugins",$.slug);if(!J1(X)||!JJ(X).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${W}`);let Y=r(Z,c9);return await QJ(X,Y,{recursive:!0,filter:(j)=>{let V=N1(j);return V!==".git"&&V!=="node_modules"}}),m9(J,{recursive:!0,force:!0}),await XJ(Y,Q),Y}function ZJ($){return Error(`Remote plugin file from ${$} exceeds the ${x9} byte limit`)}function Yk($){let Z=$.headers.get("content-length");if(!Z)return;let Q=Number(Z);if(!Number.isFinite(Q)||Q<0)return;return Q}async function jk($,Z){let Q=Yk($);if(Q!==void 0&&Q>x9)throw ZJ(Z);if(!$.body){let Y=Buffer.from(await $.text(),"utf8");if(Y.byteLength>x9)throw ZJ(Z);return Y}let W=$.body.getReader(),J=[],X=0;try{while(!0){let{done:Y,value:j}=await W.read();if(Y)break;let V=Buffer.from(j);if(X+=V.byteLength,X>x9)throw await W.cancel().catch(()=>{return}),ZJ(Z);J.push(V)}return Buffer.concat(J,X)}finally{W.releaseLock()}}async function Vk($,Z){let Q=new AbortController,W=setTimeout(()=>{Q.abort()},vF);try{let J=await fetch($.url,{signal:Q.signal});if(!J.ok){let Y=J.statusText?` ${J.statusText}`:"";throw Error(`Failed to download plugin file from ${$.url}: ${J.status}${Y}`)}let X=await jk(J,$.url);return WJ(Z,{recursive:!0}),await v9(r(Z,$.filename),X),Z}catch(J){if(J instanceof Error&&J.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${vF}ms`);throw J}finally{clearTimeout(W)}}async function Hk($,Z,Q,W){let J=G$(Q,u9($.path));if(!J1(J))throw Error(`Plugin source path does not exist: ${J}`);let X=JJ(J);if(X.isFile()){if(!g9(J))throw Error(`Plugin file must be .js or .ts: ${J}`);WJ(Z,{recursive:!0});let j=r(Z,N1(J));return await QJ(J,j),Z}if(!X.isDirectory())throw Error(`Plugin source must be a file or directory: ${J}`);let Y=r(Z,c9);return await QJ(J,Y,{recursive:!0,filter:(j)=>{let V=N1(j);return V!==".git"&&V!=="node_modules"}}),await XJ(Y,W),Y}function Bk($,Z){if(J1($)&&!Z)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function Gk($,Z,Q){if(WJ(mF(Z),{recursive:!0}),!J1(Z)){I9($,Z);return}if(!Q)throw Error(`Plugin is already installed at ${Z}. Use --force to replace it.`);let W=r(mF(Z),`.replace-${N1(Z)}-${Date.now()}-${process.pid}-${$2(`${Z}:${Math.random()}`)}`);I9(Z,W);try{I9($,Z)}catch(J){if(!J1(Z)&&J1(W))I9(W,Z);throw J}try{m9(W,{recursive:!0,force:!0})}catch{}}function Kk($){let Z=$.transport;if(Z.type==="stdio")return!1;return Z.headers!==void 0&&Object.keys(Z.headers).length>0}function Fk($){let Z=$.oauth?.tokens?.access_token;return typeof Z==="string"&&Z.trim().length>0}function Ak($){let Z=$.metadata;if(!Z||Z.source!=="plugin"||typeof Z.pluginName!=="string"||typeof Z.pluginPath!=="string")return;return{pluginName:Z.pluginName,pluginPath:Z.pluginPath}}function eF($){let Z=new Set($.pluginPaths.map((J)=>G$(J)));if(Z.size===0)return[];let Q;try{Q=$1({filePath:$.settingsPath??Z0()})}catch{return[]}let W=[];for(let J of Q){let X=Ak(J);if(!X||!Z.has(G$(X.pluginPath)))continue;let Y=J.transport.type;if(Y==="stdio")continue;if(Kk(J)||Fk(J))continue;W.push({name:J.name,pluginName:X.pluginName,pluginPath:X.pluginPath,transportType:Y,lastError:J.oauth?.lastError})}return W.sort((J,X)=>J.name.localeCompare(X.name))}async function fk($){let Z=$.source.trim(),Q=aF(Z,$.sourceType),W=$.cwd?.trim(),J=W?G$(W):process.cwd(),X=nh(W?J:void 0),Y=uh($.officialPluginsRepo),j=sh(Q,J,Y),V=ah(X,Q,j),H=oh(Q,J),B=r(X,t2,".tmp"),G=r(B,`${Date.now()}-${process.pid}-${$2(`${Z}:${Math.random()}`)}`),K=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;Bk(V,F),await pF(B,{recursive:!0});let A;try{if(Q.type==="npm")A=await Wk(Q,G,K);else if(Q.type==="git")A=await Jk(Q,G,K);else if(Q.type==="official")A=await Xk(Q,G,K,Y);else if(Q.type==="remote")A=await Vk(Q,G);else A=await Hk(Q,G,J,K);let L=(Q.type==="local"||Q.type==="remote")&&A===G?oF(G).map((U)=>`./${iF(rF(G,U))}`):await Qk(G,A,H);if(L.length===0)throw Error(`No plugin entry files found for ${Z}`);Gk(G,V,F);let f={source:Z,installPath:V,entryPaths:L.map((U)=>G$(V,U)),mcpSyncFailures:[],mcpOAuthCandidates:[]},D=await m3({pluginPaths:f.entryPaths,cwd:J,workspacePath:J});return f.mcpSyncFailures=D.failures,f.mcpOAuthCandidates=eF({pluginPaths:f.entryPaths}),f}catch(L){throw m9(G,{recursive:!0,force:!0}),L}}import*as M0 from"@cline/llms";var ZA="cline-pass";function Uk($){return $.apiKey??$.auth?.apiKey}function Dk($){return($.auth?.accessToken?.trim()??"").length>0}function QA($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function Lk($){let Z=$.split(/\s+/).filter(Boolean);if(Z.length===0)return"?";if(Z.length===1)return Z[0].slice(0,2).toUpperCase();return`${Z[0][0]}${Z[1][0]}`.toUpperCase()}function _k($){let Z=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let W of $)Q=Q*31+W.charCodeAt(0)>>>0;return Z[Q%Z.length]}function WA($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>UG(Z,Q))}async function zk($,Z){let Q=await M0.getModelsForProvider($),W=$===ZA;if(!Z&&!W)return Q;let J=await kZ($,{loadLatestOnInit:W,loadPrivateOnAuth:!0,failOnError:!1},Z);if($==="litellm"&&J?.knownModels)return J.knownModels;if(W&&J?.knownModels)return J.knownModels;return J?.knownModels?{...Q,...J.knownModels}:Q}function YJ($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function Tk($){if(!$?.length)return;return[...new Set($)]}function Ok($,Z){return Tk([...$??[],...Z??[]])}function qk($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function Mk($){if(!$||typeof $!=="object")return!1;let Z=$;return typeof Z.path==="string"&&Z.path.trim().length>0&&typeof Z.label==="string"&&Z.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(Z.type))}function Rk($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(Mk)}var d9={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},$A={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function Ek($){if(!$)return[d9];if($.source!=="system")return $.baseUrl?[d9,$A]:[d9];let Z=[];if($.env?.length)Z.push(d9);if($.baseUrl)Z.push($A);return Z}function Nk($,Z){return Z.split(".").reduce((Q,W)=>{if(!Q||typeof Q!=="object")return;return Q[W]},$)}function wk($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function Ck($,Z,Q){if(!$?.length)return;let W={};for(let J of $){let Y=wk(J.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:Nk(Z,J.path))??J.defaultValue;if(Y!==void 0)W[J.path]=Y}return W}function JA($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function jJ($,Z){let Q=Z?.includes("vision")??!1,W=Z?.includes("reasoning")??!1;return Object.fromEntries($.map((J)=>[J,{id:J,name:J,supportsVision:Q,supportsAttachments:Q,supportsReasoning:W}]))}async function XA($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await o4($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function YA($,Z){let Q=$.read(),W=!1;if(Q.providers[Z])delete Q.providers[Z],W=!0;if(Q.lastUsedProvider===Z)delete Q.lastUsedProvider,W=!0;if(W)$.write(Q);M0.unregisterProvider(Z)}async function Pk($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=Z.baseUrl.trim(),J=Z.apiKey?.trim()??"";if(!W&&!J){let A=r$($);if((await d2(A)).providers[Q]){let f=await VA($,{providerId:Q});return{providerId:Q,settingsPath:f.settingsPath,modelsPath:f.modelsPath,modelsCount:0}}return YA($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(M0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let X=Z.name.trim();if(!X)throw Error("name is required");if(!W)throw Error("baseUrl is required");let Y=YJ(Z.models),j=Z.modelsSourceUrl?.trim(),V=await XA({providerId:Q,explicitModels:Y,modelsSourceUrl:j,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let H=Z.defaultModelId?.trim()&&V.includes(Z.defaultModelId.trim())?Z.defaultModelId.trim():V[0],B=Z.capabilities?.length?[...new Set(Z.capabilities)]:void 0,G=JA(Z.headers);$.saveProviderSettings({provider:Q,apiKey:J||void 0,baseUrl:W,headers:G,timeout:Z.timeoutMs,model:H,protocol:Z.protocol,client:Z.client},{setLastUsed:!1});let K=r$($),F=await d2(K);return F.providers[Q]={provider:{name:X,baseUrl:W,defaultModelId:H,protocol:Z.protocol,client:Z.client,capabilities:B,modelsSourceUrl:j},models:jJ(V,B)},await Z9(K,F),T4(Q,F.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function jA($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=r$($),J=await d2(W),X=J.providers[Q];if(!X){let q=$.getProviderSettings(Q);if(!q)throw Error(`provider "${Q}" does not exist`);let z=Z.modelsSourceUrl?.trim(),_=YJ(Z.models)[0]??q.model?.trim();if(!_&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);X={provider:{name:Z.name?.trim()||QA(Q),baseUrl:Z.baseUrl?.trim()??q.baseUrl?.trim()??"",defaultModelId:_,protocol:q.protocol,client:q.client,capabilities:q.capabilities},models:_?jJ([_],q.capabilities):{}}}if(!X.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let Y=Z.name?.trim()??X.provider.name.trim();if(!Y)throw Error("name is required");let j=Z.baseUrl?.trim()??X.provider.baseUrl.trim();if(!j)throw Error("baseUrl is required");let V=Z.capabilities===void 0?X.provider.capabilities:Z.capabilities===null?void 0:[...new Set(Z.capabilities)],H=Z.protocol===void 0?X.provider.protocol:Z.protocol??void 0,B=Z.client===void 0?X.provider.client:Z.client??void 0,G=YJ(Z.models),K=Z.modelsSourceUrl===void 0?X.provider.modelsSourceUrl:Z.modelsSourceUrl?.trim()||void 0,F=Z.models!==void 0||Z.modelsSourceUrl!==void 0&&!!K,A=Object.keys(X.models??{}).map((q)=>q.trim()).filter(Boolean),L=await XA({providerId:Q,explicitModels:G,modelsSourceUrl:K,fallbackModelIds:A,shouldRecompute:F});if(L.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let f=Z.defaultModelId===void 0?X.provider.defaultModelId?.trim():Z.defaultModelId?.trim(),D=f&&L.includes(f)?f:L[0],T={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:j,model:D};if(H)T.protocol=H;else delete T.protocol;if(B)T.client=B;else delete T.client;if(Z.apiKey!==void 0){let q=Z.apiKey?.trim()??"";if(q)T.apiKey=q;else delete T.apiKey}if(Z.headers!==void 0){let q=JA(Z.headers);if(q)T.headers=q;else delete T.headers}if(Z.timeoutMs!==void 0)if(typeof Z.timeoutMs==="number")T.timeout=Z.timeoutMs;else delete T.timeout;return $.saveProviderSettings(T,{setLastUsed:!1}),J.providers[Q]={provider:{name:Y,baseUrl:j,defaultModelId:D,protocol:H,client:B,capabilities:V,modelsSourceUrl:K},models:jJ(L,V)},await Z9(W,J),T4(Q,J.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W,modelsCount:L.length}}async function VA($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=r$($),J=await d2(W);if(!J.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete J.providers[Q],await Z9(W,J),M0.unregisterProvider(Q),YA($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W}}async function Sk($,Z={}){let Q=$.read(),W=M0.getProviderIds(),J=await Promise.all(W.map(async(Y)=>{let[j,V]=await Promise.all([M0.getProvider(Y),M0.getModelsForProvider(Y)]),H=WA(V),B=Q.providers[Y]?.settings,G=j?.name??QA(Y),K=Ok(j?.capabilities,B?.capabilities),F=Rk(j?.metadata)??Ek(j);return{provider:{id:Y,name:G,models:H.length,color:_k(Y),letter:Lk(G),enabled:Boolean(B),apiKey:B?Uk(B):void 0,oauthAccessTokenPresent:B?Dk(B):void 0,baseUrl:B?.baseUrl??j?.baseUrl,defaultModelId:j?.defaultModelId,protocol:B?.protocol??j?.protocol,client:B?.client??j?.client,capabilities:K,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:F,configValues:Ck(F,B,j),modelList:H},rank:qk(j?.metadata)}}));J.sort((Y,j)=>{if(Y.rank!==j.rank)return Y.rank-j.rank;return Y.provider.name.localeCompare(j.provider.name)||Y.provider.id.localeCompare(j.provider.id)});let X=J.map((Y)=>Y.provider);if(Z.isClinePassEnabled!==!0)X=X.filter((Y)=>Y.id!==ZA);return{providers:X,settingsPath:$.getFilePath()}}async function bk($,Z){let Q=$.trim(),W=await zk(Q,Z),J=WA(W);return{providerId:Q,models:J}}function l9($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function HA($,Z){if(!l9(Z))return l9($)?{...$}:void 0;let Q=l9($)?{...$}:{};for(let[W,J]of Object.entries(Z)){if(J==null||J===""){delete Q[W];continue}if(l9(J)){let X=HA(Q[W],J);if(X&&Object.keys(X).length>0)Q[W]=X;else delete Q[W];continue}Q[W]=J}return Object.keys(Q).length>0?Q:void 0}function yk($,Z){let Q=Z.providerId.trim();if(Z.enabled===!1){let X=$.read();if(delete X.providers[Q],X.lastUsedProvider===Q)delete X.lastUsedProvider;return $.write(X),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let J={...$.getProviderSettings(Q)??{},provider:Q};for(let X of["apiKey","baseUrl","model","region"])if(Object.hasOwn(Z,X)&&typeof Z[X]==="string")if(Z[X].trim().length===0)delete J[X];else J[X]=Z[X];for(let X of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(Z,X))J[X]=Z[X];for(let X of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(Z,X)&&Z[X]!=null){let Y=HA(J[X],Z[X]);if(Y)J[X]=Y;else delete J[X]}return $.saveProviderSettings(J,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function hk($,Z){let Q=Z.trim(),W=$.getProviderSettings(Q),X=M0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,Y=W?.baseUrl?.trim()||X?.baseUrl?.trim(),j=t4(Y,X?.baseUrl,X?.modelsSourceUrl);if(!W||!X||!Y||!j)return{providerId:Q,refreshed:!1};let V=await jA($,{providerId:Q,name:X.name,baseUrl:Y,apiKey:W.apiKey,headers:W.headers??null,timeoutMs:W.timeout??null,modelsSourceUrl:j,protocol:W.protocol??X.protocol??null,client:W.client??X.client??null,capabilities:W.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:V.modelsCount}}function kk($){let Z=$.trim().toLowerCase(),Q=B0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function Ik($,Z,Q,W){let J=B0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let X=m4({onPrompt:async(Y)=>Y.defaultValue??"",openUrl:Q,onOpenUrlError:({error:Y})=>{throw Y instanceof Error?Y:Error(String(Y))}});return J.login({settings:Z,callbacks:X,telemetry:W})}function xk($,Z,Q,W,J){return X8({manager:$,providerId:Z,settings:Q,credentials:W,setLastUsed:J?.setLastUsed})}async function gk($,Z,Q,W){let J=m4({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return wZ($,Z,{callbacks:J,telemetry:W})}function mk($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}import*as p9 from"@cline/llms";var vk=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],ck={"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 uk($,Z){let Q={};for(let W of vk){let J=$[W],X=Z[W];if(J||X)Q[W]={...J,...X}}return Q}function dk($){let Z=ck[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:uk($.fields,Z.fields)}}var lk=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function pk($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return lk.has($)}function rk($){let Z=p9.normalizeProviderId($);if(J8(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=p9.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:Z,authMethod:"local",fields:{}};let W=Q?.provider.baseUrl,J={apiKey:{}};if(pk(Z,Q))J.baseUrl={defaultValue:W};return dk({providerId:Z,authMethod:"api-key",fields:J})}S9();G0();q9();import{appendFileSync as ik,existsSync as VJ,mkdirSync as nk,readFileSync as ak,renameSync as sk,unlinkSync as ok,writeFileSync as tk}from"node:fs";import{join as HJ}from"node:path";import{resolveTeamDataDir as ek}from"@cline/shared/storage";function $I($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class BA{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=$I($.teamName),Q=$.baseDir?.trim()||ek();this.dirPath=HJ(Q,Z),this.statePath=HJ(this.dirPath,"state.json"),this.taskHistoryPath=HJ(this.dirPath,"task-history.jsonl")}loadState(){if(!VJ(this.statePath))return;try{let $=ak(this.statePath,"utf8"),Z=JSON.parse($);if(Z.version!==1||!Z.teamState)return;for(let Q of Z.teammates??[])this.teammateSpecs.set(Q.agentId,Q);return zB(Z.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 Z={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Q=`${this.statePath}.tmp`;tk(Q,`${JSON.stringify(Z,null,2)}
751
- `,"utf8"),sk(Q,this.statePath)}appendTaskHistory($){let Z={};switch($.type){case"team_task_updated":Z=$.task;break;case"team_message":Z={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":Z={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":Z={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":Z={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":Z={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),ik(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:Z})}
752
- `,"utf8")}ensureDir(){if(!VJ(this.dirPath))nk(this.dirPath,{recursive:!0})}hasPersistableState($){let Z=$.exportState();if(this.teammateSpecs.size>0)return!0;if(Z.members.some((Q)=>Q.role==="teammate"))return!0;return Z.tasks.length>0||Z.mailbox.length>0||Z.missionLog.length>0}clearPersistedState(){if(VJ(this.statePath))ok(this.statePath)}}import{z as S}from"zod";var GA=S.object({workspaceRoot:S.string().min(1),cwd:S.string().optional(),provider:S.string().min(1),model:S.string().min(1),mode:S.enum(["act","plan"]).default("act"),apiKey:S.string(),systemPrompt:S.string().optional(),rules:S.string().optional(),maxIterations:S.number().int().positive().optional(),enableTools:S.boolean(),enableSpawn:S.boolean().optional(),enableTeams:S.boolean().optional(),autoApproveTools:S.boolean().optional(),missionStepInterval:S.number().int().positive().optional(),missionTimeIntervalMs:S.number().int().positive().optional()}),KA=S.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),FA=S.enum(["user","assistant","tool","system","status","error"]),AA=S.object({id:S.string().min(1),sessionId:S.string().nullable(),role:FA,content:S.string(),createdAt:S.number().int().nonnegative(),meta:S.object({stream:S.enum(["stdout","stderr"]).optional(),toolName:S.string().optional(),iteration:S.number().int().nonnegative().optional(),agentId:S.string().optional(),conversationId:S.string().optional(),hookEventName:S.string().optional(),inputTokens:S.number().int().nonnegative().optional(),outputTokens:S.number().int().nonnegative().optional(),checkpoint:S.object({ref:S.string(),createdAt:S.number().int().nonnegative(),runCount:S.number().int().positive(),kind:S.enum(["stash","commit"]).optional()}).optional()}).optional()}),fA=S.object({toolCalls:S.number().int().nonnegative(),tokensIn:S.number().int().nonnegative(),tokensOut:S.number().int().nonnegative()}),ZI=S.object({sessionId:S.string().nullable(),status:KA,config:GA,messages:S.array(AA),rawTranscript:S.string(),error:S.string().nullable(),summary:fA});var QI=fH;import{Agent as w$0,createAgentRuntime as C$0}from"@cline/agents";import{getClineEnvironmentConfig as WI}from"@cline/shared";var JI=5000,UA={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 XI($){return{recommended:$.recommended.map((Z)=>({...Z,tags:[...Z.tags]})),free:$.free.map((Z)=>({...Z,tags:[...Z.tags]})),clinePass:$.clinePass.map((Z)=>({...Z,tags:[...Z.tags]}))}}function BJ($){if(!$||typeof $!=="object")return null;let Z=$;if(typeof Z.id!=="string"||Z.id.length===0)return null;return{id:Z.id,name:typeof Z.name==="string"&&Z.name.length>0?Z.name:Z.id,description:typeof Z.description==="string"?Z.description:"",tags:Array.isArray(Z.tags)?Z.tags.filter((Q)=>typeof Q==="string"):[]}}function YI($){if(!$||typeof $!=="object")return null;let Z=$,Q=Array.isArray(Z.recommended)?Z.recommended:[],W=Array.isArray(Z.free)?Z.free:[],J=Array.isArray(Z.clinePass)?Z.clinePass:[],X=Q.map(BJ).filter((V)=>V!==null),Y=W.map(BJ).filter((V)=>V!==null),j=J.map(BJ).filter((V)=>V!==null);if(X.length===0&&Y.length===0&&j.length===0)return null;return{recommended:X,free:Y,clinePass:j}}function jI($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=WI().apiBaseUrl;try{return($.providerSettingsManager??new Y$).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function VI($,Z,Q){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await $(Z,{signal:W.signal})}finally{clearTimeout(J)}}async function HI($={}){try{let Z=jI($),Q=$.fetchImpl??fetch,W=await VI(Q,`${Z}/api/v1/ai/cline/recommended-models`,$.timeoutMs??JI);if(!W.ok)throw Error(`HTTP ${W.status}`);let J=await W.json(),X=YI(J);if(X)return X}catch{}return XI(UA)}import{readFile as BI}from"node:fs/promises";import GI from"node:path";function KI($){return $}async function FI($){let Z=GI.resolve($),Q=await BI(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(J){let X=J instanceof Error?J.message:String(J);throw Error(`Failed to parse JSON config at "${Z}": ${X}`)}return AI(W,Z)}function AI($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let W=$.providers;if(!Array.isArray(W))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!W.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}import{BUILT_IN_PROVIDER_IDS as _A,createHandler as DI,createHandlerAsync as LI,getProviderCollection as _I,hasProvider as zA,registerAsyncHandler as zI,registerHandler as TI,registerModel as OI,registerProvider as TA}from"@cline/llms";function DA($){return $?{...$}:{}}function fI($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function UI($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function LA($){let Z=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:Z,defaultModel:$.collection.provider.defaultModelId,modelCount:Z.length}}class GJ{providers=new Map;register($){UI($.id,$.models);let Z=$.defaultModel??$.models[0];if(!Z)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(Z))throw Error(`Default model "${Z}" is not included in configured models for "${$.id}".`);let Q=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Q?.models??[],...$.models]),defaultModel:Z,defaults:{...Q?.defaults??{},...DA($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:fI($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...DA($.settings)}})}registerModel($,Z){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([Z]),defaultModel:Z,defaults:{}});return}Q.models.add(Z)}createHandlerConfig($){let Z=this.require($.providerId),Q=$.modelId??Z.defaultModel;if(!Z.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...Z.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($,Z){return this.providers.get($)?.models.has(Z)??!1}require($){let Z=this.providers.get($);if(!Z)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return Z}}class KJ{configuredProviders=new GJ;constructor($){this.applyConfig($)}createHandler($){return DI(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return LI(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(TA($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)TI($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)zI($.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 Z=$.exposeModels??Object.keys($.models),Q=$.defaultModel??Z[0];if(!Q)throw Error(`Provider "${$.id}" must define a default model.`);TA({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Q,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:Z,defaultModel:Q,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){OI($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[..._A]}async getBuiltInProviders(){return(await Promise.all(_A.map((Z)=>_I(Z)))).filter((Z)=>Z!==void 0).map((Z)=>LA({collection:Z}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,Z){return this.configuredProviders.hasModel($,Z)}applyConfig($){for(let Z of $.providers)this.configuredProviders.registerSelectionConfig(Z);for(let Z of $.models??[])this.registerModel(Z);for(let Z of $.customProviders??[])this.registerProvider(Z);for(let Z of this.configuredProviders.list()){let Q=zA(Z.id),W=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,J=typeof W==="string"&&zA(W);if(!Q&&!J)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function qI($){return new KJ($)}V3();async function l00(){return Promise.resolve().then(() => (S9(),LF))}export{qH as writeHubDiscovery,G1 as writeGlobalSettings,MH as withHubStartupLock,o1 as verifyHubConnection,U1 as updateMcpSettingsFileSync,Y5 as updateMcpSettingsFile,eQ as updateMcpServerOAuthStateAsync,h8 as updateMcpServerOAuthState,jA as updateLocalProvider,n3 as uninstallPlugin,IF as uninstallMarketplaceSkill,xF as uninstallMarketplacePlugin,hF as uninstallMarketplaceMcpServerFromSettings,Ch as uninstallMarketplaceEntry,F3 as truncateNotificationBody,U8 as truncateCommandOutput,cZ as toggleDisabledTool,g5 as toTeamProgressLifecycleEvent,B1 as toProviderConfig,vM as toHubStatusUrl,RH as toHubHealthUrl,SW as toHookConfigFileName,m3 as syncPluginMcpServersToSettings,l5 as summarizeUsageFromMessages,nR as stopLocalHubServerGracefully,H1 as startLocalOAuthServer,y3 as startHubWebSocketServer,Ve as startHubServer,oA as startClineDeviceAuth,j7 as splitCoreSessionConfig,R5 as spawnDetachedHubServerWithRetry,RR as spawnDetachedHubServer,gU as setTelemetryOptOutGlobally,b8 as setMcpServerDisabled,LX as setDisabledTools,pU as setDisabledPlugin,uU as setCompactionStrategyGlobally,vU as setAutoUpdateEnabledGlobally,ls as sendHubCommand,X8 as saveProviderOAuthCredentials,yk as saveLocalProviderSettings,xk as saveLocalProviderOAuthCredentials,s8 as sanitizeSessionToken,HX as safeParseSettings,fU as safeCreateProviderConfig,F9 as runSubprocessEvent,f9 as runHook,yj as reviveTeamStateDates,uH as restartLocalHubIfIdleAfterStartupTimeout,vd as resolveWorkspaceHubOwnerContext,LQ as resolveWorkflowsConfigSearchPaths,UQ as resolveSkillsConfigSearchPaths,_1 as resolveSharedHubOwnerContext,MP as resolveSessionBackend,DQ as resolveRulesConfigSearchPaths,kZ as resolveProviderConfig,bf as resolveProviderApiKeyFromSettings,s1 as resolveProductionHubOwnerContext,T$ as resolvePluginSkillDirectoriesFromPaths,WQ as resolvePluginConfigSearchPaths,$1 as resolveMcpServerRegistrations,o3 as resolveMarketplaceMcpServerName,mk as resolveLocalClineAuthToken,bS as resolveHubUrl,x$ as resolveHubOwnerContext,a1 as resolveHubEndpointOptions,OH as resolveHubBuildId,CW as resolveHooksConfigSearchPaths,K1 as resolveDisabledToolNames,B6 as resolveDisabledPluginPaths,Z0 as resolveDefaultMcpSettingsPath,q5 as resolveDefaultHubPort,oM as resolveDefaultHubPathname,sM as resolveDefaultHubHost,xj as resolveCoreSelectedToolIds,m0 as resolveCoreDistinctId,a7 as resolveCompatibleLocalHubUrl,Pd as resolveClineDir,W4 as resolveClineDataDir,L6 as resolveAndLoadAgentPlugins,z$ as resolveAgentPluginPaths,l7 as requestHubShutdown,My as requestDesktopToolApproval,v3 as removePluginMcpServersFromSettings,k2 as rememberRecoverableLocalHubUrl,TF as registerRemoteConfigSessionBlobUpload,k8 as registerMcpServersFromSettingsFile,z10 as registerDisposable,hk as refreshProviderModelsFromSource,bJ as refreshOpenAICodexToken,vJ as refreshOcaToken,PJ as refreshClineToken,O4 as readSessionCheckpointHistory,Ay as readRemoteConfigSessionBlobUploadMetadata,A0 as readHubDiscovery,D0 as readGlobalSettings,cU as readCompactionStrategyGlobally,FF as readBearerToken,g$ as probeHubServer,ds as probeHubConnection,hY as prewarmFileIndex,bH as prewarmDetachedHubServer,Dy as prepareRemoteConfigCoreIntegration,fQ as parseWorkflowConfigFromMarkdown,_10 as parseUserCommandEnvelope,FQ as parseSkillConfigFromMarkdown,VX as parseSettings,AQ as parseRuleConfigFromMarkdown,aF as parsePluginSource,k3 as parseMcpInstallArgs,A9 as parseHookEventPayload,WW as parseConfiguredAgentConfig,b$ as normalizeWorkspacePath,L10 as normalizeUserInput,D10 as normalizeSdkError,O0 as normalizeRuntimeCapabilities,X6 as normalizeProviderId,kk as normalizeOAuthProvider,I2 as normalizeHubWebSocketUrl,U10 as noopBasicLogger,cW as migrateLegacyProviderSettings,R6 as mergeRulesForSystemPrompt,_4 as mergeAgentHooks,Nh as marketplaceEntryKey,C7 as makeTeamTaskSubSessionId,L5 as makeSubSessionId,_Z as loginOpenAICodex,RZ as loginOcaOAuth,Ik as loginLocalProvider,DZ as loginClineOAuth,wZ as loginAndSaveProviderOAuthCredentials,gk as loginAndSaveLocalProviderOAuthCredentials,l00 as loadOpenTelemetryAdapter,S8 as loadMcpSettingsFile,FI as loadLlmsConfigFromFile,h5 as loadConfiguredAgentConfigs,B8 as loadAgentPluginsFromPathsWithDiagnostics,yX as loadAgentPluginsFromPaths,oZ as loadAgentPluginFromPath,RM as listSessionHistoryFromBackend,qV as listPluginToolsWithDiagnostics,X7 as listPluginTools,$7 as listMcpServerOAuthStatuses,Sk as listLocalProviders,c2 as listHookConfigFiles,dU as isToolDisabledGlobally,vZ as isTelemetryOptedOutGlobally,S$ as isSessionNotFoundError,tX as isRuleEnabled,lU as isPluginDisabledGlobally,nF as isOfficialPluginSlug,J8 as isOAuthProvider,kF as isMarketplaceSkillInstalled,jy as isLocalHubOrigin,AF as isLocalHubHostName,cR as isHubReconnectableTransportError,vH as isHubCommandTimeoutError,yd as isDiscoveryFilePresent,Q10 as isClineOrgIndividualInferenceSubscriptionMessage,Z10 as isClineOrgIndividualInferenceSubscriptionError,$10 as isClineNotSubscribedMessage,e00 as isClineNotSubscribedError,DJ as isClineAccountActionRequest,GU as isBuiltInProviderId,mU as isAutoUpdateEnabledGlobally,fk as installPlugin,Sy as installMcpServer,b1 as identifyAccount,C$ as hasMcpSettingsFile,zZ as getValidOpenAICodexCredentials,EZ as getValidOcaCredentials,LZ as getValidClineCredentials,CZ as getProviderOAuthCredentialsFromSettings,rk as getProviderConfigFields,oJ as getProviderConfig,Sf as getProviderAuthStorageId,B0 as getProviderAuthHandler,s4 as getPersistedProviderApiKey,y8 as getMcpServerOAuthState,t3 as getMarketplaceSkillCandidates,bk as getLocalProviderModels,J6 as getLiveModelsCatalog,e3 as getGlobalMarketplaceSkillPaths,M$ as getFileIndex,Zw as getCurrentContextSize,pQ as getCoreHeadlessToolNames,Ij as getCoreDefaultEnabledToolIds,N8 as getCoreBuiltinToolCatalog,gj as getCoreAcpToolNames,t00 as getClinePassSubscriptionUrl,s00 as getClineOrgIndividualInferenceSubscriptionMessage,o00 as getClineNotSubscribedMessage,J10 as getClineDefaultSystemPrompt,K7 as generateWorkspaceInfoWithDiagnostics,U5 as generateWorkspaceInfo,M6 as formatRulesForSystemPrompt,yf as formatProviderOAuthApiKey,f10 as formatDisplayUserInput,$J as findInstalledGlobalMarketplaceSkillName,J9 as findCheckpointForRun,dZ as filterExtensionToolRegistrations,k1 as filterDisabledTools,uZ as filterDisabledPluginPaths,HI as fetchClineRecommendedModels,LJ as executeClineAccountAction,fF as ensureHubWebSocketServer,He as ensureHubServer,od as ensureDetachedHubServer,qG as ensureCustomProvidersLoaded,X4 as ensureCompatibleLocalHubUrl,l6 as enrichPromptWithMentions,K10 as emptyWorkspaceManifest,u2 as emptyStoredProviderSettings,JQ as discoverPluginModulePaths,vy as disablePluginMcpServersInSettings,P7 as deriveSubsessionStatus,VA as deleteLocalProvider,KI as defineLlmsConfig,TQ as createWorkflowsConfigDefinition,w2 as createUserInstructionConfigService,mY as createToolPoliciesWithPreset,G10 as createTool,cG as createTeamName,VK as createSubprocessHooks,N2 as createSpawnAgentTool,_Q as createSkillsConfigDefinition,MQ as createShellTool,D8 as createShellExecutor,G9 as createSessionHost,G9 as createRuntimeHost,zQ as createRulesConfigDefinition,Uy as createRemoteConfigSessionMessagesArtifactUploader,AU as createProviderConfig,T9 as createOpenTelemetryTelemetryService,m4 as createOAuthClientCallbacks,F5 as createMcpTools,Qo as createLocalHubScheduleRuntimeHandlers,qI as createLlmsSdk,_0 as createInitialAccumulatedUsage,bd as createInMemoryHubOwnerContext,L1 as createHubServerUrl,TH as createHubAuthToken,kW as createHookConfigFileHooks,s5 as createHookConfigFileExtension,a5 as createHookAuditHooks,J7 as createDisabledMcpToolPolicy,zV as createDisabledMcpToolPolicies,R2 as createDelegatedAgentConfigProvider,E2 as createDelegatedAgent,vY as createDefaultToolsWithPreset,T2 as createDefaultTools,CQ as createDefaultShellExecutor,G5 as createDefaultMcpServerClientFactory,n6 as createDefaultExecutors,v8 as createCoreSettingsService,t1 as createCoreSessionSnapshot,B10 as createContributionRegistry,EW as createContextCompactionPrepareTurn,s$ as createConfiguredTelemetryService,O9 as createConfiguredTelemetryHandle,I5 as createConfiguredAgentTools,H10 as createClineTelemetryServiceMetadata,V10 as createClineTelemetryServiceConfig,$K as createCheckpointComparePlan,w8 as createBuiltinTools,E8 as createAgentTeamsTools,C$0 as createAgentRuntime,p5 as createAgentHooksExtension,FK as connectToHub,tA as completeClineDeviceAuth,J3 as compareCheckpointToWorkspace,eF as collectPluginMcpOAuthCandidates,VU as clearPrivateModelsCatalogCache,jU as clearLiveModelsCatalogCache,a0 as clearHubDiscovery,IA as captureWorkspacePathResolved,o9 as captureWorkspaceInitialized,t9 as captureWorkspaceInitError,Q8 as captureToolUsage,ZZ as captureTokenUsage,$Z as captureTaskRestarted,e9 as captureTaskCreated,c4 as captureTaskCompleted,d4 as captureSubagentExecution,WZ as captureSkillUsed,j10 as captureSdkError,xA as captureProviderConfigured,u4 as captureProviderApiError,QZ as captureModeSwitch,XZ as captureMentionUsed,jZ as captureMentionSearchResults,YZ as captureMentionFailed,HZ as captureHookDiscovery,kA as captureExtensionActivated,JZ as captureDiffEditFailure,Z8 as captureConversationTurnEvent,GZ as captureCompactionSkipped,BZ as captureCompactionExecuted,P1 as captureAuthSucceeded,C1 as captureAuthStarted,A$ as captureAuthLoggedOut,S1 as captureAuthFailed,PA as captureAgentUnexpectedReasoningTokens,VZ as captureAgentTeamCreated,f$ as captureAgentCreated,F7 as buildWorkspaceMetadata,x5 as buildTeamProgressSummary,X10 as buildSdkErrorProperties,_F as buildRemoteConfigSessionBlobUploadMetadata,MF as buildMcpInstallTransport,M8 as buildDelegatedAgentConfig,XW as buildConfiguredAgentToolName,YW as buildConfiguredAgentToolDescriptors,ZK as buildCheckpointWorkspaceDiff,Q5 as bootstrapAgentTeams,VV as authorizeMcpServerOAuth,Pk as addLocalProvider,f0 as accumulateUsageTotals,HQ as WORKFLOWS_CONFIG_DIRECTORY_NAME,j8 as UnifiedConfigFileWatcher,e0 as ToolPresets,P4 as TelemetryService,z9 as TelemetryLoggerSink,Z5 as TEAM_TOOL_NAMES,K6 as SubprocessSandbox,f8 as StructuredCommandInputSchema,o5 as StoredProviderSettingsSchema,WG as StoredProviderSettingsEntrySchema,q4 as SqliteTeamStore,Z$ as SqliteSessionStore,r2 as SessionVersioningService,s0 as SessionVersioningError,T0 as SessionSource,P$ as SessionNotFoundError,XX as SapSettingsSchema,VQ as SKILLS_CONFIG_DIRECTORY_NAME,gZ as SESSION_STATUSES,c8 as SESSION_NOT_FOUND_ERROR_CODE,T10 as SDK_ERROR_TELEMETRY_EVENT,s9 as RpcClineAccountService,C5 as RemoteRuntimeHost,ZX as ReasoningSettingsSchema,pX as RULES_CONFIG_DIRECTORY_NAME,zF as REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY,H2 as ProviderSettingsSchema,Y$ as ProviderSettingsManager,tJ as ProviderProtocolSchema,xZ as ProviderIdSchema,eJ as ProviderClientSchema,S4 as OpenTelemetryProvider,YX as OcaSettingsSchema,hZ as OPENAI_COMPATIBLE_PROVIDERS,z1 as NodeHubClient,w4 as NoOpFeatureFlagsProvider,w3 as NativeHubTransportAdapter,jX as ModelCatalogSettingsSchema,J5 as McpSettingsUpdateSkippedError,C2 as McpSettingsMutatorPurityError,P2 as McpSettingsLockTimeoutError,q$ as MAX_COMMAND_OUTPUT_CHARS,j$ as LocalRuntimeHost,r00 as Llms,t5 as InMemoryWorkspaceManager,I8 as InMemoryMcpManager,xS as HubUIClient,g0 as HubTransportError,IS as HubSessionClient,P9 as HubServerTransport,_9 as HubScheduleService,U9 as HubScheduleCommandService,u$ as HubRuntimeHost,E5 as HubCommandError,YK as HookEventPayloadSchema,XK as HookEventNameSchema,r5 as HookConfigFileName,PW as HOOK_CONFIG_FILE_EVENT_MAP,nB as HOOKS_CONFIG_DIRECTORY_NAME,H6 as GlobalSettingsSchema,WX as GcpSettingsSchema,BA as FileTeamPersistenceStore,N4 as FeatureFlagsService,A10 as FeatureFlagDefaultValue,F10 as FEATURE_FLAGS,UA as FALLBACK_CLINE_RECOMMENDED_MODELS,L0 as DefaultToolNames,V9 as DefaultRuntimeBuilder,KJ as DefaultLlmsSdk,nJ as DEFAULT_MODELS_CATALOG_URL,nM as DEFAULT_HUB_PORT,aM as DEFAULT_HUB_PATHNAME,iM as DEFAULT_HUB_HOST,h2 as CoreSettingsService,Q$ as CoreSessionService,Y10 as ContributionRegistry,a00 as ClineOrgIndividualInferenceSubscriptionError,n00 as ClineNotSubscribedError,Y3 as ClineCore,a9 as ClineAccountService,ZI as ChatViewStateSchema,fA as ChatSummarySchema,KA as ChatSessionStatusSchema,GA as ChatSessionConfigSchema,AA as ChatMessageSchema,FA as ChatMessageRoleSchema,I as CORE_TELEMETRY_EVENTS,QI as CORE_BUILD_VERSION,N3 as BrowserWebSocketHubAdapter,BU as BUILT_IN_PROVIDER_IDS,IZ as BUILT_IN_PROVIDER,JX as AzureSettingsSchema,QX as AwsSettingsSchema,$X as AuthSettingsSchema,B4 as AgentTeamsRuntime,VW as AgentTeam,w$0 as Agent,U2 as ALL_DEFAULT_TOOL_NAMES};
749
+ `)}}async function Ph($,Z={}){if($.type==="mcp"){let Q=o3($);if(Z.deleteMcpServer)await Z.deleteMcpServer(Q);else hF($,Z);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Q??$.id}.`}}if($.type==="skill")return IF($,Z);if($.type==="plugin")return xF($,Z);throw Error(`Unsupported marketplace entry type: ${$.type}`)}import{spawn as Sh}from"node:child_process";import{createHash as bh}from"node:crypto";import{existsSync as J1,mkdirSync as WJ,readdirSync as yh,readFileSync as hh,renameSync as I9,rmSync as m9,statSync as JJ}from"node:fs";import{cp as QJ,mkdir as pF,writeFile as v9}from"node:fs/promises";import{homedir as gF}from"node:os";import{basename as N1,dirname as mF,extname as kh,join as r,relative as rF,resolve as G$,sep as Ih}from"node:path";import{isPluginModulePath as g9,resolveClineDir as xh,resolvePluginModuleEntries as gh}from"@cline/shared/storage";var t2="_installed",c9="package",mh="https://github.com/cline/plugins.git",vF=30000,x9=10485760,cF="@cline/",vh=["dependencies","devDependencies","optionalDependencies","peerDependencies"],ch={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function u9($){if($==="~")return gF();if($.startsWith("~/"))return r(gF(),$.slice(2));return $}function iF($){return $.split(Ih).join("/")}function $2($){return bh("sha256").update($).digest("hex").slice(0,12)}function uh($){let Z=0;while(Z<$.length&&$[Z]==="-")Z++;let Q=$.length;while(Q>Z&&$[Q-1]==="-")Q--;return $.slice(Z,Q)}function E1($){let Z="",Q=!1,W=$.startsWith("@")?$.slice(1):$;for(let X of W.slice(0,256)){if(X>="a"&&X<="z"||X>="A"&&X<="Z"||X>="0"&&X<="9"||X==="."||X==="_"||X==="-")Z+=X,Q=X==="-";else if(!Q)Z+="-",Q=!0;if(Z.length>=80)break}return uh(Z)||"plugin"}function nF($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function dh($){return $?.trim()||mh}function uF($){let Q=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Q?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Q[1]}}function lh($){if($.startsWith(".")||$.startsWith("/")||$==="~"||$.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test($))return!1;let[Z,...Q]=$.split("/");return!!Z&&Q.length>=2&&Z.includes(".")&&!Z.startsWith(".")&&!Z.endsWith(".")}function ph($){let Z=$.match(/^git@([^:]+):(.+)$/);if(Z){let Y=Z[2]??"",j=Y.indexOf("@");if(j<0)return{repo:$};return{repo:`git@${Z[1]}:${Y.slice(0,j)}`,ref:Y.slice(j+1)||void 0}}if($.includes("://"))try{let Y=new URL($),j=Y.pathname.replace(/^\/+/,""),V=j.indexOf("@");if(V<0)return{repo:$};return Y.pathname=`/${j.slice(0,V)}`,{repo:Y.toString().replace(/\/$/,""),ref:j.slice(V+1)||void 0}}catch{return{repo:$}}let Q=$.indexOf("/");if(Q<0)return{repo:$};let W=$.slice(0,Q),J=$.slice(Q+1),X=J.indexOf("@");if(X<0)return{repo:$};return{repo:`${W}/${J.slice(0,X)}`,ref:J.slice(X+1)||void 0}}function rh($){try{return decodeURIComponent($)}catch{return $}}function ih($){return N1(rh($))||"plugin"}function nh($){let Z=$.split("/").filter(Boolean);return Z.length>=5&&(Z[2]==="blob"||Z[2]==="raw")}function dF($){if(!/^https?:\/\//i.test($))return null;let Z;try{Z=new URL($)}catch{return null}let Q=Z.hostname.toLowerCase(),W=ih(Z.pathname),J=g9(W),X=(Q==="github.com"||Q==="www.github.com")&&nh(Z.pathname);if(Z.protocol!=="https:"){if(X||Q==="raw.githubusercontent.com"||J)throw Error(`Remote plugin file URLs must use https: ${$}`);return null}if(Q==="github.com"||Q==="www.github.com"){let Y=Z.pathname.split("/").filter(Boolean);if(!X)return null;if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:`https://raw.githubusercontent.com/${[Y[0],Y[1],...Y.slice(3)].join("/")}`,filename:W}}if(Q==="raw.githubusercontent.com"){if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:Z.toString(),filename:W}}if(!J)return null;return{type:"remote",url:Z.toString(),filename:W}}function lF($,Z={}){let Q=$.trim(),W=Q.startsWith("git:")&&!Q.startsWith("git://"),J=W?Q.slice(4).trim():Q;if(!Z.force&&!W&&!/^(https?|ssh|git):\/\//i.test(J))return null;let{repo:X,ref:Y}=ph(J),j="",V="";if(X.startsWith("git@")){let G=X.match(/^git@([^:]+):(.+)$/);j=G?.[1]??"",V=G?.[2]??""}else if(/^(https?|ssh|git):\/\//i.test(X)){let G=new URL(X);j=G.hostname,V=G.pathname.replace(/^\/+/,"")}else{let G=X.indexOf("/");if(G<0)return null;j=X.slice(0,G),V=X.slice(G+1)}let H=V.replace(/\.git$/,"").replace(/^\/+/,"");if(!j||!H||H.split("/").length<2)return null;return{type:"git",repo:X.startsWith("git@")||/^(https?|ssh|git):\/\//i.test(X)?X:`https://${X}`,ref:Y,host:j,path:H}}function aF($,Z){let Q=$.trim();if(!Q)throw Error("plugin install requires a source");if(Z==="npm"){let Y=Q.startsWith("npm:")?Q.slice(4).trim():Q,{name:j}=uF(Y);return{type:"npm",spec:Y,name:j}}if(Z==="git"){let Y=lF(Q,{force:!0});if(!Y)throw Error(`Invalid git plugin source: ${$}`);return Y}if(Z==="local")return{type:"local",path:$};if(Z==="remote"){let Y=dF(Q);if(!Y)throw Error(`Invalid remote plugin source: ${$}`);return Y}if(Q.startsWith("npm:")){let Y=Q.slice(4).trim(),{name:j}=uF(Y);return{type:"npm",spec:Y,name:j}}if(Q.startsWith(".")||Q.startsWith("/")||Q==="~"||Q.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test(Q))return{type:"local",path:$};let J=dF(Q);if(J)return J;let X=lF(Q);if(X)return X;if(nF(Q))return{type:"official",slug:Q};if(lh(Q))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 ah($){return $?r($,".cline","plugins"):r(xh(),"plugins")}function sh($,Z,Q){if(Z.type==="npm")return r($,t2,"npm",`${E1(Z.name)}-${$2(Q)}`);if(Z.type==="git")return r($,t2,"git",E1(Z.host),`${E1(Z.path)}-${$2(Q)}`);if(Z.type==="remote")return r($,t2,"remote",`${E1(Z.filename)}-${$2(Q)}`);if(Z.type==="official")return r($,t2,"official",`${E1(Z.slug)}-${$2(Q)}`);return r($,t2,"local",`${E1(N1(u9(Z.path)))}-${$2(Q)}`)}function oh($,Z,Q){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:${Q}#plugins/${$.slug}`;return`local:${G$(Z,u9($.path))}`}function th($,Z){if($.type==="npm")return $.name;if($.type==="git")return E1(N1($.path));if($.type==="remote")return E1(N1($.filename,kh($.filename)));if($.type==="official")return $.slug;return E1(N1(G$(Z,u9($.path))))}async function e2($,Z,Q={}){await new Promise((W,J)=>{let X=Sh($,Z,{cwd:Q.cwd,stdio:["ignore","ignore","pipe"],env:process.env,windowsHide:!0}),Y="";X.stderr.on("data",(j)=>{Y+=String(j)}),X.on("error",J),X.on("close",(j)=>{if(j===0){W();return}let V=Y.trim();J(Error(`${$} ${Z.join(" ")} failed with exit code ${j}${V?`: ${V}`:""}`))})})}function sF($){let Z=r($,"package.json");if(!J1(Z))return null;try{return JSON.parse(hh(Z,"utf8"))}catch{return null}}function eh($){let Z=$?.cline?.plugins;if(!Array.isArray(Z))return[];return Z.flatMap((Q)=>{if(typeof Q==="string")return[Q];return Q.paths??[]})}async function $k($){let Z=r($,"package.json"),Q=sF($);if(!Q)return;let W=!1;for(let J of vh){let X=Q[J];if(!X||typeof X!=="object")continue;for(let Y of Object.keys(X)){if(!Y.startsWith(cF))continue;delete X[Y],delete Q.peerDependenciesMeta?.[Y],W=!0}if(Object.keys(X).length===0)delete Q[J]}if(Q.peerDependenciesMeta){for(let J of Object.keys(Q.peerDependenciesMeta)){if(!J.startsWith(cF))continue;delete Q.peerDependenciesMeta[J],W=!0}if(Object.keys(Q.peerDependenciesMeta).length===0)delete Q.peerDependenciesMeta}if(!W)return;await v9(Z,`${JSON.stringify(Q,null,2)}
750
+ `,"utf8")}function Zk($,Z){let Q=r($,"node_modules","@cline");if(!J1(Q))return;for(let W of tF(Q)){if(`@cline/${W.name}`===Z)continue;m9(r(Q,W.name),{recursive:!0,force:!0})}}function oF($){let Z=eh(sF($)).map((X)=>G$($,X)).filter((X)=>J1(X)&&JJ(X).isFile()&&g9(X));if(Z.length>0)return Z;let Q=gh($);if(Q?.length)return Q;let W=[],J=[$];while(J.length>0){let X=J.pop();if(!X)continue;for(let Y of tF(X)){let j=r(X,Y.name);if(Y.name==="node_modules"||Y.name===".git")continue;if(Y.isDirectory()){J.push(j);continue}if(Y.isFile()&&!Y.name.startsWith(".")&&g9(j))W.push(j)}}return W.sort((X,Y)=>X.localeCompare(Y))}function tF($){try{return yh($,{withFileTypes:!0})}catch{return[]}}function Qk($,Z){let Q=oF(Z);if(Q.length===0)throw Error(`No plugin entry files found in ${Z}`);return Q.map((W)=>`./${iF(rF($,W))}`)}async function Wk($,Z,Q){let W=Qk($,Z);return await v9(r($,"package.json"),JSON.stringify({...ch,name:Q,cline:{plugins:[{paths:W}]}},null,2),"utf8"),W}async function Jk($,Z,Q){let W=r(Z,c9);return await pF(W,{recursive:!0}),await v9(r(W,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await e2(Q,["install",$.spec,"--prefix",W,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),Zk(W,$.name),r(W,"node_modules",$.name)}async function XJ($,Z){if(!J1(r($,"package.json")))return;await $k($),await e2(Z,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function Xk($,Z,Q){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let W=r(Z,c9),J=["clone","--filter=blob:none"];if($.ref)J.push("--branch",$.ref);J.push("--",$.repo,W);try{await e2("git",J)}catch(X){if(!$.ref)throw X;await e2("git",["clone","--filter=blob:none","--",$.repo,W]),await e2("git",["checkout","--detach",$.ref],{cwd:W})}return await XJ(W,Q),W}async function Yk($,Z,Q,W){let J=r(Z,"repo");await e2("git",["clone","--filter=blob:none","--depth","1","--",W,J]);let X=r(J,"plugins",$.slug);if(!J1(X)||!JJ(X).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${W}`);let Y=r(Z,c9);return await QJ(X,Y,{recursive:!0,filter:(j)=>{let V=N1(j);return V!==".git"&&V!=="node_modules"}}),m9(J,{recursive:!0,force:!0}),await XJ(Y,Q),Y}function ZJ($){return Error(`Remote plugin file from ${$} exceeds the ${x9} byte limit`)}function jk($){let Z=$.headers.get("content-length");if(!Z)return;let Q=Number(Z);if(!Number.isFinite(Q)||Q<0)return;return Q}async function Vk($,Z){let Q=jk($);if(Q!==void 0&&Q>x9)throw ZJ(Z);if(!$.body){let Y=Buffer.from(await $.text(),"utf8");if(Y.byteLength>x9)throw ZJ(Z);return Y}let W=$.body.getReader(),J=[],X=0;try{while(!0){let{done:Y,value:j}=await W.read();if(Y)break;let V=Buffer.from(j);if(X+=V.byteLength,X>x9)throw await W.cancel().catch(()=>{return}),ZJ(Z);J.push(V)}return Buffer.concat(J,X)}finally{W.releaseLock()}}async function Hk($,Z){let Q=new AbortController,W=setTimeout(()=>{Q.abort()},vF);try{let J=await fetch($.url,{signal:Q.signal});if(!J.ok){let Y=J.statusText?` ${J.statusText}`:"";throw Error(`Failed to download plugin file from ${$.url}: ${J.status}${Y}`)}let X=await Vk(J,$.url);return WJ(Z,{recursive:!0}),await v9(r(Z,$.filename),X),Z}catch(J){if(J instanceof Error&&J.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${vF}ms`);throw J}finally{clearTimeout(W)}}async function Bk($,Z,Q,W){let J=G$(Q,u9($.path));if(!J1(J))throw Error(`Plugin source path does not exist: ${J}`);let X=JJ(J);if(X.isFile()){if(!g9(J))throw Error(`Plugin file must be .js or .ts: ${J}`);WJ(Z,{recursive:!0});let j=r(Z,N1(J));return await QJ(J,j),Z}if(!X.isDirectory())throw Error(`Plugin source must be a file or directory: ${J}`);let Y=r(Z,c9);return await QJ(J,Y,{recursive:!0,filter:(j)=>{let V=N1(j);return V!==".git"&&V!=="node_modules"}}),await XJ(Y,W),Y}function Gk($,Z){if(J1($)&&!Z)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function Kk($,Z,Q){if(WJ(mF(Z),{recursive:!0}),!J1(Z)){I9($,Z);return}if(!Q)throw Error(`Plugin is already installed at ${Z}. Use --force to replace it.`);let W=r(mF(Z),`.replace-${N1(Z)}-${Date.now()}-${process.pid}-${$2(`${Z}:${Math.random()}`)}`);I9(Z,W);try{I9($,Z)}catch(J){if(!J1(Z)&&J1(W))I9(W,Z);throw J}try{m9(W,{recursive:!0,force:!0})}catch{}}function Fk($){let Z=$.transport;if(Z.type==="stdio")return!1;return Z.headers!==void 0&&Object.keys(Z.headers).length>0}function Ak($){let Z=$.oauth?.tokens?.access_token;return typeof Z==="string"&&Z.trim().length>0}function fk($){let Z=$.metadata;if(!Z||Z.source!=="plugin"||typeof Z.pluginName!=="string"||typeof Z.pluginPath!=="string")return;return{pluginName:Z.pluginName,pluginPath:Z.pluginPath}}function eF($){let Z=new Set($.pluginPaths.map((J)=>G$(J)));if(Z.size===0)return[];let Q;try{Q=$1({filePath:$.settingsPath??Z0()})}catch{return[]}let W=[];for(let J of Q){let X=fk(J);if(!X||!Z.has(G$(X.pluginPath)))continue;let Y=J.transport.type;if(Y==="stdio")continue;if(Fk(J)||Ak(J))continue;W.push({name:J.name,pluginName:X.pluginName,pluginPath:X.pluginPath,transportType:Y,lastError:J.oauth?.lastError})}return W.sort((J,X)=>J.name.localeCompare(X.name))}async function Uk($){let Z=$.source.trim(),Q=aF(Z,$.sourceType),W=$.cwd?.trim(),J=W?G$(W):process.cwd(),X=ah(W?J:void 0),Y=dh($.officialPluginsRepo),j=oh(Q,J,Y),V=sh(X,Q,j),H=th(Q,J),B=r(X,t2,".tmp"),G=r(B,`${Date.now()}-${process.pid}-${$2(`${Z}:${Math.random()}`)}`),K=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;Gk(V,F),await pF(B,{recursive:!0});let A;try{if(Q.type==="npm")A=await Jk(Q,G,K);else if(Q.type==="git")A=await Xk(Q,G,K);else if(Q.type==="official")A=await Yk(Q,G,K,Y);else if(Q.type==="remote")A=await Hk(Q,G);else A=await Bk(Q,G,J,K);let L=(Q.type==="local"||Q.type==="remote")&&A===G?oF(G).map((U)=>`./${iF(rF(G,U))}`):await Wk(G,A,H);if(L.length===0)throw Error(`No plugin entry files found for ${Z}`);Kk(G,V,F);let f={source:Z,installPath:V,entryPaths:L.map((U)=>G$(V,U)),mcpSyncFailures:[],mcpOAuthCandidates:[]},D=await m3({pluginPaths:f.entryPaths,cwd:J,workspacePath:J});return f.mcpSyncFailures=D.failures,f.mcpOAuthCandidates=eF({pluginPaths:f.entryPaths}),f}catch(L){throw m9(G,{recursive:!0,force:!0}),L}}import*as M0 from"@cline/llms";var ZA="cline-pass";function Dk($){return $.apiKey??$.auth?.apiKey}function Lk($){return($.auth?.accessToken?.trim()??"").length>0}function QA($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function _k($){let Z=$.split(/\s+/).filter(Boolean);if(Z.length===0)return"?";if(Z.length===1)return Z[0].slice(0,2).toUpperCase();return`${Z[0][0]}${Z[1][0]}`.toUpperCase()}function zk($){let Z=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let W of $)Q=Q*31+W.charCodeAt(0)>>>0;return Z[Q%Z.length]}function WA($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>UG(Z,Q))}async function Tk($,Z){let Q=await M0.getModelsForProvider($),W=$===ZA;if(!Z&&!W)return Q;let J=await kZ($,{loadLatestOnInit:W,loadPrivateOnAuth:!0,failOnError:!1},Z);if($==="litellm"&&J?.knownModels)return J.knownModels;if(W&&J?.knownModels)return J.knownModels;return J?.knownModels?{...Q,...J.knownModels}:Q}function YJ($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function Ok($){if(!$?.length)return;return[...new Set($)]}function qk($,Z){return Ok([...$??[],...Z??[]])}function Mk($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function Rk($){if(!$||typeof $!=="object")return!1;let Z=$;return typeof Z.path==="string"&&Z.path.trim().length>0&&typeof Z.label==="string"&&Z.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(Z.type))}function Ek($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(Rk)}var d9={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},$A={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function Nk($){if(!$)return[d9];if($.source!=="system")return $.baseUrl?[d9,$A]:[d9];let Z=[];if($.env?.length)Z.push(d9);if($.baseUrl)Z.push($A);return Z}function wk($,Z){return Z.split(".").reduce((Q,W)=>{if(!Q||typeof Q!=="object")return;return Q[W]},$)}function Ck($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function Pk($,Z,Q){if(!$?.length)return;let W={};for(let J of $){let Y=Ck(J.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:wk(Z,J.path))??J.defaultValue;if(Y!==void 0)W[J.path]=Y}return W}function JA($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function jJ($,Z){let Q=Z?.includes("vision")??!1,W=Z?.includes("reasoning")??!1;return Object.fromEntries($.map((J)=>[J,{id:J,name:J,supportsVision:Q,supportsAttachments:Q,supportsReasoning:W}]))}async function XA($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await o4($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function YA($,Z){let Q=$.read(),W=!1;if(Q.providers[Z])delete Q.providers[Z],W=!0;if(Q.lastUsedProvider===Z)delete Q.lastUsedProvider,W=!0;if(W)$.write(Q);M0.unregisterProvider(Z)}async function Sk($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=Z.baseUrl.trim(),J=Z.apiKey?.trim()??"";if(!W&&!J){let A=r$($);if((await d2(A)).providers[Q]){let f=await VA($,{providerId:Q});return{providerId:Q,settingsPath:f.settingsPath,modelsPath:f.modelsPath,modelsCount:0}}return YA($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(M0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let X=Z.name.trim();if(!X)throw Error("name is required");if(!W)throw Error("baseUrl is required");let Y=YJ(Z.models),j=Z.modelsSourceUrl?.trim(),V=await XA({providerId:Q,explicitModels:Y,modelsSourceUrl:j,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let H=Z.defaultModelId?.trim()&&V.includes(Z.defaultModelId.trim())?Z.defaultModelId.trim():V[0],B=Z.capabilities?.length?[...new Set(Z.capabilities)]:void 0,G=JA(Z.headers);$.saveProviderSettings({provider:Q,apiKey:J||void 0,baseUrl:W,headers:G,timeout:Z.timeoutMs,model:H,protocol:Z.protocol,client:Z.client},{setLastUsed:!1});let K=r$($),F=await d2(K);return F.providers[Q]={provider:{name:X,baseUrl:W,defaultModelId:H,protocol:Z.protocol,client:Z.client,capabilities:B,modelsSourceUrl:j},models:jJ(V,B)},await Z9(K,F),T4(Q,F.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function jA($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=r$($),J=await d2(W),X=J.providers[Q];if(!X){let q=$.getProviderSettings(Q);if(!q)throw Error(`provider "${Q}" does not exist`);let z=Z.modelsSourceUrl?.trim(),_=YJ(Z.models)[0]??q.model?.trim();if(!_&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);X={provider:{name:Z.name?.trim()||QA(Q),baseUrl:Z.baseUrl?.trim()??q.baseUrl?.trim()??"",defaultModelId:_,protocol:q.protocol,client:q.client,capabilities:q.capabilities},models:_?jJ([_],q.capabilities):{}}}if(!X.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let Y=Z.name?.trim()??X.provider.name.trim();if(!Y)throw Error("name is required");let j=Z.baseUrl?.trim()??X.provider.baseUrl.trim();if(!j)throw Error("baseUrl is required");let V=Z.capabilities===void 0?X.provider.capabilities:Z.capabilities===null?void 0:[...new Set(Z.capabilities)],H=Z.protocol===void 0?X.provider.protocol:Z.protocol??void 0,B=Z.client===void 0?X.provider.client:Z.client??void 0,G=YJ(Z.models),K=Z.modelsSourceUrl===void 0?X.provider.modelsSourceUrl:Z.modelsSourceUrl?.trim()||void 0,F=Z.models!==void 0||Z.modelsSourceUrl!==void 0&&!!K,A=Object.keys(X.models??{}).map((q)=>q.trim()).filter(Boolean),L=await XA({providerId:Q,explicitModels:G,modelsSourceUrl:K,fallbackModelIds:A,shouldRecompute:F});if(L.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let f=Z.defaultModelId===void 0?X.provider.defaultModelId?.trim():Z.defaultModelId?.trim(),D=f&&L.includes(f)?f:L[0],T={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:j,model:D};if(H)T.protocol=H;else delete T.protocol;if(B)T.client=B;else delete T.client;if(Z.apiKey!==void 0){let q=Z.apiKey?.trim()??"";if(q)T.apiKey=q;else delete T.apiKey}if(Z.headers!==void 0){let q=JA(Z.headers);if(q)T.headers=q;else delete T.headers}if(Z.timeoutMs!==void 0)if(typeof Z.timeoutMs==="number")T.timeout=Z.timeoutMs;else delete T.timeout;return $.saveProviderSettings(T,{setLastUsed:!1}),J.providers[Q]={provider:{name:Y,baseUrl:j,defaultModelId:D,protocol:H,client:B,capabilities:V,modelsSourceUrl:K},models:jJ(L,V)},await Z9(W,J),T4(Q,J.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W,modelsCount:L.length}}async function VA($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=r$($),J=await d2(W);if(!J.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete J.providers[Q],await Z9(W,J),M0.unregisterProvider(Q),YA($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W}}async function bk($,Z={}){let Q=$.read(),W=M0.getProviderIds(),J=await Promise.all(W.map(async(Y)=>{let[j,V]=await Promise.all([M0.getProvider(Y),M0.getModelsForProvider(Y)]),H=WA(V),B=Q.providers[Y]?.settings,G=j?.name??QA(Y),K=qk(j?.capabilities,B?.capabilities),F=Ek(j?.metadata)??Nk(j);return{provider:{id:Y,name:G,models:H.length,color:zk(Y),letter:_k(G),enabled:Boolean(B),apiKey:B?Dk(B):void 0,oauthAccessTokenPresent:B?Lk(B):void 0,baseUrl:B?.baseUrl??j?.baseUrl,defaultModelId:j?.defaultModelId,protocol:B?.protocol??j?.protocol,client:B?.client??j?.client,capabilities:K,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:F,configValues:Pk(F,B,j),modelList:H},rank:Mk(j?.metadata)}}));J.sort((Y,j)=>{if(Y.rank!==j.rank)return Y.rank-j.rank;return Y.provider.name.localeCompare(j.provider.name)||Y.provider.id.localeCompare(j.provider.id)});let X=J.map((Y)=>Y.provider);if(Z.isClinePassEnabled!==!0)X=X.filter((Y)=>Y.id!==ZA);return{providers:X,settingsPath:$.getFilePath()}}async function yk($,Z){let Q=$.trim(),W=await Tk(Q,Z),J=WA(W);return{providerId:Q,models:J}}function l9($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function HA($,Z){if(!l9(Z))return l9($)?{...$}:void 0;let Q=l9($)?{...$}:{};for(let[W,J]of Object.entries(Z)){if(J==null||J===""){delete Q[W];continue}if(l9(J)){let X=HA(Q[W],J);if(X&&Object.keys(X).length>0)Q[W]=X;else delete Q[W];continue}Q[W]=J}return Object.keys(Q).length>0?Q:void 0}function hk($,Z){let Q=Z.providerId.trim();if(Z.enabled===!1){let X=$.read();if(delete X.providers[Q],X.lastUsedProvider===Q)delete X.lastUsedProvider;return $.write(X),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let J={...$.getProviderSettings(Q)??{},provider:Q};for(let X of["apiKey","baseUrl","model","region"])if(Object.hasOwn(Z,X)&&typeof Z[X]==="string")if(Z[X].trim().length===0)delete J[X];else J[X]=Z[X];for(let X of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(Z,X))J[X]=Z[X];for(let X of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(Z,X)&&Z[X]!=null){let Y=HA(J[X],Z[X]);if(Y)J[X]=Y;else delete J[X]}return $.saveProviderSettings(J,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function kk($,Z){let Q=Z.trim(),W=$.getProviderSettings(Q),X=M0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,Y=W?.baseUrl?.trim()||X?.baseUrl?.trim(),j=t4(Y,X?.baseUrl,X?.modelsSourceUrl);if(!W||!X||!Y||!j)return{providerId:Q,refreshed:!1};let V=await jA($,{providerId:Q,name:X.name,baseUrl:Y,apiKey:W.apiKey,headers:W.headers??null,timeoutMs:W.timeout??null,modelsSourceUrl:j,protocol:W.protocol??X.protocol??null,client:W.client??X.client??null,capabilities:W.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:V.modelsCount}}function Ik($){let Z=$.trim().toLowerCase(),Q=B0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function xk($,Z,Q,W){let J=B0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let X=m4({onPrompt:async(Y)=>Y.defaultValue??"",openUrl:Q,onOpenUrlError:({error:Y})=>{throw Y instanceof Error?Y:Error(String(Y))}});return J.login({settings:Z,callbacks:X,telemetry:W})}function gk($,Z,Q,W,J){return X8({manager:$,providerId:Z,settings:Q,credentials:W,setLastUsed:J?.setLastUsed})}async function mk($,Z,Q,W){let J=m4({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return wZ($,Z,{callbacks:J,telemetry:W})}function vk($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}import*as p9 from"@cline/llms";var ck=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],uk={"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 dk($,Z){let Q={};for(let W of ck){let J=$[W],X=Z[W];if(J||X)Q[W]={...J,...X}}return Q}function lk($){let Z=uk[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:dk($.fields,Z.fields)}}var pk=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function rk($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return pk.has($)}function ik($){let Z=p9.normalizeProviderId($);if(J8(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=p9.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:Z,authMethod:"local",fields:{}};let W=Q?.provider.baseUrl,J={apiKey:{}};if(rk(Z,Q))J.baseUrl={defaultValue:W};return lk({providerId:Z,authMethod:"api-key",fields:J})}S9();G0();q9();import{appendFileSync as nk,existsSync as VJ,mkdirSync as ak,readFileSync as sk,renameSync as ok,unlinkSync as tk,writeFileSync as ek}from"node:fs";import{join as HJ}from"node:path";import{resolveTeamDataDir as $I}from"@cline/shared/storage";function ZI($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class BA{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=ZI($.teamName),Q=$.baseDir?.trim()||$I();this.dirPath=HJ(Q,Z),this.statePath=HJ(this.dirPath,"state.json"),this.taskHistoryPath=HJ(this.dirPath,"task-history.jsonl")}loadState(){if(!VJ(this.statePath))return;try{let $=sk(this.statePath,"utf8"),Z=JSON.parse($);if(Z.version!==1||!Z.teamState)return;for(let Q of Z.teammates??[])this.teammateSpecs.set(Q.agentId,Q);return zB(Z.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 Z={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Q=`${this.statePath}.tmp`;ek(Q,`${JSON.stringify(Z,null,2)}
751
+ `,"utf8"),ok(Q,this.statePath)}appendTaskHistory($){let Z={};switch($.type){case"team_task_updated":Z=$.task;break;case"team_message":Z={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":Z={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":Z={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":Z={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":Z={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),nk(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:Z})}
752
+ `,"utf8")}ensureDir(){if(!VJ(this.dirPath))ak(this.dirPath,{recursive:!0})}hasPersistableState($){let Z=$.exportState();if(this.teammateSpecs.size>0)return!0;if(Z.members.some((Q)=>Q.role==="teammate"))return!0;return Z.tasks.length>0||Z.mailbox.length>0||Z.missionLog.length>0}clearPersistedState(){if(VJ(this.statePath))tk(this.statePath)}}import{z as S}from"zod";var GA=S.object({workspaceRoot:S.string().min(1),cwd:S.string().optional(),provider:S.string().min(1),model:S.string().min(1),mode:S.enum(["act","plan"]).default("act"),apiKey:S.string(),systemPrompt:S.string().optional(),rules:S.string().optional(),maxIterations:S.number().int().positive().optional(),enableTools:S.boolean(),enableSpawn:S.boolean().optional(),enableTeams:S.boolean().optional(),autoApproveTools:S.boolean().optional(),missionStepInterval:S.number().int().positive().optional(),missionTimeIntervalMs:S.number().int().positive().optional()}),KA=S.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),FA=S.enum(["user","assistant","tool","system","status","error"]),AA=S.object({id:S.string().min(1),sessionId:S.string().nullable(),role:FA,content:S.string(),createdAt:S.number().int().nonnegative(),meta:S.object({stream:S.enum(["stdout","stderr"]).optional(),toolName:S.string().optional(),iteration:S.number().int().nonnegative().optional(),agentId:S.string().optional(),conversationId:S.string().optional(),hookEventName:S.string().optional(),inputTokens:S.number().int().nonnegative().optional(),outputTokens:S.number().int().nonnegative().optional(),checkpoint:S.object({ref:S.string(),createdAt:S.number().int().nonnegative(),runCount:S.number().int().positive(),kind:S.enum(["stash","commit"]).optional()}).optional()}).optional()}),fA=S.object({toolCalls:S.number().int().nonnegative(),tokensIn:S.number().int().nonnegative(),tokensOut:S.number().int().nonnegative()}),QI=S.object({sessionId:S.string().nullable(),status:KA,config:GA,messages:S.array(AA),rawTranscript:S.string(),error:S.string().nullable(),summary:fA});var WI=fH;import{Agent as C$0,createAgentRuntime as P$0}from"@cline/agents";import{getClineEnvironmentConfig as JI}from"@cline/shared";var XI=5000,UA={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 YI($){return{recommended:$.recommended.map((Z)=>({...Z,tags:[...Z.tags]})),free:$.free.map((Z)=>({...Z,tags:[...Z.tags]})),clinePass:$.clinePass.map((Z)=>({...Z,tags:[...Z.tags]}))}}function BJ($){if(!$||typeof $!=="object")return null;let Z=$;if(typeof Z.id!=="string"||Z.id.length===0)return null;return{id:Z.id,name:typeof Z.name==="string"&&Z.name.length>0?Z.name:Z.id,description:typeof Z.description==="string"?Z.description:"",tags:Array.isArray(Z.tags)?Z.tags.filter((Q)=>typeof Q==="string"):[]}}function jI($){if(!$||typeof $!=="object")return null;let Z=$,Q=Array.isArray(Z.recommended)?Z.recommended:[],W=Array.isArray(Z.free)?Z.free:[],J=Array.isArray(Z.clinePass)?Z.clinePass:[],X=Q.map(BJ).filter((V)=>V!==null),Y=W.map(BJ).filter((V)=>V!==null),j=J.map(BJ).filter((V)=>V!==null);if(X.length===0&&Y.length===0&&j.length===0)return null;return{recommended:X,free:Y,clinePass:j}}function VI($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=JI().apiBaseUrl;try{return($.providerSettingsManager??new Y$).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function HI($,Z,Q){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await $(Z,{signal:W.signal})}finally{clearTimeout(J)}}async function BI($={}){try{let Z=VI($),Q=$.fetchImpl??fetch,W=await HI(Q,`${Z}/api/v1/ai/cline/recommended-models`,$.timeoutMs??XI);if(!W.ok)throw Error(`HTTP ${W.status}`);let J=await W.json(),X=jI(J);if(X)return X}catch{}return YI(UA)}import{readFile as GI}from"node:fs/promises";import KI from"node:path";function FI($){return $}async function AI($){let Z=KI.resolve($),Q=await GI(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(J){let X=J instanceof Error?J.message:String(J);throw Error(`Failed to parse JSON config at "${Z}": ${X}`)}return fI(W,Z)}function fI($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let W=$.providers;if(!Array.isArray(W))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!W.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}import{BUILT_IN_PROVIDER_IDS as _A,createHandler as LI,createHandlerAsync as _I,getProviderCollection as zI,hasProvider as zA,registerAsyncHandler as TI,registerHandler as OI,registerModel as qI,registerProvider as TA}from"@cline/llms";function DA($){return $?{...$}:{}}function UI($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function DI($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function LA($){let Z=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:Z,defaultModel:$.collection.provider.defaultModelId,modelCount:Z.length}}class GJ{providers=new Map;register($){DI($.id,$.models);let Z=$.defaultModel??$.models[0];if(!Z)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(Z))throw Error(`Default model "${Z}" is not included in configured models for "${$.id}".`);let Q=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Q?.models??[],...$.models]),defaultModel:Z,defaults:{...Q?.defaults??{},...DA($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:UI($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...DA($.settings)}})}registerModel($,Z){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([Z]),defaultModel:Z,defaults:{}});return}Q.models.add(Z)}createHandlerConfig($){let Z=this.require($.providerId),Q=$.modelId??Z.defaultModel;if(!Z.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...Z.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($,Z){return this.providers.get($)?.models.has(Z)??!1}require($){let Z=this.providers.get($);if(!Z)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return Z}}class KJ{configuredProviders=new GJ;constructor($){this.applyConfig($)}createHandler($){return LI(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return _I(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(TA($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)OI($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)TI($.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 Z=$.exposeModels??Object.keys($.models),Q=$.defaultModel??Z[0];if(!Q)throw Error(`Provider "${$.id}" must define a default model.`);TA({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Q,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:Z,defaultModel:Q,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){qI($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[..._A]}async getBuiltInProviders(){return(await Promise.all(_A.map((Z)=>zI(Z)))).filter((Z)=>Z!==void 0).map((Z)=>LA({collection:Z}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,Z){return this.configuredProviders.hasModel($,Z)}applyConfig($){for(let Z of $.providers)this.configuredProviders.registerSelectionConfig(Z);for(let Z of $.models??[])this.registerModel(Z);for(let Z of $.customProviders??[])this.registerProvider(Z);for(let Z of this.configuredProviders.list()){let Q=zA(Z.id),W=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,J=typeof W==="string"&&zA(W);if(!Q&&!J)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function MI($){return new KJ($)}V3();async function p00(){return Promise.resolve().then(() => (S9(),LF))}export{qH as writeHubDiscovery,G1 as writeGlobalSettings,MH as withHubStartupLock,o1 as verifyHubConnection,U1 as updateMcpSettingsFileSync,Y5 as updateMcpSettingsFile,eQ as updateMcpServerOAuthStateAsync,h8 as updateMcpServerOAuthState,jA as updateLocalProvider,n3 as uninstallPlugin,IF as uninstallMarketplaceSkill,xF as uninstallMarketplacePlugin,hF as uninstallMarketplaceMcpServerFromSettings,Ph as uninstallMarketplaceEntry,F3 as truncateNotificationBody,U8 as truncateCommandOutput,cZ as toggleDisabledTool,g5 as toTeamProgressLifecycleEvent,B1 as toProviderConfig,cM as toHubStatusUrl,RH as toHubHealthUrl,SW as toHookConfigFileName,m3 as syncPluginMcpServersToSettings,l5 as summarizeUsageFromMessages,aR as stopLocalHubServerGracefully,H1 as startLocalOAuthServer,y3 as startHubWebSocketServer,He as startHubServer,oA as startClineDeviceAuth,j7 as splitCoreSessionConfig,R5 as spawnDetachedHubServerWithRetry,ER as spawnDetachedHubServer,gU as setTelemetryOptOutGlobally,b8 as setMcpServerDisabled,LX as setDisabledTools,pU as setDisabledPlugin,uU as setCompactionStrategyGlobally,vU as setAutoUpdateEnabledGlobally,ps as sendHubCommand,X8 as saveProviderOAuthCredentials,hk as saveLocalProviderSettings,gk as saveLocalProviderOAuthCredentials,s8 as sanitizeSessionToken,HX as safeParseSettings,fU as safeCreateProviderConfig,F9 as runSubprocessEvent,f9 as runHook,yj as reviveTeamStateDates,uH as restartLocalHubIfIdleAfterStartupTimeout,cd as resolveWorkspaceHubOwnerContext,LQ as resolveWorkflowsConfigSearchPaths,UQ as resolveSkillsConfigSearchPaths,_1 as resolveSharedHubOwnerContext,RP as resolveSessionBackend,DQ as resolveRulesConfigSearchPaths,kZ as resolveProviderConfig,bf as resolveProviderApiKeyFromSettings,s1 as resolveProductionHubOwnerContext,T$ as resolvePluginSkillDirectoriesFromPaths,WQ as resolvePluginConfigSearchPaths,$1 as resolveMcpServerRegistrations,o3 as resolveMarketplaceMcpServerName,vk as resolveLocalClineAuthToken,yS as resolveHubUrl,x$ as resolveHubOwnerContext,a1 as resolveHubEndpointOptions,OH as resolveHubBuildId,CW as resolveHooksConfigSearchPaths,K1 as resolveDisabledToolNames,B6 as resolveDisabledPluginPaths,Z0 as resolveDefaultMcpSettingsPath,q5 as resolveDefaultHubPort,tM as resolveDefaultHubPathname,oM as resolveDefaultHubHost,xj as resolveCoreSelectedToolIds,m0 as resolveCoreDistinctId,a7 as resolveCompatibleLocalHubUrl,Sd as resolveClineDir,W4 as resolveClineDataDir,L6 as resolveAndLoadAgentPlugins,z$ as resolveAgentPluginPaths,l7 as requestHubShutdown,Ry as requestDesktopToolApproval,v3 as removePluginMcpServersFromSettings,k2 as rememberRecoverableLocalHubUrl,TF as registerRemoteConfigSessionBlobUpload,k8 as registerMcpServersFromSettingsFile,T10 as registerDisposable,kk as refreshProviderModelsFromSource,bJ as refreshOpenAICodexToken,vJ as refreshOcaToken,PJ as refreshClineToken,O4 as readSessionCheckpointHistory,fy as readRemoteConfigSessionBlobUploadMetadata,A0 as readHubDiscovery,D0 as readGlobalSettings,cU as readCompactionStrategyGlobally,FF as readBearerToken,g$ as probeHubServer,ls as probeHubConnection,hY as prewarmFileIndex,bH as prewarmDetachedHubServer,Ly as prepareRemoteConfigCoreIntegration,fQ as parseWorkflowConfigFromMarkdown,z10 as parseUserCommandEnvelope,FQ as parseSkillConfigFromMarkdown,VX as parseSettings,AQ as parseRuleConfigFromMarkdown,aF as parsePluginSource,k3 as parseMcpInstallArgs,A9 as parseHookEventPayload,WW as parseConfiguredAgentConfig,b$ as normalizeWorkspacePath,_10 as normalizeUserInput,L10 as normalizeSdkError,O0 as normalizeRuntimeCapabilities,X6 as normalizeProviderId,Ik as normalizeOAuthProvider,I2 as normalizeHubWebSocketUrl,D10 as noopBasicLogger,cW as migrateLegacyProviderSettings,R6 as mergeRulesForSystemPrompt,_4 as mergeAgentHooks,wh as marketplaceEntryKey,C7 as makeTeamTaskSubSessionId,L5 as makeSubSessionId,_Z as loginOpenAICodex,RZ as loginOcaOAuth,xk as loginLocalProvider,DZ as loginClineOAuth,wZ as loginAndSaveProviderOAuthCredentials,mk as loginAndSaveLocalProviderOAuthCredentials,p00 as loadOpenTelemetryAdapter,S8 as loadMcpSettingsFile,AI as loadLlmsConfigFromFile,h5 as loadConfiguredAgentConfigs,B8 as loadAgentPluginsFromPathsWithDiagnostics,yX as loadAgentPluginsFromPaths,oZ as loadAgentPluginFromPath,EM as listSessionHistoryFromBackend,qV as listPluginToolsWithDiagnostics,X7 as listPluginTools,$7 as listMcpServerOAuthStatuses,bk as listLocalProviders,c2 as listHookConfigFiles,dU as isToolDisabledGlobally,vZ as isTelemetryOptedOutGlobally,S$ as isSessionNotFoundError,tX as isRuleEnabled,lU as isPluginDisabledGlobally,nF as isOfficialPluginSlug,J8 as isOAuthProvider,kF as isMarketplaceSkillInstalled,Vy as isLocalHubOrigin,AF as isLocalHubHostName,uR as isHubReconnectableTransportError,vH as isHubCommandTimeoutError,hd as isDiscoveryFilePresent,W10 as isClineOrgIndividualInferenceSubscriptionMessage,Q10 as isClineOrgIndividualInferenceSubscriptionError,Z10 as isClineNotSubscribedMessage,$10 as isClineNotSubscribedError,DJ as isClineAccountActionRequest,GU as isBuiltInProviderId,mU as isAutoUpdateEnabledGlobally,Uk as installPlugin,by as installMcpServer,b1 as identifyAccount,C$ as hasMcpSettingsFile,zZ as getValidOpenAICodexCredentials,EZ as getValidOcaCredentials,LZ as getValidClineCredentials,CZ as getProviderOAuthCredentialsFromSettings,ik as getProviderConfigFields,oJ as getProviderConfig,Sf as getProviderAuthStorageId,B0 as getProviderAuthHandler,s4 as getPersistedProviderApiKey,y8 as getMcpServerOAuthState,t3 as getMarketplaceSkillCandidates,yk as getLocalProviderModels,J6 as getLiveModelsCatalog,e3 as getGlobalMarketplaceSkillPaths,M$ as getFileIndex,Qw as getCurrentContextSize,pQ as getCoreHeadlessToolNames,Ij as getCoreDefaultEnabledToolIds,N8 as getCoreBuiltinToolCatalog,gj as getCoreAcpToolNames,e00 as getClinePassSubscriptionUrl,o00 as getClineOrgIndividualInferenceSubscriptionMessage,t00 as getClineNotSubscribedMessage,X10 as getClineDefaultSystemPrompt,K7 as generateWorkspaceInfoWithDiagnostics,U5 as generateWorkspaceInfo,M6 as formatRulesForSystemPrompt,yf as formatProviderOAuthApiKey,U10 as formatDisplayUserInput,$J as findInstalledGlobalMarketplaceSkillName,J9 as findCheckpointForRun,dZ as filterExtensionToolRegistrations,k1 as filterDisabledTools,uZ as filterDisabledPluginPaths,BI as fetchClineRecommendedModels,LJ as executeClineAccountAction,fF as ensureHubWebSocketServer,Be as ensureHubServer,td as ensureDetachedHubServer,qG as ensureCustomProvidersLoaded,X4 as ensureCompatibleLocalHubUrl,l6 as enrichPromptWithMentions,F10 as emptyWorkspaceManifest,u2 as emptyStoredProviderSettings,JQ as discoverPluginModulePaths,cy as disablePluginMcpServersInSettings,P7 as deriveSubsessionStatus,VA as deleteLocalProvider,FI as defineLlmsConfig,TQ as createWorkflowsConfigDefinition,w2 as createUserInstructionConfigService,mY as createToolPoliciesWithPreset,K10 as createTool,cG as createTeamName,VK as createSubprocessHooks,N2 as createSpawnAgentTool,_Q as createSkillsConfigDefinition,MQ as createShellTool,D8 as createShellExecutor,G9 as createSessionHost,G9 as createRuntimeHost,zQ as createRulesConfigDefinition,Dy as createRemoteConfigSessionMessagesArtifactUploader,AU as createProviderConfig,T9 as createOpenTelemetryTelemetryService,m4 as createOAuthClientCallbacks,F5 as createMcpTools,Wo as createLocalHubScheduleRuntimeHandlers,MI as createLlmsSdk,_0 as createInitialAccumulatedUsage,yd as createInMemoryHubOwnerContext,L1 as createHubServerUrl,TH as createHubAuthToken,kW as createHookConfigFileHooks,s5 as createHookConfigFileExtension,a5 as createHookAuditHooks,J7 as createDisabledMcpToolPolicy,zV as createDisabledMcpToolPolicies,R2 as createDelegatedAgentConfigProvider,E2 as createDelegatedAgent,vY as createDefaultToolsWithPreset,T2 as createDefaultTools,CQ as createDefaultShellExecutor,G5 as createDefaultMcpServerClientFactory,n6 as createDefaultExecutors,v8 as createCoreSettingsService,t1 as createCoreSessionSnapshot,G10 as createContributionRegistry,EW as createContextCompactionPrepareTurn,s$ as createConfiguredTelemetryService,O9 as createConfiguredTelemetryHandle,I5 as createConfiguredAgentTools,B10 as createClineTelemetryServiceMetadata,H10 as createClineTelemetryServiceConfig,$K as createCheckpointComparePlan,w8 as createBuiltinTools,E8 as createAgentTeamsTools,P$0 as createAgentRuntime,p5 as createAgentHooksExtension,FK as connectToHub,tA as completeClineDeviceAuth,J3 as compareCheckpointToWorkspace,eF as collectPluginMcpOAuthCandidates,VU as clearPrivateModelsCatalogCache,jU as clearLiveModelsCatalogCache,a0 as clearHubDiscovery,IA as captureWorkspacePathResolved,o9 as captureWorkspaceInitialized,t9 as captureWorkspaceInitError,Q8 as captureToolUsage,ZZ as captureTokenUsage,$Z as captureTaskRestarted,e9 as captureTaskCreated,c4 as captureTaskCompleted,d4 as captureSubagentExecution,WZ as captureSkillUsed,V10 as captureSdkError,xA as captureProviderConfigured,u4 as captureProviderApiError,QZ as captureModeSwitch,XZ as captureMentionUsed,jZ as captureMentionSearchResults,YZ as captureMentionFailed,HZ as captureHookDiscovery,kA as captureExtensionActivated,JZ as captureDiffEditFailure,Z8 as captureConversationTurnEvent,GZ as captureCompactionSkipped,BZ as captureCompactionExecuted,P1 as captureAuthSucceeded,C1 as captureAuthStarted,A$ as captureAuthLoggedOut,S1 as captureAuthFailed,PA as captureAgentUnexpectedReasoningTokens,VZ as captureAgentTeamCreated,f$ as captureAgentCreated,F7 as buildWorkspaceMetadata,x5 as buildTeamProgressSummary,Y10 as buildSdkErrorProperties,_F as buildRemoteConfigSessionBlobUploadMetadata,MF as buildMcpInstallTransport,M8 as buildDelegatedAgentConfig,XW as buildConfiguredAgentToolName,YW as buildConfiguredAgentToolDescriptors,ZK as buildCheckpointWorkspaceDiff,Q5 as bootstrapAgentTeams,VV as authorizeMcpServerOAuth,Sk as addLocalProvider,f0 as accumulateUsageTotals,HQ as WORKFLOWS_CONFIG_DIRECTORY_NAME,j8 as UnifiedConfigFileWatcher,e0 as ToolPresets,P4 as TelemetryService,z9 as TelemetryLoggerSink,Z5 as TEAM_TOOL_NAMES,K6 as SubprocessSandbox,f8 as StructuredCommandInputSchema,o5 as StoredProviderSettingsSchema,WG as StoredProviderSettingsEntrySchema,q4 as SqliteTeamStore,Z$ as SqliteSessionStore,r2 as SessionVersioningService,s0 as SessionVersioningError,T0 as SessionSource,P$ as SessionNotFoundError,XX as SapSettingsSchema,VQ as SKILLS_CONFIG_DIRECTORY_NAME,gZ as SESSION_STATUSES,c8 as SESSION_NOT_FOUND_ERROR_CODE,O10 as SDK_ERROR_TELEMETRY_EVENT,s9 as RpcClineAccountService,C5 as RemoteRuntimeHost,ZX as ReasoningSettingsSchema,pX as RULES_CONFIG_DIRECTORY_NAME,zF as REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY,H2 as ProviderSettingsSchema,Y$ as ProviderSettingsManager,tJ as ProviderProtocolSchema,xZ as ProviderIdSchema,eJ as ProviderClientSchema,S4 as OpenTelemetryProvider,YX as OcaSettingsSchema,hZ as OPENAI_COMPATIBLE_PROVIDERS,z1 as NodeHubClient,w4 as NoOpFeatureFlagsProvider,w3 as NativeHubTransportAdapter,jX as ModelCatalogSettingsSchema,J5 as McpSettingsUpdateSkippedError,C2 as McpSettingsMutatorPurityError,P2 as McpSettingsLockTimeoutError,q$ as MAX_COMMAND_OUTPUT_CHARS,j$ as LocalRuntimeHost,i00 as Llms,t5 as InMemoryWorkspaceManager,I8 as InMemoryMcpManager,gS as HubUIClient,g0 as HubTransportError,xS as HubSessionClient,P9 as HubServerTransport,_9 as HubScheduleService,U9 as HubScheduleCommandService,u$ as HubRuntimeHost,E5 as HubCommandError,YK as HookEventPayloadSchema,XK as HookEventNameSchema,r5 as HookConfigFileName,PW as HOOK_CONFIG_FILE_EVENT_MAP,nB as HOOKS_CONFIG_DIRECTORY_NAME,H6 as GlobalSettingsSchema,WX as GcpSettingsSchema,BA as FileTeamPersistenceStore,N4 as FeatureFlagsService,f10 as FeatureFlagDefaultValue,A10 as FEATURE_FLAGS,UA as FALLBACK_CLINE_RECOMMENDED_MODELS,L0 as DefaultToolNames,V9 as DefaultRuntimeBuilder,KJ as DefaultLlmsSdk,nJ as DEFAULT_MODELS_CATALOG_URL,aM as DEFAULT_HUB_PORT,sM as DEFAULT_HUB_PATHNAME,nM as DEFAULT_HUB_HOST,h2 as CoreSettingsService,Q$ as CoreSessionService,j10 as ContributionRegistry,s00 as ClineOrgIndividualInferenceSubscriptionError,a00 as ClineNotSubscribedError,Y3 as ClineCore,a9 as ClineAccountService,QI as ChatViewStateSchema,fA as ChatSummarySchema,KA as ChatSessionStatusSchema,GA as ChatSessionConfigSchema,AA as ChatMessageSchema,FA as ChatMessageRoleSchema,I as CORE_TELEMETRY_EVENTS,WI as CORE_BUILD_VERSION,N3 as BrowserWebSocketHubAdapter,BU as BUILT_IN_PROVIDER_IDS,IZ as BUILT_IN_PROVIDER,JX as AzureSettingsSchema,QX as AwsSettingsSchema,$X as AuthSettingsSchema,B4 as AgentTeamsRuntime,VW as AgentTeam,C$0 as Agent,U2 as ALL_DEFAULT_TOOL_NAMES};