@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.
@@ -1,7 +1,7 @@
1
1
  import{createRequire as MD}from"node:module";var{defineProperty:WW,getOwnPropertyNames:TD}=Object;var Jj=Object.prototype.hasOwnProperty;function Xj($){return this[$]}var R=($,Z,Q)=>{var W=TD(Z);for(let J of W)if(!Jj.call($,J)&&J!=="default")WW($,J,{get:Xj.bind(Z,J),enumerable:!0});if(Q){for(let J of W)if(!Jj.call(Q,J)&&J!=="default")WW(Q,J,{get:Xj.bind(Z,J),enumerable:!0});return Q}};var OD=($)=>$;function qD($,Z){this[$]=OD.bind(null,Z)}var N=($,Z)=>{for(var Q in Z)WW($,Q,{get:Z[Q],enumerable:!0,configurable:!0,set:qD.bind(Z,Q)})};var p$=($,Z)=>()=>($&&(Z=$($=0)),Z);var Yj=MD(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as RD,captureAgentUnexpectedReasoningTokens as Vj,SDK_ERROR_TELEMETRY_EVENT as ED}from"@cline/shared";function i($,Z,Q){$?.capture({event:Z,properties:Q})}function f9($){if(!$)return;return $.substring(0,ND)}function CD($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function wD($){return typeof $==="string"?$:$.message}function jj($,Z){return $.some((Q)=>Z.has(Q.trim().toLowerCase()))}function Hj($){i($,g.CLIENT.EXTENSION_ACTIVATED)}function U9($,Z){let Q=[...Z.vcs_types],W={root_count:Z.root_count,vcs_types:Q,is_multi_root:Z.root_count>1,has_git:jj(Q,new Set(["git"])),has_mercurial:jj(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;i($,g.WORKSPACE.INITIALIZED,W)}function D9($,Z,Q){i($,g.WORKSPACE.INIT_ERROR,{error_type:CD(Z),error_message:f9(wD(Z)),fallback_to_single_root:Q.fallback_to_single_root,workspace_count:Q.workspace_count??0})}function Bj($,Z){i($,g.WORKSPACE.PATH_RESOLVED,{...Z})}function C1($,Z){i($,g.USER.AUTH_STARTED,{provider:Z})}function w1($,Z){i($,g.USER.AUTH_SUCCEEDED,{provider:Z})}function P1($,Z,Q){i($,g.USER.AUTH_FAILED,{provider:Z,errorMessage:f9(Q)})}function X$($,Z,Q){i($,g.USER.AUTH_LOGGED_OUT,{provider:Z,reason:Q})}function Gj($,Z){i($,g.USER.PROVIDER_CONFIGURED,{provider:Z})}function Kj($,Z){$?.captureRequired(g.USER.TELEMETRY_OPT_OUT,Z)}function S1($,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 L9($,Z){i($,g.TASK.CREATED,Z)}function _9($,Z){i($,g.TASK.RESTARTED,Z)}function S4($,Z){i($,g.TASK.COMPLETED,Z)}function t2($,Z){i($,g.TASK.CONVERSATION_TURN,{...Z,timestamp:new Date().toISOString()})}function z9($,Z){i($,g.TASK.TOKEN_USAGE,Z)}function T9($,Z,Q){i($,g.TASK.MODE_SWITCH,{ulid:Z,mode:Q})}function e2($,Z){i($,g.TASK.TOOL_USED,Z)}function O9($,Z){i($,g.TASK.SKILL_USED,Z)}function q9($,Z){i($,g.TASK.DIFF_EDIT_FAILED,Z)}function b4($,Z){i($,g.TASK.PROVIDER_API_ERROR,{...Z,errorMessage:f9(Z.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function Fj($,Z){i($,g.SDK.TOOL_TIMEOUT,PD(Z))}function PD($){let Z={};for(let[Q,W]of Object.entries($))if(W!==void 0)Z[Q]=W;return Z}function M9($,Z,Q){i($,g.TASK.MENTION_USED,{mentionType:Z,contentLength:Q,timestamp:new Date().toISOString()})}function R9($,Z,Q,W){i($,g.TASK.MENTION_FAILED,{mentionType:Z,errorType:Q,errorMessage:f9(W),timestamp:new Date().toISOString()})}function E9($,Z,Q,W,J){i($,g.TASK.MENTION_SEARCH_RESULTS,{queryLength:Z.length,resultCount:Q,searchType:W,isEmpty:J,timestamp:new Date().toISOString()})}function Y$($,Z){i($,g.TASK.AGENT_CREATED,{...Z,timestamp:new Date().toISOString()})}function N9($,Z){i($,g.TASK.AGENT_TEAM_CREATED,{...Z,timestamp:new Date().toISOString()})}function y4($,Z){i($,Z.event==="ended"?g.TASK.SUBAGENT_COMPLETED:g.TASK.SUBAGENT_STARTED,{...Z,timestamp:new Date().toISOString()})}function C9($,Z,Q,W){i($,g.HOOKS.DISCOVERY_COMPLETED,{hookName:Z,globalCount:Q,workspaceCount:W,totalCount:Q+W,timestamp:new Date().toISOString()})}function w9($,Z){i($,g.TASK.COMPACTION_EXECUTED,{...Z,timestamp:new Date().toISOString()})}function P9($,Z){i($,g.TASK.COMPACTION_SKIPPED,{...Z,timestamp:new Date().toISOString()})}var ND=500,g;var L0=p$(()=>{g={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:RD},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:ED,TOOL_TIMEOUT:"sdk.tool_timeout"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as Zz,readFileSync as Qz,statSync as Wz,writeFileSync as Jz}from"node:fs";import{dirname as Xz}from"node:path";import{resolveGlobalSettingsPath as nV}from"@cline/shared/storage";import{z as Q2}from"zod";function ZZ(){return F6.parse({})}function jz(){QZ=void 0}function Vz($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function Hz($){let Z;try{Z=Qz($,"utf8")}catch{return ZZ()}try{let Q=F6.safeParse(JSON.parse(Z));return Q.success?Q.data:ZZ()}catch{return ZZ()}}function Bz(){let $=nV(),Z=Wz($,{throwIfNoEntry:!1}),Q=Z?.mtimeMs??0,W=Z?.size??0,J=QZ;if(J&&J.path===$&&J.mtimeMs===Q&&J.size===W)return J;let X=Vz(Z?Hz($):ZZ());return QZ={path:$,mtimeMs:Q,size:W,value:X},QZ}function _0(){return Bz().value}function K1($,Z={}){let Q=nV(),W=_0();Zz(Xz(Q),{recursive:!0});let J=F6.parse($);if(!W.telemetryOptOut&&J.telemetryOptOut)Kj(Z.telemetry);Jz(Q,`${JSON.stringify(J,null,2)}
2
2
  `,"utf8"),jz()}function WZ(){return _0().telemetryOptOut}function aV($,Z={}){K1({..._0(),telemetryOptOut:$},Z)}function sV(){return _0().autoUpdateEnabled}function oV($,Z={}){K1({..._0(),autoUpdateEnabled:$},Z)}function tV(){return _0().compactionStrategy??"basic"}function eV($){K1({..._0(),compactionStrategy:$})}function F1($){return new Set($??_0().disabledTools??[])}function A6($){return new Set($??_0().disabledPlugins??[])}function $H($){return F1().has($)}function JZ($){let Z=_0(),Q=new Set(Z.disabledTools??[]),W=Q.has($);if(W)Q.delete($);else Q.add($);return K1({...Z,disabledTools:[...Q]}),!W}function kW($,Z){let Q=[...new Set($.map((X)=>X.trim()).filter(Boolean))];if(Q.length===0)return;let W=_0(),J=F1(W.disabledTools);for(let X of Q)if(Z)J.add(X);else J.delete(X);K1({...W,disabledTools:[...J]})}function ZH($,Z){return kW([$],Z),Z}function QH($){return A6().has($)}function WH($,Z){let Q=$.trim();if(!Q)return;let W=_0(),J=A6(W.disabledPlugins);if(Z)J.add(Q);else J.delete(Q);K1({...W,disabledPlugins:[...J]})}function XZ($,Z){let Q=A6(Z);if(Q.size===0)return[...$];return $.filter((W)=>!Q.has(W))}function g1($,Z){let Q=F1(Z);if(Q.size===0)return[...$];return $.filter((W)=>!Q.has(W.name))}function YZ($,Z){if(!$||$.length===0)return $;let Q=F1(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 iV,Yz,F6,QZ;var Y1=p$(()=>{L0();iV=Q2.preprocess(($)=>Array.isArray($)?$.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter(Boolean):void 0,Q2.array(Q2.string()).optional()).transform(($)=>{if(!$)return;let Z=[...new Set($)].sort((Q,W)=>Q.localeCompare(W));return Z.length>0?Z:void 0}),Yz=Q2.enum(["basic","agentic"]).catch("basic"),F6=Q2.object({telemetryOptOut:Q2.boolean().default(!1).catch(!1),autoUpdateEnabled:Q2.boolean().default(!0).catch(!0),compactionStrategy:Yz.optional(),disabledTools:iV.optional(),disabledPlugins:iV.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 OH={};N(OH,{normalizeUserMessage:()=>HT,buildInitialUserContent:()=>VT});async function VT($,Z,Q,W){let J=BT(Z),X=await KT(Q,W);if(J.length===0&&!X)return $;let Y=[{type:"text",text:$},...J];if(X)Y.push(...X);return Y}function HT($){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
- `)}function BT($){if(!$||$.length===0)return[];let Z=[];for(let Q of $){let W=GT(Q);if(W)Z.push(W)}return Z}function GT($){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 KT($,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 eG={};N(eG,{updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>l8,updateMcpServerOAuthStateAsync:()=>H5,updateMcpServerOAuthState:()=>O2,setMcpServerDisabled:()=>z2,resolveMcpServerRegistrations:()=>p0,resolveDefaultMcpSettingsPath:()=>$0,registerMcpServersFromSettingsFile:()=>q2,normalizeMcpServerOAuthState:()=>p8,loadMcpSettingsFile:()=>_2,listMcpServerOAuthStatuses:()=>B5,hasMcpSettingsFile:()=>p1,getMcpServerOAuthState:()=>T2,McpSettingsUpdateSkippedError:()=>d8,McpSettingsMutatorPurityError:()=>w$,McpSettingsLockTimeoutError:()=>P$});import{existsSync as gG,mkdirSync as p3,readFileSync as mG,renameSync as n3,rmdirSync as KR,rmSync as r3,statSync as FR,unlinkSync as vG,writeFileSync as cG}from"node:fs";import{randomUUID as AR}from"node:crypto";import{dirname as uG,join as xG}from"node:path";import{setTimeout as fR}from"node:timers/promises";import{resolveMcpSettingsPath as UR}from"@cline/shared/storage";import{z as S}from"zod";function i3($){if(!$)return;if($==="http")return"streamableHttp";return $}function $0(){return UR()}function NR($,Z){p3(uG($),{recursive:!0});let Q=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{cG(Q,Z,{encoding:"utf8",flag:"wx"}),n3(Q,$)}catch(W){try{vG(Q)}catch{}throw W}}function wR($){Atomics.wait(CR,0,0,$)}function PR($){return`${$}.lock`}function rG(){return`${process.pid}.${Date.now()}.${AR()}`}function iG($,Z){p3(uG($),{recursive:!0});let Q=`${$}.tmp.${Z}`;r3(Q,{recursive:!0,force:!0}),p3(Q,{recursive:!0}),cG(xG(Q,`owner.${Z}`),Z,{encoding:"utf8",flag:"wx"});try{return n3(Q,$),{lockDir:$,ownerFile:xG($,`owner.${Z}`)}}catch(W){if(r3(Q,{recursive:!0,force:!0}),gG($))return;throw W}}function nG($,Z){let Q;try{Q=Date.now()-FR($).mtimeMs}catch(J){if(J.code==="ENOENT")return;throw J}if(Q<s3)return;Z.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Q}ms); reclaiming.`,{severity:"warn"});let W=`${$}.stale.${rG()}`;try{n3($,W)}catch(J){if(J.code==="ENOENT")return;throw J}r3(W,{recursive:!0,force:!0})}function SR($){try{vG($.ownerFile)}catch(Z){if(Z.code!=="ENOENT")throw Z}try{KR($.lockDir)}catch(Z){let Q=Z.code;if(Q!=="ENOENT"&&Q!=="ENOTEMPTY"&&Q!=="EEXIST")throw Z}}function aG($){let Z=PR($);if(KQ.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:rG()}}function bR($,Z){let{lockDir:Q,token:W}=aG($),J=Z.timeoutMs??s3,X=Date.now();while(!0){let Y=iG(Q,W);if(Y)return KQ.add(Q),Y;if(Date.now()-X>J)throw new P$(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);nG(Q,Z),wR(pG)}}async function yR($,Z){let{lockDir:Q,token:W}=aG($),J=Z.timeoutMs??s3,X=Date.now();while(!0){let Y=iG(Q,W);if(Y)return KQ.add(Q),Y;if(Date.now()-X>J)throw new P$(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);nG(Q,Z),await fR(pG)}}function sG($,Z,Q){try{let W=hR(Z),J=kR(W,Q);return NR(Z,`${JSON.stringify(W,null,2)}
4
- `),J}finally{KQ.delete($.lockDir),SR($)}}function j1($,Z,Q={}){let W=bR($,Q);return sG(W,$,Z)}async function l8($,Z,Q={}){let W=await yR($,Q);return sG(W,$,Z)}function hR($){let Z=xR($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function kR($,Z){let Q=JSON.stringify($),W=JSON.parse(Q),J=Z(W),X=JSON.stringify(W),Y=Z($);if(JSON.stringify($)!==X)throw new w$("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 w$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return Y}function IR($){let Z=mG($,"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 xR($){try{return IR($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function oG($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function gR($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function _2($={}){let Z=$.filePath??$0(),Q=mG(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=ER.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 p8($){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 mR($){if($===void 0)return;let Z=a3.safeParse($);if(!Z.success)return;return p8(Z.data)}function p1($={}){let Z=$.filePath??$0();return gG(Z)}function p0($={}){let Z=_2($);return Object.entries(Z.mcpServers).map(([Q,W])=>({name:Q,transport:W.transport,disabled:W.disabled,metadata:W.metadata,oauth:W.oauth}))}function z2($){let Z=$.filePath??$0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");j1(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=oG(X,Q);if(!Y)throw Error(`Unknown MCP server: ${Q}`);let j={...Y};if($.disabled)j.disabled=!0;else delete j.disabled;gR(X,Q,j),W.mcpServers=X})}function T2($,Z={}){let Q=_2(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return p8(Q.mcpServers[$]?.oauth)}function tG($,Z){return(Q)=>{let W=Q.mcpServers,J=oG(W,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let X=mR(J.oauth)??{},Y=p8(Z(X));if(Y)J.oauth=Y;else delete J.oauth;return Y??{}}}function O2($,Z,Q={}){let W=Q.filePath??$0();return j1(W,tG($,Z))}async function H5($,Z,Q={}){let W=Q.filePath??$0();return l8(W,tG($,Z))}function B5($={}){return p0($).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 q2($,Z={}){let Q=p0(Z);for(let W of Q)await $.registerServer(W);return Q}var V5,dG,a3,DR,LR,_R,zR,TR,OR,lG,qR,MR,RR,ER,d8,P$,w$,s3=1e4,pG=25,CR,KQ;var FQ=p$(()=>{V5=S.record(S.string(),S.string()),dG=S.record(S.string(),S.unknown()),a3=S.object({clientInformation:S.record(S.string(),S.unknown()).optional(),tokens:S.record(S.string(),S.unknown()).optional(),codeVerifier:S.string().optional(),discoveryState:S.record(S.string(),S.unknown()).optional(),redirectUrl:S.string().url().optional(),lastError:S.string().optional(),lastAuthenticatedAt:S.number().int().positive().optional()}).strip(),DR=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:V5.optional()}),LR=S.object({type:S.literal("sse"),url:S.string().url(),headers:V5.optional()}),_R=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:V5.optional()}),zR=S.discriminatedUnion("type",[DR,LR,_R]),TR=S.object({transport:zR,disabled:S.boolean().optional(),metadata:dG.optional(),oauth:a3.optional()}),OR=S.enum(["stdio","sse","http","streamableHttp"]).optional(),lG=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:OR,disabled:S.boolean().optional(),metadata:dG.optional(),oauth:a3.optional()});qR=lG.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:V5.optional()}).superRefine(($,Z)=>{let Q=$.type??i3($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth})),MR=lG.extend({url:S.string().url(),headers:V5.optional()}).superRefine(($,Z)=>{let Q=$.type??i3($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??i3($.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}}),RR=S.union([TR,qR,MR]),ER=S.object({mcpServers:S.record(S.string(),RR)}).passthrough();d8=class d8 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};P$=class P$ extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};w$=class w$ extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};CR=new Int32Array(new SharedArrayBuffer(4)),KQ=new Set});import{existsSync as tw,mkdirSync as ew,readFileSync as $P,writeFileSync as ZP}from"node:fs";import{resolve as QP}from"node:path";import{resolveSessionDataDir as WP}from"@cline/shared/storage";import{nanoid as JP}from"nanoid";import*as XP from"node-machine-id";function h0($){let Z=$?.trim();if(Z)return Z;let Q=VP();if(Q)return Q;return HP()}function jP(){let $=XP;return $.machineIdSync??$.default?.machineIdSync}function VP(){try{let $=jP();if(!$)return;return $().trim()||void 0}catch{return}}function HP(){let $=WP(),Z=QP($,YP);try{if(tw(Z)){let W=$P(Z,"utf8").trim();if(W.length>0)return W}}catch{}let Q=`cl-${JP()}`;try{ew($,{recursive:!0}),ZP(Z,Q,"utf8")}catch{}return Q}var YP="machine-id";var Z4=()=>{};class d5{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(hS(V)){J[H]=V;continue}try{J[H]=JSON.stringify(V)}catch{J[H]=String(V)}}return J}}function hS($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class l5{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 D4{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new l5({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 KX=()=>{};import{metrics as kS,trace as IS}from"@opentelemetry/api";import{logs as xS}from"@opentelemetry/api-logs";import{OTLPLogExporter as gS}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as mS}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as vS}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as cS}from"@opentelemetry/resources";import{BatchLogRecordProcessor as uS,ConsoleLogRecordExporter as dS,LoggerProvider as lS}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as pS,MeterProvider as rS,PeriodicExportingMetricReader as PA}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as iS,ConsoleSpanExporter as nS,SimpleSpanProcessor as aS}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as sS}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as oS,ATTR_SERVICE_VERSION as tS}from"@opentelemetry/semantic-conventions";class SA{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 L4{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=cS({[oS]:$.serviceName??"cline",...$.serviceVersion?{[tS]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)kS.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)xS.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return IS.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new d5({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new D4({...$,adapters:[Z],distinctId:h0($.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=FX(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)=>Zb(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 rS({resource:$,readers:J})}createTracerProvider($){let Z=FX(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=$b(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 sS({resource:$,spanProcessors:J})}createLoggerProvider($){let Z=FX(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((W)=>{let J=eS(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new uS(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 lS({resource:$,processors:Q})}}function p5($){let Z=new L4($),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 $$($){if(WZ())return{telemetry:new SA($)};if($.enabled!==!0)return{telemetry:new D4({...$,distinctId:h0($.distinctId)})};return p5($)}function _4($){let{telemetry:Z,provider:Q}=$$($);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 FX($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function eS($,Z){if($==="console")return new dS;if(!Z.endpoint)return null;let Q=AX(Z.endpoint,"/v1/logs");return new gS({url:Q,headers:Z.headers})}function $b($,Z){if($==="console")return new aS(new nS);if(!Z.endpoint)return null;let Q=AX(Z.endpoint,"/v1/traces");return new iS(new vS({url:Q,headers:Z.headers}))}function Zb($,Z){if($==="console")return new PA({exporter:new pS,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=AX(Z.endpoint,"/v1/metrics");return new PA({exporter:new mS({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function AX($,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 oQ=p$(()=>{Y1();Z4();KX()});var vf={};N(vf,{resolveCoreDistinctId:()=>h0,createOpenTelemetryTelemetryService:()=>p5,createConfiguredTelemetryService:()=>$$,createConfiguredTelemetryHandle:()=>_4,OpenTelemetryProvider:()=>L4,OpenTelemetryAdapter:()=>d5});var H7=p$(()=>{Z4();oQ()});import{AgentRuntimeAbortError as Sg}from"@cline/agents";import{initVcr as bg,resolveClineBuildEnv as yg}from"@cline/shared";import{normalizeProviderId as Cg}from"@cline/llms";var BD={};N(BD,{LocalRuntimeHost:()=>T1});import{readdirSync as _g}from"node:fs";import{homedir as zg}from"node:os";import{isAbsolute as Tg,join as $j,resolve as Zj}from"node:path";import{captureSdkError as n2,createSessionId as Og,isLikelyAuthError as qg,normalizeUserInput as Mg}from"@cline/shared";import{setHomeDirIfUnset as Rg}from"@cline/shared/storage";var uj={};N(uj,{saveProviderOAuthCredentials:()=>n$,resolveProviderApiKeyFromSettings:()=>fW,loginAndSaveProviderOAuthCredentials:()=>c4,isOAuthProvider:()=>i$,getProviderOAuthCredentialsFromSettings:()=>u4,getProviderAuthStorageId:()=>AW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>X8,formatProviderOAuthApiKey:()=>UW});import{getClineEnvironmentConfig as vj}from"@cline/shared";L0();var qj={};N(qj,{startClineDeviceAuth:()=>HW,refreshClineToken:()=>h9,loginClineOAuth:()=>h4,getValidClineCredentials:()=>k4,completeClineDeviceAuth:()=>BW});import{getClineEnvironmentConfig as JW}from"@cline/shared";var Aj={};N(Aj,{startLocalOAuthServer:()=>W1});function SD(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function W1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",W=$.timeoutMs??300000,J=$.successHtml??bD,X=SD(),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 bD=`<!DOCTYPE html>
3
+ `)}function BT($){if(!$||$.length===0)return[];let Z=[];for(let Q of $){let W=GT(Q);if(W)Z.push(W)}return Z}function GT($){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 KT($,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 eG={};N(eG,{updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>l8,updateMcpServerOAuthStateAsync:()=>H5,updateMcpServerOAuthState:()=>O2,setMcpServerDisabled:()=>z2,resolveMcpServerRegistrations:()=>p0,resolveDefaultMcpSettingsPath:()=>$0,registerMcpServersFromSettingsFile:()=>q2,normalizeMcpServerOAuthState:()=>p8,loadMcpSettingsFile:()=>_2,listMcpServerOAuthStatuses:()=>B5,hasMcpSettingsFile:()=>p1,getMcpServerOAuthState:()=>T2,McpSettingsUpdateSkippedError:()=>d8,McpSettingsMutatorPurityError:()=>w$,McpSettingsLockTimeoutError:()=>P$});import{existsSync as gG,mkdirSync as p3,readFileSync as mG,renameSync as n3,rmdirSync as FR,rmSync as r3,statSync as AR,unlinkSync as vG,writeFileSync as cG}from"node:fs";import{randomUUID as fR}from"node:crypto";import{dirname as uG,join as xG}from"node:path";import{setTimeout as UR}from"node:timers/promises";import{resolveMcpSettingsPath as DR}from"@cline/shared/storage";import{z as S}from"zod";function i3($){if(!$)return;if($==="http")return"streamableHttp";return $}function $0(){return DR()}function CR($,Z){p3(uG($),{recursive:!0});let Q=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{cG(Q,Z,{encoding:"utf8",flag:"wx"}),n3(Q,$)}catch(W){try{vG(Q)}catch{}throw W}}function PR($){Atomics.wait(wR,0,0,$)}function SR($){return`${$}.lock`}function rG(){return`${process.pid}.${Date.now()}.${fR()}`}function iG($,Z){p3(uG($),{recursive:!0});let Q=`${$}.tmp.${Z}`;r3(Q,{recursive:!0,force:!0}),p3(Q,{recursive:!0}),cG(xG(Q,`owner.${Z}`),Z,{encoding:"utf8",flag:"wx"});try{return n3(Q,$),{lockDir:$,ownerFile:xG($,`owner.${Z}`)}}catch(W){if(r3(Q,{recursive:!0,force:!0}),gG($))return;throw W}}function nG($,Z){let Q;try{Q=Date.now()-AR($).mtimeMs}catch(J){if(J.code==="ENOENT")return;throw J}if(Q<s3)return;Z.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Q}ms); reclaiming.`,{severity:"warn"});let W=`${$}.stale.${rG()}`;try{n3($,W)}catch(J){if(J.code==="ENOENT")return;throw J}r3(W,{recursive:!0,force:!0})}function bR($){try{vG($.ownerFile)}catch(Z){if(Z.code!=="ENOENT")throw Z}try{FR($.lockDir)}catch(Z){let Q=Z.code;if(Q!=="ENOENT"&&Q!=="ENOTEMPTY"&&Q!=="EEXIST")throw Z}}function aG($){let Z=SR($);if(KQ.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:rG()}}function yR($,Z){let{lockDir:Q,token:W}=aG($),J=Z.timeoutMs??s3,X=Date.now();while(!0){let Y=iG(Q,W);if(Y)return KQ.add(Q),Y;if(Date.now()-X>J)throw new P$(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);nG(Q,Z),PR(pG)}}async function hR($,Z){let{lockDir:Q,token:W}=aG($),J=Z.timeoutMs??s3,X=Date.now();while(!0){let Y=iG(Q,W);if(Y)return KQ.add(Q),Y;if(Date.now()-X>J)throw new P$(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);nG(Q,Z),await UR(pG)}}function sG($,Z,Q){try{let W=kR(Z),J=IR(W,Q);return CR(Z,`${JSON.stringify(W,null,2)}
4
+ `),J}finally{KQ.delete($.lockDir),bR($)}}function j1($,Z,Q={}){let W=yR($,Q);return sG(W,$,Z)}async function l8($,Z,Q={}){let W=await hR($,Q);return sG(W,$,Z)}function kR($){let Z=gR($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function IR($,Z){let Q=JSON.stringify($),W=JSON.parse(Q),J=Z(W),X=JSON.stringify(W),Y=Z($);if(JSON.stringify($)!==X)throw new w$("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 w$("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return Y}function xR($){let Z=mG($,"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 gR($){try{return xR($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function oG($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function mR($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function _2($={}){let Z=$.filePath??$0(),Q=mG(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=NR.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 p8($){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 vR($){if($===void 0)return;let Z=a3.safeParse($);if(!Z.success)return;return p8(Z.data)}function p1($={}){let Z=$.filePath??$0();return gG(Z)}function p0($={}){let Z=_2($);return Object.entries(Z.mcpServers).map(([Q,W])=>({name:Q,transport:W.transport,disabled:W.disabled,metadata:W.metadata,oauth:W.oauth}))}function z2($){let Z=$.filePath??$0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");j1(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=oG(X,Q);if(!Y)throw Error(`Unknown MCP server: ${Q}`);let j={...Y};if($.disabled)j.disabled=!0;else delete j.disabled;mR(X,Q,j),W.mcpServers=X})}function T2($,Z={}){let Q=_2(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return p8(Q.mcpServers[$]?.oauth)}function tG($,Z){return(Q)=>{let W=Q.mcpServers,J=oG(W,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let X=vR(J.oauth)??{},Y=p8(Z(X));if(Y)J.oauth=Y;else delete J.oauth;return Y??{}}}function O2($,Z,Q={}){let W=Q.filePath??$0();return j1(W,tG($,Z))}async function H5($,Z,Q={}){let W=Q.filePath??$0();return l8(W,tG($,Z))}function B5($={}){return p0($).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 q2($,Z={}){let Q=p0(Z);for(let W of Q)await $.registerServer(W);return Q}var V5,dG,a3,LR,_R,zR,TR,OR,qR,lG,MR,RR,ER,NR,d8,P$,w$,s3=1e4,pG=25,wR,KQ;var FQ=p$(()=>{V5=S.record(S.string(),S.string()),dG=S.record(S.string(),S.unknown()),a3=S.object({clientInformation:S.record(S.string(),S.unknown()).optional(),tokens:S.record(S.string(),S.unknown()).optional(),codeVerifier:S.string().optional(),discoveryState:S.record(S.string(),S.unknown()).optional(),redirectUrl:S.string().url().optional(),lastError:S.string().optional(),lastAuthenticatedAt:S.number().int().positive().optional()}).strip(),LR=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:V5.optional()}),_R=S.object({type:S.literal("sse"),url:S.string().url(),headers:V5.optional()}),zR=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:V5.optional()}),TR=S.discriminatedUnion("type",[LR,_R,zR]),OR=S.object({transport:TR,disabled:S.boolean().optional(),metadata:dG.optional(),oauth:a3.optional()}),qR=S.enum(["stdio","sse","http","streamableHttp"]).optional(),lG=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:qR,disabled:S.boolean().optional(),metadata:dG.optional(),oauth:a3.optional()});MR=lG.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:V5.optional()}).superRefine(($,Z)=>{let Q=$.type??i3($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth})),RR=lG.extend({url:S.string().url(),headers:V5.optional()}).superRefine(($,Z)=>{let Q=$.type??i3($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??i3($.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}}),ER=S.union([OR,MR,RR]),NR=S.object({mcpServers:S.record(S.string(),ER)}).passthrough();d8=class d8 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};P$=class P$ extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};w$=class w$ extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};wR=new Int32Array(new SharedArrayBuffer(4)),KQ=new Set});import{existsSync as ew,mkdirSync as $P,readFileSync as ZP,writeFileSync as QP}from"node:fs";import{resolve as WP}from"node:path";import{resolveSessionDataDir as JP}from"@cline/shared/storage";import{nanoid as XP}from"nanoid";import*as YP from"node-machine-id";function h0($){let Z=$?.trim();if(Z)return Z;let Q=HP();if(Q)return Q;return BP()}function VP(){let $=YP;return $.machineIdSync??$.default?.machineIdSync}function HP(){try{let $=VP();if(!$)return;return $().trim()||void 0}catch{return}}function BP(){let $=JP(),Z=WP($,jP);try{if(ew(Z)){let W=ZP(Z,"utf8").trim();if(W.length>0)return W}}catch{}let Q=`cl-${XP()}`;try{$P($,{recursive:!0}),QP(Z,Q,"utf8")}catch{}return Q}var jP="machine-id";var Z4=()=>{};class d5{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(kS(V)){J[H]=V;continue}try{J[H]=JSON.stringify(V)}catch{J[H]=String(V)}}return J}}function kS($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class l5{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 D4{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new l5({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 KX=()=>{};import{metrics as IS,trace as xS}from"@opentelemetry/api";import{logs as gS}from"@opentelemetry/api-logs";import{OTLPLogExporter as mS}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as vS}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as cS}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as uS}from"@opentelemetry/resources";import{BatchLogRecordProcessor as dS,ConsoleLogRecordExporter as lS,LoggerProvider as pS}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as rS,MeterProvider as iS,PeriodicExportingMetricReader as PA}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as nS,ConsoleSpanExporter as aS,SimpleSpanProcessor as sS}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as oS}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as tS,ATTR_SERVICE_VERSION as eS}from"@opentelemetry/semantic-conventions";class SA{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 L4{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=uS({[tS]:$.serviceName??"cline",...$.serviceVersion?{[eS]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)IS.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)gS.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return xS.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new d5({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new D4({...$,adapters:[Z],distinctId:h0($.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=FX(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)=>Qb(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 iS({resource:$,readers:J})}createTracerProvider($){let Z=FX(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=Zb(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 oS({resource:$,spanProcessors:J})}createLoggerProvider($){let Z=FX(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((W)=>{let J=$b(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new dS(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 pS({resource:$,processors:Q})}}function p5($){let Z=new L4($),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 $$($){if(WZ())return{telemetry:new SA($)};if($.enabled!==!0)return{telemetry:new D4({...$,distinctId:h0($.distinctId)})};return p5($)}function _4($){let{telemetry:Z,provider:Q}=$$($);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 FX($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function $b($,Z){if($==="console")return new lS;if(!Z.endpoint)return null;let Q=AX(Z.endpoint,"/v1/logs");return new mS({url:Q,headers:Z.headers})}function Zb($,Z){if($==="console")return new sS(new aS);if(!Z.endpoint)return null;let Q=AX(Z.endpoint,"/v1/traces");return new nS(new cS({url:Q,headers:Z.headers}))}function Qb($,Z){if($==="console")return new PA({exporter:new rS,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=AX(Z.endpoint,"/v1/metrics");return new PA({exporter:new vS({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function AX($,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 oQ=p$(()=>{Y1();Z4();KX()});var vf={};N(vf,{resolveCoreDistinctId:()=>h0,createOpenTelemetryTelemetryService:()=>p5,createConfiguredTelemetryService:()=>$$,createConfiguredTelemetryHandle:()=>_4,OpenTelemetryProvider:()=>L4,OpenTelemetryAdapter:()=>d5});var H7=p$(()=>{Z4();oQ()});import{AgentRuntimeAbortError as bg}from"@cline/agents";import{initVcr as yg,resolveClineBuildEnv as hg}from"@cline/shared";import{normalizeProviderId as wg}from"@cline/llms";var BD={};N(BD,{LocalRuntimeHost:()=>T1});import{readdirSync as zg}from"node:fs";import{homedir as Tg}from"node:os";import{isAbsolute as Og,join as $j,resolve as Zj}from"node:path";import{captureSdkError as n2,createSessionId as qg,isLikelyAuthError as Mg,normalizeUserInput as Rg}from"@cline/shared";import{setHomeDirIfUnset as Eg}from"@cline/shared/storage";var uj={};N(uj,{saveProviderOAuthCredentials:()=>n$,resolveProviderApiKeyFromSettings:()=>fW,loginAndSaveProviderOAuthCredentials:()=>c4,isOAuthProvider:()=>i$,getProviderOAuthCredentialsFromSettings:()=>u4,getProviderAuthStorageId:()=>AW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>X8,formatProviderOAuthApiKey:()=>UW});import{getClineEnvironmentConfig as vj}from"@cline/shared";L0();var qj={};N(qj,{startClineDeviceAuth:()=>HW,refreshClineToken:()=>h9,loginClineOAuth:()=>h4,getValidClineCredentials:()=>k4,completeClineDeviceAuth:()=>BW});import{getClineEnvironmentConfig as JW}from"@cline/shared";var Aj={};N(Aj,{startLocalOAuthServer:()=>W1});function SD(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function W1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",W=$.timeoutMs??300000,J=$.successHtml??bD,X=SD(),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 bD=`<!DOCTYPE html>
5
5
  <html lang="en">
6
6
  <head>
7
7
  <meta charset="utf-8">
@@ -42,7 +42,7 @@ import{createRequire as MD}from"node:module";var{defineProperty:WW,getOwnPropert
42
42
  </div>
43
43
  <script>setTimeout(() => window.close(), 3000);</script>
44
44
  </body>
45
- </html>`;function fj($){let Z="";for(let Q=0;Q<$.length;Q+=1)Z+=String.fromCharCode($[Q]??0);return btoa(Z).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function yD($){let Q=new TextEncoder().encode($),W=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(W)}function hD($=32){let Z=new Uint8Array($);return crypto.getRandomValues(Z),fj(Z)}async function S9(){let $=hD(),Z=fj(await yD($));return{verifier:$,challenge:Z}}function b9($){return $.endsWith("/")?$.slice(0,-1):$}function r$($,Z){return new URL(Z,`${b9($)}/`).toString()}function $8($,Z={}){let Q=$.trim();if(!Q)return{};try{let W=new URL(Q);return{code:W.searchParams.get("code")??void 0,state:W.searchParams.get("state")??void 0,provider:Z.includeProvider?W.searchParams.get("provider")??void 0:void 0}}catch{}if(Z.allowHashCodeState&&Q.includes("#")){let[W,J]=Q.split("#",2);return{code:W||void 0,state:J||void 0}}if(Q.includes("code=")){let W=new URLSearchParams(Q);return{code:W.get("code")??void 0,state:W.get("state")??void 0,provider:Z.includeProvider?W.get("provider")??void 0:void 0}}return{code:Q}}function kD($){if(typeof atob==="function")try{return atob($)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from($,"base64").toString("utf8")}catch{return null}return null}function R0($){if(!$)return null;try{let Z=$.split(".");if(Z.length!==3)return null;let Q=Z[1];if(!Q)return null;let W=Q.replace(/-/g,"+").replace(/_/g,"/"),J=W.padEnd(W.length+(4-W.length%4)%4,"="),X=kD(J);if(!X)return null;return JSON.parse(X)}catch{return null}}function Z8($){try{let Z=JSON.parse($),Q=Z.error,W=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,J=typeof Z.error_description==="string"?Z.error_description:typeof Z.message==="string"?Z.message:Q&&typeof Q==="object"&&typeof Q.message==="string"?Q.message:void 0;return{code:W,message:J}}catch{return{}}}function Q8($,Z){return Date.now()>=$.expires-Z}async function W8($){if(!$.onManualCodeInput){let X=await $.waitForCallback();return{code:X?.code,state:X?.state,provider:X?.provider,error:X?.error}}let Z,Q,W=$.onManualCodeInput().then((X)=>{Z=X,$.cancelWait()}).catch((X)=>{Q=X instanceof Error?X:Error(String(X)),$.cancelWait()}),J=await $.waitForCallback();if(Q)throw Q;if(J?.code||J?.error)return{code:J.code,state:J.state,provider:J.provider,error:J.error};if(Z)return $8(Z,$.parseOptions);if(await W,Q)throw Q;if(Z)return $8(Z,$.parseOptions);return{}}var y9={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},_j={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},XW="https://api.workos.com",ID="/auth",Uj=Array.from({length:11},($,Z)=>48801+Z),xD=300000,gD=30000,J8=30000,mD=300,vD=5;class j$ extends Error{status;errorCode;constructor($,Z){super($);this.name="ClineOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function cD($){let Z=Date.parse($);if(Number.isNaN(Z))throw Error(`Invalid expiresAt value: ${$}`);return Z}function YW($,Z,Q={}){let W=$.userInfo.clineUserId??Q.accountId,J=$.refreshToken??Q.refresh;if(!J)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:J,expires:cD($.expiresAt),accountId:W??void 0,email:$.userInfo.email||Q.email,metadata:{provider:Z,tokenType:$.tokenType,userInfo:$.userInfo}}}async function jW($){if(!$)return{};return typeof $==="function"?await $():$}function Dj($,Z){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return Z;return Math.floor($)}async function Lj($){await new Promise((Z)=>setTimeout(Z,$))}function VW($,Z){if(!$.success||!$.data?.accessToken)throw Error(Z);return $.data}async function zj($,Z){let Q=await fetch(r$(XW,_j.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(Z?.requestTimeoutMs??J8)}),W=await Q.json().catch(()=>({}));if(!Q.ok)throw new j$(`Device authorization failed: ${Q.status}${W.error_description?` - ${W.error_description}`:""}`,{status:Q.status,errorCode:W.error});if(!W.device_code||!W.user_code||!W.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:W.device_code,userCode:W.user_code,verificationUri:W.verification_uri,verificationUriComplete:W.verification_uri_complete,expiresInSeconds:Dj(W.expires_in,mD),pollIntervalSeconds:Dj(W.interval,vD)}}async function Tj($){let Z=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=Z){let W=await fetch(r$($.workosApiBaseUrl,_j.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),J=await W.json().catch(()=>({}));if(W.ok){if(!J.access_token||!J.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:J.access_token,refreshToken:J.refresh_token,tokenType:J.token_type??"Bearer"}}switch(J.error){case"authorization_pending":{await Lj(Q*1000);break}case"slow_down":{Q+=1,await Lj(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new j$(J.error_description||"WorkOS authorization failed",{status:W.status,errorCode:J.error});default:throw new j$(`WorkOS token polling failed: ${W.status}${J.error_description?` - ${J.error_description}`:""}`,{status:W.status,errorCode:J.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function Oj($,Z,Q){let W={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(r$(Z.apiBaseUrl,y9.register),{method:"POST",headers:{"Content-Type":"application/json",...await jW(Z.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Z.requestTimeoutMs??J8)});if(!J.ok){let Y=await J.text().catch(()=>""),j=Z8(Y);throw new j$(`Token registration failed: ${J.status}${j.message?` - ${j.message}`:""}`,{status:J.status,errorCode:j.code})}let X=await J.json();return YW(VW(X,"Invalid token exchange response"),Q??Z.provider)}async function uD($,Z,Q,W){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:Z,provider:W??Q.provider},X=await fetch(r$(Q.apiBaseUrl,y9.token),{method:"POST",headers:{"Content-Type":"application/json",...await jW(Q.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Q.requestTimeoutMs??J8)});if(!X.ok){let j=await X.text().catch(()=>""),V=Z8(j);throw new j$(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let Y=await X.json();return YW(VW(Y,"Invalid token exchange response"),W??Q.provider)}async function h4($){C1($.telemetry,$.provider??"cline");let Z=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:Uj,W=$.callbackPath??ID,J=Z?null:await W1({ports:Q,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=J?.callbackUrl||`http://127.0.0.1:${Q[0]??Uj[0]}${W}`;try{let Y;if(Z){let j=JW().workOsClientId,V=await zj(j,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let H=await Tj({clientId:j,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??J8,workosApiBaseUrl:XW,onProgress:$.callbacks.onProgress});Y=await Oj(H,$,$.provider)}else{let j=new URL(r$($.apiBaseUrl,y9.authorize));j.searchParams.set("client_type","extension"),j.searchParams.set("callback_url",X),j.searchParams.set("redirect_uri",X),$.callbacks.onAuth({url:j.toString(),instructions:"Continue the authentication process in your browser."});let V,H=$.provider,B=await W8({waitForCallback:J?.waitForCallback??(async()=>null),cancelWait:J?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(B.error)throw Error(`OAuth error: ${B.error}`);if(V=B.code,H=B.provider??H,!V){let G=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=$8(G,{includeProvider:!0});V=K.code,H=K.provider??H}if(!V)throw Error("Missing authorization code");Y=await uD(V,X,$,H)}return w1($.telemetry,$.provider??"cline"),S1($.telemetry,{id:Y.accountId,email:Y.email,provider:$.provider??"cline"}),Y}catch(Y){throw P1($.telemetry,$.provider??"cline",Y instanceof Error?Y.message:String(Y)),Y}finally{J?.close()}}async function HW($){return await zj(JW().workOsClientId,$)}async function BW($){let Z=$.provider??"cline";C1($.telemetry,Z);try{let Q=await Tj({clientId:JW().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??J8,workosApiBaseUrl:XW}),W=await Oj(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return w1($.telemetry,Z),S1($.telemetry,{id:W.accountId,email:W.email,provider:Z}),W}catch(Q){throw P1($.telemetry,Z,Q instanceof Error?Q.message:String(Q)),Q}}async function h9($,Z){let Q=await fetch(r$(Z.apiBaseUrl,y9.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await jW(Z.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(Z.requestTimeoutMs??J8)});if(!Q.ok){let X=await Q.text().catch(()=>""),Y=Z8(X);throw new j$(`Token refresh failed: ${Q.status}${Y.message?` - ${Y.message}`:""}`,{status:Q.status,errorCode:Y.code})}let W=await Q.json(),J=$.metadata?.provider??Z.provider;return YW(VW(W,"Invalid token refresh response"),J,$)}async function k4($,Z,Q){if(!$)return null;let W=Q?.refreshBufferMs??xD,J=Q?.retryableTokenGraceMs??gD;if(Q?.forceRefresh!==!0&&!Q8($,W))return $;try{return await h9($,Z)}catch(Y){if(Y instanceof j$&&Y.isLikelyInvalidGrant())return X$(Z.telemetry,Z.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}L0();var Rj={};N(Rj,{refreshOpenAICodexToken:()=>I9,loginOpenAICodex:()=>I4,getValidOpenAICodexCredentials:()=>x4,OPENAI_CODEX_OAUTH_CONFIG:()=>X0});import{nanoid as dD}from"nanoid";var X0={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class k9 extends Error{status;errorCode;constructor($,Z){super($);this.name="OpenAICodexOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function lD($,Z,Q=X0.redirectUri){let W=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:X0.clientId,code:$,code_verifier:Z,redirect_uri:Q}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!W.ok)return{type:"failed"};let J=await W.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}async function pD($){try{let Z=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:X0.clientId}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!Z.ok){let W=await Z.text().catch(()=>""),J=Z8(W);throw new k9(`Token refresh failed: ${Z.status}${J.message?` - ${J.message}`:""}`,{status:Z.status,errorCode:J.code})}let Q=await Z.json();if(!Q.access_token||!Q.refresh_token||typeof Q.expires_in!=="number")return{type:"failed"};return{type:"success",access:Q.access_token,refresh:Q.refresh_token,expires:Date.now()+Q.expires_in*1000,email:Q.email,idToken:Q.id_token}}catch(Z){if(Z instanceof k9)throw Z;return{type:"failed"}}}async function rD($="pi"){let{verifier:Z,challenge:Q}=await S9(),W=dD(32),J=new URL(X0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",X0.clientId),J.searchParams.set("redirect_uri",X0.redirectUri),J.searchParams.set("scope",X0.scopes),J.searchParams.set("code_challenge",Q),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("state",W),J.searchParams.set("id_token_add_organizations","true"),J.searchParams.set("codex_cli_simplified_flow","true"),J.searchParams.set("originator",$),{verifier:Z,state:W,url:J.toString()}}function iD(){try{let $=new URL(X0.redirectUri),Z=$.port.length>0?Number.parseInt($.port,10):X0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(Z)?Z:X0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:X0.callbackPort,callbackPath:"/auth/callback",redirectUri:X0.redirectUri}}}function nD($,Z){let Q=Z?R0(Z):R0($),W=Q?Q:R0($),X=W?.[X0.jwtClaimPath]?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;let Y=W?.organizations;if(Array.isArray(Y)&&Y.length>0){let V=Y[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let j=W?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return null}function Mj($,Z){let Q=nD($.access,$.idToken)??Z?.accountId;if(!Q)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||Z?.refresh||"",expires:$.expires,accountId:Q,email:$.email??Z?.email,metadata:{...Z?.metadata??{},provider:"openai-codex"}}}async function I4($){C1($.telemetry,"openai-codex");let Z=iD(),{verifier:Q,state:W,url:J}=await rD($.originator),X=await W1({host:Z.host,ports:[Z.port],callbackPath:Z.callbackPath,expectedState:W});$.onAuth({url:J,instructions:"Continue the authentication process in your browser."});let Y;try{let j=await W8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(j.state&&j.state!==W)throw Error("State mismatch");if(Y=j.code,!Y){let B=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=$8(B,{allowHashCodeState:!0});if(G.state&&G.state!==W)throw Error("State mismatch");Y=G.code}if(!Y)throw Error("Missing authorization code");let V=await lD(Y,Q,Z.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let H=Mj(V);return w1($.telemetry,"openai-codex"),S1($.telemetry,{id:H.accountId,email:H.email,provider:"openai-codex"}),H}catch(j){throw P1($.telemetry,"openai-codex",j instanceof Error?j.message:String(j)),j}finally{X.close()}}async function I9($,Z){let Q=await pD($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let W=Mj(Q,Z);if(!W.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return W}async function x4($,Z){if(!$)return null;let Q=Z?.refreshBufferMs??X0.refreshBufferMs,W=Z?.retryableTokenGraceMs??X0.retryableTokenGraceMs;if(Z?.forceRefresh!==!0&&!Q8($,Q))return $;try{return await I9($.refresh,$)}catch(X){if(X instanceof k9&&X.isLikelyInvalidGrant())return X$(Z?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}L0();var mj={};N(mj,{refreshOcaToken:()=>v9,loginOcaOAuth:()=>m4,getValidOcaCredentials:()=>v4,OCI_HEADER_OPC_REQUEST_ID:()=>aD,DEFAULT_INTERNAL_OCA_BASE_URL:()=>x9,DEFAULT_INTERNAL_IDCS_URL:()=>Cj,DEFAULT_INTERNAL_IDCS_SCOPES:()=>wj,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>Nj,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>g9,DEFAULT_EXTERNAL_IDCS_URL:()=>Sj,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>bj,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>Pj});import{nanoid as Ej}from"nanoid";class GW{ttlMs;maxEntries;entries=new Map;constructor($,Z){this.ttlMs=$;this.maxEntries=Z}get($,Z=Date.now()){this.pruneExpired(Z);let Q=this.entries.get($);if(!Q)return;return this.entries.delete($),this.entries.set($,Q),Q.value}set($,Z,Q=Date.now(),W=this.ttlMs){this.pruneExpired(Q),this.entries.delete($);while(this.entries.size>=this.maxEntries){let J=this.entries.keys().next().value;if(J===void 0)break;this.entries.delete(J)}this.entries.set($,{value:Z,expiresAt:Q+W})}pruneExpired($){for(let[Z,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(Z)}}var Nj="a8331954c0cf48ba99b5dd223a14c6ea",Cj="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",wj="openid offline_access",x9="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",Pj="c1aba3deed5740659981a752714eba33",Sj="https://login-ext.identity.oraclecloud.com",bj="openid offline_access",g9="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",aD="opc-request-id",sD="/auth/oca",oD=Array.from({length:11},($,Z)=>48801+Z),tD=300000,eD=30000,yj=30000,$L=600000;class m9 extends Error{status;errorCode;constructor($,Z){super($);this.name="OcaOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var V$={internal:{clientId:Nj,idcsUrl:Cj,scopes:wj,baseUrl:x9},external:{clientId:Pj,idcsUrl:Sj,scopes:bj,baseUrl:g9}},g4=new Map,ZL=86400000,QL=300000,WL=32,KW=new GW(ZL,WL);function hj($){if(typeof $==="function")return $();return $??"internal"}function kj($){return{internal:{clientId:$?.internal?.clientId??V$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??V$.internal.idcsUrl,scopes:$?.internal?.scopes??V$.internal.scopes,baseUrl:$?.internal?.baseUrl??V$.internal.baseUrl},external:{clientId:$?.external?.clientId??V$.external.clientId,idcsUrl:$?.external?.idcsUrl??V$.external.idcsUrl,scopes:$?.external?.scopes??V$.external.scopes,baseUrl:$?.external?.baseUrl??V$.external.baseUrl}}}function JL($=Date.now()){let Z=$-$L;for(let[Q,W]of g4.entries())if(W.createdAt<Z)g4.delete(Q)}function XL($,Z,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=R0(Z)?.exp;if(typeof J==="number"&&J>0)return J*1000;let Y=R0(Q)?.exp;if(typeof Y==="number"&&Y>0)return Y*1000;return Date.now()+3600000}function Ij($,Z,Q){let W=$.access_token;if(!W)throw Error("Token response did not include an access token");let J=$.refresh_token??Q?.refresh;if(!J)throw Error("Token response did not include a refresh token");let X=R0($.id_token),Y=R0(W),j=X?.sub??Y?.sub,V=X?.email??Y?.email;return{access:W,refresh:J,expires:XL($,W,$.id_token),accountId:j??Q?.accountId,email:V??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:Z,subject:j,idToken:$.id_token}}}async function xj($,Z){let Q=b9($),W=KW.get(Q);if(W)return W;let J=`${Q}/.well-known/openid-configuration`,X=await fetch(J,{method:"GET",signal:AbortSignal.timeout(Z)});if(!X.ok){let V=`${Q}/oauth2/v1/token`;return KW.set(Q,V,Date.now(),QL),V}let j=(await X.json()).token_endpoint||`${Q}/oauth2/v1/token`;return KW.set(Q,j),j}function gj($){return{code:$.error,message:$.error_description}}async function YL($){let Z=g4.get($.state);if(!Z)throw Error("No PKCE verifier found for this state");g4.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,W=await xj(Q.idcsUrl,$.requestTimeoutMs),J=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:Z.redirectUri,client_id:Q.clientId,code_verifier:Z.verifier}),X=await fetch(W,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:J,signal:AbortSignal.timeout($.requestTimeoutMs)}),Y=await X.json();if(!X.ok){let V=gj(Y);throw new m9(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let j=R0(Y.id_token);if(!Y.id_token||!j)throw Error("No ID token received from OCA");if(j.nonce!==Z.nonce)throw Error("OIDC nonce verification failed");return Ij(Y,$.mode)}function jL($){let Z=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${b9(Z.idcsUrl)}/oauth2/v1/authorize`);return Q.searchParams.set("client_id",Z.clientId),Q.searchParams.set("response_type","code"),Q.searchParams.set("scope",Z.scopes),Q.searchParams.set("code_challenge",$.challenge),Q.searchParams.set("code_challenge_method","S256"),Q.searchParams.set("redirect_uri",$.callbackUrl),Q.searchParams.set("state",$.state),Q.searchParams.set("nonce",$.nonce),Q.toString()}async function m4($){C1($.telemetry,"oca");let Z=kj($.config),Q=hj($.mode),W=$.callbackPorts?.length?$.callbackPorts:oD,J=$.callbackPath??sD,X=$.requestTimeoutMs??yj,Y=await W1({ports:W,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=Y.callbackUrl;if(!j)throw Error("Unable to bind local OAuth callback server");let V=Ej(16),H=Ej(16),{verifier:B,challenge:G}=await S9();JL(),g4.set(V,{verifier:B,nonce:H,mode:Q,redirectUri:j,createdAt:Date.now()});let K=jL({callbackUrl:j,mode:Q,state:V,nonce:H,challenge:G,config:Z});$.callbacks.onAuth({url:K,instructions:"Continue the authentication process in your browser."});try{let F=await W8({waitForCallback:Y.waitForCallback,cancelWait:Y.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),A=F.code,L=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!A){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!L||L!==V)throw Error("State mismatch");let f=await YL({code:A,state:L,mode:Q,config:Z,requestTimeoutMs:X});return w1($.telemetry,"oca"),S1($.telemetry,{id:f.accountId,email:f.email,provider:"oca"}),f}catch(F){throw P1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{Y.close()}}async function v9($,Z={}){let Q=kj(Z.config),W=Z.requestTimeoutMs??yj,J=$.metadata?.mode,X=J==="internal"||J==="external"?J:hj(Z.mode),Y=X==="external"?Q.external:Q.internal,j=await xj(Y.idcsUrl,W),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:Y.clientId}),H=await fetch(j,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(W)}),B=await H.json();if(!H.ok){let G=gj(B);throw new m9(`Token refresh failed: ${H.status}${G.message?` - ${G.message}`:""}`,{status:H.status,errorCode:G.code})}return Ij(B,X,$)}async function v4($,Z,Q){if(!$)return null;let W=Z?.refreshBufferMs??Q?.refreshBufferMs??tD,J=Z?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??eD;if(Z?.forceRefresh!==!0&&!Q8($,W))return $;try{return await v9($,Q)}catch(Y){if(Y instanceof m9&&Y.isLikelyInvalidGrant())return X$(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}var c9="workos:";function VL($){let Z=$.trim();return Z.toLowerCase().startsWith(c9)?Z:`${c9}${Z}`}function HL($){let Z=$.trim();return Z.toLowerCase().startsWith(c9)?Z.slice(c9.length):Z}function BL($){let Q=R0($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function GL($,Z){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let W=BL(Z);if(W)return W;return Date.now()-1}function KL($,Z){let Q=$.auth?.accessToken?.trim(),W=$.auth?.refreshToken?.trim();if(!Q||!W)return null;let J=Z?.normalizeAccessToken?.(Q)??Q;if(!J)return null;return{access:J,refresh:W,expires:GL($,J),accountId:$.auth?.accountId}}function FL($){let Z=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:Z,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},W={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(W,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return W}function FW($){let Z=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:Z,getApiKey(Q){let W=Q?.auth?.accessToken?.trim();if(W)return $.formatAccessToken?.(W)??W;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return FL({...Q,storageProviderId:Z,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function cj($){return FW({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:VL,normalizeStoredAccessToken:HL,login:({settings:Z,callbacks:Q,telemetry:W})=>h4({apiBaseUrl:Z?.baseUrl?.trim()||vj().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:W}),refresh:({settings:Z,credentials:Q,forceRefresh:W,telemetry:J})=>k4(Q,{apiBaseUrl:Z.baseUrl?.trim()||vj().apiBaseUrl,telemetry:J},{forceRefresh:W})})}var AL=[cj({providerId:"cline"}),cj({providerId:"cline-pass",storageProviderId:"cline"}),FW({providerId:"oca",login:({settings:$,callbacks:Z,telemetry:Q})=>m4({mode:$?.oca?.mode,callbacks:Z,telemetry:Q}),refresh:({settings:$,credentials:Z,forceRefresh:Q,telemetry:W})=>v4(Z,{forceRefresh:Q,telemetry:W},{mode:$.oca?.mode,telemetry:W})}),FW({providerId:"openai-codex",login:({callbacks:$,telemetry:Z})=>I4({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:Z}),refresh:({credentials:$,forceRefresh:Z,telemetry:Q})=>x4($,{forceRefresh:Z,telemetry:Q})})],fL=new Map(AL.map(($)=>[$.providerId,$]));function j0($){return fL.get($.trim().toLowerCase())}function i$($){return j0($)!==void 0}function AW($){return j0($)?.storageProviderId}function fW($,Z){let Q=j0(Z),W=Q?.storageProviderId??Z,J=$.getProviderSettings(W);return Q?.getApiKey(J)??X8(Z,J)}async function c4($,Z,Q){let W=j0(Z);if(!W)throw Error(`Provider "${Z}" does not support OAuth login`);let J=$.getProviderSettings(W.storageProviderId),X=await W.login({settings:J,callbacks:Q.callbacks,telemetry:Q.telemetry});return W.saveCredentials({manager:$,settings:J,credentials:X})}function u4($,Z){let Q=j0($);if(!Q)return null;return KL(Z,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function n$($){let Z=j0($.providerId);if(!Z)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return Z.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function X8($,Z){let Q=j0($);if(Q)return Q.getApiKey(Z);return Z?.auth?.accessToken?.trim()||Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0}function UW($,Z){let Q=j0($);if(!Q)return Z.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:Z.access}})??Z.access}L0();var fV={};N(fV,{createContextCompactionPrepareTurn:()=>a4});import{createHandlerAsync as zL}from"@cline/llms";import{CHARS_PER_TOKEN as jm,estimateTokens as DW}from"@cline/shared";var pj=200000,rj=0.9,u9=0.7,ij=16384,LW=20000,dj=1024,lj=2000,nj=2000,aj=8;function p4($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
45
+ </html>`;function fj($){let Z="";for(let Q=0;Q<$.length;Q+=1)Z+=String.fromCharCode($[Q]??0);return btoa(Z).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function yD($){let Q=new TextEncoder().encode($),W=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(W)}function hD($=32){let Z=new Uint8Array($);return crypto.getRandomValues(Z),fj(Z)}async function S9(){let $=hD(),Z=fj(await yD($));return{verifier:$,challenge:Z}}function b9($){return $.endsWith("/")?$.slice(0,-1):$}function r$($,Z){return new URL(Z,`${b9($)}/`).toString()}function $8($,Z={}){let Q=$.trim();if(!Q)return{};try{let W=new URL(Q);return{code:W.searchParams.get("code")??void 0,state:W.searchParams.get("state")??void 0,provider:Z.includeProvider?W.searchParams.get("provider")??void 0:void 0}}catch{}if(Z.allowHashCodeState&&Q.includes("#")){let[W,J]=Q.split("#",2);return{code:W||void 0,state:J||void 0}}if(Q.includes("code=")){let W=new URLSearchParams(Q);return{code:W.get("code")??void 0,state:W.get("state")??void 0,provider:Z.includeProvider?W.get("provider")??void 0:void 0}}return{code:Q}}function kD($){if(typeof atob==="function")try{return atob($)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from($,"base64").toString("utf8")}catch{return null}return null}function R0($){if(!$)return null;try{let Z=$.split(".");if(Z.length!==3)return null;let Q=Z[1];if(!Q)return null;let W=Q.replace(/-/g,"+").replace(/_/g,"/"),J=W.padEnd(W.length+(4-W.length%4)%4,"="),X=kD(J);if(!X)return null;return JSON.parse(X)}catch{return null}}function Z8($){try{let Z=JSON.parse($),Q=Z.error,W=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,J=typeof Z.error_description==="string"?Z.error_description:typeof Z.message==="string"?Z.message:Q&&typeof Q==="object"&&typeof Q.message==="string"?Q.message:void 0;return{code:W,message:J}}catch{return{}}}function Q8($,Z){return Date.now()>=$.expires-Z}async function W8($){if(!$.onManualCodeInput){let X=await $.waitForCallback();return{code:X?.code,state:X?.state,provider:X?.provider,error:X?.error}}let Z,Q,W=$.onManualCodeInput().then((X)=>{Z=X,$.cancelWait()}).catch((X)=>{Q=X instanceof Error?X:Error(String(X)),$.cancelWait()}),J=await $.waitForCallback();if(Q)throw Q;if(J?.code||J?.error)return{code:J.code,state:J.state,provider:J.provider,error:J.error};if(Z)return $8(Z,$.parseOptions);if(await W,Q)throw Q;if(Z)return $8(Z,$.parseOptions);return{}}var y9={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},_j={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},XW="https://api.workos.com",ID="/auth",Uj=Array.from({length:11},($,Z)=>48801+Z),xD=300000,gD=30000,J8=30000,mD=300,vD=5;class j$ extends Error{status;errorCode;constructor($,Z){super($);this.name="ClineOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function cD($){let Z=Date.parse($);if(Number.isNaN(Z))throw Error(`Invalid expiresAt value: ${$}`);return Z}function YW($,Z,Q={}){let W=$.userInfo.clineUserId??Q.accountId,J=$.refreshToken??Q.refresh;if(!J)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:J,expires:cD($.expiresAt),accountId:W??void 0,email:$.userInfo.email||Q.email,metadata:{provider:Z,tokenType:$.tokenType,userInfo:$.userInfo}}}async function jW($){if(!$)return{};return typeof $==="function"?await $():$}function Dj($,Z){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return Z;return Math.floor($)}async function Lj($){await new Promise((Z)=>setTimeout(Z,$))}function VW($,Z){if(!$.success||!$.data?.accessToken)throw Error(Z);return $.data}async function zj($,Z){let Q=await fetch(r$(XW,_j.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(Z?.requestTimeoutMs??J8)}),W=await Q.json().catch(()=>({}));if(!Q.ok)throw new j$(`Device authorization failed: ${Q.status}${W.error_description?` - ${W.error_description}`:""}`,{status:Q.status,errorCode:W.error});if(!W.device_code||!W.user_code||!W.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:W.device_code,userCode:W.user_code,verificationUri:W.verification_uri,verificationUriComplete:W.verification_uri_complete,expiresInSeconds:Dj(W.expires_in,mD),pollIntervalSeconds:Dj(W.interval,vD)}}async function Tj($){let Z=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=Z){let W=await fetch(r$($.workosApiBaseUrl,_j.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),J=await W.json().catch(()=>({}));if(W.ok){if(!J.access_token||!J.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:J.access_token,refreshToken:J.refresh_token,tokenType:J.token_type??"Bearer"}}switch(J.error){case"authorization_pending":{await Lj(Q*1000);break}case"slow_down":{Q+=1,await Lj(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new j$(J.error_description||"WorkOS authorization failed",{status:W.status,errorCode:J.error});default:throw new j$(`WorkOS token polling failed: ${W.status}${J.error_description?` - ${J.error_description}`:""}`,{status:W.status,errorCode:J.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function Oj($,Z,Q){let W={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(r$(Z.apiBaseUrl,y9.register),{method:"POST",headers:{"Content-Type":"application/json",...await jW(Z.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Z.requestTimeoutMs??J8)});if(!J.ok){let Y=await J.text().catch(()=>""),j=Z8(Y);throw new j$(`Token registration failed: ${J.status}${j.message?` - ${j.message}`:""}`,{status:J.status,errorCode:j.code})}let X=await J.json();return YW(VW(X,"Invalid token exchange response"),Q??Z.provider)}async function uD($,Z,Q,W){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:Z,provider:W??Q.provider},X=await fetch(r$(Q.apiBaseUrl,y9.token),{method:"POST",headers:{"Content-Type":"application/json",...await jW(Q.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Q.requestTimeoutMs??J8)});if(!X.ok){let j=await X.text().catch(()=>""),V=Z8(j);throw new j$(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let Y=await X.json();return YW(VW(Y,"Invalid token exchange response"),W??Q.provider)}async function h4($){C1($.telemetry,$.provider??"cline");let Z=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:Uj,W=$.callbackPath??ID,J=Z?null:await W1({ports:Q,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=J?.callbackUrl||`http://127.0.0.1:${Q[0]??Uj[0]}${W}`;try{let Y;if(Z){let j=JW().workOsClientId,V=await zj(j,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let H=await Tj({clientId:j,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??J8,workosApiBaseUrl:XW,onProgress:$.callbacks.onProgress});Y=await Oj(H,$,$.provider)}else{let j=new URL(r$($.apiBaseUrl,y9.authorize));j.searchParams.set("client_type","extension"),j.searchParams.set("callback_url",X),j.searchParams.set("redirect_uri",X),$.callbacks.onAuth({url:j.toString(),instructions:"Continue the authentication process in your browser."});let V,H=$.provider,B=await W8({waitForCallback:J?.waitForCallback??(async()=>null),cancelWait:J?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(B.error)throw Error(`OAuth error: ${B.error}`);if(V=B.code,H=B.provider??H,!V){let G=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=$8(G,{includeProvider:!0});V=K.code,H=K.provider??H}if(!V)throw Error("Missing authorization code");Y=await uD(V,X,$,H)}return w1($.telemetry,$.provider??"cline"),S1($.telemetry,{id:Y.accountId,email:Y.email,provider:$.provider??"cline"}),Y}catch(Y){throw P1($.telemetry,$.provider??"cline",Y instanceof Error?Y.message:String(Y)),Y}finally{J?.close()}}async function HW($){return await zj(JW().workOsClientId,$)}async function BW($){let Z=$.provider??"cline";C1($.telemetry,Z);try{let Q=await Tj({clientId:JW().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??J8,workosApiBaseUrl:XW}),W=await Oj(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return w1($.telemetry,Z),S1($.telemetry,{id:W.accountId,email:W.email,provider:Z}),W}catch(Q){throw P1($.telemetry,Z,Q instanceof Error?Q.message:String(Q)),Q}}async function h9($,Z){let Q=await fetch(r$(Z.apiBaseUrl,y9.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await jW(Z.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(Z.requestTimeoutMs??J8)});if(!Q.ok){let X=await Q.text().catch(()=>""),Y=Z8(X);throw new j$(`Token refresh failed: ${Q.status}${Y.message?` - ${Y.message}`:""}`,{status:Q.status,errorCode:Y.code})}let W=await Q.json(),J=$.metadata?.provider??Z.provider;return YW(VW(W,"Invalid token refresh response"),J,$)}async function k4($,Z,Q){if(!$)return null;let W=Q?.refreshBufferMs??xD,J=Q?.retryableTokenGraceMs??gD;if(Q?.forceRefresh!==!0&&!Q8($,W))return $;try{return await h9($,Z)}catch(Y){if(Y instanceof j$&&Y.isLikelyInvalidGrant())return X$(Z.telemetry,Z.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}L0();var Rj={};N(Rj,{refreshOpenAICodexToken:()=>I9,loginOpenAICodex:()=>I4,getValidOpenAICodexCredentials:()=>x4,OPENAI_CODEX_OAUTH_CONFIG:()=>X0});import{nanoid as dD}from"nanoid";var X0={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class k9 extends Error{status;errorCode;constructor($,Z){super($);this.name="OpenAICodexOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function lD($,Z,Q=X0.redirectUri){let W=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:X0.clientId,code:$,code_verifier:Z,redirect_uri:Q}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!W.ok)return{type:"failed"};let J=await W.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}async function pD($){try{let Z=await fetch(X0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:X0.clientId}),signal:AbortSignal.timeout(X0.httpTimeoutMs)});if(!Z.ok){let W=await Z.text().catch(()=>""),J=Z8(W);throw new k9(`Token refresh failed: ${Z.status}${J.message?` - ${J.message}`:""}`,{status:Z.status,errorCode:J.code})}let Q=await Z.json();if(!Q.access_token||!Q.refresh_token||typeof Q.expires_in!=="number")return{type:"failed"};return{type:"success",access:Q.access_token,refresh:Q.refresh_token,expires:Date.now()+Q.expires_in*1000,email:Q.email,idToken:Q.id_token}}catch(Z){if(Z instanceof k9)throw Z;return{type:"failed"}}}async function rD($="pi"){let{verifier:Z,challenge:Q}=await S9(),W=dD(32),J=new URL(X0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",X0.clientId),J.searchParams.set("redirect_uri",X0.redirectUri),J.searchParams.set("scope",X0.scopes),J.searchParams.set("code_challenge",Q),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("state",W),J.searchParams.set("id_token_add_organizations","true"),J.searchParams.set("codex_cli_simplified_flow","true"),J.searchParams.set("originator",$),{verifier:Z,state:W,url:J.toString()}}function iD(){try{let $=new URL(X0.redirectUri),Z=$.port.length>0?Number.parseInt($.port,10):X0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(Z)?Z:X0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:X0.callbackPort,callbackPath:"/auth/callback",redirectUri:X0.redirectUri}}}function nD($,Z){let Q=Z?R0(Z):R0($),W=Q?Q:R0($),X=W?.[X0.jwtClaimPath]?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;let Y=W?.organizations;if(Array.isArray(Y)&&Y.length>0){let V=Y[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let j=W?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return null}function Mj($,Z){let Q=nD($.access,$.idToken)??Z?.accountId;if(!Q)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||Z?.refresh||"",expires:$.expires,accountId:Q,email:$.email??Z?.email,metadata:{...Z?.metadata??{},provider:"openai-codex"}}}async function I4($){C1($.telemetry,"openai-codex");let Z=iD(),{verifier:Q,state:W,url:J}=await rD($.originator),X=await W1({host:Z.host,ports:[Z.port],callbackPath:Z.callbackPath,expectedState:W});$.onAuth({url:J,instructions:"Continue the authentication process in your browser."});let Y;try{let j=await W8({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(j.state&&j.state!==W)throw Error("State mismatch");if(Y=j.code,!Y){let B=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=$8(B,{allowHashCodeState:!0});if(G.state&&G.state!==W)throw Error("State mismatch");Y=G.code}if(!Y)throw Error("Missing authorization code");let V=await lD(Y,Q,Z.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let H=Mj(V);return w1($.telemetry,"openai-codex"),S1($.telemetry,{id:H.accountId,email:H.email,provider:"openai-codex"}),H}catch(j){throw P1($.telemetry,"openai-codex",j instanceof Error?j.message:String(j)),j}finally{X.close()}}async function I9($,Z){let Q=await pD($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let W=Mj(Q,Z);if(!W.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return W}async function x4($,Z){if(!$)return null;let Q=Z?.refreshBufferMs??X0.refreshBufferMs,W=Z?.retryableTokenGraceMs??X0.retryableTokenGraceMs;if(Z?.forceRefresh!==!0&&!Q8($,Q))return $;try{return await I9($.refresh,$)}catch(X){if(X instanceof k9&&X.isLikelyInvalidGrant())return X$(Z?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}L0();var mj={};N(mj,{refreshOcaToken:()=>v9,loginOcaOAuth:()=>m4,getValidOcaCredentials:()=>v4,OCI_HEADER_OPC_REQUEST_ID:()=>aD,DEFAULT_INTERNAL_OCA_BASE_URL:()=>x9,DEFAULT_INTERNAL_IDCS_URL:()=>Cj,DEFAULT_INTERNAL_IDCS_SCOPES:()=>wj,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>Nj,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>g9,DEFAULT_EXTERNAL_IDCS_URL:()=>Sj,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>bj,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>Pj});import{nanoid as Ej}from"nanoid";class GW{ttlMs;maxEntries;entries=new Map;constructor($,Z){this.ttlMs=$;this.maxEntries=Z}get($,Z=Date.now()){this.pruneExpired(Z);let Q=this.entries.get($);if(!Q)return;return this.entries.delete($),this.entries.set($,Q),Q.value}set($,Z,Q=Date.now(),W=this.ttlMs){this.pruneExpired(Q),this.entries.delete($);while(this.entries.size>=this.maxEntries){let J=this.entries.keys().next().value;if(J===void 0)break;this.entries.delete(J)}this.entries.set($,{value:Z,expiresAt:Q+W})}pruneExpired($){for(let[Z,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(Z)}}var Nj="a8331954c0cf48ba99b5dd223a14c6ea",Cj="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",wj="openid offline_access",x9="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",Pj="c1aba3deed5740659981a752714eba33",Sj="https://login-ext.identity.oraclecloud.com",bj="openid offline_access",g9="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",aD="opc-request-id",sD="/auth/oca",oD=Array.from({length:11},($,Z)=>48801+Z),tD=300000,eD=30000,yj=30000,$L=600000;class m9 extends Error{status;errorCode;constructor($,Z){super($);this.name="OcaOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var V$={internal:{clientId:Nj,idcsUrl:Cj,scopes:wj,baseUrl:x9},external:{clientId:Pj,idcsUrl:Sj,scopes:bj,baseUrl:g9}},g4=new Map,ZL=86400000,QL=300000,WL=32,KW=new GW(ZL,WL);function hj($){if(typeof $==="function")return $();return $??"internal"}function kj($){return{internal:{clientId:$?.internal?.clientId??V$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??V$.internal.idcsUrl,scopes:$?.internal?.scopes??V$.internal.scopes,baseUrl:$?.internal?.baseUrl??V$.internal.baseUrl},external:{clientId:$?.external?.clientId??V$.external.clientId,idcsUrl:$?.external?.idcsUrl??V$.external.idcsUrl,scopes:$?.external?.scopes??V$.external.scopes,baseUrl:$?.external?.baseUrl??V$.external.baseUrl}}}function JL($=Date.now()){let Z=$-$L;for(let[Q,W]of g4.entries())if(W.createdAt<Z)g4.delete(Q)}function XL($,Z,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=R0(Z)?.exp;if(typeof J==="number"&&J>0)return J*1000;let Y=R0(Q)?.exp;if(typeof Y==="number"&&Y>0)return Y*1000;return Date.now()+3600000}function Ij($,Z,Q){let W=$.access_token;if(!W)throw Error("Token response did not include an access token");let J=$.refresh_token??Q?.refresh;if(!J)throw Error("Token response did not include a refresh token");let X=R0($.id_token),Y=R0(W),j=X?.sub??Y?.sub,V=X?.email??Y?.email;return{access:W,refresh:J,expires:XL($,W,$.id_token),accountId:j??Q?.accountId,email:V??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:Z,subject:j,idToken:$.id_token}}}async function xj($,Z){let Q=b9($),W=KW.get(Q);if(W)return W;let J=`${Q}/.well-known/openid-configuration`,X=await fetch(J,{method:"GET",signal:AbortSignal.timeout(Z)});if(!X.ok){let V=`${Q}/oauth2/v1/token`;return KW.set(Q,V,Date.now(),QL),V}let j=(await X.json()).token_endpoint||`${Q}/oauth2/v1/token`;return KW.set(Q,j),j}function gj($){return{code:$.error,message:$.error_description}}async function YL($){let Z=g4.get($.state);if(!Z)throw Error("No PKCE verifier found for this state");g4.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,W=await xj(Q.idcsUrl,$.requestTimeoutMs),J=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:Z.redirectUri,client_id:Q.clientId,code_verifier:Z.verifier}),X=await fetch(W,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:J,signal:AbortSignal.timeout($.requestTimeoutMs)}),Y=await X.json();if(!X.ok){let V=gj(Y);throw new m9(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let j=R0(Y.id_token);if(!Y.id_token||!j)throw Error("No ID token received from OCA");if(j.nonce!==Z.nonce)throw Error("OIDC nonce verification failed");return Ij(Y,$.mode)}function jL($){let Z=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${b9(Z.idcsUrl)}/oauth2/v1/authorize`);return Q.searchParams.set("client_id",Z.clientId),Q.searchParams.set("response_type","code"),Q.searchParams.set("scope",Z.scopes),Q.searchParams.set("code_challenge",$.challenge),Q.searchParams.set("code_challenge_method","S256"),Q.searchParams.set("redirect_uri",$.callbackUrl),Q.searchParams.set("state",$.state),Q.searchParams.set("nonce",$.nonce),Q.toString()}async function m4($){C1($.telemetry,"oca");let Z=kj($.config),Q=hj($.mode),W=$.callbackPorts?.length?$.callbackPorts:oD,J=$.callbackPath??sD,X=$.requestTimeoutMs??yj,Y=await W1({ports:W,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=Y.callbackUrl;if(!j)throw Error("Unable to bind local OAuth callback server");let V=Ej(16),H=Ej(16),{verifier:B,challenge:G}=await S9();JL(),g4.set(V,{verifier:B,nonce:H,mode:Q,redirectUri:j,createdAt:Date.now()});let K=jL({callbackUrl:j,mode:Q,state:V,nonce:H,challenge:G,config:Z});$.callbacks.onAuth({url:K,instructions:"Continue the authentication process in your browser."});try{let F=await W8({waitForCallback:Y.waitForCallback,cancelWait:Y.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),A=F.code,L=F.state;if(F.error)throw Error(`OAuth error: ${F.error}`);if(!A){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!L||L!==V)throw Error("State mismatch");let f=await YL({code:A,state:L,mode:Q,config:Z,requestTimeoutMs:X});return w1($.telemetry,"oca"),S1($.telemetry,{id:f.accountId,email:f.email,provider:"oca"}),f}catch(F){throw P1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{Y.close()}}async function v9($,Z={}){let Q=kj(Z.config),W=Z.requestTimeoutMs??yj,J=$.metadata?.mode,X=J==="internal"||J==="external"?J:hj(Z.mode),Y=X==="external"?Q.external:Q.internal,j=await xj(Y.idcsUrl,W),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:Y.clientId}),H=await fetch(j,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(W)}),B=await H.json();if(!H.ok){let G=gj(B);throw new m9(`Token refresh failed: ${H.status}${G.message?` - ${G.message}`:""}`,{status:H.status,errorCode:G.code})}return Ij(B,X,$)}async function v4($,Z,Q){if(!$)return null;let W=Z?.refreshBufferMs??Q?.refreshBufferMs??tD,J=Z?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??eD;if(Z?.forceRefresh!==!0&&!Q8($,W))return $;try{return await v9($,Q)}catch(Y){if(Y instanceof m9&&Y.isLikelyInvalidGrant())return X$(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}var c9="workos:";function VL($){let Z=$.trim();return Z.toLowerCase().startsWith(c9)?Z:`${c9}${Z}`}function HL($){let Z=$.trim();return Z.toLowerCase().startsWith(c9)?Z.slice(c9.length):Z}function BL($){let Q=R0($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function GL($,Z){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let W=BL(Z);if(W)return W;return Date.now()-1}function KL($,Z){let Q=$.auth?.accessToken?.trim(),W=$.auth?.refreshToken?.trim();if(!Q||!W)return null;let J=Z?.normalizeAccessToken?.(Q)??Q;if(!J)return null;return{access:J,refresh:W,expires:GL($,J),accountId:$.auth?.accountId}}function FL($){let Z=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:Z,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},W={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(W,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return W}function FW($){let Z=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:Z,getApiKey(Q){let W=Q?.auth?.accessToken?.trim();if(W)return $.formatAccessToken?.(W)??W;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return FL({...Q,storageProviderId:Z,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function cj($){return FW({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:VL,normalizeStoredAccessToken:HL,login:({settings:Z,callbacks:Q,telemetry:W})=>h4({apiBaseUrl:Z?.baseUrl?.trim()||vj().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:W}),refresh:({settings:Z,credentials:Q,forceRefresh:W,telemetry:J})=>k4(Q,{apiBaseUrl:Z.baseUrl?.trim()||vj().apiBaseUrl,telemetry:J},{forceRefresh:W})})}var AL=[cj({providerId:"cline"}),cj({providerId:"cline-pass",storageProviderId:"cline"}),FW({providerId:"oca",login:({settings:$,callbacks:Z,telemetry:Q})=>m4({mode:$?.oca?.mode,callbacks:Z,telemetry:Q}),refresh:({settings:$,credentials:Z,forceRefresh:Q,telemetry:W})=>v4(Z,{forceRefresh:Q,telemetry:W},{mode:$.oca?.mode,telemetry:W})}),FW({providerId:"openai-codex",login:({callbacks:$,telemetry:Z})=>I4({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:Z}),refresh:({credentials:$,forceRefresh:Z,telemetry:Q})=>x4($,{forceRefresh:Z,telemetry:Q})})],fL=new Map(AL.map(($)=>[$.providerId,$]));function j0($){return fL.get($.trim().toLowerCase())}function i$($){return j0($)!==void 0}function AW($){return j0($)?.storageProviderId}function fW($,Z){let Q=j0(Z),W=Q?.storageProviderId??Z,J=$.getProviderSettings(W);return Q?.getApiKey(J)??X8(Z,J)}async function c4($,Z,Q){let W=j0(Z);if(!W)throw Error(`Provider "${Z}" does not support OAuth login`);let J=$.getProviderSettings(W.storageProviderId),X=await W.login({settings:J,callbacks:Q.callbacks,telemetry:Q.telemetry});return W.saveCredentials({manager:$,settings:J,credentials:X})}function u4($,Z){let Q=j0($);if(!Q)return null;return KL(Z,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function n$($){let Z=j0($.providerId);if(!Z)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return Z.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function X8($,Z){let Q=j0($);if(Q)return Q.getApiKey(Z);return Z?.auth?.accessToken?.trim()||Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0}function UW($,Z){let Q=j0($);if(!Q)return Z.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:Z.access}})??Z.access}L0();var fV={};N(fV,{createContextCompactionPrepareTurn:()=>a4});import{createHandlerAsync as zL}from"@cline/llms";import{CHARS_PER_TOKEN as Vm,estimateTokens as DW}from"@cline/shared";var pj=200000,rj=0.9,u9=0.7,ij=16384,LW=20000,dj=1024,lj=2000,nj=2000,aj=8;function p4($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
46
46
  ...[truncated ${$.length-Z} chars]`}function UL($){let Z=_W($);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}">
47
47
  ${Q.content}
48
48
  </file>`;case"image":return`[image:${Q.mediaType}]`;default:return""}}).join(`
@@ -194,14 +194,14 @@ Searched ${L} files.`;let D=[`Found ${A.length} result${A.length===1?"":"s"} for
194
194
  `);if(Q&&W)return`${Q}
195
195
 
196
196
  ${W}`;return Q||W}function LT($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function _T($,Z){return $.filter((Q)=>LT(Q.name,Z))}function zT($,Z){return g1(_T($,Z))}function TT($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return{};return{beforeRun:async(Q)=>{for(let W of Z){let J=await W.beforeRun?.(Q);if(J?.stop)return J}return},afterRun:async(Q)=>{for(let W of Z)await W.afterRun?.(Q)},beforeModel:async(Q)=>{let W=Q.request,J;for(let X of Z){let Y=await X.beforeModel?.({...Q,request:W});if(!Y)continue;if(Y.stop)return Y;J={...J,...Y,options:qH(J?.options,Y.options)},W={...W,...Y.messages?{messages:Y.messages}:{},...Y.tools?{tools:Y.tools}:{},...Y.options?{options:qH(W.options,Y.options)}:{}}}return J},afterModel:async(Q)=>{for(let W of Z){let J=await W.afterModel?.(Q);if(J?.stop)return J}return},beforeTool:async(Q)=>{let W=Q.input,J;for(let X of Z){let Y=await X.beforeTool?.({...Q,input:W});if(!Y)continue;if(Y.stop||Y.skip)return Y;if(J={...J,...Y},Object.hasOwn(Y,"input"))W=Y.input}return J},afterTool:async(Q)=>{let W=Q.result,J;for(let X of Z){let Y=await X.afterTool?.({...Q,result:W});if(!Y)continue;if(Y.stop)return Y;if(J={...J,...Y},Y.result)W=Y.result}return J},onEvent:async(Q)=>{for(let W of Z)await W.onEvent?.(Q)}}}class U${config;agentId;parentAgentId;logger;telemetry;conversation;mistakeTracker;loopTracker;loopDetectionDisabled;messageBuilder;contributionRegistry;extensionsInitialized=!1;listeners=new Set;createAgentRuntimeImpl;activeRunId=null;running=!1;abortRequested=!1;abortReason;activeRuntime=null;activeRunPromise=null;eventAdapter=new rW;shutdownCalled=!1;currentRunToolCalls=[];currentRunUsage={inputTokens:0,outputTokens:0};toolStartedAt=new Map;toolInputs=new Map;currentTurnSuccessfulTools=0;currentTurnFailedTools=0;currentTurnFailureDetails=[];activeTrackerWork=Promise.resolve();trackerAbortInFlight=!1;constructor($,Z={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=Z.logger??$.logger,this.telemetry=Z.telemetry??$.telemetry,this.createAgentRuntimeImpl=Z.createAgentRuntimeImpl??FT,this.conversation=new uW($.initialMessages),this.messageBuilder=new mW(LH()),this.contributionRegistry=AT({extensions:$.extensions?[...$.extensions]:[],setupContext:{session:$.extensionContext?.session,client:$.extensionContext?.client,user:$.extensionContext?.user,workspaceInfo:$.extensionContext?.workspace,automation:$.extensionContext?.automation,logger:$.extensionContext?.logger??this.logger,telemetry:$.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let Q=$.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new pW({maxConsecutiveMistakes:Q,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(X)=>this.emitLegacyEvent(X),log:(X,Y,j)=>OT(this.logger,X,Y,j),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(X,Y)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:X}]})}});let W=$.execution?.loopDetection;this.loopDetectionDisabled=W===!1;let J=W===!1||W===void 0?void 0:W;this.loopTracker=new lW(J)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools($){if($.length===0)return;let Z=new Set(this.config.tools.map((W)=>W.name)),Q=[...this.config.tools];for(let W of $)if(!Z.has(W.name))Q.push(W),Z.add(W.name);this.config={...this.config,tools:Q}}updateConnection($){let Z={...this.config};if($.providerId!==void 0)Z.providerId=$.providerId;if($.modelId!==void 0)Z.modelId=$.modelId;if($.apiKey!==void 0)Z.apiKey=$.apiKey;if($.baseUrl!==void 0)Z.baseUrl=$.baseUrl;if($.headers!==void 0)Z.headers=$.headers;if($.providerConfig!==void 0)Z.providerConfig=$.providerConfig;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinking!==void 0)Z.thinking=$.thinking;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;this.config=Z}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.messageBuilder.resetConversationState(),this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let Z=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=Z,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(Z)}async shutdown($,Z){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run($,Z,Q){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!1})}continue($,Z,Q){return this.executeRun({userMessage:$,userImages:Z,userFiles:Q,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let Z of this.contributionRegistry.getRegisteredRules()){let Q=await UT(Z);if(Q)$.push(Q)}return DT(this.config.systemPrompt,$)}executeRun($){let Z;return Z=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===Z)this.activeRunPromise=null}),this.activeRunPromise=Z,Z}async executeRunInternal($){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let Z=new Date,Q=$.userMessage;if(Q!==void 0){let U=await MT(Q,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:U})}let W=await this.composeSystemPrompt(),J=HH(this.config,this.logger,this.telemetry),X=new Map;for(let U of this.contributionRegistry.getRegisteredTools())X.set(U.name,U);let Y=zT([...X.values()],this.config.toolPolicies),j=new Map;for(let U of Y)j.set(U.name,U);for(let U of this.config.tools)j.set(U.name,U);let V=this.conversation.getConversationId(),H=MH(this.config),B=Array.from(j.values()),G=jZ(this.conversation.getMessages()),K=zH({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:J,logger:this.logger,telemetry:this.telemetry,tools:B,toolContextMetadata:{modelSupportsImages:H?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[UV]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(H,B),initialMessages:G,systemPrompt:W}),F=this.createAgentRuntimeImpl(K);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let A=F.subscribe((U)=>{this.handleRuntimeEvent(U)}),L,f;try{if($.isContinue)L=await F.continue(void 0);else L=await F.run("")}catch(U){f=U instanceof Error?U:Error(String(U))}finally{A();try{await this.activeTrackerWork}catch(U){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:U})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(L&&L.messages.length>0){let U=A8(L.messages);this.conversation.replaceMessages(U)}let D=new Date;try{return this.buildLegacyResult({runResult:L,thrownError:f,startedAt:Z,endedAt:D})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize({tolerateSetupErrors:this.config.hookErrorMode!=="throw"})}catch($){if(this.config.hookErrorMode==="throw")throw $;this.emitLegacyEvent({type:"error",error:$ instanceof Error?$:Error(String($)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let $=TT([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((Z)=>Z.hooks)]);return{...$,beforeModel:async(Z)=>{let Q=await $.beforeModel?.(Z);if(Q?.stop)return Q;let W=Q?.messages??Z.request.messages,J=await this.prepareMessagesForModelRequest(W);return{...Q,messages:J}}}}createRuntimePrepareTurn($,Z){let Q=this.config.prepareTurn;if(!Q)return;return async(W)=>{let J=A8(W.messages),X=await this.prepareProviderMessagesForApi(J),Y=await Q({agentId:W.agentId,conversationId:W.conversationId??this.conversation.getConversationId(),parentAgentId:W.parentAgentId??null,iteration:W.iteration,messages:J,apiMessages:X,abortSignal:W.signal??new AbortController().signal,systemPrompt:W.systemPrompt??"",tools:Z,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:W.emitStatusNotice});if(!Y)return;return{...Y.messages?{messages:jZ(Y.messages)}:{},...Y.systemPrompt!==void 0?{systemPrompt:Y.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let Z=await this.prepareProviderMessagesForApi(VZ($));return jZ(Z)}async prepareProviderMessagesForApi($){let Z=$,Q=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let W of Q)Z=await W.build(Z);return this.messageBuilder.buildForApi(Z)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=new Date,W=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let J=$.message.content.find((V)=>V.type==="tool-result"),X=J?.type==="tool-result"&&J.isError===!0,Y=X?fT(J?.type==="tool-result"?J.output:void 0):void 0,j={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:W,output:J?.type==="tool-result"?J.output:void 0,error:Y,durationMs:Z===void 0?0:Q.getTime()-Z.getTime(),startedAt:Z??Q,endedAt:Q};if(this.currentRunToolCalls.push(j),X){if(this.currentTurnFailedTools+=1,Y)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${Y}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let Z=this.currentTurnFailedTools,Q=this.currentTurnSuccessfulTools;if(Z>0&&Q===0){let W=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${Z} tool call(s) failed${W?`: ${W}`:""}`})}else if(Q>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost};break}default:break}for(let Z of this.eventAdapter.translate($))this.emitLegacyEvent(Z)}syncConversationFromRuntimeMessage($,Z){if($.length>0){this.conversation.replaceMessages(A8($));return}if(Z.length===0)return;let Q=new Set(this.conversation.getMessages().map((J)=>J.id).filter((J)=>typeof J==="string")),W=A8(Z).filter((J)=>!J.id||!Q.has(J.id));if(W.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...W])}emitLegacyEvent($){for(let Z of this.listeners)try{Z($)}catch(Q){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Q})}}inspectLoopForToolCall($,Z,Q){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let W=this.loopTracker.inspect({name:$,input:Z});if(W.kind==="ok")return;if(W.kind==="soft"){if(W.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:W.message}]});return}this.enqueueMistakeRecord({iteration:Q,reason:"tool_execution_failed",forceAtLimit:!0,details:W.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let Z=await this.mistakeTracker.record($);if(Z.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:Z.message}]}),this.activeRuntime?.abort(Z.reason??Z.message)})}buildLegacyResult($){let{runResult:Z,thrownError:Q,startedAt:W,endedAt:J}=$,X=J.getTime()-W.getTime(),Y=Q?"error":qT(Z),j=(Z?.status==="failed"?Z.error?.message:void 0)||Z?.outputText||"",V=Z?{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens>0?Z.usage.cacheReadTokens:void 0,cacheWriteTokens:Z.usage.cacheWriteTokens>0?Z.usage.cacheWriteTokens:void 0,totalCost:Z.usage.totalCost}:this.currentRunUsage,H=Z?A8(Z.messages):this.conversation.getMessages(),B=MH(this.config);if(Q)throw Q;return{text:j,usage:V,messages:H,toolCalls:this.currentRunToolCalls,iterations:Z?.iterations??0,finishReason:Y,model:{id:this.config.modelId,provider:this.config.providerId,info:B},startedAt:W,endedAt:J,durationMs:X}}}function OT($,Z,Q,W){if(!$)return;if(Z==="debug"){$.debug(Q,W);return}if(Z==="error"&&$.error){$.error(Q,W);return}let J=Z==="warn"?"warn":Z==="error"?"error":"info";$.log(Q,{...W,severity:J})}function qT($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function MT($,Z,Q,W){let{buildInitialUserContent:J}=await Promise.resolve().then(() => OH);return J($,Z,Q,W)}function MH($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let Z=IW($);if(Z?.[$.modelId])return Z[$.modelId];return}import{buildClineSystemPrompt as RH}from"@cline/shared";function EH($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return RH({ide:Z.clineIdeName?.trim()||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,rules:`# Team Teammate Role
197
- ${Q}`,platform:Z.clinePlatform,metadata:Z.workspaceMetadata})}function NH($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return RH({ide:Z.clineIdeName||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,overridePrompt:Q,metadata:Z.workspaceMetadata,platform:Z.clinePlatform})}function D$($){let Z={...$};return{getRuntimeConfig:()=>Z,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,maxTokensPerTurn:Z.maxTokensPerTurn}),updateConnectionDefaults:(Q)=>{Z={...Z,...Q}}}}function J2($){let Z=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?EH($.prompt,Z):NH($.prompt,Z);return{...$.configProvider.getConnectionConfig(),systemPrompt:Q,tools:$.tools,maxIterations:$.maxIterations??Z.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:Z.hooks,extensions:Z.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:Z.logger,role:$.role}}function L$($){let Z=J2($),Q=new U$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);return Q}var NT=iW.object({systemPrompt:iW.string().describe("System prompt defining the sub-agent's behavior"),task:iW.string().describe("Task for the sub-agent to complete")});function _$($){return RT({name:"spawn_agent",description:"Spawn a sub-agent with a custom system prompt for specialized tasks. Use when delegating work that benefits from focused expertise.",inputSchema:ET(NT),execute:async(Z,Q)=>{let W=$.createSubAgentTools?await $.createSubAgentTools(Z,Q):$.subAgentTools??[],J=L$({kind:"subagent",prompt:Z.systemPrompt,configProvider:$.configProvider,tools:W,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),X=J.getAgentId(),Y=J.getConversationId(),j=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z})}catch{}try{let V=await J.run(Z.task),H={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,result:H,agentResult:V})}catch{}return H}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as K0,TEAM_AWAIT_TIMEOUT_MS as CT,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as wT,TEAM_RUN_TEXT_PREVIEW_LIMIT as PT,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as ST,TeamAttachOutcomeFragmentInputSchema as CH,TeamAwaitRunsInputSchema as wH,TeamBroadcastInputSchema as PH,TeamBroadcastToolResultSchema as bT,TeamCancelRunInputSchema as SH,TeamCancelRunToolResultSchema as yT,TeamCleanupInputSchema as bH,TeamCleanupToolResultSchema as hT,TeamCreateOutcomeInputSchema as yH,TeamCreateOutcomeToolResultSchema as kT,TeamFinalizeOutcomeInputSchema as hH,TeamFinalizeOutcomeToolResultSchema as IT,TeamListOutcomesInputSchema as kH,TeamListRunsInputSchema as IH,TeamMailboxMessageToolResultSchema as xT,TeamMissionLogInputSchema as xH,TeamMissionLogToolResultSchema as gT,TeamOutcomeFragmentToolResultSchema as gH,TeamOutcomeToolResultSchema as mT,TeamReadMailboxInputSchema as mH,TeamReviewOutcomeFragmentInputSchema as vH,TeamRunTaskInputSchema as cH,TeamRunTaskToolResultSchema as nW,TeamRunToolSummarySchema as aW,TeamSendMessageInputSchema as uH,TeamSendMessageToolResultSchema as vT,TeamShutdownTeammateInputSchema as dH,TeamSimpleAgentStatusToolResultSchema as lH,TeamSpawnTeammateInputSchema as pH,TeamStatusInputSchema as rH,TeamStatusToolResultSchema as cT,TeamTaskInputSchema as iH,TeamTaskToolResultSchema as _6,validateWithZod as k,zodToJsonSchema as F0}from"@cline/shared";function nH($,Z){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=Z)return Q;return`${Q.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function X2($,Z){if($===void 0)throw Error(`Missing required field: ${Z}`);return $}function uT($){let Z=$.result;if(!Z)return;return{textPreview:nH(Z.text,PT),iterations:Z.iterations,finishReason:Z.finishReason,durationMs:Z.durationMs,usage:{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens,cacheWriteTokens:Z.usage.cacheWriteTokens,totalCost:Z.usage.totalCost}}}function KZ($){return $?.toISOString()}function sW($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:nH($.message,wT),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:KZ($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:KZ($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:KZ($.heartbeatAt),lastProgressAt:KZ($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:uT($)}}function dT($){if($.status==="failed")throw Error(`Run "${$.id}" failed${$.error?`: ${$.error}`:""}`);if($.status==="cancelled")throw Error(`Run "${$.id}" was cancelled${$.error?`: ${$.error}`:""}`);if($.status==="interrupted")throw Error(`Run "${$.id}" was interrupted${$.error?`: ${$.error}`:""}`)}var U8=["team_spawn_teammate","team_shutdown_teammate","team_status","team_task","team_run_task","team_cancel_run","team_list_runs","team_await_runs","team_send_message","team_broadcast","team_read_mailbox","team_mission_log","team_cleanup","team_create_outcome","team_attach_outcome_fragment","team_review_outcome_fragment","team_finalize_outcome","team_list_outcomes"];function aH($){let Z=[];if($.createBaseTools)Z.push(...$.createBaseTools());Z.push(...Y2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:J2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:Z,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function D8($){let Z=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,W=Y2({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),J=[];for(let X of $.restoredTeammates??[]){if($.runtime.isTeammateActive(X.agentId))continue;aH({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:X}),J.push(X.agentId)}return{tools:W,restoredFromPersistence:Q,restoredTeammates:J}}function Y2($){let Z=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,W=$.includeManagementTools??!0,J=[];if(Q)J.push(K0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:F0(pH),execute:async(Y)=>{let j=k(pH,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!Z)throw Error("Spawning teammates is disabled in this context.");let V={agentId:j.agentId,rolePrompt:j.rolePrompt};if(aH({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!W)$.onLeadToolsUnlocked?.(Y2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return k(lH,{agentId:j.agentId,status:"spawned"})}}));if(!W)return J;J.push(K0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:F0(dH),execute:async(Y)=>{let j=k(dH,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(j.agentId,j.reason),k(lH,{agentId:j.agentId,status:"stopped"})}})),J.push(K0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:F0(rH),execute:async(Y)=>{return k(rH,Y),k(cT,$.runtime.getSnapshot())}})),J.push(K0({name:"team_task",description:"Manage shared team tasks with action-specific payloads. create requires title and description, with optional dependsOn and assignee. list accepts optional status, assignee. claim requires taskId. complete requires taskId and summary. block requires taskId and reason. Do not include fields from other actions.",inputSchema:F0(iH),execute:async(Y)=>{let j=k(iH,Y);switch(j.action){case"create":{let V=new Set(ST.create??[]),H=Object.entries(Y).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),B=$.runtime.createTask({title:X2(j.title,"title"),description:X2(j.description,"description"),dependsOn:j.dependsOn,assignee:j.assignee,createdBy:$.requesterId});return k(_6,{action:"create",taskId:B.id,status:B.status,...H.length>0?{ignoredFields:H,note:`Ignored fields for action=create: ${H.join(", ")}`}:{}})}case"list":return k(_6,{action:"list",tasks:$.runtime.listTaskItems({status:j.status,assignee:j.assignee})});case"claim":{let V=$.runtime.claimTask(X2(j.taskId,"taskId"),$.requesterId);return k(_6,{action:"claim",taskId:V.id,status:V.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_task with action=complete when done."})}case"complete":{let V=$.runtime.completeTask(X2(j.taskId,"taskId"),$.requesterId,X2(j.summary,"summary"));return k(_6,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(X2(j.taskId,"taskId"),$.requesterId,X2(j.reason,"reason"));return k(_6,{action:"block",taskId:V.id,status:V.status})}}}}));let X=new Map;return J.push(K0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:F0(cH),execute:async(Y)=>{let j=k(cH,Y);if(j.runMode==="async"){let B=$.runtime.startTeammateRun(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0});return k(nW,{agentId:j.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${j.agentId} and queued as ${B.id}.`,runId:B.id})}let V=X.get(j.agentId);if(V){let B=await V;return k(nW,{...B,status:"joined",deduped:!0,message:`Task for ${j.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let H=$.runtime.routeToTeammate(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0}).then((B)=>k(nW,{agentId:j.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${j.agentId} and completed in sync mode.`,text:B.text,iterations:B.iterations})).finally(()=>{X.delete(j.agentId)});return X.set(j.agentId,H),await H}})),J.push(K0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:F0(SH),execute:async(Y)=>{let j=k(SH,Y),V=$.runtime.cancelRun(j.runId,j.reason);return k(yT,{runId:V.id,status:V.status})}})),J.push(K0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:F0(IH),execute:async(Y)=>k(aW.array(),$.runtime.listRuns(k(IH,Y)).map(sW))})),J.push(K0({name:"team_await_runs",description:"Wait for async teammate runs. Provide runId to wait for one run, or omit it to wait for all active async runs. Uses a long timeout for legitimate teammate work.",inputSchema:F0(wH),timeoutMs:CT,execute:async(Y)=>{let j=k(wH,Y);if(j.runId){let B=await $.runtime.awaitRun(j.runId);return dT(B),k(aW,sW(B))}let V=await $.runtime.awaitAllRuns(),H=V.filter((B)=>["failed","cancelled","interrupted"].includes(B.status));if(H.length>0){let B=H.map((G)=>`${G.id}:${G.status}${G.error?`(${G.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${B}`)}return k(aW.array(),V.map(sW))}})),J.push(K0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:F0(uH),execute:async(Y)=>{let j=k(uH,Y),V=$.runtime.sendMessage($.requesterId,j.toAgentId,j.subject,j.body,j.taskId??void 0);return k(vT,{id:V.id,toAgentId:V.toAgentId})}})),J.push(K0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:F0(PH),execute:async(Y)=>{let j=k(PH,Y),V=$.runtime.broadcast($.requesterId,j.subject,j.body,{taskId:j.taskId??void 0});return k(bT,{delivered:V.length})}})),J.push(K0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:F0(mH),execute:async(Y)=>{let j=k(mH,Y);return k(xT.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:j.unreadOnly,markRead:!0}))}})),J.push(K0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:F0(xH),execute:async(Y)=>{let j=k(xH,Y),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:j.taskId||void 0,kind:j.kind,summary:j.summary,evidence:j.evidence?.length?j.evidence:void 0,nextAction:j.nextAction||void 0});return k(gT,{id:V.id})}})),J.push(K0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:F0(bH),execute:async(Y)=>{if(k(bH,Y),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),k(hT,{status:"cleaned"})}})),J.push(K0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:F0(yH),execute:async(Y)=>{let j=k(yH,Y),V=$.runtime.createOutcome({title:j.title,requiredSections:j.requiredSections,createdBy:$.requesterId});return k(kT,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),J.push(K0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:F0(CH),execute:async(Y)=>{let j=k(CH,Y),V=$.runtime.attachOutcomeFragment({outcomeId:j.outcomeId,section:j.section,sourceAgentId:$.requesterId,sourceRunId:j.sourceRunId||void 0,content:j.content});return k(gH,{fragmentId:V.id,status:V.status})}})),J.push(K0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:F0(vH),execute:async(Y)=>{let j=k(vH,Y),V=$.runtime.reviewOutcomeFragment({fragmentId:j.fragmentId,reviewedBy:$.requesterId,approved:j.approved});return k(gH,{fragmentId:V.id,status:V.status})}})),J.push(K0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:F0(hH),execute:async(Y)=>{let j=k(hH,Y),V=$.runtime.finalizeOutcome(j.outcomeId);return k(IT,{outcomeId:V.id,status:V.status})}})),J.push(K0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:F0(kH),execute:async(Y)=>{return k(kH,Y),k(mT.array(),$.runtime.listOutcomes())}})),J}function FZ($){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}))}}function sH($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var lT=[{id:"read_files",description:"Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. Long files are windowed; page with start_line/end_line.",headlessToolNames:["read_files"]},{id:"search_codebase",description:"Perform regex pattern searches across the codebase for code patterns, definitions, imports, and other text matches.",headlessToolNames:["search_codebase"]},{id:"run_commands",description:"Run shell commands from the root of the workspace for listing files, checking git status, builds, tests, and similar tasks.",headlessToolNames:["run_commands"]},{id:"editor",description:"Make controlled filesystem edits on text files with create, replace, and insert operations.",headlessToolNames:["editor"]},{id:"fetch_web_content",description:"Fetch URL content and analyze it with a prompt describing what to extract.",headlessToolNames:["fetch_web_content"]},{id:"skills",description:"Execute a configured skill within the main conversation when a matching skill exists for the task.",headlessToolNames:["skills"]},{id:"ask_question",description:"Ask the user a single clarifying question with 2-5 selectable options.",headlessToolNames:["ask_question"]},{id:"spawn_agent",description:_$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...U8]}],pT={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function rT($){return $==="plan"||$==="yolo"?$:"act"}function tH($){let Z=rT($.mode),Q=u0[x1({mode:Z})],W=F8($.providerId??"",$.modelId??"",Z,K8);return{mode:Z,flags:{...Q,...W,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function oH($,Z){if(Z.disabledToolIds?.has($))return!1;let{flags:Q}=tH(Z);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let W=pT[$];return W?Q[W]===!0:!1}function iT($,Z){if($.id==="editor"){let{flags:Q}=tH(Z),W=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:oH($.id,Z),headlessToolNames:[W?"apply_patch":"editor"]}}return{...$,defaultEnabled:oH($.id,Z)}}function j2($={}){return lT.map((Z)=>iT(Z,$))}function AZ($={}){return j2($).filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id)}function fZ($){if(!$.enabled)return new Set;let Z=j2($.availabilityContext),Q=new Set(Z.map((W)=>W.id));if(!$.allowlist||$.allowlist.length===0)return new Set(Z.filter((W)=>W.defaultEnabled).map((W)=>W.id));for(let W of $.allowlist)if(!Q.has(W))throw Error(`Unknown tool "${W}". Available tools: ${Z.map((J)=>J.id).join(", ")}`);return new Set($.allowlist)}function z6($,Z={}){return j2(Z).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function UZ($,Z={}){return z6($,Z)}function V2($={}){let{executorOptions:Z={},executors:Q,...W}=$,J={...G8(Z),...Q??{}};return F$({...W,executors:J})}import{mkdirSync as eT,writeFileSync as $O}from"node:fs";import{dirname as ZO}from"node:path";import{normalizeUserInput as QO}from"@cline/shared";import{nanoid as WO}from"nanoid";var $B={};N($B,{sanitizeSessionToken:()=>H2,parseTeamTaskSubSessionId:()=>_8,parseSubSessionId:()=>O6,makeTeamTaskSubSessionId:()=>T6,makeSubSessionId:()=>L8,deriveSubsessionStatus:()=>q6});import{nanoid as sT}from"nanoid";function H2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function L8($,Z){let Q=H2($),W=H2(Z),J=`${Q}__${W}`;return J.length>180?J.slice(0,180):J}function T6($,Z){let Q=H2($),W=H2(Z);return`${Q}__teamtask__${W}__${sT(6)}`}function _8($){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 O6($){if(_8($))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 q6($){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 e}from"zod";var WB={};N(WB,{isTerminalSessionStatus:()=>QB,isNonTerminalSessionStatus:()=>H0,SessionSource:()=>z0,SESSION_STATUSES:()=>M6,NON_TERMINAL_SESSION_STATUSES:()=>ZB});import{SESSION_STATUS_VALUES as oT}from"@cline/shared";var M6=oT,ZB=["idle","running","pending"];function QB($){return!ZB.includes($)}function H0($){return!QB($)}var z0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var tT=e.enum(M6),P0=e.object({version:e.literal(1),session_id:e.string().min(1),source:e.string().min(1),pid:e.number().int(),started_at:e.string().min(1),ended_at:e.string().min(1).optional(),exit_code:e.number().int().nullable().optional(),status:tT,interactive:e.boolean(),provider:e.string().min(1),model:e.string().min(1),cwd:e.string().min(1),workspace_root:e.string().min(1),team_name:e.string().min(1).optional(),enable_tools:e.boolean(),enable_spawn:e.boolean(),enable_teams:e.boolean(),prompt:e.string().optional(),metadata:e.record(e.string(),e.unknown()).optional(),messages_path:e.string().min(1).optional()});function JB($){if(!$)return!1;return Object.values($).some((Z)=>typeof Z==="function")}function tW($,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 XB($){return JSON.stringify($,(Z,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function m1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function oW($,Z){let Q={...$};Q.id=m1(Q.id)??WO();let W=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,J={id:m1(W?.id)??m1(Q.modelId)??m1(Z?.id),provider:m1(W?.provider)??m1(Q.providerId)??m1(Z?.provider),family:m1(W?.family)??m1(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 DZ($){return $.map((Z)=>oW(Z))}function LZ($,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 oW(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]={...oW(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 R6($){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 JO=120;function B2($){let Z=$?.trim();return Z?Z.slice(0,JO):void 0}function eW($){let Z=QO($??"").trim();if(!Z)return;return B2(Z.split(`
197
+ ${Q}`,platform:Z.clinePlatform,metadata:Z.workspaceMetadata})}function NH($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return RH({ide:Z.clineIdeName||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,overridePrompt:Q,metadata:Z.workspaceMetadata,platform:Z.clinePlatform})}function D$($){let Z={...$};return{getRuntimeConfig:()=>Z,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,maxTokensPerTurn:Z.maxTokensPerTurn}),updateConnectionDefaults:(Q)=>{Z={...Z,...Q}}}}function J2($){let Z=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?EH($.prompt,Z):NH($.prompt,Z);return{...$.configProvider.getConnectionConfig(),systemPrompt:Q,tools:$.tools,maxIterations:$.maxIterations??Z.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:Z.hooks,extensions:Z.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:Z.logger,role:$.role}}function L$($){let Z=J2($),Q=new U$(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);return Q}var NT=iW.object({systemPrompt:iW.string().describe("System prompt defining the sub-agent's behavior"),task:iW.string().describe("Task for the sub-agent to complete")});function _$($){return RT({name:"spawn_agent",description:"Spawn a sub-agent with a custom system prompt for specialized tasks. Use when delegating work that benefits from focused expertise.",inputSchema:ET(NT),execute:async(Z,Q)=>{let W=$.createSubAgentTools?await $.createSubAgentTools(Z,Q):$.subAgentTools??[],J=L$({kind:"subagent",prompt:Z.systemPrompt,configProvider:$.configProvider,tools:W,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),X=J.getAgentId(),Y=J.getConversationId(),j=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z})}catch{}try{let V=await J.run(Z.task),H={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,result:H,agentResult:V})}catch{}return H}catch(V){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,error:V instanceof Error?V:Error(String(V))})}catch{}throw V}},timeoutMs:300000,retryable:!1})}import{createTool as K0,TEAM_AWAIT_TIMEOUT_MS as CT,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as wT,TEAM_RUN_TEXT_PREVIEW_LIMIT as PT,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as ST,TeamAttachOutcomeFragmentInputSchema as CH,TeamAwaitRunsInputSchema as wH,TeamBroadcastInputSchema as PH,TeamBroadcastToolResultSchema as bT,TeamCancelRunInputSchema as SH,TeamCancelRunToolResultSchema as yT,TeamCleanupInputSchema as bH,TeamCleanupToolResultSchema as hT,TeamCreateOutcomeInputSchema as yH,TeamCreateOutcomeToolResultSchema as kT,TeamFinalizeOutcomeInputSchema as hH,TeamFinalizeOutcomeToolResultSchema as IT,TeamListOutcomesInputSchema as kH,TeamListRunsInputSchema as IH,TeamMailboxMessageToolResultSchema as xT,TeamMissionLogInputSchema as xH,TeamMissionLogToolResultSchema as gT,TeamOutcomeFragmentToolResultSchema as gH,TeamOutcomeToolResultSchema as mT,TeamReadMailboxInputSchema as mH,TeamReviewOutcomeFragmentInputSchema as vH,TeamRunTaskInputSchema as cH,TeamRunTaskToolResultSchema as nW,TeamRunToolSummarySchema as aW,TeamSendMessageInputSchema as uH,TeamSendMessageToolResultSchema as vT,TeamShutdownTeammateInputSchema as dH,TeamSimpleAgentStatusToolResultSchema as lH,TeamSpawnTeammateInputSchema as pH,TeamStatusInputSchema as rH,TeamStatusToolResultSchema as cT,TeamTaskInputSchema as iH,TeamTaskToolResultSchema as _6,validateWithZod as k,zodToJsonSchema as F0}from"@cline/shared";function nH($,Z){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=Z)return Q;return`${Q.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function X2($,Z){if($===void 0)throw Error(`Missing required field: ${Z}`);return $}function uT($){let Z=$.result;if(!Z)return;return{textPreview:nH(Z.text,PT),iterations:Z.iterations,finishReason:Z.finishReason,durationMs:Z.durationMs,usage:{inputTokens:Z.usage.inputTokens,outputTokens:Z.usage.outputTokens,cacheReadTokens:Z.usage.cacheReadTokens,cacheWriteTokens:Z.usage.cacheWriteTokens,totalCost:Z.usage.totalCost}}}function KZ($){return $?.toISOString()}function sW($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:nH($.message,wT),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:KZ($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:KZ($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:KZ($.heartbeatAt),lastProgressAt:KZ($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:uT($)}}function dT($){if($.status==="failed")throw Error(`Run "${$.id}" failed${$.error?`: ${$.error}`:""}`);if($.status==="cancelled")throw Error(`Run "${$.id}" was cancelled${$.error?`: ${$.error}`:""}`);if($.status==="interrupted")throw Error(`Run "${$.id}" was interrupted${$.error?`: ${$.error}`:""}`)}var U8=["team_spawn_teammate","team_shutdown_teammate","team_status","team_task","team_run_task","team_cancel_run","team_list_runs","team_await_runs","team_send_message","team_broadcast","team_read_mailbox","team_mission_log","team_cleanup","team_create_outcome","team_attach_outcome_fragment","team_review_outcome_fragment","team_finalize_outcome","team_list_outcomes"];function aH($){let Z=[];if($.createBaseTools)Z.push(...$.createBaseTools());Z.push(...Y2({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:J2({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:Z,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function D8($){let Z=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,W=Y2({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),J=[];for(let X of $.restoredTeammates??[]){if($.runtime.isTeammateActive(X.agentId))continue;aH({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:X}),J.push(X.agentId)}return{tools:W,restoredFromPersistence:Q,restoredTeammates:J}}function Y2($){let Z=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,W=$.includeManagementTools??!0,J=[];if(Q)J.push(K0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:F0(pH),execute:async(Y)=>{let j=k(pH,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!Z)throw Error("Spawning teammates is disabled in this context.");let V={agentId:j.agentId,rolePrompt:j.rolePrompt};if(aH({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!W)$.onLeadToolsUnlocked?.(Y2({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return k(lH,{agentId:j.agentId,status:"spawned"})}}));if(!W)return J;J.push(K0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:F0(dH),execute:async(Y)=>{let j=k(dH,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(j.agentId,j.reason),k(lH,{agentId:j.agentId,status:"stopped"})}})),J.push(K0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:F0(rH),execute:async(Y)=>{return k(rH,Y),k(cT,$.runtime.getSnapshot())}})),J.push(K0({name:"team_task",description:"Manage shared team tasks with action-specific payloads. create requires title and description, with optional dependsOn and assignee. list accepts optional status, assignee. claim requires taskId. complete requires taskId and summary. block requires taskId and reason. Do not include fields from other actions.",inputSchema:F0(iH),execute:async(Y)=>{let j=k(iH,Y);switch(j.action){case"create":{let V=new Set(ST.create??[]),H=Object.entries(Y).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),B=$.runtime.createTask({title:X2(j.title,"title"),description:X2(j.description,"description"),dependsOn:j.dependsOn,assignee:j.assignee,createdBy:$.requesterId});return k(_6,{action:"create",taskId:B.id,status:B.status,...H.length>0?{ignoredFields:H,note:`Ignored fields for action=create: ${H.join(", ")}`}:{}})}case"list":return k(_6,{action:"list",tasks:$.runtime.listTaskItems({status:j.status,assignee:j.assignee})});case"claim":{let V=$.runtime.claimTask(X2(j.taskId,"taskId"),$.requesterId);return k(_6,{action:"claim",taskId:V.id,status:V.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_task with action=complete when done."})}case"complete":{let V=$.runtime.completeTask(X2(j.taskId,"taskId"),$.requesterId,X2(j.summary,"summary"));return k(_6,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(X2(j.taskId,"taskId"),$.requesterId,X2(j.reason,"reason"));return k(_6,{action:"block",taskId:V.id,status:V.status})}}}}));let X=new Map;return J.push(K0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:F0(cH),execute:async(Y)=>{let j=k(cH,Y);if(j.runMode==="async"){let B=$.runtime.startTeammateRun(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0});return k(nW,{agentId:j.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${j.agentId} and queued as ${B.id}.`,runId:B.id})}let V=X.get(j.agentId);if(V){let B=await V;return k(nW,{...B,status:"joined",deduped:!0,message:`Task for ${j.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let H=$.runtime.routeToTeammate(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0}).then((B)=>k(nW,{agentId:j.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${j.agentId} and completed in sync mode.`,text:B.text,iterations:B.iterations})).finally(()=>{X.delete(j.agentId)});return X.set(j.agentId,H),await H}})),J.push(K0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:F0(SH),execute:async(Y)=>{let j=k(SH,Y),V=$.runtime.cancelRun(j.runId,j.reason);return k(yT,{runId:V.id,status:V.status})}})),J.push(K0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:F0(IH),execute:async(Y)=>k(aW.array(),$.runtime.listRuns(k(IH,Y)).map(sW))})),J.push(K0({name:"team_await_runs",description:"Wait for async teammate runs. Provide runId to wait for one run, or omit it to wait for all active async runs. Uses a long timeout for legitimate teammate work.",inputSchema:F0(wH),timeoutMs:CT,execute:async(Y)=>{let j=k(wH,Y);if(j.runId){let B=await $.runtime.awaitRun(j.runId);return dT(B),k(aW,sW(B))}let V=await $.runtime.awaitAllRuns(),H=V.filter((B)=>["failed","cancelled","interrupted"].includes(B.status));if(H.length>0){let B=H.map((G)=>`${G.id}:${G.status}${G.error?`(${G.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${B}`)}return k(aW.array(),V.map(sW))}})),J.push(K0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:F0(uH),execute:async(Y)=>{let j=k(uH,Y),V=$.runtime.sendMessage($.requesterId,j.toAgentId,j.subject,j.body,j.taskId??void 0);return k(vT,{id:V.id,toAgentId:V.toAgentId})}})),J.push(K0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:F0(PH),execute:async(Y)=>{let j=k(PH,Y),V=$.runtime.broadcast($.requesterId,j.subject,j.body,{taskId:j.taskId??void 0});return k(bT,{delivered:V.length})}})),J.push(K0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:F0(mH),execute:async(Y)=>{let j=k(mH,Y);return k(xT.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:j.unreadOnly,markRead:!0}))}})),J.push(K0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:F0(xH),execute:async(Y)=>{let j=k(xH,Y),V=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:j.taskId||void 0,kind:j.kind,summary:j.summary,evidence:j.evidence?.length?j.evidence:void 0,nextAction:j.nextAction||void 0});return k(gT,{id:V.id})}})),J.push(K0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:F0(bH),execute:async(Y)=>{if(k(bH,Y),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),k(hT,{status:"cleaned"})}})),J.push(K0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:F0(yH),execute:async(Y)=>{let j=k(yH,Y),V=$.runtime.createOutcome({title:j.title,requiredSections:j.requiredSections,createdBy:$.requesterId});return k(kT,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),J.push(K0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:F0(CH),execute:async(Y)=>{let j=k(CH,Y),V=$.runtime.attachOutcomeFragment({outcomeId:j.outcomeId,section:j.section,sourceAgentId:$.requesterId,sourceRunId:j.sourceRunId||void 0,content:j.content});return k(gH,{fragmentId:V.id,status:V.status})}})),J.push(K0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:F0(vH),execute:async(Y)=>{let j=k(vH,Y),V=$.runtime.reviewOutcomeFragment({fragmentId:j.fragmentId,reviewedBy:$.requesterId,approved:j.approved});return k(gH,{fragmentId:V.id,status:V.status})}})),J.push(K0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:F0(hH),execute:async(Y)=>{let j=k(hH,Y),V=$.runtime.finalizeOutcome(j.outcomeId);return k(IT,{outcomeId:V.id,status:V.status})}})),J.push(K0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:F0(kH),execute:async(Y)=>{return k(kH,Y),k(mT.array(),$.runtime.listOutcomes())}})),J}function FZ($){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}))}}function sH($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var lT=[{id:"read_files",description:"Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. Long files are windowed; page with start_line/end_line.",headlessToolNames:["read_files"]},{id:"search_codebase",description:"Perform regex pattern searches across the codebase for code patterns, definitions, imports, and other text matches.",headlessToolNames:["search_codebase"]},{id:"run_commands",description:"Run shell commands from the root of the workspace for listing files, checking git status, builds, tests, and similar tasks.",headlessToolNames:["run_commands"]},{id:"editor",description:"Make controlled filesystem edits on text files with create, replace, and insert operations.",headlessToolNames:["editor"]},{id:"fetch_web_content",description:"Fetch URL content and analyze it with a prompt describing what to extract.",headlessToolNames:["fetch_web_content"]},{id:"skills",description:"Execute a configured skill within the main conversation when a matching skill exists for the task.",headlessToolNames:["skills"]},{id:"ask_question",description:"Ask the user a single clarifying question with 2-5 selectable options.",headlessToolNames:["ask_question"]},{id:"spawn_agent",description:_$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...U8]}],pT={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function rT($){return $==="plan"||$==="yolo"?$:"act"}function tH($){let Z=rT($.mode),Q=u0[x1({mode:Z})],W=F8($.providerId??"",$.modelId??"",Z,K8);return{mode:Z,flags:{...Q,...W,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function oH($,Z){if(Z.disabledToolIds?.has($))return!1;let{flags:Q}=tH(Z);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let W=pT[$];return W?Q[W]===!0:!1}function iT($,Z){if($.id==="editor"){let{flags:Q}=tH(Z),W=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:oH($.id,Z),headlessToolNames:[W?"apply_patch":"editor"]}}return{...$,defaultEnabled:oH($.id,Z)}}function j2($={}){return lT.map((Z)=>iT(Z,$))}function AZ($={}){return j2($).filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id)}function fZ($){if(!$.enabled)return new Set;let Z=j2($.availabilityContext),Q=new Set(Z.map((W)=>W.id));if(!$.allowlist||$.allowlist.length===0)return new Set(Z.filter((W)=>W.defaultEnabled).map((W)=>W.id));for(let W of $.allowlist)if(!Q.has(W))throw Error(`Unknown tool "${W}". Available tools: ${Z.map((J)=>J.id).join(", ")}`);return new Set($.allowlist)}function z6($,Z={}){return j2(Z).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function UZ($,Z={}){return z6($,Z)}function V2($={}){let{executorOptions:Z={},executors:Q,...W}=$,J={...G8(Z),...Q??{}};return F$({...W,executors:J})}import{mkdirSync as eT,writeFileSync as $O}from"node:fs";import{dirname as ZO}from"node:path";import{normalizeUserInput as QO,stripModeNotices as WO}from"@cline/shared";import{nanoid as JO}from"nanoid";var $B={};N($B,{sanitizeSessionToken:()=>H2,parseTeamTaskSubSessionId:()=>_8,parseSubSessionId:()=>O6,makeTeamTaskSubSessionId:()=>T6,makeSubSessionId:()=>L8,deriveSubsessionStatus:()=>q6});import{nanoid as sT}from"nanoid";function H2($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function L8($,Z){let Q=H2($),W=H2(Z),J=`${Q}__${W}`;return J.length>180?J.slice(0,180):J}function T6($,Z){let Q=H2($),W=H2(Z);return`${Q}__teamtask__${W}__${sT(6)}`}function _8($){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 O6($){if(_8($))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 q6($){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 e}from"zod";var WB={};N(WB,{isTerminalSessionStatus:()=>QB,isNonTerminalSessionStatus:()=>H0,SessionSource:()=>z0,SESSION_STATUSES:()=>M6,NON_TERMINAL_SESSION_STATUSES:()=>ZB});import{SESSION_STATUS_VALUES as oT}from"@cline/shared";var M6=oT,ZB=["idle","running","pending"];function QB($){return!ZB.includes($)}function H0($){return!QB($)}var z0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var tT=e.enum(M6),P0=e.object({version:e.literal(1),session_id:e.string().min(1),source:e.string().min(1),pid:e.number().int(),started_at:e.string().min(1),ended_at:e.string().min(1).optional(),exit_code:e.number().int().nullable().optional(),status:tT,interactive:e.boolean(),provider:e.string().min(1),model:e.string().min(1),cwd:e.string().min(1),workspace_root:e.string().min(1),team_name:e.string().min(1).optional(),enable_tools:e.boolean(),enable_spawn:e.boolean(),enable_teams:e.boolean(),prompt:e.string().optional(),metadata:e.record(e.string(),e.unknown()).optional(),messages_path:e.string().min(1).optional()});function JB($){if(!$)return!1;return Object.values($).some((Z)=>typeof Z==="function")}function tW($,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 XB($){return JSON.stringify($,(Z,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function m1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function oW($,Z){let Q={...$};Q.id=m1(Q.id)??JO();let W=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,J={id:m1(W?.id)??m1(Q.modelId)??m1(Z?.id),provider:m1(W?.provider)??m1(Q.providerId)??m1(Z?.provider),family:m1(W?.family)??m1(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 DZ($){return $.map((Z)=>oW(Z))}function LZ($,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 oW(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]={...oW(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 R6($){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 XO=120;function B2($){let Z=$?.trim();return Z?Z.slice(0,XO):void 0}function eW($){let Z=WO(QO($??"")).trim();if(!Z)return;return B2(Z.split(`
198
198
  `)[0]?.trim())}function z$($){if(!$)return;let Z={...$},Q=B2(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 E6($){let Z=z$($.metadata)??{},Q=$.title!==void 0?B2($.title):eW($.prompt);if(Q)Z.title=Q;return Object.keys(Z).length>0?Z:void 0}function $3($){let Z=_8($);if(Z)return{agent:"teammate",sessionId:Z.rootSessionId,taskType:"team"};let Q=O6($);if(Q)return{agent:"subagent",sessionId:Q.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function Z3($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:DZ($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function YB($,Z,Q){eT(ZO($),{recursive:!0}),$O($,`${JSON.stringify(Z3({updatedAt:Z,context:Q,messages:[]}),null,2)}
199
- `,"utf8")}function jB($,Z){return P0.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 VB($,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}}L0();var HB={};N(HB,{summarizeUsageFromMessages:()=>T8,sumUsageTotals:()=>N6,getCurrentContextSize:()=>Q3,createInitialAccumulatedUsage:()=>D0,accumulateUsageTotals:()=>A0});function D0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function A0($,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 N6($){let Z=D0();for(let Q of $)Z=A0(Z,Q);return Z}function z8($){return typeof $==="number"&&Number.isFinite($)?$:0}function T8($){let Z=D0();for(let Q of $){let W=Q.metrics;if(!W)continue;Z=A0(Z,{inputTokens:z8(W.inputTokens),outputTokens:z8(W.outputTokens),cacheReadTokens:z8(W.cacheReadTokens),cacheWriteTokens:z8(W.cacheWriteTokens),totalCost:z8(W.cost)})}return Z}function Q3($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let W=z8(Q.metrics?.inputTokens);return W>0?W:void 0}return}function XO($){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 W3($){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 v1($){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 YO($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function jO($){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 J3($,Z,Q){let{sessionId:W,config:J,liveSession:X,emit:Y}=$,j=J.telemetry,V=X?.runtime.teamRuntime,H=Q?.isPrimaryAgentEvent??!0,B=W3(Z),G=v1({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=XO(Z.input);if(K)O9(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(e2(j,{ulid:W,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))q9(j,{ulid:W,modelId:J.modelId,provider:J.providerId,errorType:Z.error,...G})}if(Z.type==="notice"&&Z.reason==="api_error")b4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.message,...G});if(Z.type==="error")b4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.error?.message??"unknown error",...G});if(Z.type==="usage"&&X?.turnUsageBaseline){let K=YO(Z);if(H){X.turnPrimaryUsage=A0(X.turnPrimaryUsage??D0(),K);let A=A0(X.turnUsageBaseline,X.turnPrimaryUsage);$.usageBySession.set(W,A),t2(j,{ulid:W,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),z9(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=jO({isPrimaryAgentEvent:H,overrides:Q,eventMetadata:B}),L=X.turnUsageByAgent??new Map;X.turnUsageByAgent=L,L.set(A,A0(L.get(A)??D0(),K))}let F=A0(X.turnPrimaryUsage??D0(),N6(X.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(W,A0(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:XB(Z),ts:Date.now()}})}function T$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as LM}from"@cline/shared";Y1();import{existsSync as MZ,readFileSync as nO,statSync as aO}from"node:fs";import{basename as sO,dirname as OZ,join as RZ,resolve as qZ}from"node:path";import{discoverPluginModulePaths as oO,resolveConfiguredPluginModulePaths as PB,resolvePluginConfigSearchPaths as tO,SKILLS_CONFIG_DIRECTORY_NAME as eO}from"@cline/shared/storage";import{resolve as NO}from"node:path";import{normalizePluginManifest as CO}from"@cline/shared";import{existsSync as T0,readFileSync as q8}from"node:fs";import{builtinModules as VO,createRequire as V3}from"node:module";import{dirname as O$,extname as w6,isAbsolute as HO,resolve as p}from"node:path";import{fileURLToPath as GB}from"node:url";import{PLUGIN_FILE_EXTENSIONS as BO}from"@cline/shared";var KB=O$(GB(import.meta.url)),GO=V3(import.meta.url),KO=p(KB,"..","..","..","..",".."),X3=fO(KO),FO=["@cline/sdk","@cline/agents","@cline/core","@cline/core/hub","@cline/core/hub/daemon-entry","@cline/core/telemetry","@cline/llms","@cline/llms/browser","@cline/shared","@cline/shared/automation","@cline/shared/browser","@cline/shared/storage","@cline/shared/db","@cline/shared/types"],H3=new Set(VO.flatMap(($)=>[$,$.replace(/^node:/,"")])),C6=new Set(BO),AO=["development","node","import","require","default"];function fO($){let Z={},Q={"@cline/sdk":p($,"packages/sdk/src/index.ts"),"@cline/agents":p($,"packages/agents/src/index.ts"),"@cline/core":p($,"packages/core/src/index.ts"),"@cline/llms":p($,"packages/llms/src/index.ts"),"@cline/shared":p($,"packages/shared/src/index.ts"),"@cline/shared/storage":p($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":p($,"packages/shared/src/db/index.ts")};for(let[W,J]of Object.entries(Q))if(T0(J))Z[W]=J;for(let W of["agents","core","llms","shared"]){let J=p($,"packages",W),X=p(J,"package.json");if(!T0(X))continue;try{let Y=JSON.parse(q8(X,"utf8"));if(typeof Y.name!=="string"||!Y.exports)continue;if(typeof Y.exports==="string"){let j=p(J,Y.exports);if(T0(j))Z[Y.name]=j;continue}if(typeof Y.exports!=="object")continue;for(let[j,V]of Object.entries(Y.exports)){let H=UO(J,V);if(!H)continue;let B=j==="."?Y.name:`${Y.name}/${j.replace(/^\.\//,"")}`;Z[B]=H}}catch{}}return Z}function UO($,Z){let Q=B3(Z);if(!Q)return null;let W=FB($,Q);for(let J of W)if(T0(J))return J;return null}function B3($,Z=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(Z.has($))return null;Z.add($);let Q=$;for(let W of AO){let J=B3(Q[W],Z);if(J)return J}return null}function FB($,Z){let Q=Z.replace(/^\.\//,""),W=[p($,Z)];if(Q.startsWith("dist/")){let J=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[p($,`${J}.ts`),p($,`${J}.tsx`),p($,`${J}.mts`),p($,`${J}.cts`),...W]}return W}function DO($){return Object.fromEntries(Object.entries($).sort(([Z],[Q])=>Q.length-Z.length))}function _Z($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function O8($){if($.startsWith("@")){let[Z,Q]=$.split("/",3);return Q?`${Z}/${Q}`:$}return $.split("/",1)[0]??$}function LO($){let Z=O8($);if($===Z)return".";return`.${$.slice(Z.length)}`}function AB($){return O8($).startsWith("@cline/")}function Y3($,Z){let Q=O8(Z),W=O$($);while(!0){let J=p(W,"node_modules",Q);if(T0(J)||T0(p(J,"package.json")))return!0;let X=p(W,"..");if(X===W)return!1;W=X}}function BB($){return j3($)!==null}function j3($){try{return GO.resolve($)}catch{}return _O($)}function _O($){let Z=O8($),Q=fB(Z);if(!Q)return null;let W=p(Q,"package.json");try{let J=JSON.parse(q8(W,"utf8")),X=LO($),Y=X==="."&&typeof J.exports==="string"?J.exports:J.exports&&typeof J.exports==="object"&&Object.hasOwn(J.exports,X)?J.exports[X]:void 0,j=B3(Y)??(X==="."&&typeof J.main==="string"?J.main:null);if(!j)return null;let V=p(Q,j),H=[V,...FB(Q,j).filter((B)=>B!==V)];for(let B of H)if(T0(B))return B;return null}catch{return null}}function zO(){let $=[KB],Z=process.env.CLINE_WRAPPER_PATH?.trim();if(Z)$.push(O$(O$(Z)));let Q=process.execPath?.trim();if(Q)$.push(O$(Q));return[...new Set($.map((W)=>p(W)))]}function TO($,Z){let Q=$;while(!0){let W=p(Q,"package.json");if(T0(W))try{if(JSON.parse(q8(W,"utf8")).name===Z)return Q}catch{}let J=p(Q,"node_modules",Z,"package.json");if(T0(J))return O$(J);let X=p(Q,"..");if(X===Q)return null;Q=X}}function fB($){for(let Z of zO()){let Q=TO(Z,$);if(Q)return Q}return null}function OO($){let Q=O$($);for(let W=0;W<4;W++){let J=p(Q,"package.json");if(T0(J))try{let Y=JSON.parse(q8(J,"utf8"));return Y!=null&&typeof Y==="object"&&"cline"in Y}catch{return!1}let X=p(Q,"..");if(X===Q)return!1;Q=X}return!1}function UB($,Z){let Q=Z.startsWith("file:")?GB(Z):HO(Z)?Z:p(O$($),Z);if(T0(Q)&&C6.has(w6(Q)))return Q;for(let W of C6){let J=`${Q}${W}`;if(T0(J))return J}for(let W of C6){let J=p(Q,`index${W}`);if(T0(J))return J}return null}function DB($){let Z=new Set,Q=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let W of Q)for(let J of $.matchAll(W)){let X=J[1];if(X)Z.add(X)}return[...Z]}function qO($){return w6($)!==".ts"}function LB($,Z,Q=new Set){if(Q.has($)||!T0($))return;if(Q.add($),!C6.has(w6($)))return;let W=q8($,"utf8"),J=qO($);for(let X of DB(W)){if(X.startsWith("node:")||H3.has(X))continue;if(_Z(X)){if(!J)continue;if(Object.hasOwn(X3,X)||Object.hasOwn(X3,O8(X))||Y3($,X)||AB(X)&&BB(X)||Z&&BB(X))continue;throw Error(`Cannot find module '${O8(X)}'`)}let Y=UB($,X);if(Y)LB(Y,Z,Q)}}function _B($,Z=new Set,Q=new Set){if(Z.has($)||!T0($))return Q;if(Z.add($),!C6.has(w6($)))return Q;let W=q8($,"utf8");for(let J of DB(W)){if(Q.add(J),_Z(J))continue;let X=UB($,J);if(X)_B(X,Z,Q)}return Q}function MO($,Z){let Q=V3($),W={},J=_B($),X=new Set(FO);for(let[Y,j]of Object.entries(X3)){try{Q.resolve(Y);continue}catch{}W[Y]=j}for(let Y of J)if(_Z(Y)&&(AB(Y)||Z))X.add(Y);for(let Y of X){if(Object.hasOwn(W,Y)||Y3($,Y))continue;let j=j3(Y);if(j)W[Y]=j}if(!Z)return W;for(let Y of J){if(!_Z(Y)||Object.hasOwn(W,Y)||Y3($,Y)||Y.startsWith("node:")||H3.has(Y))continue;let j=j3(Y);if(j)W[Y]=j}return W}function RO($){let Z=w6($);return Z===".ts"||Z===".tsx"||Z===".mts"||Z===".cts"}var G2;function EO(){if(G2!==void 0)return G2;let $=fB("jiti");if(!$)return G2=null,null;let Z=p($,"dist","babel.cjs");if(!T0(Z))return G2=null,null;try{let W=V3(Z)(Z);G2=typeof W==="function"?W:null}catch{G2=null}return G2}async function zB($,Z={}){let Q=!OO($);LB($,Q);let W=MO($,Q),J=DO(W),X=await import("jiti"),Y=typeof X==="function"?X:typeof X.default==="function"?X.default:void 0;if(!Y)throw Error("Unable to load jiti");let j=Object.entries(J).filter(([,G])=>RO(G)).map(([G])=>G),V=EO(),H=V?(G)=>V({...G,interopDefault:!0}):void 0;return await Y($,{alias:J,cache:Z.useCache,requireCache:Z.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...H3],transformModules:j,tryNative:!1,...H?{transform:H}:{}}).import($,{})}function TB($,Z){if(!$)return!0;if($.providerIds?.length){if(!Z?.providerId||!$.providerIds.includes(Z.providerId))return!1}if($.modelIds?.length){if(!Z?.modelId||!$.modelIds.includes(Z.modelId))return!1}return!0}function OB($){return typeof $==="object"&&$!==null}function G3($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function wO($,Z){if(!OB($.manifest))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);if(!G3($.manifest.capabilities))throw Error(`Invalid plugin module at ${Z}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${Z}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!G3($.manifest.providerIds))throw Error(`Invalid plugin module at ${Z}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!G3($.manifest.modelIds))throw Error(`Invalid plugin module at ${Z}: manifest.modelIds must be a string array when provided`)}function PO($,Z){if(!OB($))throw Error(`Invalid plugin module at ${Z}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${Z}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);wO($,Z)}async function P6($,Z={}){let Q=NO(Z.cwd??process.cwd(),$),W=await zB(Q,{useCache:Z.useCache}),J=Z.exportName??"plugin",X=W.default??W[J];PO(X,Q);let Y=X,j=Y.setup,V=j?(H,B)=>{let G={...Z.session,...B.session},K={...B,session:Object.keys(G).length>0?G:void 0,client:Z.client??B.client,user:Z.user??B.user,workspaceInfo:Z.workspaceInfo??B.workspaceInfo,automation:Z.automation??B.automation,logger:Z.logger??B.logger,telemetry:Z.telemetry??B.telemetry};return j(H,K)}:void 0;return{...Y,manifest:CO(Y.manifest),setup:V}}async function zZ($,Z={}){return(await K2($,Z)).plugins}async function K2($,Z={}){let Q=[],W=[],J=new Map,X=0;for(let j of $)try{let V=await P6(j,Z);if(!TB(V.manifest,Z))continue;let H=J.get(V.name);if(H)W.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:j,overriddenPluginPath:H.pluginPath,message:`Plugin "${V.name}" from ${j} overrides ${H.pluginPath}`});J.set(V.name,{plugin:V,pluginPath:j,order:X++})}catch(V){let H=V instanceof Error?V.message:String(V);Q.push({pluginPath:j,phase:"load",message:H,stack:V instanceof Error?V.stack:void 0})}let Y=[...J.values()].sort((j,V)=>j.order-V.order);return{plugins:Y.map((j)=>j.plugin),pluginPaths:Y.map((j)=>j.pluginPath),failures:Q,warnings:W}}import{existsSync as f3}from"node:fs";import{createRequire as wB}from"node:module";import{dirname as TZ,join as R8}from"node:path";import{fileURLToPath as kO}from"node:url";var NB={};N(NB,{resolveSubprocessRuntimeExecutable:()=>K3,buildSubprocessSandboxCommand:()=>EB,SubprocessSandbox:()=>M8,CLINE_JS_RUNTIME_PATH_ENV:()=>RB});import{spawn as SO}from"node:child_process";import{basename as bO}from"node:path";import{augmentNodeCommandForDebug as yO,withResolvedClineBuildEnv as hO}from"@cline/shared";function qB($){if($ instanceof Error)return $;return Error(String($))}var RB="CLINE_JS_RUNTIME_PATH";function MB($){let Z=$?.trim();if(!Z)return!1;let Q=bO(Z).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function K3($={}){let Z=$.env??process.env,Q=$.runtimeExecutable?.trim()||Z[RB]?.trim();if(Q)return Q;let W=$.execPath?.trim()||process.execPath;if(MB(W))return W;for(let J of[Z.BUN_EXEC_PATH,Z.npm_node_execpath,Z.NODE]){let X=J?.trim();if(X&&MB(X))return X}return"node"}function EB($,Z={}){let Q=K3({env:Z.env,execPath:Z.execPath,runtimeExecutable:Z.runtimeExecutable});return yO([Q,...$],{env:Z.env,execArgv:Z.execArgv,debugRole:Z.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class M8{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let Z=this.pending.get($);if(!Z)return;if(this.pending.delete($),Z.timeout)clearTimeout(Z.timeout);return Z}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],Z=EB($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=SO(Z[0]??K3(this.options),Z.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:hO(process.env),windowsHide:!0});this.process=Q;let W="",J=(X)=>{let Y=W+X;W=Y.length>4000?Y.slice(-4000):Y};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(X)=>{J(X)}),Q.on("message",(X)=>{this.onMessage(X)}),Q.on("error",(X)=>{this.failPending(Error(`${this.processLabel} process error: ${qB(X).message}`))}),Q.on("exit",(X,Y)=>{this.process=null;let j=W.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(X)}, signal=${String(Y)})${j?`: ${j}`:""}`))})}async call($,Z,Q={}){this.start();let W=this.process;if(!W||W.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let J=`req_${++this.requestCounter}`,X={type:"call",id:J,method:$,args:Z};return await new Promise((Y,j)=>{let V={resolve:(H)=>Y(H),reject:j};if((Q.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(J),this.shutdown().catch(()=>{}),j(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(J,V),W.send(X,(H)=>{if(!H)return;let B=this.clearPendingRequest(J);if(!B)return;B.reject(Error(`${this.processLabel} failed to send call "${$}": ${qB(H).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((Z)=>{let Q=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}Z()},300);$.once("exit",()=>{clearTimeout(Q),Z()});try{$.kill("SIGTERM")}catch{clearTimeout(Q),Z()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let Z=this.clearPendingRequest($.id);if(!Z)return;if($.ok){Z.resolve($.result);return}Z.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[Z,Q]of this.pending.entries()){if(this.pending.delete(Z),Q.timeout)clearTimeout(Q.timeout);Q.reject($)}}}function IO($){return{...$,contributions:{tools:$.contributions?.tools??[],commands:$.contributions?.commands??[],rules:$.contributions?.rules??[],messageBuilders:$.contributions?.messageBuilders??[],providers:$.contributions?.providers??[],automationEventTypes:$.contributions?.automationEventTypes??[],mcpServers:$.contributions?.mcpServers??[],shortcuts:$.contributions?.shortcuts??[],flags:$.contributions?.flags??[]}}}function S6($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function xO(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function gO(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=wB($).resolve(`${xO()}/package.json`),W=R8(TZ(Q),"extensions","plugin-sandbox-bootstrap.js");return f3(W)?W:void 0}catch{return}}function mO(){let $=process.execPath?.trim();if(!$)return;let Z=R8(TZ(TZ($)),"extensions","plugin-sandbox-bootstrap.js");return f3(Z)?Z:void 0}function vO(){let $=TZ(kO(import.meta.url)),Z=wB(import.meta.url),Q=[R8($,"plugin-sandbox-bootstrap.js"),R8($,"extensions","plugin-sandbox-bootstrap.js"),R8($,"agents","plugin-sandbox-bootstrap.js"),gO(),mO()];for(let X of Q.filter((Y)=>typeof Y==="string"))if(f3(X))return{file:X};let W=R8($,"plugin-sandbox-bootstrap.ts"),J="jiti";try{J=Z.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(J)});`,`const jiti = createJiti(${JSON.stringify(W)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(W)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
200
- `)}}var F3=vO();function A3($,Z,Q){if(typeof $==="number"&&$>0)return $;if(Q){let W=process.env[Q];if(W){let J=Number(W);if(Number.isInteger(J)&&J>0)return J}}return Z}async function E8($){let Z=new M8({name:"plugin-sandbox",..."file"in F3?{bootstrapFile:F3.file}:{bootstrapScript:F3.script},onEvent:$.onEvent}),Q=A3($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),W=A3($.hookTimeoutMs,3000),J=A3($.contributionTimeoutMs,60000),X={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},Y,j=()=>{return Y??=Z.call("initialize",X,{timeoutMs:Q}).finally(()=>{Y=void 0}),Y},V;try{V=await Z.call("initialize",X,{timeoutMs:Q})}catch(G){throw await Z.shutdown().catch(()=>{}),G}let H=V.plugins.map(IO);return{extensions:H.map((G)=>{let K={name:G.name,__clinePluginPath:G.pluginPath,manifest:G.manifest,setup:(F)=>{cO(F,Z,G,J,j),uO(F,Z,G,J,j),dO(F,Z,G,J,j),pO(F,Z,G,J,j),lO(F,G)}};return K.hooks=iO(Z,G,W,j),K}),failures:V.failures,pluginPaths:H.map((G)=>G.pluginPath),shutdown:async()=>{await Z.shutdown()},warnings:V.warnings}}function cO($,Z,Q,W,J){for(let X of Q.contributions?.tools??[]){let Y={name:X.name,description:X.description??"",inputSchema:X.inputSchema??{type:"object",properties:{}},timeoutMs:X.timeoutMs,retryable:X.retryable,execute:async(j,V)=>{try{return await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:j,context:V},{timeoutMs:W})}catch(H){if(!S6(H))throw H;return await J(),await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:j,context:V},{timeoutMs:W})}}};$.registerTool(Y)}}function uO($,Z,Q,W,J){for(let X of Q.contributions?.commands??[])$.registerCommand({name:X.name,description:X.description,handler:async(Y)=>{try{return await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:Y},{timeoutMs:W})}catch(j){if(!S6(j))throw j;return await J(),await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:Y},{timeoutMs:W})}}})}function dO($,Z,Q,W,J){for(let X of Q.contributions?.rules??[])$.registerRule({id:X.ruleId,source:X.source,content:X.hasContentHandler===!0?async()=>{try{return await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:W})}catch(Y){if(!S6(Y))throw Y;return await J(),await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:W})}}:X.content??""})}function lO($,Z){for(let Q of Z.contributions?.providers??[])$.registerProvider({name:Q.name,description:Q.description,metadata:Q.metadata});for(let Q of Z.contributions?.automationEventTypes??[])$.registerAutomationEventType({eventType:Q.eventType,source:Q.source,description:Q.description,attributesSchema:Q.attributesSchema,payloadSchema:Q.payloadSchema,examples:Q.examples,metadata:Q.metadata});for(let Q of Z.contributions?.mcpServers??[])$.registerMcpServer(Q)}function pO($,Z,Q,W,J){for(let X of Q.contributions?.messageBuilders??[])$.registerMessageBuilder({name:X.name,async build(Y){try{let j=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:Y},{timeoutMs:W});return CB(j)?j:Y}catch(j){if(!S6(j))throw j;await J();let V=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:Y},{timeoutMs:W});return CB(V)?V:Y}}})}function CB($){return Array.isArray($)&&$.every((Z)=>typeof Z==="object"&&Z!==null&&("role"in Z)&&("content"in Z))}function rO($,Z,Q,W,J){return async(X)=>{try{return await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:X},{timeoutMs:W})}catch(Y){if(!S6(Y))throw Y;return await J(),await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:X},{timeoutMs:W})}}}function iO($,Z,Q,W){let J={};for(let X of Z.hooks??[])J[X]=rO($,Z.pluginId,X,Q,W);return Object.keys(J).length>0?J:void 0}var D3="package.json",$q="package";function b6($){return tO($)}function y6($){return oO($)}function Zq($){try{return MZ($)&&aO($).isDirectory()}catch{return!1}}function L3($){let Z=[],Q=new Set;for(let W of $){let J=qZ(W);if(Q.has(J))continue;Q.add(J),Z.push(J)}return Z}function SB($){let Z=L3($);return XZ(Z)}function bB($){return b6($).flatMap((Z)=>y6(Z)).filter((Z)=>MZ(Z))}function Qq($,Z){let Q=[];for(let W of $)try{Q.push(...PB([W],Z))}catch{}return Q}function U3($){return typeof $==="object"&&$!==null}function Wq($){try{let Z=JSON.parse(nO(RZ($,D3),"utf8"));if(!U3(Z)||!U3(Z.cline))return[];let Q=Z.cline.plugins;if(!Array.isArray(Q))return[];let W=[];for(let J of Q){if(typeof J==="string"){W.push(J);continue}if(!U3(J)||!Array.isArray(J.paths))continue;for(let X of J.paths)if(typeof X==="string")W.push(X)}return W}catch{return[]}}function yB($,Z){let Q=qZ(Z);return Wq($).some((W)=>qZ($,W)===Q)}function Jq($,Z){return sO($)===$q&&MZ(RZ(OZ($),D3))&&yB(OZ($),Z)}function Xq($){let Z=qZ($),Q=[],W=OZ(Z);while(!0){if(Jq(W,Z)){Q.push(W);break}if(MZ(RZ(W,D3))){if(yB(W,Z))Q.push(W);break}let J=OZ(W);if(J===W)break;W=J}return L3(Q)}function c1($={}){let Z=$.cwd??process.cwd(),Q=bB($.workspacePath),W=PB($.pluginPaths??[],Z);return SB([...W,...Q])}function Yq($={}){let Z=$.cwd??process.cwd(),Q=bB($.workspacePath),W=Qq($.pluginPaths??[],Z);return SB([...W,...Q])}function u1($){let Z=[];for(let Q of $)for(let W of Xq(Q)){let J=RZ(W,eO);if(Zq(J))Z.push(J)}return L3(Z)}function hB($={}){return u1(Yq($))}async function N8($={}){let Z=c1($);if(Z.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let W=await K2(Z,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:W.plugins,failures:W.failures,pluginPaths:W.pluginPaths,warnings:W.warnings}}let Q=await E8({pluginPaths:Z,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:Q.extensions??[],shutdown:Q.shutdown,failures:Q.failures,pluginPaths:Q.pluginPaths,warnings:Q.warnings}}import{execFile as jq}from"node:child_process";import{promisify as Vq}from"node:util";var Hq=Vq(jq);function _3($,Z){$?.log(Z,{severity:"warn"})}function Bq($){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 F2($,Z){let Q=await Hq("git",["-C",$,...Z],{windowsHide:!0});return{stdout:Q.stdout.trim(),stderr:Q.stderr.trim()}}async function z3($,Z){if(!$)return;let Q=`refs/cline/checkpoints/${Z}/`;try{let{stdout:W}=await F2($,["for-each-ref","--format=%(refname)",Q]),J=W.trim().split(`
201
- `).filter(Boolean);await Promise.allSettled(J.map((X)=>F2($,["update-ref","-d",X])))}catch{}}async function kB($,Z,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((W)=>F2($,["update-ref",`refs/cline/checkpoints/${Z}/${W.runCount}`,W.ref])))}function Gq($,Z){let Q=$.findIndex((W)=>W.runCount===Z.runCount);if(Q<0)return[...$,Z];return $.map((W,J)=>J===Q?Z:W)}function IB($){let Z=$.initialRunCount??0,Q,W=async()=>{if(Q!==void 0)return Q;try{Q=(await F2($.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 F2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:Z,kind:"commit"}}catch(B){_3($.logger,`${H}: ${B instanceof Error?B.message:String(B)}`);return}},Y=`cline checkpoint session=${$.sessionId} run=${Z}`,j="";try{j=(await F2($.cwd,["stash","create",Y])).stdout.trim()}catch(H){return _3($.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 F2($.cwd,["update-ref",V,j])}catch(H){_3($.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=Bq(j);if(V?.latest.ref===Y.ref)return;let H=Gq(V?.history??[],Y);await $.writeSessionMetadata({...j??{},checkpoint:{latest:Y,history:H}});return}}}import{spawn as zq}from"node:child_process";import{appendFileSync as Tq,readFileSync as Oq}from"node:fs";import{join as qq}from"node:path";import{augmentNodeCommandForDebug as mB,withResolvedClineBuildEnv as q3}from"@cline/shared";import{ensureHookLogDir as xB}from"@cline/shared/storage";function C8($,Z){if(!Z)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:Z}}import{existsSync as Kq,readdirSync as Fq}from"node:fs";import{basename as Aq,extname as fq,join as Uq}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as EZ,resolveHooksConfigSearchPaths as Dq}from"@cline/shared/storage";function h6($){return Dq($)}var w8;((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"})(w8||={});var k6={["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"},Lq=new Map(Object.values(w8).map(($)=>[$.toLowerCase(),$])),_q=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function I6($){let Z=fq($).toLowerCase();if(!_q.has(Z))return;let Q=Aq($,Z).trim().toLowerCase();return Lq.get(Q)}function q$($){let Z=[],Q=new Set,W=h6($).filter((J)=>Kq(J));for(let J of W)try{for(let X of Fq(J,{withFileTypes:!0})){if(!X.isFile())continue;let Y=I6(X.name);if(!Y)continue;let j=Uq(J,X.name);if(Q.has(j))continue;Q.add(j),Z.push({fileName:Y,hookEventName:k6[Y],path:j})}}catch{}return Z.sort((J,X)=>J.path.localeCompare(X.path))}function CZ($){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 NZ($,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 Mq($,Z){if(!Z)return $;if(!$)return{...Z};let Q=[$.context,Z.context].filter((J)=>typeof J==="string"&&J.length>0).join(`
202
- `),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 Rq($){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 T3($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function O0($,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 Eq($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
203
- `).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 Nq($,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 vB($,Z){if(Z.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await gB($,Z)}catch(Q){let W=Pq(Z.command,process.platform,Q);if(!W)throw Q;return await gB($,{...Z,command:W})}}async function gB($,Z){let Q=mB(Z.command,{env:Z.env,debugRole:"hook"}),W=zq(Q[0],Q.slice(1),{cwd:Z.cwd,env:q3(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 Nq(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}=Eq(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:H})})});return await Promise.race([G,X])}function Cq($){try{let Q=Oq($,"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 wq($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function Pq($,Z=process.platform,Q){if(Z!=="win32"||!wq(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function cB($){if($.length===0)return;let[Z,...Q]=$,W=Z.replace(/\\/g,"/").toLowerCase(),J=W.split("/").at(-1)??W;if(J==="env")return cB(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 Sq($){let Z=Cq($);if(Z&&Z.length>0)return[...cB(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 mB(["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 bq($){let Z={};for(let Q of q$($)){if(!Q.hookEventName)continue;let W=Q.hookEventName,J=Z[W]??[];J.push(Sq(Q.path)),Z[W]=J}return Z}async function yq($){let Z;for(let Q of $.commands){let W=Q.join(" ");try{let J=await vB($.payload,{command:Q,cwd:$.cwd,env:q3(process.env),detached:!1,timeoutMs:$.timeoutMs});if(J?.timedOut){NZ($.logger,`hook command timed out: ${W}`);continue}if(J?.parseError){NZ($.logger,`hook command returned invalid JSON control output: ${W} (${J.parseError})`);continue}Z=Mq(Z,Rq(J?.parsedJson))}catch(J){NZ($.logger,`hook command failed: ${W}`,J)}}return Z}function A2($){for(let Z of $.commands){let Q=Z.join(" ");vB($.payload,{command:Z,cwd:$.cwd,env:q3(process.env),detached:!0}).catch((W)=>{NZ($.logger,`hook command failed: ${Q}`,W)})}}function M$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function O3($,Z){return{...M$($.snapshot),userMessage:Z}}function uB($){return{...M$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function dB($){return{...M$($.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 lB($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function hq($){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 P8($){let Z={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(W)=>{let J=`${JSON.stringify({ts:new Date().toISOString(),...W})}
204
- `,Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??qq(xB(),"hooks.jsonl");xB(Y),Tq(Y,J,"utf8")};return{beforeRun:async(W)=>{let J=O3(W,"");Q({...O0(J,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(W)=>{let J=uB(W);Q({...O0(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:CZ(J.call.input)}});return},afterTool:async(W)=>{let J=dB(W);Q({...O0(J,Z),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:CZ(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=M$(W);if(J.status==="completed"){Q({...O0(X,Z),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||T3(J.error?.message)){Q({...O0(X,Z),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Q({...O0(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=O3({snapshot:W.snapshot},lB(W.message.content));Q({...O0(J,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function x6($){let Z=bq($.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;A2({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...O0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...O0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=Z.prompt_submit??[];if(K.length>0)A2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},X=async(G)=>{let K=Z.tool_call??[];if(K.length===0)return;return yq({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...O0(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:CZ(G.call.input)}}})},Y=async(G)=>{let K=Z.tool_result??[];if(K.length===0)return;A2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:CZ(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;A2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(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;A2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},H=async(G)=>{if(T3(G.reason)){let F=Z.agent_abort??[];if(F.length>0)A2({commands:F,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=Z.session_shutdown??[];if(K.length===0)return;A2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(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(M$(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(O3({snapshot:G.snapshot},lB(G.message.content)))}}if((Z.tool_call?.length??0)>0)B.beforeTool=async(G)=>{let K=await X(uB(G));return hq(K)};if((Z.tool_result?.length??0)>0)B.afterTool=async(G)=>{await Y(dB(G));return};if((Z.agent_end?.length??0)>0)B.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await j({...M$(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"||T3(A.error?.message)){await H({...M$(F),reason:A.error?.message});return}if(A.error)await V({...M$(F),iteration:A.iterations,error:A.error})}}return B}function S8($){return C8("core.hook_config_files",x6($))}function f2($,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 U2($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:f2(Z,"beforeRun"),afterRun:f2(Z,"afterRun"),beforeModel:f2(Z,"beforeModel"),afterModel:f2(Z,"afterModel"),beforeTool:f2(Z,"beforeTool"),afterTool:f2(Z,"afterTool"),onEvent:f2(Z,"onEvent")}}var pB={};N(pB,{normalizeRuntimeCapabilities:()=>q0});function q0(...$){let Z,Q;for(let J of $){if(!J)continue;if(J.toolExecutors)Z={...Z??{},...J.toolExecutors};if(J.requestToolApproval)Q=J.requestToolApproval}let W=Z&&Object.keys(Z).length>0;if(!W&&!Q)return;return{...W?{toolExecutors:Z}:{},...Q?{requestToolApproval:Q}:{}}}var $G={};N($G,{toProviderConfig:()=>l0,emptyStoredProviderSettings:()=>N$,StoredProviderSettingsSchema:()=>k8,StoredProviderSettingsEntrySchema:()=>oZ,ProviderSettingsSchemaTyped:()=>h8});import{z as E$}from"zod";var eB={};N(eB,{toProviderConfig:()=>l0,safeParseSettings:()=>sZ,safeCreateProviderConfig:()=>y3,parseSettings:()=>aZ,normalizeProviderId:()=>y8,isBuiltInProviderId:()=>S3,createProviderConfig:()=>b3,SapSettingsSchema:()=>rZ,ReasoningSettingsSchema:()=>uZ,ProviderSettingsSchema:()=>R$,ProviderProtocolSchema:()=>mZ,ProviderIdSchema:()=>u6,ProviderClientSchema:()=>vZ,OcaSettingsSchema:()=>iZ,ModelCatalogSettingsSchema:()=>nZ,GcpSettingsSchema:()=>lZ,BUILT_IN_PROVIDER_IDS:()=>P3,BUILT_IN_PROVIDER:()=>c6,AzureSettingsSchema:()=>pZ,AwsSettingsSchema:()=>dZ,AuthSettingsSchema:()=>cZ});import*as d0 from"@cline/llms";import{z as C}from"zod";var tB={};N(tB,{resolveProviderConfig:()=>v6,getProviderConfig:()=>gZ,getLiveModelsCatalog:()=>b8,clearPublicModelsCatalogCache:()=>WM,clearPrivateModelsCatalogCache:()=>w3,clearLiveModelsCatalogCache:()=>C3,OPENAI_COMPATIBLE_PROVIDERS:()=>m6,DEFAULT_MODELS_CATALOG_URL:()=>hZ});import*as s from"@cline/llms";function M3($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let W of[Q.id,Q.name,Q.model])if(typeof W==="string"&&W.trim())return W.trim()}return""}).filter((Z)=>Z.length>0)}function kq($,Z){let Q=M3($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let W=$,J=M3(W.data??W.models);if(J.length>0)return J;if(W.models&&typeof W.models==="object"&&!Array.isArray(W.models)){let Y=Object.keys(W.models).filter((j)=>j.trim().length>0);if(Y.length>0)return Y}let X=W.providers?.[Z];if(X&&typeof X==="object"){let j=M3(X.models??X);if(j.length>0)return j}return[]}async function wZ($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return kq(await Q.json(),Z)}function rB($){return $.replace(/\/+$/,"")}function PZ($,Z,Q){let W=Q?.trim();if(!W)return;let J=$?.trim();if(!J||!Z?.trim())return W;try{let X=new URL(W),Y=new URL(Z),j=new URL(J);if(X.origin!==Y.origin)return W;let V=rB(Y.pathname),H=rB(j.pathname);if(V&&X.pathname.startsWith(`${V}/`)){let B=X.pathname.slice(V.length);j.pathname=`${H}${B}`}else j.pathname=X.pathname;return j.search=X.search,j.hash=X.hash,j.toString()}catch{return W}}function Iq($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function xq($){if($.baseUrl.length===0)return!1;switch($.client){case"openai-compatible":case"openai":case"openai-r1":case"fetch":return!0;default:return $.protocol==="openai-chat"}}var gq=Object.values(s.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:Iq($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),nB=Object.fromEntries(gq.map(($)=>[$.id,$]));function mq($){return nB[$]}function vq(){return Object.fromEntries(Object.entries(nB).filter(([,$])=>xq($)))}function aB($=[]){let Z=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return Z.length>0?Z:void 0}var hZ="https://models.dev/api.json",cq=600000,sB=300000,uq=5000,yZ=new Map,g6=new Map,R3=new Map,SZ=new Map;async function dq(){return s.getGeneratedProviderModels()}async function lq($,Z={},Q={},W={},J={},X={}){if($==="litellm")return s.sortModelsByReleaseDate(W);let Y=await dq(),j=s.resolveProviderModelCatalogKeys($),V=Object.assign({},...j.map((K)=>Y[K]??{})),H=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),B=Object.keys(J).length>0;if(H&&B)return s.sortModelsByReleaseDate({...J,...X});if($==="openai-codex")return s.sortModelsByReleaseDate({...Z,...s.filterOpenAICodexModels(Q),...J,...X});if($==="cline-pass"&&Object.keys(Q).length>0)return s.sortModelsByReleaseDate({...Q,...X});let G=s.sortModelsByReleaseDate({...V,...Z,...Q,...W,...J});if($==="cline")return s.sortModelsByReleaseDate({...s.preferCanonicalModelIds(G,s.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...X});return s.sortModelsByReleaseDate({...G,...X})}function pq($,Z){let Q=s.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((W)=>Z[W]??{}))}function kZ($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function N3($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function rq($){let Z=2166136261;for(let Q=0;Q<$.length;Q+=1)Z^=$.charCodeAt(Q),Z+=(Z<<1)+(Z<<4)+(Z<<7)+(Z<<8)+(Z<<24);return(Z>>>0).toString(16)}function iq($,Z){return`${$}:${kZ(Z.baseUrl)}:${rq(N3(Z)??"")}`}async function IZ($,Z,Q=uq){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await fetch($,{...Z,signal:W.signal})}finally{clearTimeout(J)}}function D2($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function xZ($,Z){let Q=["streaming","tools"];return D2(Q,"images",Boolean(Z.supportsImages)),D2(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),D2(Q,"reasoning",Boolean(Z.supportsReasoning)),{id:$,name:Z.name??$,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxTokens:Z.maxTokens,capabilities:Q,releaseDate:Z.releaseDate,status:"active"}}async function nq($,Z){let Q=await IZ("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;if(j.includes("whisper")||j.includes("tts")||j.includes("embedding"))continue;let V=Y.supported_features??[];X[j]=xZ(j,{name:j,contextWindow:Y.context_length,maxInputTokens:Y.context_length,maxTokens:Y.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return X}function iB($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function aq($,Z){let Q=await IZ("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":Z}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;X[j]=xZ(j,{name:j,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return X}async function sq($,Z){let W=`${(kZ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await IZ(W,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!J.ok)throw Error(`Poolside model refresh failed: HTTP ${J.status}`);let Y=(await J.json())?.data??[],j={};for(let V of Y){let H=V.id?.trim();if(!H)continue;let B=V.supported_features??[],G=V.supported_sampling_parameters??[],K=V.input_modalities??[],F=["streaming"];D2(F,"tools",B.includes("tools")),D2(F,"reasoning",B.includes("reasoning")),D2(F,"temperature",G.includes("temperature")),D2(F,"images",K.includes("image"));let A={input:iB(V.pricing?.prompt),output:iB(V.pricing?.completion)};j[H]={id:H,name:V.name??H,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:A.input!==void 0||A.output!==void 0?A:void 0,status:"active"}}return j}function oq($){let Z=kZ($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function tq($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function eq($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,W=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${W}`}async function $M($,Z){let Q=oq($.baseUrl),W=[],J=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let X of tq(Q))for(let[Y,j]of J)try{let V=await IZ(X,{method:"GET",headers:{accept:"application/json",...j}});if(V.ok){let B=(await V.json())?.data??[],G={};for(let K of B){let F=K.model_name?.trim(),L=K.litellm_params?.model?.trim()||F;if(!L)continue;let f=K.model_info,D=xZ(L,{name:F??L,maxTokens:f?.max_output_tokens??f?.max_tokens,maxInputTokens:f?.max_input_tokens??f?.max_tokens,supportsImages:f?.supports_vision,supportsPromptCache:f?.supports_prompt_caching,supportsReasoning:f?.supports_reasoning});if(G[L]=D,F)G[F]={...D,id:F,name:F}}return G}W.push(`${new URL(X).pathname} (${Y}): ${await eq(V)}`)}catch(V){let H=V instanceof Error?V.message:String(V);W.push(`${new URL(X).pathname} (${Y}): ${H}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${W.join("; ")}`)}var oB={baseten:nq,hicap:aq,litellm:$M,poolside:sq},E3=new Map,bZ=new Map;function ZM($,Z){return`${$}:${kZ(Z.baseUrl)}`}async function QM($,Z,Q){let W=s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=PZ(Q.baseUrl,W?.provider.baseUrl,W?.provider.modelsSourceUrl);if(!J)return{};let X=Z?.cacheTtlMs??sB,Y=ZM($,Q),j=Date.now(),V=E3.get(Y);if(V&&V.expiresAt>j)return V.data;let H=bZ.get(Y);if(H)return H;let B=wZ(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,xZ(F,{name:F})]));return E3.set(Y,{data:K,expiresAt:j+X}),K}).finally(()=>{bZ.delete(Y)});return bZ.set(Y,B),B}function WM(){E3.clear(),bZ.clear()}async function JM($,Z){let Q=N3(Z);if(!Q)return{};let W=oB[$];if(!W)return{};return W(Z,Q)}function XM($,Z,Q){if(!Q)return!1;if(!oB[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(N3(Q))}async function YM($,Z,Q){let W=Z?.cacheTtlMs??sB,J=iq($,Q),X=Date.now(),Y=R3.get(J);if(Y&&Y.expiresAt>X)return Y.data;let j=SZ.get(J);if(j)return j;let V=JM($,Q).then((H)=>{return R3.set(J,{data:H,expiresAt:X+W}),H}).finally(()=>{SZ.delete(J)});return SZ.set(J,V),V}async function jM($){return s.fetchLiveProviderModels($,globalThis.fetch)}async function b8($={}){let Z=$.url??hZ,Q=$.cacheTtlMs??cq,W=Date.now(),J=yZ.get(Z);if(J&&J.expiresAt>W)return J.data;let X=g6.get(Z);if(X)return X;let Y=jM(Z).then((j)=>{return yZ.set(Z,{data:j,expiresAt:W+Q}),j}).finally(()=>{g6.delete(Z)});return g6.set(Z,Y),Y}function C3($){if($){yZ.delete($),g6.delete($);return}yZ.clear(),g6.clear()}function w3(){R3.clear(),SZ.clear()}function VM($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:aB(Q.capabilities)}]))}var m6=VM(vq());function gZ($){let Z=mq($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:aB(Z.capabilities)}}async function v6($,Z,Q){let W=gZ($);if(!W)return;try{let J=Z?.loadLatestOnInit?await b8(Z):void 0,X=J?pq($,J):{},Y=Q&&XM($,Z,Q)?await YM($,Z,Q):{},V=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:W.modelId,baseUrl:W.baseUrl}:Q,H=V?await QM($,Z,V).catch(()=>({})):{},B=await lq($,W.knownModels,X,Y,H,Q?.knownModels);return{...W,knownModels:B}}catch(J){if(Z?.failOnError)throw J;if($==="litellm")return{...W,knownModels:{}};return W}}var c6=d0.BUILT_IN_PROVIDER,P3=d0.BUILT_IN_PROVIDER_IDS,S3=d0.isBuiltInProviderId,y8=d0.normalizeProviderId,u6=C.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),mZ=C.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),vZ=C.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),cZ=C.object({apiKey:C.string().optional(),accessToken:C.string().optional(),refreshToken:C.string().optional(),expiresAt:C.number().int().positive().optional(),accountId:C.string().optional()}),HM=C.enum(["none","low","medium","high","xhigh"]),uZ=C.object({enabled:C.boolean().optional(),effort:HM.optional(),budgetTokens:C.number().int().positive().optional()}),dZ=C.object({accessKey:C.string().optional(),secretKey:C.string().optional(),sessionToken:C.string().optional(),region:C.string().optional(),profile:C.string().optional(),authentication:C.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:C.boolean().optional(),useCrossRegionInference:C.boolean().optional(),useGlobalInference:C.boolean().optional(),endpoint:C.string().url().optional(),customModelBaseId:C.string().optional()}),lZ=C.object({projectId:C.string().optional(),region:C.string().optional()}),pZ=C.object({apiVersion:C.string().optional(),useIdentity:C.boolean().optional()}),rZ=C.object({clientId:C.string().optional(),clientSecret:C.string().optional(),tokenUrl:C.string().url().optional(),resourceGroup:C.string().optional(),deploymentId:C.string().optional(),useOrchestrationMode:C.boolean().optional(),api:C.enum(["orchestration","foundation-models"]).optional(),defaultSettings:C.record(C.string(),C.unknown()).optional()}),iZ=C.object({mode:C.enum(["internal","external"]).optional(),usePromptCache:C.boolean().optional()}),nZ=C.object({loadLatestOnInit:C.boolean().optional(),loadPrivateOnAuth:C.boolean().optional(),url:C.string().url().optional(),cacheTtlMs:C.number().int().positive().optional(),failOnError:C.boolean().optional()}),R$=C.object({provider:u6,apiKey:C.string().optional(),auth:cZ.optional(),model:C.string().optional(),protocol:mZ.optional(),client:vZ.optional(),routingProviderId:u6.optional(),maxTokens:C.number().int().positive().optional(),contextWindow:C.number().int().positive().optional(),baseUrl:C.string().url().optional(),headers:C.record(C.string(),C.string()).optional(),timeout:C.number().int().positive().optional(),reasoning:uZ.optional(),aws:dZ.optional(),gcp:lZ.optional(),azure:pZ.optional(),sap:rZ.optional(),oca:iZ.optional(),region:C.string().optional(),apiLine:C.enum(["china","international"]).optional(),capabilities:C.array(C.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:nZ.optional()});function aZ($){return R$.parse($)}function sZ($){return R$.safeParse($)}function BM($){return $.protocol==="openai-responses"||$.client==="openai"}function l0($,Z={}){let Q=$.provider,W=y8(Q),J=Z.includeKnownModels!==!1,X=$.reasoning?.effort||"none",Y=X==="none"?void 0:X,j=m6[W],V=Object.assign({},...d0.resolveProviderModelCatalogKeys(W).map((L)=>d0.getGeneratedModelsForProvider(L))),H=Object.keys(V)[0],B=X8(W,$),G=$.baseUrl??(W==="oca"?$.oca?.mode==="internal"?x9:g9:j?.baseUrl),K=$.routingProviderId??(BM($)&&W!==c6.OPENAI_NATIVE?c6.OPENAI_NATIVE:void 0),F=J?j?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,A={providerId:Q,clientType:$.client,routingProviderId:K,modelId:$.model??j?.modelId??H??"default",...J?{knownModels:F}:{},apiKey:B,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:Y,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??j?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(A).filter(([L,f])=>f!==void 0))}function b3($){let Z=aZ($);return l0(Z)}function y3($){let Z=sZ($);if(Z.success)return{success:!0,config:l0(Z.data)};return{success:!1,error:Z.error}}var h8=R$;var oZ=E$.object({settings:R$,updatedAt:E$.string().datetime(),tokenSource:E$.enum(["manual","oauth","migration"]).default("manual")}),k8=E$.object({version:E$.literal(1),lastUsedProvider:E$.string().min(1).optional(),providers:E$.record(E$.string(),oZ)});function N$(){return{version:1,providers:{}}}Y1();var JG={};N(JG,{InMemoryWorkspaceManager:()=>x8});import{upsertWorkspaceInfo as AM,WorkspaceManifestSchema as k3}from"@cline/shared";var WG={};N(WG,{normalizeWorkspacePath:()=>d1,generateWorkspaceInfoWithDiagnostics:()=>d6,generateWorkspaceInfo:()=>I8,buildWorkspaceMetadataWithInfo:()=>h3,buildWorkspaceMetadata:()=>l6});import{basename as GM,resolve as KM}from"node:path";import{performance as ZG}from"node:perf_hooks";import{processWorkspaceInfo as QG}from"@cline/shared";import FM from"simple-git";function d1($){return KM($)}async function I8($){return(await d6($)).info}function tZ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function d6($){let Z=d1($),Q={rootPath:Z,hint:GM(Z)},W;try{let J=FM({baseDir:Z});if(!await J.checkIsRepo())return{info:Q,vcsType:"none"};try{let Y=await J.getRemotes(!0);if(Y.length>0){let j=Y.map((V)=>{let H=V.refs.fetch||V.refs.push;return`${V.name}: ${H}`});Q.associatedRemoteUrls=j}}catch(Y){W??=tZ(Y)}try{let Y=(await J.revparse(["HEAD"])).trim();if(Y.length>0)Q.latestGitCommitHash=Y}catch(Y){W??=tZ(Y)}try{let Y=(await J.branch()).current.trim();if(Y.length>0)Q.latestGitBranchName=Y}catch(Y){W??=tZ(Y)}return{info:Q,vcsType:"git",error:W}}catch(J){return{info:Q,vcsType:"none",error:tZ(J)}}}async function l6($){let Z=await I8($);return QG(Z)}async function h3($){let Z=ZG.now(),Q=await d6($),W=ZG.now()-Z,J=Q.info;return{workspaceInfo:J,workspaceMetadata:QG(J),durationMs:W,vcsType:Q.vcsType,initError:Q.error}}class x8{manifest;listeners=new Set;constructor($){this.manifest=k3.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await I8($);return this.manifest=AM(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=d1($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=k3.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let W=await this.addWorkspacePath(Z);return this.manifest=k3.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=d1($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}L0();import{createHash as fM}from"node:crypto";var XG=new Set,YG=new Set;function UM($){return fM("sha256").update($).digest("hex")}function DM($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function jG($){if(!$.telemetry)return;let Z=UM($.rootPath),Q=$.rootCount??1;if(!XG.has(Z))XG.add(Z),U9($.telemetry,{root_count:Q,vcs_types:DM($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!YG.has(Z)){YG.add(Z);let W=Error($.initError.message);W.name=$.initError.errorType||"Error",D9($.telemetry,W,{fallback_to_single_root:!0,workspace_count:Q})}}function _M($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function zM($,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(_M).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 TM($,Z){let Q=typeof $.thinking==="boolean",W=typeof $.reasoningEffort==="string";if(!Q&&!W)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...W?{effort:$.reasoningEffort}:{}}}function VG($,Z){return LM($,Z)}function OM($){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 qM($){let Z={...$.storedHeaders??{},...$.configHeaders??{}},Q=$.accountId?.trim()||MM($.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 MM($){let Z=$?.trim();if(!Z)return;let Q=R0(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 RM($,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"?qM({sessionId:Z,configHeaders:$.headers,storedHeaders:X?.headers,accountId:X?.auth?.accountId,accessToken:$.apiKey??X?.auth?.accessToken??X?.apiKey}):$.headers??X?.headers,reasoning:TM($,X?.reasoning),modelCatalog:Y},H={...l0(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 HG($){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=T$(Z.config),{modelCatalogDefaults:f,userInstructionService:D,configExtensions:U,onTeamRestored:T,...q}=K??{},z=Object.keys(q).length>0?q:void 0,{workspaceInfo:_,workspaceMetadata:E,durationMs:w,vcsType:y,initError:l}=await h3(L),o=z?.extensionContext,t={...o??{},workspace:{..._,...o?.workspace??{}},session:{...o?.session??{},sessionId:Q},logger:o?.logger??z?.logger,telemetry:o?.telemetry??z?.telemetry??J};jG({telemetry:t.telemetry,rootPath:_.rootPath,workspaceInfo:_,rootCount:1,vcsType:y,durationMs:w,initError:l,featureFlagEnabled:!0});let Q0=S8({cwd:Z.config.cwd,workspacePath:L,rootSessionId:Q,logger:z?.logger,workspaceInfo:_}),Q1=JB(z?.hooks)?void 0:P8({rootSessionId:Q,workspacePath:L,workspaceInfo:_}),l$=U2([z?.hooks,Q1]),r;if(VG(U,"plugins"))try{r=await N8({pluginPaths:z?.pluginPaths,workspacePath:L,cwd:Z.config.cwd,onEvent:V,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:_,session:t.session,client:t.client,user:t.user,logger:t.logger,telemetry:t.telemetry,automation:t.automation}),zM(r.failures,r.warnings,z?.logger)}catch(o2){let ZW=o2 instanceof Error?o2.message:String(o2);z?.logger?.log?.(`plugin loading failed; continuing without plugins (${ZW})`)}let P=tW(Q0?[Q0]:void 0,tW(z?.extensions,YZ(r?.extensions))),B0=VG(U,"plugins")?u1(r?.pluginPaths??[]):void 0,G0={...Z.config,...z??{},sessionId:Q,hooks:l$,extensions:P,extensionContext:t,telemetry:t.telemetry},w0=RM(G0,Q,W,f,j),a2=U2([G0.hooks,G0.checkpoint?.enabled===!0?IB({cwd:G0.cwd,sessionId:Q,logger:G0.logger,createCheckpoint:G0.checkpoint?.createCheckpoint,initialRunCount:OM(Z.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),R1={...G0,providerConfig:w0,workspaceMetadata:E,hooks:a2},G1=Z.toolPolicies??G0.toolPolicies??Y,P4=q0(X,Z.capabilities),s2=P4?.requestToolApproval,K9=P4?.toolExecutors,E1=B?.(R1),F9=new x8({currentWorkspacePath:_.rootPath,workspaces:{[_.rootPath]:_}});return{effectiveInput:Z,config:R1,providerConfig:w0,workspaceMetadata:E,workspaceInfo:_,extensions:P,hooks:a2,toolPolicies:G1,requestToolApproval:s2,pluginSandboxShutdown:r?.shutdown,runtimeBuilderInput:{config:R1,hooks:a2,extensions:P,onTeamEvent:H,createSpawnTool:G,onTeamRestored:T,onSubAgentEvent:E1?.onSubAgentEvent,onSubAgentStart:E1?.onSubAgentStart,onSubAgentEnd:E1?.onSubAgentEnd,userInstructionService:D,pluginSkillDirectories:B0,configExtensions:U,toolExecutors:K9,toolPolicies:G1,workspaceManager:F9,logger:R1.logger,telemetry:R1.telemetry,requestToolApproval:s2}}}import{existsSync as $Q,mkdirSync as EM,readdirSync as NM,rmdirSync as CM,rmSync as wM,unlinkSync as PM}from"node:fs";import{dirname as BG,join as eZ}from"node:path";function J0(){return new Date().toISOString()}function p6($){if(!$||!$Q($))return;try{PM($)}catch{}}function SM($){let Z=_8($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=O6($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class I3{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return eZ(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!$Q(Z))EM(Z,{recursive:!0});return Z}sessionMessagesPath($){return eZ(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return eZ(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!$Q(Z)){Z=BG(Z);continue}try{if(NM(Z).length>0)break;CM(Z)}catch{break}Z=BG(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!$Q($))return;try{wM($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:W,fileStem:J}=SM($),X=this.sessionArtifactsDir(W);return{messagesPath:eZ(X,`${J}.messages.json`)}}}import{resolveDocumentsExtensionPath as bM}from"@cline/shared/storage";L0();function GG($,Z,Q,W,J){if(Q)_9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});else L9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});yM($.telemetry,{workspacePath:W})}function yM($,Z){let Q=bM("Hooks"),W=q$(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())C9($,X,Y.global,Y.workspace)}function KG($,Z){for(let Q of Z.mentions)E9($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)M9($,"file",Q.length);for(let Q of Z.ignoredMentions)R9($,"file","not_found",Q)}var HD={};N(HD,{ProviderSettingsManager:()=>q1});import{chmodSync as GD,existsSync as lY,mkdirSync as Jg,readFileSync as Xg,writeFileSync as Yg}from"node:fs";import{basename as KD,dirname as pY}from"node:path";import{resolveProviderSettingsPath as jg}from"@cline/shared/storage";var M={};N(M,{writeHubDiscovery:()=>wQ,writeGlobalSettings:()=>K1,withHubStartupLock:()=>PQ,verifyHubConnection:()=>f1,updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>l8,updateMcpServerOAuthStateAsync:()=>H5,updateMcpServerOAuthState:()=>O2,updateLocalProvider:()=>u7,uninstallPlugin:()=>Q9,uninstallMarketplaceSkill:()=>q7,uninstallMarketplacePlugin:()=>M7,uninstallMarketplaceMcpServerFromSettings:()=>T7,uninstallMarketplaceEntry:()=>HY,truncateNotificationBody:()=>r5,truncateCommandOutput:()=>o$,toggleDisabledTool:()=>JZ,toTeamProgressLifecycleEvent:()=>X4,toProviderConfig:()=>l0,toHubStatusUrl:()=>NJ,toHubHealthUrl:()=>SQ,toHookConfigFileName:()=>I6,syncPluginMcpServersToSettings:()=>$9,summarizeUsageFromMessages:()=>T8,stopLocalHubServerGracefully:()=>mJ,startLocalOAuthServer:()=>W1,startHubWebSocketServer:()=>d2,startHubServer:()=>xf,startClineDeviceAuth:()=>HW,splitCoreSessionConfig:()=>U5,spawnDetachedHubServerWithRetry:()=>o8,spawnDetachedHubServer:()=>yJ,setTelemetryOptOutGlobally:()=>aV,setMcpServerDisabled:()=>z2,setDisabledTools:()=>kW,setDisabledPlugin:()=>WH,setCompactionStrategyGlobally:()=>eV,setAutoUpdateEnabledGlobally:()=>oV,sendHubCommand:()=>hA,saveProviderOAuthCredentials:()=>n$,saveLocalProviderSettings:()=>qY,saveLocalProviderOAuthCredentials:()=>NY,sanitizeSessionToken:()=>H2,safeParseSettings:()=>sZ,safeCreateProviderConfig:()=>y3,runSubprocessEvent:()=>K4,runHook:()=>A4,reviveTeamStateDates:()=>FZ,restartLocalHubIfIdleAfterStartupTimeout:()=>IQ,resolveWorkspaceHubOwnerContext:()=>KF,resolveWorkflowsConfigSearchPaths:()=>Q5,resolveSkillsConfigSearchPaths:()=>$5,resolveSharedHubOwnerContext:()=>y0,resolveSessionBackend:()=>XX,resolveRulesConfigSearchPaths:()=>Z5,resolveProviderConfig:()=>v6,resolveProviderApiKeyFromSettings:()=>fW,resolveProductionHubOwnerContext:()=>s0,resolvePluginSkillDirectoriesFromPaths:()=>u1,resolvePluginConfigSearchPaths:()=>b6,resolveMcpServerRegistrations:()=>p0,resolveMarketplaceMcpServerName:()=>J9,resolveLocalClineAuthToken:()=>wY,resolveHubUrl:()=>fX,resolveHubOwnerContext:()=>n1,resolveHubEndpointOptions:()=>a0,resolveHubBuildId:()=>CQ,resolveHooksConfigSearchPaths:()=>h6,resolveDisabledToolNames:()=>F1,resolveDisabledPluginPaths:()=>A6,resolveDefaultMcpSettingsPath:()=>$0,resolveDefaultHubPort:()=>s8,resolveDefaultHubPathname:()=>bJ,resolveDefaultHubHost:()=>SJ,resolveCoreSelectedToolIds:()=>fZ,resolveCoreDistinctId:()=>h0,resolveCompatibleLocalHubUrl:()=>P5,resolveClineDir:()=>VF,resolveClineDataDir:()=>P2,resolveAndLoadAgentPlugins:()=>N8,resolveAgentPluginPaths:()=>c1,requestHubShutdown:()=>w5,requestDesktopToolApproval:()=>iX,removePluginMcpServersFromSettings:()=>Z9,rememberRecoverableLocalHubUrl:()=>k$,registerRemoteConfigSessionBlobUpload:()=>K7,registerMcpServersFromSettingsFile:()=>q2,registerDisposable:()=>$g,refreshProviderModelsFromSource:()=>MY,refreshOpenAICodexToken:()=>I9,refreshOcaToken:()=>v9,refreshClineToken:()=>h9,readSessionCheckpointHistory:()=>I2,readRemoteConfigSessionBlobUploadMetadata:()=>gX,readHubDiscovery:()=>f0,readGlobalSettings:()=>_0,readCompactionStrategyGlobally:()=>tV,readBearerToken:()=>X7,probeHubServer:()=>a1,probeHubConnection:()=>yA,prewarmFileIndex:()=>o9,prewarmDetachedHubServer:()=>yQ,prepareRemoteConfigCoreIntegration:()=>vX,parseWorkflowConfigFromMarkdown:()=>e6,parseUserCommandEnvelope:()=>ex,parseSkillConfigFromMarkdown:()=>o6,parseSettings:()=>aZ,parseRuleConfigFromMarkdown:()=>t6,parsePluginSource:()=>y7,parseMcpInstallArgs:()=>e5,parseHookEventPayload:()=>F4,parseConfiguredAgentConfig:()=>h5,normalizeWorkspacePath:()=>d1,normalizeUserInput:()=>tx,normalizeSdkError:()=>ox,normalizeRuntimeCapabilities:()=>q0,normalizeProviderId:()=>y8,normalizeOAuthProvider:()=>RY,normalizeHubWebSocketUrl:()=>I$,noopBasicLogger:()=>sx,migrateLegacyProviderSettings:()=>H9,mergeRulesForSystemPrompt:()=>u8,mergeAgentHooks:()=>U2,marketplaceEntryKey:()=>VY,makeTeamTaskSubSessionId:()=>T6,makeSubSessionId:()=>L8,loginOpenAICodex:()=>I4,loginOcaOAuth:()=>m4,loginLocalProvider:()=>EY,loginClineOAuth:()=>h4,loginAndSaveProviderOAuthCredentials:()=>c4,loginAndSaveLocalProviderOAuthCredentials:()=>CY,loadOpenTelemetryAdapter:()=>Nx,loadMcpSettingsFile:()=>_2,loadLlmsConfigFromFile:()=>cY,loadConfiguredAgentConfigs:()=>Q4,loadAgentPluginsFromPathsWithDiagnostics:()=>K2,loadAgentPluginsFromPaths:()=>zZ,loadAgentPluginFromPath:()=>P6,listSessionHistoryFromBackend:()=>qJ,listPluginToolsWithDiagnostics:()=>TQ,listPluginTools:()=>K5,listMcpServerOAuthStatuses:()=>B5,listLocalProviders:()=>TY,listHookConfigFiles:()=>q$,isToolDisabledGlobally:()=>$H,isTelemetryOptedOutGlobally:()=>WZ,isSessionNotFoundError:()=>i1,isRuleEnabled:()=>BQ,isPluginDisabledGlobally:()=>QH,isOfficialPluginSlug:()=>b7,isOAuthProvider:()=>i$,isMarketplaceSkillInstalled:()=>O7,isLocalHubOrigin:()=>xX,isLocalHubHostName:()=>Y7,isHubReconnectableTransportError:()=>xJ,isHubCommandTimeoutError:()=>kQ,isDiscoveryFilePresent:()=>BF,isClineOrgIndividualInferenceSubscriptionMessage:()=>xx,isClineOrgIndividualInferenceSubscriptionError:()=>Ix,isClineNotSubscribedMessage:()=>kx,isClineNotSubscribedError:()=>hx,isClineAccountActionRequest:()=>ZQ,isBuiltInProviderId:()=>S3,isAutoUpdateEnabledGlobally:()=>sV,installPlugin:()=>fY,installMcpServer:()=>nX,identifyAccount:()=>S1,hasMcpSettingsFile:()=>p1,getValidOpenAICodexCredentials:()=>x4,getValidOcaCredentials:()=>v4,getValidClineCredentials:()=>k4,getProviderOAuthCredentialsFromSettings:()=>u4,getProviderConfigFields:()=>PY,getProviderConfig:()=>gZ,getProviderAuthStorageId:()=>AW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>X8,getMcpServerOAuthState:()=>T2,getMarketplaceSkillCandidates:()=>X9,getLocalProviderModels:()=>OY,getLiveModelsCatalog:()=>b8,getGlobalMarketplaceSkillPaths:()=>Y9,getFileIndex:()=>I1,getCurrentContextSize:()=>Q3,getCoreHeadlessToolNames:()=>z6,getCoreDefaultEnabledToolIds:()=>AZ,getCoreBuiltinToolCatalog:()=>j2,getCoreAcpToolNames:()=>UZ,getClinePassSubscriptionUrl:()=>yx,getClineOrgIndividualInferenceSubscriptionMessage:()=>Sx,getClineNotSubscribedMessage:()=>bx,getClineDefaultSystemPrompt:()=>gx,generateWorkspaceInfoWithDiagnostics:()=>d6,generateWorkspaceInfo:()=>I8,formatRulesForSystemPrompt:()=>c8,formatProviderOAuthApiKey:()=>UW,formatDisplayUserInput:()=>ax,findInstalledGlobalMarketplaceSkillName:()=>j9,findCheckpointForRun:()=>B4,filterExtensionToolRegistrations:()=>YZ,filterDisabledTools:()=>g1,filterDisabledPluginPaths:()=>XZ,fetchClineRecommendedModels:()=>mY,executeClineAccountAction:()=>QQ,ensureHubWebSocketServer:()=>j7,ensureHubServer:()=>gf,ensureDetachedHubServer:()=>LF,ensureCustomProvidersLoaded:()=>m7,ensureCompatibleLocalHubUrl:()=>y2,enrichPromptWithMentions:()=>B8,emptyWorkspaceManifest:()=>rx,emptyStoredProviderSettings:()=>N$,discoverPluginModulePaths:()=>y6,disablePluginMcpServersInSettings:()=>tX,deriveSubsessionStatus:()=>q6,deleteLocalProvider:()=>d7,defineLlmsConfig:()=>vY,createWorkflowsConfigDefinition:()=>X5,createUserInstructionConfigService:()=>C$,createToolPoliciesWithPreset:()=>e9,createTool:()=>px,createTeamName:()=>f7,createSubprocessHooks:()=>nQ,createSpawnAgentTool:()=>_$,createSkillsConfigDefinition:()=>W5,createShellTool:()=>Y6,createShellExecutor:()=>t$,createSessionHost:()=>V4,createRuntimeHost:()=>V4,createRulesConfigDefinition:()=>J5,createRemoteConfigSessionMessagesArtifactUploader:()=>mX,createProviderConfig:()=>b3,createOpenTelemetryTelemetryService:()=>p5,createOAuthClientCallbacks:()=>g8,createMcpTools:()=>n8,createLocalHubScheduleRuntimeHandlers:()=>V7,createLlmsSdk:()=>dY,createInitialAccumulatedUsage:()=>D0,createInMemoryHubOwnerContext:()=>HF,createHubServerUrl:()=>V1,createHubAuthToken:()=>NQ,createHookConfigFileHooks:()=>x6,createHookConfigFileExtension:()=>S8,createHookAuditHooks:()=>P8,createDisabledMcpToolPolicy:()=>G5,createDisabledMcpToolPolicies:()=>zQ,createDelegatedAgentConfigProvider:()=>D$,createDelegatedAgent:()=>L$,createDefaultToolsWithPreset:()=>$Z,createDefaultTools:()=>F$,createDefaultShellExecutor:()=>K6,createDefaultMcpServerClientFactory:()=>r8,createDefaultExecutors:()=>G8,createCoreSettingsService:()=>R2,createCoreSessionSnapshot:()=>U1,createContributionRegistry:()=>lx,createContextCompactionPrepareTurn:()=>a4,createConfiguredTelemetryService:()=>$$,createConfiguredTelemetryHandle:()=>_4,createConfiguredAgentTools:()=>W4,createClineTelemetryServiceMetadata:()=>dx,createClineTelemetryServiceConfig:()=>ux,createCheckpointComparePlan:()=>lQ,createBuiltinTools:()=>V2,createAgentTeamsTools:()=>Y2,createAgentRuntime:()=>Wg,createAgentHooksExtension:()=>C8,connectToHub:()=>tQ,completeClineDeviceAuth:()=>BW,compareCheckpointToWorkspace:()=>c5,collectPluginMcpOAuthCandidates:()=>h7,clearPrivateModelsCatalogCache:()=>w3,clearLiveModelsCatalogCache:()=>C3,clearHubDiscovery:()=>b0,captureWorkspacePathResolved:()=>Bj,captureWorkspaceInitialized:()=>U9,captureWorkspaceInitError:()=>D9,captureToolUsage:()=>e2,captureTokenUsage:()=>z9,captureTaskRestarted:()=>_9,captureTaskCreated:()=>L9,captureTaskCompleted:()=>S4,captureSubagentExecution:()=>y4,captureSkillUsed:()=>O9,captureSdkError:()=>cx,captureProviderConfigured:()=>Gj,captureProviderApiError:()=>b4,captureModeSwitch:()=>T9,captureMentionUsed:()=>M9,captureMentionSearchResults:()=>E9,captureMentionFailed:()=>R9,captureHookDiscovery:()=>C9,captureExtensionActivated:()=>Hj,captureDiffEditFailure:()=>q9,captureConversationTurnEvent:()=>t2,captureCompactionSkipped:()=>P9,captureCompactionExecuted:()=>w9,captureAuthSucceeded:()=>w1,captureAuthStarted:()=>C1,captureAuthLoggedOut:()=>X$,captureAuthFailed:()=>P1,captureAgentUnexpectedReasoningTokens:()=>Vj,captureAgentTeamCreated:()=>N9,captureAgentCreated:()=>Y$,buildWorkspaceMetadata:()=>l6,buildTeamProgressSummary:()=>J4,buildSdkErrorProperties:()=>mx,buildRemoteConfigSessionBlobUploadMetadata:()=>B7,buildMcpInstallTransport:()=>U7,buildDelegatedAgentConfig:()=>J2,buildConfiguredAgentToolName:()=>k5,buildConfiguredAgentToolDescriptors:()=>I5,buildCheckpointWorkspaceDiff:()=>pQ,bootstrapAgentTeams:()=>D8,authorizeMcpServerOAuth:()=>UQ,addLocalProvider:()=>zY,accumulateUsageTotals:()=>A0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>s6,UnifiedConfigFileWatcher:()=>L2,ToolPresets:()=>u0,TelemetryService:()=>D4,TelemetryLoggerSink:()=>l5,TEAM_TOOL_NAMES:()=>U8,SubprocessSandbox:()=>M8,StructuredCommandInputSchema:()=>a$,StoredProviderSettingsSchema:()=>k8,StoredProviderSettingsEntrySchema:()=>oZ,SqliteTeamStore:()=>l2,SqliteSessionStore:()=>L1,SessionVersioningService:()=>c$,SessionVersioningError:()=>I0,SessionSource:()=>z0,SessionNotFoundError:()=>r1,SapSettingsSchema:()=>rZ,SKILLS_CONFIG_DIRECTORY_NAME:()=>a6,SESSION_STATUSES:()=>M6,SESSION_NOT_FOUND_ERROR_CODE:()=>E2,SDK_ERROR_TELEMETRY_EVENT:()=>Zg,RpcClineAccountService:()=>i6,RemoteRuntimeHost:()=>$4,ReasoningSettingsSchema:()=>uZ,RULES_CONFIG_DIRECTORY_NAME:()=>HQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>G7,ProviderSettingsSchema:()=>R$,ProviderSettingsManager:()=>q1,ProviderProtocolSchema:()=>mZ,ProviderIdSchema:()=>u6,ProviderClientSchema:()=>vZ,OpenTelemetryProvider:()=>L4,OcaSettingsSchema:()=>iZ,OPENAI_COMPATIBLE_PROVIDERS:()=>m6,NodeHubClient:()=>H1,NoOpFeatureFlagsProvider:()=>g2,NativeHubTransportAdapter:()=>o5,ModelCatalogSettingsSchema:()=>nZ,McpSettingsUpdateSkippedError:()=>d8,McpSettingsMutatorPurityError:()=>w$,McpSettingsLockTimeoutError:()=>P$,MAX_COMMAND_OUTPUT_CHARS:()=>h1,LocalRuntimeHost:()=>T1,Llms:()=>Cx,InMemoryWorkspaceManager:()=>x8,InMemoryMcpManager:()=>M2,HubUIClient:()=>LX,HubTransportError:()=>E0,HubSessionClient:()=>DX,HubServerTransport:()=>z4,HubScheduleService:()=>U4,HubScheduleCommandService:()=>f4,HubRuntimeHost:()=>s1,HubCommandError:()=>t8,HookEventPayloadSchema:()=>iQ,HookEventNameSchema:()=>rQ,HookConfigFileName:()=>w8,HOOK_CONFIG_FILE_EVENT_MAP:()=>k6,HOOKS_CONFIG_DIRECTORY_NAME:()=>EZ,GlobalSettingsSchema:()=>F6,GcpSettingsSchema:()=>lZ,FileTeamPersistenceStore:()=>r7,FeatureFlagsService:()=>x2,FeatureFlagDefaultValue:()=>nx,FEATURE_FLAGS:()=>ix,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>t7,DefaultToolNames:()=>U0,DefaultRuntimeBuilder:()=>q4,DefaultLlmsSdk:()=>B9,DEFAULT_MODELS_CATALOG_URL:()=>hZ,DEFAULT_HUB_PORT:()=>wJ,DEFAULT_HUB_PATHNAME:()=>PJ,DEFAULT_HUB_HOST:()=>CJ,CoreSettingsService:()=>S$,CoreSessionService:()=>z1,ContributionRegistry:()=>vx,ClineOrgIndividualInferenceSubscriptionError:()=>Px,ClineNotSubscribedError:()=>wx,ClineCore:()=>u5,ClineAccountService:()=>r6,ChatViewStateSchema:()=>IY,ChatSummarySchema:()=>o7,ChatSessionStatusSchema:()=>n7,ChatSessionConfigSchema:()=>i7,ChatMessageSchema:()=>s7,ChatMessageRoleSchema:()=>a7,CORE_TELEMETRY_EVENTS:()=>g,CORE_BUILD_VERSION:()=>xY,BrowserWebSocketHubAdapter:()=>s5,BUILT_IN_PROVIDER_IDS:()=>P3,BUILT_IN_PROVIDER:()=>c6,AzureSettingsSchema:()=>pZ,AwsSettingsSchema:()=>dZ,AuthSettingsSchema:()=>cZ,AgentTeamsRuntime:()=>k2,AgentTeam:()=>j4,Agent:()=>Qg,ALL_DEFAULT_TOOL_NAMES:()=>H$});R(M,D00);import*as Cx from"@cline/llms";import{ClineNotSubscribedError as wx,ClineOrgIndividualInferenceSubscriptionError as Px,getClineOrgIndividualInferenceSubscriptionMessage as Sx,getClineNotSubscribedMessage as bx,getClinePassSubscriptionUrl as yx,isClineNotSubscribedError as hx,isClineNotSubscribedMessage as kx,isClineOrgIndividualInferenceSubscriptionError as Ix,isClineOrgIndividualInferenceSubscriptionMessage as xx}from"@cline/llms";import{buildClineSystemPrompt as gx,buildSdkErrorProperties as mx,ContributionRegistry as vx,captureSdkError as cx,createClineTelemetryServiceConfig as ux,createClineTelemetryServiceMetadata as dx,createContributionRegistry as lx,createTool as px,emptyWorkspaceManifest as rx,FEATURE_FLAGS as ix,FeatureFlagDefaultValue as nx,formatDisplayUserInput as ax,noopBasicLogger as sx,normalizeSdkError as ox,normalizeUserInput as tx,parseUserCommandEnvelope as ex,registerDisposable as $g,SDK_ERROR_TELEMETRY_EVENT as Zg}from"@cline/shared";import"@cline/shared/storage";var AG={};N(AG,{isClineAccountActionRequest:()=>ZQ,executeClineAccountAction:()=>QQ,RpcClineAccountService:()=>i6,ClineAccountService:()=>r6});function hM($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function FG($,Z,Q){let W=hM(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 r6{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(FG(Y.status,j,void 0));throw Error("Cline account response was not valid JSON")}if(!Y.ok)throw Error(FG(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 ZQ($){return $.action==="clineAccount"}async function QQ($,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 i6{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}}var fG={};N(fG,{createOAuthClientCallbacks:()=>g8});function g8($){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}}var MA={};N(MA,{ClineCore:()=>u5});function UG($){if($===!0)return{};if(!$)return;return $}function DG($){if($==="user")return"global";return $}class x3{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let Z=this.getService().ingestEvent($);return{event:Z.event,duplicate:Z.duplicate,matchedSpecIds:Z.matchedSpecs.map((Q)=>Q.specId),queuedRuns:Z.queuedRuns,suppressions:Z.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function LG($){let{host:Z}=$;return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||z0.CLI,interactive:!1,config:{providerId:y8(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:xM(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:{extensionContext:$.getExtensionContext(),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),delivery:W.delivery});if(!J)throw Error("ClineCore automation runtime returned no result");return{result:IM(J)}},async abortSession(Q){return await Z.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}function WQ($){let Z=kM($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),W=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),J=$.context?.logger??$.logger,X=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!W&&!J&&!X)return $.context;return{...$.context??{},...Q?{client:Q}:{},...W?{user:W}:{},...J?{logger:J}:{},...X?{telemetry:X}:{},...Z?{automation:Z}:{}}}function kM($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function IM($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function xM($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var OK={};N(OK,{createCoreSettingsService:()=>R2,CoreSettingsService:()=>S$});import{existsSync as A5,readFileSync as OE}from"node:fs";import{basename as $J,dirname as fK,extname as qE,isAbsolute as LK,join as ME,relative as _K,resolve as UK}from"node:path";var yG={};N(yG,{resolveWorkflowsConfigSearchPaths:()=>Q5,resolveSkillsConfigSearchPaths:()=>$5,resolveRulesConfigSearchPaths:()=>Z5,parseWorkflowConfigFromMarkdown:()=>e6,parseSkillConfigFromMarkdown:()=>o6,parseRuleConfigFromMarkdown:()=>t6,createWorkflowsConfigDefinition:()=>X5,createUserInstructionConfigService:()=>C$,createSkillsConfigDefinition:()=>W5,createRulesConfigDefinition:()=>J5,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>s6,UnifiedConfigFileWatcher:()=>L2,SKILLS_CONFIG_DIRECTORY_NAME:()=>a6,RULES_CONFIG_DIRECTORY_NAME:()=>HQ});import{createHash as gM}from"node:crypto";import{watch as mM}from"node:fs";import{readdir as vM,readFile as cM}from"node:fs/promises";import{join as uM}from"node:path";function dM($){return gM("sha1").update($).digest("hex")}function TG($){return Boolean($&&typeof $==="object"&&"code"in $)}function _G($){return TG($)&&$.code==="ENOENT"}function zG($){return TG($)&&($.code==="EACCES"||$.code==="EPERM")}class L2{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,Z){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=Z?.debounceMs??75,this.emitParseErrors=Z?.emitParseErrors??!1;for(let Q of $){if(this.definitionsByType.has(Q.type))throw Error(`Duplicate unified config definition type '${Q.type}'.`);this.definitionsByType.set(Q.type,Q),this.recordsByType.set(Q.type,new Map),this.discoveredDirectoriesByType.set(Q.type,new Set);for(let W of Q.directories){let J=this.baseTypesByDirectory.get(W);if(J)J.add(Q.type);else this.baseTypesByDirectory.set(W,new Set([Q.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let Z=this.definitionsByType.get($);if(!Z)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(Z)})}getSnapshot($){let Z=this.recordsByType.get($);return new Map([...Z?.entries()??[]].map(([Q,W])=>[Q,{...W}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([W,J])=>[W,{...J}])));return $}emit($){for(let Z of this.listeners)Z($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[Z,Q]of this.watchersByDirectory.entries()){if($.has(Z))continue;Q.close(),this.watchersByDirectory.delete(Z)}this.watchedTypesByDirectory=$;for(let Z of $.keys()){if(this.watchersByDirectory.has(Z))continue;try{let Q=mM(Z,()=>{let W=this.watchedTypesByDirectory.get(Z);if(!W)return;for(let J of W)this.pendingTypes.add(J);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(W)=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let X of J)this.emit({kind:"error",type:X,error:W,filePath:Z})})}catch(Q){if(!_G(Q)&&!zG(Q)){let W=$.get(Z);if(!W)continue;for(let J of W)this.emit({kind:"error",type:J,error:Q,filePath:Z})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let Z of $){let Q=this.definitionsByType.get(Z);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:Z,discoveredDirectories:Q}=await this.loadDefinition($),W=this.recordsByType.get($.type)??new Map;for(let[J,X]of W.entries()){if(Z.has(J))continue;this.emit({kind:"remove",type:$.type,id:J,filePath:X.filePath})}for(let[J,X]of Z.entries()){let Y=W.get(J);if(Y&&Y.filePath===X.filePath&&Y.fingerprint===X.fingerprint)continue;this.emit({kind:"upsert",record:{type:X.type,id:J,item:X.item,filePath:X.filePath}})}if(this.recordsByType.set($.type,Z),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let Z=new Map,Q=new Set;for(let W of $.directories){Q.add(W);let J=$.discoverFiles?await $.discoverFiles(W):await this.readDirectoryFileCandidates(W);for(let X of J){let{fileName:Y,filePath:j}=X;if(Q.add(X.directoryPath),$.includeFile&&!$.includeFile(Y,j))continue;try{let V=await cM(j,"utf8"),H={type:$.type,directoryPath:X.directoryPath,fileName:Y,filePath:j,content:V},B=$.parseFile(H),G=$.resolveId(B,H).trim();if(!G)continue;Z.set(G,{type:$.type,id:G,item:B,filePath:j,fingerprint:dM(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:j})}}}return{records:Z,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[Z,Q]of this.baseTypesByDirectory.entries())$.set(Z,new Set(Q));for(let[Z,Q]of this.discoveredDirectoriesByType.entries())for(let W of Q){let J=$.get(W);if(J)J.add(Z);else $.set(W,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await vM($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:uM($,Q.name)})).sort((Q,W)=>Q.fileName.localeCompare(W.fileName))}catch(Z){if(_G(Z)||zG(Z))return[];throw Z}}}import{readdir as m3,readFile as lM,stat as g3}from"node:fs/promises";import{basename as l1,dirname as pM,extname as XQ,join as S0,resolve as n6}from"node:path";import{AGENTS_RULES_FILE_NAME as OG,RULES_CONFIG_DIRECTORY_NAME as HQ,resolveGlobalAgentsRulesPath as rM,resolveRulesConfigSearchPaths as iM,resolveSkillsConfigSearchPaths as nM,resolveWorkflowsConfigSearchPaths as aM,SKILLS_CONFIG_DIRECTORY_NAME as a6,WORKFLOWS_CONFIG_DIRECTORY_NAME as s6}from"@cline/shared/storage";import sM from"yaml";var JQ="SKILL.md",oM="managed.json",tM=new Set([".md",".markdown",".txt"]);function v3($){return $.trim().toLowerCase()}function m8($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function YQ($){return tM.has(XQ($).toLowerCase())}function qG($){let Z=[],Q=new Set;for(let W of $){let J=n6(W);if(Q.has(J))continue;Q.add(J),Z.push(W)}return Z}function eM($){let Z=[...$?.directories??$5($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...hB({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return qG(Z)}async function c3($){try{let Z=await m3($,{withFileTypes:!0}),Q=[];for(let W of Z){if(!W.isDirectory())continue;let J=S0($,W.name),X=S0(J,oM);try{let Y=await lM(X,"utf8"),j=JSON.parse(Y);if(j&&typeof j==="object")Q.push(J)}catch(Y){if(m8(Y))continue;if(Y?.name==="SyntaxError")continue;throw Y}}return Q.sort((W,J)=>W.localeCompare(J))}catch(Z){if(m8(Z))return[];throw Z}}function u3($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,W,J]=Q;try{let X=sM.parse(W);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:J,hadFrontmatter:!0}}catch(X){let Y=X instanceof Error?X.message:String(X);return{data:{},body:$,hadFrontmatter:!0,parseError:Y}}}function jQ($,Z,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${Z}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${Z}' must be a string.`);let W=$.trim();if(!W&&Q)throw Error(`Frontmatter field '${Z}' cannot be empty.`);return W||void 0}function v8($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function $R($,Z){if(l1($.filePath).toLowerCase()!==OG.toLowerCase())return l1($.filePath,XQ($.filePath));if(Z&&n6($.filePath)===n6(Z,OG))return"Workspace AGENTS.md";if(n6($.filePath)===n6(rM()))return"Global AGENTS.md";return l1($.filePath,XQ($.filePath))}function o6($,Z){let{data:Q,body:W,parseError:J}=u3($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in skill file.");let j=jQ(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing skill name.");return{name:j,description:jQ(Q.description,"description",!1),disabled:v8(Q.disabled,"disabled")??(v8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function t6($,Z){let{data:Q,body:W,parseError:J}=u3($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in rule file.");let Y=jQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing rule name.");return{name:Y,disabled:v8(Q.disabled,"disabled")??(v8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function e6($,Z){let{data:Q,body:W,parseError:J}=u3($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in workflow file.");let Y=jQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing workflow name.");return{name:Y,disabled:v8(Q.disabled,"disabled")??(v8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function $5($){return nM($)}function Z5($){return iM($)}function Q5($){return aM($)}async function MG($){if(l1($)===".cline"){let Z=await c3($);return(await Promise.all(Z.map((W)=>MG(S0(W,a6))))).flat()}try{let Z=await m3($,{withFileTypes:!0}),Q=[];for(let W of Z){if(W.isFile()&&W.name===JQ){Q.push({directoryPath:$,fileName:W.name,filePath:S0($,W.name)});continue}let J=S0($,W.name);if(W.isDirectory()||W.isSymbolicLink()&&await g3(J).then((Y)=>Y.isDirectory()).catch((Y)=>{if(m8(Y))return!1;throw Y}))Q.push({directoryPath:J,fileName:JQ,filePath:S0(J,JQ)})}return Q}catch(Z){if(m8(Z))return[];throw Z}}async function VQ($){if(l1($)===".cline"){let Z=await c3($);return(await Promise.all(Z.map((W)=>VQ(S0(W,"rules.md"))))).flat()}try{if((await g3($)).isFile())return[{directoryPath:pM($),fileName:l1($),filePath:$}]}catch(Z){if(!m8(Z))throw Z}try{let Q=(await m3($,{withFileTypes:!0})).filter((J)=>J.isFile()&&YQ(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:S0($,J.name)})),W=S0($,"AGENTS.md");try{if((await g3(W)).isFile()){if(!Q.some((Y)=>Y.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:W})}}catch{}return Q}catch(Z){if(m8(Z))return[];throw Z}}async function ZR($){if(l1($)===".cline"){let Z=await c3($);return(await Promise.all(Z.map((W)=>VQ(S0(W,s6))))).flat()}return VQ($)}function W5($){let Z=eM($),Q=$?.workspacePath?S0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?qG([...Z,Q]):Z,discoverFiles:MG,includeFile:(W)=>W===JQ,parseFile:(W)=>o6(W.content,l1(W.directoryPath)),resolveId:(W)=>v3(W.name)}}function J5($){let Z=$?.directories??Z5($?.workspacePath),Q=$?.workspacePath?S0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:VQ,includeFile:(W,J)=>W===".clinerules"||YQ(W)||YQ(J),parseFile:(W)=>t6(W.content,$R(W,$?.workspacePath)),resolveId:(W)=>v3(W.name)}}function X5($){let Z=$?.directories??Q5($?.workspacePath),Q=$?.workspacePath?S0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:ZR,includeFile:(W)=>YQ(W),parseFile:(W)=>e6(W.content,l1(W.filePath,XQ(W.filePath))),resolveId:(W)=>v3(W.name)}}function RG($){let Z=[W5($?.skills),J5($?.rules),X5($?.workflows)];return new L2(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as EG}from"@cline/shared";function QR($,Z){if($.description?.trim())return EG($.description,".");if(Z==="workflow")return;return EG($.instructions,".")}function WR($){return $.disabled!==!0}function NG($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,W])=>({id:Q,record:W})).filter(({record:Q})=>WR(Q.item)).map(({id:Q,record:W})=>({id:Q,name:W.item.name,instructions:W.item.instructions,description:QR(W.item,Z),kind:Z})).sort((Q,W)=>Q.name.localeCompare(W.name))}function Y5($){let Z=new Map;for(let Q of[...NG($,"workflow"),...NG($,"skill")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,W)=>Q.name.localeCompare(W.name))}function CG($,Z){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let W=Q[1];if(!W)return $;let J=W.length+1,X=$.slice(J),Y=Y5(Z).find((j)=>j.name===W);return Y?`${Y.instructions}${X}`:$}var PG={};N(PG,{mergeRulesForSystemPrompt:()=>u8,loadRulesForSystemPromptFromWatcher:()=>d3,listEnabledRulesFromWatcher:()=>wG,isRuleEnabled:()=>BQ,formatRulesForSystemPrompt:()=>c8});function BQ($){return $.disabled!==!0}function c8($){if($.length===0)return"";return`
199
+ `,"utf8")}function jB($,Z){return P0.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 VB($,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}}L0();var HB={};N(HB,{summarizeUsageFromMessages:()=>T8,sumUsageTotals:()=>N6,getCurrentContextSize:()=>Q3,createInitialAccumulatedUsage:()=>D0,accumulateUsageTotals:()=>A0});function D0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function A0($,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 N6($){let Z=D0();for(let Q of $)Z=A0(Z,Q);return Z}function z8($){return typeof $==="number"&&Number.isFinite($)?$:0}function T8($){let Z=D0();for(let Q of $){let W=Q.metrics;if(!W)continue;Z=A0(Z,{inputTokens:z8(W.inputTokens),outputTokens:z8(W.outputTokens),cacheReadTokens:z8(W.cacheReadTokens),cacheWriteTokens:z8(W.cacheWriteTokens),totalCost:z8(W.cost)})}return Z}function Q3($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let W=z8(Q.metrics?.inputTokens);return W>0?W:void 0}return}function YO($){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 W3($){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 v1($){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 jO($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function VO($){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 J3($,Z,Q){let{sessionId:W,config:J,liveSession:X,emit:Y}=$,j=J.telemetry,V=X?.runtime.teamRuntime,H=Q?.isPrimaryAgentEvent??!0,B=W3(Z),G=v1({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=YO(Z.input);if(K)O9(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(e2(j,{ulid:W,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))q9(j,{ulid:W,modelId:J.modelId,provider:J.providerId,errorType:Z.error,...G})}if(Z.type==="notice"&&Z.reason==="api_error")b4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.message,...G});if(Z.type==="error")b4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.error?.message??"unknown error",...G});if(Z.type==="usage"&&X?.turnUsageBaseline){let K=jO(Z);if(H){X.turnPrimaryUsage=A0(X.turnPrimaryUsage??D0(),K);let A=A0(X.turnUsageBaseline,X.turnPrimaryUsage);$.usageBySession.set(W,A),t2(j,{ulid:W,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),z9(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=VO({isPrimaryAgentEvent:H,overrides:Q,eventMetadata:B}),L=X.turnUsageByAgent??new Map;X.turnUsageByAgent=L,L.set(A,A0(L.get(A)??D0(),K))}let F=A0(X.turnPrimaryUsage??D0(),N6(X.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(W,A0(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:XB(Z),ts:Date.now()}})}function T$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as _M}from"@cline/shared";Y1();import{existsSync as MZ,readFileSync as aO,statSync as sO}from"node:fs";import{basename as oO,dirname as OZ,join as RZ,resolve as qZ}from"node:path";import{discoverPluginModulePaths as tO,resolveConfiguredPluginModulePaths as PB,resolvePluginConfigSearchPaths as eO,SKILLS_CONFIG_DIRECTORY_NAME as $q}from"@cline/shared/storage";import{resolve as CO}from"node:path";import{normalizePluginManifest as wO}from"@cline/shared";import{existsSync as T0,readFileSync as q8}from"node:fs";import{builtinModules as HO,createRequire as V3}from"node:module";import{dirname as O$,extname as w6,isAbsolute as BO,resolve as p}from"node:path";import{fileURLToPath as GB}from"node:url";import{PLUGIN_FILE_EXTENSIONS as GO}from"@cline/shared";var KB=O$(GB(import.meta.url)),KO=V3(import.meta.url),FO=p(KB,"..","..","..","..",".."),X3=UO(FO),AO=["@cline/sdk","@cline/agents","@cline/core","@cline/core/hub","@cline/core/hub/daemon-entry","@cline/core/telemetry","@cline/llms","@cline/llms/browser","@cline/shared","@cline/shared/automation","@cline/shared/browser","@cline/shared/storage","@cline/shared/db","@cline/shared/types"],H3=new Set(HO.flatMap(($)=>[$,$.replace(/^node:/,"")])),C6=new Set(GO),fO=["development","node","import","require","default"];function UO($){let Z={},Q={"@cline/sdk":p($,"packages/sdk/src/index.ts"),"@cline/agents":p($,"packages/agents/src/index.ts"),"@cline/core":p($,"packages/core/src/index.ts"),"@cline/llms":p($,"packages/llms/src/index.ts"),"@cline/shared":p($,"packages/shared/src/index.ts"),"@cline/shared/storage":p($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":p($,"packages/shared/src/db/index.ts")};for(let[W,J]of Object.entries(Q))if(T0(J))Z[W]=J;for(let W of["agents","core","llms","shared"]){let J=p($,"packages",W),X=p(J,"package.json");if(!T0(X))continue;try{let Y=JSON.parse(q8(X,"utf8"));if(typeof Y.name!=="string"||!Y.exports)continue;if(typeof Y.exports==="string"){let j=p(J,Y.exports);if(T0(j))Z[Y.name]=j;continue}if(typeof Y.exports!=="object")continue;for(let[j,V]of Object.entries(Y.exports)){let H=DO(J,V);if(!H)continue;let B=j==="."?Y.name:`${Y.name}/${j.replace(/^\.\//,"")}`;Z[B]=H}}catch{}}return Z}function DO($,Z){let Q=B3(Z);if(!Q)return null;let W=FB($,Q);for(let J of W)if(T0(J))return J;return null}function B3($,Z=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(Z.has($))return null;Z.add($);let Q=$;for(let W of fO){let J=B3(Q[W],Z);if(J)return J}return null}function FB($,Z){let Q=Z.replace(/^\.\//,""),W=[p($,Z)];if(Q.startsWith("dist/")){let J=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[p($,`${J}.ts`),p($,`${J}.tsx`),p($,`${J}.mts`),p($,`${J}.cts`),...W]}return W}function LO($){return Object.fromEntries(Object.entries($).sort(([Z],[Q])=>Q.length-Z.length))}function _Z($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function O8($){if($.startsWith("@")){let[Z,Q]=$.split("/",3);return Q?`${Z}/${Q}`:$}return $.split("/",1)[0]??$}function _O($){let Z=O8($);if($===Z)return".";return`.${$.slice(Z.length)}`}function AB($){return O8($).startsWith("@cline/")}function Y3($,Z){let Q=O8(Z),W=O$($);while(!0){let J=p(W,"node_modules",Q);if(T0(J)||T0(p(J,"package.json")))return!0;let X=p(W,"..");if(X===W)return!1;W=X}}function BB($){return j3($)!==null}function j3($){try{return KO.resolve($)}catch{}return zO($)}function zO($){let Z=O8($),Q=fB(Z);if(!Q)return null;let W=p(Q,"package.json");try{let J=JSON.parse(q8(W,"utf8")),X=_O($),Y=X==="."&&typeof J.exports==="string"?J.exports:J.exports&&typeof J.exports==="object"&&Object.hasOwn(J.exports,X)?J.exports[X]:void 0,j=B3(Y)??(X==="."&&typeof J.main==="string"?J.main:null);if(!j)return null;let V=p(Q,j),H=[V,...FB(Q,j).filter((B)=>B!==V)];for(let B of H)if(T0(B))return B;return null}catch{return null}}function TO(){let $=[KB],Z=process.env.CLINE_WRAPPER_PATH?.trim();if(Z)$.push(O$(O$(Z)));let Q=process.execPath?.trim();if(Q)$.push(O$(Q));return[...new Set($.map((W)=>p(W)))]}function OO($,Z){let Q=$;while(!0){let W=p(Q,"package.json");if(T0(W))try{if(JSON.parse(q8(W,"utf8")).name===Z)return Q}catch{}let J=p(Q,"node_modules",Z,"package.json");if(T0(J))return O$(J);let X=p(Q,"..");if(X===Q)return null;Q=X}}function fB($){for(let Z of TO()){let Q=OO(Z,$);if(Q)return Q}return null}function qO($){let Q=O$($);for(let W=0;W<4;W++){let J=p(Q,"package.json");if(T0(J))try{let Y=JSON.parse(q8(J,"utf8"));return Y!=null&&typeof Y==="object"&&"cline"in Y}catch{return!1}let X=p(Q,"..");if(X===Q)return!1;Q=X}return!1}function UB($,Z){let Q=Z.startsWith("file:")?GB(Z):BO(Z)?Z:p(O$($),Z);if(T0(Q)&&C6.has(w6(Q)))return Q;for(let W of C6){let J=`${Q}${W}`;if(T0(J))return J}for(let W of C6){let J=p(Q,`index${W}`);if(T0(J))return J}return null}function DB($){let Z=new Set,Q=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let W of Q)for(let J of $.matchAll(W)){let X=J[1];if(X)Z.add(X)}return[...Z]}function MO($){return w6($)!==".ts"}function LB($,Z,Q=new Set){if(Q.has($)||!T0($))return;if(Q.add($),!C6.has(w6($)))return;let W=q8($,"utf8"),J=MO($);for(let X of DB(W)){if(X.startsWith("node:")||H3.has(X))continue;if(_Z(X)){if(!J)continue;if(Object.hasOwn(X3,X)||Object.hasOwn(X3,O8(X))||Y3($,X)||AB(X)&&BB(X)||Z&&BB(X))continue;throw Error(`Cannot find module '${O8(X)}'`)}let Y=UB($,X);if(Y)LB(Y,Z,Q)}}function _B($,Z=new Set,Q=new Set){if(Z.has($)||!T0($))return Q;if(Z.add($),!C6.has(w6($)))return Q;let W=q8($,"utf8");for(let J of DB(W)){if(Q.add(J),_Z(J))continue;let X=UB($,J);if(X)_B(X,Z,Q)}return Q}function RO($,Z){let Q=V3($),W={},J=_B($),X=new Set(AO);for(let[Y,j]of Object.entries(X3)){try{Q.resolve(Y);continue}catch{}W[Y]=j}for(let Y of J)if(_Z(Y)&&(AB(Y)||Z))X.add(Y);for(let Y of X){if(Object.hasOwn(W,Y)||Y3($,Y))continue;let j=j3(Y);if(j)W[Y]=j}if(!Z)return W;for(let Y of J){if(!_Z(Y)||Object.hasOwn(W,Y)||Y3($,Y)||Y.startsWith("node:")||H3.has(Y))continue;let j=j3(Y);if(j)W[Y]=j}return W}function EO($){let Z=w6($);return Z===".ts"||Z===".tsx"||Z===".mts"||Z===".cts"}var G2;function NO(){if(G2!==void 0)return G2;let $=fB("jiti");if(!$)return G2=null,null;let Z=p($,"dist","babel.cjs");if(!T0(Z))return G2=null,null;try{let W=V3(Z)(Z);G2=typeof W==="function"?W:null}catch{G2=null}return G2}async function zB($,Z={}){let Q=!qO($);LB($,Q);let W=RO($,Q),J=LO(W),X=await import("jiti"),Y=typeof X==="function"?X:typeof X.default==="function"?X.default:void 0;if(!Y)throw Error("Unable to load jiti");let j=Object.entries(J).filter(([,G])=>EO(G)).map(([G])=>G),V=NO(),H=V?(G)=>V({...G,interopDefault:!0}):void 0;return await Y($,{alias:J,cache:Z.useCache,requireCache:Z.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...H3],transformModules:j,tryNative:!1,...H?{transform:H}:{}}).import($,{})}function TB($,Z){if(!$)return!0;if($.providerIds?.length){if(!Z?.providerId||!$.providerIds.includes(Z.providerId))return!1}if($.modelIds?.length){if(!Z?.modelId||!$.modelIds.includes(Z.modelId))return!1}return!0}function OB($){return typeof $==="object"&&$!==null}function G3($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function PO($,Z){if(!OB($.manifest))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);if(!G3($.manifest.capabilities))throw Error(`Invalid plugin module at ${Z}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${Z}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!G3($.manifest.providerIds))throw Error(`Invalid plugin module at ${Z}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!G3($.manifest.modelIds))throw Error(`Invalid plugin module at ${Z}: manifest.modelIds must be a string array when provided`)}function SO($,Z){if(!OB($))throw Error(`Invalid plugin module at ${Z}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${Z}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);PO($,Z)}async function P6($,Z={}){let Q=CO(Z.cwd??process.cwd(),$),W=await zB(Q,{useCache:Z.useCache}),J=Z.exportName??"plugin",X=W.default??W[J];SO(X,Q);let Y=X,j=Y.setup,V=j?(H,B)=>{let G={...Z.session,...B.session},K={...B,session:Object.keys(G).length>0?G:void 0,client:Z.client??B.client,user:Z.user??B.user,workspaceInfo:Z.workspaceInfo??B.workspaceInfo,automation:Z.automation??B.automation,logger:Z.logger??B.logger,telemetry:Z.telemetry??B.telemetry};return j(H,K)}:void 0;return{...Y,manifest:wO(Y.manifest),setup:V}}async function zZ($,Z={}){return(await K2($,Z)).plugins}async function K2($,Z={}){let Q=[],W=[],J=new Map,X=0;for(let j of $)try{let V=await P6(j,Z);if(!TB(V.manifest,Z))continue;let H=J.get(V.name);if(H)W.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:j,overriddenPluginPath:H.pluginPath,message:`Plugin "${V.name}" from ${j} overrides ${H.pluginPath}`});J.set(V.name,{plugin:V,pluginPath:j,order:X++})}catch(V){let H=V instanceof Error?V.message:String(V);Q.push({pluginPath:j,phase:"load",message:H,stack:V instanceof Error?V.stack:void 0})}let Y=[...J.values()].sort((j,V)=>j.order-V.order);return{plugins:Y.map((j)=>j.plugin),pluginPaths:Y.map((j)=>j.pluginPath),failures:Q,warnings:W}}import{existsSync as f3}from"node:fs";import{createRequire as wB}from"node:module";import{dirname as TZ,join as R8}from"node:path";import{fileURLToPath as IO}from"node:url";var NB={};N(NB,{resolveSubprocessRuntimeExecutable:()=>K3,buildSubprocessSandboxCommand:()=>EB,SubprocessSandbox:()=>M8,CLINE_JS_RUNTIME_PATH_ENV:()=>RB});import{spawn as bO}from"node:child_process";import{basename as yO}from"node:path";import{augmentNodeCommandForDebug as hO,withResolvedClineBuildEnv as kO}from"@cline/shared";function qB($){if($ instanceof Error)return $;return Error(String($))}var RB="CLINE_JS_RUNTIME_PATH";function MB($){let Z=$?.trim();if(!Z)return!1;let Q=yO(Z).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function K3($={}){let Z=$.env??process.env,Q=$.runtimeExecutable?.trim()||Z[RB]?.trim();if(Q)return Q;let W=$.execPath?.trim()||process.execPath;if(MB(W))return W;for(let J of[Z.BUN_EXEC_PATH,Z.npm_node_execpath,Z.NODE]){let X=J?.trim();if(X&&MB(X))return X}return"node"}function EB($,Z={}){let Q=K3({env:Z.env,execPath:Z.execPath,runtimeExecutable:Z.runtimeExecutable});return hO([Q,...$],{env:Z.env,execArgv:Z.execArgv,debugRole:Z.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class M8{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let Z=this.pending.get($);if(!Z)return;if(this.pending.delete($),Z.timeout)clearTimeout(Z.timeout);return Z}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],Z=EB($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=bO(Z[0]??K3(this.options),Z.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:kO(process.env),windowsHide:!0});this.process=Q;let W="",J=(X)=>{let Y=W+X;W=Y.length>4000?Y.slice(-4000):Y};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(X)=>{J(X)}),Q.on("message",(X)=>{this.onMessage(X)}),Q.on("error",(X)=>{this.failPending(Error(`${this.processLabel} process error: ${qB(X).message}`))}),Q.on("exit",(X,Y)=>{this.process=null;let j=W.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(X)}, signal=${String(Y)})${j?`: ${j}`:""}`))})}async call($,Z,Q={}){this.start();let W=this.process;if(!W||W.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let J=`req_${++this.requestCounter}`,X={type:"call",id:J,method:$,args:Z};return await new Promise((Y,j)=>{let V={resolve:(H)=>Y(H),reject:j};if((Q.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(J),this.shutdown().catch(()=>{}),j(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(J,V),W.send(X,(H)=>{if(!H)return;let B=this.clearPendingRequest(J);if(!B)return;B.reject(Error(`${this.processLabel} failed to send call "${$}": ${qB(H).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((Z)=>{let Q=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}Z()},300);$.once("exit",()=>{clearTimeout(Q),Z()});try{$.kill("SIGTERM")}catch{clearTimeout(Q),Z()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let Z=this.clearPendingRequest($.id);if(!Z)return;if($.ok){Z.resolve($.result);return}Z.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[Z,Q]of this.pending.entries()){if(this.pending.delete(Z),Q.timeout)clearTimeout(Q.timeout);Q.reject($)}}}function xO($){return{...$,contributions:{tools:$.contributions?.tools??[],commands:$.contributions?.commands??[],rules:$.contributions?.rules??[],messageBuilders:$.contributions?.messageBuilders??[],providers:$.contributions?.providers??[],automationEventTypes:$.contributions?.automationEventTypes??[],mcpServers:$.contributions?.mcpServers??[],shortcuts:$.contributions?.shortcuts??[],flags:$.contributions?.flags??[]}}}function S6($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function gO(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function mO(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=wB($).resolve(`${gO()}/package.json`),W=R8(TZ(Q),"extensions","plugin-sandbox-bootstrap.js");return f3(W)?W:void 0}catch{return}}function vO(){let $=process.execPath?.trim();if(!$)return;let Z=R8(TZ(TZ($)),"extensions","plugin-sandbox-bootstrap.js");return f3(Z)?Z:void 0}function cO(){let $=TZ(IO(import.meta.url)),Z=wB(import.meta.url),Q=[R8($,"plugin-sandbox-bootstrap.js"),R8($,"extensions","plugin-sandbox-bootstrap.js"),R8($,"agents","plugin-sandbox-bootstrap.js"),mO(),vO()];for(let X of Q.filter((Y)=>typeof Y==="string"))if(f3(X))return{file:X};let W=R8($,"plugin-sandbox-bootstrap.ts"),J="jiti";try{J=Z.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(J)});`,`const jiti = createJiti(${JSON.stringify(W)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(W)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
200
+ `)}}var F3=cO();function A3($,Z,Q){if(typeof $==="number"&&$>0)return $;if(Q){let W=process.env[Q];if(W){let J=Number(W);if(Number.isInteger(J)&&J>0)return J}}return Z}async function E8($){let Z=new M8({name:"plugin-sandbox",..."file"in F3?{bootstrapFile:F3.file}:{bootstrapScript:F3.script},onEvent:$.onEvent}),Q=A3($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),W=A3($.hookTimeoutMs,3000),J=A3($.contributionTimeoutMs,60000),X={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},Y,j=()=>{return Y??=Z.call("initialize",X,{timeoutMs:Q}).finally(()=>{Y=void 0}),Y},V;try{V=await Z.call("initialize",X,{timeoutMs:Q})}catch(G){throw await Z.shutdown().catch(()=>{}),G}let H=V.plugins.map(xO);return{extensions:H.map((G)=>{let K={name:G.name,__clinePluginPath:G.pluginPath,manifest:G.manifest,setup:(F)=>{uO(F,Z,G,J,j),dO(F,Z,G,J,j),lO(F,Z,G,J,j),rO(F,Z,G,J,j),pO(F,G)}};return K.hooks=nO(Z,G,W,j),K}),failures:V.failures,pluginPaths:H.map((G)=>G.pluginPath),shutdown:async()=>{await Z.shutdown()},warnings:V.warnings}}function uO($,Z,Q,W,J){for(let X of Q.contributions?.tools??[]){let Y={name:X.name,description:X.description??"",inputSchema:X.inputSchema??{type:"object",properties:{}},timeoutMs:X.timeoutMs,retryable:X.retryable,execute:async(j,V)=>{try{return await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:j,context:V},{timeoutMs:W})}catch(H){if(!S6(H))throw H;return await J(),await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:j,context:V},{timeoutMs:W})}}};$.registerTool(Y)}}function dO($,Z,Q,W,J){for(let X of Q.contributions?.commands??[])$.registerCommand({name:X.name,description:X.description,handler:async(Y)=>{try{return await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:Y},{timeoutMs:W})}catch(j){if(!S6(j))throw j;return await J(),await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:Y},{timeoutMs:W})}}})}function lO($,Z,Q,W,J){for(let X of Q.contributions?.rules??[])$.registerRule({id:X.ruleId,source:X.source,content:X.hasContentHandler===!0?async()=>{try{return await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:W})}catch(Y){if(!S6(Y))throw Y;return await J(),await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:W})}}:X.content??""})}function pO($,Z){for(let Q of Z.contributions?.providers??[])$.registerProvider({name:Q.name,description:Q.description,metadata:Q.metadata});for(let Q of Z.contributions?.automationEventTypes??[])$.registerAutomationEventType({eventType:Q.eventType,source:Q.source,description:Q.description,attributesSchema:Q.attributesSchema,payloadSchema:Q.payloadSchema,examples:Q.examples,metadata:Q.metadata});for(let Q of Z.contributions?.mcpServers??[])$.registerMcpServer(Q)}function rO($,Z,Q,W,J){for(let X of Q.contributions?.messageBuilders??[])$.registerMessageBuilder({name:X.name,async build(Y){try{let j=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:Y},{timeoutMs:W});return CB(j)?j:Y}catch(j){if(!S6(j))throw j;await J();let V=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:Y},{timeoutMs:W});return CB(V)?V:Y}}})}function CB($){return Array.isArray($)&&$.every((Z)=>typeof Z==="object"&&Z!==null&&("role"in Z)&&("content"in Z))}function iO($,Z,Q,W,J){return async(X)=>{try{return await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:X},{timeoutMs:W})}catch(Y){if(!S6(Y))throw Y;return await J(),await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:X},{timeoutMs:W})}}}function nO($,Z,Q,W){let J={};for(let X of Z.hooks??[])J[X]=iO($,Z.pluginId,X,Q,W);return Object.keys(J).length>0?J:void 0}var D3="package.json",Zq="package";function b6($){return eO($)}function y6($){return tO($)}function Qq($){try{return MZ($)&&sO($).isDirectory()}catch{return!1}}function L3($){let Z=[],Q=new Set;for(let W of $){let J=qZ(W);if(Q.has(J))continue;Q.add(J),Z.push(J)}return Z}function SB($){let Z=L3($);return XZ(Z)}function bB($){return b6($).flatMap((Z)=>y6(Z)).filter((Z)=>MZ(Z))}function Wq($,Z){let Q=[];for(let W of $)try{Q.push(...PB([W],Z))}catch{}return Q}function U3($){return typeof $==="object"&&$!==null}function Jq($){try{let Z=JSON.parse(aO(RZ($,D3),"utf8"));if(!U3(Z)||!U3(Z.cline))return[];let Q=Z.cline.plugins;if(!Array.isArray(Q))return[];let W=[];for(let J of Q){if(typeof J==="string"){W.push(J);continue}if(!U3(J)||!Array.isArray(J.paths))continue;for(let X of J.paths)if(typeof X==="string")W.push(X)}return W}catch{return[]}}function yB($,Z){let Q=qZ(Z);return Jq($).some((W)=>qZ($,W)===Q)}function Xq($,Z){return oO($)===Zq&&MZ(RZ(OZ($),D3))&&yB(OZ($),Z)}function Yq($){let Z=qZ($),Q=[],W=OZ(Z);while(!0){if(Xq(W,Z)){Q.push(W);break}if(MZ(RZ(W,D3))){if(yB(W,Z))Q.push(W);break}let J=OZ(W);if(J===W)break;W=J}return L3(Q)}function c1($={}){let Z=$.cwd??process.cwd(),Q=bB($.workspacePath),W=PB($.pluginPaths??[],Z);return SB([...W,...Q])}function jq($={}){let Z=$.cwd??process.cwd(),Q=bB($.workspacePath),W=Wq($.pluginPaths??[],Z);return SB([...W,...Q])}function u1($){let Z=[];for(let Q of $)for(let W of Yq(Q)){let J=RZ(W,$q);if(Qq(J))Z.push(J)}return L3(Z)}function hB($={}){return u1(jq($))}async function N8($={}){let Z=c1($);if(Z.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let W=await K2(Z,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:W.plugins,failures:W.failures,pluginPaths:W.pluginPaths,warnings:W.warnings}}let Q=await E8({pluginPaths:Z,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:Q.extensions??[],shutdown:Q.shutdown,failures:Q.failures,pluginPaths:Q.pluginPaths,warnings:Q.warnings}}import{execFile as Vq}from"node:child_process";import{promisify as Hq}from"node:util";var Bq=Hq(Vq);function _3($,Z){$?.log(Z,{severity:"warn"})}function Gq($){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 F2($,Z){let Q=await Bq("git",["-C",$,...Z],{windowsHide:!0});return{stdout:Q.stdout.trim(),stderr:Q.stderr.trim()}}async function z3($,Z){if(!$)return;let Q=`refs/cline/checkpoints/${Z}/`;try{let{stdout:W}=await F2($,["for-each-ref","--format=%(refname)",Q]),J=W.trim().split(`
201
+ `).filter(Boolean);await Promise.allSettled(J.map((X)=>F2($,["update-ref","-d",X])))}catch{}}async function kB($,Z,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((W)=>F2($,["update-ref",`refs/cline/checkpoints/${Z}/${W.runCount}`,W.ref])))}function Kq($,Z){let Q=$.findIndex((W)=>W.runCount===Z.runCount);if(Q<0)return[...$,Z];return $.map((W,J)=>J===Q?Z:W)}function IB($){let Z=$.initialRunCount??0,Q,W=async()=>{if(Q!==void 0)return Q;try{Q=(await F2($.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 F2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:Z,kind:"commit"}}catch(B){_3($.logger,`${H}: ${B instanceof Error?B.message:String(B)}`);return}},Y=`cline checkpoint session=${$.sessionId} run=${Z}`,j="";try{j=(await F2($.cwd,["stash","create",Y])).stdout.trim()}catch(H){return _3($.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 F2($.cwd,["update-ref",V,j])}catch(H){_3($.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=Gq(j);if(V?.latest.ref===Y.ref)return;let H=Kq(V?.history??[],Y);await $.writeSessionMetadata({...j??{},checkpoint:{latest:Y,history:H}});return}}}import{spawn as Tq}from"node:child_process";import{appendFileSync as Oq,readFileSync as qq}from"node:fs";import{join as Mq}from"node:path";import{augmentNodeCommandForDebug as mB,withResolvedClineBuildEnv as q3}from"@cline/shared";import{ensureHookLogDir as xB}from"@cline/shared/storage";function C8($,Z){if(!Z)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:Z}}import{existsSync as Fq,readdirSync as Aq}from"node:fs";import{basename as fq,extname as Uq,join as Dq}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as EZ,resolveHooksConfigSearchPaths as Lq}from"@cline/shared/storage";function h6($){return Lq($)}var w8;((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"})(w8||={});var k6={["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"},_q=new Map(Object.values(w8).map(($)=>[$.toLowerCase(),$])),zq=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function I6($){let Z=Uq($).toLowerCase();if(!zq.has(Z))return;let Q=fq($,Z).trim().toLowerCase();return _q.get(Q)}function q$($){let Z=[],Q=new Set,W=h6($).filter((J)=>Fq(J));for(let J of W)try{for(let X of Aq(J,{withFileTypes:!0})){if(!X.isFile())continue;let Y=I6(X.name);if(!Y)continue;let j=Dq(J,X.name);if(Q.has(j))continue;Q.add(j),Z.push({fileName:Y,hookEventName:k6[Y],path:j})}}catch{}return Z.sort((J,X)=>J.path.localeCompare(X.path))}function CZ($){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 NZ($,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 Rq($,Z){if(!Z)return $;if(!$)return{...Z};let Q=[$.context,Z.context].filter((J)=>typeof J==="string"&&J.length>0).join(`
202
+ `),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 Eq($){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 T3($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function O0($,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 Nq($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
203
+ `).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 Cq($,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 vB($,Z){if(Z.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await gB($,Z)}catch(Q){let W=Sq(Z.command,process.platform,Q);if(!W)throw Q;return await gB($,{...Z,command:W})}}async function gB($,Z){let Q=mB(Z.command,{env:Z.env,debugRole:"hook"}),W=Tq(Q[0],Q.slice(1),{cwd:Z.cwd,env:q3(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 Cq(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}=Nq(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:H})})});return await Promise.race([G,X])}function wq($){try{let Q=qq($,"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 Pq($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function Sq($,Z=process.platform,Q){if(Z!=="win32"||!Pq(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function cB($){if($.length===0)return;let[Z,...Q]=$,W=Z.replace(/\\/g,"/").toLowerCase(),J=W.split("/").at(-1)??W;if(J==="env")return cB(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 bq($){let Z=wq($);if(Z&&Z.length>0)return[...cB(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 mB(["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 yq($){let Z={};for(let Q of q$($)){if(!Q.hookEventName)continue;let W=Q.hookEventName,J=Z[W]??[];J.push(bq(Q.path)),Z[W]=J}return Z}async function hq($){let Z;for(let Q of $.commands){let W=Q.join(" ");try{let J=await vB($.payload,{command:Q,cwd:$.cwd,env:q3(process.env),detached:!1,timeoutMs:$.timeoutMs});if(J?.timedOut){NZ($.logger,`hook command timed out: ${W}`);continue}if(J?.parseError){NZ($.logger,`hook command returned invalid JSON control output: ${W} (${J.parseError})`);continue}Z=Rq(Z,Eq(J?.parsedJson))}catch(J){NZ($.logger,`hook command failed: ${W}`,J)}}return Z}function A2($){for(let Z of $.commands){let Q=Z.join(" ");vB($.payload,{command:Z,cwd:$.cwd,env:q3(process.env),detached:!0}).catch((W)=>{NZ($.logger,`hook command failed: ${Q}`,W)})}}function M$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function O3($,Z){return{...M$($.snapshot),userMessage:Z}}function uB($){return{...M$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function dB($){return{...M$($.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 lB($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function kq($){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 P8($){let Z={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(W)=>{let J=`${JSON.stringify({ts:new Date().toISOString(),...W})}
204
+ `,Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??Mq(xB(),"hooks.jsonl");xB(Y),Oq(Y,J,"utf8")};return{beforeRun:async(W)=>{let J=O3(W,"");Q({...O0(J,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(W)=>{let J=uB(W);Q({...O0(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:CZ(J.call.input)}});return},afterTool:async(W)=>{let J=dB(W);Q({...O0(J,Z),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:CZ(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=M$(W);if(J.status==="completed"){Q({...O0(X,Z),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||T3(J.error?.message)){Q({...O0(X,Z),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Q({...O0(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=O3({snapshot:W.snapshot},lB(W.message.content));Q({...O0(J,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function x6($){let Z=yq($.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;A2({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...O0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...O0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=Z.prompt_submit??[];if(K.length>0)A2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},X=async(G)=>{let K=Z.tool_call??[];if(K.length===0)return;return hq({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...O0(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:CZ(G.call.input)}}})},Y=async(G)=>{let K=Z.tool_result??[];if(K.length===0)return;A2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:CZ(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;A2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(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;A2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},H=async(G)=>{if(T3(G.reason)){let F=Z.agent_abort??[];if(F.length>0)A2({commands:F,cwd:$.cwd,logger:$.logger,payload:{...O0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=Z.session_shutdown??[];if(K.length===0)return;A2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...O0(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(M$(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(O3({snapshot:G.snapshot},lB(G.message.content)))}}if((Z.tool_call?.length??0)>0)B.beforeTool=async(G)=>{let K=await X(uB(G));return kq(K)};if((Z.tool_result?.length??0)>0)B.afterTool=async(G)=>{await Y(dB(G));return};if((Z.agent_end?.length??0)>0)B.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await j({...M$(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"||T3(A.error?.message)){await H({...M$(F),reason:A.error?.message});return}if(A.error)await V({...M$(F),iteration:A.iterations,error:A.error})}}return B}function S8($){return C8("core.hook_config_files",x6($))}function f2($,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 U2($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:f2(Z,"beforeRun"),afterRun:f2(Z,"afterRun"),beforeModel:f2(Z,"beforeModel"),afterModel:f2(Z,"afterModel"),beforeTool:f2(Z,"beforeTool"),afterTool:f2(Z,"afterTool"),onEvent:f2(Z,"onEvent")}}var pB={};N(pB,{normalizeRuntimeCapabilities:()=>q0});function q0(...$){let Z,Q;for(let J of $){if(!J)continue;if(J.toolExecutors)Z={...Z??{},...J.toolExecutors};if(J.requestToolApproval)Q=J.requestToolApproval}let W=Z&&Object.keys(Z).length>0;if(!W&&!Q)return;return{...W?{toolExecutors:Z}:{},...Q?{requestToolApproval:Q}:{}}}var $G={};N($G,{toProviderConfig:()=>l0,emptyStoredProviderSettings:()=>N$,StoredProviderSettingsSchema:()=>k8,StoredProviderSettingsEntrySchema:()=>oZ,ProviderSettingsSchemaTyped:()=>h8});import{z as E$}from"zod";var eB={};N(eB,{toProviderConfig:()=>l0,safeParseSettings:()=>sZ,safeCreateProviderConfig:()=>y3,parseSettings:()=>aZ,normalizeProviderId:()=>y8,isBuiltInProviderId:()=>S3,createProviderConfig:()=>b3,SapSettingsSchema:()=>rZ,ReasoningSettingsSchema:()=>uZ,ProviderSettingsSchema:()=>R$,ProviderProtocolSchema:()=>mZ,ProviderIdSchema:()=>u6,ProviderClientSchema:()=>vZ,OcaSettingsSchema:()=>iZ,ModelCatalogSettingsSchema:()=>nZ,GcpSettingsSchema:()=>lZ,BUILT_IN_PROVIDER_IDS:()=>P3,BUILT_IN_PROVIDER:()=>c6,AzureSettingsSchema:()=>pZ,AwsSettingsSchema:()=>dZ,AuthSettingsSchema:()=>cZ});import*as d0 from"@cline/llms";import{z as C}from"zod";var tB={};N(tB,{resolveProviderConfig:()=>v6,getProviderConfig:()=>gZ,getLiveModelsCatalog:()=>b8,clearPublicModelsCatalogCache:()=>JM,clearPrivateModelsCatalogCache:()=>w3,clearLiveModelsCatalogCache:()=>C3,OPENAI_COMPATIBLE_PROVIDERS:()=>m6,DEFAULT_MODELS_CATALOG_URL:()=>hZ});import*as s from"@cline/llms";function M3($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let W of[Q.id,Q.name,Q.model])if(typeof W==="string"&&W.trim())return W.trim()}return""}).filter((Z)=>Z.length>0)}function Iq($,Z){let Q=M3($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let W=$,J=M3(W.data??W.models);if(J.length>0)return J;if(W.models&&typeof W.models==="object"&&!Array.isArray(W.models)){let Y=Object.keys(W.models).filter((j)=>j.trim().length>0);if(Y.length>0)return Y}let X=W.providers?.[Z];if(X&&typeof X==="object"){let j=M3(X.models??X);if(j.length>0)return j}return[]}async function wZ($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return Iq(await Q.json(),Z)}function rB($){return $.replace(/\/+$/,"")}function PZ($,Z,Q){let W=Q?.trim();if(!W)return;let J=$?.trim();if(!J||!Z?.trim())return W;try{let X=new URL(W),Y=new URL(Z),j=new URL(J);if(X.origin!==Y.origin)return W;let V=rB(Y.pathname),H=rB(j.pathname);if(V&&X.pathname.startsWith(`${V}/`)){let B=X.pathname.slice(V.length);j.pathname=`${H}${B}`}else j.pathname=X.pathname;return j.search=X.search,j.hash=X.hash,j.toString()}catch{return W}}function xq($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function gq($){if($.baseUrl.length===0)return!1;switch($.client){case"openai-compatible":case"openai":case"openai-r1":case"fetch":return!0;default:return $.protocol==="openai-chat"}}var mq=Object.values(s.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:xq($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),nB=Object.fromEntries(mq.map(($)=>[$.id,$]));function vq($){return nB[$]}function cq(){return Object.fromEntries(Object.entries(nB).filter(([,$])=>gq($)))}function aB($=[]){let Z=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return Z.length>0?Z:void 0}var hZ="https://models.dev/api.json",uq=600000,sB=300000,dq=5000,yZ=new Map,g6=new Map,R3=new Map,SZ=new Map;async function lq(){return s.getGeneratedProviderModels()}async function pq($,Z={},Q={},W={},J={},X={}){if($==="litellm")return s.sortModelsByReleaseDate(W);let Y=await lq(),j=s.resolveProviderModelCatalogKeys($),V=Object.assign({},...j.map((K)=>Y[K]??{})),H=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),B=Object.keys(J).length>0;if(H&&B)return s.sortModelsByReleaseDate({...J,...X});if($==="openai-codex")return s.sortModelsByReleaseDate({...Z,...s.filterOpenAICodexModels(Q),...J,...X});if($==="cline-pass"&&Object.keys(Q).length>0)return s.sortModelsByReleaseDate({...Q,...X});let G=s.sortModelsByReleaseDate({...V,...Z,...Q,...W,...J});if($==="cline")return s.sortModelsByReleaseDate({...s.preferCanonicalModelIds(G,s.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...X});return s.sortModelsByReleaseDate({...G,...X})}function rq($,Z){let Q=s.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((W)=>Z[W]??{}))}function kZ($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function N3($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function iq($){let Z=2166136261;for(let Q=0;Q<$.length;Q+=1)Z^=$.charCodeAt(Q),Z+=(Z<<1)+(Z<<4)+(Z<<7)+(Z<<8)+(Z<<24);return(Z>>>0).toString(16)}function nq($,Z){return`${$}:${kZ(Z.baseUrl)}:${iq(N3(Z)??"")}`}async function IZ($,Z,Q=dq){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await fetch($,{...Z,signal:W.signal})}finally{clearTimeout(J)}}function D2($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function xZ($,Z){let Q=["streaming","tools"];return D2(Q,"images",Boolean(Z.supportsImages)),D2(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),D2(Q,"reasoning",Boolean(Z.supportsReasoning)),{id:$,name:Z.name??$,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxTokens:Z.maxTokens,capabilities:Q,releaseDate:Z.releaseDate,status:"active"}}async function aq($,Z){let Q=await IZ("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;if(j.includes("whisper")||j.includes("tts")||j.includes("embedding"))continue;let V=Y.supported_features??[];X[j]=xZ(j,{name:j,contextWindow:Y.context_length,maxInputTokens:Y.context_length,maxTokens:Y.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return X}function iB($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function sq($,Z){let Q=await IZ("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":Z}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],X={};for(let Y of J){let j=Y.id?.trim();if(!j)continue;X[j]=xZ(j,{name:j,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return X}async function oq($,Z){let W=`${(kZ($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await IZ(W,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!J.ok)throw Error(`Poolside model refresh failed: HTTP ${J.status}`);let Y=(await J.json())?.data??[],j={};for(let V of Y){let H=V.id?.trim();if(!H)continue;let B=V.supported_features??[],G=V.supported_sampling_parameters??[],K=V.input_modalities??[],F=["streaming"];D2(F,"tools",B.includes("tools")),D2(F,"reasoning",B.includes("reasoning")),D2(F,"temperature",G.includes("temperature")),D2(F,"images",K.includes("image"));let A={input:iB(V.pricing?.prompt),output:iB(V.pricing?.completion)};j[H]={id:H,name:V.name??H,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:A.input!==void 0||A.output!==void 0?A:void 0,status:"active"}}return j}function tq($){let Z=kZ($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function eq($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function $M($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,W=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${W}`}async function ZM($,Z){let Q=tq($.baseUrl),W=[],J=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let X of eq(Q))for(let[Y,j]of J)try{let V=await IZ(X,{method:"GET",headers:{accept:"application/json",...j}});if(V.ok){let B=(await V.json())?.data??[],G={};for(let K of B){let F=K.model_name?.trim(),L=K.litellm_params?.model?.trim()||F;if(!L)continue;let f=K.model_info,D=xZ(L,{name:F??L,maxTokens:f?.max_output_tokens??f?.max_tokens,maxInputTokens:f?.max_input_tokens??f?.max_tokens,supportsImages:f?.supports_vision,supportsPromptCache:f?.supports_prompt_caching,supportsReasoning:f?.supports_reasoning});if(G[L]=D,F)G[F]={...D,id:F,name:F}}return G}W.push(`${new URL(X).pathname} (${Y}): ${await $M(V)}`)}catch(V){let H=V instanceof Error?V.message:String(V);W.push(`${new URL(X).pathname} (${Y}): ${H}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${W.join("; ")}`)}var oB={baseten:aq,hicap:sq,litellm:ZM,poolside:oq},E3=new Map,bZ=new Map;function QM($,Z){return`${$}:${kZ(Z.baseUrl)}`}async function WM($,Z,Q){let W=s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=PZ(Q.baseUrl,W?.provider.baseUrl,W?.provider.modelsSourceUrl);if(!J)return{};let X=Z?.cacheTtlMs??sB,Y=QM($,Q),j=Date.now(),V=E3.get(Y);if(V&&V.expiresAt>j)return V.data;let H=bZ.get(Y);if(H)return H;let B=wZ(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,xZ(F,{name:F})]));return E3.set(Y,{data:K,expiresAt:j+X}),K}).finally(()=>{bZ.delete(Y)});return bZ.set(Y,B),B}function JM(){E3.clear(),bZ.clear()}async function XM($,Z){let Q=N3(Z);if(!Q)return{};let W=oB[$];if(!W)return{};return W(Z,Q)}function YM($,Z,Q){if(!Q)return!1;if(!oB[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(N3(Q))}async function jM($,Z,Q){let W=Z?.cacheTtlMs??sB,J=nq($,Q),X=Date.now(),Y=R3.get(J);if(Y&&Y.expiresAt>X)return Y.data;let j=SZ.get(J);if(j)return j;let V=XM($,Q).then((H)=>{return R3.set(J,{data:H,expiresAt:X+W}),H}).finally(()=>{SZ.delete(J)});return SZ.set(J,V),V}async function VM($){return s.fetchLiveProviderModels($,globalThis.fetch)}async function b8($={}){let Z=$.url??hZ,Q=$.cacheTtlMs??uq,W=Date.now(),J=yZ.get(Z);if(J&&J.expiresAt>W)return J.data;let X=g6.get(Z);if(X)return X;let Y=VM(Z).then((j)=>{return yZ.set(Z,{data:j,expiresAt:W+Q}),j}).finally(()=>{g6.delete(Z)});return g6.set(Z,Y),Y}function C3($){if($){yZ.delete($),g6.delete($);return}yZ.clear(),g6.clear()}function w3(){R3.clear(),SZ.clear()}function HM($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:aB(Q.capabilities)}]))}var m6=HM(cq());function gZ($){let Z=vq($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:aB(Z.capabilities)}}async function v6($,Z,Q){let W=gZ($);if(!W)return;try{let J=Z?.loadLatestOnInit?await b8(Z):void 0,X=J?rq($,J):{},Y=Q&&YM($,Z,Q)?await jM($,Z,Q):{},V=Boolean(s.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:W.modelId,baseUrl:W.baseUrl}:Q,H=V?await WM($,Z,V).catch(()=>({})):{},B=await pq($,W.knownModels,X,Y,H,Q?.knownModels);return{...W,knownModels:B}}catch(J){if(Z?.failOnError)throw J;if($==="litellm")return{...W,knownModels:{}};return W}}var c6=d0.BUILT_IN_PROVIDER,P3=d0.BUILT_IN_PROVIDER_IDS,S3=d0.isBuiltInProviderId,y8=d0.normalizeProviderId,u6=C.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),mZ=C.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),vZ=C.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),cZ=C.object({apiKey:C.string().optional(),accessToken:C.string().optional(),refreshToken:C.string().optional(),expiresAt:C.number().int().positive().optional(),accountId:C.string().optional()}),BM=C.enum(["none","low","medium","high","xhigh"]),uZ=C.object({enabled:C.boolean().optional(),effort:BM.optional(),budgetTokens:C.number().int().positive().optional()}),dZ=C.object({accessKey:C.string().optional(),secretKey:C.string().optional(),sessionToken:C.string().optional(),region:C.string().optional(),profile:C.string().optional(),authentication:C.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:C.boolean().optional(),useCrossRegionInference:C.boolean().optional(),useGlobalInference:C.boolean().optional(),endpoint:C.string().url().optional(),customModelBaseId:C.string().optional()}),lZ=C.object({projectId:C.string().optional(),region:C.string().optional()}),pZ=C.object({apiVersion:C.string().optional(),useIdentity:C.boolean().optional()}),rZ=C.object({clientId:C.string().optional(),clientSecret:C.string().optional(),tokenUrl:C.string().url().optional(),resourceGroup:C.string().optional(),deploymentId:C.string().optional(),useOrchestrationMode:C.boolean().optional(),api:C.enum(["orchestration","foundation-models"]).optional(),defaultSettings:C.record(C.string(),C.unknown()).optional()}),iZ=C.object({mode:C.enum(["internal","external"]).optional(),usePromptCache:C.boolean().optional()}),nZ=C.object({loadLatestOnInit:C.boolean().optional(),loadPrivateOnAuth:C.boolean().optional(),url:C.string().url().optional(),cacheTtlMs:C.number().int().positive().optional(),failOnError:C.boolean().optional()}),R$=C.object({provider:u6,apiKey:C.string().optional(),auth:cZ.optional(),model:C.string().optional(),protocol:mZ.optional(),client:vZ.optional(),routingProviderId:u6.optional(),maxTokens:C.number().int().positive().optional(),contextWindow:C.number().int().positive().optional(),baseUrl:C.string().url().optional(),headers:C.record(C.string(),C.string()).optional(),timeout:C.number().int().positive().optional(),reasoning:uZ.optional(),aws:dZ.optional(),gcp:lZ.optional(),azure:pZ.optional(),sap:rZ.optional(),oca:iZ.optional(),region:C.string().optional(),apiLine:C.enum(["china","international"]).optional(),capabilities:C.array(C.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:nZ.optional()});function aZ($){return R$.parse($)}function sZ($){return R$.safeParse($)}function GM($){return $.protocol==="openai-responses"||$.client==="openai"}function l0($,Z={}){let Q=$.provider,W=y8(Q),J=Z.includeKnownModels!==!1,X=$.reasoning?.effort||"none",Y=X==="none"?void 0:X,j=m6[W],V=Object.assign({},...d0.resolveProviderModelCatalogKeys(W).map((L)=>d0.getGeneratedModelsForProvider(L))),H=Object.keys(V)[0],B=X8(W,$),G=$.baseUrl??(W==="oca"?$.oca?.mode==="internal"?x9:g9:j?.baseUrl),K=$.routingProviderId??(GM($)&&W!==c6.OPENAI_NATIVE?c6.OPENAI_NATIVE:void 0),F=J?j?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,A={providerId:Q,clientType:$.client,routingProviderId:K,modelId:$.model??j?.modelId??H??"default",...J?{knownModels:F}:{},apiKey:B,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:Y,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??j?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(A).filter(([L,f])=>f!==void 0))}function b3($){let Z=aZ($);return l0(Z)}function y3($){let Z=sZ($);if(Z.success)return{success:!0,config:l0(Z.data)};return{success:!1,error:Z.error}}var h8=R$;var oZ=E$.object({settings:R$,updatedAt:E$.string().datetime(),tokenSource:E$.enum(["manual","oauth","migration"]).default("manual")}),k8=E$.object({version:E$.literal(1),lastUsedProvider:E$.string().min(1).optional(),providers:E$.record(E$.string(),oZ)});function N$(){return{version:1,providers:{}}}Y1();var JG={};N(JG,{InMemoryWorkspaceManager:()=>x8});import{upsertWorkspaceInfo as fM,WorkspaceManifestSchema as k3}from"@cline/shared";var WG={};N(WG,{normalizeWorkspacePath:()=>d1,generateWorkspaceInfoWithDiagnostics:()=>d6,generateWorkspaceInfo:()=>I8,buildWorkspaceMetadataWithInfo:()=>h3,buildWorkspaceMetadata:()=>l6});import{basename as KM,resolve as FM}from"node:path";import{performance as ZG}from"node:perf_hooks";import{processWorkspaceInfo as QG}from"@cline/shared";import AM from"simple-git";function d1($){return FM($)}async function I8($){return(await d6($)).info}function tZ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function d6($){let Z=d1($),Q={rootPath:Z,hint:KM(Z)},W;try{let J=AM({baseDir:Z});if(!await J.checkIsRepo())return{info:Q,vcsType:"none"};try{let Y=await J.getRemotes(!0);if(Y.length>0){let j=Y.map((V)=>{let H=V.refs.fetch||V.refs.push;return`${V.name}: ${H}`});Q.associatedRemoteUrls=j}}catch(Y){W??=tZ(Y)}try{let Y=(await J.revparse(["HEAD"])).trim();if(Y.length>0)Q.latestGitCommitHash=Y}catch(Y){W??=tZ(Y)}try{let Y=(await J.branch()).current.trim();if(Y.length>0)Q.latestGitBranchName=Y}catch(Y){W??=tZ(Y)}return{info:Q,vcsType:"git",error:W}}catch(J){return{info:Q,vcsType:"none",error:tZ(J)}}}async function l6($){let Z=await I8($);return QG(Z)}async function h3($){let Z=ZG.now(),Q=await d6($),W=ZG.now()-Z,J=Q.info;return{workspaceInfo:J,workspaceMetadata:QG(J),durationMs:W,vcsType:Q.vcsType,initError:Q.error}}class x8{manifest;listeners=new Set;constructor($){this.manifest=k3.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await I8($);return this.manifest=fM(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=d1($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=k3.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let W=await this.addWorkspacePath(Z);return this.manifest=k3.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=d1($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}L0();import{createHash as UM}from"node:crypto";var XG=new Set,YG=new Set;function DM($){return UM("sha256").update($).digest("hex")}function LM($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function jG($){if(!$.telemetry)return;let Z=DM($.rootPath),Q=$.rootCount??1;if(!XG.has(Z))XG.add(Z),U9($.telemetry,{root_count:Q,vcs_types:LM($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!YG.has(Z)){YG.add(Z);let W=Error($.initError.message);W.name=$.initError.errorType||"Error",D9($.telemetry,W,{fallback_to_single_root:!0,workspace_count:Q})}}function zM($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function TM($,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(zM).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 OM($,Z){let Q=typeof $.thinking==="boolean",W=typeof $.reasoningEffort==="string";if(!Q&&!W)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...W?{effort:$.reasoningEffort}:{}}}function VG($,Z){return _M($,Z)}function qM($){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 MM($){let Z={...$.storedHeaders??{},...$.configHeaders??{}},Q=$.accountId?.trim()||RM($.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 RM($){let Z=$?.trim();if(!Z)return;let Q=R0(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 EM($,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"?MM({sessionId:Z,configHeaders:$.headers,storedHeaders:X?.headers,accountId:X?.auth?.accountId,accessToken:$.apiKey??X?.auth?.accessToken??X?.apiKey}):$.headers??X?.headers,reasoning:OM($,X?.reasoning),modelCatalog:Y},H={...l0(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 HG($){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=T$(Z.config),{modelCatalogDefaults:f,userInstructionService:D,configExtensions:U,onTeamRestored:T,...q}=K??{},z=Object.keys(q).length>0?q:void 0,{workspaceInfo:_,workspaceMetadata:E,durationMs:w,vcsType:y,initError:l}=await h3(L),o=z?.extensionContext,t={...o??{},workspace:{..._,...o?.workspace??{}},session:{...o?.session??{},sessionId:Q},logger:o?.logger??z?.logger,telemetry:o?.telemetry??z?.telemetry??J};jG({telemetry:t.telemetry,rootPath:_.rootPath,workspaceInfo:_,rootCount:1,vcsType:y,durationMs:w,initError:l,featureFlagEnabled:!0});let Q0=S8({cwd:Z.config.cwd,workspacePath:L,rootSessionId:Q,logger:z?.logger,workspaceInfo:_}),Q1=JB(z?.hooks)?void 0:P8({rootSessionId:Q,workspacePath:L,workspaceInfo:_}),l$=U2([z?.hooks,Q1]),r;if(VG(U,"plugins"))try{r=await N8({pluginPaths:z?.pluginPaths,workspacePath:L,cwd:Z.config.cwd,onEvent:V,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:_,session:t.session,client:t.client,user:t.user,logger:t.logger,telemetry:t.telemetry,automation:t.automation}),TM(r.failures,r.warnings,z?.logger)}catch(o2){let ZW=o2 instanceof Error?o2.message:String(o2);z?.logger?.log?.(`plugin loading failed; continuing without plugins (${ZW})`)}let P=tW(Q0?[Q0]:void 0,tW(z?.extensions,YZ(r?.extensions))),B0=VG(U,"plugins")?u1(r?.pluginPaths??[]):void 0,G0={...Z.config,...z??{},sessionId:Q,hooks:l$,extensions:P,extensionContext:t,telemetry:t.telemetry},w0=EM(G0,Q,W,f,j),a2=U2([G0.hooks,G0.checkpoint?.enabled===!0?IB({cwd:G0.cwd,sessionId:Q,logger:G0.logger,createCheckpoint:G0.checkpoint?.createCheckpoint,initialRunCount:qM(Z.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),R1={...G0,providerConfig:w0,workspaceMetadata:E,hooks:a2},G1=Z.toolPolicies??G0.toolPolicies??Y,P4=q0(X,Z.capabilities),s2=P4?.requestToolApproval,K9=P4?.toolExecutors,E1=B?.(R1),F9=new x8({currentWorkspacePath:_.rootPath,workspaces:{[_.rootPath]:_}});return{effectiveInput:Z,config:R1,providerConfig:w0,workspaceMetadata:E,workspaceInfo:_,extensions:P,hooks:a2,toolPolicies:G1,requestToolApproval:s2,pluginSandboxShutdown:r?.shutdown,runtimeBuilderInput:{config:R1,hooks:a2,extensions:P,onTeamEvent:H,createSpawnTool:G,onTeamRestored:T,onSubAgentEvent:E1?.onSubAgentEvent,onSubAgentStart:E1?.onSubAgentStart,onSubAgentEnd:E1?.onSubAgentEnd,userInstructionService:D,pluginSkillDirectories:B0,configExtensions:U,toolExecutors:K9,toolPolicies:G1,workspaceManager:F9,logger:R1.logger,telemetry:R1.telemetry,requestToolApproval:s2}}}import{existsSync as $Q,mkdirSync as NM,readdirSync as CM,rmdirSync as wM,rmSync as PM,unlinkSync as SM}from"node:fs";import{dirname as BG,join as eZ}from"node:path";function J0(){return new Date().toISOString()}function p6($){if(!$||!$Q($))return;try{SM($)}catch{}}function bM($){let Z=_8($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=O6($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class I3{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return eZ(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!$Q(Z))NM(Z,{recursive:!0});return Z}sessionMessagesPath($){return eZ(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return eZ(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!$Q(Z)){Z=BG(Z);continue}try{if(CM(Z).length>0)break;wM(Z)}catch{break}Z=BG(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!$Q($))return;try{PM($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:W,fileStem:J}=bM($),X=this.sessionArtifactsDir(W);return{messagesPath:eZ(X,`${J}.messages.json`)}}}import{resolveDocumentsExtensionPath as yM}from"@cline/shared/storage";L0();function GG($,Z,Q,W,J){if(Q)_9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});else L9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});hM($.telemetry,{workspacePath:W})}function hM($,Z){let Q=yM("Hooks"),W=q$(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())C9($,X,Y.global,Y.workspace)}function KG($,Z){for(let Q of Z.mentions)E9($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)M9($,"file",Q.length);for(let Q of Z.ignoredMentions)R9($,"file","not_found",Q)}var HD={};N(HD,{ProviderSettingsManager:()=>q1});import{chmodSync as GD,existsSync as lY,mkdirSync as Xg,readFileSync as Yg,writeFileSync as jg}from"node:fs";import{basename as KD,dirname as pY}from"node:path";import{resolveProviderSettingsPath as Vg}from"@cline/shared/storage";var M={};N(M,{writeHubDiscovery:()=>wQ,writeGlobalSettings:()=>K1,withHubStartupLock:()=>PQ,verifyHubConnection:()=>f1,updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>l8,updateMcpServerOAuthStateAsync:()=>H5,updateMcpServerOAuthState:()=>O2,updateLocalProvider:()=>u7,uninstallPlugin:()=>Q9,uninstallMarketplaceSkill:()=>q7,uninstallMarketplacePlugin:()=>M7,uninstallMarketplaceMcpServerFromSettings:()=>T7,uninstallMarketplaceEntry:()=>HY,truncateNotificationBody:()=>r5,truncateCommandOutput:()=>o$,toggleDisabledTool:()=>JZ,toTeamProgressLifecycleEvent:()=>X4,toProviderConfig:()=>l0,toHubStatusUrl:()=>NJ,toHubHealthUrl:()=>SQ,toHookConfigFileName:()=>I6,syncPluginMcpServersToSettings:()=>$9,summarizeUsageFromMessages:()=>T8,stopLocalHubServerGracefully:()=>mJ,startLocalOAuthServer:()=>W1,startHubWebSocketServer:()=>d2,startHubServer:()=>xf,startClineDeviceAuth:()=>HW,splitCoreSessionConfig:()=>U5,spawnDetachedHubServerWithRetry:()=>o8,spawnDetachedHubServer:()=>yJ,setTelemetryOptOutGlobally:()=>aV,setMcpServerDisabled:()=>z2,setDisabledTools:()=>kW,setDisabledPlugin:()=>WH,setCompactionStrategyGlobally:()=>eV,setAutoUpdateEnabledGlobally:()=>oV,sendHubCommand:()=>hA,saveProviderOAuthCredentials:()=>n$,saveLocalProviderSettings:()=>qY,saveLocalProviderOAuthCredentials:()=>NY,sanitizeSessionToken:()=>H2,safeParseSettings:()=>sZ,safeCreateProviderConfig:()=>y3,runSubprocessEvent:()=>K4,runHook:()=>A4,reviveTeamStateDates:()=>FZ,restartLocalHubIfIdleAfterStartupTimeout:()=>IQ,resolveWorkspaceHubOwnerContext:()=>KF,resolveWorkflowsConfigSearchPaths:()=>Q5,resolveSkillsConfigSearchPaths:()=>$5,resolveSharedHubOwnerContext:()=>y0,resolveSessionBackend:()=>XX,resolveRulesConfigSearchPaths:()=>Z5,resolveProviderConfig:()=>v6,resolveProviderApiKeyFromSettings:()=>fW,resolveProductionHubOwnerContext:()=>s0,resolvePluginSkillDirectoriesFromPaths:()=>u1,resolvePluginConfigSearchPaths:()=>b6,resolveMcpServerRegistrations:()=>p0,resolveMarketplaceMcpServerName:()=>J9,resolveLocalClineAuthToken:()=>wY,resolveHubUrl:()=>fX,resolveHubOwnerContext:()=>n1,resolveHubEndpointOptions:()=>a0,resolveHubBuildId:()=>CQ,resolveHooksConfigSearchPaths:()=>h6,resolveDisabledToolNames:()=>F1,resolveDisabledPluginPaths:()=>A6,resolveDefaultMcpSettingsPath:()=>$0,resolveDefaultHubPort:()=>s8,resolveDefaultHubPathname:()=>bJ,resolveDefaultHubHost:()=>SJ,resolveCoreSelectedToolIds:()=>fZ,resolveCoreDistinctId:()=>h0,resolveCompatibleLocalHubUrl:()=>P5,resolveClineDir:()=>VF,resolveClineDataDir:()=>P2,resolveAndLoadAgentPlugins:()=>N8,resolveAgentPluginPaths:()=>c1,requestHubShutdown:()=>w5,requestDesktopToolApproval:()=>iX,removePluginMcpServersFromSettings:()=>Z9,rememberRecoverableLocalHubUrl:()=>k$,registerRemoteConfigSessionBlobUpload:()=>K7,registerMcpServersFromSettingsFile:()=>q2,registerDisposable:()=>Zg,refreshProviderModelsFromSource:()=>MY,refreshOpenAICodexToken:()=>I9,refreshOcaToken:()=>v9,refreshClineToken:()=>h9,readSessionCheckpointHistory:()=>I2,readRemoteConfigSessionBlobUploadMetadata:()=>gX,readHubDiscovery:()=>f0,readGlobalSettings:()=>_0,readCompactionStrategyGlobally:()=>tV,readBearerToken:()=>X7,probeHubServer:()=>a1,probeHubConnection:()=>yA,prewarmFileIndex:()=>o9,prewarmDetachedHubServer:()=>yQ,prepareRemoteConfigCoreIntegration:()=>vX,parseWorkflowConfigFromMarkdown:()=>e6,parseUserCommandEnvelope:()=>$g,parseSkillConfigFromMarkdown:()=>o6,parseSettings:()=>aZ,parseRuleConfigFromMarkdown:()=>t6,parsePluginSource:()=>y7,parseMcpInstallArgs:()=>e5,parseHookEventPayload:()=>F4,parseConfiguredAgentConfig:()=>h5,normalizeWorkspacePath:()=>d1,normalizeUserInput:()=>ex,normalizeSdkError:()=>tx,normalizeRuntimeCapabilities:()=>q0,normalizeProviderId:()=>y8,normalizeOAuthProvider:()=>RY,normalizeHubWebSocketUrl:()=>I$,noopBasicLogger:()=>ox,migrateLegacyProviderSettings:()=>H9,mergeRulesForSystemPrompt:()=>u8,mergeAgentHooks:()=>U2,marketplaceEntryKey:()=>VY,makeTeamTaskSubSessionId:()=>T6,makeSubSessionId:()=>L8,loginOpenAICodex:()=>I4,loginOcaOAuth:()=>m4,loginLocalProvider:()=>EY,loginClineOAuth:()=>h4,loginAndSaveProviderOAuthCredentials:()=>c4,loginAndSaveLocalProviderOAuthCredentials:()=>CY,loadOpenTelemetryAdapter:()=>Cx,loadMcpSettingsFile:()=>_2,loadLlmsConfigFromFile:()=>cY,loadConfiguredAgentConfigs:()=>Q4,loadAgentPluginsFromPathsWithDiagnostics:()=>K2,loadAgentPluginsFromPaths:()=>zZ,loadAgentPluginFromPath:()=>P6,listSessionHistoryFromBackend:()=>qJ,listPluginToolsWithDiagnostics:()=>TQ,listPluginTools:()=>K5,listMcpServerOAuthStatuses:()=>B5,listLocalProviders:()=>TY,listHookConfigFiles:()=>q$,isToolDisabledGlobally:()=>$H,isTelemetryOptedOutGlobally:()=>WZ,isSessionNotFoundError:()=>i1,isRuleEnabled:()=>BQ,isPluginDisabledGlobally:()=>QH,isOfficialPluginSlug:()=>b7,isOAuthProvider:()=>i$,isMarketplaceSkillInstalled:()=>O7,isLocalHubOrigin:()=>xX,isLocalHubHostName:()=>Y7,isHubReconnectableTransportError:()=>xJ,isHubCommandTimeoutError:()=>kQ,isDiscoveryFilePresent:()=>BF,isClineOrgIndividualInferenceSubscriptionMessage:()=>gx,isClineOrgIndividualInferenceSubscriptionError:()=>xx,isClineNotSubscribedMessage:()=>Ix,isClineNotSubscribedError:()=>kx,isClineAccountActionRequest:()=>ZQ,isBuiltInProviderId:()=>S3,isAutoUpdateEnabledGlobally:()=>sV,installPlugin:()=>fY,installMcpServer:()=>nX,identifyAccount:()=>S1,hasMcpSettingsFile:()=>p1,getValidOpenAICodexCredentials:()=>x4,getValidOcaCredentials:()=>v4,getValidClineCredentials:()=>k4,getProviderOAuthCredentialsFromSettings:()=>u4,getProviderConfigFields:()=>PY,getProviderConfig:()=>gZ,getProviderAuthStorageId:()=>AW,getProviderAuthHandler:()=>j0,getPersistedProviderApiKey:()=>X8,getMcpServerOAuthState:()=>T2,getMarketplaceSkillCandidates:()=>X9,getLocalProviderModels:()=>OY,getLiveModelsCatalog:()=>b8,getGlobalMarketplaceSkillPaths:()=>Y9,getFileIndex:()=>I1,getCurrentContextSize:()=>Q3,getCoreHeadlessToolNames:()=>z6,getCoreDefaultEnabledToolIds:()=>AZ,getCoreBuiltinToolCatalog:()=>j2,getCoreAcpToolNames:()=>UZ,getClinePassSubscriptionUrl:()=>hx,getClineOrgIndividualInferenceSubscriptionMessage:()=>bx,getClineNotSubscribedMessage:()=>yx,getClineDefaultSystemPrompt:()=>mx,generateWorkspaceInfoWithDiagnostics:()=>d6,generateWorkspaceInfo:()=>I8,formatRulesForSystemPrompt:()=>c8,formatProviderOAuthApiKey:()=>UW,formatDisplayUserInput:()=>sx,findInstalledGlobalMarketplaceSkillName:()=>j9,findCheckpointForRun:()=>B4,filterExtensionToolRegistrations:()=>YZ,filterDisabledTools:()=>g1,filterDisabledPluginPaths:()=>XZ,fetchClineRecommendedModels:()=>mY,executeClineAccountAction:()=>QQ,ensureHubWebSocketServer:()=>j7,ensureHubServer:()=>gf,ensureDetachedHubServer:()=>LF,ensureCustomProvidersLoaded:()=>m7,ensureCompatibleLocalHubUrl:()=>y2,enrichPromptWithMentions:()=>B8,emptyWorkspaceManifest:()=>ix,emptyStoredProviderSettings:()=>N$,discoverPluginModulePaths:()=>y6,disablePluginMcpServersInSettings:()=>tX,deriveSubsessionStatus:()=>q6,deleteLocalProvider:()=>d7,defineLlmsConfig:()=>vY,createWorkflowsConfigDefinition:()=>X5,createUserInstructionConfigService:()=>C$,createToolPoliciesWithPreset:()=>e9,createTool:()=>rx,createTeamName:()=>f7,createSubprocessHooks:()=>nQ,createSpawnAgentTool:()=>_$,createSkillsConfigDefinition:()=>W5,createShellTool:()=>Y6,createShellExecutor:()=>t$,createSessionHost:()=>V4,createRuntimeHost:()=>V4,createRulesConfigDefinition:()=>J5,createRemoteConfigSessionMessagesArtifactUploader:()=>mX,createProviderConfig:()=>b3,createOpenTelemetryTelemetryService:()=>p5,createOAuthClientCallbacks:()=>g8,createMcpTools:()=>n8,createLocalHubScheduleRuntimeHandlers:()=>V7,createLlmsSdk:()=>dY,createInitialAccumulatedUsage:()=>D0,createInMemoryHubOwnerContext:()=>HF,createHubServerUrl:()=>V1,createHubAuthToken:()=>NQ,createHookConfigFileHooks:()=>x6,createHookConfigFileExtension:()=>S8,createHookAuditHooks:()=>P8,createDisabledMcpToolPolicy:()=>G5,createDisabledMcpToolPolicies:()=>zQ,createDelegatedAgentConfigProvider:()=>D$,createDelegatedAgent:()=>L$,createDefaultToolsWithPreset:()=>$Z,createDefaultTools:()=>F$,createDefaultShellExecutor:()=>K6,createDefaultMcpServerClientFactory:()=>r8,createDefaultExecutors:()=>G8,createCoreSettingsService:()=>R2,createCoreSessionSnapshot:()=>U1,createContributionRegistry:()=>px,createContextCompactionPrepareTurn:()=>a4,createConfiguredTelemetryService:()=>$$,createConfiguredTelemetryHandle:()=>_4,createConfiguredAgentTools:()=>W4,createClineTelemetryServiceMetadata:()=>lx,createClineTelemetryServiceConfig:()=>dx,createCheckpointComparePlan:()=>lQ,createBuiltinTools:()=>V2,createAgentTeamsTools:()=>Y2,createAgentRuntime:()=>Jg,createAgentHooksExtension:()=>C8,connectToHub:()=>tQ,completeClineDeviceAuth:()=>BW,compareCheckpointToWorkspace:()=>c5,collectPluginMcpOAuthCandidates:()=>h7,clearPrivateModelsCatalogCache:()=>w3,clearLiveModelsCatalogCache:()=>C3,clearHubDiscovery:()=>b0,captureWorkspacePathResolved:()=>Bj,captureWorkspaceInitialized:()=>U9,captureWorkspaceInitError:()=>D9,captureToolUsage:()=>e2,captureTokenUsage:()=>z9,captureTaskRestarted:()=>_9,captureTaskCreated:()=>L9,captureTaskCompleted:()=>S4,captureSubagentExecution:()=>y4,captureSkillUsed:()=>O9,captureSdkError:()=>ux,captureProviderConfigured:()=>Gj,captureProviderApiError:()=>b4,captureModeSwitch:()=>T9,captureMentionUsed:()=>M9,captureMentionSearchResults:()=>E9,captureMentionFailed:()=>R9,captureHookDiscovery:()=>C9,captureExtensionActivated:()=>Hj,captureDiffEditFailure:()=>q9,captureConversationTurnEvent:()=>t2,captureCompactionSkipped:()=>P9,captureCompactionExecuted:()=>w9,captureAuthSucceeded:()=>w1,captureAuthStarted:()=>C1,captureAuthLoggedOut:()=>X$,captureAuthFailed:()=>P1,captureAgentUnexpectedReasoningTokens:()=>Vj,captureAgentTeamCreated:()=>N9,captureAgentCreated:()=>Y$,buildWorkspaceMetadata:()=>l6,buildTeamProgressSummary:()=>J4,buildSdkErrorProperties:()=>vx,buildRemoteConfigSessionBlobUploadMetadata:()=>B7,buildMcpInstallTransport:()=>U7,buildDelegatedAgentConfig:()=>J2,buildConfiguredAgentToolName:()=>k5,buildConfiguredAgentToolDescriptors:()=>I5,buildCheckpointWorkspaceDiff:()=>pQ,bootstrapAgentTeams:()=>D8,authorizeMcpServerOAuth:()=>UQ,addLocalProvider:()=>zY,accumulateUsageTotals:()=>A0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>s6,UnifiedConfigFileWatcher:()=>L2,ToolPresets:()=>u0,TelemetryService:()=>D4,TelemetryLoggerSink:()=>l5,TEAM_TOOL_NAMES:()=>U8,SubprocessSandbox:()=>M8,StructuredCommandInputSchema:()=>a$,StoredProviderSettingsSchema:()=>k8,StoredProviderSettingsEntrySchema:()=>oZ,SqliteTeamStore:()=>l2,SqliteSessionStore:()=>L1,SessionVersioningService:()=>c$,SessionVersioningError:()=>I0,SessionSource:()=>z0,SessionNotFoundError:()=>r1,SapSettingsSchema:()=>rZ,SKILLS_CONFIG_DIRECTORY_NAME:()=>a6,SESSION_STATUSES:()=>M6,SESSION_NOT_FOUND_ERROR_CODE:()=>E2,SDK_ERROR_TELEMETRY_EVENT:()=>Qg,RpcClineAccountService:()=>i6,RemoteRuntimeHost:()=>$4,ReasoningSettingsSchema:()=>uZ,RULES_CONFIG_DIRECTORY_NAME:()=>HQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>G7,ProviderSettingsSchema:()=>R$,ProviderSettingsManager:()=>q1,ProviderProtocolSchema:()=>mZ,ProviderIdSchema:()=>u6,ProviderClientSchema:()=>vZ,OpenTelemetryProvider:()=>L4,OcaSettingsSchema:()=>iZ,OPENAI_COMPATIBLE_PROVIDERS:()=>m6,NodeHubClient:()=>H1,NoOpFeatureFlagsProvider:()=>g2,NativeHubTransportAdapter:()=>o5,ModelCatalogSettingsSchema:()=>nZ,McpSettingsUpdateSkippedError:()=>d8,McpSettingsMutatorPurityError:()=>w$,McpSettingsLockTimeoutError:()=>P$,MAX_COMMAND_OUTPUT_CHARS:()=>h1,LocalRuntimeHost:()=>T1,Llms:()=>wx,InMemoryWorkspaceManager:()=>x8,InMemoryMcpManager:()=>M2,HubUIClient:()=>LX,HubTransportError:()=>E0,HubSessionClient:()=>DX,HubServerTransport:()=>z4,HubScheduleService:()=>U4,HubScheduleCommandService:()=>f4,HubRuntimeHost:()=>s1,HubCommandError:()=>t8,HookEventPayloadSchema:()=>iQ,HookEventNameSchema:()=>rQ,HookConfigFileName:()=>w8,HOOK_CONFIG_FILE_EVENT_MAP:()=>k6,HOOKS_CONFIG_DIRECTORY_NAME:()=>EZ,GlobalSettingsSchema:()=>F6,GcpSettingsSchema:()=>lZ,FileTeamPersistenceStore:()=>r7,FeatureFlagsService:()=>x2,FeatureFlagDefaultValue:()=>ax,FEATURE_FLAGS:()=>nx,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>t7,DefaultToolNames:()=>U0,DefaultRuntimeBuilder:()=>q4,DefaultLlmsSdk:()=>B9,DEFAULT_MODELS_CATALOG_URL:()=>hZ,DEFAULT_HUB_PORT:()=>wJ,DEFAULT_HUB_PATHNAME:()=>PJ,DEFAULT_HUB_HOST:()=>CJ,CoreSettingsService:()=>S$,CoreSessionService:()=>z1,ContributionRegistry:()=>cx,ClineOrgIndividualInferenceSubscriptionError:()=>Sx,ClineNotSubscribedError:()=>Px,ClineCore:()=>u5,ClineAccountService:()=>r6,ChatViewStateSchema:()=>IY,ChatSummarySchema:()=>o7,ChatSessionStatusSchema:()=>n7,ChatSessionConfigSchema:()=>i7,ChatMessageSchema:()=>s7,ChatMessageRoleSchema:()=>a7,CORE_TELEMETRY_EVENTS:()=>g,CORE_BUILD_VERSION:()=>xY,BrowserWebSocketHubAdapter:()=>s5,BUILT_IN_PROVIDER_IDS:()=>P3,BUILT_IN_PROVIDER:()=>c6,AzureSettingsSchema:()=>pZ,AwsSettingsSchema:()=>dZ,AuthSettingsSchema:()=>cZ,AgentTeamsRuntime:()=>k2,AgentTeam:()=>j4,Agent:()=>Wg,ALL_DEFAULT_TOOL_NAMES:()=>H$});R(M,L00);import*as wx from"@cline/llms";import{ClineNotSubscribedError as Px,ClineOrgIndividualInferenceSubscriptionError as Sx,getClineOrgIndividualInferenceSubscriptionMessage as bx,getClineNotSubscribedMessage as yx,getClinePassSubscriptionUrl as hx,isClineNotSubscribedError as kx,isClineNotSubscribedMessage as Ix,isClineOrgIndividualInferenceSubscriptionError as xx,isClineOrgIndividualInferenceSubscriptionMessage as gx}from"@cline/llms";import{buildClineSystemPrompt as mx,buildSdkErrorProperties as vx,ContributionRegistry as cx,captureSdkError as ux,createClineTelemetryServiceConfig as dx,createClineTelemetryServiceMetadata as lx,createContributionRegistry as px,createTool as rx,emptyWorkspaceManifest as ix,FEATURE_FLAGS as nx,FeatureFlagDefaultValue as ax,formatDisplayUserInput as sx,noopBasicLogger as ox,normalizeSdkError as tx,normalizeUserInput as ex,parseUserCommandEnvelope as $g,registerDisposable as Zg,SDK_ERROR_TELEMETRY_EVENT as Qg}from"@cline/shared";import"@cline/shared/storage";var AG={};N(AG,{isClineAccountActionRequest:()=>ZQ,executeClineAccountAction:()=>QQ,RpcClineAccountService:()=>i6,ClineAccountService:()=>r6});function kM($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function FG($,Z,Q){let W=kM(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 r6{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(FG(Y.status,j,void 0));throw Error("Cline account response was not valid JSON")}if(!Y.ok)throw Error(FG(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 ZQ($){return $.action==="clineAccount"}async function QQ($,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 i6{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}}var fG={};N(fG,{createOAuthClientCallbacks:()=>g8});function g8($){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}}var MA={};N(MA,{ClineCore:()=>u5});function UG($){if($===!0)return{};if(!$)return;return $}function DG($){if($==="user")return"global";return $}class x3{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let Z=this.getService().ingestEvent($);return{event:Z.event,duplicate:Z.duplicate,matchedSpecIds:Z.matchedSpecs.map((Q)=>Q.specId),queuedRuns:Z.queuedRuns,suppressions:Z.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function LG($){let{host:Z}=$;return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||z0.CLI,interactive:!1,config:{providerId:y8(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:gM(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:{extensionContext:$.getExtensionContext(),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),delivery:W.delivery});if(!J)throw Error("ClineCore automation runtime returned no result");return{result:xM(J)}},async abortSession(Q){return await Z.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}function WQ($){let Z=IM($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),W=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),J=$.context?.logger??$.logger,X=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!W&&!J&&!X)return $.context;return{...$.context??{},...Q?{client:Q}:{},...W?{user:W}:{},...J?{logger:J}:{},...X?{telemetry:X}:{},...Z?{automation:Z}:{}}}function IM($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function xM($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function gM($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var OK={};N(OK,{createCoreSettingsService:()=>R2,CoreSettingsService:()=>S$});import{existsSync as A5,readFileSync as qE}from"node:fs";import{basename as $J,dirname as fK,extname as ME,isAbsolute as LK,join as RE,relative as _K,resolve as UK}from"node:path";var yG={};N(yG,{resolveWorkflowsConfigSearchPaths:()=>Q5,resolveSkillsConfigSearchPaths:()=>$5,resolveRulesConfigSearchPaths:()=>Z5,parseWorkflowConfigFromMarkdown:()=>e6,parseSkillConfigFromMarkdown:()=>o6,parseRuleConfigFromMarkdown:()=>t6,createWorkflowsConfigDefinition:()=>X5,createUserInstructionConfigService:()=>C$,createSkillsConfigDefinition:()=>W5,createRulesConfigDefinition:()=>J5,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>s6,UnifiedConfigFileWatcher:()=>L2,SKILLS_CONFIG_DIRECTORY_NAME:()=>a6,RULES_CONFIG_DIRECTORY_NAME:()=>HQ});import{createHash as mM}from"node:crypto";import{watch as vM}from"node:fs";import{readdir as cM,readFile as uM}from"node:fs/promises";import{join as dM}from"node:path";function lM($){return mM("sha1").update($).digest("hex")}function TG($){return Boolean($&&typeof $==="object"&&"code"in $)}function _G($){return TG($)&&$.code==="ENOENT"}function zG($){return TG($)&&($.code==="EACCES"||$.code==="EPERM")}class L2{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,Z){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=Z?.debounceMs??75,this.emitParseErrors=Z?.emitParseErrors??!1;for(let Q of $){if(this.definitionsByType.has(Q.type))throw Error(`Duplicate unified config definition type '${Q.type}'.`);this.definitionsByType.set(Q.type,Q),this.recordsByType.set(Q.type,new Map),this.discoveredDirectoriesByType.set(Q.type,new Set);for(let W of Q.directories){let J=this.baseTypesByDirectory.get(W);if(J)J.add(Q.type);else this.baseTypesByDirectory.set(W,new Set([Q.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let Z=this.definitionsByType.get($);if(!Z)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(Z)})}getSnapshot($){let Z=this.recordsByType.get($);return new Map([...Z?.entries()??[]].map(([Q,W])=>[Q,{...W}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([W,J])=>[W,{...J}])));return $}emit($){for(let Z of this.listeners)Z($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[Z,Q]of this.watchersByDirectory.entries()){if($.has(Z))continue;Q.close(),this.watchersByDirectory.delete(Z)}this.watchedTypesByDirectory=$;for(let Z of $.keys()){if(this.watchersByDirectory.has(Z))continue;try{let Q=vM(Z,()=>{let W=this.watchedTypesByDirectory.get(Z);if(!W)return;for(let J of W)this.pendingTypes.add(J);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(W)=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let X of J)this.emit({kind:"error",type:X,error:W,filePath:Z})})}catch(Q){if(!_G(Q)&&!zG(Q)){let W=$.get(Z);if(!W)continue;for(let J of W)this.emit({kind:"error",type:J,error:Q,filePath:Z})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let Z of $){let Q=this.definitionsByType.get(Z);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:Z,discoveredDirectories:Q}=await this.loadDefinition($),W=this.recordsByType.get($.type)??new Map;for(let[J,X]of W.entries()){if(Z.has(J))continue;this.emit({kind:"remove",type:$.type,id:J,filePath:X.filePath})}for(let[J,X]of Z.entries()){let Y=W.get(J);if(Y&&Y.filePath===X.filePath&&Y.fingerprint===X.fingerprint)continue;this.emit({kind:"upsert",record:{type:X.type,id:J,item:X.item,filePath:X.filePath}})}if(this.recordsByType.set($.type,Z),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let Z=new Map,Q=new Set;for(let W of $.directories){Q.add(W);let J=$.discoverFiles?await $.discoverFiles(W):await this.readDirectoryFileCandidates(W);for(let X of J){let{fileName:Y,filePath:j}=X;if(Q.add(X.directoryPath),$.includeFile&&!$.includeFile(Y,j))continue;try{let V=await uM(j,"utf8"),H={type:$.type,directoryPath:X.directoryPath,fileName:Y,filePath:j,content:V},B=$.parseFile(H),G=$.resolveId(B,H).trim();if(!G)continue;Z.set(G,{type:$.type,id:G,item:B,filePath:j,fingerprint:lM(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:j})}}}return{records:Z,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[Z,Q]of this.baseTypesByDirectory.entries())$.set(Z,new Set(Q));for(let[Z,Q]of this.discoveredDirectoriesByType.entries())for(let W of Q){let J=$.get(W);if(J)J.add(Z);else $.set(W,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await cM($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:dM($,Q.name)})).sort((Q,W)=>Q.fileName.localeCompare(W.fileName))}catch(Z){if(_G(Z)||zG(Z))return[];throw Z}}}import{readdir as m3,readFile as pM,stat as g3}from"node:fs/promises";import{basename as l1,dirname as rM,extname as XQ,join as S0,resolve as n6}from"node:path";import{AGENTS_RULES_FILE_NAME as OG,RULES_CONFIG_DIRECTORY_NAME as HQ,resolveGlobalAgentsRulesPath as iM,resolveRulesConfigSearchPaths as nM,resolveSkillsConfigSearchPaths as aM,resolveWorkflowsConfigSearchPaths as sM,SKILLS_CONFIG_DIRECTORY_NAME as a6,WORKFLOWS_CONFIG_DIRECTORY_NAME as s6}from"@cline/shared/storage";import oM from"yaml";var JQ="SKILL.md",tM="managed.json",eM=new Set([".md",".markdown",".txt"]);function v3($){return $.trim().toLowerCase()}function m8($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function YQ($){return eM.has(XQ($).toLowerCase())}function qG($){let Z=[],Q=new Set;for(let W of $){let J=n6(W);if(Q.has(J))continue;Q.add(J),Z.push(W)}return Z}function $R($){let Z=[...$?.directories??$5($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...hB({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return qG(Z)}async function c3($){try{let Z=await m3($,{withFileTypes:!0}),Q=[];for(let W of Z){if(!W.isDirectory())continue;let J=S0($,W.name),X=S0(J,tM);try{let Y=await pM(X,"utf8"),j=JSON.parse(Y);if(j&&typeof j==="object")Q.push(J)}catch(Y){if(m8(Y))continue;if(Y?.name==="SyntaxError")continue;throw Y}}return Q.sort((W,J)=>W.localeCompare(J))}catch(Z){if(m8(Z))return[];throw Z}}function u3($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,W,J]=Q;try{let X=oM.parse(W);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:J,hadFrontmatter:!0}}catch(X){let Y=X instanceof Error?X.message:String(X);return{data:{},body:$,hadFrontmatter:!0,parseError:Y}}}function jQ($,Z,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${Z}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${Z}' must be a string.`);let W=$.trim();if(!W&&Q)throw Error(`Frontmatter field '${Z}' cannot be empty.`);return W||void 0}function v8($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function ZR($,Z){if(l1($.filePath).toLowerCase()!==OG.toLowerCase())return l1($.filePath,XQ($.filePath));if(Z&&n6($.filePath)===n6(Z,OG))return"Workspace AGENTS.md";if(n6($.filePath)===n6(iM()))return"Global AGENTS.md";return l1($.filePath,XQ($.filePath))}function o6($,Z){let{data:Q,body:W,parseError:J}=u3($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in skill file.");let j=jQ(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing skill name.");return{name:j,description:jQ(Q.description,"description",!1),disabled:v8(Q.disabled,"disabled")??(v8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function t6($,Z){let{data:Q,body:W,parseError:J}=u3($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in rule file.");let Y=jQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing rule name.");return{name:Y,disabled:v8(Q.disabled,"disabled")??(v8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function e6($,Z){let{data:Q,body:W,parseError:J}=u3($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let X=W.trim();if(!X)throw Error("Missing instructions body in workflow file.");let Y=jQ(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing workflow name.");return{name:Y,disabled:v8(Q.disabled,"disabled")??(v8(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function $5($){return aM($)}function Z5($){return nM($)}function Q5($){return sM($)}async function MG($){if(l1($)===".cline"){let Z=await c3($);return(await Promise.all(Z.map((W)=>MG(S0(W,a6))))).flat()}try{let Z=await m3($,{withFileTypes:!0}),Q=[];for(let W of Z){if(W.isFile()&&W.name===JQ){Q.push({directoryPath:$,fileName:W.name,filePath:S0($,W.name)});continue}let J=S0($,W.name);if(W.isDirectory()||W.isSymbolicLink()&&await g3(J).then((Y)=>Y.isDirectory()).catch((Y)=>{if(m8(Y))return!1;throw Y}))Q.push({directoryPath:J,fileName:JQ,filePath:S0(J,JQ)})}return Q}catch(Z){if(m8(Z))return[];throw Z}}async function VQ($){if(l1($)===".cline"){let Z=await c3($);return(await Promise.all(Z.map((W)=>VQ(S0(W,"rules.md"))))).flat()}try{if((await g3($)).isFile())return[{directoryPath:rM($),fileName:l1($),filePath:$}]}catch(Z){if(!m8(Z))throw Z}try{let Q=(await m3($,{withFileTypes:!0})).filter((J)=>J.isFile()&&YQ(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:S0($,J.name)})),W=S0($,"AGENTS.md");try{if((await g3(W)).isFile()){if(!Q.some((Y)=>Y.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:W})}}catch{}return Q}catch(Z){if(m8(Z))return[];throw Z}}async function QR($){if(l1($)===".cline"){let Z=await c3($);return(await Promise.all(Z.map((W)=>VQ(S0(W,s6))))).flat()}return VQ($)}function W5($){let Z=$R($),Q=$?.workspacePath?S0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?qG([...Z,Q]):Z,discoverFiles:MG,includeFile:(W)=>W===JQ,parseFile:(W)=>o6(W.content,l1(W.directoryPath)),resolveId:(W)=>v3(W.name)}}function J5($){let Z=$?.directories??Z5($?.workspacePath),Q=$?.workspacePath?S0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:VQ,includeFile:(W,J)=>W===".clinerules"||YQ(W)||YQ(J),parseFile:(W)=>t6(W.content,ZR(W,$?.workspacePath)),resolveId:(W)=>v3(W.name)}}function X5($){let Z=$?.directories??Q5($?.workspacePath),Q=$?.workspacePath?S0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:QR,includeFile:(W)=>YQ(W),parseFile:(W)=>e6(W.content,l1(W.filePath,XQ(W.filePath))),resolveId:(W)=>v3(W.name)}}function RG($){let Z=[W5($?.skills),J5($?.rules),X5($?.workflows)];return new L2(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as EG}from"@cline/shared";function WR($,Z){if($.description?.trim())return EG($.description,".");if(Z==="workflow")return;return EG($.instructions,".")}function JR($){return $.disabled!==!0}function NG($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,W])=>({id:Q,record:W})).filter(({record:Q})=>JR(Q.item)).map(({id:Q,record:W})=>({id:Q,name:W.item.name,instructions:W.item.instructions,description:WR(W.item,Z),kind:Z})).sort((Q,W)=>Q.name.localeCompare(W.name))}function Y5($){let Z=new Map;for(let Q of[...NG($,"workflow"),...NG($,"skill")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,W)=>Q.name.localeCompare(W.name))}function CG($,Z){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let W=Q[1];if(!W)return $;let J=W.length+1,X=$.slice(J),Y=Y5(Z).find((j)=>j.name===W);return Y?`${Y.instructions}${X}`:$}var PG={};N(PG,{mergeRulesForSystemPrompt:()=>u8,loadRulesForSystemPromptFromWatcher:()=>d3,listEnabledRulesFromWatcher:()=>wG,isRuleEnabled:()=>BQ,formatRulesForSystemPrompt:()=>c8});function BQ($){return $.disabled!==!0}function c8($){if($.length===0)return"";return`
205
205
 
206
206
  # Rules
207
207
  ${$.map((Q)=>`## ${Q.name}
@@ -209,7 +209,7 @@ ${Q.instructions}`).join(`
209
209
 
210
210
  `)}`}function u8($,Z){let Q=$?.trim(),W=Z?.trim();if(Q&&W)return`${Q}
211
211
 
212
- ${W}`;return Q||W||void 0}function wG($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(BQ).sort((Q,W)=>Q.name.localeCompare(W.name))}function d3($){return c8(wG($))}function GQ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function JR($){if(!$||$.length===0)return;let Z=$.map(GQ).filter((Q)=>Q.length>0);return Z.length>0?new Set(Z):void 0}function XR($,Z,Q){if(!Q)return!0;let W=GQ($),J=GQ(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 j5($,Z){let Q=JR(Z);return[...$.getSnapshot("skill").entries()].map(([J,X])=>{let Y=X.item;return{id:J,name:Y.name.trim(),description:Y.description?.trim(),disabled:Y.disabled===!0,skill:Y}}).filter((J)=>XR(J.id,J.name,Q))}function YR($,Z){return j5($,Z).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,W)=>Q.localeCompare(W))}function jR($,Z,Q){let W=GQ(Z);if(!W)return{error:"Missing skill name."};let J=j5($,Q),X=J.find((B)=>B.id===W);if(X){let{skill:B}=X;if(B.disabled===!0)return{error:`Skill "${B.name}" is configured but disabled.`};return{id:X.id,skill:B}}let Y=W.includes(":")?W.split(":").at(-1)??W:W,j=J.filter(({id:B})=>{if(B===Y)return!0;return B.endsWith(`:${Y}`)}),V=j.filter(({skill:B})=>B.disabled!==!0);if(V.length===1){let{id:B,skill:G}=V[0];return{id:B,skill:G}}if(V.length>1)return{error:`Skill "${Z}" is ambiguous. Use one of: ${V.map(({id:B})=>B).join(", ")}`};if(j.length===1){let{skill:B}=j[0];return{error:`Skill "${B.name}" is configured but disabled.`}}if(j.length>1)return{error:`Skill "${Z}" is ambiguous, and all matches are disabled: ${j.map(({id:B})=>B).join(", ")}`};let H=YR($,Q);return{error:H.length>0?`Skill "${Z}" not found. Available skills: ${H.join(", ")}`:"No skills are currently available."}}function l3($,Z=Promise.resolve(),Q){let W=new Set,J=async(X,Y)=>{await Z;let j=jR($,X,Q);if("error"in j)return j.error;let{id:V,skill:H}=j;if(W.has(V))return`Skill "${H.name}" is already running.`;W.add(V);try{let B=Y?.trim(),G=B?`
212
+ ${W}`;return Q||W||void 0}function wG($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(BQ).sort((Q,W)=>Q.name.localeCompare(W.name))}function d3($){return c8(wG($))}function GQ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function XR($){if(!$||$.length===0)return;let Z=$.map(GQ).filter((Q)=>Q.length>0);return Z.length>0?new Set(Z):void 0}function YR($,Z,Q){if(!Q)return!0;let W=GQ($),J=GQ(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 j5($,Z){let Q=XR(Z);return[...$.getSnapshot("skill").entries()].map(([J,X])=>{let Y=X.item;return{id:J,name:Y.name.trim(),description:Y.description?.trim(),disabled:Y.disabled===!0,skill:Y}}).filter((J)=>YR(J.id,J.name,Q))}function jR($,Z){return j5($,Z).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,W)=>Q.localeCompare(W))}function VR($,Z,Q){let W=GQ(Z);if(!W)return{error:"Missing skill name."};let J=j5($,Q),X=J.find((B)=>B.id===W);if(X){let{skill:B}=X;if(B.disabled===!0)return{error:`Skill "${B.name}" is configured but disabled.`};return{id:X.id,skill:B}}let Y=W.includes(":")?W.split(":").at(-1)??W:W,j=J.filter(({id:B})=>{if(B===Y)return!0;return B.endsWith(`:${Y}`)}),V=j.filter(({skill:B})=>B.disabled!==!0);if(V.length===1){let{id:B,skill:G}=V[0];return{id:B,skill:G}}if(V.length>1)return{error:`Skill "${Z}" is ambiguous. Use one of: ${V.map(({id:B})=>B).join(", ")}`};if(j.length===1){let{skill:B}=j[0];return{error:`Skill "${B.name}" is configured but disabled.`}}if(j.length>1)return{error:`Skill "${Z}" is ambiguous, and all matches are disabled: ${j.map(({id:B})=>B).join(", ")}`};let H=jR($,Q);return{error:H.length>0?`Skill "${Z}" not found. Available skills: ${H.join(", ")}`:"No skills are currently available."}}function l3($,Z=Promise.resolve(),Q){let W=new Set,J=async(X,Y)=>{await Z;let j=VR($,X,Q);if("error"in j)return j.error;let{id:V,skill:H}=j;if(W.has(V))return`Skill "${H.name}" is already running.`;W.add(V);try{let B=Y?.trim(),G=B?`
213
213
  <command-args>${B}</command-args>`:"",K=H.description?.trim()?`Description: ${H.description.trim()}
214
214
 
215
215
  `:"";return`<command-name>${H.name}</command-name>${G}
@@ -217,20 +217,20 @@ ${W}`;return Q||W||void 0}function wG($){return[...$.getSnapshot("rule").values(
217
217
  ${K}${H.instructions}
218
218
  </command-instructions>`}finally{W.delete(V)}};return Object.defineProperty(J,"configuredSkills",{get:()=>j5($,Q).map(({skill:X,...Y})=>Y),enumerable:!0,configurable:!1}),J}function SG($){let Z=$.watcherReady??Promise.resolve();return{name:"cline-user-instructions",manifest:{capabilities:[$.includeRules?"rules":void 0,$.registerSkillsTool?"tools":void 0,$.includeSkills||$.includeWorkflows?"commands":void 0].filter((W)=>Boolean(W))},async setup(W){if(await Z,$.includeRules)W.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>d3($.watcher)});if($.registerSkillsTool)W.registerTool(e$(l3($.watcher,Z,$.allowedSkillNames)));for(let J of Y5($.watcher).filter((X)=>X.kind==="skill"&&$.includeSkills||X.kind==="workflow"&&$.includeWorkflows))W.registerCommand({name:J.name,description:J.description,handler:(X)=>{let Y=X.trim();return Y?`${J.instructions}
219
219
 
220
- ${Y}`:J.instructions}})}}}class bG{watcher;ready;stopped=!1;constructor($){this.watcher=RG($)}start(){if(!this.ready)this.stopped=!1,this.ready=this.watcher.start();return this.ready}stop(){if(this.stopped)return;this.stopped=!0,this.watcher.stop(),this.ready=void 0}async refreshType($){await this.start(),await this.watcher.refreshType($)}listRecords($){return[...this.watcher.getSnapshot($).entries()].map(([Z,Q])=>({type:$,id:Z,filePath:Q.filePath,item:Q.item}))}listRuntimeCommands(){return Y5(this.watcher)}resolveRuntimeSlashCommand($){return CG($,this.watcher)}hasConfiguredSkills($){return j5(this.watcher,$).some((Z)=>!Z.disabled)}createSkillsExecutor($){return l3(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return SG({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function C$($){return new bG($)}import{readFile as VR,writeFile as HR}from"node:fs/promises";import kG from"yaml";function BR($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,W,J]=Q,X=kG.parse(W);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:J,hadFrontmatter:!0}}function hG($,Z){return`---
220
+ ${Y}`:J.instructions}})}}}class bG{watcher;ready;stopped=!1;constructor($){this.watcher=RG($)}start(){if(!this.ready)this.stopped=!1,this.ready=this.watcher.start();return this.ready}stop(){if(this.stopped)return;this.stopped=!0,this.watcher.stop(),this.ready=void 0}async refreshType($){await this.start(),await this.watcher.refreshType($)}listRecords($){return[...this.watcher.getSnapshot($).entries()].map(([Z,Q])=>({type:$,id:Z,filePath:Q.filePath,item:Q.item}))}listRuntimeCommands(){return Y5(this.watcher)}resolveRuntimeSlashCommand($){return CG($,this.watcher)}hasConfiguredSkills($){return j5(this.watcher,$).some((Z)=>!Z.disabled)}createSkillsExecutor($){return l3(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return SG({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function C$($){return new bG($)}import{readFile as HR,writeFile as BR}from"node:fs/promises";import kG from"yaml";function GR($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,W,J]=Q,X=kG.parse(W);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:J,hadFrontmatter:!0}}function hG($,Z){return`---
221
221
  ${kG.stringify($).trimEnd()}
222
222
  ---
223
- ${Z}`}function GR($,Z){let{data:Q,body:W,hadFrontmatter:J}=BR($);if(!J&&Z)return $;if(Z){if(delete Q.disabled,Q.enabled===!1)delete Q.enabled;if(Object.keys(Q).length===0)return W;return hG(Q,W)}return Q.disabled=!0,hG(Q,W)}async function IG({filePath:$,enabled:Z}){let Q=await VR($,"utf8"),W=GR(Q,Z);return await HR($,W),{filePath:$,enabled:Z,disabled:!Z}}var GK={};N(GK,{updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>l8,updateMcpServerOAuthStateAsync:()=>H5,updateMcpServerOAuthState:()=>O2,setMcpServerDisabled:()=>z2,resolvePluginMcpServerRegistrations:()=>LQ,resolveMcpServerRegistrations:()=>p0,resolveDefaultMcpSettingsPath:()=>$0,registerMcpServersFromSettingsFile:()=>q2,normalizePluginMcpServerRegistration:()=>e3,loadMcpSettingsFile:()=>_2,listMcpServerOAuthStatuses:()=>B5,hasMcpSettingsFile:()=>p1,getMcpServerOAuthState:()=>T2,createMcpTools:()=>n8,createDisabledMcpToolPolicy:()=>G5,createDisabledMcpToolPolicies:()=>zQ,createDefaultMcpServerClientFactory:()=>r8,authorizeMcpServerOAuth:()=>UQ,McpSettingsUpdateSkippedError:()=>d8,McpSettingsMutatorPurityError:()=>w$,McpSettingsLockTimeoutError:()=>P$,InMemoryMcpManager:()=>M2});import{spawn as sR}from"node:child_process";import{StringDecoder as XK}from"node:string_decoder";import{UnauthorizedError as ZK}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as oR}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as vR}from"node:crypto";import{UnauthorizedError as cR}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as uR}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as dR}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as lR}from"@modelcontextprotocol/sdk/client/streamableHttp.js";FQ();var pR="/mcp/oauth/callback",rR=[1456,1457,1458],iR=300000;function nR($){if($ instanceof Error){let Z=$.message.trim();if(Z.length>0)return Z}return String($)}function aR($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function fQ($){let Z={};try{Z=T2($.serverName,{filePath:$.settingsPath})??{}}catch{Z={}}let Q,W,J=async(Y)=>{let j=p8(Y(Z))??{};try{Z=O2($.serverName,()=>j,{filePath:$.settingsPath})}catch{Z=j}};return{provider:{get redirectUrl(){return Z.redirectUrl??$.redirectUrl},get clientMetadata(){return aR(Z.redirectUrl??$.redirectUrl)},state:()=>{return W=vR(),W},clientInformation:()=>Z.clientInformation,saveClientInformation:async(Y)=>{await J((j)=>({...j,clientInformation:Y,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>Z.tokens,saveTokens:async(Y)=>{let j=Date.now();await J((V)=>({...V,tokens:Y,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:j}))},redirectToAuthorization:async(Y)=>{Q=Y.toString(),await $.onAuthorizationUrl?.(Q)},saveCodeVerifier:async(Y)=>{await J((j)=>({...j,codeVerifier:Y,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!Z.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return Z.codeVerifier},invalidateCredentials:async(Y)=>{await J((j)=>{if(Y==="all")return{lastError:j.lastError,redirectUrl:j.redirectUrl};return{...j,...Y==="client"?{clientInformation:void 0}:{},...Y==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...Y==="verifier"?{codeVerifier:void 0}:{},...Y==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(Y)=>{await J((j)=>({...j,discoveryState:Y}))},discoveryState:()=>Z.discoveryState},getLastAuthorizationUrl:()=>Q,getLastOAuthState:()=>W,resetInteractiveState:async()=>{await J((Y)=>({...Y,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(Y)=>{await J((j)=>({...j,lastError:Y}))},clearError:async()=>{await J((Y)=>({...Y,lastError:void 0}))}}}function AQ($){let Z=$.registration.transport;if(Z.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let Q=Z.headers?{headers:Z.headers}:void 0;if(Z.type==="sse")return new dR(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch});return new lR(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch})}function $K($){return new uR({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function UQ($){let Z=$.serverName.trim();if(!Z)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Q}=await Promise.resolve().then(() => (FQ(),eG)),W=Q({filePath:$.filePath}).find((V)=>V.name===Z);if(!W)throw Error(`MCP server "${Z}" is not configured.`);if(W.disabled)throw Error(`MCP server "${Z}" is disabled. Enable it before running OAuth.`);if(W.transport.type==="stdio")throw Error(`MCP server "${Z}" uses stdio transport and does not support OAuth browser flow.`);let J=await W1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:rR,callbackPath:$.callbackPath??pR,timeoutMs:$.timeoutMs??iR,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!J.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let X=fQ({settingsPath:$.filePath,serverName:Z,redirectUrl:J.callbackUrl,onAuthorizationUrl:async(V)=>{await $.openUrl?.(V)}});await X.resetInteractiveState();let Y=$K($),j;try{let V=AQ({registration:W,oauthProvider:X.provider,fetch:$.fetch});try{return await Y.connect(V),await Y.listTools(),await X.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" is already authorized.`}}catch(H){if(!(H instanceof cR))throw H;if(!X.getLastAuthorizationUrl())throw Error(`MCP server "${Z}" did not provide an authorization URL.`);let G=await J.waitForCallback();if(!G)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(G.error)throw Error(`OAuth authorization failed: ${G.error}`);if(!G.code)throw Error("OAuth callback did not include an authorization code.");let K=X.getLastOAuthState();if(!K)throw Error(`MCP server "${Z}" did not start an OAuth stateful authorization flow.`);if(G.state!==K)throw Error("OAuth authorization failed: state mismatch.");await V.finishAuth(G.code),j=$K($);let F=AQ({registration:W,oauthProvider:X.provider,fetch:$.fetch});return await j.connect(F),await j.listTools(),await X.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" OAuth authorization completed.`}}}catch(V){let H=nR(V);throw await X.markError(H),Error(H)}finally{await Y.close().catch(()=>{return}),await j?.close().catch(()=>{return}),J.close()}}var tR="2024-11-05",eR=5000,$E=1500,QK="http://127.0.0.1:1456/mcp/oauth/callback";function DQ($){return $ instanceof Error?$.message:String($)}function WK($){let Z=Buffer.from(JSON.stringify($),"utf8"),Q=Buffer.from(`Content-Length: ${Z.byteLength}\r
223
+ ${Z}`}function KR($,Z){let{data:Q,body:W,hadFrontmatter:J}=GR($);if(!J&&Z)return $;if(Z){if(delete Q.disabled,Q.enabled===!1)delete Q.enabled;if(Object.keys(Q).length===0)return W;return hG(Q,W)}return Q.disabled=!0,hG(Q,W)}async function IG({filePath:$,enabled:Z}){let Q=await HR($,"utf8"),W=KR(Q,Z);return await BR($,W),{filePath:$,enabled:Z,disabled:!Z}}var GK={};N(GK,{updateMcpSettingsFileSync:()=>j1,updateMcpSettingsFile:()=>l8,updateMcpServerOAuthStateAsync:()=>H5,updateMcpServerOAuthState:()=>O2,setMcpServerDisabled:()=>z2,resolvePluginMcpServerRegistrations:()=>LQ,resolveMcpServerRegistrations:()=>p0,resolveDefaultMcpSettingsPath:()=>$0,registerMcpServersFromSettingsFile:()=>q2,normalizePluginMcpServerRegistration:()=>e3,loadMcpSettingsFile:()=>_2,listMcpServerOAuthStatuses:()=>B5,hasMcpSettingsFile:()=>p1,getMcpServerOAuthState:()=>T2,createMcpTools:()=>n8,createDisabledMcpToolPolicy:()=>G5,createDisabledMcpToolPolicies:()=>zQ,createDefaultMcpServerClientFactory:()=>r8,authorizeMcpServerOAuth:()=>UQ,McpSettingsUpdateSkippedError:()=>d8,McpSettingsMutatorPurityError:()=>w$,McpSettingsLockTimeoutError:()=>P$,InMemoryMcpManager:()=>M2});import{spawn as oR}from"node:child_process";import{StringDecoder as XK}from"node:string_decoder";import{UnauthorizedError as ZK}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as tR}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as cR}from"node:crypto";import{UnauthorizedError as uR}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as dR}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as lR}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as pR}from"@modelcontextprotocol/sdk/client/streamableHttp.js";FQ();var rR="/mcp/oauth/callback",iR=[1456,1457,1458],nR=300000;function aR($){if($ instanceof Error){let Z=$.message.trim();if(Z.length>0)return Z}return String($)}function sR($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function fQ($){let Z={};try{Z=T2($.serverName,{filePath:$.settingsPath})??{}}catch{Z={}}let Q,W,J=async(Y)=>{let j=p8(Y(Z))??{};try{Z=O2($.serverName,()=>j,{filePath:$.settingsPath})}catch{Z=j}};return{provider:{get redirectUrl(){return Z.redirectUrl??$.redirectUrl},get clientMetadata(){return sR(Z.redirectUrl??$.redirectUrl)},state:()=>{return W=cR(),W},clientInformation:()=>Z.clientInformation,saveClientInformation:async(Y)=>{await J((j)=>({...j,clientInformation:Y,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>Z.tokens,saveTokens:async(Y)=>{let j=Date.now();await J((V)=>({...V,tokens:Y,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:j}))},redirectToAuthorization:async(Y)=>{Q=Y.toString(),await $.onAuthorizationUrl?.(Q)},saveCodeVerifier:async(Y)=>{await J((j)=>({...j,codeVerifier:Y,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!Z.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return Z.codeVerifier},invalidateCredentials:async(Y)=>{await J((j)=>{if(Y==="all")return{lastError:j.lastError,redirectUrl:j.redirectUrl};return{...j,...Y==="client"?{clientInformation:void 0}:{},...Y==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...Y==="verifier"?{codeVerifier:void 0}:{},...Y==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(Y)=>{await J((j)=>({...j,discoveryState:Y}))},discoveryState:()=>Z.discoveryState},getLastAuthorizationUrl:()=>Q,getLastOAuthState:()=>W,resetInteractiveState:async()=>{await J((Y)=>({...Y,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(Y)=>{await J((j)=>({...j,lastError:Y}))},clearError:async()=>{await J((Y)=>({...Y,lastError:void 0}))}}}function AQ($){let Z=$.registration.transport;if(Z.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let Q=Z.headers?{headers:Z.headers}:void 0;if(Z.type==="sse")return new lR(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch});return new pR(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch})}function $K($){return new dR({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function UQ($){let Z=$.serverName.trim();if(!Z)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Q}=await Promise.resolve().then(() => (FQ(),eG)),W=Q({filePath:$.filePath}).find((V)=>V.name===Z);if(!W)throw Error(`MCP server "${Z}" is not configured.`);if(W.disabled)throw Error(`MCP server "${Z}" is disabled. Enable it before running OAuth.`);if(W.transport.type==="stdio")throw Error(`MCP server "${Z}" uses stdio transport and does not support OAuth browser flow.`);let J=await W1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:iR,callbackPath:$.callbackPath??rR,timeoutMs:$.timeoutMs??nR,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!J.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let X=fQ({settingsPath:$.filePath,serverName:Z,redirectUrl:J.callbackUrl,onAuthorizationUrl:async(V)=>{await $.openUrl?.(V)}});await X.resetInteractiveState();let Y=$K($),j;try{let V=AQ({registration:W,oauthProvider:X.provider,fetch:$.fetch});try{return await Y.connect(V),await Y.listTools(),await X.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" is already authorized.`}}catch(H){if(!(H instanceof uR))throw H;if(!X.getLastAuthorizationUrl())throw Error(`MCP server "${Z}" did not provide an authorization URL.`);let G=await J.waitForCallback();if(!G)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(G.error)throw Error(`OAuth authorization failed: ${G.error}`);if(!G.code)throw Error("OAuth callback did not include an authorization code.");let K=X.getLastOAuthState();if(!K)throw Error(`MCP server "${Z}" did not start an OAuth stateful authorization flow.`);if(G.state!==K)throw Error("OAuth authorization failed: state mismatch.");await V.finishAuth(G.code),j=$K($);let F=AQ({registration:W,oauthProvider:X.provider,fetch:$.fetch});return await j.connect(F),await j.listTools(),await X.clearError(),{serverName:Z,authorized:!0,message:`MCP server "${Z}" OAuth authorization completed.`}}}catch(V){let H=aR(V);throw await X.markError(H),Error(H)}finally{await Y.close().catch(()=>{return}),await j?.close().catch(()=>{return}),J.close()}}var eR="2024-11-05",$E=5000,ZE=1500,QK="http://127.0.0.1:1456/mcp/oauth/callback";function DQ($){return $ instanceof Error?$.message:String($)}function WK($){let Z=Buffer.from(JSON.stringify($),"utf8"),Q=Buffer.from(`Content-Length: ${Z.byteLength}\r
224
224
  \r
225
225
  `,"utf8");return Buffer.concat([Q,Z])}function JK($){return Buffer.from(`${JSON.stringify($)}
226
226
  `,"utf8")}class o3{buffer="";decoder=new XK("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`\r
227
227
  \r
228
228
  `);if(Q<0)break;let J=this.buffer.slice(0,Q).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!J)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let X=Number.parseInt(J[1],10),Y=Q+4,j=Y+X;if(this.buffer.length<j)break;Z.push(this.buffer.slice(Y,j)),this.buffer=this.buffer.slice(j)}return Z}}class t3{buffer="";decoder=new XK("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`
229
- `);if(Q<0)break;let W=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),W.length>0)Z.push(W)}return Z}}class YK{registration;process;nextRequestId=1;pending=new Map;framedParser=new o3;newlineParser=new t3;stderrBuffer="";connected=!1;protocolMode="newline";constructor($){this.registration=$}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=["newline","framed"],Z;for(let Q of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Q);try{await this.request("initialize",{protocolVersion:tR,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},$E),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Q;return}catch(W){Z=W instanceof Error?W:Error(String(W))}}throw Z??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((Z)=>typeof Z?.name==="string"&&typeof Z.inputSchema==="object"&&Z.inputSchema!==null).map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let Z=this.registration.transport;if(Z.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${Z.type}`);this.framedParser=new o3,this.newlineParser=new t3,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},W=sR(Z.command,Z.args??[],{cwd:Z.cwd,env:{...process.env,...Z.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=W,W.stdout.on("data",(J)=>this.handleStdout(J)),W.stderr.on("data",(J)=>{if(this.process!==W)return;if(this.stderrBuffer+=J.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),W.once("error",(J)=>{if(this.process!==W)return;this.failAllPending(Error(`MCP process error: ${DQ(J)}`))}),W.once("exit",(J,X)=>{if(this.process!==W)return;this.connected=!1,this.process=void 0;let Y=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${J??"null"}, signal=${X??"null"}).${Y}`))})}handleStdout($){try{let Z=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of Z){let W=JSON.parse(Q);if(typeof W.id!=="number")continue;let J=this.pending.get(W.id);if(!J)continue;if(this.pending.delete(W.id),clearTimeout(J.timeout),W.error){let X=W.error.message||`MCP request failed with code ${W.error.code??"unknown"}`;J.reject(Error(X));continue}J.resolve(W.result)}}catch(Z){this.handleProtocolFailure(Z)}}handleProtocolFailure($){let Z=this.process;if(!Z)return;this.connected=!1,this.process=void 0;let Q=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${DQ($)}.${Q}`)),Z.kill()}async request($,Z,Q=eR){let W=this.process;if(!W?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let J=this.nextRequestId++,X={jsonrpc:"2.0",id:J,method:$,...Z?{params:Z}:{}},Y=new Promise((j,V)=>{let H=setTimeout(()=>{this.pending.delete(J),V(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Q);this.pending.set(J,{resolve:j,reject:V,timeout:H})});try{W.stdin.write(this.protocolMode==="framed"?WK(X):JK(X))}catch(j){let V=this.pending.get(J);if(V)clearTimeout(V.timeout),this.pending.delete(J);throw j}return Y}notify($,Z){let Q=this.process;if(!Q?.stdin.writable)return;let W={jsonrpc:"2.0",method:$,...Z?{params:Z}:{}};Q.stdin.write(this.protocolMode==="framed"?WK(W):JK(W))}failAllPending($){for(let[Z,Q]of this.pending)clearTimeout(Q.timeout),this.pending.delete(Z),Q.reject($)}}class jK{registration;options;client;authContext;constructor($,Z){this.registration=$;this.options=Z}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=fQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??QK});this.authContext=$;try{let Z=new oR({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Q=AQ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await Z.connect(Q),await $.clearError(),this.client=Z}catch(Z){let Q=Z instanceof ZK?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):DQ(Z);throw await $.markError(Q),Error(Q)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((Q)=>({name:Q.name,description:Q.description,inputSchema:Q.inputSchema&&typeof Q.inputSchema==="object"&&!Array.isArray(Q.inputSchema)?Q.inputSchema:{}}))}catch(Z){return await this.handleOperationError(Z)}}async callTool($){let Z=await this.ensureConnectedClient();try{return await Z.callTool({name:$.name,arguments:$.arguments??{}})}catch(Q){return await this.handleOperationError(Q)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let Z=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${Z} Run authorizeMcpServerOAuth for this server.`;return`${Z} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let Z=this.authContext??fQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??QK}),Q=$ instanceof ZK?this.formatUnauthorizedMessage(Z.getLastAuthorizationUrl()):DQ($);throw await Z.markError(Q),Error(Q)}}function r8($={}){return(Z)=>Z.transport.type==="stdio"?new YK(Z):new jK(Z,$)}FQ();function r0(){return Date.now()}function ZE($){return $.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}class M2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let Z=this.servers.get($.name);if(!Z){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:r0()});return}let Q=JSON.stringify(Z.registration.transport)!==JSON.stringify($.transport);if(Z.registration={...$},Z.updatedAt=r0(),Q)await this.disconnectState(Z),Z.client=void 0,Z.toolCache=void 0,Z.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.connectState(Z)})}async disconnectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z)})}async setServerDisabled($,Z){await this.runExclusive($,async()=>{let Q=this.requireServer($);if(Q.registration={...Q.registration,disabled:Z},Q.updatedAt=r0(),Z)await this.disconnectState(Q)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,Z)=>$.name.localeCompare(Z.name))}async listTools($){let Z=this.requireServer($),Q=Z.toolCacheUpdatedAt??0;if(Z.toolCache&&r0()-Q<=this.toolsCacheTtlMs)return Z.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let Z=this.requireServer($),W=await(await this.ensureConnectedClient(Z)).listTools(),J=ZE(W);return Z.toolCache=J,Z.toolCacheUpdatedAt=r0(),Z.updatedAt=r0(),J})}async callTool($){return this.runExclusive($.serverName,async()=>{let Z=this.requireServer($.serverName),Q=await this.ensureConnectedClient(Z);return Z.updatedAt=r0(),Q.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let Z of $)await this.unregisterServer(Z)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=r0();try{let Z=$.client??await this.clientFactory($.registration);await Z.connect(),$.client=Z,$.status="connected",$.lastError=void 0,$.updatedAt=r0()}catch(Z){throw $.status="disconnected",$.lastError=Z instanceof Error?Z.message:String(Z),$.updatedAt=r0(),Z}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=r0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=r0()}}requireServer($){let Z=this.servers.get($);if(!Z)throw Error(`Unknown MCP server: ${$}`);return Z}async runExclusive($,Z){let Q=this.operationLocks.get($)??Promise.resolve(),W,J=new Promise((Y)=>{W=Y}),X=Q.catch(()=>{return}).then(()=>J);this.operationLocks.set($,X),await Q.catch(()=>{return});try{return await Z()}finally{if(W?.(),this.operationLocks.get($)===X)this.operationLocks.delete($)}}}function i8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function VK($){return i8($)&&Object.values($).every((Z)=>typeof Z==="string")}function QE($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function WE($){if(!i8($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function JE($){let Z=$.env?Object.entries($.env):[];if(Z.length===0)return{ok:!0};let Q={};for(let[W,J]of Z){if(typeof J==="string"){Q[W]=J;continue}let X=J.fromEnv?.trim()||W,Y=process.env[X];if(typeof Y==="string"&&Y.length>0){Q[W]=Y;continue}if(typeof J.value==="string"){Q[W]=J.value;continue}if(J.required===!0)return{ok:!1,reason:`required environment variable "${X}" is not set`}}return{ok:!0,env:Object.keys(Q).length>0?Q:void 0}}function e3($){if(!i8($))return{name:"",loadError:"invalid MCP server registration"};let Z=typeof $.name==="string"?$.name.trim():"";if(!Z)return{name:Z,loadError:"empty MCP server name"};let Q=$.env,W=Q===void 0?void 0:Q;if(W!==void 0){if(!i8(W))return{name:Z,loadError:"invalid env"};for(let[V,H]of Object.entries(W))if(typeof H!=="string"&&!WE(H))return{name:Z,loadError:`invalid env "${V}"`}}let J=$.transport;if(!i8(J))return{name:Z,loadError:"invalid MCP transport"};let X=J.type;if(X!=="stdio"&&X!=="sse"&&X!=="streamableHttp")return{name:Z,loadError:"invalid MCP transport type"};if(X!=="stdio"&&W!==void 0)return{name:Z,loadError:"top-level env is only supported for stdio MCP transports"};let Y=i8($.metadata)?$.metadata:void 0;if(X==="stdio"){let V=J.command;if(typeof V!=="string"||!V.trim())return{name:Z,loadError:"stdio MCP transport requires command"};let H=J.args;if(H!==void 0&&!QE(H))return{name:Z,loadError:"stdio MCP transport args must be strings"};let B=J.cwd;if(B!==void 0&&typeof B!=="string")return{name:Z,loadError:"stdio MCP transport cwd must be a string"};let G=J.env;if(G!==void 0&&!VK(G))return{name:Z,loadError:"stdio MCP transport env must be strings"};let K=JE({name:Z,transport:{type:"stdio",command:V,args:H,cwd:B,env:G},env:W,metadata:Y});if(!K.ok)return{name:Z,loadError:K.reason};let F=G||K.env?{...G??{},...K.env??{}}:void 0;return{name:Z,registration:{name:Z,transport:{type:"stdio",command:V,args:H,cwd:B,env:F},metadata:Y}}}if(typeof J.url!=="string"||!J.url.trim())return{name:Z,loadError:`${X} MCP transport requires url`};let j=J.headers;if(j!==void 0&&!VK(j))return{name:Z,loadError:`${X} MCP transport headers must be strings`};return{name:Z,registration:{name:Z,transport:X==="sse"?{type:"sse",url:J.url,headers:j}:{type:"streamableHttp",url:J.url,headers:j},metadata:Y}}}function LQ($){let Z=new Map;return $.map(({server:Q,owner:W,ownerLabel:J})=>{let X=e3(Q);if(!X.registration)return{owner:W,name:X.name,loadError:X.loadError??"invalid MCP server registration"};let Y=Z.get(X.registration.name);if(Z.has(X.registration.name)){let j=Y?` already registered by ${Y}`:"";return{owner:W,name:X.registration.name,loadError:`duplicate MCP server name "${X.registration.name}"${j}`}}return Z.set(X.registration.name,J),{owner:W,name:X.registration.name,registration:X.registration}})}import{createHash as XE}from"node:crypto";var HK=64,YE=/[^a-zA-Z0-9_-]+/g,BK=8,jE=1,VE="mcp_tool";function HE($){return XE("sha1").update($).digest("hex").slice(0,BK)}function BE($){return $.replace(YE,"_")}var _Q=({serverName:$,toolName:Z})=>{let Q=`${$}__${Z}`,W=BE(Q);if(W===Q&&Q.length<=HK)return Q;let J=HE(Q),X=HK-jE-BK;return`${W.slice(0,X)||VE}_${J}`};function G5($){return{[($.nameTransform??_Q)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function zQ($){let Z={};for(let Q of $.toolNames)Object.assign(Z,G5({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return Z}import{createTool as GE}from"@cline/shared";function KE($,Z){let Q=Z.description?.trim();if(Q)return Q;return`Execute MCP tool "${Z.name}" from server "${$}".`}async function n8($){let Z=await $.provider.listTools($.serverName),Q=$.nameTransform??_Q;return Z.map((W)=>{let J=Q({serverName:$.serverName,toolName:W.name});return GE({name:J,description:KE($.serverName,W),inputSchema:W.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(X,Y)=>$.provider.callTool({serverName:$.serverName,toolName:W.name,arguments:X&&typeof X==="object"&&!Array.isArray(X)?X:void 0,context:Y})})})}Y1();var AK={};N(AK,{listPluginToolsWithDiagnostics:()=>TQ,listPluginTools:()=>K5});import{stat as FE}from"node:fs/promises";import{isAbsolute as AE,relative as fE,resolve as KK}from"node:path";Y1();function UE($,Z){let Q=fE(KK($),KK(Z));return Q===""||!Q.startsWith("..")&&!AE(Q)}var DE=32,a8=new Map;function LE($,Z){if(!a8.has($)&&a8.size>=DE){let Q=a8.keys().next().value;if(Q)a8.delete(Q)}a8.set($,Z)}async function _E($){let Z=await Promise.all($.pluginPaths.map(async(Q)=>{try{let W=await FE(Q);return`${Q}:${W.mtimeMs}:${W.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:Z})}function FK($,Z){return $.map((Q)=>({...Q,enabled:!Z.has(Q.name)}))}function zE($){return $.sort((Z,Q)=>{let W=Z.name.localeCompare(Q.name);if(W!==0)return W;return Z.path.localeCompare(Q.path)})}async function TE($,Z){if(!$.setup)return{tools:[]};let Q=[],W={registerTool:(J)=>Q.push(J),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(J)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(W,{workspaceInfo:Z}),{tools:Q}}async function TQ($){let Z=c1({workspacePath:$.workspacePath,cwd:$.cwd}),Q=F1($.disabledToolNames);if(Z.length===0)return{tools:[],failures:[],warnings:[]};let W=await _E({pluginPaths:Z,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),J=a8.get(W);if(J)return{tools:FK(J.tools,Q),failures:J.failures,warnings:J.warnings};let X=[],Y=[],j=[],V;try{V=await E8({pluginPaths:Z,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),Y=[...V.failures],j=[...V.warnings];for(let B of V.extensions??[]){let G=B.__clinePluginPath;if(!G)continue;let K=UE($.workspacePath,G)?"workspace-plugin":"global-plugin",F;try{F=await TE(B,{rootPath:$.workspacePath})}catch(A){Y.push({pluginPath:G,pluginName:B.name,phase:"setup",message:A instanceof Error?A.message:String(A),stack:A instanceof Error?A.stack:void 0});continue}for(let A of F.tools)X.push({name:A.name,pluginName:B.name,path:G,source:K,description:A.description?.trim()||void 0})}}catch(B){Y=Z.map((G)=>({pluginPath:G,phase:"load",message:B instanceof Error?B.message:String(B),stack:B instanceof Error?B.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let H=zE(X);return LE(W,{tools:H,failures:Y,warnings:j}),{tools:FK(H,Q),failures:Y,warnings:j}}async function K5($){return(await TQ($)).tools}function f5($,Z){if(!Z)return"global";let Q=_K(Z,$);return!Q.startsWith("..")&&!LK(Q)?"workspace":"global"}function RE($,Z){return f5($,Z)==="workspace"?"workspace-plugin":"global-plugin"}function EE($,Z){let Q=_K(UK($),UK(Z));return Q===""||!Q.startsWith("..")&&!LK(Q)}function NE($){try{let Z=JSON.parse(OE($,"utf8"));return typeof Z.name==="string"&&Z.name.trim()?Z.name.trim():void 0}catch{return}}function CE($){let Z=fK($);while(!0){let Q=ME(Z,"package.json");if(A5(Q)){let J=NE(Q);if(J)return J;break}let W=fK(Z);if(W===Z)break;Z=W}return $J($,qE($))}function wE($){let Z=[];for(let Q of c1({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let W of u1([Q]))Z.push({directory:W,pluginName:CE(Q),pluginPath:Q,source:$.workspaceRoot?RE(Q,$.workspaceRoot):"global-plugin"});return Z.sort((Q,W)=>W.directory.length-Q.directory.length)}function PE($,Z){return Z.find((Q)=>EE(Q.directory,$))}function F5($){return[...$].sort((Z,Q)=>{let W=(J)=>{switch(J){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(Z.source!==Q.source)return W(Z.source)-W(Q.source);return Z.name.localeCompare(Q.name)})}function zK($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function TK($,Z){return $.cwd?.trim()||Z||process.cwd()}async function DK($,Z){if($.userInstructionService)return await Z($.userInstructionService);let Q=zK($),W=TK($,Q),J=C$({skills:{workspacePath:Q||void 0,includePluginSkills:!0,cwd:W},rules:{workspacePath:Q||void 0},workflows:{workspacePath:Q||void 0}});try{return await J.start(),await Z(J)}finally{J.stop()}}function SE($,Z){if(!$)return;let Q=$.listRecords("skill");if(Z.id){let W=Q.find((J)=>J.id===Z.id);if(W)return W}for(let W of Q)if(W.filePath===Z.path||W.item.name===Z.name||W.id===Z.name)return W;return}class S${async list($={}){return await DK($,async(Z)=>{let Q=zK($),W=wE({workspaceRoot:Q,cwd:TK($,Q)}),J=[],X=[],Y=[],j=[],V=[];if(Z){for(let B of Z.listRecords("workflow")){let G=B.item;J.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"workflow",source:f5(B.filePath,Q),description:G.instructions,toggleable:!1})}for(let B of Z.listRecords("rule")){let G=B.item;X.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"rule",source:f5(B.filePath,Q),description:G.instructions,toggleable:!1})}for(let B of Z.listRecords("skill")){let G=B.item,K=PE(B.filePath,W);Y.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"skill",source:K?.source??f5(B.filePath,Q),description:G.description,pluginName:K?.pluginName,pluginPath:K?.pluginPath,toggleable:!0})}}if(Q)try{for(let B of await K5({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))j.push({id:`${B.pluginName}:${B.name}:${B.path}`,name:B.name,path:B.path,enabled:B.enabled,kind:"tool",source:B.source,description:B.description,toggleable:!0})}catch{}let H=$0();if(p1({filePath:H}))try{for(let B of p0({filePath:H}))V.push({id:B.name,name:B.name,path:H,enabled:B.disabled!==!0,kind:"mcp",source:f5(H,Q),description:B.transport.type,toggleable:!0})}catch{}return{workflows:F5(J.filter((B)=>A5(B.path))),rules:F5(X.filter((B)=>A5(B.path))),skills:F5(Y.filter((B)=>A5(B.path))),tools:F5(j),mcp:F5(V.filter((B)=>A5(B.path)))}})}async toggle($){if($.type==="skills")return await DK($,async(Z)=>{let Q=SE(Z,$),W=Q?.filePath;if(!W)throw Error(`Unable to resolve skill setting '${$.id??$.name??$J($.path??"")}'.`);let J=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,X=$.enabled??(J!==void 0?!J:void 0);if(X===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??$J($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await IG({filePath:W,enabled:X}),await Z?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:Z}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)JZ($.name);else ZH($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let Z=$.name?.trim()||$.id?.trim();if(!Z)throw Error("MCP server settings toggle requires a server name.");let Q=$.path?.trim()||$0(),W=$.enabled;if(W===void 0){let J=p0({filePath:Q}).find((X)=>X.name===Z);if(!J)throw Error(`Unknown MCP server: ${Z}`);W=J.disabled===!0}return z2({filePath:Q,name:Z,disabled:!W}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function R2(){return new S$}function qK($){return{async list(Z){let Q=$;if(Q.listSettings)return await Q.listSettings(Z);return await R2().list(Z)},async toggle(Z){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(Z);return await R2().toggle(Z)}}}function MK($){function Z(){let Q=$.pendingPrompts;if(!Q)throw Error("Pending prompt service is not available.");return Q}return{list(Q){return Z().list(Q)},update(Q){return Z().update(Q)},delete(Q){return Z().delete(Q)}}}var RK={};N(RK,{splitCoreSessionConfig:()=>U5,isSessionNotFoundError:()=>i1,SessionNotFoundError:()=>r1,SESSION_NOT_FOUND_ERROR_CODE:()=>E2});var E2="session_not_found";class r1 extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function i1($){return $ instanceof r1||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function U5($){let{hooks:Z,logger:Q,telemetry:W,extensionContext:J,extraTools:X,extensions:Y,onTeamEvent:j,onConsecutiveMistakeLimitReached:V,checkpoint:H,compaction:B,...G}=$,K={};if(Z)K.hooks=Z;if(Q)K.logger=Q;if(W)K.telemetry=W;if(J)K.extensionContext=J;if(X)K.extraTools=X;if(Y)K.extensions=Y;if(j)K.onTeamEvent=j;if(V)K.onConsecutiveMistakeLimitReached=V;if(H?.createCheckpoint)K.checkpoint=H;if(B?.compact)K.compaction=B;let F=Object.keys(K).length>0?K:void 0;return{config:{...G,...H?{checkpoint:{enabled:H.enabled}}:{},...B?{compaction:{enabled:B.enabled,strategy:B.strategy,thresholdRatio:B.thresholdRatio,reserveTokens:B.reserveTokens,preserveRecentTokens:B.preserveRecentTokens,maxInputTokens:B.maxInputTokens,summarizer:B.summarizer}}:{}},...F?{localRuntime:F}:{}}}function EK($){let Z=$.config;return"providerId"in Z?{...$,config:{...Z,...bE($.localRuntime)},localRuntime:$.localRuntime}:$}function ZJ($,Z={}){let Q=U5($.config),W=q0(Z.defaultCapabilities,$.capabilities),J=yE(Q.localRuntime,$.localRuntime),X=Z.withExtensionContext?.(J?.extensionContext);if(X)J={...J??{},extensionContext:X};return{...$,...Q,...J?{localRuntime:J}:{},...W?{capabilities:W}:{}}}function bE($){if(!$)return{};let{modelCatalogDefaults:Z,userInstructionService:Q,configExtensions:W,onTeamRestored:J,...X}=$;return X}function yE(...$){let Z={};for(let Q of $)if(Q)Object.assign(Z,Q);return Object.keys(Z).length>0?Z:void 0}L0();function NK($){let Z=$.input.config.telemetry??$.telemetry;if(!Z)return;Z.capture({event:g.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??z0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function D5($){return!!$&&typeof $==="object"&&!Array.isArray($)}function QJ($){let Z=$?.trim();return Z?Z:void 0}function hE($,Z){let Q=$?.trim();if(!Q)return Z;let W=Date.parse(Q);if(!Number.isFinite(W))return Z;return new Date(W).toISOString()}function CK($,Z){return new Date(new Date($).getTime()+Math.max(0,Math.floor(Z))*1000).toISOString()}function wK($,Z){return new Date(new Date($).getTime()-Math.max(0,Math.floor(Z))*1000).toISOString()}function kE($,Z){if(!$)return Z;return new Date($).getTime()>=new Date(Z).getTime()?$:Z}function IE($,Z){let Q=$.eventId.trim(),W=$.eventType.trim(),J=$.source.trim(),X=QJ($.subject),Y=QJ($.dedupeKey)??`${W}:${J}:${X??Q}`;return{eventId:Q,eventType:W,source:J,subject:X,occurredAt:hE($.occurredAt,Z),workspaceRoot:QJ($.workspaceRoot),payload:D5($.payload)?$.payload:void 0,attributes:D5($.attributes)?$.attributes:void 0,dedupeKey:Y}}function WJ($,Z){if(!Z)return;let Q=Z.split("."),W=$;for(let J of Q){if(!D5(W))return;W=W[J]}return W}function xE($,Z){if($.attributes&&Object.hasOwn($.attributes,Z))return $.attributes[Z];if($.payload&&Object.hasOwn($.payload,Z))return $.payload[Z];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},W=WJ(Q,Z);if(W!==void 0)return W;if($.attributes){let J=WJ($.attributes,Z);if(J!==void 0)return J}if($.payload)return WJ($.payload,Z);return}function OQ($,Z){if(Array.isArray(Z))return Z.some((Q)=>OQ($,Q));if(Array.isArray($))return $.some((Q)=>OQ(Q,Z));if(D5(Z)){if(!D5($))return!1;return Object.entries(Z).every(([Q,W])=>OQ($[Q],W))}return Object.is($,Z)}function gE($,Z){if(!Z||Object.keys(Z).length===0)return!0;return Object.entries(Z).every(([Q,W])=>OQ(xE($,Q),W))}class JJ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let Z=new Date(this.nowFn()).toISOString(),Q=IE($,Z),W=this.store.insertEventLog(Q,{receivedAtIso:Z});if(!W.created)return this.logger?.debug("cron.event.duplicate",{eventId:W.record.eventId,eventType:W.record.eventType,source:W.record.source}),{event:W.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:W.record.dedupeKey}]};try{let J=this.store.listEventSpecsForType(Q.eventType),X=[],Y=[],j=[];for(let B of J){if(!gE(Q,B.filters)){X.push({specId:B.specId,externalId:B.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}Y.push(B);let G=this.materializeForSpec(B,Q,W.record.receivedAt);if(G.run)j.push(G.run);else X.push({specId:B.specId,externalId:B.externalId,reason:G.reason,dedupeKey:Q.dedupeKey})}let V=Y.length===0?"unmatched":j.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(W.record.eventId,{status:V,matchedSpecCount:Y.length,queuedRunCount:j.length,suppressedCount:X.filter((B)=>B.reason!=="filter_mismatch").length});let H=this.store.getEventLog(W.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:W.record.eventId,eventType:W.record.eventType,status:V,matchedSpecCount:Y.length,queuedRunCount:j.length}),{event:H??W.record,duplicate:!1,matchedSpecs:Y,queuedRuns:j,suppressions:X}}catch(J){if(this.store.updateEventLogProcessing(W.record.eventId,{status:"failed",error:J instanceof Error?J.message:String(J)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:W.record.eventId,eventType:W.record.eventType,error:J});throw J}}materializeForSpec($,Z,Q){let W=Z.dedupeKey??Z.eventId,J=$.debounceSeconds??0;if(J>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:W});if(V){let H=kE(V.scheduledFor,CK(Q,J)),B=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:Z.eventId,scheduledFor:H});if(B)return{run:B,reason:"dedupe_window"}}}let X=$.dedupeWindowSeconds??0;if(X>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:W,sinceIso:wK(Q,X)}))return{reason:"dedupe_window"};let Y=$.cooldownSeconds??0;if(Y>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:wK(Q,Y)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:Z.eventId,scheduledFor:J>0?CK(Q,J):Q}),reason:"dedupe_window"}}}class L5{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},Z=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let W of Z)if(this.materializeOneOff(W))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let W of Q)try{if(this.materializeSchedule(W))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as pE}from"node:path";import{buildClineSystemPrompt as rE}from"@cline/shared";import{nowIso as PK}from"@cline/shared/db";import{mkdirSync as mE,writeFileSync as vE}from"node:fs";import{join as cE}from"node:path";import{resolveCronReportsDir as uE}from"@cline/shared/storage";function b$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function N2($,Z){if(Z===void 0||Z===null)return;return`${$}: ${b$(Z)}`}function dE($,Z,Q){let W=[`runId: ${b$($.runId)}`,`specId: ${b$(Z.specId)}`,`externalId: ${b$(Z.externalId)}`,`title: ${b$(Z.title)}`,`triggerKind: ${b$($.triggerKind)}`,`status: ${b$($.status)}`,`sourcePath: ${b$(Z.sourcePath)}`],J=[N2("sessionId",$.sessionId),N2("startedAt",$.startedAt),N2("completedAt",$.completedAt),N2("triggerEventId",$.triggerEventId),N2("triggerEventType",Q?.eventType),N2("triggerEventSource",Q?.source),N2("triggerEventSubject",Q?.subject)];for(let X of J)if(X)W.push(X);return`---
229
+ `);if(Q<0)break;let W=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),W.length>0)Z.push(W)}return Z}}class YK{registration;process;nextRequestId=1;pending=new Map;framedParser=new o3;newlineParser=new t3;stderrBuffer="";connected=!1;protocolMode="newline";constructor($){this.registration=$}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=["newline","framed"],Z;for(let Q of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Q);try{await this.request("initialize",{protocolVersion:eR,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},ZE),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Q;return}catch(W){Z=W instanceof Error?W:Error(String(W))}}throw Z??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((Z)=>typeof Z?.name==="string"&&typeof Z.inputSchema==="object"&&Z.inputSchema!==null).map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let Z=this.registration.transport;if(Z.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${Z.type}`);this.framedParser=new o3,this.newlineParser=new t3,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},W=oR(Z.command,Z.args??[],{cwd:Z.cwd,env:{...process.env,...Z.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=W,W.stdout.on("data",(J)=>this.handleStdout(J)),W.stderr.on("data",(J)=>{if(this.process!==W)return;if(this.stderrBuffer+=J.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),W.once("error",(J)=>{if(this.process!==W)return;this.failAllPending(Error(`MCP process error: ${DQ(J)}`))}),W.once("exit",(J,X)=>{if(this.process!==W)return;this.connected=!1,this.process=void 0;let Y=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${J??"null"}, signal=${X??"null"}).${Y}`))})}handleStdout($){try{let Z=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of Z){let W=JSON.parse(Q);if(typeof W.id!=="number")continue;let J=this.pending.get(W.id);if(!J)continue;if(this.pending.delete(W.id),clearTimeout(J.timeout),W.error){let X=W.error.message||`MCP request failed with code ${W.error.code??"unknown"}`;J.reject(Error(X));continue}J.resolve(W.result)}}catch(Z){this.handleProtocolFailure(Z)}}handleProtocolFailure($){let Z=this.process;if(!Z)return;this.connected=!1,this.process=void 0;let Q=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${DQ($)}.${Q}`)),Z.kill()}async request($,Z,Q=$E){let W=this.process;if(!W?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let J=this.nextRequestId++,X={jsonrpc:"2.0",id:J,method:$,...Z?{params:Z}:{}},Y=new Promise((j,V)=>{let H=setTimeout(()=>{this.pending.delete(J),V(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Q);this.pending.set(J,{resolve:j,reject:V,timeout:H})});try{W.stdin.write(this.protocolMode==="framed"?WK(X):JK(X))}catch(j){let V=this.pending.get(J);if(V)clearTimeout(V.timeout),this.pending.delete(J);throw j}return Y}notify($,Z){let Q=this.process;if(!Q?.stdin.writable)return;let W={jsonrpc:"2.0",method:$,...Z?{params:Z}:{}};Q.stdin.write(this.protocolMode==="framed"?WK(W):JK(W))}failAllPending($){for(let[Z,Q]of this.pending)clearTimeout(Q.timeout),this.pending.delete(Z),Q.reject($)}}class jK{registration;options;client;authContext;constructor($,Z){this.registration=$;this.options=Z}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=fQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??QK});this.authContext=$;try{let Z=new tR({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Q=AQ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await Z.connect(Q),await $.clearError(),this.client=Z}catch(Z){let Q=Z instanceof ZK?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):DQ(Z);throw await $.markError(Q),Error(Q)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((Q)=>({name:Q.name,description:Q.description,inputSchema:Q.inputSchema&&typeof Q.inputSchema==="object"&&!Array.isArray(Q.inputSchema)?Q.inputSchema:{}}))}catch(Z){return await this.handleOperationError(Z)}}async callTool($){let Z=await this.ensureConnectedClient();try{return await Z.callTool({name:$.name,arguments:$.arguments??{}})}catch(Q){return await this.handleOperationError(Q)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let Z=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${Z} Run authorizeMcpServerOAuth for this server.`;return`${Z} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let Z=this.authContext??fQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??QK}),Q=$ instanceof ZK?this.formatUnauthorizedMessage(Z.getLastAuthorizationUrl()):DQ($);throw await Z.markError(Q),Error(Q)}}function r8($={}){return(Z)=>Z.transport.type==="stdio"?new YK(Z):new jK(Z,$)}FQ();function r0(){return Date.now()}function QE($){return $.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}class M2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let Z=this.servers.get($.name);if(!Z){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:r0()});return}let Q=JSON.stringify(Z.registration.transport)!==JSON.stringify($.transport);if(Z.registration={...$},Z.updatedAt=r0(),Q)await this.disconnectState(Z),Z.client=void 0,Z.toolCache=void 0,Z.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.connectState(Z)})}async disconnectServer($){await this.runExclusive($,async()=>{let Z=this.requireServer($);await this.disconnectState(Z)})}async setServerDisabled($,Z){await this.runExclusive($,async()=>{let Q=this.requireServer($);if(Q.registration={...Q.registration,disabled:Z},Q.updatedAt=r0(),Z)await this.disconnectState(Q)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,Z)=>$.name.localeCompare(Z.name))}async listTools($){let Z=this.requireServer($),Q=Z.toolCacheUpdatedAt??0;if(Z.toolCache&&r0()-Q<=this.toolsCacheTtlMs)return Z.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let Z=this.requireServer($),W=await(await this.ensureConnectedClient(Z)).listTools(),J=QE(W);return Z.toolCache=J,Z.toolCacheUpdatedAt=r0(),Z.updatedAt=r0(),J})}async callTool($){return this.runExclusive($.serverName,async()=>{let Z=this.requireServer($.serverName),Q=await this.ensureConnectedClient(Z);return Z.updatedAt=r0(),Q.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let Z of $)await this.unregisterServer(Z)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=r0();try{let Z=$.client??await this.clientFactory($.registration);await Z.connect(),$.client=Z,$.status="connected",$.lastError=void 0,$.updatedAt=r0()}catch(Z){throw $.status="disconnected",$.lastError=Z instanceof Error?Z.message:String(Z),$.updatedAt=r0(),Z}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=r0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=r0()}}requireServer($){let Z=this.servers.get($);if(!Z)throw Error(`Unknown MCP server: ${$}`);return Z}async runExclusive($,Z){let Q=this.operationLocks.get($)??Promise.resolve(),W,J=new Promise((Y)=>{W=Y}),X=Q.catch(()=>{return}).then(()=>J);this.operationLocks.set($,X),await Q.catch(()=>{return});try{return await Z()}finally{if(W?.(),this.operationLocks.get($)===X)this.operationLocks.delete($)}}}function i8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function VK($){return i8($)&&Object.values($).every((Z)=>typeof Z==="string")}function WE($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function JE($){if(!i8($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function XE($){let Z=$.env?Object.entries($.env):[];if(Z.length===0)return{ok:!0};let Q={};for(let[W,J]of Z){if(typeof J==="string"){Q[W]=J;continue}let X=J.fromEnv?.trim()||W,Y=process.env[X];if(typeof Y==="string"&&Y.length>0){Q[W]=Y;continue}if(typeof J.value==="string"){Q[W]=J.value;continue}if(J.required===!0)return{ok:!1,reason:`required environment variable "${X}" is not set`}}return{ok:!0,env:Object.keys(Q).length>0?Q:void 0}}function e3($){if(!i8($))return{name:"",loadError:"invalid MCP server registration"};let Z=typeof $.name==="string"?$.name.trim():"";if(!Z)return{name:Z,loadError:"empty MCP server name"};let Q=$.env,W=Q===void 0?void 0:Q;if(W!==void 0){if(!i8(W))return{name:Z,loadError:"invalid env"};for(let[V,H]of Object.entries(W))if(typeof H!=="string"&&!JE(H))return{name:Z,loadError:`invalid env "${V}"`}}let J=$.transport;if(!i8(J))return{name:Z,loadError:"invalid MCP transport"};let X=J.type;if(X!=="stdio"&&X!=="sse"&&X!=="streamableHttp")return{name:Z,loadError:"invalid MCP transport type"};if(X!=="stdio"&&W!==void 0)return{name:Z,loadError:"top-level env is only supported for stdio MCP transports"};let Y=i8($.metadata)?$.metadata:void 0;if(X==="stdio"){let V=J.command;if(typeof V!=="string"||!V.trim())return{name:Z,loadError:"stdio MCP transport requires command"};let H=J.args;if(H!==void 0&&!WE(H))return{name:Z,loadError:"stdio MCP transport args must be strings"};let B=J.cwd;if(B!==void 0&&typeof B!=="string")return{name:Z,loadError:"stdio MCP transport cwd must be a string"};let G=J.env;if(G!==void 0&&!VK(G))return{name:Z,loadError:"stdio MCP transport env must be strings"};let K=XE({name:Z,transport:{type:"stdio",command:V,args:H,cwd:B,env:G},env:W,metadata:Y});if(!K.ok)return{name:Z,loadError:K.reason};let F=G||K.env?{...G??{},...K.env??{}}:void 0;return{name:Z,registration:{name:Z,transport:{type:"stdio",command:V,args:H,cwd:B,env:F},metadata:Y}}}if(typeof J.url!=="string"||!J.url.trim())return{name:Z,loadError:`${X} MCP transport requires url`};let j=J.headers;if(j!==void 0&&!VK(j))return{name:Z,loadError:`${X} MCP transport headers must be strings`};return{name:Z,registration:{name:Z,transport:X==="sse"?{type:"sse",url:J.url,headers:j}:{type:"streamableHttp",url:J.url,headers:j},metadata:Y}}}function LQ($){let Z=new Map;return $.map(({server:Q,owner:W,ownerLabel:J})=>{let X=e3(Q);if(!X.registration)return{owner:W,name:X.name,loadError:X.loadError??"invalid MCP server registration"};let Y=Z.get(X.registration.name);if(Z.has(X.registration.name)){let j=Y?` already registered by ${Y}`:"";return{owner:W,name:X.registration.name,loadError:`duplicate MCP server name "${X.registration.name}"${j}`}}return Z.set(X.registration.name,J),{owner:W,name:X.registration.name,registration:X.registration}})}import{createHash as YE}from"node:crypto";var HK=64,jE=/[^a-zA-Z0-9_-]+/g,BK=8,VE=1,HE="mcp_tool";function BE($){return YE("sha1").update($).digest("hex").slice(0,BK)}function GE($){return $.replace(jE,"_")}var _Q=({serverName:$,toolName:Z})=>{let Q=`${$}__${Z}`,W=GE(Q);if(W===Q&&Q.length<=HK)return Q;let J=BE(Q),X=HK-VE-BK;return`${W.slice(0,X)||HE}_${J}`};function G5($){return{[($.nameTransform??_Q)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function zQ($){let Z={};for(let Q of $.toolNames)Object.assign(Z,G5({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return Z}import{createTool as KE}from"@cline/shared";function FE($,Z){let Q=Z.description?.trim();if(Q)return Q;return`Execute MCP tool "${Z.name}" from server "${$}".`}async function n8($){let Z=await $.provider.listTools($.serverName),Q=$.nameTransform??_Q;return Z.map((W)=>{let J=Q({serverName:$.serverName,toolName:W.name});return KE({name:J,description:FE($.serverName,W),inputSchema:W.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(X,Y)=>$.provider.callTool({serverName:$.serverName,toolName:W.name,arguments:X&&typeof X==="object"&&!Array.isArray(X)?X:void 0,context:Y})})})}Y1();var AK={};N(AK,{listPluginToolsWithDiagnostics:()=>TQ,listPluginTools:()=>K5});import{stat as AE}from"node:fs/promises";import{isAbsolute as fE,relative as UE,resolve as KK}from"node:path";Y1();function DE($,Z){let Q=UE(KK($),KK(Z));return Q===""||!Q.startsWith("..")&&!fE(Q)}var LE=32,a8=new Map;function _E($,Z){if(!a8.has($)&&a8.size>=LE){let Q=a8.keys().next().value;if(Q)a8.delete(Q)}a8.set($,Z)}async function zE($){let Z=await Promise.all($.pluginPaths.map(async(Q)=>{try{let W=await AE(Q);return`${Q}:${W.mtimeMs}:${W.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:Z})}function FK($,Z){return $.map((Q)=>({...Q,enabled:!Z.has(Q.name)}))}function TE($){return $.sort((Z,Q)=>{let W=Z.name.localeCompare(Q.name);if(W!==0)return W;return Z.path.localeCompare(Q.path)})}async function OE($,Z){if(!$.setup)return{tools:[]};let Q=[],W={registerTool:(J)=>Q.push(J),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(J)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(W,{workspaceInfo:Z}),{tools:Q}}async function TQ($){let Z=c1({workspacePath:$.workspacePath,cwd:$.cwd}),Q=F1($.disabledToolNames);if(Z.length===0)return{tools:[],failures:[],warnings:[]};let W=await zE({pluginPaths:Z,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),J=a8.get(W);if(J)return{tools:FK(J.tools,Q),failures:J.failures,warnings:J.warnings};let X=[],Y=[],j=[],V;try{V=await E8({pluginPaths:Z,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),Y=[...V.failures],j=[...V.warnings];for(let B of V.extensions??[]){let G=B.__clinePluginPath;if(!G)continue;let K=DE($.workspacePath,G)?"workspace-plugin":"global-plugin",F;try{F=await OE(B,{rootPath:$.workspacePath})}catch(A){Y.push({pluginPath:G,pluginName:B.name,phase:"setup",message:A instanceof Error?A.message:String(A),stack:A instanceof Error?A.stack:void 0});continue}for(let A of F.tools)X.push({name:A.name,pluginName:B.name,path:G,source:K,description:A.description?.trim()||void 0})}}catch(B){Y=Z.map((G)=>({pluginPath:G,phase:"load",message:B instanceof Error?B.message:String(B),stack:B instanceof Error?B.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let H=TE(X);return _E(W,{tools:H,failures:Y,warnings:j}),{tools:FK(H,Q),failures:Y,warnings:j}}async function K5($){return(await TQ($)).tools}function f5($,Z){if(!Z)return"global";let Q=_K(Z,$);return!Q.startsWith("..")&&!LK(Q)?"workspace":"global"}function EE($,Z){return f5($,Z)==="workspace"?"workspace-plugin":"global-plugin"}function NE($,Z){let Q=_K(UK($),UK(Z));return Q===""||!Q.startsWith("..")&&!LK(Q)}function CE($){try{let Z=JSON.parse(qE($,"utf8"));return typeof Z.name==="string"&&Z.name.trim()?Z.name.trim():void 0}catch{return}}function wE($){let Z=fK($);while(!0){let Q=RE(Z,"package.json");if(A5(Q)){let J=CE(Q);if(J)return J;break}let W=fK(Z);if(W===Z)break;Z=W}return $J($,ME($))}function PE($){let Z=[];for(let Q of c1({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let W of u1([Q]))Z.push({directory:W,pluginName:wE(Q),pluginPath:Q,source:$.workspaceRoot?EE(Q,$.workspaceRoot):"global-plugin"});return Z.sort((Q,W)=>W.directory.length-Q.directory.length)}function SE($,Z){return Z.find((Q)=>NE(Q.directory,$))}function F5($){return[...$].sort((Z,Q)=>{let W=(J)=>{switch(J){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(Z.source!==Q.source)return W(Z.source)-W(Q.source);return Z.name.localeCompare(Q.name)})}function zK($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function TK($,Z){return $.cwd?.trim()||Z||process.cwd()}async function DK($,Z){if($.userInstructionService)return await Z($.userInstructionService);let Q=zK($),W=TK($,Q),J=C$({skills:{workspacePath:Q||void 0,includePluginSkills:!0,cwd:W},rules:{workspacePath:Q||void 0},workflows:{workspacePath:Q||void 0}});try{return await J.start(),await Z(J)}finally{J.stop()}}function bE($,Z){if(!$)return;let Q=$.listRecords("skill");if(Z.id){let W=Q.find((J)=>J.id===Z.id);if(W)return W}for(let W of Q)if(W.filePath===Z.path||W.item.name===Z.name||W.id===Z.name)return W;return}class S${async list($={}){return await DK($,async(Z)=>{let Q=zK($),W=PE({workspaceRoot:Q,cwd:TK($,Q)}),J=[],X=[],Y=[],j=[],V=[];if(Z){for(let B of Z.listRecords("workflow")){let G=B.item;J.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"workflow",source:f5(B.filePath,Q),description:G.instructions,toggleable:!1})}for(let B of Z.listRecords("rule")){let G=B.item;X.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"rule",source:f5(B.filePath,Q),description:G.instructions,toggleable:!1})}for(let B of Z.listRecords("skill")){let G=B.item,K=SE(B.filePath,W);Y.push({id:B.id,name:G.name,path:B.filePath,enabled:G.disabled!==!0,kind:"skill",source:K?.source??f5(B.filePath,Q),description:G.description,pluginName:K?.pluginName,pluginPath:K?.pluginPath,toggleable:!0})}}if(Q)try{for(let B of await K5({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))j.push({id:`${B.pluginName}:${B.name}:${B.path}`,name:B.name,path:B.path,enabled:B.enabled,kind:"tool",source:B.source,description:B.description,toggleable:!0})}catch{}let H=$0();if(p1({filePath:H}))try{for(let B of p0({filePath:H}))V.push({id:B.name,name:B.name,path:H,enabled:B.disabled!==!0,kind:"mcp",source:f5(H,Q),description:B.transport.type,toggleable:!0})}catch{}return{workflows:F5(J.filter((B)=>A5(B.path))),rules:F5(X.filter((B)=>A5(B.path))),skills:F5(Y.filter((B)=>A5(B.path))),tools:F5(j),mcp:F5(V.filter((B)=>A5(B.path)))}})}async toggle($){if($.type==="skills")return await DK($,async(Z)=>{let Q=bE(Z,$),W=Q?.filePath;if(!W)throw Error(`Unable to resolve skill setting '${$.id??$.name??$J($.path??"")}'.`);let J=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,X=$.enabled??(J!==void 0?!J:void 0);if(X===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??$J($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await IG({filePath:W,enabled:X}),await Z?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:Z}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)JZ($.name);else ZH($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let Z=$.name?.trim()||$.id?.trim();if(!Z)throw Error("MCP server settings toggle requires a server name.");let Q=$.path?.trim()||$0(),W=$.enabled;if(W===void 0){let J=p0({filePath:Q}).find((X)=>X.name===Z);if(!J)throw Error(`Unknown MCP server: ${Z}`);W=J.disabled===!0}return z2({filePath:Q,name:Z,disabled:!W}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function R2(){return new S$}function qK($){return{async list(Z){let Q=$;if(Q.listSettings)return await Q.listSettings(Z);return await R2().list(Z)},async toggle(Z){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(Z);return await R2().toggle(Z)}}}function MK($){function Z(){let Q=$.pendingPrompts;if(!Q)throw Error("Pending prompt service is not available.");return Q}return{list(Q){return Z().list(Q)},update(Q){return Z().update(Q)},delete(Q){return Z().delete(Q)}}}var RK={};N(RK,{splitCoreSessionConfig:()=>U5,isSessionNotFoundError:()=>i1,SessionNotFoundError:()=>r1,SESSION_NOT_FOUND_ERROR_CODE:()=>E2});var E2="session_not_found";class r1 extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function i1($){return $ instanceof r1||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function U5($){let{hooks:Z,logger:Q,telemetry:W,extensionContext:J,extraTools:X,extensions:Y,onTeamEvent:j,onConsecutiveMistakeLimitReached:V,checkpoint:H,compaction:B,...G}=$,K={};if(Z)K.hooks=Z;if(Q)K.logger=Q;if(W)K.telemetry=W;if(J)K.extensionContext=J;if(X)K.extraTools=X;if(Y)K.extensions=Y;if(j)K.onTeamEvent=j;if(V)K.onConsecutiveMistakeLimitReached=V;if(H?.createCheckpoint)K.checkpoint=H;if(B?.compact)K.compaction=B;let F=Object.keys(K).length>0?K:void 0;return{config:{...G,...H?{checkpoint:{enabled:H.enabled}}:{},...B?{compaction:{enabled:B.enabled,strategy:B.strategy,thresholdRatio:B.thresholdRatio,reserveTokens:B.reserveTokens,preserveRecentTokens:B.preserveRecentTokens,maxInputTokens:B.maxInputTokens,summarizer:B.summarizer}}:{}},...F?{localRuntime:F}:{}}}function EK($){let Z=$.config;return"providerId"in Z?{...$,config:{...Z,...yE($.localRuntime)},localRuntime:$.localRuntime}:$}function ZJ($,Z={}){let Q=U5($.config),W=q0(Z.defaultCapabilities,$.capabilities),J=hE(Q.localRuntime,$.localRuntime),X=Z.withExtensionContext?.(J?.extensionContext);if(X)J={...J??{},extensionContext:X};return{...$,...Q,...J?{localRuntime:J}:{},...W?{capabilities:W}:{}}}function yE($){if(!$)return{};let{modelCatalogDefaults:Z,userInstructionService:Q,configExtensions:W,onTeamRestored:J,...X}=$;return X}function hE(...$){let Z={};for(let Q of $)if(Q)Object.assign(Z,Q);return Object.keys(Z).length>0?Z:void 0}L0();function NK($){let Z=$.input.config.telemetry??$.telemetry;if(!Z)return;Z.capture({event:g.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??z0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function D5($){return!!$&&typeof $==="object"&&!Array.isArray($)}function QJ($){let Z=$?.trim();return Z?Z:void 0}function kE($,Z){let Q=$?.trim();if(!Q)return Z;let W=Date.parse(Q);if(!Number.isFinite(W))return Z;return new Date(W).toISOString()}function CK($,Z){return new Date(new Date($).getTime()+Math.max(0,Math.floor(Z))*1000).toISOString()}function wK($,Z){return new Date(new Date($).getTime()-Math.max(0,Math.floor(Z))*1000).toISOString()}function IE($,Z){if(!$)return Z;return new Date($).getTime()>=new Date(Z).getTime()?$:Z}function xE($,Z){let Q=$.eventId.trim(),W=$.eventType.trim(),J=$.source.trim(),X=QJ($.subject),Y=QJ($.dedupeKey)??`${W}:${J}:${X??Q}`;return{eventId:Q,eventType:W,source:J,subject:X,occurredAt:kE($.occurredAt,Z),workspaceRoot:QJ($.workspaceRoot),payload:D5($.payload)?$.payload:void 0,attributes:D5($.attributes)?$.attributes:void 0,dedupeKey:Y}}function WJ($,Z){if(!Z)return;let Q=Z.split("."),W=$;for(let J of Q){if(!D5(W))return;W=W[J]}return W}function gE($,Z){if($.attributes&&Object.hasOwn($.attributes,Z))return $.attributes[Z];if($.payload&&Object.hasOwn($.payload,Z))return $.payload[Z];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},W=WJ(Q,Z);if(W!==void 0)return W;if($.attributes){let J=WJ($.attributes,Z);if(J!==void 0)return J}if($.payload)return WJ($.payload,Z);return}function OQ($,Z){if(Array.isArray(Z))return Z.some((Q)=>OQ($,Q));if(Array.isArray($))return $.some((Q)=>OQ(Q,Z));if(D5(Z)){if(!D5($))return!1;return Object.entries(Z).every(([Q,W])=>OQ($[Q],W))}return Object.is($,Z)}function mE($,Z){if(!Z||Object.keys(Z).length===0)return!0;return Object.entries(Z).every(([Q,W])=>OQ(gE($,Q),W))}class JJ{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let Z=new Date(this.nowFn()).toISOString(),Q=xE($,Z),W=this.store.insertEventLog(Q,{receivedAtIso:Z});if(!W.created)return this.logger?.debug("cron.event.duplicate",{eventId:W.record.eventId,eventType:W.record.eventType,source:W.record.source}),{event:W.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:W.record.dedupeKey}]};try{let J=this.store.listEventSpecsForType(Q.eventType),X=[],Y=[],j=[];for(let B of J){if(!mE(Q,B.filters)){X.push({specId:B.specId,externalId:B.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}Y.push(B);let G=this.materializeForSpec(B,Q,W.record.receivedAt);if(G.run)j.push(G.run);else X.push({specId:B.specId,externalId:B.externalId,reason:G.reason,dedupeKey:Q.dedupeKey})}let V=Y.length===0?"unmatched":j.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(W.record.eventId,{status:V,matchedSpecCount:Y.length,queuedRunCount:j.length,suppressedCount:X.filter((B)=>B.reason!=="filter_mismatch").length});let H=this.store.getEventLog(W.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:W.record.eventId,eventType:W.record.eventType,status:V,matchedSpecCount:Y.length,queuedRunCount:j.length}),{event:H??W.record,duplicate:!1,matchedSpecs:Y,queuedRuns:j,suppressions:X}}catch(J){if(this.store.updateEventLogProcessing(W.record.eventId,{status:"failed",error:J instanceof Error?J.message:String(J)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:W.record.eventId,eventType:W.record.eventType,error:J});throw J}}materializeForSpec($,Z,Q){let W=Z.dedupeKey??Z.eventId,J=$.debounceSeconds??0;if(J>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:W});if(V){let H=IE(V.scheduledFor,CK(Q,J)),B=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:Z.eventId,scheduledFor:H});if(B)return{run:B,reason:"dedupe_window"}}}let X=$.dedupeWindowSeconds??0;if(X>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:W,sinceIso:wK(Q,X)}))return{reason:"dedupe_window"};let Y=$.cooldownSeconds??0;if(Y>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:wK(Q,Y)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:Z.eventId,scheduledFor:J>0?CK(Q,J):Q}),reason:"dedupe_window"}}}class L5{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},Z=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let W of Z)if(this.materializeOneOff(W))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let W of Q)try{if(this.materializeSchedule(W))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as rE}from"node:path";import{buildClineSystemPrompt as iE}from"@cline/shared";import{nowIso as PK}from"@cline/shared/db";import{mkdirSync as vE,writeFileSync as cE}from"node:fs";import{join as uE}from"node:path";import{resolveCronReportsDir as dE}from"@cline/shared/storage";function b$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function N2($,Z){if(Z===void 0||Z===null)return;return`${$}: ${b$(Z)}`}function lE($,Z,Q){let W=[`runId: ${b$($.runId)}`,`specId: ${b$(Z.specId)}`,`externalId: ${b$(Z.externalId)}`,`title: ${b$(Z.title)}`,`triggerKind: ${b$($.triggerKind)}`,`status: ${b$($.status)}`,`sourcePath: ${b$(Z.sourcePath)}`],J=[N2("sessionId",$.sessionId),N2("startedAt",$.startedAt),N2("completedAt",$.completedAt),N2("triggerEventId",$.triggerEventId),N2("triggerEventType",Q?.eventType),N2("triggerEventSource",Q?.source),N2("triggerEventSubject",Q?.subject)];for(let X of J)if(X)W.push(X);return`---
230
230
  ${W.join(`
231
231
  `)}
232
232
  ---
233
- `}function lE($){let Z=[];if($.triggerEvent){let Q=$.triggerEvent,W=[`- eventId: ${Q.eventId}`,`- eventType: ${Q.eventType}`,`- source: ${Q.source}`,Q.subject?`- subject: ${Q.subject}`:"",`- occurredAt: ${Q.occurredAt}`,Q.dedupeKey?`- dedupeKey: ${Q.dedupeKey}`:"",Q.attributes?`- attributes: ${JSON.stringify(Q.attributes)}`:""].filter((J)=>J.length>0);Z.push(`## Trigger Event
233
+ `}function pE($){let Z=[];if($.triggerEvent){let Q=$.triggerEvent,W=[`- eventId: ${Q.eventId}`,`- eventType: ${Q.eventType}`,`- source: ${Q.source}`,Q.subject?`- subject: ${Q.subject}`:"",`- occurredAt: ${Q.occurredAt}`,Q.dedupeKey?`- dedupeKey: ${Q.dedupeKey}`:"",Q.attributes?`- attributes: ${JSON.stringify(Q.attributes)}`:""].filter((J)=>J.length>0);Z.push(`## Trigger Event
234
234
 
235
235
  ${W.join(`
236
236
  `)}
@@ -249,17 +249,17 @@ ${W.join(`
249
249
  ${Q.join(`
250
250
  `)}
251
251
  `)}return Z.join(`
252
- `)}function XJ($){let Z=uE($.specs);mE(Z,{recursive:!0});let Q=cE(Z,`${$.run.runId}.md`),W=`${dE($.run,$.spec,$.data.triggerEvent)}
253
- ${lE($.data)}`;return vE(Q,W,"utf8"),Q}class YJ{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,Z,Q){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let W=Math.max(1,Math.floor(Q)),J=this.activeExecutions.get($)??new Set;if(J.size>=W)return!1;return J.add(Z),this.activeExecutions.set($,J),!0}release($,Z){let Q=this.activeExecutions.get($);if(!Q)return;if(Q.delete(Z),Q.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let Z of this.activeExecutions.values())$+=Z.size;return $}}var iE=15000,nE=90,SK=["rules","skills","plugins"];function aE($,Z){return new Set($.extensions??SK).has(Z)}function sE($,Z){if($.tools===void 0)return{"*":{autoApprove:!0}};let Q={"*":{enabled:!1,autoApprove:!0}};for(let W of $.tools)Q[W]={enabled:!0,autoApprove:!0};if(Z==="yolo")Q[U0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Q}function oE($){let Z=$?.trim();if(!Z)return;return["# Notes Directory",`Use ${Z} for durable notes related to this automation.`,"Before starting, inspect relevant existing notes there when useful. During or after the run, write concise notes there when they would help future runs continue with context."].join(`
254
- `)}class jJ extends Error{constructor($){super($);this.name="TimeoutError"}}async function tE($,Z){if(Z<=0)return $;let Q,W=new Promise((J,X)=>{Q=setTimeout(()=>{X(new jJ("cron run timed out"))},Z)});try{return await Promise.race([$,W])}finally{if(Q)clearTimeout(Q)}}class _5{store;materializer;options;limiter;claimLeaseMs;timer;started=!1;ticking=!1;disposed=!1;stopping=!1;activeRuns=new Map;constructor($){this.store=$.store,this.materializer=$.materializer,this.options=$,this.limiter=new YJ($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??nE)*1000)}async start(){if(this.disposed)throw Error("CronRunner disposed");if(this.started)return;this.stopping=!1,this.started=!0;let $=Math.max(2000,this.options.pollIntervalMs??iE);await this.tick(),this.timer=setInterval(()=>void this.tick(),$)}async stop(){let $=this.started;if(this.started=!1,this.stopping=!0,this.timer)clearInterval(this.timer),this.timer=void 0;if(!$)return;let Z=[...this.activeRuns.entries()];await Promise.all(Z.map(async([Q,W])=>{if(W.sessionId)try{await this.options.runtimeHandlers.abortSession(W.sessionId)}catch{}try{this.store.requeueRun({runId:Q,claimToken:W.claimToken,error:"runner stopped before completion"})}catch{}}))}async dispose(){if(this.disposed)return;this.disposed=!0,await this.stop()}async tick(){if(this.ticking)return;this.ticking=!0;try{this.materializer.materializeAll();let $=this.store.claimDueRuns({nowIso:PK(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((Z)=>this.executeClaim(Z)))}catch($){let Z=this.options.logger;if(Z)if(Z.error)Z.error("cron.runner.tick.failed",{error:$});else Z.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,Z])=>{let Q=this.store.getRun($);return Q?[{...Q,...Z}]:[]})}async executeClaim($){let Z=$.run,Q=this.store.getSpec(Z.specId);if(!Q){this.store.completeRun(Z.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!Q.enabled||Q.removed){this.store.completeRun(Z.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let W=Q.maxParallel&&Q.maxParallel>0?Q.maxParallel:1;if(!this.limiter.acquire(Q.specId,Z.runId,W)){this.store.requeueRun({runId:Z.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(Q.specId,Z.runId),this.store.requeueRun({runId:Z.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(Z.runId,{claimToken:$.claimToken});let X=Z.triggerEventId?this.store.getEventLog(Z.triggerEventId):void 0,Y,j,V=Date.now(),H;if(Q.timeoutSeconds&&Q.timeoutSeconds>0)H=V+Q.timeoutSeconds*1000;try{j=this.startClaimLeaseHeartbeat($);let B=await this.buildStartRequest(Q);if(Y=(await this.options.runtimeHandlers.startSession(B)).sessionId.trim(),!Y)throw Error("runtime returned empty sessionId");this.activeRuns.set(Z.runId,{claimToken:$.claimToken,sessionId:Y}),this.store.attachSessionIdToRun(Z.runId,Y);let K={config:B,prompt:this.buildPrompt(Q,X)},F=this.options.runtimeHandlers.sendSession(Y,K),A=H?Math.max(1,H-Date.now()):0,f=(await tE(F,A)).result,D=Date.now(),U=XJ({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:Y,status:"done"},spec:Q,data:{finalText:f.text,usage:f.usage,toolCalls:f.toolCalls,durationMs:D-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"done",sessionId:Y,reportPath:U,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",Q,Z.runId),this.store.updateSpecLastRunAt(Q.specId,PK())}catch(B){let G=B instanceof jJ;if(Y&&G)try{await this.options.runtimeHandlers.abortSession(Y)}catch{}let K=B instanceof Error?B.message:String(B),F=Date.now(),A=XJ({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:Y,status:"failed"},spec:Q,data:{error:K,durationMs:F-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"failed",sessionId:Y,reportPath:A,error:K,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.failed",Q,Z.runId)}finally{if(j?.(),Y)try{await this.options.runtimeHandlers.stopSession(Y)}catch{}this.activeRuns.delete(Z.runId),this.limiter.release(Q.specId,Z.runId)}}publishScheduleExecutionEvent($,Z,Q){if(Z.source!=="hub-schedule"||!this.options.eventPublisher)return;let W=this.store.getRun(Q);if(!W)return;let J=W.status==="done"?"success":W.status==="cancelled"?"aborted":W.status==="running"?"running":W.status==="queued"?"pending":"failed";this.options.eventPublisher($,{scheduleId:Z.externalId,executionId:W.runId,sessionId:W.sessionId,triggeredAt:new Date(W.scheduledFor??W.createdAt).getTime(),startedAt:W.startedAt?new Date(W.startedAt).getTime():void 0,endedAt:W.completedAt?new Date(W.completedAt).getTime():void 0,status:J,errorMessage:W.error})}buildPrompt($,Z){let Q=$.prompt??"";if(!Z)return Q;let W={eventId:Z.eventId,eventType:Z.eventType,source:Z.source,subject:Z.subject,occurredAt:Z.occurredAt,workspaceRoot:Z.workspaceRoot,dedupeKey:Z.dedupeKey,attributes:Z.attributes,payload:Z.payload};return`${Q}
252
+ `)}function XJ($){let Z=dE($.specs);vE(Z,{recursive:!0});let Q=uE(Z,`${$.run.runId}.md`),W=`${lE($.run,$.spec,$.data.triggerEvent)}
253
+ ${pE($.data)}`;return cE(Q,W,"utf8"),Q}class YJ{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,Z,Q){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let W=Math.max(1,Math.floor(Q)),J=this.activeExecutions.get($)??new Set;if(J.size>=W)return!1;return J.add(Z),this.activeExecutions.set($,J),!0}release($,Z){let Q=this.activeExecutions.get($);if(!Q)return;if(Q.delete(Z),Q.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let Z of this.activeExecutions.values())$+=Z.size;return $}}var nE=15000,aE=90,SK=["rules","skills","plugins"];function sE($,Z){return new Set($.extensions??SK).has(Z)}function oE($,Z){if($.tools===void 0)return{"*":{autoApprove:!0}};let Q={"*":{enabled:!1,autoApprove:!0}};for(let W of $.tools)Q[W]={enabled:!0,autoApprove:!0};if(Z==="yolo")Q[U0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Q}function tE($){let Z=$?.trim();if(!Z)return;return["# Notes Directory",`Use ${Z} for durable notes related to this automation.`,"Before starting, inspect relevant existing notes there when useful. During or after the run, write concise notes there when they would help future runs continue with context."].join(`
254
+ `)}class jJ extends Error{constructor($){super($);this.name="TimeoutError"}}async function eE($,Z){if(Z<=0)return $;let Q,W=new Promise((J,X)=>{Q=setTimeout(()=>{X(new jJ("cron run timed out"))},Z)});try{return await Promise.race([$,W])}finally{if(Q)clearTimeout(Q)}}class _5{store;materializer;options;limiter;claimLeaseMs;timer;started=!1;ticking=!1;disposed=!1;stopping=!1;activeRuns=new Map;constructor($){this.store=$.store,this.materializer=$.materializer,this.options=$,this.limiter=new YJ($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??aE)*1000)}async start(){if(this.disposed)throw Error("CronRunner disposed");if(this.started)return;this.stopping=!1,this.started=!0;let $=Math.max(2000,this.options.pollIntervalMs??nE);await this.tick(),this.timer=setInterval(()=>void this.tick(),$)}async stop(){let $=this.started;if(this.started=!1,this.stopping=!0,this.timer)clearInterval(this.timer),this.timer=void 0;if(!$)return;let Z=[...this.activeRuns.entries()];await Promise.all(Z.map(async([Q,W])=>{if(W.sessionId)try{await this.options.runtimeHandlers.abortSession(W.sessionId)}catch{}try{this.store.requeueRun({runId:Q,claimToken:W.claimToken,error:"runner stopped before completion"})}catch{}}))}async dispose(){if(this.disposed)return;this.disposed=!0,await this.stop()}async tick(){if(this.ticking)return;this.ticking=!0;try{this.materializer.materializeAll();let $=this.store.claimDueRuns({nowIso:PK(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((Z)=>this.executeClaim(Z)))}catch($){let Z=this.options.logger;if(Z)if(Z.error)Z.error("cron.runner.tick.failed",{error:$});else Z.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,Z])=>{let Q=this.store.getRun($);return Q?[{...Q,...Z}]:[]})}async executeClaim($){let Z=$.run,Q=this.store.getSpec(Z.specId);if(!Q){this.store.completeRun(Z.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!Q.enabled||Q.removed){this.store.completeRun(Z.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let W=Q.maxParallel&&Q.maxParallel>0?Q.maxParallel:1;if(!this.limiter.acquire(Q.specId,Z.runId,W)){this.store.requeueRun({runId:Z.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(Q.specId,Z.runId),this.store.requeueRun({runId:Z.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(Z.runId,{claimToken:$.claimToken});let X=Z.triggerEventId?this.store.getEventLog(Z.triggerEventId):void 0,Y,j,V=Date.now(),H;if(Q.timeoutSeconds&&Q.timeoutSeconds>0)H=V+Q.timeoutSeconds*1000;try{j=this.startClaimLeaseHeartbeat($);let B=await this.buildStartRequest(Q);if(Y=(await this.options.runtimeHandlers.startSession(B)).sessionId.trim(),!Y)throw Error("runtime returned empty sessionId");this.activeRuns.set(Z.runId,{claimToken:$.claimToken,sessionId:Y}),this.store.attachSessionIdToRun(Z.runId,Y);let K={config:B,prompt:this.buildPrompt(Q,X)},F=this.options.runtimeHandlers.sendSession(Y,K),A=H?Math.max(1,H-Date.now()):0,f=(await eE(F,A)).result,D=Date.now(),U=XJ({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:Y,status:"done"},spec:Q,data:{finalText:f.text,usage:f.usage,toolCalls:f.toolCalls,durationMs:D-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"done",sessionId:Y,reportPath:U,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",Q,Z.runId),this.store.updateSpecLastRunAt(Q.specId,PK())}catch(B){let G=B instanceof jJ;if(Y&&G)try{await this.options.runtimeHandlers.abortSession(Y)}catch{}let K=B instanceof Error?B.message:String(B),F=Date.now(),A=XJ({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:Y,status:"failed"},spec:Q,data:{error:K,durationMs:F-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"failed",sessionId:Y,reportPath:A,error:K,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.failed",Q,Z.runId)}finally{if(j?.(),Y)try{await this.options.runtimeHandlers.stopSession(Y)}catch{}this.activeRuns.delete(Z.runId),this.limiter.release(Q.specId,Z.runId)}}publishScheduleExecutionEvent($,Z,Q){if(Z.source!=="hub-schedule"||!this.options.eventPublisher)return;let W=this.store.getRun(Q);if(!W)return;let J=W.status==="done"?"success":W.status==="cancelled"?"aborted":W.status==="running"?"running":W.status==="queued"?"pending":"failed";this.options.eventPublisher($,{scheduleId:Z.externalId,executionId:W.runId,sessionId:W.sessionId,triggeredAt:new Date(W.scheduledFor??W.createdAt).getTime(),startedAt:W.startedAt?new Date(W.startedAt).getTime():void 0,endedAt:W.completedAt?new Date(W.completedAt).getTime():void 0,status:J,errorMessage:W.error})}buildPrompt($,Z){let Q=$.prompt??"";if(!Z)return Q;let W={eventId:Z.eventId,eventType:Z.eventType,source:Z.source,subject:Z.subject,occurredAt:Z.occurredAt,workspaceRoot:Z.workspaceRoot,dedupeKey:Z.dedupeKey,attributes:Z.attributes,payload:Z.payload};return`${Q}
255
255
 
256
256
  Trigger event:
257
- ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Q=setInterval(()=>{let W=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,W))clearInterval(Q)},Z);return()=>clearInterval(Q)}async buildSystemPrompt($,Z,Q,W){let J=oE($.notesDirectory),X=u8(void 0,J),Y=await l6(Z),j=rE({ide:"Cline Cron",workspaceRoot:Z,workspaceName:pE(Z),metadata:Y,rules:$.systemPrompt?void 0:X,mode:Q,providerId:W,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?u8(j,X)??j:j}async buildStartRequest($){let Z=($.workspaceRoot??"").trim(),Q=($.providerId??"").trim(),W=($.modelId??"").trim(),J=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,X=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():Z;if(!Z)throw Error("cron spec requires workspaceRoot");let Y=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:Z,cwd:X,provider:Q,model:W,mode:Y,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,Z,Y,Q),maxIterations:$.maxIterations,enableTools:J?.enableTools??!0,enableSpawn:J?.enableSpawn??!0,enableTeams:J?.enableTeams??!0,autoApproveTools:J?.autoApproveTools??!0,toolPolicies:sE($,Y),configExtensions:SK.filter((j)=>aE($,j))}}}import{existsSync as TN,readdirSync as ON,readFileSync as qN,statSync as MN}from"node:fs";import{relative as RN}from"node:path";import{resolveCronSpecsDir as EN}from"@cline/shared/storage";function z5($,Z,Q,W){let J=new Set;function X(Y){let j=Y.toLowerCase();if(W){let H=W.indexOf(j);if(H!==-1)return H+Z}let V=Number(Y);if(!Number.isInteger(V)||V<Z||V>Q)throw Error(`Invalid cron value "${Y}" for range [${Z}-${Q}]`);return V}for(let Y of $.split(",")){if(Y==="*"){for(let H=Z;H<=Q;H+=1)J.add(H);continue}let j=Y.indexOf("/");if(j!==-1){let H=Y.slice(0,j),B=Number(Y.slice(j+1));if(!Number.isInteger(B)||B<1)throw Error(`Invalid step "${Y.slice(j+1)}"`);let G=Z,K=Q;if(H!=="*"){let F=H.indexOf("-");if(F!==-1)G=X(H.slice(0,F)),K=X(H.slice(F+1));else G=X(H)}if(G>K)throw Error(`Invalid cron range "${H}"`);for(let F=G;F<=K;F+=B)J.add(F);continue}let V=Y.indexOf("-");if(V!==-1){let H=X(Y.slice(0,V)),B=X(Y.slice(V+1));if(H>B)throw Error(`Invalid cron range "${Y}"`);for(let G=H;G<=B;G+=1)J.add(G);continue}J.add(X(Y))}return[...J].sort((Y,j)=>Y-j)}var eE=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],yK=["sun","mon","tue","wed","thu","fri","sat"];function T5($,Z,Q){let W=$[Z];if(typeof W!=="string")throw Error(`Invalid cron pattern "${Q}": missing field ${Z+1}`);return W}function VJ($,Z){let Q=$[0];if(typeof Q!=="number")throw Error(`Invalid cron pattern: no values parsed for ${Z}`);return Q}function HJ($){let Z=$.trim().split(/\s+/);if(Z.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${Z.length}`);return{minutes:z5(T5(Z,0,$),0,59),hours:z5(T5(Z,1,$),0,23),daysOfMonth:z5(T5(Z,2,$),1,31),months:z5(T5(Z,3,$),1,12,eE),daysOfWeek:z5(T5(Z,4,$),0,6,yK)}}function BJ($){HJ($)}function hK($,Z,Q=Date.now()){C2($,Q,Z)}var bK=new Map,$N=new Map(yK.map(($,Z)=>[$,Z]));function kK($){let Z=$?.trim();return Z?Z:void 0}function IK($){let Z=bK.get($);if(Z)return Z;let Q=new Intl.DateTimeFormat("en-US",{timeZone:$,calendar:"gregory",numberingSystem:"latn",year:"numeric",month:"2-digit",day:"2-digit",weekday:"short",hour:"2-digit",minute:"2-digit",hourCycle:"h23"});return bK.set($,Q),Q}function ZN($){let Z=kK($);if(!Z)return;IK(Z).format(new Date)}function QN($,Z){let Q=IK(Z).formatToParts(new Date($)),W=new Map(Q.map((Y)=>[Y.type,Y.value])),J=W.get("weekday")?.toLowerCase().slice(0,3)??"",X=$N.get(J);if(X===void 0)throw Error(`Unable to resolve weekday for timezone "${Z}"`);return{month:Number(W.get("month")),dayOfMonth:Number(W.get("day")),dayOfWeek:X,hour:Number(W.get("hour")),minute:Number(W.get("minute"))}}function WN($){let Z=new Date($);return{month:Z.getMonth()+1,dayOfMonth:Z.getDate(),dayOfWeek:Z.getDay(),hour:Z.getHours(),minute:Z.getMinutes()}}function JN($,Z){return $.months.includes(Z.month)&&$.daysOfMonth.includes(Z.dayOfMonth)&&$.daysOfWeek.includes(Z.dayOfWeek)&&$.hours.includes(Z.hour)&&$.minutes.includes(Z.minute)}function XN($,Z,Q){let W=HJ($),J=new Date(Z);J.setSeconds(0,0);let X=J.getTime()+60000,Y=new Date(Z);Y.setFullYear(Y.getFullYear()+4);let j=Y.getTime();while(X<=j){if(JN(W,QN(X,Q)))return X;X+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Q}"`)}function C2($,Z,Q){let W=kK(Q);if(W)return ZN(W),XN($,Z,W);let J=HJ($),X=new Date(Z);X.setSeconds(0,0),X=new Date(X.getTime()+60000);let Y=new Date(Z);Y.setFullYear(Y.getFullYear()+4);while(X<=Y){let{month:j,dayOfMonth:V,dayOfWeek:H,hour:B,minute:G}=WN(X.getTime());if(!J.months.includes(j)){let K=J.months.find((A)=>A>j)??VJ(J.months,"months"),F=K<=j?1:0;X=new Date(X.getFullYear()+F,K-1,1,0,0,0,0);continue}if(!J.daysOfMonth.includes(V)||!J.daysOfWeek.includes(H)){X=new Date(X.getFullYear(),X.getMonth(),V+1,0,0,0,0);continue}if(!J.hours.includes(B)){let K=J.hours.find((A)=>A>B)??VJ(J.hours,"hours"),F=K<=B?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate()+F,K,0,0,0);continue}if(!J.minutes.includes(G)){let K=J.minutes.find((A)=>A>G)??VJ(J.minutes,"minutes"),F=K<=G?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate(),X.getHours()+F,K,0,0);continue}return X.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{createHash as YN}from"node:crypto";import jN from"yaml";function VN($){let Z=$.replace(/\\/g,"/");if(Z.startsWith("events/")&&Z.endsWith(".event.md"))return"event";if(Z.endsWith(".cron.md"))return"schedule";return"one_off"}function HN($){let Z=$.replace(/\r\n/g,`
257
+ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Q=setInterval(()=>{let W=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,W))clearInterval(Q)},Z);return()=>clearInterval(Q)}async buildSystemPrompt($,Z,Q,W){let J=tE($.notesDirectory),X=u8(void 0,J),Y=await l6(Z),j=iE({ide:"Cline Cron",workspaceRoot:Z,workspaceName:rE(Z),metadata:Y,rules:$.systemPrompt?void 0:X,mode:Q,providerId:W,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?u8(j,X)??j:j}async buildStartRequest($){let Z=($.workspaceRoot??"").trim(),Q=($.providerId??"").trim(),W=($.modelId??"").trim(),J=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,X=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():Z;if(!Z)throw Error("cron spec requires workspaceRoot");let Y=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:Z,cwd:X,provider:Q,model:W,mode:Y,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,Z,Y,Q),maxIterations:$.maxIterations,enableTools:J?.enableTools??!0,enableSpawn:J?.enableSpawn??!0,enableTeams:J?.enableTeams??!0,autoApproveTools:J?.autoApproveTools??!0,toolPolicies:oE($,Y),configExtensions:SK.filter((j)=>sE($,j))}}}import{existsSync as ON,readdirSync as qN,readFileSync as MN,statSync as RN}from"node:fs";import{relative as EN}from"node:path";import{resolveCronSpecsDir as NN}from"@cline/shared/storage";function z5($,Z,Q,W){let J=new Set;function X(Y){let j=Y.toLowerCase();if(W){let H=W.indexOf(j);if(H!==-1)return H+Z}let V=Number(Y);if(!Number.isInteger(V)||V<Z||V>Q)throw Error(`Invalid cron value "${Y}" for range [${Z}-${Q}]`);return V}for(let Y of $.split(",")){if(Y==="*"){for(let H=Z;H<=Q;H+=1)J.add(H);continue}let j=Y.indexOf("/");if(j!==-1){let H=Y.slice(0,j),B=Number(Y.slice(j+1));if(!Number.isInteger(B)||B<1)throw Error(`Invalid step "${Y.slice(j+1)}"`);let G=Z,K=Q;if(H!=="*"){let F=H.indexOf("-");if(F!==-1)G=X(H.slice(0,F)),K=X(H.slice(F+1));else G=X(H)}if(G>K)throw Error(`Invalid cron range "${H}"`);for(let F=G;F<=K;F+=B)J.add(F);continue}let V=Y.indexOf("-");if(V!==-1){let H=X(Y.slice(0,V)),B=X(Y.slice(V+1));if(H>B)throw Error(`Invalid cron range "${Y}"`);for(let G=H;G<=B;G+=1)J.add(G);continue}J.add(X(Y))}return[...J].sort((Y,j)=>Y-j)}var $N=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],yK=["sun","mon","tue","wed","thu","fri","sat"];function T5($,Z,Q){let W=$[Z];if(typeof W!=="string")throw Error(`Invalid cron pattern "${Q}": missing field ${Z+1}`);return W}function VJ($,Z){let Q=$[0];if(typeof Q!=="number")throw Error(`Invalid cron pattern: no values parsed for ${Z}`);return Q}function HJ($){let Z=$.trim().split(/\s+/);if(Z.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${Z.length}`);return{minutes:z5(T5(Z,0,$),0,59),hours:z5(T5(Z,1,$),0,23),daysOfMonth:z5(T5(Z,2,$),1,31),months:z5(T5(Z,3,$),1,12,$N),daysOfWeek:z5(T5(Z,4,$),0,6,yK)}}function BJ($){HJ($)}function hK($,Z,Q=Date.now()){C2($,Q,Z)}var bK=new Map,ZN=new Map(yK.map(($,Z)=>[$,Z]));function kK($){let Z=$?.trim();return Z?Z:void 0}function IK($){let Z=bK.get($);if(Z)return Z;let Q=new Intl.DateTimeFormat("en-US",{timeZone:$,calendar:"gregory",numberingSystem:"latn",year:"numeric",month:"2-digit",day:"2-digit",weekday:"short",hour:"2-digit",minute:"2-digit",hourCycle:"h23"});return bK.set($,Q),Q}function QN($){let Z=kK($);if(!Z)return;IK(Z).format(new Date)}function WN($,Z){let Q=IK(Z).formatToParts(new Date($)),W=new Map(Q.map((Y)=>[Y.type,Y.value])),J=W.get("weekday")?.toLowerCase().slice(0,3)??"",X=ZN.get(J);if(X===void 0)throw Error(`Unable to resolve weekday for timezone "${Z}"`);return{month:Number(W.get("month")),dayOfMonth:Number(W.get("day")),dayOfWeek:X,hour:Number(W.get("hour")),minute:Number(W.get("minute"))}}function JN($){let Z=new Date($);return{month:Z.getMonth()+1,dayOfMonth:Z.getDate(),dayOfWeek:Z.getDay(),hour:Z.getHours(),minute:Z.getMinutes()}}function XN($,Z){return $.months.includes(Z.month)&&$.daysOfMonth.includes(Z.dayOfMonth)&&$.daysOfWeek.includes(Z.dayOfWeek)&&$.hours.includes(Z.hour)&&$.minutes.includes(Z.minute)}function YN($,Z,Q){let W=HJ($),J=new Date(Z);J.setSeconds(0,0);let X=J.getTime()+60000,Y=new Date(Z);Y.setFullYear(Y.getFullYear()+4);let j=Y.getTime();while(X<=j){if(XN(W,WN(X,Q)))return X;X+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Q}"`)}function C2($,Z,Q){let W=kK(Q);if(W)return QN(W),YN($,Z,W);let J=HJ($),X=new Date(Z);X.setSeconds(0,0),X=new Date(X.getTime()+60000);let Y=new Date(Z);Y.setFullYear(Y.getFullYear()+4);while(X<=Y){let{month:j,dayOfMonth:V,dayOfWeek:H,hour:B,minute:G}=JN(X.getTime());if(!J.months.includes(j)){let K=J.months.find((A)=>A>j)??VJ(J.months,"months"),F=K<=j?1:0;X=new Date(X.getFullYear()+F,K-1,1,0,0,0,0);continue}if(!J.daysOfMonth.includes(V)||!J.daysOfWeek.includes(H)){X=new Date(X.getFullYear(),X.getMonth(),V+1,0,0,0,0);continue}if(!J.hours.includes(B)){let K=J.hours.find((A)=>A>B)??VJ(J.hours,"hours"),F=K<=B?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate()+F,K,0,0,0);continue}if(!J.minutes.includes(G)){let K=J.minutes.find((A)=>A>G)??VJ(J.minutes,"minutes"),F=K<=G?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate(),X.getHours()+F,K,0,0);continue}return X.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{createHash as jN}from"node:crypto";import VN from"yaml";function HN($){let Z=$.replace(/\\/g,"/");if(Z.startsWith("events/")&&Z.endsWith(".event.md"))return"event";if(Z.endsWith(".cron.md"))return"schedule";return"one_off"}function BN($){let Z=$.replace(/\r\n/g,`
258
258
  `);if(!Z.startsWith(`---
259
259
  `))return{frontmatter:void 0,body:$};let Q=Z.slice(4),W=Q.indexOf(`
260
260
  ---`);if(W===-1)return{frontmatter:void 0,body:$};let J=Q.slice(0,W),X=Q.slice(W+4);if(X.startsWith(`
261
- `))X=X.slice(1);return{frontmatter:J,body:X}}function i0($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function BN($){if(!Array.isArray($))return;let Z=$.map((Q)=>typeof Q==="string"?Q.trim():"").filter((Q)=>Q.length>0);return Z.length>0?Z:void 0}function FJ($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function GN($){let Z=FJ($);if(!Z)return;let Q=i0(Z.providerId),W=i0(Z.modelId);if(Q===void 0&&W===void 0)return;return{providerId:Q,modelId:W}}function KN($){if(typeof $!=="string")return;let Z=$.trim().toLowerCase();if(Z==="act"||Z==="plan"||Z==="yolo")return Z;return}function gK($,Z={}){let Q=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!Q)return;let W=[...new Set(Q.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0))];if(Array.isArray($)&&Z.preserveEmptyArray)return W;return W.length>0?W:void 0}var FN=new Set(H$);function AN($){let Z=gK($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((W)=>!FN.has(W));if(Q.length>0)throw Error(`unknown tool(s): ${Q.join(", ")}`);return Z}var fN=new Set(["rules","skills","plugins"]);function UN($){let Z=gK($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((W)=>!fN.has(W));if(Q.length>0)throw Error(`unknown extension(s): ${Q.join(", ")}`);return Z}function GJ($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function KJ($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function AJ($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Q)=>AJ(Q)).join(",")}]`;let Z=Object.entries($).filter(([,Q])=>Q!==void 0);return Z.sort(([Q],[W])=>Q<W?-1:Q>W?1:0),`{${Z.map(([Q,W])=>`${JSON.stringify(Q)}:${AJ(W)}`).join(",")}}`}function mK($,Z){let Q=YN("sha256");return Q.update(AJ($)),Q.update(`
262
- `),Q.update(Z),Q.digest("hex")}function DN($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var LN=["schedule","timezone"],_N=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],zN=["cwd"];function xK($,Z,Q,W,J){return{externalId:$,relativePath:$,triggerKind:Z,body:Q,contentHash:mK(W,Q),error:J}}function A1($,Z,Q,W,J,X){return{externalId:$,relativePath:Z,triggerKind:Q,body:W,contentHash:J,error:X}}function vK($){let Z=$.relativePath.replace(/\\/g,"/"),Q=VN(Z),{frontmatter:W,body:J}=HN($.raw),X={};if(W!==void 0&&W.trim().length>0)try{let U=jN.parse(W);if(U&&typeof U==="object"&&!Array.isArray(U))X=U;else if(U!==null&&U!==void 0)return xK(Z,Q,J,{},"frontmatter must be a YAML mapping")}catch(U){return xK(Z,Q,J,{},U instanceof Error?`failed to parse frontmatter: ${U.message}`:"failed to parse frontmatter")}let Y=mK(X,J),j=i0(X.id),V=j??Z;if(Q!=="schedule"){for(let U of LN)if(X[U]!==void 0)return A1(V,Z,Q,J,Y,`field "${U}" is only allowed on *.cron.md specs`)}for(let U of zN)if(X[U]!==void 0)return A1(V,Z,Q,J,Y,`field "${U}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Q!=="event"){for(let U of _N)if(X[U]!==void 0)return A1(V,Z,Q,J,Y,`field "${U}" is only allowed on .event.md specs`)}let H=i0(X.prompt),B=J.trim(),G=H??(B.length>0?B:void 0);if(!G)return A1(V,Z,Q,J,Y,"prompt is required (frontmatter `prompt` or markdown body)");let K=i0(X.workspaceRoot);if(!K)return A1(V,Z,Q,J,Y,"workspaceRoot is required");let F,A;try{F=AN(X.tools),A=UN(X.extensions)}catch(U){return A1(V,Z,Q,J,Y,U instanceof Error?U.message:String(U))}let L=KN(X.mode);if(X.mode!==void 0&&L===void 0)return A1(V,Z,Q,J,Y,"mode must be one of: act, plan, yolo");let f={id:j,title:i0(X.title)??j??DN(Z),prompt:G,workspaceRoot:K,mode:L??"yolo",systemPrompt:i0(X.systemPrompt),modelSelection:GN(X.modelSelection),maxIterations:GJ(X.maxIterations),timeoutSeconds:GJ(X.timeoutSeconds),tools:F,notesDirectory:i0(X.notesDirectory),extensions:A,source:i0(X.source)??"user",tags:BN(X.tags),enabled:typeof X.enabled==="boolean"?X.enabled:!0,metadata:FJ(X.metadata)},D;if(Q==="schedule"){let U=i0(X.schedule);if(!U)return A1(V,Z,Q,J,Y,"schedule is required for *.cron.md specs");let T=i0(X.timezone);try{hK(U,T)}catch(z){return A1(V,Z,Q,J,Y,z instanceof Error?z.message:String(z))}D={...f,triggerKind:"schedule",schedule:U,timezone:T}}else if(Q==="event"){let U=i0(X.event);if(!U)return A1(V,Z,Q,J,Y,"event is required for .event.md specs");D={...f,triggerKind:"event",event:U,filters:FJ(X.filters),debounceSeconds:KJ(X.debounceSeconds),dedupeWindowSeconds:KJ(X.dedupeWindowSeconds),cooldownSeconds:KJ(X.cooldownSeconds),maxParallel:GJ(X.maxParallel)}}else D={...f,triggerKind:"one_off"};return{externalId:V,relativePath:Z,triggerKind:Q,body:J,contentHash:Y,spec:D}}function NN($,Z){return RN($,Z).replace(/\\/g,"/")}function CN($){if(!TN($))return[];let Z=[],Q=[$];while(Q.length>0){let W=Q.pop();if(!W)continue;let J;try{J=ON(W,{withFileTypes:!0})}catch{continue}for(let X of J){let Y=`${W}/${X.name}`;if(X.isDirectory()){if(X.name==="reports")continue;Q.push(Y);continue}if(!X.isFile())continue;if(!X.name.endsWith(".md"))continue;Z.push(Y)}}return Z}class fJ{store;cronDir;constructor($){this.store=$.store,this.cronDir=EN($.specs??($.workspaceRoot?{scope:"workspace",workspaceRoot:$.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let $={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},Z=CN(this.cronDir),Q=new Set;for(let J of Z){let X=NN(this.cronDir,J);Q.add(X),$.scanned+=1;let Y=await this.reconcileFile(X,J);if(Y){if($.changes.push(Y),$.upserted+=1,Y.parse.error)$.invalidParses+=1}}let W=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let J of W)if(!Q.has(J.sourcePath))this.handleFileDeleted(J),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,Z){let Q=this.store.getSpecBySourcePath($),W,J;try{W=qN(Z,"utf8"),J=MN(Z).mtimeMs}catch{return}let Y=vK({relativePath:$,raw:W}),j=this.store.upsertSpec({externalId:Y.externalId,sourcePath:$,triggerKind:Y.triggerKind,sourceMtimeMs:J,sourceHash:Y.contentHash,parseStatus:Y.error?"invalid":"valid",parseError:Y.error,spec:Y.spec});if(!Y.error&&Y.triggerKind==="schedule"&&j.record.enabled)this.applyScheduleNextRunAt(j.record,{forceReset:!Q||Q.removed||!Q.enabled||Q.scheduleExpr!==j.record.scheduleExpr||Q.timezone!==j.record.timezone});return{relativePath:$,result:j,parse:Y}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Z of $)this.applyScheduleNextRunAt(Z,{forceReset:!1})}applyScheduleNextRunAt($,Z){if(!$.scheduleExpr)return;if(!Z.forceReset&&$.nextRunAt)return;try{let Q=Date.now(),W=$.lastRunAt?Math.max(Q,new Date($.lastRunAt).getTime()):Q,J=C2($.scheduleExpr,W,$.timezone),X=new Date(J).toISOString();if($.nextRunAt!==X)this.store.updateSpecNextRunAt($.specId,X)}catch{}}}import{existsSync as wN,mkdirSync as PN,watch as SN}from"node:fs";import{relative as bN,resolve as yN}from"node:path";var hN=250;class UJ{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??hN),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{PN($,{recursive:!0}),this.watcher=SN($,{recursive:!0},(Z,Q)=>{if(!Q)return;let W=String(Q).replace(/\\/g,"/");if(!W.endsWith(".md"))return;if(W.startsWith("reports/"))return;this.scheduleReconcile(W)}),this.watcher.on("error",this.onError)}catch(Z){this.onError(Z)}}stop(){for(let $ of this.pending.values())clearTimeout($);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile($){let Z=this.pending.get($);if(Z)clearTimeout(Z);let Q=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,Q)}async reconcileNow($){try{let Z=yN(this.reconciler.getCronDir(),$);if(!wN(Z)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Q=bN(this.reconciler.getCronDir(),Z).replace(/\\/g,"/");await this.reconciler.reconcileFile(Q,Z),await this.onReconciled()}catch(Z){this.onError(Z)}}}import{randomUUID as O5}from"node:crypto";import{asOptionalString as m,asString as Z0,loadSqliteDb as IN,nowIso as M0}from"@cline/shared/db";import{resolveCronDbPath as xN}from"@cline/shared/storage";var kN=[`CREATE TABLE IF NOT EXISTS cron_specs (
261
+ `))X=X.slice(1);return{frontmatter:J,body:X}}function i0($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function GN($){if(!Array.isArray($))return;let Z=$.map((Q)=>typeof Q==="string"?Q.trim():"").filter((Q)=>Q.length>0);return Z.length>0?Z:void 0}function FJ($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function KN($){let Z=FJ($);if(!Z)return;let Q=i0(Z.providerId),W=i0(Z.modelId);if(Q===void 0&&W===void 0)return;return{providerId:Q,modelId:W}}function FN($){if(typeof $!=="string")return;let Z=$.trim().toLowerCase();if(Z==="act"||Z==="plan"||Z==="yolo")return Z;return}function gK($,Z={}){let Q=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!Q)return;let W=[...new Set(Q.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0))];if(Array.isArray($)&&Z.preserveEmptyArray)return W;return W.length>0?W:void 0}var AN=new Set(H$);function fN($){let Z=gK($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((W)=>!AN.has(W));if(Q.length>0)throw Error(`unknown tool(s): ${Q.join(", ")}`);return Z}var UN=new Set(["rules","skills","plugins"]);function DN($){let Z=gK($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((W)=>!UN.has(W));if(Q.length>0)throw Error(`unknown extension(s): ${Q.join(", ")}`);return Z}function GJ($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function KJ($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function AJ($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Q)=>AJ(Q)).join(",")}]`;let Z=Object.entries($).filter(([,Q])=>Q!==void 0);return Z.sort(([Q],[W])=>Q<W?-1:Q>W?1:0),`{${Z.map(([Q,W])=>`${JSON.stringify(Q)}:${AJ(W)}`).join(",")}}`}function mK($,Z){let Q=jN("sha256");return Q.update(AJ($)),Q.update(`
262
+ `),Q.update(Z),Q.digest("hex")}function LN($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var _N=["schedule","timezone"],zN=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],TN=["cwd"];function xK($,Z,Q,W,J){return{externalId:$,relativePath:$,triggerKind:Z,body:Q,contentHash:mK(W,Q),error:J}}function A1($,Z,Q,W,J,X){return{externalId:$,relativePath:Z,triggerKind:Q,body:W,contentHash:J,error:X}}function vK($){let Z=$.relativePath.replace(/\\/g,"/"),Q=HN(Z),{frontmatter:W,body:J}=BN($.raw),X={};if(W!==void 0&&W.trim().length>0)try{let U=VN.parse(W);if(U&&typeof U==="object"&&!Array.isArray(U))X=U;else if(U!==null&&U!==void 0)return xK(Z,Q,J,{},"frontmatter must be a YAML mapping")}catch(U){return xK(Z,Q,J,{},U instanceof Error?`failed to parse frontmatter: ${U.message}`:"failed to parse frontmatter")}let Y=mK(X,J),j=i0(X.id),V=j??Z;if(Q!=="schedule"){for(let U of _N)if(X[U]!==void 0)return A1(V,Z,Q,J,Y,`field "${U}" is only allowed on *.cron.md specs`)}for(let U of TN)if(X[U]!==void 0)return A1(V,Z,Q,J,Y,`field "${U}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Q!=="event"){for(let U of zN)if(X[U]!==void 0)return A1(V,Z,Q,J,Y,`field "${U}" is only allowed on .event.md specs`)}let H=i0(X.prompt),B=J.trim(),G=H??(B.length>0?B:void 0);if(!G)return A1(V,Z,Q,J,Y,"prompt is required (frontmatter `prompt` or markdown body)");let K=i0(X.workspaceRoot);if(!K)return A1(V,Z,Q,J,Y,"workspaceRoot is required");let F,A;try{F=fN(X.tools),A=DN(X.extensions)}catch(U){return A1(V,Z,Q,J,Y,U instanceof Error?U.message:String(U))}let L=FN(X.mode);if(X.mode!==void 0&&L===void 0)return A1(V,Z,Q,J,Y,"mode must be one of: act, plan, yolo");let f={id:j,title:i0(X.title)??j??LN(Z),prompt:G,workspaceRoot:K,mode:L??"yolo",systemPrompt:i0(X.systemPrompt),modelSelection:KN(X.modelSelection),maxIterations:GJ(X.maxIterations),timeoutSeconds:GJ(X.timeoutSeconds),tools:F,notesDirectory:i0(X.notesDirectory),extensions:A,source:i0(X.source)??"user",tags:GN(X.tags),enabled:typeof X.enabled==="boolean"?X.enabled:!0,metadata:FJ(X.metadata)},D;if(Q==="schedule"){let U=i0(X.schedule);if(!U)return A1(V,Z,Q,J,Y,"schedule is required for *.cron.md specs");let T=i0(X.timezone);try{hK(U,T)}catch(z){return A1(V,Z,Q,J,Y,z instanceof Error?z.message:String(z))}D={...f,triggerKind:"schedule",schedule:U,timezone:T}}else if(Q==="event"){let U=i0(X.event);if(!U)return A1(V,Z,Q,J,Y,"event is required for .event.md specs");D={...f,triggerKind:"event",event:U,filters:FJ(X.filters),debounceSeconds:KJ(X.debounceSeconds),dedupeWindowSeconds:KJ(X.dedupeWindowSeconds),cooldownSeconds:KJ(X.cooldownSeconds),maxParallel:GJ(X.maxParallel)}}else D={...f,triggerKind:"one_off"};return{externalId:V,relativePath:Z,triggerKind:Q,body:J,contentHash:Y,spec:D}}function CN($,Z){return EN($,Z).replace(/\\/g,"/")}function wN($){if(!ON($))return[];let Z=[],Q=[$];while(Q.length>0){let W=Q.pop();if(!W)continue;let J;try{J=qN(W,{withFileTypes:!0})}catch{continue}for(let X of J){let Y=`${W}/${X.name}`;if(X.isDirectory()){if(X.name==="reports")continue;Q.push(Y);continue}if(!X.isFile())continue;if(!X.name.endsWith(".md"))continue;Z.push(Y)}}return Z}class fJ{store;cronDir;constructor($){this.store=$.store,this.cronDir=NN($.specs??($.workspaceRoot?{scope:"workspace",workspaceRoot:$.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let $={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},Z=wN(this.cronDir),Q=new Set;for(let J of Z){let X=CN(this.cronDir,J);Q.add(X),$.scanned+=1;let Y=await this.reconcileFile(X,J);if(Y){if($.changes.push(Y),$.upserted+=1,Y.parse.error)$.invalidParses+=1}}let W=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let J of W)if(!Q.has(J.sourcePath))this.handleFileDeleted(J),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,Z){let Q=this.store.getSpecBySourcePath($),W,J;try{W=MN(Z,"utf8"),J=RN(Z).mtimeMs}catch{return}let Y=vK({relativePath:$,raw:W}),j=this.store.upsertSpec({externalId:Y.externalId,sourcePath:$,triggerKind:Y.triggerKind,sourceMtimeMs:J,sourceHash:Y.contentHash,parseStatus:Y.error?"invalid":"valid",parseError:Y.error,spec:Y.spec});if(!Y.error&&Y.triggerKind==="schedule"&&j.record.enabled)this.applyScheduleNextRunAt(j.record,{forceReset:!Q||Q.removed||!Q.enabled||Q.scheduleExpr!==j.record.scheduleExpr||Q.timezone!==j.record.timezone});return{relativePath:$,result:j,parse:Y}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Z of $)this.applyScheduleNextRunAt(Z,{forceReset:!1})}applyScheduleNextRunAt($,Z){if(!$.scheduleExpr)return;if(!Z.forceReset&&$.nextRunAt)return;try{let Q=Date.now(),W=$.lastRunAt?Math.max(Q,new Date($.lastRunAt).getTime()):Q,J=C2($.scheduleExpr,W,$.timezone),X=new Date(J).toISOString();if($.nextRunAt!==X)this.store.updateSpecNextRunAt($.specId,X)}catch{}}}import{existsSync as PN,mkdirSync as SN,watch as bN}from"node:fs";import{relative as yN,resolve as hN}from"node:path";var kN=250;class UJ{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??kN),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{SN($,{recursive:!0}),this.watcher=bN($,{recursive:!0},(Z,Q)=>{if(!Q)return;let W=String(Q).replace(/\\/g,"/");if(!W.endsWith(".md"))return;if(W.startsWith("reports/"))return;this.scheduleReconcile(W)}),this.watcher.on("error",this.onError)}catch(Z){this.onError(Z)}}stop(){for(let $ of this.pending.values())clearTimeout($);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile($){let Z=this.pending.get($);if(Z)clearTimeout(Z);let Q=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,Q)}async reconcileNow($){try{let Z=hN(this.reconciler.getCronDir(),$);if(!PN(Z)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Q=yN(this.reconciler.getCronDir(),Z).replace(/\\/g,"/");await this.reconciler.reconcileFile(Q,Z),await this.onReconciled()}catch(Z){this.onError(Z)}}}import{randomUUID as O5}from"node:crypto";import{asOptionalString as m,asString as Z0,loadSqliteDb as xN,nowIso as M0}from"@cline/shared/db";import{resolveCronDbPath as gN}from"@cline/shared/storage";var IN=[`CREATE TABLE IF NOT EXISTS cron_specs (
263
263
  spec_id TEXT PRIMARY KEY,
264
264
  external_id TEXT NOT NULL,
265
265
  source_path TEXT NOT NULL UNIQUE,
@@ -350,17 +350,17 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
350
350
  ON cron_specs(trigger_kind, enabled, next_run_at);`,`CREATE INDEX IF NOT EXISTS cron_specs_event_match_idx
351
351
  ON cron_specs(trigger_kind, event_type, enabled);`,`CREATE INDEX IF NOT EXISTS cron_specs_parse_status_idx
352
352
  ON cron_specs(parse_status, updated_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_source_path_idx
353
- ON cron_specs(source_path);`];function cK($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let Z of kN)$.exec(Z)}function qQ($){if(!$)return;try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function DJ($,Z={}){if(!$)return;try{let Q=JSON.parse($);if(!Array.isArray(Q))return;let W=Q.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0);if(Z.preserveEmpty)return W;return W.length>0?W:void 0}catch{return}}function w2($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function y$($){return{specId:Z0($.spec_id),externalId:Z0($.external_id),sourcePath:Z0($.source_path),triggerKind:Z0($.trigger_kind),sourceMtimeMs:w2($.source_mtime_ms),sourceHash:m($.source_hash),parseStatus:Z0($.parse_status)==="invalid"?"invalid":"valid",parseError:m($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:Z0($.title),prompt:m($.prompt),workspaceRoot:m($.workspace_root),scheduleExpr:m($.schedule_expr),timezone:m($.timezone),eventType:m($.event_type),filters:qQ(m($.filters_json)),debounceSeconds:w2($.debounce_seconds),dedupeWindowSeconds:w2($.dedupe_window_seconds),cooldownSeconds:w2($.cooldown_seconds),mode:m($.mode),systemPrompt:m($.system_prompt),providerId:m($.provider_id),modelId:m($.model_id),maxIterations:w2($.max_iterations),timeoutSeconds:w2($.timeout_seconds),maxParallel:w2($.max_parallel),tools:DJ(m($.tools_json),{preserveEmpty:!0}),notesDirectory:m($.notes_directory),extensions:DJ(m($.extensions_json),{preserveEmpty:!0}),source:m($.source),tags:DJ(m($.tags_json)),metadata:qQ(m($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:m($.last_materialized_run_id),lastRunAt:m($.last_run_at),nextRunAt:m($.next_run_at),createdAt:Z0($.created_at),updatedAt:Z0($.updated_at)}}function LJ($){return{runId:Z0($.run_id),specId:Z0($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:Z0($.trigger_kind),status:Z0($.status),claimToken:m($.claim_token),claimStartedAt:m($.claim_started_at),claimUntilAt:m($.claim_until_at),scheduledFor:m($.scheduled_for),triggerEventId:m($.trigger_event_id),startedAt:m($.started_at),completedAt:m($.completed_at),sessionId:m($.session_id),reportPath:m($.report_path),error:m($.error),attemptCount:Number($.attempt_count??0),createdAt:Z0($.created_at),updatedAt:Z0($.updated_at)}}function uK($){return{eventId:Z0($.event_id),eventType:Z0($.event_type),source:Z0($.source),subject:m($.subject),occurredAt:Z0($.occurred_at),receivedAt:Z0($.received_at),workspaceRoot:m($.workspace_root),dedupeKey:m($.dedupe_key),payload:qQ(m($.payload_json)),attributes:qQ(m($.attributes_json)),processingStatus:Z0($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:m($.error),createdAt:Z0($.created_at),updatedAt:Z0($.updated_at)}}function dK($){return $?JSON.stringify($):null}var gN=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function lK($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function mN($,Z,Q,W){for(let J of gN){let X=$[J],Y=Z[J];if(lK(X)!==lK(Y))return!0}if(Q===!1&&W===!0)return!0;return!1}function vN($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function cN($){return`hub/schedules/${$}.cron.md`}function uN($){let Z={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(Z).length>0?Z:void 0}function _J($){return{triggerKind:"schedule",title:$.name.trim(),prompt:$.prompt,workspaceRoot:$.workspaceRoot.trim(),schedule:$.cronPattern.trim(),mode:$.mode??"act",systemPrompt:$.systemPrompt,modelSelection:$.modelSelection?JSON.parse(JSON.stringify($.modelSelection)):void 0,maxIterations:typeof $.maxIterations==="number"?Math.floor($.maxIterations):void 0,timeoutSeconds:typeof $.timeoutSeconds==="number"?Math.floor($.timeoutSeconds):void 0,maxParallel:typeof $.maxParallel==="number"?Math.max(1,Math.floor($.maxParallel)):1,source:"hub-schedule",tags:$.tags?.filter((Z)=>Z.trim().length>0),enabled:$.enabled!==!1,metadata:uN($)}}function pK($){return JSON.stringify(_J($))}function dN($,Z){let Q=$.metadata?{...$.metadata}:{},W=Z.createdBy===null?void 0:Z.createdBy!==void 0?Z.createdBy:typeof Q.__hubScheduleCreatedBy==="string"?Q.__hubScheduleCreatedBy:void 0,J=Z.cwd!==void 0?Z.cwd:typeof Q.__hubScheduleCwd==="string"?Q.__hubScheduleCwd:void 0,X=Z.runtimeOptions!==void 0?Z.runtimeOptions:Q.__hubRuntimeOptions&&typeof Q.__hubRuntimeOptions==="object"&&!Array.isArray(Q.__hubRuntimeOptions)?Q.__hubRuntimeOptions:void 0;return delete Q.__hubScheduleCreatedBy,delete Q.__hubScheduleCwd,delete Q.__hubRuntimeOptions,{name:Z.name??$.title,cronPattern:Z.cronPattern??$.scheduleExpr??"",prompt:Z.prompt??$.prompt??"",workspaceRoot:Z.workspaceRoot??$.workspaceRoot??"",cwd:J,modelSelection:Z.modelSelection!==void 0?Z.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:Z.enabled??$.enabled,mode:Z.mode??($.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"),systemPrompt:Z.systemPrompt===null?void 0:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,maxIterations:Z.maxIterations===null?void 0:Z.maxIterations!==void 0?Z.maxIterations:$.maxIterations,timeoutSeconds:Z.timeoutSeconds===null?void 0:Z.timeoutSeconds!==void 0?Z.timeoutSeconds:$.timeoutSeconds,maxParallel:Z.maxParallel??$.maxParallel??1,createdBy:W,tags:Z.tags??$.tags,runtimeOptions:X,metadata:Z.metadata!==void 0?Z.metadata:Object.keys(Q).length>0?Q:void 0}}class q5{db;constructor($={}){let Z=$.dbPath??xN();this.db=IN(Z),cK(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return Z?y$(Z):void 0}getSpec($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return Z?y$(Z):void 0}getSpecByExternalId($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return Z?y$(Z):void 0}listSpecs($={}){let Z=[],Q=[];if($.triggerKind)Z.push("trigger_kind = ?"),Q.push($.triggerKind);if(typeof $.enabled==="boolean")Z.push("enabled = ?"),Q.push($.enabled?1:0);if($.parseStatus)Z.push("parse_status = ?"),Q.push($.parseStatus);if(!$.includeRemoved)Z.push("removed = 0");let W=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${W} ORDER BY created_at DESC LIMIT ?`).all(...Q,J).map((Y)=>y$(Y))}createHubSchedule($){let Z=`sched_${O5()}`,Q=this.upsertSpec({externalId:Z,sourcePath:cN(Z),triggerKind:"schedule",sourceHash:pK($),parseStatus:"valid",spec:_J($)});this.initializeScheduleNextRun(Q.record.specId);let W=this.getSpec(Q.record.specId);if(!W)throw Error("failed to create hub schedule");return W}getHubSchedule($){let Z=this.db.prepare(`SELECT * FROM cron_specs
353
+ ON cron_specs(source_path);`];function cK($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let Z of IN)$.exec(Z)}function qQ($){if(!$)return;try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function DJ($,Z={}){if(!$)return;try{let Q=JSON.parse($);if(!Array.isArray(Q))return;let W=Q.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0);if(Z.preserveEmpty)return W;return W.length>0?W:void 0}catch{return}}function w2($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function y$($){return{specId:Z0($.spec_id),externalId:Z0($.external_id),sourcePath:Z0($.source_path),triggerKind:Z0($.trigger_kind),sourceMtimeMs:w2($.source_mtime_ms),sourceHash:m($.source_hash),parseStatus:Z0($.parse_status)==="invalid"?"invalid":"valid",parseError:m($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:Z0($.title),prompt:m($.prompt),workspaceRoot:m($.workspace_root),scheduleExpr:m($.schedule_expr),timezone:m($.timezone),eventType:m($.event_type),filters:qQ(m($.filters_json)),debounceSeconds:w2($.debounce_seconds),dedupeWindowSeconds:w2($.dedupe_window_seconds),cooldownSeconds:w2($.cooldown_seconds),mode:m($.mode),systemPrompt:m($.system_prompt),providerId:m($.provider_id),modelId:m($.model_id),maxIterations:w2($.max_iterations),timeoutSeconds:w2($.timeout_seconds),maxParallel:w2($.max_parallel),tools:DJ(m($.tools_json),{preserveEmpty:!0}),notesDirectory:m($.notes_directory),extensions:DJ(m($.extensions_json),{preserveEmpty:!0}),source:m($.source),tags:DJ(m($.tags_json)),metadata:qQ(m($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:m($.last_materialized_run_id),lastRunAt:m($.last_run_at),nextRunAt:m($.next_run_at),createdAt:Z0($.created_at),updatedAt:Z0($.updated_at)}}function LJ($){return{runId:Z0($.run_id),specId:Z0($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:Z0($.trigger_kind),status:Z0($.status),claimToken:m($.claim_token),claimStartedAt:m($.claim_started_at),claimUntilAt:m($.claim_until_at),scheduledFor:m($.scheduled_for),triggerEventId:m($.trigger_event_id),startedAt:m($.started_at),completedAt:m($.completed_at),sessionId:m($.session_id),reportPath:m($.report_path),error:m($.error),attemptCount:Number($.attempt_count??0),createdAt:Z0($.created_at),updatedAt:Z0($.updated_at)}}function uK($){return{eventId:Z0($.event_id),eventType:Z0($.event_type),source:Z0($.source),subject:m($.subject),occurredAt:Z0($.occurred_at),receivedAt:Z0($.received_at),workspaceRoot:m($.workspace_root),dedupeKey:m($.dedupe_key),payload:qQ(m($.payload_json)),attributes:qQ(m($.attributes_json)),processingStatus:Z0($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:m($.error),createdAt:Z0($.created_at),updatedAt:Z0($.updated_at)}}function dK($){return $?JSON.stringify($):null}var mN=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function lK($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function vN($,Z,Q,W){for(let J of mN){let X=$[J],Y=Z[J];if(lK(X)!==lK(Y))return!0}if(Q===!1&&W===!0)return!0;return!1}function cN($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function uN($){return`hub/schedules/${$}.cron.md`}function dN($){let Z={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(Z).length>0?Z:void 0}function _J($){return{triggerKind:"schedule",title:$.name.trim(),prompt:$.prompt,workspaceRoot:$.workspaceRoot.trim(),schedule:$.cronPattern.trim(),mode:$.mode??"act",systemPrompt:$.systemPrompt,modelSelection:$.modelSelection?JSON.parse(JSON.stringify($.modelSelection)):void 0,maxIterations:typeof $.maxIterations==="number"?Math.floor($.maxIterations):void 0,timeoutSeconds:typeof $.timeoutSeconds==="number"?Math.floor($.timeoutSeconds):void 0,maxParallel:typeof $.maxParallel==="number"?Math.max(1,Math.floor($.maxParallel)):1,source:"hub-schedule",tags:$.tags?.filter((Z)=>Z.trim().length>0),enabled:$.enabled!==!1,metadata:dN($)}}function pK($){return JSON.stringify(_J($))}function lN($,Z){let Q=$.metadata?{...$.metadata}:{},W=Z.createdBy===null?void 0:Z.createdBy!==void 0?Z.createdBy:typeof Q.__hubScheduleCreatedBy==="string"?Q.__hubScheduleCreatedBy:void 0,J=Z.cwd!==void 0?Z.cwd:typeof Q.__hubScheduleCwd==="string"?Q.__hubScheduleCwd:void 0,X=Z.runtimeOptions!==void 0?Z.runtimeOptions:Q.__hubRuntimeOptions&&typeof Q.__hubRuntimeOptions==="object"&&!Array.isArray(Q.__hubRuntimeOptions)?Q.__hubRuntimeOptions:void 0;return delete Q.__hubScheduleCreatedBy,delete Q.__hubScheduleCwd,delete Q.__hubRuntimeOptions,{name:Z.name??$.title,cronPattern:Z.cronPattern??$.scheduleExpr??"",prompt:Z.prompt??$.prompt??"",workspaceRoot:Z.workspaceRoot??$.workspaceRoot??"",cwd:J,modelSelection:Z.modelSelection!==void 0?Z.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:Z.enabled??$.enabled,mode:Z.mode??($.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"),systemPrompt:Z.systemPrompt===null?void 0:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,maxIterations:Z.maxIterations===null?void 0:Z.maxIterations!==void 0?Z.maxIterations:$.maxIterations,timeoutSeconds:Z.timeoutSeconds===null?void 0:Z.timeoutSeconds!==void 0?Z.timeoutSeconds:$.timeoutSeconds,maxParallel:Z.maxParallel??$.maxParallel??1,createdBy:W,tags:Z.tags??$.tags,runtimeOptions:X,metadata:Z.metadata!==void 0?Z.metadata:Object.keys(Q).length>0?Q:void 0}}class q5{db;constructor($={}){let Z=$.dbPath??gN();this.db=xN(Z),cK(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return Z?y$(Z):void 0}getSpec($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return Z?y$(Z):void 0}getSpecByExternalId($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return Z?y$(Z):void 0}listSpecs($={}){let Z=[],Q=[];if($.triggerKind)Z.push("trigger_kind = ?"),Q.push($.triggerKind);if(typeof $.enabled==="boolean")Z.push("enabled = ?"),Q.push($.enabled?1:0);if($.parseStatus)Z.push("parse_status = ?"),Q.push($.parseStatus);if(!$.includeRemoved)Z.push("removed = 0");let W=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${W} ORDER BY created_at DESC LIMIT ?`).all(...Q,J).map((Y)=>y$(Y))}createHubSchedule($){let Z=`sched_${O5()}`,Q=this.upsertSpec({externalId:Z,sourcePath:uN(Z),triggerKind:"schedule",sourceHash:pK($),parseStatus:"valid",spec:_J($)});this.initializeScheduleNextRun(Q.record.specId);let W=this.getSpec(Q.record.specId);if(!W)throw Error("failed to create hub schedule");return W}getHubSchedule($){let Z=this.db.prepare(`SELECT * FROM cron_specs
354
354
  WHERE external_id = ? AND source = 'hub-schedule' AND removed = 0
355
355
  ORDER BY created_at ASC LIMIT 1`).get($);return Z?y$(Z):void 0}listHubSchedules($={}){let Z=["source = 'hub-schedule'","trigger_kind = 'schedule'","removed = 0"],Q=[];if(typeof $.enabled==="boolean")Z.push("enabled = ?"),Q.push($.enabled?1:0);if($.tags&&$.tags.length>0)for(let X of $.tags)Z.push("tags_json LIKE ?"),Q.push(`%"${X.trim()}"%`);let W=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_specs
356
356
  WHERE ${Z.join(" AND ")}
357
- ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((X)=>y$(X))}updateHubSchedule($,Z){let Q=this.getHubSchedule($);if(!Q)return;let W=dN(Q,Z),J=this.upsertSpec({externalId:$,sourcePath:Q.sourcePath,triggerKind:"schedule",sourceHash:pK(W),parseStatus:"valid",spec:_J(W)});if(Z.cronPattern!==void 0||Z.enabled!==void 0)this.initializeScheduleNextRun(J.record.specId);return this.getSpec(J.record.specId)}deleteHubSchedule($){let Z=this.getHubSchedule($);if(!Z)return!1;return this.markSpecRemoved(Z.specId),this.cancelQueuedRunsForSpec(Z.specId),!0}enqueueHubScheduleRun($,Z="manual"){let Q=this.getHubSchedule($);if(!Q||!Q.enabled||Q.removed||Q.parseStatus!=="valid")return;return this.enqueueRun({specId:Q.specId,specRevision:Q.revision,triggerKind:Z,scheduledFor:M0()})}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
357
+ ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((X)=>y$(X))}updateHubSchedule($,Z){let Q=this.getHubSchedule($);if(!Q)return;let W=lN(Q,Z),J=this.upsertSpec({externalId:$,sourcePath:Q.sourcePath,triggerKind:"schedule",sourceHash:pK(W),parseStatus:"valid",spec:_J(W)});if(Z.cronPattern!==void 0||Z.enabled!==void 0)this.initializeScheduleNextRun(J.record.specId);return this.getSpec(J.record.specId)}deleteHubSchedule($){let Z=this.getHubSchedule($);if(!Z)return!1;return this.markSpecRemoved(Z.specId),this.cancelQueuedRunsForSpec(Z.specId),!0}enqueueHubScheduleRun($,Z="manual"){let Q=this.getHubSchedule($);if(!Q||!Q.enabled||Q.removed||Q.parseStatus!=="valid")return;return this.enqueueRun({specId:Q.specId,specRevision:Q.revision,triggerKind:Z,scheduledFor:M0()})}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
358
358
  WHERE trigger_kind = 'event'
359
359
  AND event_type = ?
360
360
  AND enabled = 1
361
361
  AND removed = 0
362
362
  AND parse_status = 'valid'
363
- ORDER BY created_at ASC`).all($).map((Q)=>y$(Q))}upsertSpec($){let Z=M0(),Q=this.getSpecBySourcePath($.sourcePath),W=$.spec,J={title:W?.title??Q?.title??vN($.sourcePath),prompt:W?.prompt,workspaceRoot:W?.workspaceRoot,scheduleExpr:W?.triggerKind==="schedule"?W.schedule:void 0,timezone:W?.triggerKind==="schedule"?W.timezone:void 0,eventType:W?.triggerKind==="event"?W.event:void 0,filters:W?.triggerKind==="event"?W.filters:void 0,debounceSeconds:W?.triggerKind==="event"?W.debounceSeconds:void 0,dedupeWindowSeconds:W?.triggerKind==="event"?W.dedupeWindowSeconds:void 0,cooldownSeconds:W?.triggerKind==="event"?W.cooldownSeconds:void 0,mode:W?.mode,systemPrompt:W?.systemPrompt,providerId:W?.modelSelection?.providerId,modelId:W?.modelSelection?.modelId,maxIterations:W?.maxIterations,timeoutSeconds:W?.timeoutSeconds,maxParallel:W&&"maxParallel"in W?W.maxParallel:void 0,tools:W?.tools,notesDirectory:W?.notesDirectory,extensions:W?.extensions,source:W?.source},X=$.parseStatus==="valid"&&(W?.enabled??!0);if(!Q){let B=`cspec_${O5()}`;this.insertSpecRow(B,$,J,X,Z);let G=this.getSpec(B);if(!G)throw Error("failed to insert cron_spec row");return{record:G,created:!0,revisionChanged:!0}}let j=Q.sourceHash!==$.sourceHash&&mN(Q,J,Q.enabled,X),V=j?Q.revision+1:Q.revision;this.updateSpecRow(Q.specId,$,J,X,V,Z);let H=this.getSpec(Q.specId);if(!H)throw Error("failed to reload cron_spec after update");return{record:H,created:!1,revisionChanged:j}}insertSpecRow($,Z,Q,W,J){let X=Z.spec;this.db.prepare(`INSERT INTO cron_specs (
363
+ ORDER BY created_at ASC`).all($).map((Q)=>y$(Q))}upsertSpec($){let Z=M0(),Q=this.getSpecBySourcePath($.sourcePath),W=$.spec,J={title:W?.title??Q?.title??cN($.sourcePath),prompt:W?.prompt,workspaceRoot:W?.workspaceRoot,scheduleExpr:W?.triggerKind==="schedule"?W.schedule:void 0,timezone:W?.triggerKind==="schedule"?W.timezone:void 0,eventType:W?.triggerKind==="event"?W.event:void 0,filters:W?.triggerKind==="event"?W.filters:void 0,debounceSeconds:W?.triggerKind==="event"?W.debounceSeconds:void 0,dedupeWindowSeconds:W?.triggerKind==="event"?W.dedupeWindowSeconds:void 0,cooldownSeconds:W?.triggerKind==="event"?W.cooldownSeconds:void 0,mode:W?.mode,systemPrompt:W?.systemPrompt,providerId:W?.modelSelection?.providerId,modelId:W?.modelSelection?.modelId,maxIterations:W?.maxIterations,timeoutSeconds:W?.timeoutSeconds,maxParallel:W&&"maxParallel"in W?W.maxParallel:void 0,tools:W?.tools,notesDirectory:W?.notesDirectory,extensions:W?.extensions,source:W?.source},X=$.parseStatus==="valid"&&(W?.enabled??!0);if(!Q){let B=`cspec_${O5()}`;this.insertSpecRow(B,$,J,X,Z);let G=this.getSpec(B);if(!G)throw Error("failed to insert cron_spec row");return{record:G,created:!0,revisionChanged:!0}}let j=Q.sourceHash!==$.sourceHash&&vN(Q,J,Q.enabled,X),V=j?Q.revision+1:Q.revision;this.updateSpecRow(Q.specId,$,J,X,V,Z);let H=this.getSpec(Q.specId);if(!H)throw Error("failed to reload cron_spec after update");return{record:H,created:!1,revisionChanged:j}}insertSpecRow($,Z,Q,W,J){let X=Z.spec;this.db.prepare(`INSERT INTO cron_specs (
364
364
  spec_id, external_id, source_path, trigger_kind,
365
365
  source_mtime_ms, source_hash, parse_status, parse_error,
366
366
  enabled, removed, title, prompt, workspace_root,
@@ -495,11 +495,11 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
495
495
  error = ?,
496
496
  scheduled_for = COALESCE(?, scheduled_for),
497
497
  updated_at = ?
498
- 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,M0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,M0(),$)}}class M5{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new q5({dbPath:$.dbPath});let Z=$.specs;this.reconciler=new fJ({store:this.store,specs:Z}),this.materializer=new L5({store:this.store}),this.eventIngress=new JJ({store:this.store,logger:$.logger}),this.runner=new _5({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:Z,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new UJ({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($)}}var $F={};N($F,{manifestToSessionRecord:()=>RQ,listSessionHistoryFromBackend:()=>qJ,listSessionHistory:()=>EQ,hydrateSessionHistory:()=>eK});import{readdir as iN,readFile as sK}from"node:fs/promises";import{join as oK}from"node:path";import{formatDisplayUserInput as nN,normalizeUserInput as aN}from"@cline/shared";import{resolveSessionDataDir as tK}from"@cline/shared/storage";import{existsSync as lN}from"node:fs";import{readFile as pN}from"node:fs/promises";import{formatDisplayUserInput as rK}from"@cline/shared";class R5{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 h$($){let Z=$?.trim();if(!Z||!lN(Z))return[];try{let Q=(await pN(Z,"utf8")).trim();if(!Q)return[];let W=JSON.parse(Q);if(Array.isArray(W))return iK(W);if(W&&typeof W==="object"&&!Array.isArray(W)){let J=W.messages;if(Array.isArray(J))return iK(J)}return[]}catch{return[]}}function rN($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:rK($.content)};return{...$,content:$.content.map((Z)=>{if(Z.type!=="text"||typeof Z.text!=="string")return Z;return{...Z,text:rK(Z.text)}})}}function iK($){return $.map(rN)}function zJ($){return $?{...$}:void 0}async function nK($,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 E5($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function n0($){let Z=E5($);if(!Z)return;return Z.toLowerCase()==="unknown"?void 0:Z}function MQ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function sN($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function OJ($){let Z=$??200;return Number.isFinite(Z)?Math.max(0,Math.floor(Z)):200}function oN($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function tN($){return $.isSubagent!==!0&&!E5($.parentSessionId)}function eN($){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 RQ($){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 $C($){let Z=OJ($);if(Z===0)return[];let Q=tK(),J=(await iN(Q,{withFileTypes:!0}).catch(()=>[])).filter((Y)=>Y.isDirectory()).map((Y)=>({entry:Y,recency:eN(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=oK(Q,j,`${j}.json`),H=await sK(V,"utf8").catch(()=>{return});if(!H)return;let B;try{B=JSON.parse(H)}catch{return}let G=P0.safeParse(B);if(!G.success)return;return RQ(G.data)}))).filter((Y)=>Boolean(Y)).sort((Y,j)=>j.startedAt.localeCompare(Y.startedAt)).slice(0,Z)}async function ZC($,Z,Q){let W=OJ(Z);if(W===0)return await $.listSessions(0),[];let J=Q.includeSubagents?W:oN(W),X=await $.listSessions(J);return(Q.includeSubagents?X:X.filter(tN)).slice(0,W)}function QC($){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(`
499
- `).trim()}function aK($){return $.replace(/\s+/g," ").trim()}function WC($,Z){if($.length<=Z)return $;return`${$.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function JC($){for(let Z of["user","assistant"])for(let Q of $){if(Q.role!==Z)continue;let W=aK(QC(Q.content));if(!W)continue;let J=Z==="user"?aK(nN(W)):W,X=aN(J.split(`
500
- `)[0]??J);return WC(X,50)}return}function XC($){let Z=0;for(let Q of $)Z+=MQ(Q.metrics?.cost)??0;return Z}function YC($){let Z,Q;for(let W=$.length-1;W>=0;W-=1){let J=$[W];if(!Z)Z=n0(J.modelInfo?.provider);if(!Q)Q=n0(J.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function jC($){return n0($?.provider)??n0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function VC($){return n0($?.model)??n0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function TJ($,Z){let Q=sN($.metadata),W=E5(Z?.title)??E5(Q?.title),J=MQ(Z?.totalCost)??MQ(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:n0(Z?.provider)??n0($.provider)??jC(Q)??"",model:n0(Z?.model)??n0($.model)??VC(Q)??"",metadata:X}}function HC($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function BC($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!HC(Q)}async function GC($,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 BC(Q,W)?{...Q,status:"idle"}:Q}))}async function eK($,Z){return await Promise.all(Z.map(async(Q)=>{let W=TJ(Q),J=Boolean(E5(W.metadata?.title)),X=Boolean(n0(W.provider)),Y=Boolean(n0(W.model)),j=MQ(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=YC(H),G=XC(H);return TJ(Q,{title:J?void 0:JC(H),provider:X?void 0:B.provider,model:Y?void 0:B.model,totalCost:V||G<=0?void 0:G})}))}async function EQ($,Z={}){let Q=OJ(Z.limit),W=Z.includeSubagents===!0,J=await ZC($,Q,{includeSubagents:W}),X=Z.includeManifestFallback===!0&&J.length<Q?await $C(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 GC($,j);if(Z.hydrate===!1)return V.map((H)=>TJ(H));return await eK($,V)}async function KC($){let Z=$.trim();if(!Z)return;let Q=oK(tK(),Z,`${Z}.json`),W=await sK(Q,"utf8").catch(()=>{return});if(!W)return;try{let J=P0.safeParse(JSON.parse(W));return J.success?J.data.messages_path:void 0}catch{return}}async function qJ($,Z={}){let Q=new Map;return await EQ({listSessions:async(J)=>{let X=await $.listSessions(J);Q.clear();for(let Y of X)Q.set(Y.sessionId,Y);return X.map(R6)},readSessionMessages:async(J)=>{let X=Q.get(J)?.messagesPath??await KC(J);return await h$(X)}},Z)}var FA={};N(FA,{resolveSessionBackend:()=>XX,createRuntimeHost:()=>V4});import{captureSdkError as GA}from"@cline/shared";import{createSessionId as Yw,isHubProtocolCompatible as jw,resolveClineBuildEnv as Vw,resolveHubCommandTimeoutMs as Hw}from"@cline/shared";import{spawn as xC}from"node:child_process";import{closeSync as gC,mkdirSync as mC,openSync as vC}from"node:fs";import{basename as cC,dirname as uC,join as dC}from"node:path";import{fileURLToPath as lC}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as pC,isHubDaemonProcess as AF,isHubProtocolCompatible as rC,resolveClineBuildEnv as fF,withResolvedClineBuildEnv as iC}from"@cline/shared";import{createHash as FC,randomBytes as AC}from"node:crypto";import{existsSync as fC}from"node:fs";import{chmod as UC,mkdir as MJ,readFile as XF,rm as RJ,writeFile as YF}from"node:fs/promises";import{dirname as jF,join as EJ}from"node:path";import{resolveClineDataDir as P2,resolveClineDir as VF}from"@cline/shared/storage";var QF="0.0.55";var N5={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:QF,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 DC="CLINE_HUB_DISCOVERY_PATH",LC="CLINE_HUB_BUILD_ID",WF=30000,_C=15000,zC=100;function TC($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function OC($){return FC("sha256").update($).digest("hex").slice(0,12)}function qC($){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 NQ(){return AC(32).toString("hex")}function MC($){return new Promise((Z)=>setTimeout(Z,$))}function RC($){return`${$}.lock`}async function EC($){try{let Z=JSON.parse(await XF(EJ($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function JF($){await RJ($,{recursive:!0,force:!0}).catch(()=>{return})}function CQ(){return process.env[LC]?.trim()||String(N5.version)}function n1($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${OC($)}`,Q=process.env[DC]?.trim()||EJ(P2(),"locks","hub","owners",`${TC(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function HF($=`hub-${Date.now().toString(36)}`){return n1($)}async function f0($){try{let Z=JSON.parse(await XF($,"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 wQ($,Z){await MJ(jF($),{recursive:!0}),await RJ($,{force:!0}).catch(()=>{return}),await YF($,`${JSON.stringify(Z,null,2)}
501
- `,{encoding:"utf8",mode:384}),await UC($,384)}async function b0($){await RJ($,{force:!0}).catch(()=>{return})}async function PQ($,Z){let Q=RC($);await MJ(jF(Q),{recursive:!0});let W=Date.now()+_C;while(!0)try{await MJ(Q,{recursive:!1}),await YF(EJ(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
502
- `,"utf8");try{return await Z()}finally{await JF(Q)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let Y=await EC(Q),j=Y?Date.now()-Date.parse(Y.acquiredAt):WF+1;if(!Y||!qC(Y.pid)||j>WF){await JF(Q);continue}if(Date.now()>=W)throw Error(`Timed out waiting for hub startup lock ${Q}`);await MC(zC)}}async function a1($,Z){try{let Q=await fetch(Z?.authToken?NJ($):SQ($),{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 V1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function SQ($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function NJ($){let Z=new URL(SQ($));return Z.pathname="/status",Z.toString()}function BF($){return fC($)}import{CLINE_HUB_DEV_PORT as NC,CLINE_HUB_PORT as CC,resolveClineBuildEnv as wC}from"@cline/shared";var PC="CLINE_HUB_HOST",SC="CLINE_HUB_PORT",bC="CLINE_HUB_PATHNAME",CJ="127.0.0.1",wJ=CC,PJ="/hub";function GF($){return wC($)==="development"?NC:wJ}function SJ($={}){return($.env??process.env)[PC]?.trim()||CJ}function s8($={}){let Q=($.env??process.env)[SC]?.trim();if(!Q)return GF($);let W=Number.parseInt(Q,10);if(!Number.isInteger(W)||W<1||W>65535)return GF($);return W}function bJ($={}){return($.env??process.env)[bC]?.trim()||PJ}function a0($={},Z={}){return{host:$.host??SJ(Z),port:$.port??s8(Z),pathname:$.pathname??bJ(Z)}}import{join as yC}from"node:path";var hC="shared:cline",kC="CLINE_HUB_DISCOVERY_PATH",IC="hub-production";function KF($){let Z=d1($.trim());return n1(`workspace:${Z||$.trim()}`)}function y0($=hC){return n1($)}function s0(){return{ownerId:IC,discoveryPath:process.env[kC]?.trim()||yC(P2(),"locks","hub","production.json")}}var nC=8000,aC=200,sC=3000,oC=100,tC=[100,250,500,1000,2000],eC="--cline-hub-daemon";function $w($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function Zw(){try{let $=dC(P2(),"logs","hub-daemon.log");return mC(uC($),{recursive:!0}),{fd:vC($,"a"),logPath:$}}catch{return}}function UF(){return fF()==="production"?s0():y0()}function S2($){return rC($).compatible}function FF($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function b2($,Z){try{return await a1($,{authToken:Z})}catch{return}}async function Qw($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await b2($))?.url)return!0;await new Promise((J)=>setTimeout(J,oC))}return!1}async function bQ($,Z){if(await w5($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await Qw($.url,sC);return await b0(Z).catch(()=>{return}),Q}async function C5($,Z){if(S2($))return!0;return bQ($,Z)}async function DF($){if(fF()!=="production")return;let Z=y0();if(Z.discoveryPath===$.discoveryPath)return;let Q=await f0(Z.discoveryPath);if(Q?.url)await bQ(Q,Z.discoveryPath);else await b0(Z.discoveryPath).catch(()=>{return})}function Ww(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return lC(new URL(`./entry.${$}`,import.meta.url))}function Jw($,Z){let Q=Ww(),W=process.execPath?.trim();if(!W)throw Error("unable to resolve runtime executable for hub daemon");let J=cC(W).toLowerCase().includes("bun"),X=Q.startsWith("/$bunfs/"),Y=J&&Q.toLowerCase().endsWith(".ts"),j=X?[eC]:[...Y?["--conditions=development"]:[],Q];return{launcher:W,args:[...j,"--cwd",$,...$w(Z)],cwd:$,env:{...iC(process.env),CLINE_NO_INTERACTIVE:"1",[pC]:"1"}}}function Xw($){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 yJ($,Z={}){if(AF())return;let Q=Jw($,Z),W=Zw();try{xC(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)gC(W.fd)}}async function o8($,Z={}){for(let Q=0;;Q++)try{yJ($,Z);return}catch(W){let J=tC[Q];if(!Xw(W)||J===void 0)throw W;await new Promise((X)=>setTimeout(X,J))}}function yQ($,Z={}){if(AF())return;let Q=UF(),W=a0(Z),J=V1(W.host,W.port,W.pathname),X=Z.allowPortFallback===!0&&W.port!==0;DF(Q).catch(()=>{return}).then(()=>f0(Q.discoveryPath)).then(async(Y)=>{let j=!1;if(Y?.url)if(!Y.authToken){if(j=!0,!await bQ(Y,Q.discoveryPath)&&!X)return}else{let B=await b2(Y.url,Y.authToken);if(B?.url&&S2(B)&&await f1(B.url,{authToken:Y.authToken}))return;if(B?.url)await C5({...B,authToken:Y.authToken},Q.discoveryPath);else await b0(Q.discoveryPath).catch(()=>{return})}let V=await b2(J);if(V?.url){if(S2(V)){if(!X||!j)return}else if(!await C5({...V,authToken:void 0},Q.discoveryPath)&&!X)return}let H=X?{...W,port:0}:W;await o8($,H)}).catch(()=>{})}async function LF($,Z={}){let Q=UF(),W=Z.host!==void 0||Z.port!==void 0||Z.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=a0(Z),X=V1(J.host,J.port,J.pathname),Y=(F)=>{if(!W)k$(F.url,F.authToken);return F};await DF(Q).catch(()=>{return});let j=await f0(Q.discoveryPath),V=!1;if(j?.url){let F=j.authToken;if(!F)V=!0,await bQ(j,Q.discoveryPath);else{let A=await b2(j.url,F);if(A?.url&&S2(A)&&await f1(A.url,{authToken:F}))return Y({url:A.url,authToken:F});if(A?.url)await C5({...A,authToken:F},Q.discoveryPath);else await b0(Q.discoveryPath).catch(()=>{return})}}let H=await b2(X);if(H?.url){let F=FF(H,j,X);if(S2(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 C5(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 o8($,G);let K=Date.now()+nC;while(Date.now()<K){let F=await f0(Q.discoveryPath);if(F?.url&&F.authToken){let L=await b2(F.url,F.authToken);if(L?.url&&S2(L)&&await f1(L.url,{authToken:F.authToken}))return Y({url:L.url,authToken:F.authToken})}let A=await b2(X);if(A?.url&&!S2(A)){let L=FF(A,F,X);if(!await C5(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,aC))}throw Error("Timed out waiting for detached hub startup.")}function hQ(){return Vw()==="production"?s0():y0()}function Bw(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function qF($){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 qF($.data);return String($)}function Gw($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function _F($){let Z=$,Q=Gw(Z.reason);return new E0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:hJ,{closeCode:Z.code,closeReason:Q||void 0})}function Kw($,Z){if($ instanceof E0)return $;if($ instanceof Error)return new E0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new E0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new E0("hub_connect_failed",Q);let W=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new E0("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 Fw=8000,Aw=200,zF="*",TF=8000,fw="cline-hub-auth.",MF=new Map,RF=new Set,Uw=3000,Dw=3000,Lw=100,hJ="Hub connection closed",_w=250,zw=5000,OF=0.5;class E0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function xJ($){return $ instanceof E0}class t8 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function kQ($,Z){return $ instanceof t8&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function EF($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=gJ($.toString());return Q?MF.get(Q):void 0}function Tw($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function gJ($){if(!Tw($))return;let Z=new URL(I$($));return Z.search="",Z.hash="",Z.toString()}function kJ($){let Z=gJ($);return!!Z&&RF.has(Z)}function k$($,Z){let Q=gJ($);if(Q){if(RF.add(Q),Z?.trim())MF.set(Q,Z)}return $}class H1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new E0("hub_connection_closed",hJ);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),Z=this.options.authToken?.trim()||EF($);$.hash="";let W=new(Bw())($.toString(),Z?[`${fw}${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 E0("hub_connect_timeout",`Timed out connecting to hub after ${TF}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{W.close()}catch{}Y(this.lastCloseError)},TF);W.addEventListener("open",()=>{if(j)return;j=!0,clearTimeout(V),X()}),W.addEventListener("error",(H)=>{if(j)return;j=!0,clearTimeout(V),this.lastCloseError=Kw(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=_F(H),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)})}),W.addEventListener("message",(X)=>{this.handleFrame(JSON.parse(qF(X)))}),W.addEventListener("close",(X)=>{if(this.socket!==W)return;if(!J)this.lastCloseError=_F(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=Yw("hubreq_"),X=Hw($,W?.timeoutMs),Y=new Promise((V,H)=>{let B=X===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;H(new t8($,"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===E2){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new r1(V,j.error.message)}throw new t8($,j.error?.code,j.error?.message??`Hub command ${$} failed`)}return j}async recoverLocalHubTransport($){if(!kJ(this.currentUrl)||!xJ($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await y2({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(_w*2**this.reconnectAttempt,zw),Z=Math.round($*(1-OF)+Math.random()*$*OF);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(!kJ(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await y2({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 E0("hub_connection_closed",hJ),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 E0("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 $??zF}subscriptionSessionIdFromKey($){return $===zF?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 I$($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function f1($,Z){let Q=new H1({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 IJ($,Z){let Q=I$($),W=await a1(Q,{authToken:Z?.authToken});if(!W)return{status:"unreachable",url:Q};if(!jw(W).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await f1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function Ow($){let Z=Date.now()+Fw;while(Date.now()<Z){let Q=await f0($.discoveryPath);if(Q?.url){let W=await IJ(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(W.status==="compatible")return k$(W.url,Q.authToken)}await new Promise((W)=>setTimeout(W,Aw))}return}async function qw($){let Z=Date.now()+Dw;while(Date.now()<Z){if(!(await a1($).catch(()=>{return}))?.url)return!0;await new Promise((W)=>setTimeout(W,Lw))}return!1}function Mw($,Z){try{return I$($)===I$(Z)}catch{return!1}}function Rw($){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 Ew($,Z,Q){let W=new H1({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:Uw});return!Rw(J.payload)}catch{return!1}finally{await W.dispose().catch(()=>{return})}}async function P5($={}){if($.endpoint?.trim()){let J=await IJ($.endpoint);return J.status==="compatible"?J.url:void 0}let Z=hQ(),Q=await f0(Z.discoveryPath);if(!Q?.url)return;let W=await IJ(Q.url,{authToken:Q.authToken});if(W.status==="compatible")return k$(W.url,Q.authToken);if(W.status==="protocol_mismatch")await b0(Z.discoveryPath).catch(()=>{return});return}async function y2($={}){let Z=await P5($);if(Z&&await f1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;let Q=hQ();return await o8($.workspaceRoot??process.cwd()),await Ow(Q)}async function w5($,Z){let Q=new URL($),W=Z?.trim()||EF(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 mJ($=hQ()){let Z=await f0($.discoveryPath);if(!Z?.url)return!1;try{if(await w5(Z.url,Z.authToken))return!0}catch{}return!1}async function IQ($){if(!kJ($.url))return;let Z=hQ(),Q=await f0(Z.discoveryPath);if(!Q?.url||!Mw(Q.url,$.url))return;if(!await Ew(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await mJ())return;if(!await qw(Q.url))return;return await b0(Z.discoveryPath).catch(()=>{return}),await y2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var mF={};N(mF,{HubRuntimeHost:()=>s1});import{captureSdkError as CF,createSessionId as wF,HUB_CHECKPOINT_CAPABILITY as Pw,HUB_COMPACTION_CAPABILITY as Sw,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as bw,HUB_HOOK_CAPABILITY_PREFIX as yw,HUB_MISTAKE_LIMIT_CAPABILITY as hw,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as kw,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Iw,isHubToolExecutorName as xw}from"@cline/shared";var NF={};N(NF,{createCoreSessionSnapshot:()=>U1,coreSessionSnapshotToRecord:()=>xQ});function Nw($){return $?JSON.parse(JSON.stringify($)):void 0}function Cw($){return $?JSON.parse(JSON.stringify($)):void 0}function ww($){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 U1($){let{session:Z}=$,Q=Nw(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:Cw($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let W=ww(Q);return W?{checkpoint:W}:{}})()}}function xQ($){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 e8($){if(!$)return;return JSON.parse(JSON.stringify($))}var gw=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function PF($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function SF($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function bF($){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 h2($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function yF($,Z){let Q={manifest:[],handlers:new Map};for(let J of Object.keys(Z.toolExecutors??{}).filter(xw)){let X=Z.toolExecutors?.[J];if(typeof X!=="function")continue;h2(Q,{kind:"toolExecutor",executor:J,capabilityName:`${kw}${J}`},async({payload:Y,abortSignal:j})=>{let V=Array.isArray(Y.args)?[...Y.args]:[],H={...bF(Y.context),signal:j};return{result:await X(...V,H)}})}for(let J of $?.extraTools??[])h2(Q,{kind:"tool",name:J.name,description:J.description,inputSchema:e8(J.inputSchema)??{},...J.lifecycle?{lifecycle:e8(J.lifecycle)}:{},capabilityName:`${bw}${J.name}`},async({payload:X,abortSignal:Y,progress:j})=>{let V={...bF(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 gw){let X=W[J];if(typeof X!=="function")continue;h2(Q,{kind:"hook",name:J,capabilityName:`${yw}${J}`},async({payload:Y})=>({control:await X(Y.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;h2(Q,{kind:"compaction",capabilityName:Sw,config:PF($.compaction)},async({payload:X})=>({result:await J(X.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;h2(Q,{kind:"checkpoint",capabilityName:Pw,config:PF($.checkpoint)},async({payload:X})=>({result:await J(X.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;h2(Q,{kind:"mistakeLimit",capabilityName:hw},async({payload:X})=>({result:await J(X.context)}))}if($?.userInstructionService){let J=$.userInstructionService;h2(Q,{kind:"userInstructionService",capabilityName:Iw},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 xF($){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 mw($){return xF($)??"Capability request was cancelled."}function vw($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function cw($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function uw($){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 hF($){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 vJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function x$($,Z){return vJ($?.[Z])??0}function dw($){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:x$(Z,"inputTokens"),outputTokens:x$(Z,"outputTokens"),cacheReadTokens:x$(Z,"cacheReadTokens"),cacheWriteTokens:x$(Z,"cacheWriteTokens"),cost:vJ(Z?.totalCost),totalInputTokens:x$(Q,"inputTokens"),totalOutputTokens:x$(Q,"outputTokens"),totalCacheReadTokens:x$(Q,"cacheReadTokens"),totalCacheWriteTokens:x$(Q,"cacheWriteTokens"),totalCost:vJ(Q?.totalCost)},teamAgentId:typeof W?.teamAgentId==="string"?W.teamAgentId:void 0,teamRole:J}}function lw($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,W=cw(Q)?Q:Q==="failed"?"error":"completed",J=uw($?.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 gQ($,Z){return $.error?.message??`hub command failed: ${Z}`}function S5($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function gF($){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:z0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:S5($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:S5($.status)==="completed"?0:S5($.status)==="failed"?1:void 0,status:S5($.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 g$($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function pw($){let Z=g$($?.snapshot);if(Z)return xQ(Z);let Q=$?.session;return Q?gF(Q):void 0}function kF($,Z,Q){let W=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot||Z.config.cwd;return P0.parse({version:1,session_id:$,source:Z.source??z0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:S5(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 IF($,Z){return P0.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 s1{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new R5;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=q0($.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 H1({...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(!kQ($,"session.create"))return!1;let Z=await IQ({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=yF($.localRuntime,Z),W=$.config.sessionId?.trim()||wF(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:e8({...$.config,sessionId:W}),metadata:{...$.sessionMetadata??{},source:$.source??z0.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:e8($.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=g$(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?IF(Y,$):kF(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?yF(W.localRuntime,J??{}):{manifest:[],handlers:new Map},Y=W?W.config.sessionId?.trim()||wF():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:e8({...W.config,sessionId:Y}),metadata:{...W.sessionMetadata??{},source:W.source??z0.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:e8(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=g$(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?IF(V,W??{}):kF(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=g$(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=hF(W?.usage),X=hF(W?.aggregateUsage);return J||X?{usage:J,aggregateUsage:X}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:xF(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(i1(Q))return;throw Q}return pw(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=g$(J);return X?[xQ(X)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(gF)}async listSettings($){let Z=await this.client.command("settings.list",SF($));if(!Z.ok)throw Error(gQ(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",SF($));if(!Z.ok)throw Error(gQ(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 CF(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(gQ(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(gQ(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 q0(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:lw($.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=g$($.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=dw($.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=g$($.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=g$($.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&&H0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:W,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{CF(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(mw($.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=vw($.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(()=>{})}}var vF={};N(vF,{RemoteRuntimeHost:()=>$4});class $4 extends s1{constructor($){super({url:I$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var cF={};N(cF,{SqliteSessionStore:()=>L1});import{existsSync as rw,mkdirSync as iw}from"node:fs";import{join as nw}from"node:path";import{asBool as b5,asOptionalString as D1,asString as o1,ensureSessionSchema as aw,loadSqliteDb as sw,nowIso as mQ,toBoolInt as y5}from"@cline/shared/db";import{resolveDbDataDir as ow}from"@cline/shared/storage";class L1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??ow()}init(){this.getRawDb()}ensureSessionsDir(){if(!rw(this.sessionsDirPath))iw(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return nw(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=sw(this.sessionDbPath());return aw($,{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=mQ();this.run(`INSERT OR REPLACE INTO sessions (
498
+ 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,M0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,M0(),$)}}class M5{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new q5({dbPath:$.dbPath});let Z=$.specs;this.reconciler=new fJ({store:this.store,specs:Z}),this.materializer=new L5({store:this.store}),this.eventIngress=new JJ({store:this.store,logger:$.logger}),this.runner=new _5({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:Z,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new UJ({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($)}}var $F={};N($F,{manifestToSessionRecord:()=>RQ,listSessionHistoryFromBackend:()=>qJ,listSessionHistory:()=>EQ,hydrateSessionHistory:()=>eK});import{readdir as nN,readFile as sK}from"node:fs/promises";import{join as oK}from"node:path";import{formatDisplayUserInput as aN,normalizeUserInput as sN}from"@cline/shared";import{resolveSessionDataDir as tK}from"@cline/shared/storage";import{existsSync as pN}from"node:fs";import{readFile as rN}from"node:fs/promises";import{formatDisplayUserInput as rK}from"@cline/shared";class R5{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 h$($){let Z=$?.trim();if(!Z||!pN(Z))return[];try{let Q=(await rN(Z,"utf8")).trim();if(!Q)return[];let W=JSON.parse(Q);if(Array.isArray(W))return iK(W);if(W&&typeof W==="object"&&!Array.isArray(W)){let J=W.messages;if(Array.isArray(J))return iK(J)}return[]}catch{return[]}}function iN($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:rK($.content)};return{...$,content:$.content.map((Z)=>{if(Z.type!=="text"||typeof Z.text!=="string")return Z;return{...Z,text:rK(Z.text)}})}}function iK($){return $.map(iN)}function zJ($){return $?{...$}:void 0}async function nK($,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 E5($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function n0($){let Z=E5($);if(!Z)return;return Z.toLowerCase()==="unknown"?void 0:Z}function MQ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function oN($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function OJ($){let Z=$??200;return Number.isFinite(Z)?Math.max(0,Math.floor(Z)):200}function tN($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function eN($){return $.isSubagent!==!0&&!E5($.parentSessionId)}function $C($){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 RQ($){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 ZC($){let Z=OJ($);if(Z===0)return[];let Q=tK(),J=(await nN(Q,{withFileTypes:!0}).catch(()=>[])).filter((Y)=>Y.isDirectory()).map((Y)=>({entry:Y,recency:$C(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=oK(Q,j,`${j}.json`),H=await sK(V,"utf8").catch(()=>{return});if(!H)return;let B;try{B=JSON.parse(H)}catch{return}let G=P0.safeParse(B);if(!G.success)return;return RQ(G.data)}))).filter((Y)=>Boolean(Y)).sort((Y,j)=>j.startedAt.localeCompare(Y.startedAt)).slice(0,Z)}async function QC($,Z,Q){let W=OJ(Z);if(W===0)return await $.listSessions(0),[];let J=Q.includeSubagents?W:tN(W),X=await $.listSessions(J);return(Q.includeSubagents?X:X.filter(eN)).slice(0,W)}function WC($){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(`
499
+ `).trim()}function aK($){return $.replace(/\s+/g," ").trim()}function JC($,Z){if($.length<=Z)return $;return`${$.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function XC($){for(let Z of["user","assistant"])for(let Q of $){if(Q.role!==Z)continue;let W=aK(WC(Q.content));if(!W)continue;let J=Z==="user"?aK(aN(W)):W,X=sN(J.split(`
500
+ `)[0]??J);return JC(X,50)}return}function YC($){let Z=0;for(let Q of $)Z+=MQ(Q.metrics?.cost)??0;return Z}function jC($){let Z,Q;for(let W=$.length-1;W>=0;W-=1){let J=$[W];if(!Z)Z=n0(J.modelInfo?.provider);if(!Q)Q=n0(J.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function VC($){return n0($?.provider)??n0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function HC($){return n0($?.model)??n0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function TJ($,Z){let Q=oN($.metadata),W=E5(Z?.title)??E5(Q?.title),J=MQ(Z?.totalCost)??MQ(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:n0(Z?.provider)??n0($.provider)??VC(Q)??"",model:n0(Z?.model)??n0($.model)??HC(Q)??"",metadata:X}}function BC($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function GC($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!BC(Q)}async function KC($,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 GC(Q,W)?{...Q,status:"idle"}:Q}))}async function eK($,Z){return await Promise.all(Z.map(async(Q)=>{let W=TJ(Q),J=Boolean(E5(W.metadata?.title)),X=Boolean(n0(W.provider)),Y=Boolean(n0(W.model)),j=MQ(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=jC(H),G=YC(H);return TJ(Q,{title:J?void 0:XC(H),provider:X?void 0:B.provider,model:Y?void 0:B.model,totalCost:V||G<=0?void 0:G})}))}async function EQ($,Z={}){let Q=OJ(Z.limit),W=Z.includeSubagents===!0,J=await QC($,Q,{includeSubagents:W}),X=Z.includeManifestFallback===!0&&J.length<Q?await ZC(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 KC($,j);if(Z.hydrate===!1)return V.map((H)=>TJ(H));return await eK($,V)}async function FC($){let Z=$.trim();if(!Z)return;let Q=oK(tK(),Z,`${Z}.json`),W=await sK(Q,"utf8").catch(()=>{return});if(!W)return;try{let J=P0.safeParse(JSON.parse(W));return J.success?J.data.messages_path:void 0}catch{return}}async function qJ($,Z={}){let Q=new Map;return await EQ({listSessions:async(J)=>{let X=await $.listSessions(J);Q.clear();for(let Y of X)Q.set(Y.sessionId,Y);return X.map(R6)},readSessionMessages:async(J)=>{let X=Q.get(J)?.messagesPath??await FC(J);return await h$(X)}},Z)}var FA={};N(FA,{resolveSessionBackend:()=>XX,createRuntimeHost:()=>V4});import{captureSdkError as GA}from"@cline/shared";import{createSessionId as jw,isHubProtocolCompatible as Vw,resolveClineBuildEnv as Hw,resolveHubCommandTimeoutMs as Bw}from"@cline/shared";import{spawn as gC}from"node:child_process";import{closeSync as mC,mkdirSync as vC,openSync as cC}from"node:fs";import{basename as uC,dirname as dC,join as lC}from"node:path";import{fileURLToPath as pC}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as rC,isHubDaemonProcess as AF,isHubProtocolCompatible as iC,resolveClineBuildEnv as fF,withResolvedClineBuildEnv as nC}from"@cline/shared";import{createHash as AC,randomBytes as fC}from"node:crypto";import{existsSync as UC}from"node:fs";import{chmod as DC,mkdir as MJ,readFile as XF,rm as RJ,writeFile as YF}from"node:fs/promises";import{dirname as jF,join as EJ}from"node:path";import{resolveClineDataDir as P2,resolveClineDir as VF}from"@cline/shared/storage";var QF="0.0.56";var N5={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:QF,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 LC="CLINE_HUB_DISCOVERY_PATH",_C="CLINE_HUB_BUILD_ID",WF=30000,zC=15000,TC=100;function OC($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function qC($){return AC("sha256").update($).digest("hex").slice(0,12)}function MC($){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 NQ(){return fC(32).toString("hex")}function RC($){return new Promise((Z)=>setTimeout(Z,$))}function EC($){return`${$}.lock`}async function NC($){try{let Z=JSON.parse(await XF(EJ($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function JF($){await RJ($,{recursive:!0,force:!0}).catch(()=>{return})}function CQ(){return process.env[_C]?.trim()||String(N5.version)}function n1($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${qC($)}`,Q=process.env[LC]?.trim()||EJ(P2(),"locks","hub","owners",`${OC(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function HF($=`hub-${Date.now().toString(36)}`){return n1($)}async function f0($){try{let Z=JSON.parse(await XF($,"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 wQ($,Z){await MJ(jF($),{recursive:!0}),await RJ($,{force:!0}).catch(()=>{return}),await YF($,`${JSON.stringify(Z,null,2)}
501
+ `,{encoding:"utf8",mode:384}),await DC($,384)}async function b0($){await RJ($,{force:!0}).catch(()=>{return})}async function PQ($,Z){let Q=EC($);await MJ(jF(Q),{recursive:!0});let W=Date.now()+zC;while(!0)try{await MJ(Q,{recursive:!1}),await YF(EJ(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
502
+ `,"utf8");try{return await Z()}finally{await JF(Q)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let Y=await NC(Q),j=Y?Date.now()-Date.parse(Y.acquiredAt):WF+1;if(!Y||!MC(Y.pid)||j>WF){await JF(Q);continue}if(Date.now()>=W)throw Error(`Timed out waiting for hub startup lock ${Q}`);await RC(TC)}}async function a1($,Z){try{let Q=await fetch(Z?.authToken?NJ($):SQ($),{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 V1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function SQ($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function NJ($){let Z=new URL(SQ($));return Z.pathname="/status",Z.toString()}function BF($){return UC($)}import{CLINE_HUB_DEV_PORT as CC,CLINE_HUB_PORT as wC,resolveClineBuildEnv as PC}from"@cline/shared";var SC="CLINE_HUB_HOST",bC="CLINE_HUB_PORT",yC="CLINE_HUB_PATHNAME",CJ="127.0.0.1",wJ=wC,PJ="/hub";function GF($){return PC($)==="development"?CC:wJ}function SJ($={}){return($.env??process.env)[SC]?.trim()||CJ}function s8($={}){let Q=($.env??process.env)[bC]?.trim();if(!Q)return GF($);let W=Number.parseInt(Q,10);if(!Number.isInteger(W)||W<1||W>65535)return GF($);return W}function bJ($={}){return($.env??process.env)[yC]?.trim()||PJ}function a0($={},Z={}){return{host:$.host??SJ(Z),port:$.port??s8(Z),pathname:$.pathname??bJ(Z)}}import{join as hC}from"node:path";var kC="shared:cline",IC="CLINE_HUB_DISCOVERY_PATH",xC="hub-production";function KF($){let Z=d1($.trim());return n1(`workspace:${Z||$.trim()}`)}function y0($=kC){return n1($)}function s0(){return{ownerId:xC,discoveryPath:process.env[IC]?.trim()||hC(P2(),"locks","hub","production.json")}}var aC=8000,sC=200,oC=3000,tC=100,eC=[100,250,500,1000,2000],$w="--cline-hub-daemon";function Zw($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function Qw(){try{let $=lC(P2(),"logs","hub-daemon.log");return vC(dC($),{recursive:!0}),{fd:cC($,"a"),logPath:$}}catch{return}}function UF(){return fF()==="production"?s0():y0()}function S2($){return iC($).compatible}function FF($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function b2($,Z){try{return await a1($,{authToken:Z})}catch{return}}async function Ww($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await b2($))?.url)return!0;await new Promise((J)=>setTimeout(J,tC))}return!1}async function bQ($,Z){if(await w5($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await Ww($.url,oC);return await b0(Z).catch(()=>{return}),Q}async function C5($,Z){if(S2($))return!0;return bQ($,Z)}async function DF($){if(fF()!=="production")return;let Z=y0();if(Z.discoveryPath===$.discoveryPath)return;let Q=await f0(Z.discoveryPath);if(Q?.url)await bQ(Q,Z.discoveryPath);else await b0(Z.discoveryPath).catch(()=>{return})}function Jw(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return pC(new URL(`./entry.${$}`,import.meta.url))}function Xw($,Z){let Q=Jw(),W=process.execPath?.trim();if(!W)throw Error("unable to resolve runtime executable for hub daemon");let J=uC(W).toLowerCase().includes("bun"),X=Q.startsWith("/$bunfs/"),Y=J&&Q.toLowerCase().endsWith(".ts"),j=X?[$w]:[...Y?["--conditions=development"]:[],Q];return{launcher:W,args:[...j,"--cwd",$,...Zw(Z)],cwd:$,env:{...nC(process.env),CLINE_NO_INTERACTIVE:"1",[rC]:"1"}}}function Yw($){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 yJ($,Z={}){if(AF())return;let Q=Xw($,Z),W=Qw();try{gC(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)mC(W.fd)}}async function o8($,Z={}){for(let Q=0;;Q++)try{yJ($,Z);return}catch(W){let J=eC[Q];if(!Yw(W)||J===void 0)throw W;await new Promise((X)=>setTimeout(X,J))}}function yQ($,Z={}){if(AF())return;let Q=UF(),W=a0(Z),J=V1(W.host,W.port,W.pathname),X=Z.allowPortFallback===!0&&W.port!==0;DF(Q).catch(()=>{return}).then(()=>f0(Q.discoveryPath)).then(async(Y)=>{let j=!1;if(Y?.url)if(!Y.authToken){if(j=!0,!await bQ(Y,Q.discoveryPath)&&!X)return}else{let B=await b2(Y.url,Y.authToken);if(B?.url&&S2(B)&&await f1(B.url,{authToken:Y.authToken}))return;if(B?.url)await C5({...B,authToken:Y.authToken},Q.discoveryPath);else await b0(Q.discoveryPath).catch(()=>{return})}let V=await b2(J);if(V?.url){if(S2(V)){if(!X||!j)return}else if(!await C5({...V,authToken:void 0},Q.discoveryPath)&&!X)return}let H=X?{...W,port:0}:W;await o8($,H)}).catch(()=>{})}async function LF($,Z={}){let Q=UF(),W=Z.host!==void 0||Z.port!==void 0||Z.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=a0(Z),X=V1(J.host,J.port,J.pathname),Y=(F)=>{if(!W)k$(F.url,F.authToken);return F};await DF(Q).catch(()=>{return});let j=await f0(Q.discoveryPath),V=!1;if(j?.url){let F=j.authToken;if(!F)V=!0,await bQ(j,Q.discoveryPath);else{let A=await b2(j.url,F);if(A?.url&&S2(A)&&await f1(A.url,{authToken:F}))return Y({url:A.url,authToken:F});if(A?.url)await C5({...A,authToken:F},Q.discoveryPath);else await b0(Q.discoveryPath).catch(()=>{return})}}let H=await b2(X);if(H?.url){let F=FF(H,j,X);if(S2(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 C5(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 o8($,G);let K=Date.now()+aC;while(Date.now()<K){let F=await f0(Q.discoveryPath);if(F?.url&&F.authToken){let L=await b2(F.url,F.authToken);if(L?.url&&S2(L)&&await f1(L.url,{authToken:F.authToken}))return Y({url:L.url,authToken:F.authToken})}let A=await b2(X);if(A?.url&&!S2(A)){let L=FF(A,F,X);if(!await C5(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,sC))}throw Error("Timed out waiting for detached hub startup.")}function hQ(){return Hw()==="production"?s0():y0()}function Gw(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function qF($){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 qF($.data);return String($)}function Kw($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function _F($){let Z=$,Q=Kw(Z.reason);return new E0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:hJ,{closeCode:Z.code,closeReason:Q||void 0})}function Fw($,Z){if($ instanceof E0)return $;if($ instanceof Error)return new E0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new E0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new E0("hub_connect_failed",Q);let W=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new E0("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 Aw=8000,fw=200,zF="*",TF=8000,Uw="cline-hub-auth.",MF=new Map,RF=new Set,Dw=3000,Lw=3000,_w=100,hJ="Hub connection closed",zw=250,Tw=5000,OF=0.5;class E0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function xJ($){return $ instanceof E0}class t8 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function kQ($,Z){return $ instanceof t8&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function EF($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=gJ($.toString());return Q?MF.get(Q):void 0}function Ow($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function gJ($){if(!Ow($))return;let Z=new URL(I$($));return Z.search="",Z.hash="",Z.toString()}function kJ($){let Z=gJ($);return!!Z&&RF.has(Z)}function k$($,Z){let Q=gJ($);if(Q){if(RF.add(Q),Z?.trim())MF.set(Q,Z)}return $}class H1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new E0("hub_connection_closed",hJ);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),Z=this.options.authToken?.trim()||EF($);$.hash="";let W=new(Gw())($.toString(),Z?[`${Uw}${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 E0("hub_connect_timeout",`Timed out connecting to hub after ${TF}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{W.close()}catch{}Y(this.lastCloseError)},TF);W.addEventListener("open",()=>{if(j)return;j=!0,clearTimeout(V),X()}),W.addEventListener("error",(H)=>{if(j)return;j=!0,clearTimeout(V),this.lastCloseError=Fw(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=_F(H),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)})}),W.addEventListener("message",(X)=>{this.handleFrame(JSON.parse(qF(X)))}),W.addEventListener("close",(X)=>{if(this.socket!==W)return;if(!J)this.lastCloseError=_F(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=jw("hubreq_"),X=Bw($,W?.timeoutMs),Y=new Promise((V,H)=>{let B=X===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;H(new t8($,"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===E2){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new r1(V,j.error.message)}throw new t8($,j.error?.code,j.error?.message??`Hub command ${$} failed`)}return j}async recoverLocalHubTransport($){if(!kJ(this.currentUrl)||!xJ($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await y2({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(zw*2**this.reconnectAttempt,Tw),Z=Math.round($*(1-OF)+Math.random()*$*OF);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(!kJ(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await y2({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 E0("hub_connection_closed",hJ),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 E0("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 $??zF}subscriptionSessionIdFromKey($){return $===zF?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 I$($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function f1($,Z){let Q=new H1({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 IJ($,Z){let Q=I$($),W=await a1(Q,{authToken:Z?.authToken});if(!W)return{status:"unreachable",url:Q};if(!Vw(W).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await f1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function qw($){let Z=Date.now()+Aw;while(Date.now()<Z){let Q=await f0($.discoveryPath);if(Q?.url){let W=await IJ(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(W.status==="compatible")return k$(W.url,Q.authToken)}await new Promise((W)=>setTimeout(W,fw))}return}async function Mw($){let Z=Date.now()+Lw;while(Date.now()<Z){if(!(await a1($).catch(()=>{return}))?.url)return!0;await new Promise((W)=>setTimeout(W,_w))}return!1}function Rw($,Z){try{return I$($)===I$(Z)}catch{return!1}}function Ew($){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 Nw($,Z,Q){let W=new H1({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:Dw});return!Ew(J.payload)}catch{return!1}finally{await W.dispose().catch(()=>{return})}}async function P5($={}){if($.endpoint?.trim()){let J=await IJ($.endpoint);return J.status==="compatible"?J.url:void 0}let Z=hQ(),Q=await f0(Z.discoveryPath);if(!Q?.url)return;let W=await IJ(Q.url,{authToken:Q.authToken});if(W.status==="compatible")return k$(W.url,Q.authToken);if(W.status==="protocol_mismatch")await b0(Z.discoveryPath).catch(()=>{return});return}async function y2($={}){let Z=await P5($);if(Z&&await f1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;let Q=hQ();return await o8($.workspaceRoot??process.cwd()),await qw(Q)}async function w5($,Z){let Q=new URL($),W=Z?.trim()||EF(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 mJ($=hQ()){let Z=await f0($.discoveryPath);if(!Z?.url)return!1;try{if(await w5(Z.url,Z.authToken))return!0}catch{}return!1}async function IQ($){if(!kJ($.url))return;let Z=hQ(),Q=await f0(Z.discoveryPath);if(!Q?.url||!Rw(Q.url,$.url))return;if(!await Nw(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await mJ())return;if(!await Mw(Q.url))return;return await b0(Z.discoveryPath).catch(()=>{return}),await y2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var mF={};N(mF,{HubRuntimeHost:()=>s1});import{captureSdkError as CF,createSessionId as wF,HUB_CHECKPOINT_CAPABILITY as Sw,HUB_COMPACTION_CAPABILITY as bw,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as yw,HUB_HOOK_CAPABILITY_PREFIX as hw,HUB_MISTAKE_LIMIT_CAPABILITY as kw,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Iw,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as xw,isHubToolExecutorName as gw}from"@cline/shared";var NF={};N(NF,{createCoreSessionSnapshot:()=>U1,coreSessionSnapshotToRecord:()=>xQ});function Cw($){return $?JSON.parse(JSON.stringify($)):void 0}function ww($){return $?JSON.parse(JSON.stringify($)):void 0}function Pw($){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 U1($){let{session:Z}=$,Q=Cw(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:ww($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let W=Pw(Q);return W?{checkpoint:W}:{}})()}}function xQ($){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 e8($){if(!$)return;return JSON.parse(JSON.stringify($))}var mw=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function PF($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function SF($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function bF($){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 h2($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function yF($,Z){let Q={manifest:[],handlers:new Map};for(let J of Object.keys(Z.toolExecutors??{}).filter(gw)){let X=Z.toolExecutors?.[J];if(typeof X!=="function")continue;h2(Q,{kind:"toolExecutor",executor:J,capabilityName:`${Iw}${J}`},async({payload:Y,abortSignal:j})=>{let V=Array.isArray(Y.args)?[...Y.args]:[],H={...bF(Y.context),signal:j};return{result:await X(...V,H)}})}for(let J of $?.extraTools??[])h2(Q,{kind:"tool",name:J.name,description:J.description,inputSchema:e8(J.inputSchema)??{},...J.lifecycle?{lifecycle:e8(J.lifecycle)}:{},capabilityName:`${yw}${J.name}`},async({payload:X,abortSignal:Y,progress:j})=>{let V={...bF(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 mw){let X=W[J];if(typeof X!=="function")continue;h2(Q,{kind:"hook",name:J,capabilityName:`${hw}${J}`},async({payload:Y})=>({control:await X(Y.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;h2(Q,{kind:"compaction",capabilityName:bw,config:PF($.compaction)},async({payload:X})=>({result:await J(X.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;h2(Q,{kind:"checkpoint",capabilityName:Sw,config:PF($.checkpoint)},async({payload:X})=>({result:await J(X.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;h2(Q,{kind:"mistakeLimit",capabilityName:kw},async({payload:X})=>({result:await J(X.context)}))}if($?.userInstructionService){let J=$.userInstructionService;h2(Q,{kind:"userInstructionService",capabilityName:xw},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 xF($){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 vw($){return xF($)??"Capability request was cancelled."}function cw($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function uw($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function dw($){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 hF($){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 vJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function x$($,Z){return vJ($?.[Z])??0}function lw($){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:x$(Z,"inputTokens"),outputTokens:x$(Z,"outputTokens"),cacheReadTokens:x$(Z,"cacheReadTokens"),cacheWriteTokens:x$(Z,"cacheWriteTokens"),cost:vJ(Z?.totalCost),totalInputTokens:x$(Q,"inputTokens"),totalOutputTokens:x$(Q,"outputTokens"),totalCacheReadTokens:x$(Q,"cacheReadTokens"),totalCacheWriteTokens:x$(Q,"cacheWriteTokens"),totalCost:vJ(Q?.totalCost)},teamAgentId:typeof W?.teamAgentId==="string"?W.teamAgentId:void 0,teamRole:J}}function pw($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,W=uw(Q)?Q:Q==="failed"?"error":"completed",J=dw($?.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 gQ($,Z){return $.error?.message??`hub command failed: ${Z}`}function S5($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function gF($){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:z0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:S5($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:S5($.status)==="completed"?0:S5($.status)==="failed"?1:void 0,status:S5($.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 g$($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function rw($){let Z=g$($?.snapshot);if(Z)return xQ(Z);let Q=$?.session;return Q?gF(Q):void 0}function kF($,Z,Q){let W=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot||Z.config.cwd;return P0.parse({version:1,session_id:$,source:Z.source??z0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:S5(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 IF($,Z){return P0.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 s1{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new R5;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=q0($.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 H1({...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(!kQ($,"session.create"))return!1;let Z=await IQ({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=yF($.localRuntime,Z),W=$.config.sessionId?.trim()||wF(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:e8({...$.config,sessionId:W}),metadata:{...$.sessionMetadata??{},source:$.source??z0.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:e8($.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=g$(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?IF(Y,$):kF(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?yF(W.localRuntime,J??{}):{manifest:[],handlers:new Map},Y=W?W.config.sessionId?.trim()||wF():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:e8({...W.config,sessionId:Y}),metadata:{...W.sessionMetadata??{},source:W.source??z0.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:e8(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=g$(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?IF(V,W??{}):kF(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=g$(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=hF(W?.usage),X=hF(W?.aggregateUsage);return J||X?{usage:J,aggregateUsage:X}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:xF(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(i1(Q))return;throw Q}return rw(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=g$(J);return X?[xQ(X)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(gF)}async listSettings($){let Z=await this.client.command("settings.list",SF($));if(!Z.ok)throw Error(gQ(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",SF($));if(!Z.ok)throw Error(gQ(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 CF(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(gQ(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(gQ(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 q0(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:pw($.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=g$($.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=lw($.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=g$($.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=g$($.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&&H0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:W,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{CF(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(vw($.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=cw($.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(()=>{})}}var vF={};N(vF,{RemoteRuntimeHost:()=>$4});class $4 extends s1{constructor($){super({url:I$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var cF={};N(cF,{SqliteSessionStore:()=>L1});import{existsSync as iw,mkdirSync as nw}from"node:fs";import{join as aw}from"node:path";import{asBool as b5,asOptionalString as D1,asString as o1,ensureSessionSchema as sw,loadSqliteDb as ow,nowIso as mQ,toBoolInt as y5}from"@cline/shared/db";import{resolveDbDataDir as tw}from"@cline/shared/storage";class L1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??tw()}init(){this.getRawDb()}ensureSessionsDir(){if(!iw(this.sessionsDirPath))nw(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return aw(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=ow(this.sessionDbPath());return sw($,{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=mQ();this.run(`INSERT OR REPLACE INTO sessions (
503
503
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
504
504
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
505
505
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
@@ -509,26 +509,26 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
509
509
  enable_tools, enable_spawn, enable_teams,
510
510
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
511
511
  prompt, metadata_json, hook_path, messages_path, updated_at
512
- FROM sessions WHERE session_id = ?`,[$]);if(!Z)return;return{sessionId:o1(Z.session_id),source:o1(Z.source),pid:Number(Z.pid??0),startedAt:o1(Z.started_at),endedAt:Z.ended_at??null,exitCode:Z.exit_code??null,status:o1(Z.status),interactive:b5(Z.interactive),provider:o1(Z.provider),model:o1(Z.model),cwd:o1(Z.cwd),workspaceRoot:o1(Z.workspace_root),teamName:D1(Z.team_name),enableTools:b5(Z.enable_tools),enableSpawn:b5(Z.enable_spawn),enableTeams:b5(Z.enable_teams),parentSessionId:D1(Z.parent_session_id),parentAgentId:D1(Z.parent_agent_id),agentId:D1(Z.agent_id),conversationId:D1(Z.conversation_id),isSubagent:b5(Z.is_subagent),prompt:D1(Z.prompt),metadata:(()=>{let Q=D1(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:D1(Z.hook_path),messagesPath:D1(Z.messages_path),updatedAt:D1(Z.updated_at)??mQ()}}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(o1(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}}Z4();import{existsSync as eJ,mkdirSync as dP,readFileSync as WA,renameSync as lP,writeFileSync as pP}from"node:fs";import{join as JA}from"node:path";import{resolveSessionDataDir as rP}from"@cline/shared/storage";import{dirname as cP}from"node:path";import{nanoid as uP}from"nanoid";import{appendFileSync as BP,existsSync as GP,mkdirSync as uF,readFileSync as KP,writeFileSync as dF}from"node:fs";import{dirname as lF,join as FP}from"node:path";import{ensureHookLogDir as AP}from"@cline/shared/storage";class cJ{adapter;messagesArtifactUploader;logger;artifacts;constructor($,Z,Q){this.adapter=$;this.messagesArtifactUploader=Z;this.logger=Q;this.artifacts=new I3(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,Z,Q){YB(Z,Q,$3($))}writeSessionManifest($,Z){uF(lF($),{recursive:!0}),dF($,`${JSON.stringify(P0.parse(Z),null,2)}
513
- `,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let Z=this.artifacts.sessionManifestPath($,!1);if(!GP(Z))return{path:Z};try{return{path:Z,manifest:P0.parse(JSON.parse(KP(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=Z3({updatedAt:J0(),context:$3($),messages:Z,systemPrompt:Q}),X=`${JSON.stringify(J,null,2)}
514
- `;if(uF(lF(W),{recursive:!0}),dF(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)??FP(AP(),"hooks.jsonl");BP(Y,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:W,sessionId:Z,pid:Q,source:J})}
515
- `,"utf8")}}import{appendFileSync as fP}from"node:fs";import{join as UP}from"node:path";import{resolveRootSessionId as pF}from"@cline/shared";import{ensureHookLogDir as DP}from"@cline/shared/storage";import{z as uJ}from"zod";var LP="subagent",_P=uJ.looseObject({task:uJ.string().optional(),systemPrompt:uJ.string().optional()});class vQ{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:LP,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:E6({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=pF($.sessionContext);if(!Z)return;let Q=_P.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=L8(Z,$.agentId),J=await this.adapter.getSession(W),X=J0(),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:E6({metadata:J.metadata??void 0,prompt:J.prompt??j??null}),expectedStatusLock:J.statusLock}),W}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let Z=pF($.sessionContext);if(!Z)return;if($.hookName==="session_shutdown"){let Q=L8(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($,q6(Z))}async applySubagentStatusBySessionId($,Z){let Q=await this.adapter.getSession($);if(!Q)return;let W=H0(Z)?null:J0(),J=H0(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=T6($,Z),X=J0(),{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)??UP(DP(),"hooks.jsonl");fP(Q,`${JSON.stringify({ts:J0(),...$})}
516
- `,"utf8")}}import{formatUserInputBlock as vP}from"@cline/shared";var QA={};N(QA,{toTeamProgressLifecycleEvent:()=>X4,sanitizeTeamName:()=>sH,reviveTeamStateDates:()=>FZ,parseConfiguredAgentConfig:()=>h5,loadConfiguredAgentConfigs:()=>Q4,createWorkerReviewerTeam:()=>ZA,createSpawnAgentTool:()=>_$,createDelegatedAgentConfigProvider:()=>D$,createDelegatedAgent:()=>L$,createConfiguredAgentTools:()=>W4,createAgentTeamsTools:()=>Y2,createAgentTeam:()=>pJ,buildTeamProgressSummary:()=>J4,buildDelegatedAgentConfig:()=>J2,buildConfiguredAgentToolName:()=>k5,buildConfiguredAgentToolDescriptors:()=>I5,bootstrapAgentTeams:()=>D8,AgentTeamsRuntime:()=>k2,AgentTeam:()=>j4});import{existsSync as zP,readdirSync as TP,readFileSync as OP}from"node:fs";import{basename as rF,extname as qP,join as MP}from"node:path";import{resolveAgentConfigSearchPaths as RP}from"@cline/shared/storage";import nF from"yaml";import{z as N0}from"zod";var aF=N0.object({name:N0.string().trim().min(1),description:N0.string().trim().min(1),tools:N0.union([N0.string(),N0.array(N0.string())]).optional(),skills:N0.union([N0.string(),N0.array(N0.string())]).optional(),providerId:N0.string().trim().min(1).optional(),modelId:N0.string().trim().min(1).optional(),maxIterations:N0.number().int().positive().optional()});function EP($){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=nF.parse(V);if(!H||typeof H!=="object"||Array.isArray(H))continue;aF.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 iF($){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 NP($){return $.trim().toLowerCase()}function CP($){let Z=qP($).toLowerCase();return Z===".yml"||Z===".yaml"}function h5($,Z={}){let{frontmatter:Q,body:W}=EP($),J=nF.parse(Q);if(!J||typeof J!=="object"||Array.isArray(J))throw Error("Agent config frontmatter must be a YAML mapping.");let X=aF.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:iF(X.tools),skills:iF(X.skills),providerId:X.providerId,modelId:X.modelId,maxIterations:X.maxIterations,systemPrompt:Y,path:Z.path}}function Q4($){let Z=$.searchPaths??RP($.workspaceRoot),Q=new Map,W=[];for(let X of Z.filter(Boolean)){if(!zP(X))continue;let Y;try{Y=TP(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()||!CP(j.name))continue;let V=MP(X,j.name);try{let H=OP(V,"utf8"),B=h5(H,{path:V}),G=NP(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?rF(X.path):X.name).localeCompare(Y.path?rF(Y.path):Y.name)),errors:W}}import{createTool as wP,zodToJsonSchema as PP}from"@cline/shared";import{z as sF}from"zod";var dJ="subagent_",cQ=64,SP=sF.object({prompt:sF.string().trim().min(1).describe("Task for the subagent to perform")});function bP($){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 yP($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z^=$.charCodeAt(Q),Z=Math.imul(Z,16777619);return(Z>>>0).toString(36)}function k5($){let Z=bP($)||"agent",Q=yP($).slice(0,6),W=`${dJ}${Z}`;if(W.length<=cQ)return W;let J=cQ-dJ.length-Q.length-1,X=Z.slice(0,Math.max(1,J));return`${dJ}${X}_${Q}`.slice(0,cQ)}function I5($){let Z=new Set,Q=[];for(let W of[...$].sort((J,X)=>J.name.localeCompare(X.name))){let J=k5(W.name),X=J,Y=2;while(Z.has(X)){let j=`_${Y++}`,V=Math.max(1,cQ-j.length);X=`${J.slice(0,V)}${j}`}Z.add(X),Q.push({toolName:X,config:W})}return Q}function hP($,Z){return{...$,providerId:Z.providerId??$.providerId,modelId:Z.modelId??$.modelId,maxIterations:Z.maxIterations??$.maxIterations}}function W4($){return I5($.agents).map(({toolName:Z,config:Q})=>{return wP({name:Z,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:PP(SP),execute:async(J,X)=>{let Y=$.configProvider.getRuntimeConfig(),j=D$(hP(Y,Q)),V=$.createSubAgentTools?await $.createSubAgentTools(Q,J,X):[],H=L$({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 _1(){return new Date().toISOString()}function oF($,Z){if(Z<=0)return 0;return Math.round($/Z*100)}function kP($,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 J4($,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:_1(),members:{total:Z.members.length,byStatus:Q,leadCount:j,teammateCount:V},tasks:{total:Z.tasks.length,byStatus:W,blockedTaskIds:H,readyTaskIds:B,completionPct:oF(G,Z.tasks.length)},runs:{total:Z.runs.length,byStatus:J,activeRunIds:F,latestRunId:A},outcomes:{total:Z.outcomes.length,byStatus:X,finalizedPct:oF(X.finalized,Z.outcomes.length),missingRequiredSections:kP(Z.outcomes,Z.outcomeFragments)},fragments:{total:Z.outcomeFragments.length,byStatus:Y}}}function X4($){let{event:Z}=$;switch(Z.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),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:_1(),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:_1(),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:_1(),outcomeId:Z.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),outcomeId:Z.fragment.outcomeId,fragmentId:Z.fragment.id,agentId:Z.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),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:_1(),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:_1(),agentId:Z.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1()}}import{sanitizeFileName as IP,TeamMessageType as I}from"@cline/shared";import{nanoid as xP}from"nanoid";import{TeamMessageType as ai}from"@cline/shared";function lJ($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function tF($,Z){return $?.status==="stopped"&&lJ(Z)}var gP=600000,eF="recovered_queued";function mP($){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.
512
+ FROM sessions WHERE session_id = ?`,[$]);if(!Z)return;return{sessionId:o1(Z.session_id),source:o1(Z.source),pid:Number(Z.pid??0),startedAt:o1(Z.started_at),endedAt:Z.ended_at??null,exitCode:Z.exit_code??null,status:o1(Z.status),interactive:b5(Z.interactive),provider:o1(Z.provider),model:o1(Z.model),cwd:o1(Z.cwd),workspaceRoot:o1(Z.workspace_root),teamName:D1(Z.team_name),enableTools:b5(Z.enable_tools),enableSpawn:b5(Z.enable_spawn),enableTeams:b5(Z.enable_teams),parentSessionId:D1(Z.parent_session_id),parentAgentId:D1(Z.parent_agent_id),agentId:D1(Z.agent_id),conversationId:D1(Z.conversation_id),isSubagent:b5(Z.is_subagent),prompt:D1(Z.prompt),metadata:(()=>{let Q=D1(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:D1(Z.hook_path),messagesPath:D1(Z.messages_path),updatedAt:D1(Z.updated_at)??mQ()}}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(o1(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}}Z4();import{existsSync as eJ,mkdirSync as lP,readFileSync as WA,renameSync as pP,writeFileSync as rP}from"node:fs";import{join as JA}from"node:path";import{resolveSessionDataDir as iP}from"@cline/shared/storage";import{dirname as uP}from"node:path";import{nanoid as dP}from"nanoid";import{appendFileSync as GP,existsSync as KP,mkdirSync as uF,readFileSync as FP,writeFileSync as dF}from"node:fs";import{dirname as lF,join as AP}from"node:path";import{ensureHookLogDir as fP}from"@cline/shared/storage";class cJ{adapter;messagesArtifactUploader;logger;artifacts;constructor($,Z,Q){this.adapter=$;this.messagesArtifactUploader=Z;this.logger=Q;this.artifacts=new I3(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,Z,Q){YB(Z,Q,$3($))}writeSessionManifest($,Z){uF(lF($),{recursive:!0}),dF($,`${JSON.stringify(P0.parse(Z),null,2)}
513
+ `,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let Z=this.artifacts.sessionManifestPath($,!1);if(!KP(Z))return{path:Z};try{return{path:Z,manifest:P0.parse(JSON.parse(FP(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=Z3({updatedAt:J0(),context:$3($),messages:Z,systemPrompt:Q}),X=`${JSON.stringify(J,null,2)}
514
+ `;if(uF(lF(W),{recursive:!0}),dF(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)??AP(fP(),"hooks.jsonl");GP(Y,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:W,sessionId:Z,pid:Q,source:J})}
515
+ `,"utf8")}}import{appendFileSync as UP}from"node:fs";import{join as DP}from"node:path";import{resolveRootSessionId as pF}from"@cline/shared";import{ensureHookLogDir as LP}from"@cline/shared/storage";import{z as uJ}from"zod";var _P="subagent",zP=uJ.looseObject({task:uJ.string().optional(),systemPrompt:uJ.string().optional()});class vQ{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:_P,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:E6({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=pF($.sessionContext);if(!Z)return;let Q=zP.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=L8(Z,$.agentId),J=await this.adapter.getSession(W),X=J0(),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:E6({metadata:J.metadata??void 0,prompt:J.prompt??j??null}),expectedStatusLock:J.statusLock}),W}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let Z=pF($.sessionContext);if(!Z)return;if($.hookName==="session_shutdown"){let Q=L8(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($,q6(Z))}async applySubagentStatusBySessionId($,Z){let Q=await this.adapter.getSession($);if(!Q)return;let W=H0(Z)?null:J0(),J=H0(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=T6($,Z),X=J0(),{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)??DP(LP(),"hooks.jsonl");UP(Q,`${JSON.stringify({ts:J0(),...$})}
516
+ `,"utf8")}}import{formatUserInputBlock as cP}from"@cline/shared";var QA={};N(QA,{toTeamProgressLifecycleEvent:()=>X4,sanitizeTeamName:()=>sH,reviveTeamStateDates:()=>FZ,parseConfiguredAgentConfig:()=>h5,loadConfiguredAgentConfigs:()=>Q4,createWorkerReviewerTeam:()=>ZA,createSpawnAgentTool:()=>_$,createDelegatedAgentConfigProvider:()=>D$,createDelegatedAgent:()=>L$,createConfiguredAgentTools:()=>W4,createAgentTeamsTools:()=>Y2,createAgentTeam:()=>pJ,buildTeamProgressSummary:()=>J4,buildDelegatedAgentConfig:()=>J2,buildConfiguredAgentToolName:()=>k5,buildConfiguredAgentToolDescriptors:()=>I5,bootstrapAgentTeams:()=>D8,AgentTeamsRuntime:()=>k2,AgentTeam:()=>j4});import{existsSync as TP,readdirSync as OP,readFileSync as qP}from"node:fs";import{basename as rF,extname as MP,join as RP}from"node:path";import{resolveAgentConfigSearchPaths as EP}from"@cline/shared/storage";import nF from"yaml";import{z as N0}from"zod";var aF=N0.object({name:N0.string().trim().min(1),description:N0.string().trim().min(1),tools:N0.union([N0.string(),N0.array(N0.string())]).optional(),skills:N0.union([N0.string(),N0.array(N0.string())]).optional(),providerId:N0.string().trim().min(1).optional(),modelId:N0.string().trim().min(1).optional(),maxIterations:N0.number().int().positive().optional()});function NP($){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=nF.parse(V);if(!H||typeof H!=="object"||Array.isArray(H))continue;aF.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 iF($){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 CP($){return $.trim().toLowerCase()}function wP($){let Z=MP($).toLowerCase();return Z===".yml"||Z===".yaml"}function h5($,Z={}){let{frontmatter:Q,body:W}=NP($),J=nF.parse(Q);if(!J||typeof J!=="object"||Array.isArray(J))throw Error("Agent config frontmatter must be a YAML mapping.");let X=aF.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:iF(X.tools),skills:iF(X.skills),providerId:X.providerId,modelId:X.modelId,maxIterations:X.maxIterations,systemPrompt:Y,path:Z.path}}function Q4($){let Z=$.searchPaths??EP($.workspaceRoot),Q=new Map,W=[];for(let X of Z.filter(Boolean)){if(!TP(X))continue;let Y;try{Y=OP(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()||!wP(j.name))continue;let V=RP(X,j.name);try{let H=qP(V,"utf8"),B=h5(H,{path:V}),G=CP(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?rF(X.path):X.name).localeCompare(Y.path?rF(Y.path):Y.name)),errors:W}}import{createTool as PP,zodToJsonSchema as SP}from"@cline/shared";import{z as sF}from"zod";var dJ="subagent_",cQ=64,bP=sF.object({prompt:sF.string().trim().min(1).describe("Task for the subagent to perform")});function yP($){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 hP($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z^=$.charCodeAt(Q),Z=Math.imul(Z,16777619);return(Z>>>0).toString(36)}function k5($){let Z=yP($)||"agent",Q=hP($).slice(0,6),W=`${dJ}${Z}`;if(W.length<=cQ)return W;let J=cQ-dJ.length-Q.length-1,X=Z.slice(0,Math.max(1,J));return`${dJ}${X}_${Q}`.slice(0,cQ)}function I5($){let Z=new Set,Q=[];for(let W of[...$].sort((J,X)=>J.name.localeCompare(X.name))){let J=k5(W.name),X=J,Y=2;while(Z.has(X)){let j=`_${Y++}`,V=Math.max(1,cQ-j.length);X=`${J.slice(0,V)}${j}`}Z.add(X),Q.push({toolName:X,config:W})}return Q}function kP($,Z){return{...$,providerId:Z.providerId??$.providerId,modelId:Z.modelId??$.modelId,maxIterations:Z.maxIterations??$.maxIterations}}function W4($){return I5($.agents).map(({toolName:Z,config:Q})=>{return PP({name:Z,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:SP(bP),execute:async(J,X)=>{let Y=$.configProvider.getRuntimeConfig(),j=D$(kP(Y,Q)),V=$.createSubAgentTools?await $.createSubAgentTools(Q,J,X):[],H=L$({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 _1(){return new Date().toISOString()}function oF($,Z){if(Z<=0)return 0;return Math.round($/Z*100)}function IP($,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 J4($,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:_1(),members:{total:Z.members.length,byStatus:Q,leadCount:j,teammateCount:V},tasks:{total:Z.tasks.length,byStatus:W,blockedTaskIds:H,readyTaskIds:B,completionPct:oF(G,Z.tasks.length)},runs:{total:Z.runs.length,byStatus:J,activeRunIds:F,latestRunId:A},outcomes:{total:Z.outcomes.length,byStatus:X,finalizedPct:oF(X.finalized,Z.outcomes.length),missingRequiredSections:IP(Z.outcomes,Z.outcomeFragments)},fragments:{total:Z.outcomeFragments.length,byStatus:Y}}}function X4($){let{event:Z}=$;switch(Z.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),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:_1(),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:_1(),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:_1(),outcomeId:Z.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),outcomeId:Z.fragment.outcomeId,fragmentId:Z.fragment.id,agentId:Z.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1(),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:_1(),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:_1(),agentId:Z.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:_1()}}import{sanitizeFileName as xP,TeamMessageType as I}from"@cline/shared";import{nanoid as gP}from"nanoid";import{TeamMessageType as si}from"@cline/shared";function lJ($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function tF($,Z){return $?.status==="stopped"&&lJ(Z)}var mP=600000,eF="recovered_queued";function vP($){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.
517
517
 
518
518
  ${$.message}`}class j4{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:I.AgentEvent,agentId:$,event:J})}},W=new U$(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:I.TaskStart,agentId:$,message:Z});try{let W=await Q.run(Z);return this.emitEvent({type:I.TaskEnd,agentId:$,result:W}),W}catch(W){let J=W instanceof Error?W:Error(String(W));throw this.emitEvent({type:I.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:I.TaskStart,agentId:$,message:Z});try{let W=await Q.continue(Z);return this.emitEvent({type:I.TaskEnd,agentId:$,result:W}),W}catch(W){let J=W instanceof Error?W:Error(String(W));throw this.emitEvent({type:I.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:I.TaskStart,agentId:Q.agentId,message:Q.message});try{let J=await W.run(Q.message);return this.emitEvent({type:I.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:I.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:I.TaskStart,agentId:Q.agentId,message:Q.message});try{let J=await W.run(Q.message);this.emitEvent({type:I.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:I.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:I.TaskStart,agentId:X,message:J});try{let j=await Y.run(J);this.emitEvent({type:I.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:
519
519
  ${j.text}
520
520
 
521
521
  Please continue from here.`}}catch(j){let V=j instanceof Error?j:Error(String(j));this.emitEvent({type:I.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{}}}function pJ($,Z){return new j4($,Z)}function ZA($){let Z=pJ({worker:$.worker,reviewer:$.reviewer}),Q=Z;return Q.doAndReview=async(W)=>{let J=await Z.routeTo("worker",W),X=await Z.routeTo("reviewer",`Please review this work:
522
522
 
523
- ${J.text}`);return{workerResult:J,reviewResult:X}},Q}class k2{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_${IP(xP(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,Y4($.tasks.map((Q)=>Q.id),"task_")),this.messageCounter=Math.max(this.messageCounter,Y4($.mailbox.map((Q)=>Q.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,Y4($.missionLog.map((Q)=>Q.id),"log_")),this.runCounter=Math.max(this.runCounter,Y4(($.runs??[]).map((Q)=>Q.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,Y4(($.outcomes??[]).map((Q)=>Q.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,Y4(($.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:gP,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:I.AgentEvent,agentId:$,event:Y}),this.trackMeaningfulEvent($,Y)}},J=new U$(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:I.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(!lJ(W))throw W}Q.status="stopped",this.emitEvent({type:I.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:I.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:I.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:I.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:I.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:I.TaskStart,agentId:$,message:Z});try{let J=this.listMailbox($,{unreadOnly:!0,markRead:!0}),X=J.length>0?`${this.buildMailboxNotification(J)}
523
+ ${J.text}`);return{workerResult:J,reviewResult:X}},Q}class k2{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_${xP(gP(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,Y4($.tasks.map((Q)=>Q.id),"task_")),this.messageCounter=Math.max(this.messageCounter,Y4($.mailbox.map((Q)=>Q.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,Y4($.missionLog.map((Q)=>Q.id),"log_")),this.runCounter=Math.max(this.runCounter,Y4(($.runs??[]).map((Q)=>Q.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,Y4(($.outcomes??[]).map((Q)=>Q.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,Y4(($.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:mP,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:I.AgentEvent,agentId:$,event:Y}),this.trackMeaningfulEvent($,Y)}},J=new U$(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:I.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(!lJ(W))throw W}Q.status="stopped",this.emitEvent({type:I.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:I.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:I.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:I.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:I.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:I.TaskStart,agentId:$,message:Z});try{let J=this.listMailbox($,{unreadOnly:!0,markRead:!0}),X=J.length>0?`${this.buildMailboxNotification(J)}
524
524
 
525
- ${Z}`:Z,Y=Q?.continueConversation?await W.agent.continue(X):await W.agent.run(X);return this.emitEvent({type:I.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:I.TaskEnd,agentId:$,error:X,messages:W.agent.getMessages()}),!tF(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:I.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===eF;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:I.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let W=Z?mP($):$.message,J=await this.routeToTeammate($.agentId,W,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=J,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:I.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(tF(X,W))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:I.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:I.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 $A(Z);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((Z)=>["queued","running"].includes(Z.status)))await $A($);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:I.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:I.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=eF,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);Z.push({...Q}),this.emitEvent({type:I.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:I.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:I.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:I.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:I.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:I.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:I.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:I.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(!lJ(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:I.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(`
525
+ ${Z}`:Z,Y=Q?.continueConversation?await W.agent.continue(X):await W.agent.run(X);return this.emitEvent({type:I.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:I.TaskEnd,agentId:$,error:X,messages:W.agent.getMessages()}),!tF(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:I.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===eF;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:I.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let W=Z?vP($):$.message,J=await this.routeToTeammate($.agentId,W,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=J,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:I.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(tF(X,W))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:I.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:I.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 $A(Z);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((Z)=>["queued","running"].includes(Z.status)))await $A($);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:I.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:I.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=eF,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);Z.push({...Q}),this.emitEvent({type:I.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:I.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:I.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:I.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:I.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:I.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:I.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:I.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(!lJ(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:I.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(`
526
526
  `)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function $A($){return new Promise((Z)=>setTimeout(Z,$))}function Y4($,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 rJ($,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}),uQ($);break}default:break}}async function iJ($,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 nJ($,Z,Q,W){if(!$.runtime.teamRuntime)return;let J=$.runtime.teamRuntime.getTeamName();W({type:"team_progress",payload:{sessionId:Z,teamName:J,lifecycle:X4({teamName:J,sessionId:Z,event:Q}),summary:J4(J,$.runtime.teamRuntime.exportState())}})}function x5($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function aJ($,Z){if($.aborting)return!1;if(!(Z==="completed"||Z==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&x5($)}function uQ($){let Z=$.teamRunWaiters.splice(0);for(let Q of Z)Q()}async function sJ($){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 oJ($,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 g5(`System-delivered teammate async run updates:
527
527
  ${Q.join(`
528
528
  `)}
529
529
 
530
- ${J}`,$.config.mode)}function g5($,Z){return vP($,Z==="plan"?"plan":Z==="yolo"?"yolo":"act")}var tJ=4;class t1{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 cJ($,Z.messagesArtifactUploader,Z.logger),this.teamChildren=new vQ($,this.manifestStore,(Q,W,J)=>this.toPersistedMessages(Q,W,J),t1.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,Z,Q){if(!$)return;return Z?LZ(Z.messages,Z,Q):DZ($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,Z){this.manifestStore.writeSessionManifest($,Z)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let Z=$.startedAt??J0(),Q=$.sessionId.trim(),W=Q.length>0?Q:`${Date.now()}_${uP(5)}`,J=this.manifestStore.artifacts.sessionMessagesPath(W),X=this.manifestStore.artifacts.sessionManifestPath(W),Y=E6({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:z$(j.metadata),hookPath:"",messagesPath:J,updatedAt:J0()}),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 VB(()=>this.adapter.getSession($),async(X)=>{return W=H0(Z)?void 0:J0(),this.adapter.updateSession({sessionId:$,status:Z,endedAt:W??null,exitCode:H0(Z)?null:typeof Q==="number"?Q:null,expectedStatusLock:X.statusLock})},tJ)).updated){if(Z==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:W}}return{updated:!1}}async updateSession($){for(let Z=0;Z<tJ;Z++){let Q=await this.adapter.getSession($.sessionId);if(!Q)return{updated:!1};let W=Q.metadata??void 0,J=$.metadata!==void 0?z$($.metadata)??{}:z$(W)??{},X=B2(typeof W?.title==="string"?W.title:void 0),Y=$.title!==void 0?B2($.title):X??eW($.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?z$($.metadata)??{}:z$(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=DZ(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(H0($.status)===!1||this.isPidAlive($.pid))return $;let Z=J0(),Q=t1.STALE_REASON;for(let W=0;W<tJ;W++){let J=await this.adapter.getSession($.sessionId);if(!J)return;if(H0(J.status)===!1)return J;let X={...J.metadata??{},terminal_marker:Q,terminal_marker_at:Z,terminal_marker_pid:J.pid,terminal_marker_source:t1.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=jB(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,t1.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=z$(J.metadata??void 0),Y=this.manifestStore.readSessionManifest(J.sessionId),j=B2(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 z3(J.cwd,J.sessionId),p6(J.messagesPath),p6(this.manifestStore.artifacts.sessionManifestPath(J.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(J.sessionId)}))}if(await z3(Q.cwd,Z),p6(Q.messagesPath),p6(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(cP(J));for(let J of W)this.manifestStore.artifacts.removeDir(J)}return{deleted:!0}}}function $X(){return new Date().toISOString()}function XA($,Z){let Q=`${$}.tmp`;pP(Q,`${JSON.stringify(Z,null,2)}
531
- `,"utf8"),lP(Q,$)}class YA{sessionsDirPath;constructor($=rP()){this.sessionsDirPath=$}ensureSessionsDir(){if(!eJ(this.sessionsDirPath))dP(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return JA(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return JA(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!eJ($))return{version:1,sessions:{}};try{let Z=JSON.parse(WA($,"utf8"));if(Z?.version===1&&Z.sessions)return Z}catch{}return{version:1,sessions:{}}}writeIndex($){XA(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!eJ($))return{version:1,nextId:1,requests:[]};try{let Z=JSON.parse(WA($,"utf8"));if(Z?.version===1&&typeof Z.nextId==="number"&&Array.isArray(Z.requests))return Z}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){XA(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:$X()};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:$X()}),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=$X(),this.writeQueue(Q),W.task}}class ZX extends t1{constructor($,Z={}){super(new YA($),Z)}ensureSessionsDir(){return super.ensureSessionsDir()}}var HA={};N(HA,{CoreSessionService:()=>z1});import{existsSync as iP,mkdirSync as nP}from"node:fs";import{resolveSessionDataDir as aP}from"@cline/shared/storage";var QX=`
530
+ ${J}`,$.config.mode)}function g5($,Z){return cP($,Z==="plan"?"plan":Z==="yolo"?"yolo":"act")}var tJ=4;class t1{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 cJ($,Z.messagesArtifactUploader,Z.logger),this.teamChildren=new vQ($,this.manifestStore,(Q,W,J)=>this.toPersistedMessages(Q,W,J),t1.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,Z,Q){if(!$)return;return Z?LZ(Z.messages,Z,Q):DZ($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,Z){this.manifestStore.writeSessionManifest($,Z)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let Z=$.startedAt??J0(),Q=$.sessionId.trim(),W=Q.length>0?Q:`${Date.now()}_${dP(5)}`,J=this.manifestStore.artifacts.sessionMessagesPath(W),X=this.manifestStore.artifacts.sessionManifestPath(W),Y=E6({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:z$(j.metadata),hookPath:"",messagesPath:J,updatedAt:J0()}),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 VB(()=>this.adapter.getSession($),async(X)=>{return W=H0(Z)?void 0:J0(),this.adapter.updateSession({sessionId:$,status:Z,endedAt:W??null,exitCode:H0(Z)?null:typeof Q==="number"?Q:null,expectedStatusLock:X.statusLock})},tJ)).updated){if(Z==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:W}}return{updated:!1}}async updateSession($){for(let Z=0;Z<tJ;Z++){let Q=await this.adapter.getSession($.sessionId);if(!Q)return{updated:!1};let W=Q.metadata??void 0,J=$.metadata!==void 0?z$($.metadata)??{}:z$(W)??{},X=B2(typeof W?.title==="string"?W.title:void 0),Y=$.title!==void 0?B2($.title):X??eW($.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?z$($.metadata)??{}:z$(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=DZ(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(H0($.status)===!1||this.isPidAlive($.pid))return $;let Z=J0(),Q=t1.STALE_REASON;for(let W=0;W<tJ;W++){let J=await this.adapter.getSession($.sessionId);if(!J)return;if(H0(J.status)===!1)return J;let X={...J.metadata??{},terminal_marker:Q,terminal_marker_at:Z,terminal_marker_pid:J.pid,terminal_marker_source:t1.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=jB(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,t1.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=z$(J.metadata??void 0),Y=this.manifestStore.readSessionManifest(J.sessionId),j=B2(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 z3(J.cwd,J.sessionId),p6(J.messagesPath),p6(this.manifestStore.artifacts.sessionManifestPath(J.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(J.sessionId)}))}if(await z3(Q.cwd,Z),p6(Q.messagesPath),p6(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(uP(J));for(let J of W)this.manifestStore.artifacts.removeDir(J)}return{deleted:!0}}}function $X(){return new Date().toISOString()}function XA($,Z){let Q=`${$}.tmp`;rP(Q,`${JSON.stringify(Z,null,2)}
531
+ `,"utf8"),pP(Q,$)}class YA{sessionsDirPath;constructor($=iP()){this.sessionsDirPath=$}ensureSessionsDir(){if(!eJ(this.sessionsDirPath))lP(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return JA(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return JA(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!eJ($))return{version:1,sessions:{}};try{let Z=JSON.parse(WA($,"utf8"));if(Z?.version===1&&Z.sessions)return Z}catch{}return{version:1,sessions:{}}}writeIndex($){XA(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!eJ($))return{version:1,nextId:1,requests:[]};try{let Z=JSON.parse(WA($,"utf8"));if(Z?.version===1&&typeof Z.nextId==="number"&&Array.isArray(Z.requests))return Z}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){XA(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:$X()};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:$X()}),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=$X(),this.writeQueue(Q),W.task}}class ZX extends t1{constructor($,Z={}){super(new YA($),Z)}ensureSessionsDir(){return super.ensureSessionsDir()}}var HA={};N(HA,{CoreSessionService:()=>z1});import{existsSync as nP,mkdirSync as aP}from"node:fs";import{resolveSessionDataDir as sP}from"@cline/shared/storage";var QX=`
532
532
  session_id AS sessionId,
533
533
  source,
534
534
  pid,
@@ -555,7 +555,7 @@ ${J}`,$.config.mode)}function g5($,Z){return vP($,Z==="plan"?"plan":Z==="yolo"?"
555
555
  metadata_json AS metadata,
556
556
  hook_path AS hookPath,
557
557
  messages_path AS messagesPath,
558
- updated_at AS updatedAt`;function WX($){$.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 JX($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function jA($){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 VA{store;sessionsDirPath;constructor($,Z=aP()){this.store=$;this.sessionsDirPath=Z}ensureSessionsDir(){if(!iP(this.sessionsDirPath))nP(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
558
+ updated_at AS updatedAt`;function WX($){$.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 JX($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function jA($){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 VA{store;sessionsDirPath;constructor($,Z=sP()){this.store=$;this.sessionsDirPath=Z}ensureSessionsDir(){if(!nP(this.sessionsDirPath))aP(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
559
559
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
560
560
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
561
561
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
@@ -576,31 +576,31 @@ ${J}`,$.config.mode)}function g5($,Z){return vP($,Z==="plan"?"plan":Z==="yolo"?"
576
576
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
577
577
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
578
578
  metadata_json, transcript_path, hook_path, messages_path, updated_at
579
- ) 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,J0()])}}function sP($){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 m5,v5;function oP($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;yQ(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function tP($){await $.reconcileDeadSessions?.().catch(()=>{})}function KA($){try{let Z=new L1;return Z.init(),new z1(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),GA($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new ZX(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function BA($,Z,Q){return new T1({sessionService:Q??$.sessionService??KA($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function XX($){if(m5)return m5;if(v5)return await v5;return v5=(async()=>{return m5=KA($),await tP(m5),m5})().finally(()=>{v5=void 0}),await v5}async function V4($){let Z=h0($.distinctId);$.telemetry?.setDistinctId(Z);let Q=sP($);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 $4({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 y2({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 s1({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 P5({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 s1({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}),GA($.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"}),BA($,Z)}return BA($,Z)}var zA={};N(zA,{createCheckpointComparePlan:()=>lQ,compareCheckpointToWorkspace:()=>c5,buildCheckpointWorkspaceDiff:()=>pQ});import{execFile as ZS}from"node:child_process";import*as LA from"node:fs/promises";import*as G4 from"node:path";import{promisify as QS}from"node:util";var UA={};N(UA,{trimMessagesToCheckpoint:()=>fA,trimMessagesBeforeCheckpoint:()=>jX,readSessionCheckpointHistory:()=>I2,findCheckpointForRun:()=>B4,createRestoredCheckpointMetadata:()=>YX,createCheckpointRestorePlan:()=>VX,applyCheckpointToWorktree:()=>HX});import{execFile as eP}from"node:child_process";import{promisify as $S}from"node:util";var H4=$S(eP);function I2($){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 YX($,Z){let Q=I2($).filter((J)=>J.runCount<=Z),W=Q.at(-1);return W?{latest:W,history:Q}:void 0}function B4($,Z){return $.reduce((Q,W)=>{if(W.runCount>Z)return Q;if(!Q||W.runCount>Q.runCount)return W;return Q},void 0)}function AA($,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 fA($,Z){let Q=AA($,Z);return $.slice(0,Q+1)}function jX($,Z){let Q=AA($,Z);return $.slice(0,Q)}function VX($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=B4(I2($.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:fA($.messages??[],Z)}:{}}}async function HX($,Z){if((await H4("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await H4("git",["-C",$,"cat-file","-e",`${Z.ref}^{commit}`],{windowsHide:!0}),await H4("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await H4("git",["-C",$,"clean","-fd"],{windowsHide:!0}),Z.kind==="commit"){await H4("git",["-C",$,"reset","--hard",Z.ref],{windowsHide:!0});return}await H4("git",["-C",$,"stash","apply",Z.ref],{windowsHide:!0})}var WS=QS(ZS),JS=52428800;async function dQ($,Z){let{stdout:Q}=await WS("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:JS,encoding:"utf8"});return Q}function DA($){return $.split("\x00").filter(Boolean)}function _A($,Z){let Q=G4.resolve($,Z),W=G4.relative($,Q);if(W.startsWith("..")||G4.isAbsolute(W))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function XS($,Z,Q){try{return await dQ($,["show",`${Z}:${Q}`])}catch{return""}}async function YS($,Z){try{return await LA.readFile(_A($,Z),"utf8")}catch{return""}}async function jS($,Z){await dQ($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,W]=await Promise.all([dQ($,["diff","--name-only","-z",Z.ref,"--"]),dQ($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...DA(Q),...DA(W)])].sort((X,Y)=>X.localeCompare(Y))}function lQ($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=B4(I2($.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 pQ($,Z){let Q=await jS($,Z);return(await Promise.all(Q.map(async(J)=>{let[X,Y]=await Promise.all([XS($,Z.ref,J),YS($,J)]);return{filePath:_A($,J),leftContent:X,rightContent:Y}}))).filter((J)=>J.leftContent!==J.rightContent)}async function c5($){let Z=lQ($),Q=await pQ(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}var qA={};N(qA,{NoOpFeatureFlagsProvider:()=>g2,FeatureFlagsService:()=>x2});import{existsSync as VS,mkdirSync as HS,readFileSync as BS,writeFileSync as GS}from"node:fs";import{dirname as KS}from"node:path";import{FEATURE_FLAGS as TA,FeatureFlagDefaultValue as BX}from"@cline/shared";var FS=3600000,AS=604800000,OA=1;class x2{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??FS,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??AS,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:TA.length>0?TA: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||!VS(this.cacheFilePath))return;let $=JSON.parse(BS(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==OA||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;HS(KS(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:OA,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};GS(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
580
- `,"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??BX[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==W)this.telemetry?.capture({event:g.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}),BX[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??BX[$]}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 g2{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}Z4();class u5{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=qK($),this.pendingPrompts=MK($),this.automation=new x3(()=>{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 M5({workspaceRoot:H.workspaceRoot??process.cwd(),specs:{cronSpecsDir:H.cronSpecsDir??H.cronDir,scope:DG(H.cronScope),workspaceRoot:H.workspaceRoot},runtimeHandlers:LG({host:$,getExtensionContext:()=>WQ({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=h0($.distinctId),Q=q0($.capabilities),W={...$,capabilities:Q,distinctId:Z},J=await V4(W),X=UG($.automation),Y=$.featureFlags||new x2({provider:new g2,telemetry:$.telemetry,logger:$.logger,context:{distinctId:Z,clientName:$.clientName}}),j=new u5(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=EK($),Q=await this.prepare?.(Z);try{let W=Q?await Q.applyToStartSessionInput(Z):Z,J=await this.host.startSession(ZJ(W,{defaultCapabilities:this.capabilities,withExtensionContext:(X)=>WQ({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 NK({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 EQ(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?ZJ($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>WQ({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 c5({session:Q,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,Z){return this.host.subscribe($,Z)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}var RA={};N(RA,{resolvePluginSkillDirectoriesFromPaths:()=>u1,resolvePluginConfigSearchPaths:()=>b6,resolveAndLoadAgentPlugins:()=>N8,resolveAgentPluginPaths:()=>c1,loadAgentPluginsFromPathsWithDiagnostics:()=>K2,loadAgentPluginsFromPaths:()=>zZ,loadAgentPluginFromPath:()=>P6,discoverPluginModulePaths:()=>y6});var CA={};N(CA,{toHookConfigFileName:()=>I6,runSubprocessEvent:()=>K4,runHook:()=>A4,resolveHooksConfigSearchPaths:()=>h6,parseHookEventPayload:()=>F4,mergeAgentHooks:()=>U2,listHookConfigFiles:()=>q$,createSubprocessHooks:()=>nQ,createHookConfigFileHooks:()=>x6,createHookConfigFileExtension:()=>S8,createHookAuditHooks:()=>P8,createAgentHooksExtension:()=>C8,HookEventPayloadSchema:()=>iQ,HookEventNameSchema:()=>rQ,HookConfigFileName:()=>w8,HOOK_CONFIG_FILE_EVENT_MAP:()=>k6,HOOKS_CONFIG_DIRECTORY_NAME:()=>EZ});import{HookEventNameSchema as rQ,HookEventPayloadSchema as iQ,parseHookEventPayload as F4,resolveHookSessionContext as TS}from"@cline/shared";import{z as m2}from"zod";import{spawn as fS}from"node:child_process";import{augmentNodeCommandForDebug as US,withResolvedClineBuildEnv as DS}from"@cline/shared";function LS($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
581
- `).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 _S($,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 zS($,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 K4($,Z){let Q=US(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=fS(Q[0],Q.slice(1),{cwd:Z.cwd,env:DS(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(_S(A,Q))})});if(await zS(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}=LS(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:H})})});return await Promise.race([G,Y])}var OS=m2.object({contextModification:m2.string().optional(),cancel:m2.boolean().optional(),review:m2.boolean().optional(),errorMessage:m2.string().optional(),context:m2.string().optional(),overrideInput:m2.unknown().optional()}).passthrough();var qS=["agent","hook"];async function A4($,Z={}){let Q=Z.command??qS;return await K4($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function NA($){return $ instanceof Error?$:Error(String($))}function MS($){if(!$||typeof $!=="object")return;let Z=OS.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 EA($){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 e1($,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:TS(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 RS($){return{name:$.name,message:$.message,stack:$.stack}}function ES($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function NS($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function CS($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function wS($){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 PS($){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 v2($,Z){try{let Q=await A4($,{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?.(NA(Q),$)}}function nQ($={}){return{hooks:{beforeRun:async(j)=>{let V=NS(j);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let B={...e1("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await v2(B,$)}else{let B={...e1("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await v2(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={...e1("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:EA(j.input)}};try{let B=await A4(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 PS(MS(B?.parsedJson))}catch(B){$.onDispatchError?.(NA(B),H);return}},afterTool:async(j)=>{let V=wS(j),H={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},B={...e1("tool_result",H,$),hookName:"tool_result",iteration:j.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:EA(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await v2(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={...e1("agent_end",H,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await v2(K,$);return}let B=V.status==="aborted"||ES(V.error?.message)?"agent_abort":"agent_error",G=B==="agent_error"?{...e1(B,H,$),hookName:B,iteration:V.iterations,error:RS(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...e1(B,H,$),hookName:B,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await v2(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={...e1("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:CS(j.message.content),attachments:[]}};await v2(H,$)}},shutdown:async({agentId:j,conversationId:V,parentAgentId:H,reason:B})=>{let G={...e1("session_shutdown",{agentId:j,conversationId:V,parentAgentId:H},$),hookName:"session_shutdown",reason:B};await v2(G,$)}}}var mf={};N(mf,{writeHubDiscovery:()=>wQ,withHubStartupLock:()=>PQ,verifyHubConnection:()=>f1,truncateNotificationBody:()=>r5,toHubStatusUrl:()=>NJ,toHubHealthUrl:()=>SQ,stopLocalHubServerGracefully:()=>mJ,startHubWebSocketServer:()=>d2,startHubServer:()=>xf,spawnDetachedHubServerWithRetry:()=>o8,spawnDetachedHubServer:()=>yJ,sendHubCommand:()=>hA,restartLocalHubIfIdleAfterStartupTimeout:()=>IQ,resolveWorkspaceHubOwnerContext:()=>KF,resolveSharedHubOwnerContext:()=>y0,resolveProductionHubOwnerContext:()=>s0,resolveHubUrl:()=>fX,resolveHubOwnerContext:()=>n1,resolveHubEndpointOptions:()=>a0,resolveHubBuildId:()=>CQ,resolveDefaultHubPort:()=>s8,resolveDefaultHubPathname:()=>bJ,resolveDefaultHubHost:()=>SJ,resolveCompatibleLocalHubUrl:()=>P5,resolveClineDir:()=>VF,resolveClineDataDir:()=>P2,requestHubShutdown:()=>w5,rememberRecoverableLocalHubUrl:()=>k$,readHubDiscovery:()=>f0,readBearerToken:()=>X7,probeHubServer:()=>a1,probeHubConnection:()=>yA,prewarmDetachedHubServer:()=>yQ,normalizeHubWebSocketUrl:()=>I$,isLocalHubOrigin:()=>xX,isLocalHubHostName:()=>Y7,isHubReconnectableTransportError:()=>xJ,isHubCommandTimeoutError:()=>kQ,isDiscoveryFilePresent:()=>BF,ensureHubWebSocketServer:()=>j7,ensureHubServer:()=>gf,ensureDetachedHubServer:()=>LF,ensureCompatibleLocalHubUrl:()=>y2,createLocalHubScheduleRuntimeHandlers:()=>V7,createInMemoryHubOwnerContext:()=>HF,createHubServerUrl:()=>V1,createHubAuthToken:()=>NQ,createConfiguredTelemetryService:()=>$$,createConfiguredTelemetryHandle:()=>_4,connectToHub:()=>tQ,clearHubDiscovery:()=>b0,NodeHubClient:()=>H1,NativeHubTransportAdapter:()=>o5,HubUIClient:()=>LX,HubTransportError:()=>E0,HubSessionClient:()=>DX,HubServerTransport:()=>z4,HubScheduleService:()=>U4,HubScheduleCommandService:()=>f4,HubCommandError:()=>t8,DEFAULT_HUB_PORT:()=>wJ,DEFAULT_HUB_PATHNAME:()=>PJ,DEFAULT_HUB_HOST:()=>CJ,BrowserWebSocketHubAdapter:()=>s5});import{createSessionId as SS}from"@cline/shared";function o0($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function wA($,Z,Q){return{version:$.version,requestId:$.requestId??SS("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class f4{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return o0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return o0($,{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 o0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return o0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return o0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return o0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return o0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return o0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return o0($,{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 o0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return o0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return o0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return wA($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Z){return wA($,"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 sQ($){return $?new Date($).getTime():void 0}function bS($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function aQ($){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:sQ($.nextRunAt),lastRunAt:sQ($.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:bS($)}}function yS($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function GX($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:sQ($.startedAt),endedAt:sQ($.completedAt),status:yS($.status),errorMessage:$.error}}class U4{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new q5({dbPath:$.dbPath}),this.materializer=new L5({store:this.store}),this.runner=new _5({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(BJ($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return aQ(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?aQ(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>aQ(Z))}updateSchedule($,Z){if(Z.cronPattern!==void 0)BJ(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?aQ(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 GX(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),GX(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 GX(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}))}}oQ();import{resolveClineBuildEnv as Qb}from"@cline/shared";function Wb($,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 Jb="cline-hub-auth.";function Xb($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function Yb($,Z){let Q=new URL($),W=new URL(Z);return Q.search="",Q.hash="",W.search="",W.hash="",Q.toString()===W.toString()}function bA(){return Qb()==="production"?s0():y0()}async function jb($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=bA(),W=await f0(Q.discoveryPath);if(W?.url&&Yb($.toString(),W.url))return W.authToken;return}async function fX($={}){let Z=a0($);if(!Xb($)){let Q=bA(),W=await f0(Q.discoveryPath);if(W?.url)return W.url}return V1(Z.host,Z.port,Z.pathname)}async function tQ($){return await new Promise((Z,Q)=>{(async()=>{let W=new URL($),J=await jb(W);W.hash="";let X=new WebSocket(W.toString(),J?[`${Jb}${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(Wb(V,$))})})().catch(Q)})}async function yA($){try{return(await tQ($)).close(),!0}catch{return!1}}async function hA($,Z){let Q=await fX($),W=await tQ(Q);try{return await W.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{W.close()}}function UX($){return $?JSON.parse(JSON.stringify($)):{}}function eQ($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?UX(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 kA($,Z){return $.error?.message??`hub command failed: ${Z}`}function Vb($){let Z=UX($);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 IA($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function Hb($){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 Bb($){let Z=UX($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||IA(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||IA(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:Vb($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class DX{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new H1({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=eQ(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(i1(Q))return;throw Q}return eQ(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(kA(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(kA(J,"session.restore"));let X=eQ(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=Hb(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)=>eQ({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=Bb(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 LX{client;constructor($){this.client=new H1({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{resolveClineBuildEnv as kf}from"@cline/shared";function Gb($){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(`
582
- `).trim()||void 0}var xA=120,_X="...";function r5($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=xA)return Z;let Q=xA-Buffer.byteLength(_X,"utf8");if(Q<=0)return _X;let W="";for(let J of Z){if(Buffer.byteLength(W+J,"utf8")>Q)break;W+=J}return`${W}${_X}`}async function gA($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await h$(Q)].reverse().find((V)=>V.role==="assistant"),X=J?Gb(J.content):void 0,Y=$?.workspaceRoot?.trim()||"workspace",j=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():Y;return{title:`Task completed (${Z})`,body:r5(X&&X.length>0?X:j.length>0?j:Y),severity:"info"}}import{captureSdkError as J7,createSessionId as By}from"@cline/shared";import{createSessionId as fb}from"@cline/shared";import{createSessionId as Ab}from"@cline/shared";function Kb($){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 Fb($){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 $7($,Z,Q,W){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:Kb($.status),participants:Z?[...Z.participants.values()]:[],metadata:Fb($),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 c($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function x($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function Z7($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function k0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function c2($,Z,Q){return{version:"v1",event:$,eventId:Ab("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function t0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let W=await $.sessionHost.getAccumulatedUsage?.(Z);return $7(Q,$.sessionState.get(Z),W?.usage,W?.aggregateUsage)}async function e0($,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 U1({session:Q,messages:W,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function Q7($,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 zX($,Z){let Q=fb("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 TX($,Z,Q){let W=$.pendingApprovals.get(Z);if(!W)return;return $.pendingApprovals.delete(Z),W.resolve(Q),{sessionId:W.sessionId}}function OX($,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 mA($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return x(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=TX($,Q,{approved:X,reason:J});if(!Y)return x(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:X,reason:J},Y.sessionId)),c(Z,{approvalId:Q,approved:X})}import{createSessionId as Lb}from"@cline/shared";function Ub($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var vA={debug:10,info:20,warn:30,error:40,silent:50};function Db(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function u($,Z,Q={}){if(vA[$]<vA[Db()])return;let W=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([J,X])=>[J,Ub(X)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${W}`);return}console.log(`[hub] ${W}`)}function qX($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);u("error",$,{error:Q})}async function cA($,Z,Q,W,J,X){let Y=Lb("capreq_"),j=performance.now();return u("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(u(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)),u("info","capability.request.published",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J})})}function uA($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);if((Z.clientId?.trim()||"")!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(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),c(Z,{requestId:Q})}function m$($,Z,Q){let W=0;for(let[J,X]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:J,...X}))continue;$.pendingCapabilityRequests.delete(J),u("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 dA($,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 x(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 c(Z,Y)}catch(X){return x(Z,"capability_request_failed",X instanceof Error?X.message:String(X))}}function lA($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);let J=Z.clientId?.trim()||"";if(J!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(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 u(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)),c(Z,{requestId:Q,ok:j})}import{createSessionId as _b}from"@cline/shared";function pA($,Z){let Q=Z.payload,W=Q?.clientId?.trim()||Z.clientId?.trim()||_b("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()})),c(Z,{clientId:W})}function rA($,Z){let Q=Z.clientId?.trim(),W=Q?$.clients.get(Q):void 0;if(!Q||!W)return x(Z,"client_not_found","Client is not registered with this hub.");let J=Z7(Z.payload?.metadata);if(W.lastSeenAt=Date.now(),J)W.metadata=JSON.parse(JSON.stringify(J));return c(Z)}function iA($,Z,Q){let W=Z.clientId?.trim();if(W)$.clients.delete(W),Q(W),$.publish($.buildEvent("hub.client.disconnected",{clientId:W}));return c(Z)}function nA($,Z){return c(Z,{clients:[...$.clients.values()]})}L0();import{existsSync as oA,mkdirSync as zb,readdirSync as Tb,readFileSync as Ob,rmSync as qb,writeFileSync as Mb}from"node:fs";import{dirname as Rb,join as aA}from"node:path";import{CONNECTOR_PLATFORMS as Eb,connectorChannelsFromPlatforms as Nb,listConnectorCatalog as tA,shouldIncludeConnectorField as Cb}from"@cline/shared";import{resolveConnectorDataDir as wb,resolveConnectorSettingsPath as RX}from"@cline/shared/storage";var Pb=1,sA={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},Sb={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 v$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function i5($){return typeof $==="string"?$.trim():void 0}function eA($){if(!oA($))return;try{let Z=JSON.parse(Ob($,"utf8"));return v$(Z)?Z:void 0}catch{return}}function EX(){let $=eA(RX()),Z=v$($?.connectors)?$.connectors:{},Q={};for(let[W,J]of Object.entries(Z)){if(!v$(J))continue;let X=i5(J.type),Y=i5(J.configuredAt),j=i5(J.updatedAt);if(!X||!Y||!j)continue;let V=W7(J.values),H=v$(J.security)?{enabled:J.security.enabled===!0,values:W7(J.security.values)}:void 0;Q[W]={type:X,values:V,security:H,configuredAt:Y,updatedAt:j}}return{version:Pb,connectors:Q}}function $f($){let Z=RX();zb(Rb(Z),{recursive:!0}),Mb(Z,`${JSON.stringify($,null,2)}
583
- `,"utf8")}function W7($){if(!v$($))return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W.trim();return Z}function bb($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function yb($){let Z=aA(wb(),$);if(!oA(Z))return[];return Tb(Z).filter((Q)=>Q.endsWith(".json")&&!Q.endsWith(".threads.json")).map((Q)=>aA(Z,Q))}function hb($,Z,Q){let W=Z.botUsername??Z.userName??Z.applicationId??Z.phoneNumberId??String(Q);return`${$}:${W}`}function kb($,Z){let Q=eA(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||!bb(W))return;let X=Sb[$];if(!X)return;let Y={};for(let j of X.required){let V=sA[j](Q);if(!V||typeof V==="string"&&!V.trim())return;Y[j]=V}for(let j of X.optional){let V=sA[j](Q);if(V!==void 0)Y[j]=V}return{id:hb($,Y,W),type:$,pid:W,hubUrl:J,...Y}}function Ib(){let $=[];for(let{name:Z}of tA())for(let Q of yb(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 xb(){let $=EX();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 NX(){return{available:Nb(),active:Ib(),configured:xb()}}function gb($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function mb($,Z){let Q={};for(let J of $.fields)Q[J.flag]=Z[J.flag]??J.initialValue??"";let W={};for(let J of $.fields){if(!Cb(J,Q))continue;gb(J,Q),W[J.flag]=Q[J.flag]}return W}function vb($){if(!v$($))throw Error("connector.configure payload must be an object.");let Z=i5($.channel);if(!Z)throw Error("channel is required");let Q=Eb.find((K)=>K.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(tA().map((K)=>K.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let J=W7($.values),X=mb(Q,J),Y=v$($.security)?$.security:{},j=Y.enabled===!0,V=W7(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=EX(),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},$f(H),NX()}function cb($){if(!v$($))throw Error("connector.delete_config payload must be an object.");let Z=i5($.channel);if(!Z)throw Error("channel is required");let Q=EX();if(delete Q.connectors[Z],Object.keys(Q.connectors).length>0)$f(Q);else qb(RX(),{force:!0});return NX()}function ub($){return $==="connector.configure"||$==="connector.delete_config"}function MX($,Z,Q){if(!ub(Z.command))return;e2($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function Zf($,Z){try{if(Z.command==="connector.channels")return c(Z,NX());if(Z.command==="connector.configure"){let Q=vb(Z.payload);return MX($,Z,!0),c(Z,Q)}if(Z.command==="connector.delete_config"){let Q=cb(Z.payload);return MX($,Z,!0),c(Z,Q)}return x(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return MX($,Z,!1),x(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var db=30000;function lb($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function pb($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function rb($,Z,Q){let W=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return x($,E2,W)}function ib($){return $?$:void 0}function nb($){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 ab($,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);u("warn","run.heartbeat",{...Y,elapsedMs:B}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:B,...W?{timeoutMs:W}:{}},Q.sessionId))},db),V=$.sessionHost.runTurn(Q);V.then((B)=>{if(!X)return;u("warn","run.late_end",{...Y,elapsedMs:Math.round(performance.now()-J),finishReason:B?.finishReason})},(B)=>{if(!X)return;u("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)),u("error","run.timeout",{...Y,elapsedMs:Math.round(performance.now()-J)}),OX($,(F)=>F.sessionId===Q.sessionId,K),m$($,(F)=>F.sessionId===Q.sessionId,K),$.sessionHost.abort(Q.sessionId,K).catch((F)=>{u("error","run.timeout_abort_failed",{...Y,error:F})})},W)})])}finally{if(X=!0,clearInterval(j),H)clearTimeout(H)}}async function Qf($,Z){let Q=k0(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 x(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=nb(W);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let V;try{V=await ab($,Z,{sessionId:Q,prompt:J,mode:ib(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(i1(B))return rb(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 e0($,Q),G=pb(V);if($.publish($.buildEvent(lb(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 e0($,Q);return c(Z,V||H?{...V?{result:V}:{},...H?{snapshot:H}:{}}:void 0)}async function Wf($,Z){let Q=k0(Z),W=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";OX($,(J)=>J.sessionId===Q,W);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(J){u("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:J})}finally{m$($,(J)=>J.sessionId===Q,W)}return c(Z,{applied:!0})}async function Jf($,Z){let Q=F4(Z.payload?.payload);if(!Q)return x(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),c(Z,{applied:!0})}async function Xf($,Z){switch(Z.type){case"chunk":return;case"agent_event":await sb($,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([t0($,Z.payload.sessionId),e0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...W?{snapshot:W}:{}},Z.payload.sessionId));return}case"ended":await ob($,Z);return;default:return}}async function sb($,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 ob($,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([t0($,Z.payload.sessionId),e0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let Y=await gA(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 Hf,parseRuntimeConfigExtensions as Bf}from"@cline/shared";var Yf={};N(Yf,{SessionVersioningService:()=>c$,SessionVersioningError:()=>I0});class I0 extends Error{code;constructor($,Z){super(Z);this.code=$;this.name="SessionVersioningError"}}function tb($){let Z=$.sessionId.trim();if(!Z)throw new I0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new I0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new I0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new I0("invalid_restore","checkpointRunCount must be a positive integer");return Z}class c${async restoreCheckpoint($){let Z=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,W=tb({sessionId:$.sessionId,restoreMessages:Z,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(W);if(!J)throw new I0("session_not_found",`Session ${W} not found`);let X=Z?await $.readMessages(W):void 0;if(Z&&X?.length===0)throw new I0("session_messages_not_found",`No messages found for session ${W}`);let Y=VX({session:J,messages:X,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:Z});if(Q)await($.applyWorkspaceCheckpoint??HX)(Y.cwd,Y.checkpoint);let j=U1({session:J,messages:X});if(!Z)return{checkpoint:Y.checkpoint,sourceSnapshot:j};let V=YX(J,$.checkpointRunCount),H=$.restore?.omitCheckpointMessageFromSession?jX(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 I0("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??kB)(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:U1({session:A,messages:H})}:{}}}}import{HUB_CHECKPOINT_CAPABILITY as ns,HUB_COMPACTION_CAPABILITY as as,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as ss,HUB_HOOK_CAPABILITY_PREFIX as os,HUB_MISTAKE_LIMIT_CAPABILITY as ts,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as es,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as $o,isHubToolExecutorName as eb}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as Xo,HUB_COMPACTION_CAPABILITY as Yo,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as jo,HUB_HOOK_CAPABILITY_PREFIX as Vo,HUB_MISTAKE_LIMIT_CAPABILITY as Ho,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Bo,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Go}from"@cline/shared";var $y=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function u2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function Zy($,Z){let Q=typeof $.name==="string"?$.name.trim():"",W=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",X=u2($.inputSchema);if(!Q||!W||!X||!J||Z.has(J))return;return Z.add(J),{kind:"tool",capabilityName:J,name:Q,description:W,inputSchema:X,...u2($.lifecycle)?{lifecycle:u2($.lifecycle)}:{}}}function wX($){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=Zy(J,Q);if(j)Z.push(j);continue}if(X==="toolExecutor"){let j=J.executor;if(!eb(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,...u2(J.config)?{config:u2(J.config)}:{}});continue}if(X==="checkpoint"){Q.add(Y),Z.push({kind:"checkpoint",capabilityName:Y,...u2(J.config)?{config:u2(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 Vf($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function Qy($){return Object.hasOwn($,"update")?$.update:$}function n5($){return $.trim().replace(/^\/+/,"").toLowerCase()}function Wy($){let Z=($??[]).map(n5).filter(Boolean);return Z.length>0?new Set(Z):void 0}function Jy($,Z,Q){if(!Q)return!0;let W=n5($),J=n5(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 CX($,Z){let Q=Wy(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)=>Jy(W.id,W.name,Q))}function jf($,Z){let Q=async(W,J)=>{let X=n5(W),j=CX($,Z).filter((K)=>K.id===X||n5(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?`
579
+ ) 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,J0()])}}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 m5,v5;function tP($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;yQ(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function eP($){await $.reconcileDeadSessions?.().catch(()=>{})}function KA($){try{let Z=new L1;return Z.init(),new z1(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),GA($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new ZX(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function BA($,Z,Q){return new T1({sessionService:Q??$.sessionService??KA($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function XX($){if(m5)return m5;if(v5)return await v5;return v5=(async()=>{return m5=KA($),await eP(m5),m5})().finally(()=>{v5=void 0}),await v5}async function V4($){let Z=h0($.distinctId);$.telemetry?.setDistinctId(Z);let Q=oP($);if(tP(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 $4({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 y2({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 s1({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 P5({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 s1({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}),GA($.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"}),BA($,Z)}return BA($,Z)}var zA={};N(zA,{createCheckpointComparePlan:()=>lQ,compareCheckpointToWorkspace:()=>c5,buildCheckpointWorkspaceDiff:()=>pQ});import{execFile as QS}from"node:child_process";import*as LA from"node:fs/promises";import*as G4 from"node:path";import{promisify as WS}from"node:util";var UA={};N(UA,{trimMessagesToCheckpoint:()=>fA,trimMessagesBeforeCheckpoint:()=>jX,readSessionCheckpointHistory:()=>I2,findCheckpointForRun:()=>B4,createRestoredCheckpointMetadata:()=>YX,createCheckpointRestorePlan:()=>VX,applyCheckpointToWorktree:()=>HX});import{execFile as $S}from"node:child_process";import{promisify as ZS}from"node:util";var H4=ZS($S);function I2($){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 YX($,Z){let Q=I2($).filter((J)=>J.runCount<=Z),W=Q.at(-1);return W?{latest:W,history:Q}:void 0}function B4($,Z){return $.reduce((Q,W)=>{if(W.runCount>Z)return Q;if(!Q||W.runCount>Q.runCount)return W;return Q},void 0)}function AA($,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 fA($,Z){let Q=AA($,Z);return $.slice(0,Q+1)}function jX($,Z){let Q=AA($,Z);return $.slice(0,Q)}function VX($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=B4(I2($.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:fA($.messages??[],Z)}:{}}}async function HX($,Z){if((await H4("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await H4("git",["-C",$,"cat-file","-e",`${Z.ref}^{commit}`],{windowsHide:!0}),await H4("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await H4("git",["-C",$,"clean","-fd"],{windowsHide:!0}),Z.kind==="commit"){await H4("git",["-C",$,"reset","--hard",Z.ref],{windowsHide:!0});return}await H4("git",["-C",$,"stash","apply",Z.ref],{windowsHide:!0})}var JS=WS(QS),XS=52428800;async function dQ($,Z){let{stdout:Q}=await JS("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:XS,encoding:"utf8"});return Q}function DA($){return $.split("\x00").filter(Boolean)}function _A($,Z){let Q=G4.resolve($,Z),W=G4.relative($,Q);if(W.startsWith("..")||G4.isAbsolute(W))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function YS($,Z,Q){try{return await dQ($,["show",`${Z}:${Q}`])}catch{return""}}async function jS($,Z){try{return await LA.readFile(_A($,Z),"utf8")}catch{return""}}async function VS($,Z){await dQ($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,W]=await Promise.all([dQ($,["diff","--name-only","-z",Z.ref,"--"]),dQ($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...DA(Q),...DA(W)])].sort((X,Y)=>X.localeCompare(Y))}function lQ($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=B4(I2($.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 pQ($,Z){let Q=await VS($,Z);return(await Promise.all(Q.map(async(J)=>{let[X,Y]=await Promise.all([YS($,Z.ref,J),jS($,J)]);return{filePath:_A($,J),leftContent:X,rightContent:Y}}))).filter((J)=>J.leftContent!==J.rightContent)}async function c5($){let Z=lQ($),Q=await pQ(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}var qA={};N(qA,{NoOpFeatureFlagsProvider:()=>g2,FeatureFlagsService:()=>x2});import{existsSync as HS,mkdirSync as BS,readFileSync as GS,writeFileSync as KS}from"node:fs";import{dirname as FS}from"node:path";import{FEATURE_FLAGS as TA,FeatureFlagDefaultValue as BX}from"@cline/shared";var AS=3600000,fS=604800000,OA=1;class x2{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??AS,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??fS,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:TA.length>0?TA: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||!HS(this.cacheFilePath))return;let $=JSON.parse(GS(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==OA||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;BS(FS(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:OA,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};KS(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
580
+ `,"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??BX[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==W)this.telemetry?.capture({event:g.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}),BX[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??BX[$]}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 g2{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}Z4();class u5{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=qK($),this.pendingPrompts=MK($),this.automation=new x3(()=>{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 M5({workspaceRoot:H.workspaceRoot??process.cwd(),specs:{cronSpecsDir:H.cronSpecsDir??H.cronDir,scope:DG(H.cronScope),workspaceRoot:H.workspaceRoot},runtimeHandlers:LG({host:$,getExtensionContext:()=>WQ({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=h0($.distinctId),Q=q0($.capabilities),W={...$,capabilities:Q,distinctId:Z},J=await V4(W),X=UG($.automation),Y=$.featureFlags||new x2({provider:new g2,telemetry:$.telemetry,logger:$.logger,context:{distinctId:Z,clientName:$.clientName}}),j=new u5(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=EK($),Q=await this.prepare?.(Z);try{let W=Q?await Q.applyToStartSessionInput(Z):Z,J=await this.host.startSession(ZJ(W,{defaultCapabilities:this.capabilities,withExtensionContext:(X)=>WQ({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 NK({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 EQ(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?ZJ($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>WQ({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 c5({session:Q,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,Z){return this.host.subscribe($,Z)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}var RA={};N(RA,{resolvePluginSkillDirectoriesFromPaths:()=>u1,resolvePluginConfigSearchPaths:()=>b6,resolveAndLoadAgentPlugins:()=>N8,resolveAgentPluginPaths:()=>c1,loadAgentPluginsFromPathsWithDiagnostics:()=>K2,loadAgentPluginsFromPaths:()=>zZ,loadAgentPluginFromPath:()=>P6,discoverPluginModulePaths:()=>y6});var CA={};N(CA,{toHookConfigFileName:()=>I6,runSubprocessEvent:()=>K4,runHook:()=>A4,resolveHooksConfigSearchPaths:()=>h6,parseHookEventPayload:()=>F4,mergeAgentHooks:()=>U2,listHookConfigFiles:()=>q$,createSubprocessHooks:()=>nQ,createHookConfigFileHooks:()=>x6,createHookConfigFileExtension:()=>S8,createHookAuditHooks:()=>P8,createAgentHooksExtension:()=>C8,HookEventPayloadSchema:()=>iQ,HookEventNameSchema:()=>rQ,HookConfigFileName:()=>w8,HOOK_CONFIG_FILE_EVENT_MAP:()=>k6,HOOKS_CONFIG_DIRECTORY_NAME:()=>EZ});import{HookEventNameSchema as rQ,HookEventPayloadSchema as iQ,parseHookEventPayload as F4,resolveHookSessionContext as OS}from"@cline/shared";import{z as m2}from"zod";import{spawn as US}from"node:child_process";import{augmentNodeCommandForDebug as DS,withResolvedClineBuildEnv as LS}from"@cline/shared";function _S($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
581
+ `).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 zS($,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 TS($,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 K4($,Z){let Q=DS(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=US(Q[0],Q.slice(1),{cwd:Z.cwd,env:LS(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(zS(A,Q))})});if(await TS(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}=_S(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:H})})});return await Promise.race([G,Y])}var qS=m2.object({contextModification:m2.string().optional(),cancel:m2.boolean().optional(),review:m2.boolean().optional(),errorMessage:m2.string().optional(),context:m2.string().optional(),overrideInput:m2.unknown().optional()}).passthrough();var MS=["agent","hook"];async function A4($,Z={}){let Q=Z.command??MS;return await K4($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function NA($){return $ instanceof Error?$:Error(String($))}function RS($){if(!$||typeof $!=="object")return;let Z=qS.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 EA($){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 e1($,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:OS(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 ES($){return{name:$.name,message:$.message,stack:$.stack}}function NS($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function CS($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function wS($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function PS($){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 SS($){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 v2($,Z){try{let Q=await A4($,{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?.(NA(Q),$)}}function nQ($={}){return{hooks:{beforeRun:async(j)=>{let V=CS(j);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let B={...e1("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await v2(B,$)}else{let B={...e1("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await v2(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={...e1("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:EA(j.input)}};try{let B=await A4(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 SS(RS(B?.parsedJson))}catch(B){$.onDispatchError?.(NA(B),H);return}},afterTool:async(j)=>{let V=PS(j),H={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},B={...e1("tool_result",H,$),hookName:"tool_result",iteration:j.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:EA(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await v2(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={...e1("agent_end",H,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await v2(K,$);return}let B=V.status==="aborted"||NS(V.error?.message)?"agent_abort":"agent_error",G=B==="agent_error"?{...e1(B,H,$),hookName:B,iteration:V.iterations,error:ES(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...e1(B,H,$),hookName:B,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await v2(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={...e1("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:wS(j.message.content),attachments:[]}};await v2(H,$)}},shutdown:async({agentId:j,conversationId:V,parentAgentId:H,reason:B})=>{let G={...e1("session_shutdown",{agentId:j,conversationId:V,parentAgentId:H},$),hookName:"session_shutdown",reason:B};await v2(G,$)}}}var mf={};N(mf,{writeHubDiscovery:()=>wQ,withHubStartupLock:()=>PQ,verifyHubConnection:()=>f1,truncateNotificationBody:()=>r5,toHubStatusUrl:()=>NJ,toHubHealthUrl:()=>SQ,stopLocalHubServerGracefully:()=>mJ,startHubWebSocketServer:()=>d2,startHubServer:()=>xf,spawnDetachedHubServerWithRetry:()=>o8,spawnDetachedHubServer:()=>yJ,sendHubCommand:()=>hA,restartLocalHubIfIdleAfterStartupTimeout:()=>IQ,resolveWorkspaceHubOwnerContext:()=>KF,resolveSharedHubOwnerContext:()=>y0,resolveProductionHubOwnerContext:()=>s0,resolveHubUrl:()=>fX,resolveHubOwnerContext:()=>n1,resolveHubEndpointOptions:()=>a0,resolveHubBuildId:()=>CQ,resolveDefaultHubPort:()=>s8,resolveDefaultHubPathname:()=>bJ,resolveDefaultHubHost:()=>SJ,resolveCompatibleLocalHubUrl:()=>P5,resolveClineDir:()=>VF,resolveClineDataDir:()=>P2,requestHubShutdown:()=>w5,rememberRecoverableLocalHubUrl:()=>k$,readHubDiscovery:()=>f0,readBearerToken:()=>X7,probeHubServer:()=>a1,probeHubConnection:()=>yA,prewarmDetachedHubServer:()=>yQ,normalizeHubWebSocketUrl:()=>I$,isLocalHubOrigin:()=>xX,isLocalHubHostName:()=>Y7,isHubReconnectableTransportError:()=>xJ,isHubCommandTimeoutError:()=>kQ,isDiscoveryFilePresent:()=>BF,ensureHubWebSocketServer:()=>j7,ensureHubServer:()=>gf,ensureDetachedHubServer:()=>LF,ensureCompatibleLocalHubUrl:()=>y2,createLocalHubScheduleRuntimeHandlers:()=>V7,createInMemoryHubOwnerContext:()=>HF,createHubServerUrl:()=>V1,createHubAuthToken:()=>NQ,createConfiguredTelemetryService:()=>$$,createConfiguredTelemetryHandle:()=>_4,connectToHub:()=>tQ,clearHubDiscovery:()=>b0,NodeHubClient:()=>H1,NativeHubTransportAdapter:()=>o5,HubUIClient:()=>LX,HubTransportError:()=>E0,HubSessionClient:()=>DX,HubServerTransport:()=>z4,HubScheduleService:()=>U4,HubScheduleCommandService:()=>f4,HubCommandError:()=>t8,DEFAULT_HUB_PORT:()=>wJ,DEFAULT_HUB_PATHNAME:()=>PJ,DEFAULT_HUB_HOST:()=>CJ,BrowserWebSocketHubAdapter:()=>s5});import{createSessionId as bS}from"@cline/shared";function o0($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function wA($,Z,Q){return{version:$.version,requestId:$.requestId??bS("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class f4{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return o0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return o0($,{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 o0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return o0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return o0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return o0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return o0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return o0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return o0($,{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 o0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return o0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return o0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return wA($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Z){return wA($,"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 sQ($){return $?new Date($).getTime():void 0}function yS($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function aQ($){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:sQ($.nextRunAt),lastRunAt:sQ($.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:yS($)}}function hS($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function GX($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:sQ($.startedAt),endedAt:sQ($.completedAt),status:hS($.status),errorMessage:$.error}}class U4{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new q5({dbPath:$.dbPath}),this.materializer=new L5({store:this.store}),this.runner=new _5({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(BJ($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return aQ(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?aQ(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>aQ(Z))}updateSchedule($,Z){if(Z.cronPattern!==void 0)BJ(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?aQ(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 GX(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),GX(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 GX(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}))}}oQ();import{resolveClineBuildEnv as Wb}from"@cline/shared";function Jb($,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 Xb="cline-hub-auth.";function Yb($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function jb($,Z){let Q=new URL($),W=new URL(Z);return Q.search="",Q.hash="",W.search="",W.hash="",Q.toString()===W.toString()}function bA(){return Wb()==="production"?s0():y0()}async function Vb($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=bA(),W=await f0(Q.discoveryPath);if(W?.url&&jb($.toString(),W.url))return W.authToken;return}async function fX($={}){let Z=a0($);if(!Yb($)){let Q=bA(),W=await f0(Q.discoveryPath);if(W?.url)return W.url}return V1(Z.host,Z.port,Z.pathname)}async function tQ($){return await new Promise((Z,Q)=>{(async()=>{let W=new URL($),J=await Vb(W);W.hash="";let X=new WebSocket(W.toString(),J?[`${Xb}${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(Jb(V,$))})})().catch(Q)})}async function yA($){try{return(await tQ($)).close(),!0}catch{return!1}}async function hA($,Z){let Q=await fX($),W=await tQ(Q);try{return await W.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{W.close()}}function UX($){return $?JSON.parse(JSON.stringify($)):{}}function eQ($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?UX(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 kA($,Z){return $.error?.message??`hub command failed: ${Z}`}function Hb($){let Z=UX($);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 IA($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function Bb($){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 Gb($){let Z=UX($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||IA(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||IA(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:Hb($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class DX{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new H1({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=eQ(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(i1(Q))return;throw Q}return eQ(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(kA(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(kA(J,"session.restore"));let X=eQ(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=Bb(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)=>eQ({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=Gb(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 LX{client;constructor($){this.client=new H1({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{resolveClineBuildEnv as kf}from"@cline/shared";function Kb($){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(`
582
+ `).trim()||void 0}var xA=120,_X="...";function r5($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=xA)return Z;let Q=xA-Buffer.byteLength(_X,"utf8");if(Q<=0)return _X;let W="";for(let J of Z){if(Buffer.byteLength(W+J,"utf8")>Q)break;W+=J}return`${W}${_X}`}async function gA($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await h$(Q)].reverse().find((V)=>V.role==="assistant"),X=J?Kb(J.content):void 0,Y=$?.workspaceRoot?.trim()||"workspace",j=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():Y;return{title:`Task completed (${Z})`,body:r5(X&&X.length>0?X:j.length>0?j:Y),severity:"info"}}import{captureSdkError as J7,createSessionId as Gy}from"@cline/shared";import{createSessionId as Ub}from"@cline/shared";import{createSessionId as fb}from"@cline/shared";function Fb($){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 Ab($){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 $7($,Z,Q,W){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:Fb($.status),participants:Z?[...Z.participants.values()]:[],metadata:Ab($),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 c($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function x($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function Z7($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function k0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function c2($,Z,Q){return{version:"v1",event:$,eventId:fb("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function t0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let W=await $.sessionHost.getAccumulatedUsage?.(Z);return $7(Q,$.sessionState.get(Z),W?.usage,W?.aggregateUsage)}async function e0($,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 U1({session:Q,messages:W,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function Q7($,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 zX($,Z){let Q=Ub("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 TX($,Z,Q){let W=$.pendingApprovals.get(Z);if(!W)return;return $.pendingApprovals.delete(Z),W.resolve(Q),{sessionId:W.sessionId}}function OX($,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 mA($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return x(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=TX($,Q,{approved:X,reason:J});if(!Y)return x(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:X,reason:J},Y.sessionId)),c(Z,{approvalId:Q,approved:X})}import{createSessionId as _b}from"@cline/shared";function Db($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var vA={debug:10,info:20,warn:30,error:40,silent:50};function Lb(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function u($,Z,Q={}){if(vA[$]<vA[Lb()])return;let W=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([J,X])=>[J,Db(X)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${W}`);return}console.log(`[hub] ${W}`)}function qX($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);u("error",$,{error:Q})}async function cA($,Z,Q,W,J,X){let Y=_b("capreq_"),j=performance.now();return u("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(u(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)),u("info","capability.request.published",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J})})}function uA($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);if((Z.clientId?.trim()||"")!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(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),c(Z,{requestId:Q})}function m$($,Z,Q){let W=0;for(let[J,X]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:J,...X}))continue;$.pendingCapabilityRequests.delete(J),u("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 dA($,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 x(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 c(Z,Y)}catch(X){return x(Z,"capability_request_failed",X instanceof Error?X.message:String(X))}}function lA($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return x(Z,"capability_not_found",`Unknown capability request: ${Q}`);let J=Z.clientId?.trim()||"";if(J!==W.targetClientId)return x(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return x(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 u(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)),c(Z,{requestId:Q,ok:j})}import{createSessionId as zb}from"@cline/shared";function pA($,Z){let Q=Z.payload,W=Q?.clientId?.trim()||Z.clientId?.trim()||zb("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()})),c(Z,{clientId:W})}function rA($,Z){let Q=Z.clientId?.trim(),W=Q?$.clients.get(Q):void 0;if(!Q||!W)return x(Z,"client_not_found","Client is not registered with this hub.");let J=Z7(Z.payload?.metadata);if(W.lastSeenAt=Date.now(),J)W.metadata=JSON.parse(JSON.stringify(J));return c(Z)}function iA($,Z,Q){let W=Z.clientId?.trim();if(W)$.clients.delete(W),Q(W),$.publish($.buildEvent("hub.client.disconnected",{clientId:W}));return c(Z)}function nA($,Z){return c(Z,{clients:[...$.clients.values()]})}L0();import{existsSync as oA,mkdirSync as Tb,readdirSync as Ob,readFileSync as qb,rmSync as Mb,writeFileSync as Rb}from"node:fs";import{dirname as Eb,join as aA}from"node:path";import{CONNECTOR_PLATFORMS as Nb,connectorChannelsFromPlatforms as Cb,listConnectorCatalog as tA,shouldIncludeConnectorField as wb}from"@cline/shared";import{resolveConnectorDataDir as Pb,resolveConnectorSettingsPath as RX}from"@cline/shared/storage";var Sb=1,sA={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},bb={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 v$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function i5($){return typeof $==="string"?$.trim():void 0}function eA($){if(!oA($))return;try{let Z=JSON.parse(qb($,"utf8"));return v$(Z)?Z:void 0}catch{return}}function EX(){let $=eA(RX()),Z=v$($?.connectors)?$.connectors:{},Q={};for(let[W,J]of Object.entries(Z)){if(!v$(J))continue;let X=i5(J.type),Y=i5(J.configuredAt),j=i5(J.updatedAt);if(!X||!Y||!j)continue;let V=W7(J.values),H=v$(J.security)?{enabled:J.security.enabled===!0,values:W7(J.security.values)}:void 0;Q[W]={type:X,values:V,security:H,configuredAt:Y,updatedAt:j}}return{version:Sb,connectors:Q}}function $f($){let Z=RX();Tb(Eb(Z),{recursive:!0}),Rb(Z,`${JSON.stringify($,null,2)}
583
+ `,"utf8")}function W7($){if(!v$($))return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W.trim();return Z}function yb($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function hb($){let Z=aA(Pb(),$);if(!oA(Z))return[];return Ob(Z).filter((Q)=>Q.endsWith(".json")&&!Q.endsWith(".threads.json")).map((Q)=>aA(Z,Q))}function kb($,Z,Q){let W=Z.botUsername??Z.userName??Z.applicationId??Z.phoneNumberId??String(Q);return`${$}:${W}`}function Ib($,Z){let Q=eA(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||!yb(W))return;let X=bb[$];if(!X)return;let Y={};for(let j of X.required){let V=sA[j](Q);if(!V||typeof V==="string"&&!V.trim())return;Y[j]=V}for(let j of X.optional){let V=sA[j](Q);if(V!==void 0)Y[j]=V}return{id:kb($,Y,W),type:$,pid:W,hubUrl:J,...Y}}function xb(){let $=[];for(let{name:Z}of tA())for(let Q of hb(Z)){let W=Ib(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 gb(){let $=EX();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 NX(){return{available:Cb(),active:xb(),configured:gb()}}function mb($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function vb($,Z){let Q={};for(let J of $.fields)Q[J.flag]=Z[J.flag]??J.initialValue??"";let W={};for(let J of $.fields){if(!wb(J,Q))continue;mb(J,Q),W[J.flag]=Q[J.flag]}return W}function cb($){if(!v$($))throw Error("connector.configure payload must be an object.");let Z=i5($.channel);if(!Z)throw Error("channel is required");let Q=Nb.find((K)=>K.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(tA().map((K)=>K.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let J=W7($.values),X=vb(Q,J),Y=v$($.security)?$.security:{},j=Y.enabled===!0,V=W7(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=EX(),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},$f(H),NX()}function ub($){if(!v$($))throw Error("connector.delete_config payload must be an object.");let Z=i5($.channel);if(!Z)throw Error("channel is required");let Q=EX();if(delete Q.connectors[Z],Object.keys(Q.connectors).length>0)$f(Q);else Mb(RX(),{force:!0});return NX()}function db($){return $==="connector.configure"||$==="connector.delete_config"}function MX($,Z,Q){if(!db(Z.command))return;e2($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function Zf($,Z){try{if(Z.command==="connector.channels")return c(Z,NX());if(Z.command==="connector.configure"){let Q=cb(Z.payload);return MX($,Z,!0),c(Z,Q)}if(Z.command==="connector.delete_config"){let Q=ub(Z.payload);return MX($,Z,!0),c(Z,Q)}return x(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return MX($,Z,!1),x(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var lb=30000;function pb($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function rb($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function ib($,Z,Q){let W=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return x($,E2,W)}function nb($){return $?$:void 0}function ab($){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 sb($,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);u("warn","run.heartbeat",{...Y,elapsedMs:B}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:B,...W?{timeoutMs:W}:{}},Q.sessionId))},lb),V=$.sessionHost.runTurn(Q);V.then((B)=>{if(!X)return;u("warn","run.late_end",{...Y,elapsedMs:Math.round(performance.now()-J),finishReason:B?.finishReason})},(B)=>{if(!X)return;u("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)),u("error","run.timeout",{...Y,elapsedMs:Math.round(performance.now()-J)}),OX($,(F)=>F.sessionId===Q.sessionId,K),m$($,(F)=>F.sessionId===Q.sessionId,K),$.sessionHost.abort(Q.sessionId,K).catch((F)=>{u("error","run.timeout_abort_failed",{...Y,error:F})})},W)})])}finally{if(X=!0,clearInterval(j),H)clearTimeout(H)}}async function Qf($,Z){let Q=k0(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 x(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=ab(W);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let V;try{V=await sb($,Z,{sessionId:Q,prompt:J,mode:nb(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(i1(B))return ib(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 e0($,Q),G=rb(V);if($.publish($.buildEvent(pb(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 e0($,Q);return c(Z,V||H?{...V?{result:V}:{},...H?{snapshot:H}:{}}:void 0)}async function Wf($,Z){let Q=k0(Z),W=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";OX($,(J)=>J.sessionId===Q,W);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(J){u("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:J})}finally{m$($,(J)=>J.sessionId===Q,W)}return c(Z,{applied:!0})}async function Jf($,Z){let Q=F4(Z.payload?.payload);if(!Q)return x(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),c(Z,{applied:!0})}async function Xf($,Z){switch(Z.type){case"chunk":return;case"agent_event":await ob($,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([t0($,Z.payload.sessionId),e0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...W?{snapshot:W}:{}},Z.payload.sessionId));return}case"ended":await tb($,Z);return;default:return}}async function ob($,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 tb($,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([t0($,Z.payload.sessionId),e0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let Y=await gA(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 Hf,parseRuntimeConfigExtensions as Bf}from"@cline/shared";var Yf={};N(Yf,{SessionVersioningService:()=>c$,SessionVersioningError:()=>I0});class I0 extends Error{code;constructor($,Z){super(Z);this.code=$;this.name="SessionVersioningError"}}function eb($){let Z=$.sessionId.trim();if(!Z)throw new I0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new I0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new I0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new I0("invalid_restore","checkpointRunCount must be a positive integer");return Z}class c${async restoreCheckpoint($){let Z=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,W=eb({sessionId:$.sessionId,restoreMessages:Z,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(W);if(!J)throw new I0("session_not_found",`Session ${W} not found`);let X=Z?await $.readMessages(W):void 0;if(Z&&X?.length===0)throw new I0("session_messages_not_found",`No messages found for session ${W}`);let Y=VX({session:J,messages:X,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:Z});if(Q)await($.applyWorkspaceCheckpoint??HX)(Y.cwd,Y.checkpoint);let j=U1({session:J,messages:X});if(!Z)return{checkpoint:Y.checkpoint,sourceSnapshot:j};let V=YX(J,$.checkpointRunCount),H=$.restore?.omitCheckpointMessageFromSession?jX(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 I0("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??kB)(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:U1({session:A,messages:H})}:{}}}}import{HUB_CHECKPOINT_CAPABILITY as as,HUB_COMPACTION_CAPABILITY as ss,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as os,HUB_HOOK_CAPABILITY_PREFIX as ts,HUB_MISTAKE_LIMIT_CAPABILITY as es,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as $o,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Zo,isHubToolExecutorName as $y}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as Yo,HUB_COMPACTION_CAPABILITY as jo,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Vo,HUB_HOOK_CAPABILITY_PREFIX as Ho,HUB_MISTAKE_LIMIT_CAPABILITY as Bo,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Go,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Ko}from"@cline/shared";var Zy=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function u2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function Qy($,Z){let Q=typeof $.name==="string"?$.name.trim():"",W=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",X=u2($.inputSchema);if(!Q||!W||!X||!J||Z.has(J))return;return Z.add(J),{kind:"tool",capabilityName:J,name:Q,description:W,inputSchema:X,...u2($.lifecycle)?{lifecycle:u2($.lifecycle)}:{}}}function wX($){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=Qy(J,Q);if(j)Z.push(j);continue}if(X==="toolExecutor"){let j=J.executor;if(!$y(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,...u2(J.config)?{config:u2(J.config)}:{}});continue}if(X==="checkpoint"){Q.add(Y),Z.push({kind:"checkpoint",capabilityName:Y,...u2(J.config)?{config:u2(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 Vf($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function Wy($){return Object.hasOwn($,"update")?$.update:$}function n5($){return $.trim().replace(/^\/+/,"").toLowerCase()}function Jy($){let Z=($??[]).map(n5).filter(Boolean);return Z.length>0?new Set(Z):void 0}function Xy($,Z,Q){if(!Q)return!0;let W=n5($),J=n5(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 CX($,Z){let Q=Jy(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)=>Xy(W.id,W.name,Q))}function jf($,Z){let Q=async(W,J)=>{let X=n5(W),j=CX($,Z).filter((K)=>K.id===X||n5(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?`
584
584
  <command-args>${H}</command-args>`:"",G=V.description?.trim()?`Description: ${V.description.trim()}
585
585
 
586
586
  `:"";return`<command-name>${V.name}</command-name>${B}
587
587
  <command-instructions>
588
588
  ${G}${V.instructions}
589
- </command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>CX($,Z).map(({skill:W,...J})=>J),enumerable:!0}),Q}function Xy($,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)=>CX(J,Y).some((j)=>!j.disabled),createSkillsExecutor:(Y)=>jf(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:()=>c8(J.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(Y.registerSkillsTool)j.registerTool(e$(jf(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}
589
+ </command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>CX($,Z).map(({skill:W,...J})=>J),enumerable:!0}),Q}function Yy($,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)=>CX(J,Y).some((j)=>!j.disabled),createSkillsExecutor:(Y)=>jf(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:()=>c8(J.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(Y.registerSkillsTool)j.registerTool(e$(jf(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}
590
590
 
591
- ${B}`:V.instructions}})}})}}function Yy($,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:Vf(j)},Z))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function jy($,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:Vf(Y)},Z,Y.emitUpdate?(V)=>{Y.emitUpdate?.(Qy(V))}:void 0))?.result}}))}function Vy($,Z,Q,W){let J=new Map(Q.map((Y)=>[Y.name,Y])),X={};for(let Y of $y){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 PX($){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:Yy($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...W.length>0?{hooks:Vy($.sessionId,$.targetClientId,W,$.requestCapability)}:{},...Q.length>0?{extraTools:jy($.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:Xy($.sessionId,$.targetClientId,j,$.requestCapability)}:{}}}}var Gf="hubCapabilityOwnerClientId";function Kf($,Z){$[Gf]=Z}function Hy($){let Z=$?.[Gf];return typeof Z==="string"&&Z.trim()?Z.trim():void 0}async function Ff($,Z,Q){let W=performance.now(),J={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};u("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 u("warn","session.create.invalid",{...J,reason:"missing_workspace_root"}),x(Z,"invalid_session_create","session.create requires workspaceRoot or cwd");let G=Z.clientId?.trim()||"hub-client",K=wX(V.clientContributions);if(u("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)Kf(Y,G);let A=(typeof j?.sessionId==="string"?j.sessionId.trim():"")||Hf(),L=Bf(V.configExtensions);u("info","session.create.runtime_build.begin",{...J,sessionId:A,configExtensionCount:L?.length??0});let f=PX({sessionId:A,targetClientId:G,contributions:K,sessionConfig:j,requestCapability:$.requestCapability});u("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});u("info","session.create.start_session.end",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W),hasImmediateResult:!!D.result}),Q7($,D.sessionId,G,"creator",{interactive:Y.interactive!==!1}),u("info","session.create.read_records.begin",{...J,sessionId:D.sessionId});let[U,T]=await Promise.all([t0($,D.sessionId),e0($,D.sessionId)]);if(u("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 u("info","session.create.reply",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W)}),c(Z,{session:U,...T?{snapshot:T}:{}})}async function Af($,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 x(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 x(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 x(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=wX(H.clientContributions);if(F.length>0)Kf(B,K);let L=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||Hf(),f=Bf(H.configExtensions),D=PX({sessionId:L,targetClientId:K,contributions:F,sessionConfig:V,requestCapability:$.requestCapability}),T=await new c$().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:(E)=>$.sessionHost.getSession(E),readMessages:(E)=>$.sessionHost.readSessionMessages(E),buildStartInput:(E)=>{if(E.restoredCheckpointMetadata)B.checkpoint=E.restoredCheckpointMetadata;let w=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():E.sourceSession.workspaceRoot||E.sourceSession.cwd;return{source:typeof B.source==="string"?B.source:void 0,interactive:B.interactive!==!1,sessionMetadata:{...B,restoredFromSessionId:J,restoredCheckpointRunCount:X},initialMessages:E.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:E.sourceSession.provider),modelId:V?.modelId??(typeof G.model==="string"?G.model:E.sourceSession.model),apiKey:V?.apiKey??(typeof G.apiKey==="string"?G.apiKey:""),cwd:V?.cwd??E.plan.cwd,workspaceRoot:V?.workspaceRoot??w,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:(E)=>$.sessionHost.startSession(E),getStartedSessionId:(E)=>E.sessionId,readRestoredSession:(E)=>$.sessionHost.getSession(E)});if(!j)return c(Z,{checkpoint:T.checkpoint});let q=T.startResult;if(!q)return x(Z,"restore_failed","Checkpoint restore did not start a session");Q7($,q.sessionId,K,"creator",{interactive:B.interactive!==!1});let[z,_]=await Promise.all([t0($,q.sessionId),e0($,q.sessionId)]);if(z)$.publish($.buildEvent("session.created",{session:z,..._?{snapshot:_}:{}},q.sessionId));return c(Z,{session:z,..._?{snapshot:_}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof I0)return x(Z,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return x(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function ff($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_attach","session.attach requires a session id");Q7($,Q,Z.clientId?.trim()||"hub-client","participant");let W=await t0($,Q);if(W)$.publish($.buildEvent("session.attached",{session:W},Q));return W?c(Z,{session:W}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function Uf($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_detach","session.detach requires a session id");let W=Z.clientId?.trim()||"hub-client",[J]=await Promise.all([t0($,Q)]),X=Hy(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)}m$($,(H)=>H.sessionId===Q&&H.targetClientId===W,`Capability owner client ${W} detached before request was resolved.`);let[j,V]=await Promise.all([t0($,Q),e0($,Q)]);return $.publish($.buildEvent("session.detached",j?{session:j,...V?{snapshot:V}:{},clientId:W}:{clientId:W},Q)),c(Z)}async function Df($,Z){let Q=k0(Z),W=Z.payload?.includeSnapshot===!0,[J,X]=await Promise.all([t0($,Q),W?e0($,Q):Promise.resolve(void 0)]);return J?c(Z,{session:J,...X?{snapshot:X}:{}}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function Lf($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_id","session.messages requires a session id");if(!await t0($,Q))return x(Z,"session_not_found",`Unknown session: ${Q}`);let J=await $.sessionHost.readSessionMessages(Q);return c(Z,{sessionId:Q,messages:J})}async function _f($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,J=(await $.sessionHost.listSessions(Q)).map((X)=>$7(X,$.sessionState.get(X.sessionId)));return c(Z,{sessions:J})}async function zf($,Z){let Q=k0(Z),W=Z7(Z.payload?.metadata),J=await $.sessionHost.updateSession(Q,{metadata:W}),[X,Y]=await Promise.all([t0($,Q),e0($,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 Tf($,Z){let Q=k0(Z),W=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),c(Z,{deleted:W})}async function Of($,Z){let Q=k0(Z),W=$.sessionHost.pendingPrompts;if(!W)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await W.list({sessionId:Q});return c(Z,{sessionId:Q,prompts:J})}async function qf($,Z){let Q=k0(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 x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await Y.update({sessionId:Q,promptId:W,prompt:J,delivery:X});return c(Z,j)}async function Mf($,Z){let Q=k0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await J.delete({sessionId:Q,promptId:W});return c(Z,X)}function Rf($){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 Gy=new Set(["skills","workflows","rules","tools","mcp"]);function SX($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function a5($,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 Ky($,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 Ef($){if($===void 0)return{};if(!SX($))throw Error("settings.list payload must be an object.");return{cwd:a5($,"cwd"),workspaceRoot:a5($,"workspaceRoot"),availabilityContext:SX($.availabilityContext)?$.availabilityContext:void 0}}function Fy($){if(!SX($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!Gy.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...Ef($),type:Z,id:a5($,"id"),path:a5($,"path"),name:a5($,"name"),enabled:Ky($,"enabled")}}class z4{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=By("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new T1({sessionService:new z1(new L1),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:c2,requestCapability:(Z,Q,W,J,X)=>cA(this.ctx,Z,Q,W,J,X)},this.schedules=new U4({...$.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(c2(W,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new f4(this.schedules),this.settings=$.settingsService??new S$,$.cronOptions)this.cronService=new M5({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{Xf(this.ctx,Z).catch((Q)=>{qX("session event handling failed",Q),J7(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())TX(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(m$(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 J7(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 pA(this.ctx,$);case"client.update":return rA(this.ctx,$);case"client.unregister":return iA(this.ctx,$,(Z)=>{this.listeners.delete(Z),this.detachClientFromSessions(Z)});case"client.list":return nA(this.ctx,$);case"session.create":return await Ff(this.ctx,$,(Z)=>zX(this.ctx,Z));case"session.restore":return await Af(this.ctx,$,(Z)=>zX(this.ctx,Z));case"session.attach":return await ff(this.ctx,$);case"session.detach":return await Uf(this.ctx,$);case"session.get":return await Df(this.ctx,$);case"session.messages":return await Lf(this.ctx,$);case"session.list":return await _f(this.ctx,$);case"session.update":return await zf(this.ctx,$);case"session.pending_prompts":return await Of(this.ctx,$);case"session.update_pending_prompt":return await qf(this.ctx,$);case"session.remove_pending_prompt":return await Mf(this.ctx,$);case"session.delete":return await Tf(this.ctx,$);case"session.hook":return await Jf(this.ctx,$);case"run.start":case"session.send_input":return await Qf(this.ctx,$);case"run.abort":return await Wf(this.ctx,$);case"capability.request":return await dA(this.ctx,$);case"approval.respond":return await mA(this.ctx,$);case"capability.respond":return lA(this.ctx,$);case"capability.progress":return uA(this.ctx,$);case"ui.notify":return this.publish(c2("ui.notify",$.payload??{})),c($);case"ui.show_window":return this.publish(c2("ui.show_window",$.payload??{})),c($);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 Zf(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=Rf($.command);if(Q)this.publish(c2(Q,Z.payload))}return Z}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!Ay(Z.error.code))return;J7(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(Ef($.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(Fy($.payload));return this.publish(c2("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);m$(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){qX(`listener threw while publishing ${$.event}`,W),J7(this.options.telemetry,{component:"core",operation:"hub.publish",error:W,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function Ay($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as Ly}from"node:crypto";import _y from"node:http";import zy from"node:net";import{URL as kX}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as wf,HUB_CAPABILITIES as Ty,isHubProtocolCompatible as Oy,MAX_CLIENT_HUB_PROTOCOL_VERSION as Pf,MIN_CLIENT_HUB_PROTOCOL_VERSION as Sf}from"@cline/shared";import{WebSocketServer as qy}from"ws";import{captureSdkError as Nf,HUB_COMMAND_SLOW_LOG_MS as fy,resolveHubCommandTimeoutMs as Uy,safeJsonParse as Dy}from"@cline/shared";function bX($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function Cf($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}class s5{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=bX(H);u("info","command.start",K);let F=setTimeout(()=>{if(G)return;u("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-B)})},fy),A=this.transport.command(H.envelope);A.then((q)=>{if(!G)return;u(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;u("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-B),error:q})});let L=!1,f,D,U=Uy(H.envelope.command,H.envelope.timeoutMs);try{D=U===null?await A:await Promise.race([A,new Promise((q)=>{f=setTimeout(()=>{L=!0,Nf(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(Cf(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)u("error","command.timeout",{...K,durationMs:T,timeoutMs:U});else u(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"?Dy(V.data):void 0;if(!B||B.kind!=="command"){u("error","rejected malformed websocket frame",{error:H});return}u("error","command.error",{...bX(B),error:H}),Nf(this.telemetry,{component:"core",operation:"hub.websocket_command",error:H,severity:"error",handled:!0,context:bX(B)}),J({kind:"reply",envelope:Cf(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 o5{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}}function My($){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 Ry($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(W)=>{Q({data:My(W)})});return}$.on("close",Q)},removeEventListener(){}}}function Ey($){try{$.write(`HTTP/1.1 400 Bad Request\r
591
+ ${B}`:V.instructions}})}})}}function jy($,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:Vf(j)},Z))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function Vy($,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:Vf(Y)},Z,Y.emitUpdate?(V)=>{Y.emitUpdate?.(Wy(V))}:void 0))?.result}}))}function Hy($,Z,Q,W){let J=new Map(Q.map((Y)=>[Y.name,Y])),X={};for(let Y of Zy){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 PX($){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:jy($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...W.length>0?{hooks:Hy($.sessionId,$.targetClientId,W,$.requestCapability)}:{},...Q.length>0?{extraTools:Vy($.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:Yy($.sessionId,$.targetClientId,j,$.requestCapability)}:{}}}}var Gf="hubCapabilityOwnerClientId";function Kf($,Z){$[Gf]=Z}function By($){let Z=$?.[Gf];return typeof Z==="string"&&Z.trim()?Z.trim():void 0}async function Ff($,Z,Q){let W=performance.now(),J={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};u("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 u("warn","session.create.invalid",{...J,reason:"missing_workspace_root"}),x(Z,"invalid_session_create","session.create requires workspaceRoot or cwd");let G=Z.clientId?.trim()||"hub-client",K=wX(V.clientContributions);if(u("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)Kf(Y,G);let A=(typeof j?.sessionId==="string"?j.sessionId.trim():"")||Hf(),L=Bf(V.configExtensions);u("info","session.create.runtime_build.begin",{...J,sessionId:A,configExtensionCount:L?.length??0});let f=PX({sessionId:A,targetClientId:G,contributions:K,sessionConfig:j,requestCapability:$.requestCapability});u("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});u("info","session.create.start_session.end",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W),hasImmediateResult:!!D.result}),Q7($,D.sessionId,G,"creator",{interactive:Y.interactive!==!1}),u("info","session.create.read_records.begin",{...J,sessionId:D.sessionId});let[U,T]=await Promise.all([t0($,D.sessionId),e0($,D.sessionId)]);if(u("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 u("info","session.create.reply",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W)}),c(Z,{session:U,...T?{snapshot:T}:{}})}async function Af($,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 x(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 x(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 x(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=wX(H.clientContributions);if(F.length>0)Kf(B,K);let L=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||Hf(),f=Bf(H.configExtensions),D=PX({sessionId:L,targetClientId:K,contributions:F,sessionConfig:V,requestCapability:$.requestCapability}),T=await new c$().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:(E)=>$.sessionHost.getSession(E),readMessages:(E)=>$.sessionHost.readSessionMessages(E),buildStartInput:(E)=>{if(E.restoredCheckpointMetadata)B.checkpoint=E.restoredCheckpointMetadata;let w=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():E.sourceSession.workspaceRoot||E.sourceSession.cwd;return{source:typeof B.source==="string"?B.source:void 0,interactive:B.interactive!==!1,sessionMetadata:{...B,restoredFromSessionId:J,restoredCheckpointRunCount:X},initialMessages:E.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:E.sourceSession.provider),modelId:V?.modelId??(typeof G.model==="string"?G.model:E.sourceSession.model),apiKey:V?.apiKey??(typeof G.apiKey==="string"?G.apiKey:""),cwd:V?.cwd??E.plan.cwd,workspaceRoot:V?.workspaceRoot??w,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:(E)=>$.sessionHost.startSession(E),getStartedSessionId:(E)=>E.sessionId,readRestoredSession:(E)=>$.sessionHost.getSession(E)});if(!j)return c(Z,{checkpoint:T.checkpoint});let q=T.startResult;if(!q)return x(Z,"restore_failed","Checkpoint restore did not start a session");Q7($,q.sessionId,K,"creator",{interactive:B.interactive!==!1});let[z,_]=await Promise.all([t0($,q.sessionId),e0($,q.sessionId)]);if(z)$.publish($.buildEvent("session.created",{session:z,..._?{snapshot:_}:{}},q.sessionId));return c(Z,{session:z,..._?{snapshot:_}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof I0)return x(Z,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return x(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function ff($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_attach","session.attach requires a session id");Q7($,Q,Z.clientId?.trim()||"hub-client","participant");let W=await t0($,Q);if(W)$.publish($.buildEvent("session.attached",{session:W},Q));return W?c(Z,{session:W}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function Uf($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_detach","session.detach requires a session id");let W=Z.clientId?.trim()||"hub-client",[J]=await Promise.all([t0($,Q)]),X=By(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)}m$($,(H)=>H.sessionId===Q&&H.targetClientId===W,`Capability owner client ${W} detached before request was resolved.`);let[j,V]=await Promise.all([t0($,Q),e0($,Q)]);return $.publish($.buildEvent("session.detached",j?{session:j,...V?{snapshot:V}:{},clientId:W}:{clientId:W},Q)),c(Z)}async function Df($,Z){let Q=k0(Z),W=Z.payload?.includeSnapshot===!0,[J,X]=await Promise.all([t0($,Q),W?e0($,Q):Promise.resolve(void 0)]);return J?c(Z,{session:J,...X?{snapshot:X}:{}}):x(Z,"session_not_found",`Unknown session: ${Q}`)}async function Lf($,Z){let Q=k0(Z);if(!Q)return x(Z,"invalid_session_id","session.messages requires a session id");if(!await t0($,Q))return x(Z,"session_not_found",`Unknown session: ${Q}`);let J=await $.sessionHost.readSessionMessages(Q);return c(Z,{sessionId:Q,messages:J})}async function _f($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,J=(await $.sessionHost.listSessions(Q)).map((X)=>$7(X,$.sessionState.get(X.sessionId)));return c(Z,{sessions:J})}async function zf($,Z){let Q=k0(Z),W=Z7(Z.payload?.metadata),J=await $.sessionHost.updateSession(Q,{metadata:W}),[X,Y]=await Promise.all([t0($,Q),e0($,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 Tf($,Z){let Q=k0(Z),W=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),c(Z,{deleted:W})}async function Of($,Z){let Q=k0(Z),W=$.sessionHost.pendingPrompts;if(!W)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await W.list({sessionId:Q});return c(Z,{sessionId:Q,prompts:J})}async function qf($,Z){let Q=k0(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 x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await Y.update({sessionId:Q,promptId:W,prompt:J,delivery:X});return c(Z,j)}async function Mf($,Z){let Q=k0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return x(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await J.delete({sessionId:Q,promptId:W});return c(Z,X)}function Rf($){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 Ky=new Set(["skills","workflows","rules","tools","mcp"]);function SX($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function a5($,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 Fy($,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 Ef($){if($===void 0)return{};if(!SX($))throw Error("settings.list payload must be an object.");return{cwd:a5($,"cwd"),workspaceRoot:a5($,"workspaceRoot"),availabilityContext:SX($.availabilityContext)?$.availabilityContext:void 0}}function Ay($){if(!SX($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!Ky.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...Ef($),type:Z,id:a5($,"id"),path:a5($,"path"),name:a5($,"name"),enabled:Fy($,"enabled")}}class z4{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=Gy("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new T1({sessionService:new z1(new L1),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:c2,requestCapability:(Z,Q,W,J,X)=>cA(this.ctx,Z,Q,W,J,X)},this.schedules=new U4({...$.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(c2(W,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new f4(this.schedules),this.settings=$.settingsService??new S$,$.cronOptions)this.cronService=new M5({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{Xf(this.ctx,Z).catch((Q)=>{qX("session event handling failed",Q),J7(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())TX(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(m$(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 J7(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 pA(this.ctx,$);case"client.update":return rA(this.ctx,$);case"client.unregister":return iA(this.ctx,$,(Z)=>{this.listeners.delete(Z),this.detachClientFromSessions(Z)});case"client.list":return nA(this.ctx,$);case"session.create":return await Ff(this.ctx,$,(Z)=>zX(this.ctx,Z));case"session.restore":return await Af(this.ctx,$,(Z)=>zX(this.ctx,Z));case"session.attach":return await ff(this.ctx,$);case"session.detach":return await Uf(this.ctx,$);case"session.get":return await Df(this.ctx,$);case"session.messages":return await Lf(this.ctx,$);case"session.list":return await _f(this.ctx,$);case"session.update":return await zf(this.ctx,$);case"session.pending_prompts":return await Of(this.ctx,$);case"session.update_pending_prompt":return await qf(this.ctx,$);case"session.remove_pending_prompt":return await Mf(this.ctx,$);case"session.delete":return await Tf(this.ctx,$);case"session.hook":return await Jf(this.ctx,$);case"run.start":case"session.send_input":return await Qf(this.ctx,$);case"run.abort":return await Wf(this.ctx,$);case"capability.request":return await dA(this.ctx,$);case"approval.respond":return await mA(this.ctx,$);case"capability.respond":return lA(this.ctx,$);case"capability.progress":return uA(this.ctx,$);case"ui.notify":return this.publish(c2("ui.notify",$.payload??{})),c($);case"ui.show_window":return this.publish(c2("ui.show_window",$.payload??{})),c($);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 Zf(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=Rf($.command);if(Q)this.publish(c2(Q,Z.payload))}return Z}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!fy(Z.error.code))return;J7(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(Ef($.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(Ay($.payload));return this.publish(c2("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);m$(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){qX(`listener threw while publishing ${$.event}`,W),J7(this.options.telemetry,{component:"core",operation:"hub.publish",error:W,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function fy($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as _y}from"node:crypto";import zy from"node:http";import Ty from"node:net";import{URL as kX}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as wf,HUB_CAPABILITIES as Oy,isHubProtocolCompatible as qy,MAX_CLIENT_HUB_PROTOCOL_VERSION as Pf,MIN_CLIENT_HUB_PROTOCOL_VERSION as Sf}from"@cline/shared";import{WebSocketServer as My}from"ws";import{captureSdkError as Nf,HUB_COMMAND_SLOW_LOG_MS as Uy,resolveHubCommandTimeoutMs as Dy,safeJsonParse as Ly}from"@cline/shared";function bX($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function Cf($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}class s5{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=bX(H);u("info","command.start",K);let F=setTimeout(()=>{if(G)return;u("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-B)})},Uy),A=this.transport.command(H.envelope);A.then((q)=>{if(!G)return;u(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;u("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-B),error:q})});let L=!1,f,D,U=Dy(H.envelope.command,H.envelope.timeoutMs);try{D=U===null?await A:await Promise.race([A,new Promise((q)=>{f=setTimeout(()=>{L=!0,Nf(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(Cf(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)u("error","command.timeout",{...K,durationMs:T,timeoutMs:U});else u(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"?Ly(V.data):void 0;if(!B||B.kind!=="command"){u("error","rejected malformed websocket frame",{error:H});return}u("error","command.error",{...bX(B),error:H}),Nf(this.telemetry,{component:"core",operation:"hub.websocket_command",error:H,severity:"error",handled:!0,context:bX(B)}),J({kind:"reply",envelope:Cf(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 o5{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}}function Ry($){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 Ey($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(W)=>{Q({data:Ry(W)})});return}$.on("close",Q)},removeEventListener(){}}}function Ny($){try{$.write(`HTTP/1.1 400 Bad Request\r
592
592
  Connection: close\r
593
593
  Content-Length: 0\r
594
594
  \r
595
- `),$.end()}catch{$.destroy()}}function Ny($){try{$.write(`HTTP/1.1 401 Unauthorized\r
595
+ `),$.end()}catch{$.destroy()}}function Cy($){try{$.write(`HTTP/1.1 401 Unauthorized\r
596
596
  Connection: close\r
597
597
  Content-Length: 0\r
598
598
  \r
599
- `),$.end()}catch{$.destroy()}}function yX($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),W=Buffer.from(Z,"utf8");return Q.length===W.length&&Ly(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}
600
- Caused by: ${$.stack}`;return X}async function Cy($){return await new Promise((Z,Q)=>{let W=zy.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 wy($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var hX=new Map,yf="cline-hub-auth.",Py=30000;function IX($){return Array.isArray($)?$.join(","):$??""}function hf($){return $===32||$===9}function X7($){let Z=IX($).trim(),Q="bearer";if(Z.length<=6||Z.slice(0,6).toLowerCase()!=="bearer"||!hf(Z.charCodeAt(6)))return null;let W=7;while(W<Z.length&&hf(Z.charCodeAt(W)))W+=1;return Z.slice(W).trim()||null}function Sy($){for(let Z of IX($).split(",")){let Q=Z.trim();if(Q.startsWith(yf))return Q.slice(yf.length).trim()||null}return null}function Y7($){let Z=$.trim().toLowerCase();return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"||Z==="[::1]"}function xX($){let Z=IX($).trim();if(!Z)return!1;try{return Y7(new kX(Z).hostname)}catch{return!1}}async function d2($){let Z=$.owner??n1(),Q=$.host??"127.0.0.1",W=$.pathname??"/hub",J=$.port??s8(),X=J===0?await Cy(Q):J,Y=X,j=V1(Q,X,W),V=CQ(),H=NQ(),B=new z4($);await B.start();let G=new s5(new o5(B),$.telemetry),K=new Set,F=new Date().toISOString(),A={protocolVersion:wf,minClientProtocolVersion:Sf,maxClientProtocolVersion:Pf,capabilities:Ty,coreVersion:N5.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((_,E)=>{q.close((w)=>{if(w){E(w);return}_()})}),await new Promise((_,E)=>{T.close((w)=>{if(w){E(w);return}_()})}),await B.stop(),(await f0(Z.discoveryPath))?.url===j)await b0(Z.discoveryPath)})(),D},T=_y.createServer((z,_)=>{if((z.url??"/")==="/health"){let w=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(w);return}if((z.url??"/")==="/status"){if(!yX(X7(z.headers.authorization),H)){_.statusCode=401,_.end("Unauthorized");return}let w=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(w);return}if((z.url??"/")==="/version"){_.statusCode=200,_.setHeader("content-type","application/json"),_.end(JSON.stringify(A));return}if(new kX(z.url??"/",`http://${Q}:${Y}`).pathname==="/shutdown"&&z.method==="POST"){if(!yX(X7(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 qy({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)}}},Py),T.on("upgrade",(z,_,E)=>{if(new kX(z.url??"/",`http://${Q}:${Y}`).pathname!==W){_.destroy();return}if(!(yX(Sy(z.headers["sec-websocket-protocol"]),H)||Y7(Q)&&xX(z.headers.origin))){Ny(_);return}try{q.handleUpgrade(z,_,E,(l)=>{let o=l;o.isAlive=!0,o.on("pong",()=>{o.isAlive=!0}),L.add(o);let t=G.attach(Ry(l));K.add(t),l.once("close",()=>{L.delete(o),t(),K.delete(t)})})}catch{Ey(_)}});try{await new Promise((z,_)=>{T.once("error",(E)=>{_(bf(E,{host:Q,port:X,pathname:W}))}),T.listen(X,Q,()=>{let E=T.address();if(!E||typeof E==="string"){_(bf(Error("Failed to resolve hub port"),{host:Q,port:X,pathname:W}));return}Y=E.port,j=V1(Q,Y,W),z()})})}catch(z){if(f)clearInterval(f),f=void 0;throw await B.stop().catch(()=>{return}),z}return await wQ(Z.discoveryPath,{hubId:B.getHubId(),protocolVersion:wf,minClientProtocolVersion:Sf,maxClientProtocolVersion:Pf,capabilities:[...A.capabilities],coreVersion:N5.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 j7($){let Z=$.owner??n1(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=$.host??"127.0.0.1",J=$.port??s8(),X=$.pathname??"/hub",Y=V1(W,J,X),j=Z.discoveryPath,V=(B)=>{if(!Q)k$(B.url,B.authToken);return B},H=hX.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 PQ(Z.discoveryPath,async()=>{let B=await f0(Z.discoveryPath);if(B?.url&&(B.url===Y||$.allowPortFallback===!0)){let F=await a1(B.url,{authToken:B.authToken});if(F?.url&&Oy(F).compatible&&await f1(F.url,{authToken:B.authToken}))return V({url:F.url,authToken:B.authToken,action:"reuse"})}if(B?.url)await b0(Z.discoveryPath);let K=async(F)=>{let A=d2({...F,owner:Z});hX.set(j,A);try{let L=await A;return V({server:L,url:L.url,authToken:L.authToken,action:"started"})}catch(L){throw hX.delete(j),L}};try{return await K($)}catch(F){if(!$.allowPortFallback||!wy(F))throw F;return await K({...$,port:0})}})}function If(){return kf()==="production"?s0():y0()}function by($){return kf()!=="production"&&!$}async function xf($){let Z=a0({host:$.host,port:$.port,pathname:$.pathname});return await d2({...$,...Z,owner:If()})}async function gf($){let Z=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=a0({host:$.host,port:$.port,pathname:$.pathname});return await j7({...$,...Q,allowPortFallback:$.allowPortFallback??by(Z),owner:If()})}H7();var cf={};N(cf,{registerRemoteConfigSessionBlobUpload:()=>K7,readRemoteConfigSessionBlobUploadMetadata:()=>gX,prepareRemoteConfigCoreIntegration:()=>vX,createRemoteConfigSessionMessagesArtifactUploader:()=>mX,buildRemoteConfigSessionBlobUploadMetadata:()=>B7,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>G7});import{buildRemoteConfigSessionBlobUploadMetadata as B7,clearRemoteConfigSessionBlobUpload as yy,createClineTelemetryServiceConfig as hy,createSessionId as ky,createRemoteConfigSessionMessagesArtifactUploader as Iy,prepareRemoteConfigRuntime as xy,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as G7,readRemoteConfigSessionBlobUploadMetadata as gX,registerRemoteConfigSessionBlobUpload as K7}from"@cline/shared";function gy($,Z){let Q=$.telemetry||Z.telemetryService?{...Z.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return $$(hy(Q)).telemetry}function mX(){let $=Iy();return{async uploadMessagesFile(Z){await $.uploadMessagesFile(Z)}}}async function vX($){let Z=await xy($),Q=gy(Z,$),W=[Z.pluginDefinition],J=Z.claims?.subject,X=B7(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?K7(B,Z.bundle?.remoteConfig,J):void 0,K=G?{...j.sessionMetadata??{},[G7]:G}:j.sessionMetadata;return{...j,...K?{sessionMetadata:K}:{},config:{...j.config,...B?{sessionId:B}:{},extensions:[...V,...W],telemetry:Q??H}}},async dispose(){if(Y)yy(Y)}}}var af={};N(af,{createTeamName:()=>f7,DefaultRuntimeBuilder:()=>q4});import{hasRuntimeConfigExtension as ty}from"@cline/shared";import{nanoid as ey}from"nanoid";Y1();var nf={};N(nf,{createLocalTeamStore:()=>lX,SqliteTeamStore:()=>l2,FileTeamStore:()=>t5});import{appendFileSync as my,existsSync as T4,mkdirSync as uf,readdirSync as vy,readFileSync as df,renameSync as cy,writeFileSync as uy}from"node:fs";import{join as cX}from"node:path";import{resolveTeamDataDir as dy}from"@cline/shared/storage";function lf(){return new Date().toISOString()}function uX($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function pf($){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 t5{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??dy()}init(){this.ensureTeamDir()}listTeamNames(){if(!T4(this.teamDirPath))return[];return vy(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>T4(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let Z=this.readEnvelope($);return Z?.teamState?pf(Z.teamState):void 0}readHistory($,Z=200){let Q=this.historyPath($);if(!T4(Q))return[];return df(Q,"utf8").split(`
601
- `).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?pf(Z.teamState):void 0,teammates:Z?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,Z){this.ensureTeamSubdir($),my(this.historyPath($),`${JSON.stringify({ts:lf(),eventType:Z.type,payload:Z})}
602
- `,"utf8")}persistRuntime($,Z,Q){this.ensureTeamSubdir($);let W={version:1,updatedAt:lf(),teamState:Z,teammates:Q},J=this.statePath($),X=`${J}.tmp`;uy(X,`${JSON.stringify(W,null,2)}
603
- `,"utf8"),cy(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(!T4(this.teamDirPath))uf(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let Z=cX(this.ensureTeamDir(),uX($));if(!T4(Z))uf(Z,{recursive:!0});return Z}statePath($){return cX(this.ensureTeamDir(),uX($),"state.json")}historyPath($){return cX(this.ensureTeamDir(),uX($),"task-history.jsonl")}readEnvelope($){let Z=this.statePath($);if(!T4(Z))return;try{let Q=JSON.parse(df(Z,"utf8"));if(Q?.version===1&&Q.teamState)return Q}catch{}return}}import{existsSync as ly,mkdirSync as py}from"node:fs";import{join as ry}from"node:path";import{safeJsonParse as rf}from"@cline/shared";import{loadSqliteDb as iy,nowIso as dX}from"@cline/shared/db";import{resolveDbDataDir as ny}from"@cline/shared/storage";function ay(){return ny()}function O4($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function sy($){let Z=rf($);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 oy($){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 l2{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??ay()}init(){this.getRawDb()}ensureTeamDir(){if(!ly(this.teamDirPath))py(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return ry(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=iy(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
599
+ `),$.end()}catch{$.destroy()}}function yX($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),W=Buffer.from(Z,"utf8");return Q.length===W.length&&_y(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}
600
+ Caused by: ${$.stack}`;return X}async function wy($){return await new Promise((Z,Q)=>{let W=Ty.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 Py($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var hX=new Map,yf="cline-hub-auth.",Sy=30000;function IX($){return Array.isArray($)?$.join(","):$??""}function hf($){return $===32||$===9}function X7($){let Z=IX($).trim(),Q="bearer";if(Z.length<=6||Z.slice(0,6).toLowerCase()!=="bearer"||!hf(Z.charCodeAt(6)))return null;let W=7;while(W<Z.length&&hf(Z.charCodeAt(W)))W+=1;return Z.slice(W).trim()||null}function by($){for(let Z of IX($).split(",")){let Q=Z.trim();if(Q.startsWith(yf))return Q.slice(yf.length).trim()||null}return null}function Y7($){let Z=$.trim().toLowerCase();return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"||Z==="[::1]"}function xX($){let Z=IX($).trim();if(!Z)return!1;try{return Y7(new kX(Z).hostname)}catch{return!1}}async function d2($){let Z=$.owner??n1(),Q=$.host??"127.0.0.1",W=$.pathname??"/hub",J=$.port??s8(),X=J===0?await wy(Q):J,Y=X,j=V1(Q,X,W),V=CQ(),H=NQ(),B=new z4($);await B.start();let G=new s5(new o5(B),$.telemetry),K=new Set,F=new Date().toISOString(),A={protocolVersion:wf,minClientProtocolVersion:Sf,maxClientProtocolVersion:Pf,capabilities:Oy,coreVersion:N5.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((_,E)=>{q.close((w)=>{if(w){E(w);return}_()})}),await new Promise((_,E)=>{T.close((w)=>{if(w){E(w);return}_()})}),await B.stop(),(await f0(Z.discoveryPath))?.url===j)await b0(Z.discoveryPath)})(),D},T=zy.createServer((z,_)=>{if((z.url??"/")==="/health"){let w=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(w);return}if((z.url??"/")==="/status"){if(!yX(X7(z.headers.authorization),H)){_.statusCode=401,_.end("Unauthorized");return}let w=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(w);return}if((z.url??"/")==="/version"){_.statusCode=200,_.setHeader("content-type","application/json"),_.end(JSON.stringify(A));return}if(new kX(z.url??"/",`http://${Q}:${Y}`).pathname==="/shutdown"&&z.method==="POST"){if(!yX(X7(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 My({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)}}},Sy),T.on("upgrade",(z,_,E)=>{if(new kX(z.url??"/",`http://${Q}:${Y}`).pathname!==W){_.destroy();return}if(!(yX(by(z.headers["sec-websocket-protocol"]),H)||Y7(Q)&&xX(z.headers.origin))){Cy(_);return}try{q.handleUpgrade(z,_,E,(l)=>{let o=l;o.isAlive=!0,o.on("pong",()=>{o.isAlive=!0}),L.add(o);let t=G.attach(Ey(l));K.add(t),l.once("close",()=>{L.delete(o),t(),K.delete(t)})})}catch{Ny(_)}});try{await new Promise((z,_)=>{T.once("error",(E)=>{_(bf(E,{host:Q,port:X,pathname:W}))}),T.listen(X,Q,()=>{let E=T.address();if(!E||typeof E==="string"){_(bf(Error("Failed to resolve hub port"),{host:Q,port:X,pathname:W}));return}Y=E.port,j=V1(Q,Y,W),z()})})}catch(z){if(f)clearInterval(f),f=void 0;throw await B.stop().catch(()=>{return}),z}return await wQ(Z.discoveryPath,{hubId:B.getHubId(),protocolVersion:wf,minClientProtocolVersion:Sf,maxClientProtocolVersion:Pf,capabilities:[...A.capabilities],coreVersion:N5.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 j7($){let Z=$.owner??n1(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=$.host??"127.0.0.1",J=$.port??s8(),X=$.pathname??"/hub",Y=V1(W,J,X),j=Z.discoveryPath,V=(B)=>{if(!Q)k$(B.url,B.authToken);return B},H=hX.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 PQ(Z.discoveryPath,async()=>{let B=await f0(Z.discoveryPath);if(B?.url&&(B.url===Y||$.allowPortFallback===!0)){let F=await a1(B.url,{authToken:B.authToken});if(F?.url&&qy(F).compatible&&await f1(F.url,{authToken:B.authToken}))return V({url:F.url,authToken:B.authToken,action:"reuse"})}if(B?.url)await b0(Z.discoveryPath);let K=async(F)=>{let A=d2({...F,owner:Z});hX.set(j,A);try{let L=await A;return V({server:L,url:L.url,authToken:L.authToken,action:"started"})}catch(L){throw hX.delete(j),L}};try{return await K($)}catch(F){if(!$.allowPortFallback||!Py(F))throw F;return await K({...$,port:0})}})}function If(){return kf()==="production"?s0():y0()}function yy($){return kf()!=="production"&&!$}async function xf($){let Z=a0({host:$.host,port:$.port,pathname:$.pathname});return await d2({...$,...Z,owner:If()})}async function gf($){let Z=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=a0({host:$.host,port:$.port,pathname:$.pathname});return await j7({...$,...Q,allowPortFallback:$.allowPortFallback??yy(Z),owner:If()})}H7();var cf={};N(cf,{registerRemoteConfigSessionBlobUpload:()=>K7,readRemoteConfigSessionBlobUploadMetadata:()=>gX,prepareRemoteConfigCoreIntegration:()=>vX,createRemoteConfigSessionMessagesArtifactUploader:()=>mX,buildRemoteConfigSessionBlobUploadMetadata:()=>B7,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>G7});import{buildRemoteConfigSessionBlobUploadMetadata as B7,clearRemoteConfigSessionBlobUpload as hy,createClineTelemetryServiceConfig as ky,createSessionId as Iy,createRemoteConfigSessionMessagesArtifactUploader as xy,prepareRemoteConfigRuntime as gy,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as G7,readRemoteConfigSessionBlobUploadMetadata as gX,registerRemoteConfigSessionBlobUpload as K7}from"@cline/shared";function my($,Z){let Q=$.telemetry||Z.telemetryService?{...Z.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return $$(ky(Q)).telemetry}function mX(){let $=xy();return{async uploadMessagesFile(Z){await $.uploadMessagesFile(Z)}}}async function vX($){let Z=await gy($),Q=my(Z,$),W=[Z.pluginDefinition],J=Z.claims?.subject,X=B7(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()||Iy():j.config.sessionId;if(B&&X)Y=B;let G=B&&X?K7(B,Z.bundle?.remoteConfig,J):void 0,K=G?{...j.sessionMetadata??{},[G7]: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)}}}var af={};N(af,{createTeamName:()=>f7,DefaultRuntimeBuilder:()=>q4});import{hasRuntimeConfigExtension as ey}from"@cline/shared";import{nanoid as $h}from"nanoid";Y1();var nf={};N(nf,{createLocalTeamStore:()=>lX,SqliteTeamStore:()=>l2,FileTeamStore:()=>t5});import{appendFileSync as vy,existsSync as T4,mkdirSync as uf,readdirSync as cy,readFileSync as df,renameSync as uy,writeFileSync as dy}from"node:fs";import{join as cX}from"node:path";import{resolveTeamDataDir as ly}from"@cline/shared/storage";function lf(){return new Date().toISOString()}function uX($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function pf($){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 t5{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??ly()}init(){this.ensureTeamDir()}listTeamNames(){if(!T4(this.teamDirPath))return[];return cy(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>T4(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let Z=this.readEnvelope($);return Z?.teamState?pf(Z.teamState):void 0}readHistory($,Z=200){let Q=this.historyPath($);if(!T4(Q))return[];return df(Q,"utf8").split(`
601
+ `).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?pf(Z.teamState):void 0,teammates:Z?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,Z){this.ensureTeamSubdir($),vy(this.historyPath($),`${JSON.stringify({ts:lf(),eventType:Z.type,payload:Z})}
602
+ `,"utf8")}persistRuntime($,Z,Q){this.ensureTeamSubdir($);let W={version:1,updatedAt:lf(),teamState:Z,teammates:Q},J=this.statePath($),X=`${J}.tmp`;dy(X,`${JSON.stringify(W,null,2)}
603
+ `,"utf8"),uy(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(!T4(this.teamDirPath))uf(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let Z=cX(this.ensureTeamDir(),uX($));if(!T4(Z))uf(Z,{recursive:!0});return Z}statePath($){return cX(this.ensureTeamDir(),uX($),"state.json")}historyPath($){return cX(this.ensureTeamDir(),uX($),"task-history.jsonl")}readEnvelope($){let Z=this.statePath($);if(!T4(Z))return;try{let Q=JSON.parse(df(Z,"utf8"));if(Q?.version===1&&Q.teamState)return Q}catch{}return}}import{existsSync as py,mkdirSync as ry}from"node:fs";import{join as iy}from"node:path";import{safeJsonParse as rf}from"@cline/shared";import{loadSqliteDb as ny,nowIso as dX}from"@cline/shared/db";import{resolveDbDataDir as ay}from"@cline/shared/storage";function sy(){return ay()}function O4($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function oy($){let Z=rf($);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 ty($){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 l2{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??sy()}init(){this.getRawDb()}ensureTeamDir(){if(!py(this.teamDirPath))ry(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return iy(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=ny(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
604
604
  CREATE TABLE IF NOT EXISTS team_store_schema_version (
605
605
  lock INTEGER PRIMARY KEY CHECK (lock = 1),
606
606
  version INTEGER NOT NULL
@@ -684,7 +684,7 @@ Caused by: ${$.stack}`;return X}async function Cy($){return await new Promise((Z
684
684
  version INTEGER NOT NULL DEFAULT 1,
685
685
  PRIMARY KEY(team_name, fragment_id)
686
686
  );
687
- `)}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 = ?",[O4($)]);if(!Z)return;let Q=rf(Z.state_json);if(!Q)return;try{return oy(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 ?",[O4($),Z]).flatMap((Q)=>{try{return[{eventType:Q.event_type,payload:JSON.parse(Q.payload_json),ts:Q.ts}]}catch{return[]}})}loadRuntime($){let Z=O4($),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?sy(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)
687
+ `)}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 = ?",[O4($)]);if(!Z)return;let Q=rf(Z.state_json);if(!Q)return;try{return ty(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 ?",[O4($),Z]).flatMap((Q)=>{try{return[{eventType:Q.event_type,payload:JSON.parse(Q.payload_json),ts:Q.ts}]}catch{return[]}})}loadRuntime($){let Z=O4($),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?oy(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)
688
688
  VALUES (?, ?, ?, ?, NULL, ?)`,[O4($),dX(),Z,JSON.stringify(Q),W??null])}persistRuntime($,Z,Q){let W=O4($),J=dX();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
689
689
  VALUES (?, ?, ?, ?)
690
690
  ON CONFLICT(team_name) DO UPDATE SET
@@ -731,28 +731,28 @@ Caused by: ${$.stack}`;return X}async function Cy($){return await new Promise((Z
731
731
  reviewed_by = excluded.reviewed_by,
732
732
  reviewed_at = excluded.reviewed_at,
733
733
  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=O4($),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=dX();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
734
- 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 lX($={}){try{let Z=new l2($);return Z.init(),Z}catch{let Z=new t5({teamDir:$.teamDir});return Z.init(),Z}}function F7($,Z){return ty($,Z)}function $h($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function Zh($,Z){return $.filter((Q)=>$h(Q.name,Z))}function pX($,Z){return g1(Zh($,Z))}var Qh={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 Wh($){let Z=$.trim().toLowerCase();return Qh[Z]??Z}function Jh($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(Wh));if(Z.skills!==void 0)Q.add("skills");return $.filter((W)=>Q.has(W.name))}function f7(){return`team-${ey(5)}`}function A7($,Z,Q,W,J,X,Y,j){let V=u0[x1({mode:Q})],H=F8(Z,W,Q,J??K8);return pX(V2({cwd:$,...V,enableSkills:!!Y,...H,executors:{...Y?{skills:Y}:{},...j??{}}}),X)}function Xh($){return A7($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,Yh,$.toolExecutors).some((Z)=>Z.name==="skills")}var Yh=async()=>"";async function jh($){let Z=$0();if(!p1({filePath:Z}))return{tools:[]};let Q=new M2({clientFactory:r8({settingsPath:Z})}),W;try{W=await q2(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)=>n8({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 Vh($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function Hh($){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 Bh($){let Z=u0[x1({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 q4{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=Bh(Z),F=Z.workspaceRoot??Z.cwd,A=$.toolPolicies??Z.toolPolicies,L=F1(),f=[],D=Z.teamName?.trim()||f7(),U=Z.sessionId?.trim()||D,T=K.enableSpawnAgent?Q4({workspaceRoot:F}):{configs:[],errors:[]},q=T.configs.some((v)=>v.skills!==void 0),z=F7(H,"rules"),_=F7(H,"skills"),E=_||q,w=F7(H,"workflows"),y=F7(H,"plugins"),l=z||_||w,o=!1,t=Boolean(V),Q0=V,Q1;for(let v of T.errors)(J??Z.logger)?.log?.(`[agents] Failed to load agent config at ${v.path}: ${v.error.message}`);if(!Q0&&(l||q))Q0=C$({skills:E?{workspacePath:F,includePluginSkills:y,pluginSkillDirectories:y?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(Q0)await Q0.start().catch(()=>{});let l$=K.enableTools&&_&&Boolean(Q0)&&Q0?.hasConfiguredSkills(Z.skills)===!0&&Xh({cwd:Z.cwd,providerId:Z.providerId,mode:K.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:A,toolExecutors:B}),r=Q0&&l?Q0.createExtension({includeRules:z,includeSkills:_,includeWorkflows:w,registerSkillsTool:l$,allowedSkillNames:Z.skills}):void 0,M1=r?[...W??Z.extensions??[],r]:W??Z.extensions;if(K.enableTools){if(f.push(...A7(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,B)),!K.disableMcpSettingsTools){let v=await jh(Z.logger);f.push(...v.tools),Q1=v.shutdown}}let P,B0=K.enableAgentTeams?lX():void 0,G0=B0?.loadRuntime(U),w0=G0?.state,a2=G0?.teammates??[],R1=new Map(a2.map((v)=>[v.agentId,v])),G1=Z.sessionId||D,P4,s2=[],K9=!1,E1=D$({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:M1,logger:J??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(K.enableSpawnAgent){if(T.configs.length>0)f.push(...pX(W4({configProvider:E1,agents:T.configs,createSubAgentTools:(v)=>K.enableTools?Jh(A7(Z.cwd,v.providerId??Z.providerId,K.mode,v.modelId??Z.modelId,Z.toolRoutingRules,A,v.skills!==void 0&&Q0?.createSkillsExecutor?Q0.createSkillsExecutor(v.skills):void 0,B),v):[],hookErrorMode:Z.hookErrorMode,toolPolicies:A,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),A))}if(!this.teamRuntimeEntries.has(G1))this.teamRuntimeEntries.set(G1,{delegatedAgentConfigProvider:E1});let F9=()=>{if(!K.enableAgentTeams)return;let v=this.teamRuntimeEntries.get(G1)??{delegatedAgentConfigProvider:E1};if(this.teamRuntimeEntries.set(G1,v),P=v.runtime,!P){if(P=new k2({teamName:D,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:K.missionLogIntervalSteps,missionLogIntervalMs:K.missionLogIntervalMs,onTeamEvent:(Y0)=>{if(G(Y0),P&&B0){if(Y0.type==="teammate_spawned"&&Y0.teammate?.rolePrompt){let N1={agentId:Y0.agentId,rolePrompt:Y0.teammate.rolePrompt,modelId:Y0.teammate.modelId,maxIterations:Y0.teammate.maxIterations};R1.set(N1.agentId,N1)}if(Y0.type==="teammate_shutdown"&&!Hh(Y0.reason))R1.delete(Y0.agentId);B0.handleTeamEvent(U,Y0),B0.persistRuntime(U,P.exportState(),Array.from(R1.values()))}}}),w0)P.hydrateState(w0),K9=!0;v.runtime=P}if(!o){if(!P)return;o=!0;let Y0=D8({runtime:P,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(w0),restoredTeammates:a2,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(N1)=>{s2=N1,P4?.addTools(N1)},createBaseTools:K.enableTools?()=>A7(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,B):void 0,teammateConfigProvider:E1});if(K9)P.recoverActiveRuns("runtime_recovered");if(Y0.restoredFromPersistence)j?.();f.push(...Y0.tools)}return P};if(K.enableSpawnAgent&&Y){let v=Y();f.push({...v,execute:async(Y0,N1)=>{return F9(),v.execute(Y0,N1)}})}if(K.enableAgentTeams)F9();let o2=pX(f,A),ZW=o2.some((v)=>v.name==="submit_and_exit"&&v.lifecycle?.completesRun===!0),A9=K.enableAgentTeams?()=>{let v=this.teamRuntimeEntries.get(G1)?.runtime;if(!v)return;let Y0=v.listTasks(),N1=Y0.some((J$)=>J$.status==="in_progress"||J$.status==="pending"),Qj=v.listRuns({}),zD=Qj.some((J$)=>J$.status==="running"||J$.status==="queued");if(N1||zD){let J$=Y0.filter((g0)=>g0.status==="in_progress"||g0.status==="pending").map((g0)=>`${g0.id} (${g0.status}): ${g0.title}`).join(", "),Wj=Qj.filter((g0)=>g0.status==="running"||g0.status==="queued").map((g0)=>`${g0.id} (${g0.status})`).join(", "),QW=[];if(J$)QW.push(`Unfinished tasks: ${J$}`);if(Wj)QW.push(`Active runs: ${Wj}`);return`[SYSTEM] You still have team obligations. ${QW.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,_D=ZW?{requireCompletionTool:!0,...A9?{completionGuard:A9}:{}}:A9?{completionGuard:A9}:void 0;return{tools:o2,logger:J??Z.logger,telemetry:X??Z.telemetry,teamRuntime:P,teamRestoredFromPersistence:Boolean(w0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(G1)?.delegatedAgentConfigProvider??E1,extensions:M1,completionPolicy:_D,registerLeadAgent:(v)=>{if(P4=v,s2.length>0)v.addTools(g1(s2,[...L]))},shutdown:async(v)=>{if(Vh(P,v),this.teamRuntimeEntries.delete(G1),await Q1?.(),!t)Q0?.stop()}}}}var of={};N(of,{requestDesktopToolApproval:()=>iX});import{mkdir as Gh,readFile as Kh,unlink as Fh,writeFile as Ah}from"node:fs/promises";import{join as sf}from"node:path";function fh($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function Uh($){return new Promise((Z)=>setTimeout(Z,$))}async function rX($){try{await Fh($)}catch{}}async function iX($,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 Gh(Q,{recursive:!0});let J=fh(`${$.toolCallId}`),X=sf(Q,`${W}.request.${J}.json`),Y=sf(Q,`${W}.decision.${J}.json`),j=Z.nowIso??(()=>new Date().toISOString());await Ah(X,`${JSON.stringify({requestId:J,sessionId:W,createdAt:j(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
735
- `,"utf8");let V=Z.timeoutMs??300000,H=Z.pollIntervalMs??200,B=Date.now();while(Date.now()-B<V){try{let G=await Kh(Y,"utf8"),K=JSON.parse(G),F={approved:K.approved===!0,reason:typeof K.reason==="string"?K.reason:void 0};return await Promise.all([rX(Y),rX(X)]),F}catch{}await Uh(H)}return await rX(X),{approved:!1,reason:"Tool approval request timed out"}}Y1();var ef={};N(ef,{parseMcpInstallArgs:()=>e5,installMcpServer:()=>nX,buildMcpInstallTransport:()=>U7});function Dh($){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 Lh($){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 _h($){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 zh($){let Z=$.indexOf("<");return Z>=0&&$.indexOf(">",Z+1)>Z+1}function tf($){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 Th($){if($.length===0)return{warnings:[]};let Z={},Q=[];for(let W of $){let[J,X]=_h(W);if(Z[J]=X,zh(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 U7($){let Z=$.name.trim();if(!Z)throw Error("MCP server name is required");let{headers:Q,targetArgs:W,transport:J}=tf({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),X=Dh(J),{headers:Y,warnings:j}=Th(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 Lh(V),{name:Z,transport:Y?{type:X,url:V,headers:Y}:{type:X,url:V},warnings:j}}function e5($){let[Z,...Q]=$;if(!Z)throw Error("Marketplace MCP install args must start with a server name.");return{name:Z,...tf({parseTransport:!0,targetArgs:Q})}}function Oh($,Z,Q){j1(Q,(W)=>{let J=W.mcpServers,X=J&&typeof J==="object"&&!Array.isArray(J)?{...J}:{};X[$]={transport:Z},W.mcpServers=X})}function nX($){let{name:Z,transport:Q,warnings:W}=U7($);return Oh(Z,Q,$.settingsPath??$0()),{name:Z,status:"installed",transport:Q,warnings:W}}var GU={};N(GU,{uninstallMarketplaceSkill:()=>q7,uninstallMarketplacePlugin:()=>M7,uninstallMarketplaceMcpServerFromSettings:()=>T7,uninstallMarketplaceEntry:()=>HY,resolveMarketplaceMcpServerName:()=>J9,marketplaceEntryKey:()=>VY,isMarketplaceSkillInstalled:()=>O7,getMarketplaceSkillCandidates:()=>X9,getGlobalMarketplaceSkillPaths:()=>Y9,findInstalledGlobalMarketplaceSkillName:()=>j9});import{spawn as eh}from"node:child_process";import{existsSync as HU,rmSync as $k}from"node:fs";import{homedir as Zk,platform as Qk}from"node:os";import{dirname as Wk,join as VU}from"node:path";import{resolveClineDir as Jk,resolveMcpSettingsPath as Xk}from"@cline/shared/storage";Y1();var jU={};N(jU,{uninstallPlugin:()=>Q9});import{existsSync as R4,readdirSync as Sh,readFileSync as bh,rmdirSync as yh,rmSync as hh,statSync as kh}from"node:fs";import{basename as $1,dirname as u$,extname as Ih,isAbsolute as xh,join as Z$,relative as gh,resolve as M4,sep as eX}from"node:path";import{discoverPluginModulePaths as mh,resolvePluginConfigSearchPaths as vh}from"@cline/shared/storage";var WU={};N(WU,{syncPluginMcpServersToSettings:()=>$9,removePluginMcpServersFromSettings:()=>Z9,disablePluginMcpServersInSettings:()=>tX});import{existsSync as qh,mkdirSync as Mh,readFileSync as Rh,writeFileSync as Eh}from"node:fs";import{dirname as ZU,isAbsolute as Nh,relative as Ch,resolve as $U}from"node:path";function p2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function D7($,Z){let Q=Ch($U($),$U(Z));return Q===""||!Q.startsWith("..")&&!Nh(Q)}function aX($){if(!qh($))return{mcpServers:{}};try{let Z=JSON.parse(Rh($,"utf8"));if(p2(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 sX($){if(p2($.mcpServers))return{...$.mcpServers};return{}}function oX($,Z,Q){Mh(ZU($),{recursive:!0}),Eh($,`${JSON.stringify({...Z,mcpServers:Q},null,2)}
736
- `,"utf8")}function QU($){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 _7($){if(!p2($))return;let Z=$.metadata;return p2(Z)?Z:void 0}function L7($,Z){let Q=_7($);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||D7(Z.pluginPath,J)||D7(J,Z.pluginPath)))return!0;if(W&&Z.pluginNames?.some((X)=>X===W))return!0;if(J&&Z.pluginPaths?.some((X)=>J===X||D7(X,J)||D7(J,X)))return!0;return!1}function wh($){let Z=p2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:ZU($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function Ph($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await E8({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 $9($){let Z=$.settingsPath??$0(),Q={mutations:[],failures:[]},W;try{W=await Ph($)}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=aX(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=sX(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=LQ(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(!L7(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]=wh({registration:H.registration,pluginName:B.pluginName,pluginPath:B.pluginPath,existing:p2(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=_7(B),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=Y.get(K);if(F&&L7(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{oX(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 tX($){let Z=$.settingsPath??$0(),Q;try{Q=aX(Z)}catch{return[]}let W=sX(Q),J=QU($),X=[];for(let[Y,j]of Object.entries(W)){if(!p2(j)||!L7(j,J))continue;let V=_7(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)oX(Z,Q,W);return X}function Z9($){let Z=$.settingsPath??$0(),Q;try{Q=aX(Z)}catch{return[]}let W=sX(Q),J=QU($),X=[];for(let[Y,j]of Object.entries(W)){if(!L7(j,J))continue;let V=_7(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)oX(Z,Q,W);return X}var JY="_installed",ch="package",uh=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function $Y($){return $.trim().toLowerCase()}function B1($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function dh($){return $.replace(/-[0-9a-f]{12}$/i,"")}function ZY($){let Z=Ih($);return Z?$.slice(0,-Z.length):$}function QY($){if(!R4($))return;try{let Z=JSON.parse(bh($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function XY($,Z){let Q=gh(Z,$);return Q===""||!Q.startsWith("..")&&!xh(Q)}function JU($){let Q=M4($).split(eX),W=Q.lastIndexOf(JY);if(W<0)return;let J=Q[W+1];if(!J)return;let X=uh.get(J)??1,Y=W+2+X;if(Q.length<Y)return;let j=Q.slice(0,Y).join(eX)||eX;return R4(j)?j:void 0}function z7($){try{return Sh($,{withFileTypes:!0})}catch{return[]}}function lh($){let Z=Z$($,JY);if(!R4(Z))return[];let Q=[];for(let W of z7(Z)){if(!W.isDirectory())continue;let J=Z$(Z,W.name);if(W.name==="git"){for(let X of z7(J)){if(!X.isDirectory())continue;let Y=Z$(J,X.name);for(let j of z7(Y))if(j.isDirectory())Q.push(Z$(Y,j.name))}continue}for(let X of z7(J))if(X.isDirectory())Q.push(Z$(J,X.name))}return Q.sort((W,J)=>W.localeCompare(J))}function XU($){try{return mh($)}catch{return[]}}function WY($){let Z=XU($),Q=new Set;B1(Q,$1($)),B1(Q,dh($1($))),B1(Q,QY(Z$($,"package.json"))),B1(Q,QY(Z$($,ch,"package.json")));for(let W of Z)B1(Q,$1(W)),B1(Q,ZY($1(W)));return{installPath:$,entryPaths:Z,names:[...Q].sort((W,J)=>W.localeCompare(J)),installed:!0}}function ph($,Z){let Q=M4($),W=Z.find((Y)=>XY(Q,Y));if(!W)return;let J=u$(Q);while(J!==W&&J!==u$(J)){if(R4(Z$(J,"package.json")))return J;J=u$(J)}let X=$1(Q);if((X==="index.ts"||X==="index.js")&&u$(Q)!==W)return u$(Q);return Q}function YU($,Z){let Q=ph($,Z);if(!Q)return;let W=new Set;return B1(W,$1($)),B1(W,ZY($1($))),B1(W,$1(Q)),B1(W,ZY($1(Q))),B1(W,QY(Z$(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...W].sort((J,X)=>J.localeCompare(X)),installed:!1}}function rh($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return vh(Z).filter((Q)=>R4(Q))}function ih($){let Z=new Map;for(let Q of $){for(let W of lh(Q))Z.set(W,WY(W));for(let W of XU(Q)){let J=JU(W);if(J){if(!Z.has(J))Z.set(J,WY(J));continue}let X=YU(W,$);if(X)Z.set(X.installPath,X)}}return[...Z.values()].sort((Q,W)=>Q.installPath.localeCompare(W.installPath))}function nh($,Z){let Q=$Y(Z);if(!Q)return!1;if($Y($.installPath)===Q)return!0;return $.names.some((W)=>$Y(W)===Q)}function ah($,Z,Q){let W=M4($);for(let X of Z){if(XY(W,X.installPath))return X;if(X.entryPaths.some((Y)=>M4(Y)===W))return X}let J=JU(W);if(J)return WY(J);if(R4(W))return YU(W,Q);return}function sh($){let Z=_0(),Q=Z.disabledPlugins;if(!Q?.length)return;let W=Q.filter((J)=>{let X=M4(J);if(XY(X,$.installPath))return!1;return!$.entryPaths.some((Y)=>M4(Y)===X)});if(W.length===Q.length)return;K1({...Z,disabledPlugins:W})}function oh($){let Z=u$($);while(Z!==u$(Z)&&$1(Z)!==JY){try{yh(Z)}catch{return}Z=u$(Z)}}function th($){return`${$.names[0]??$1($.installPath)} at ${$.installPath}`}async function Q9($){let Z=rh($),Q=ih(Z),W=$.path?.trim(),J=$.name?.trim(),X;if(W){if(X=ah(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)=>nh(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(th).join(", ")}`);X=j[0]}let Y=kh(X.installPath,{throwIfNoEntry:!1});if(!Y)throw Error(`Plugin install path does not exist: ${X.installPath}`);if(Z9({pluginPaths:[X.installPath,...X.entryPaths],pluginNames:X.names}),hh(X.installPath,{recursive:Y.isDirectory(),force:!0}),sh(X),X.installed)oh(X.installPath);return{name:J||X.names[0]||$1(X.installPath),installPath:X.installPath,removedPaths:[X.installPath],entryPaths:X.entryPaths}}var YY=120000,W9=12000,Yk=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,jk=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,Vk=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,Hk=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function jY($){return $.install?.args??[]}function Bk(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||Zk()}function Gk($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function Kk($){return Gk($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function BU($){return $.split(/\r?\n/).map((Z)=>{if(!Yk.test(Z))return Z;return Z.replace(jk,"$1[redacted]").replace(Vk,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(Hk,"$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(`
737
- `).slice(-W9)}function Fk($){let Z=BU([$.stdout,$.stderr].filter(Boolean).join(`
738
- `)).trim();return Z.length>0?Z:void 0}function Ak($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function fk($,Z){return[$,...Z].map((Q)=>Ak(BU(Q).trim())).join(" ")}var Uk=async($,Z)=>new Promise((Q,W)=>{let J=!1,X=!1,Y=eh($,Z,{env:process.env,shell:Qk()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),j="",V="",H=setTimeout(()=>{if(!J)Y.kill("SIGKILL")},YY+5000),B=setTimeout(()=>{X=!0,V+=`
739
- Timed out after ${YY/1000}s.`,Y.kill("SIGTERM")},YY);H.unref?.(),B.unref?.(),Y.stdout?.on("data",(G)=>{if(j+=String(G),j.length>W9*2)j=j.slice(-W9)}),Y.stderr?.on("data",(G)=>{if(V+=String(G),V.length>W9*2)V=V.slice(-W9)}),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 VY($){return`${$.type}:${$.id}`}function J9($){let Z=jY($);if(Z.length===0)throw Error("Marketplace install args are required.");return e5(Z).name}function T7($,Z={}){let Q=J9($),W=Z.mcpSettingsPath??Xk(),J=j1(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 X9($){let Z=new Set,Q=(J)=>{let X=Kk(J??"");if(X&&X!=="skill")Z.add(X)};Q($.id),Q($.name);let W=jY($);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 Y9($){return[VU(Jk(),"skills",$,"SKILL.md"),VU(Bk(),".agents","skills",$,"SKILL.md")].filter((Z,Q,W)=>W.indexOf(Z)===Q)}function j9($){if($.type!=="skill")return;return X9($).find((Z)=>Y9(Z).some((Q)=>HU(Q)))}function O7($){return j9($)!==void 0}function Dk($){let Z=[];if($.type!=="skill")return Z;for(let Q of X9($))for(let W of Y9(Q)){if(!HU(W))continue;let J=Wk(W);$k(J,{recursive:!0,force:!0}),Z.push(J)}return Z}async function q7($,Z={}){let Q=j9($);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=fk(W,J),Y=Z.spawnCommand??Uk,j;try{j=await Y(W,J)}catch(B){throw Error(`Failed to start ${$.name??$.id} uninstall command:
734
+ 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 lX($={}){try{let Z=new l2($);return Z.init(),Z}catch{let Z=new t5({teamDir:$.teamDir});return Z.init(),Z}}function F7($,Z){return ey($,Z)}function Zh($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function Qh($,Z){return $.filter((Q)=>Zh(Q.name,Z))}function pX($,Z){return g1(Qh($,Z))}var Wh={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 Jh($){let Z=$.trim().toLowerCase();return Wh[Z]??Z}function Xh($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(Jh));if(Z.skills!==void 0)Q.add("skills");return $.filter((W)=>Q.has(W.name))}function f7(){return`team-${$h(5)}`}function A7($,Z,Q,W,J,X,Y,j){let V=u0[x1({mode:Q})],H=F8(Z,W,Q,J??K8);return pX(V2({cwd:$,...V,enableSkills:!!Y,...H,executors:{...Y?{skills:Y}:{},...j??{}}}),X)}function Yh($){return A7($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,jh,$.toolExecutors).some((Z)=>Z.name==="skills")}var jh=async()=>"";async function Vh($){let Z=$0();if(!p1({filePath:Z}))return{tools:[]};let Q=new M2({clientFactory:r8({settingsPath:Z})}),W;try{W=await q2(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)=>n8({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 Hh($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function Bh($){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 Gh($){let Z=u0[x1({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 q4{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=Gh(Z),F=Z.workspaceRoot??Z.cwd,A=$.toolPolicies??Z.toolPolicies,L=F1(),f=[],D=Z.teamName?.trim()||f7(),U=Z.sessionId?.trim()||D,T=K.enableSpawnAgent?Q4({workspaceRoot:F}):{configs:[],errors:[]},q=T.configs.some((v)=>v.skills!==void 0),z=F7(H,"rules"),_=F7(H,"skills"),E=_||q,w=F7(H,"workflows"),y=F7(H,"plugins"),l=z||_||w,o=!1,t=Boolean(V),Q0=V,Q1;for(let v of T.errors)(J??Z.logger)?.log?.(`[agents] Failed to load agent config at ${v.path}: ${v.error.message}`);if(!Q0&&(l||q))Q0=C$({skills:E?{workspacePath:F,includePluginSkills:y,pluginSkillDirectories:y?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(Q0)await Q0.start().catch(()=>{});let l$=K.enableTools&&_&&Boolean(Q0)&&Q0?.hasConfiguredSkills(Z.skills)===!0&&Yh({cwd:Z.cwd,providerId:Z.providerId,mode:K.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:A,toolExecutors:B}),r=Q0&&l?Q0.createExtension({includeRules:z,includeSkills:_,includeWorkflows:w,registerSkillsTool:l$,allowedSkillNames:Z.skills}):void 0,M1=r?[...W??Z.extensions??[],r]:W??Z.extensions;if(K.enableTools){if(f.push(...A7(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,B)),!K.disableMcpSettingsTools){let v=await Vh(Z.logger);f.push(...v.tools),Q1=v.shutdown}}let P,B0=K.enableAgentTeams?lX():void 0,G0=B0?.loadRuntime(U),w0=G0?.state,a2=G0?.teammates??[],R1=new Map(a2.map((v)=>[v.agentId,v])),G1=Z.sessionId||D,P4,s2=[],K9=!1,E1=D$({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:M1,logger:J??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(K.enableSpawnAgent){if(T.configs.length>0)f.push(...pX(W4({configProvider:E1,agents:T.configs,createSubAgentTools:(v)=>K.enableTools?Xh(A7(Z.cwd,v.providerId??Z.providerId,K.mode,v.modelId??Z.modelId,Z.toolRoutingRules,A,v.skills!==void 0&&Q0?.createSkillsExecutor?Q0.createSkillsExecutor(v.skills):void 0,B),v):[],hookErrorMode:Z.hookErrorMode,toolPolicies:A,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),A))}if(!this.teamRuntimeEntries.has(G1))this.teamRuntimeEntries.set(G1,{delegatedAgentConfigProvider:E1});let F9=()=>{if(!K.enableAgentTeams)return;let v=this.teamRuntimeEntries.get(G1)??{delegatedAgentConfigProvider:E1};if(this.teamRuntimeEntries.set(G1,v),P=v.runtime,!P){if(P=new k2({teamName:D,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:K.missionLogIntervalSteps,missionLogIntervalMs:K.missionLogIntervalMs,onTeamEvent:(Y0)=>{if(G(Y0),P&&B0){if(Y0.type==="teammate_spawned"&&Y0.teammate?.rolePrompt){let N1={agentId:Y0.agentId,rolePrompt:Y0.teammate.rolePrompt,modelId:Y0.teammate.modelId,maxIterations:Y0.teammate.maxIterations};R1.set(N1.agentId,N1)}if(Y0.type==="teammate_shutdown"&&!Bh(Y0.reason))R1.delete(Y0.agentId);B0.handleTeamEvent(U,Y0),B0.persistRuntime(U,P.exportState(),Array.from(R1.values()))}}}),w0)P.hydrateState(w0),K9=!0;v.runtime=P}if(!o){if(!P)return;o=!0;let Y0=D8({runtime:P,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(w0),restoredTeammates:a2,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(N1)=>{s2=N1,P4?.addTools(N1)},createBaseTools:K.enableTools?()=>A7(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,B):void 0,teammateConfigProvider:E1});if(K9)P.recoverActiveRuns("runtime_recovered");if(Y0.restoredFromPersistence)j?.();f.push(...Y0.tools)}return P};if(K.enableSpawnAgent&&Y){let v=Y();f.push({...v,execute:async(Y0,N1)=>{return F9(),v.execute(Y0,N1)}})}if(K.enableAgentTeams)F9();let o2=pX(f,A),ZW=o2.some((v)=>v.name==="submit_and_exit"&&v.lifecycle?.completesRun===!0),A9=K.enableAgentTeams?()=>{let v=this.teamRuntimeEntries.get(G1)?.runtime;if(!v)return;let Y0=v.listTasks(),N1=Y0.some((J$)=>J$.status==="in_progress"||J$.status==="pending"),Qj=v.listRuns({}),zD=Qj.some((J$)=>J$.status==="running"||J$.status==="queued");if(N1||zD){let J$=Y0.filter((g0)=>g0.status==="in_progress"||g0.status==="pending").map((g0)=>`${g0.id} (${g0.status}): ${g0.title}`).join(", "),Wj=Qj.filter((g0)=>g0.status==="running"||g0.status==="queued").map((g0)=>`${g0.id} (${g0.status})`).join(", "),QW=[];if(J$)QW.push(`Unfinished tasks: ${J$}`);if(Wj)QW.push(`Active runs: ${Wj}`);return`[SYSTEM] You still have team obligations. ${QW.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,_D=ZW?{requireCompletionTool:!0,...A9?{completionGuard:A9}:{}}:A9?{completionGuard:A9}:void 0;return{tools:o2,logger:J??Z.logger,telemetry:X??Z.telemetry,teamRuntime:P,teamRestoredFromPersistence:Boolean(w0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(G1)?.delegatedAgentConfigProvider??E1,extensions:M1,completionPolicy:_D,registerLeadAgent:(v)=>{if(P4=v,s2.length>0)v.addTools(g1(s2,[...L]))},shutdown:async(v)=>{if(Hh(P,v),this.teamRuntimeEntries.delete(G1),await Q1?.(),!t)Q0?.stop()}}}}var of={};N(of,{requestDesktopToolApproval:()=>iX});import{mkdir as Kh,readFile as Fh,unlink as Ah,writeFile as fh}from"node:fs/promises";import{join as sf}from"node:path";function Uh($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function Dh($){return new Promise((Z)=>setTimeout(Z,$))}async function rX($){try{await Ah($)}catch{}}async function iX($,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 Kh(Q,{recursive:!0});let J=Uh(`${$.toolCallId}`),X=sf(Q,`${W}.request.${J}.json`),Y=sf(Q,`${W}.decision.${J}.json`),j=Z.nowIso??(()=>new Date().toISOString());await fh(X,`${JSON.stringify({requestId:J,sessionId:W,createdAt:j(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
735
+ `,"utf8");let V=Z.timeoutMs??300000,H=Z.pollIntervalMs??200,B=Date.now();while(Date.now()-B<V){try{let G=await Fh(Y,"utf8"),K=JSON.parse(G),F={approved:K.approved===!0,reason:typeof K.reason==="string"?K.reason:void 0};return await Promise.all([rX(Y),rX(X)]),F}catch{}await Dh(H)}return await rX(X),{approved:!1,reason:"Tool approval request timed out"}}Y1();var ef={};N(ef,{parseMcpInstallArgs:()=>e5,installMcpServer:()=>nX,buildMcpInstallTransport:()=>U7});function Lh($){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 _h($){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 zh($){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 Th($){let Z=$.indexOf("<");return Z>=0&&$.indexOf(">",Z+1)>Z+1}function tf($){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 Oh($){if($.length===0)return{warnings:[]};let Z={},Q=[];for(let W of $){let[J,X]=zh(W);if(Z[J]=X,Th(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 U7($){let Z=$.name.trim();if(!Z)throw Error("MCP server name is required");let{headers:Q,targetArgs:W,transport:J}=tf({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),X=Lh(J),{headers:Y,warnings:j}=Oh(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 _h(V),{name:Z,transport:Y?{type:X,url:V,headers:Y}:{type:X,url:V},warnings:j}}function e5($){let[Z,...Q]=$;if(!Z)throw Error("Marketplace MCP install args must start with a server name.");return{name:Z,...tf({parseTransport:!0,targetArgs:Q})}}function qh($,Z,Q){j1(Q,(W)=>{let J=W.mcpServers,X=J&&typeof J==="object"&&!Array.isArray(J)?{...J}:{};X[$]={transport:Z},W.mcpServers=X})}function nX($){let{name:Z,transport:Q,warnings:W}=U7($);return qh(Z,Q,$.settingsPath??$0()),{name:Z,status:"installed",transport:Q,warnings:W}}var GU={};N(GU,{uninstallMarketplaceSkill:()=>q7,uninstallMarketplacePlugin:()=>M7,uninstallMarketplaceMcpServerFromSettings:()=>T7,uninstallMarketplaceEntry:()=>HY,resolveMarketplaceMcpServerName:()=>J9,marketplaceEntryKey:()=>VY,isMarketplaceSkillInstalled:()=>O7,getMarketplaceSkillCandidates:()=>X9,getGlobalMarketplaceSkillPaths:()=>Y9,findInstalledGlobalMarketplaceSkillName:()=>j9});import{spawn as $k}from"node:child_process";import{existsSync as HU,rmSync as Zk}from"node:fs";import{homedir as Qk,platform as Wk}from"node:os";import{dirname as Jk,join as VU}from"node:path";import{resolveClineDir as Xk,resolveMcpSettingsPath as Yk}from"@cline/shared/storage";Y1();var jU={};N(jU,{uninstallPlugin:()=>Q9});import{existsSync as R4,readdirSync as bh,readFileSync as yh,rmdirSync as hh,rmSync as kh,statSync as Ih}from"node:fs";import{basename as $1,dirname as u$,extname as xh,isAbsolute as gh,join as Z$,relative as mh,resolve as M4,sep as eX}from"node:path";import{discoverPluginModulePaths as vh,resolvePluginConfigSearchPaths as ch}from"@cline/shared/storage";var WU={};N(WU,{syncPluginMcpServersToSettings:()=>$9,removePluginMcpServersFromSettings:()=>Z9,disablePluginMcpServersInSettings:()=>tX});import{existsSync as Mh,mkdirSync as Rh,readFileSync as Eh,writeFileSync as Nh}from"node:fs";import{dirname as ZU,isAbsolute as Ch,relative as wh,resolve as $U}from"node:path";function p2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function D7($,Z){let Q=wh($U($),$U(Z));return Q===""||!Q.startsWith("..")&&!Ch(Q)}function aX($){if(!Mh($))return{mcpServers:{}};try{let Z=JSON.parse(Eh($,"utf8"));if(p2(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 sX($){if(p2($.mcpServers))return{...$.mcpServers};return{}}function oX($,Z,Q){Rh(ZU($),{recursive:!0}),Nh($,`${JSON.stringify({...Z,mcpServers:Q},null,2)}
736
+ `,"utf8")}function QU($){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 _7($){if(!p2($))return;let Z=$.metadata;return p2(Z)?Z:void 0}function L7($,Z){let Q=_7($);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||D7(Z.pluginPath,J)||D7(J,Z.pluginPath)))return!0;if(W&&Z.pluginNames?.some((X)=>X===W))return!0;if(J&&Z.pluginPaths?.some((X)=>J===X||D7(X,J)||D7(J,X)))return!0;return!1}function Ph($){let Z=p2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:ZU($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function Sh($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await E8({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 $9($){let Z=$.settingsPath??$0(),Q={mutations:[],failures:[]},W;try{W=await Sh($)}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=aX(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=sX(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=LQ(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(!L7(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]=Ph({registration:H.registration,pluginName:B.pluginName,pluginPath:B.pluginPath,existing:p2(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=_7(B),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=Y.get(K);if(F&&L7(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{oX(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 tX($){let Z=$.settingsPath??$0(),Q;try{Q=aX(Z)}catch{return[]}let W=sX(Q),J=QU($),X=[];for(let[Y,j]of Object.entries(W)){if(!p2(j)||!L7(j,J))continue;let V=_7(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)oX(Z,Q,W);return X}function Z9($){let Z=$.settingsPath??$0(),Q;try{Q=aX(Z)}catch{return[]}let W=sX(Q),J=QU($),X=[];for(let[Y,j]of Object.entries(W)){if(!L7(j,J))continue;let V=_7(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)oX(Z,Q,W);return X}var JY="_installed",uh="package",dh=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function $Y($){return $.trim().toLowerCase()}function B1($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function lh($){return $.replace(/-[0-9a-f]{12}$/i,"")}function ZY($){let Z=xh($);return Z?$.slice(0,-Z.length):$}function QY($){if(!R4($))return;try{let Z=JSON.parse(yh($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function XY($,Z){let Q=mh(Z,$);return Q===""||!Q.startsWith("..")&&!gh(Q)}function JU($){let Q=M4($).split(eX),W=Q.lastIndexOf(JY);if(W<0)return;let J=Q[W+1];if(!J)return;let X=dh.get(J)??1,Y=W+2+X;if(Q.length<Y)return;let j=Q.slice(0,Y).join(eX)||eX;return R4(j)?j:void 0}function z7($){try{return bh($,{withFileTypes:!0})}catch{return[]}}function ph($){let Z=Z$($,JY);if(!R4(Z))return[];let Q=[];for(let W of z7(Z)){if(!W.isDirectory())continue;let J=Z$(Z,W.name);if(W.name==="git"){for(let X of z7(J)){if(!X.isDirectory())continue;let Y=Z$(J,X.name);for(let j of z7(Y))if(j.isDirectory())Q.push(Z$(Y,j.name))}continue}for(let X of z7(J))if(X.isDirectory())Q.push(Z$(J,X.name))}return Q.sort((W,J)=>W.localeCompare(J))}function XU($){try{return vh($)}catch{return[]}}function WY($){let Z=XU($),Q=new Set;B1(Q,$1($)),B1(Q,lh($1($))),B1(Q,QY(Z$($,"package.json"))),B1(Q,QY(Z$($,uh,"package.json")));for(let W of Z)B1(Q,$1(W)),B1(Q,ZY($1(W)));return{installPath:$,entryPaths:Z,names:[...Q].sort((W,J)=>W.localeCompare(J)),installed:!0}}function rh($,Z){let Q=M4($),W=Z.find((Y)=>XY(Q,Y));if(!W)return;let J=u$(Q);while(J!==W&&J!==u$(J)){if(R4(Z$(J,"package.json")))return J;J=u$(J)}let X=$1(Q);if((X==="index.ts"||X==="index.js")&&u$(Q)!==W)return u$(Q);return Q}function YU($,Z){let Q=rh($,Z);if(!Q)return;let W=new Set;return B1(W,$1($)),B1(W,ZY($1($))),B1(W,$1(Q)),B1(W,ZY($1(Q))),B1(W,QY(Z$(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...W].sort((J,X)=>J.localeCompare(X)),installed:!1}}function ih($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return ch(Z).filter((Q)=>R4(Q))}function nh($){let Z=new Map;for(let Q of $){for(let W of ph(Q))Z.set(W,WY(W));for(let W of XU(Q)){let J=JU(W);if(J){if(!Z.has(J))Z.set(J,WY(J));continue}let X=YU(W,$);if(X)Z.set(X.installPath,X)}}return[...Z.values()].sort((Q,W)=>Q.installPath.localeCompare(W.installPath))}function ah($,Z){let Q=$Y(Z);if(!Q)return!1;if($Y($.installPath)===Q)return!0;return $.names.some((W)=>$Y(W)===Q)}function sh($,Z,Q){let W=M4($);for(let X of Z){if(XY(W,X.installPath))return X;if(X.entryPaths.some((Y)=>M4(Y)===W))return X}let J=JU(W);if(J)return WY(J);if(R4(W))return YU(W,Q);return}function oh($){let Z=_0(),Q=Z.disabledPlugins;if(!Q?.length)return;let W=Q.filter((J)=>{let X=M4(J);if(XY(X,$.installPath))return!1;return!$.entryPaths.some((Y)=>M4(Y)===X)});if(W.length===Q.length)return;K1({...Z,disabledPlugins:W})}function th($){let Z=u$($);while(Z!==u$(Z)&&$1(Z)!==JY){try{hh(Z)}catch{return}Z=u$(Z)}}function eh($){return`${$.names[0]??$1($.installPath)} at ${$.installPath}`}async function Q9($){let Z=ih($),Q=nh(Z),W=$.path?.trim(),J=$.name?.trim(),X;if(W){if(X=sh(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)=>ah(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(eh).join(", ")}`);X=j[0]}let Y=Ih(X.installPath,{throwIfNoEntry:!1});if(!Y)throw Error(`Plugin install path does not exist: ${X.installPath}`);if(Z9({pluginPaths:[X.installPath,...X.entryPaths],pluginNames:X.names}),kh(X.installPath,{recursive:Y.isDirectory(),force:!0}),oh(X),X.installed)th(X.installPath);return{name:J||X.names[0]||$1(X.installPath),installPath:X.installPath,removedPaths:[X.installPath],entryPaths:X.entryPaths}}var YY=120000,W9=12000,jk=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,Vk=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,Hk=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,Bk=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function jY($){return $.install?.args??[]}function Gk(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||Qk()}function Kk($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function Fk($){return Kk($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function BU($){return $.split(/\r?\n/).map((Z)=>{if(!jk.test(Z))return Z;return Z.replace(Vk,"$1[redacted]").replace(Hk,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(Bk,"$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(`
737
+ `).slice(-W9)}function Ak($){let Z=BU([$.stdout,$.stderr].filter(Boolean).join(`
738
+ `)).trim();return Z.length>0?Z:void 0}function fk($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function Uk($,Z){return[$,...Z].map((Q)=>fk(BU(Q).trim())).join(" ")}var Dk=async($,Z)=>new Promise((Q,W)=>{let J=!1,X=!1,Y=$k($,Z,{env:process.env,shell:Wk()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),j="",V="",H=setTimeout(()=>{if(!J)Y.kill("SIGKILL")},YY+5000),B=setTimeout(()=>{X=!0,V+=`
739
+ Timed out after ${YY/1000}s.`,Y.kill("SIGTERM")},YY);H.unref?.(),B.unref?.(),Y.stdout?.on("data",(G)=>{if(j+=String(G),j.length>W9*2)j=j.slice(-W9)}),Y.stderr?.on("data",(G)=>{if(V+=String(G),V.length>W9*2)V=V.slice(-W9)}),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 VY($){return`${$.type}:${$.id}`}function J9($){let Z=jY($);if(Z.length===0)throw Error("Marketplace install args are required.");return e5(Z).name}function T7($,Z={}){let Q=J9($),W=Z.mcpSettingsPath??Yk(),J=j1(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 X9($){let Z=new Set,Q=(J)=>{let X=Fk(J??"");if(X&&X!=="skill")Z.add(X)};Q($.id),Q($.name);let W=jY($);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 Y9($){return[VU(Xk(),"skills",$,"SKILL.md"),VU(Gk(),".agents","skills",$,"SKILL.md")].filter((Z,Q,W)=>W.indexOf(Z)===Q)}function j9($){if($.type!=="skill")return;return X9($).find((Z)=>Y9(Z).some((Q)=>HU(Q)))}function O7($){return j9($)!==void 0}function Lk($){let Z=[];if($.type!=="skill")return Z;for(let Q of X9($))for(let W of Y9(Q)){if(!HU(W))continue;let J=Jk(W);Zk(J,{recursive:!0,force:!0}),Z.push(J)}return Z}async function q7($,Z={}){let Q=j9($);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=Uk(W,J),Y=Z.spawnCommand??Dk,j;try{j=await Y(W,J)}catch(B){throw Error(`Failed to start ${$.name??$.id} uninstall command:
740
740
  ${X}
741
- ${B instanceof Error?B.message:String(B)}`)}let V=Fk(j);if(j.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${j.exitCode}.
741
+ ${B instanceof Error?B.message:String(B)}`)}let V=Ak(j);if(j.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${j.exitCode}.
742
742
  Command:
743
743
  ${X}${V?`
744
744
 
745
- ${V}`:""}`);let H=Dk($);if(O7($))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(`
745
+ ${V}`:""}`);let H=Lk($);if(O7($))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(`
746
746
  `)||void 0}}async function M7($,Z={}){let[Q]=jY($),W=Q?.trim()||$.id;if(!W)throw Error("Plugin marketplace uninstalls require a plugin name.");let J=await Q9({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(`
747
- `)}}async function HY($,Z={}){if($.type==="mcp"){let Q=J9($);if(Z.deleteMcpServer)await Z.deleteMcpServer(Q);else T7($,Z);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Q??$.id}.`}}if($.type==="skill")return q7($,Z);if($.type==="plugin")return M7($,Z);throw Error(`Unsupported marketplace entry type: ${$.type}`)}var RU={};N(RU,{parsePluginSource:()=>y7,isOfficialPluginSlug:()=>b7,installPlugin:()=>fY,collectPluginMcpOAuthCandidates:()=>h7});import{spawn as Lk}from"node:child_process";import{createHash as _k}from"node:crypto";import{existsSync as O1,mkdirSync as KY,readdirSync as zk,readFileSync as Tk,renameSync as R7,rmSync as C7,statSync as FY}from"node:fs";import{cp as GY,mkdir as _U,writeFile as w7}from"node:fs/promises";import{homedir as KU}from"node:os";import{basename as W$,dirname as FU,extname as Ok,join as n,relative as zU,resolve as d$,sep as qk}from"node:path";import{isPluginModulePath as N7,resolveClineDir as Mk,resolvePluginModuleEntries as Rk}from"@cline/shared/storage";var E4="_installed",P7="package",Ek="https://github.com/cline/plugins.git",AU=30000,E7=10485760,fU="@cline/",Nk=["dependencies","devDependencies","optionalDependencies","peerDependencies"],Ck={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function S7($){if($==="~")return KU();if($.startsWith("~/"))return n(KU(),$.slice(2));return $}function TU($){return $.split(qk).join("/")}function r2($){return _k("sha256").update($).digest("hex").slice(0,12)}function wk($){let Z=0;while(Z<$.length&&$[Z]==="-")Z++;let Q=$.length;while(Q>Z&&$[Q-1]==="-")Q--;return $.slice(Z,Q)}function Q$($){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 wk(Z)||"plugin"}function b7($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function Pk($){return $?.trim()||Ek}function UU($){let Q=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Q?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Q[1]}}function Sk($){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 bk($){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 yk($){try{return decodeURIComponent($)}catch{return $}}function hk($){return W$(yk($))||"plugin"}function kk($){let Z=$.split("/").filter(Boolean);return Z.length>=5&&(Z[2]==="blob"||Z[2]==="raw")}function DU($){if(!/^https?:\/\//i.test($))return null;let Z;try{Z=new URL($)}catch{return null}let Q=Z.hostname.toLowerCase(),W=hk(Z.pathname),J=N7(W),X=(Q==="github.com"||Q==="www.github.com")&&kk(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 LU($,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}=bk(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 y7($,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}=UU(Y);return{type:"npm",spec:Y,name:j}}if(Z==="git"){let Y=LU(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=DU(Q);if(!Y)throw Error(`Invalid remote plugin source: ${$}`);return Y}if(Q.startsWith("npm:")){let Y=Q.slice(4).trim(),{name:j}=UU(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=DU(Q);if(J)return J;let X=LU(Q);if(X)return X;if(b7(Q))return{type:"official",slug:Q};if(Sk(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 Ik($){return $?n($,".cline","plugins"):n(Mk(),"plugins")}function xk($,Z,Q){if(Z.type==="npm")return n($,E4,"npm",`${Q$(Z.name)}-${r2(Q)}`);if(Z.type==="git")return n($,E4,"git",Q$(Z.host),`${Q$(Z.path)}-${r2(Q)}`);if(Z.type==="remote")return n($,E4,"remote",`${Q$(Z.filename)}-${r2(Q)}`);if(Z.type==="official")return n($,E4,"official",`${Q$(Z.slug)}-${r2(Q)}`);return n($,E4,"local",`${Q$(W$(S7(Z.path)))}-${r2(Q)}`)}function gk($,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:${d$(Z,S7($.path))}`}function mk($,Z){if($.type==="npm")return $.name;if($.type==="git")return Q$(W$($.path));if($.type==="remote")return Q$(W$($.filename,Ok($.filename)));if($.type==="official")return $.slug;return Q$(W$(d$(Z,S7($.path))))}async function N4($,Z,Q={}){await new Promise((W,J)=>{let X=Lk($,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 OU($){let Z=n($,"package.json");if(!O1(Z))return null;try{return JSON.parse(Tk(Z,"utf8"))}catch{return null}}function vk($){let Z=$?.cline?.plugins;if(!Array.isArray(Z))return[];return Z.flatMap((Q)=>{if(typeof Q==="string")return[Q];return Q.paths??[]})}async function ck($){let Z=n($,"package.json"),Q=OU($);if(!Q)return;let W=!1;for(let J of Nk){let X=Q[J];if(!X||typeof X!=="object")continue;for(let Y of Object.keys(X)){if(!Y.startsWith(fU))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(fU))continue;delete Q.peerDependenciesMeta[J],W=!0}if(Object.keys(Q.peerDependenciesMeta).length===0)delete Q.peerDependenciesMeta}if(!W)return;await w7(Z,`${JSON.stringify(Q,null,2)}
748
- `,"utf8")}function uk($,Z){let Q=n($,"node_modules","@cline");if(!O1(Q))return;for(let W of MU(Q)){if(`@cline/${W.name}`===Z)continue;C7(n(Q,W.name),{recursive:!0,force:!0})}}function qU($){let Z=vk(OU($)).map((X)=>d$($,X)).filter((X)=>O1(X)&&FY(X).isFile()&&N7(X));if(Z.length>0)return Z;let Q=Rk($);if(Q?.length)return Q;let W=[],J=[$];while(J.length>0){let X=J.pop();if(!X)continue;for(let Y of MU(X)){let j=n(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(".")&&N7(j))W.push(j)}}return W.sort((X,Y)=>X.localeCompare(Y))}function MU($){try{return zk($,{withFileTypes:!0})}catch{return[]}}function dk($,Z){let Q=qU(Z);if(Q.length===0)throw Error(`No plugin entry files found in ${Z}`);return Q.map((W)=>`./${TU(zU($,W))}`)}async function lk($,Z,Q){let W=dk($,Z);return await w7(n($,"package.json"),JSON.stringify({...Ck,name:Q,cline:{plugins:[{paths:W}]}},null,2),"utf8"),W}async function pk($,Z,Q){let W=n(Z,P7);return await _U(W,{recursive:!0}),await w7(n(W,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await N4(Q,["install",$.spec,"--prefix",W,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),uk(W,$.name),n(W,"node_modules",$.name)}async function AY($,Z){if(!O1(n($,"package.json")))return;await ck($),await N4(Z,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function rk($,Z,Q){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let W=n(Z,P7),J=["clone","--filter=blob:none"];if($.ref)J.push("--branch",$.ref);J.push("--",$.repo,W);try{await N4("git",J)}catch(X){if(!$.ref)throw X;await N4("git",["clone","--filter=blob:none","--",$.repo,W]),await N4("git",["checkout","--detach",$.ref],{cwd:W})}return await AY(W,Q),W}async function ik($,Z,Q,W){let J=n(Z,"repo");await N4("git",["clone","--filter=blob:none","--depth","1","--",W,J]);let X=n(J,"plugins",$.slug);if(!O1(X)||!FY(X).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${W}`);let Y=n(Z,P7);return await GY(X,Y,{recursive:!0,filter:(j)=>{let V=W$(j);return V!==".git"&&V!=="node_modules"}}),C7(J,{recursive:!0,force:!0}),await AY(Y,Q),Y}function BY($){return Error(`Remote plugin file from ${$} exceeds the ${E7} byte limit`)}function nk($){let Z=$.headers.get("content-length");if(!Z)return;let Q=Number(Z);if(!Number.isFinite(Q)||Q<0)return;return Q}async function ak($,Z){let Q=nk($);if(Q!==void 0&&Q>E7)throw BY(Z);if(!$.body){let Y=Buffer.from(await $.text(),"utf8");if(Y.byteLength>E7)throw BY(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>E7)throw await W.cancel().catch(()=>{return}),BY(Z);J.push(V)}return Buffer.concat(J,X)}finally{W.releaseLock()}}async function sk($,Z){let Q=new AbortController,W=setTimeout(()=>{Q.abort()},AU);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 ak(J,$.url);return KY(Z,{recursive:!0}),await w7(n(Z,$.filename),X),Z}catch(J){if(J instanceof Error&&J.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${AU}ms`);throw J}finally{clearTimeout(W)}}async function ok($,Z,Q,W){let J=d$(Q,S7($.path));if(!O1(J))throw Error(`Plugin source path does not exist: ${J}`);let X=FY(J);if(X.isFile()){if(!N7(J))throw Error(`Plugin file must be .js or .ts: ${J}`);KY(Z,{recursive:!0});let j=n(Z,W$(J));return await GY(J,j),Z}if(!X.isDirectory())throw Error(`Plugin source must be a file or directory: ${J}`);let Y=n(Z,P7);return await GY(J,Y,{recursive:!0,filter:(j)=>{let V=W$(j);return V!==".git"&&V!=="node_modules"}}),await AY(Y,W),Y}function tk($,Z){if(O1($)&&!Z)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function ek($,Z,Q){if(KY(FU(Z),{recursive:!0}),!O1(Z)){R7($,Z);return}if(!Q)throw Error(`Plugin is already installed at ${Z}. Use --force to replace it.`);let W=n(FU(Z),`.replace-${W$(Z)}-${Date.now()}-${process.pid}-${r2(`${Z}:${Math.random()}`)}`);R7(Z,W);try{R7($,Z)}catch(J){if(!O1(Z)&&O1(W))R7(W,Z);throw J}try{C7(W,{recursive:!0,force:!0})}catch{}}function $I($){let Z=$.transport;if(Z.type==="stdio")return!1;return Z.headers!==void 0&&Object.keys(Z.headers).length>0}function ZI($){let Z=$.oauth?.tokens?.access_token;return typeof Z==="string"&&Z.trim().length>0}function QI($){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 h7($){let Z=new Set($.pluginPaths.map((J)=>d$(J)));if(Z.size===0)return[];let Q;try{Q=p0({filePath:$.settingsPath??$0()})}catch{return[]}let W=[];for(let J of Q){let X=QI(J);if(!X||!Z.has(d$(X.pluginPath)))continue;let Y=J.transport.type;if(Y==="stdio")continue;if($I(J)||ZI(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 fY($){let Z=$.source.trim(),Q=y7(Z,$.sourceType),W=$.cwd?.trim(),J=W?d$(W):process.cwd(),X=Ik(W?J:void 0),Y=Pk($.officialPluginsRepo),j=gk(Q,J,Y),V=xk(X,Q,j),H=mk(Q,J),B=n(X,E4,".tmp"),G=n(B,`${Date.now()}-${process.pid}-${r2(`${Z}:${Math.random()}`)}`),K=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;tk(V,F),await _U(B,{recursive:!0});let A;try{if(Q.type==="npm")A=await pk(Q,G,K);else if(Q.type==="git")A=await rk(Q,G,K);else if(Q.type==="official")A=await ik(Q,G,K,Y);else if(Q.type==="remote")A=await sk(Q,G);else A=await ok(Q,G,J,K);let L=(Q.type==="local"||Q.type==="remote")&&A===G?qU(G).map((U)=>`./${TU(zU(G,U))}`):await lk(G,A,H);if(L.length===0)throw Error(`No plugin entry files found for ${Z}`);ek(G,V,F);let f={source:Z,installPath:V,entryPaths:L.map((U)=>d$(V,U)),mcpSyncFailures:[],mcpOAuthCandidates:[]},D=await $9({pluginPaths:f.entryPaths,cwd:J,workspacePath:J});return f.mcpSyncFailures=D.failures,f.mcpOAuthCandidates=h7({pluginPaths:f.entryPaths}),f}catch(L){throw C7(G,{recursive:!0,force:!0}),L}}var rU={};N(rU,{updateLocalProvider:()=>u7,saveLocalProviderSettings:()=>qY,saveLocalProviderOAuthCredentials:()=>NY,resolveLocalClineAuthToken:()=>wY,refreshProviderModelsFromSource:()=>MY,normalizeOAuthProvider:()=>RY,loginLocalProvider:()=>EY,loginAndSaveLocalProviderOAuthCredentials:()=>CY,listLocalProviders:()=>TY,getLocalProviderModels:()=>OY,ensureCustomProvidersLoaded:()=>m7,deleteLocalProvider:()=>d7,addLocalProvider:()=>zY});import*as C0 from"@cline/llms";import{existsSync as WI,mkdirSync as JI,readFileSync as XI,writeFileSync as YI}from"node:fs";import{mkdir as jI,readFile as VI,writeFile as HI}from"node:fs/promises";import{dirname as UY,join as BI}from"node:path";import*as x0 from"@cline/llms";import{ModelCapabilitySchema as GI,ProviderCapabilitySchema as KI,ProviderClientSchema as FI,ProviderProtocolSchema as AI}from"@cline/shared";import{z as a}from"zod";var fI=a.object({id:a.string().optional(),name:a.string().optional(),maxTokens:a.number().optional(),contextWindow:a.number().optional(),maxInputTokens:a.number().optional(),capabilities:a.array(GI).optional(),supportsVision:a.boolean().optional(),supportsAttachments:a.boolean().optional(),supportsReasoning:a.boolean().optional()}).passthrough(),UI=a.object({name:a.string(),baseUrl:a.string(),defaultModelId:a.string().optional(),protocol:AI.optional(),client:FI.optional(),capabilities:a.array(KI).optional(),modelsSourceUrl:a.string().optional()}).passthrough(),EU=a.object({provider:UI.optional(),models:a.record(a.string(),fI).optional()}).passthrough(),NU=a.object({version:a.literal(1),providers:a.record(a.string(),EU)}),DI=a.object({version:a.literal(1),providers:a.record(a.string(),a.unknown())}),k7=new Set;function CU($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function i2($){return BI(UY($.getFilePath()),"models.json")}function I7(){return{version:1,providers:{}}}function wU($){let Z=DI.safeParse($);if(!Z.success)return I7();let Q={};for(let[W,J]of Object.entries(Z.data.providers)){let X=EU.safeParse(J);if(X.success)Q[W]=X.data}return{version:1,providers:Q}}function DY($){if(!WI($))return I7();try{let Z=XI($,"utf8");return wU(JSON.parse(Z))}catch{}return I7()}async function C4($){try{let Z=await VI($,"utf8");return wU(JSON.parse(Z))}catch{}return I7()}function PU($,Z){JI(UY($),{recursive:!0});let Q=NU.parse(Z);YI($,`${JSON.stringify(Q,null,2)}
749
- `,"utf8")}async function x7($,Z){await jI(UY($),{recursive:!0});let Q=NU.parse(Z);await HI($,`${JSON.stringify(Q,null,2)}
750
- `,"utf8")}function SU($,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 bU($){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 yU($){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 LI($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function hU($,Z){return $??Z??"openai-chat"}function kU($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function IU($,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 _I($,Z){for(let[Q,W]of Object.entries(Z??{})){let J=W.id?.trim()||Q.trim();if(!J)continue;x0.registerModel($,J,IU(J,W))}}function zI($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function TI($){return Object.assign({},...x0.resolveProviderModelCatalogKeys($).map((Q)=>x0.getGeneratedModelsForProvider(Q)))}function OI($){let Z=$.provider.trim();if(!Z||x0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let W=x0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],J=TI(Z),X=yU($.capabilities),Y=X.length>0?X:void 0,j=$.model?.trim(),V={...J,...W?.models??{}};if(j)V[j]=zI(j,V[j],Y);let H=Object.keys(V).filter(Boolean),B=j||H[0];if(!B)return;let G=hU($.protocol,W?.provider.protocol),K=kU($.client,G,W?.provider.client);x0.registerProvider({provider:{id:Z,name:W?.provider.name??CU(Z),description:W?.provider.description,protocol:G,client:K,baseUrl:Q,modelsSourceUrl:W?.provider.modelsSourceUrl,defaultModelId:B,capabilities:bU($.capabilities)??W?.provider.capabilities,source:"file"},models:V})}function g7($){for(let Z of Object.values($.providers))OI(Z.settings)}function V9($,Z){let Q=Z.models??{};if(!LI(Z.provider)){_I($,Q);return}let W=yU(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=hU(Z.provider.protocol,void 0),j=kU(Z.provider.client,Y,void 0),V=Object.fromEntries(J.map(({id:H,model:B})=>[H,{...IU(H,B,W.length>0?W:void 0),status:"active"}]));x0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||CU($),protocol:Y,client:j,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:X,capabilities:bU(Z.provider.capabilities),source:"file"},models:V})}function xU($){let Z=i2($);if(k7.has(Z))return;let Q=DY(Z);for(let[W,J]of Object.entries(Q.providers))V9(W,J);k7.add(Z)}async function m7($){let Z=i2($);if(k7.has(Z))return;let Q=await C4(Z);for(let[W,J]of Object.entries(Q.providers))V9(W,J);k7.add(Z)}var mU="cline-pass";function qI($){return $.apiKey??$.auth?.apiKey}function MI($){return($.auth?.accessToken?.trim()??"").length>0}function vU($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function RI($){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 EI($){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 cU($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>SU(Z,Q))}async function NI($,Z){let Q=await C0.getModelsForProvider($),W=$===mU;if(!Z&&!W)return Q;let J=await v6($,{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 LY($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function CI($){if(!$?.length)return;return[...new Set($)]}function wI($,Z){return CI([...$??[],...Z??[]])}function PI($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function SI($){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 bI($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(SI)}var v7={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},gU={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function yI($){if(!$)return[v7];if($.source!=="system")return $.baseUrl?[v7,gU]:[v7];let Z=[];if($.env?.length)Z.push(v7);if($.baseUrl)Z.push(gU);return Z}function hI($,Z){return Z.split(".").reduce((Q,W)=>{if(!Q||typeof Q!=="object")return;return Q[W]},$)}function kI($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function II($,Z,Q){if(!$?.length)return;let W={};for(let J of $){let Y=kI(J.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:hI(Z,J.path))??J.defaultValue;if(Y!==void 0)W[J.path]=Y}return W}function uU($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function _Y($,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 dU($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await wZ($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function lU($,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);C0.unregisterProvider(Z)}async function zY($,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=i2($);if((await C4(A)).providers[Q]){let f=await d7($,{providerId:Q});return{providerId:Q,settingsPath:f.settingsPath,modelsPath:f.modelsPath,modelsCount:0}}return lU($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(C0.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=LY(Z.models),j=Z.modelsSourceUrl?.trim(),V=await dU({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=uU(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=i2($),F=await C4(K);return F.providers[Q]={provider:{name:X,baseUrl:W,defaultModelId:H,protocol:Z.protocol,client:Z.client,capabilities:B,modelsSourceUrl:j},models:_Y(V,B)},await x7(K,F),V9(Q,F.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function u7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=i2($),J=await C4(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(),_=LY(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()||vU(Q),baseUrl:Z.baseUrl?.trim()??q.baseUrl?.trim()??"",defaultModelId:_,protocol:q.protocol,client:q.client,capabilities:q.capabilities},models:_?_Y([_],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=LY(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 dU({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=uU(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:_Y(L,V)},await x7(W,J),V9(Q,J.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W,modelsCount:L.length}}async function d7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=i2($),J=await C4(W);if(!J.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete J.providers[Q],await x7(W,J),C0.unregisterProvider(Q),lU($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W}}async function TY($,Z={}){let Q=$.read(),W=C0.getProviderIds(),J=await Promise.all(W.map(async(Y)=>{let[j,V]=await Promise.all([C0.getProvider(Y),C0.getModelsForProvider(Y)]),H=cU(V),B=Q.providers[Y]?.settings,G=j?.name??vU(Y),K=wI(j?.capabilities,B?.capabilities),F=bI(j?.metadata)??yI(j);return{provider:{id:Y,name:G,models:H.length,color:EI(Y),letter:RI(G),enabled:Boolean(B),apiKey:B?qI(B):void 0,oauthAccessTokenPresent:B?MI(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:II(F,B,j),modelList:H},rank:PI(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!==mU);return{providers:X,settingsPath:$.getFilePath()}}async function OY($,Z){let Q=$.trim(),W=await NI(Q,Z),J=cU(W);return{providerId:Q,models:J}}function c7($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function pU($,Z){if(!c7(Z))return c7($)?{...$}:void 0;let Q=c7($)?{...$}:{};for(let[W,J]of Object.entries(Z)){if(J==null||J===""){delete Q[W];continue}if(c7(J)){let X=pU(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 qY($,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=pU(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 MY($,Z){let Q=Z.trim(),W=$.getProviderSettings(Q),X=C0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,Y=W?.baseUrl?.trim()||X?.baseUrl?.trim(),j=PZ(Y,X?.baseUrl,X?.modelsSourceUrl);if(!W||!X||!Y||!j)return{providerId:Q,refreshed:!1};let V=await u7($,{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 RY($){let Z=$.trim().toLowerCase(),Q=j0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function EY($,Z,Q,W){let J=j0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let X=g8({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 NY($,Z,Q,W,J){return n$({manager:$,providerId:Z,settings:Q,credentials:W,setLastUsed:J?.setLastUsed})}async function CY($,Z,Q,W){let J=g8({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return c4($,Z,{callbacks:J,telemetry:W})}function wY($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}var iU={};N(iU,{getProviderConfigFields:()=>PY});import*as l7 from"@cline/llms";var xI=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],gI={"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 mI($,Z){let Q={};for(let W of xI){let J=$[W],X=Z[W];if(J||X)Q[W]={...J,...X}}return Q}function vI($){let Z=gI[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:mI($.fields,Z.fields)}}var cI=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function uI($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return cI.has($)}function PY($){let Z=l7.normalizeProviderId($);if(i$(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=l7.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(uI(Z,Q))J.baseUrl={defaultValue:W};return vI({providerId:Z,authMethod:"api-key",fields:J})}var oU={};N(oU,{resolveLegacyClineAuth:()=>yY,migrateLegacyProviderSettings:()=>H9});import{existsSync as dI,readFileSync as lI}from"node:fs";import{dirname as pI,join as SY}from"node:path";import*as w4 from"@cline/llms";import{resolveClineDataDir as rI}from"@cline/shared/storage";var p7="openai",sU=w4.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,nU=128000;function yY($){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 b($){let Z=$?.trim();return Z?Z:void 0}function iI($){return $==="credentials"?"iam":$}function aU($){if(!dI($))return;try{let Z=lI($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function nI($){let Z=$.dataDir??rI(),Q=$.globalStatePath??SY(Z,"globalState.json"),W=$.secretsPath??SY(Z,"secrets.json"),J=aU(Q),X=aU(W);if(!J&&!X)return;return{globalState:J??{},secrets:X??{}}}function bY($){if($===p7)return sU;return $}function aI($,Z,Q,W){let J=Q==="plan"?"planMode":"actMode",X=Z===W?b(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?b(typeof $[j]==="string"?$[j]:void 0):void 0)??X}function sI($,Z,Q){let W=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,J=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(b).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 oI($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),W=b(Q.access_token),J=b(Q.refresh_token),X=b(Q.accountId);if(!W&&!J&&!X)return;return{...W?{apiKey:W}:{},auth:{...W?{accessToken:W}:{},...J?{refreshToken:J}:{},...X?{accountId:X}:{}}}}catch{return}}function tI($){let Z=w4.getGeneratedModelsForProvider($),W=w4.getProviderCollectionSync($)?.provider.defaultModelId;if(W&&Z[W])return W;return Object.keys(Z)[0]??void 0}function eI($,Z,Q,W){let J=bY($),X=b(W==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),Y=aI(Z,$,W,X)??tI(J),j=sI(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,oI(Q));if($==="cline")try{let D=b(Q["cline:clineAccountId"]);if(D)B.auth={...B.auth??{},...yY(D)}}catch{}if($===p7&&Z.openAiHeaders)B.headers=Z.openAiHeaders;if($==="bedrock"){let D=iI(Z.awsAuthentication),U=D==="profile"||Z.awsUseProfile===!0;B.aws={accessKey:b(Q.awsAccessKey),secretKey:b(Q.awsSecretKey),sessionToken:b(Q.awsSessionToken),region:b(Z.awsRegion),authentication:D,profile:U?b(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:b(Z.awsBedrockEndpoint),customModelBaseId:b(W==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")B.gcp={projectId:b(Z.vertexProjectId),region:b(Z.vertexRegion)};if($===p7&&(Z.azureApiVersion||Z.azureIdentity!==void 0))B.azure={apiVersion:b(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let D=Z.sapAiCoreUseOrchestrationMode??!0;B.sap={clientId:b(Q.sapAiCoreClientId),clientSecret:b(Q.sapAiCoreClientSecret),tokenUrl:b(Z.sapAiCoreTokenUrl),resourceGroup:b(Z.sapAiResourceGroup),deploymentId:D?void 0:b(W==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:D}}if($==="oca"){B.oca={mode:Z.ocaMode};let D=b(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=b(H[$]),F=b(G[$]),A={provider:J,...K?{apiKey:K}:{},...Y?{model:Y}:{},...F?{baseUrl:F}:{},...j?{reasoning:j}:{},...V?{timeout:V}:{},...B},L=h8.safeParse(A);if(!L.success)return;return Object.keys(A).filter((D)=>D!=="provider").length>0?L.data:void 0}function $x($,Z){if($!==sU)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:nU,maxInputTokens:nU,capabilities:["streaming","tools","images"]}}}}function Zx($,Z){let Q=new Set;for(let J of[$.actModeApiProvider,$.planModeApiProvider]){let X=b(J);if(X)Q.add(X)}if(b(Z.apiKey))Q.add("anthropic");if(b(Z.openRouterApiKey))Q.add("openrouter");if(b(Z.openAiApiKey))Q.add(p7);if(b(Z.openAiNativeApiKey))Q.add("openai-native");if(b(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(b(Z.geminiApiKey))Q.add("gemini");if(b(Z.ollamaApiKey))Q.add("ollama");if(b(Z.awsAccessKey)||b(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||b($.awsProfile))Q.add("bedrock");if(b($.vertexProjectId)||b($.vertexRegion))Q.add("vertex");if(b(Z.clineApiKey))Q.add("cline");let W=yY(b(Z["cline:clineAccountId"]));if(W?.accessToken||W?.refreshToken||W?.accountId)Q.add("cline");if(b(Z.ocaApiKey))Q.add("oca");if(b(Z.sapAiCoreClientId)||b(Z.sapAiCoreClientSecret)||b($.sapAiCoreTokenUrl)||b($.sapAiCoreBaseUrl)||b($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function H9($){let Z=$.providerSettingsManager.read(),Q=nI($);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=Zx(W,J),j=N$();j.providers={...Z.providers},j.lastUsedProvider=Z.lastUsedProvider;let V=new Date().toISOString(),H=0,B=SY(pI($.providerSettingsManager.getFilePath()),"models.json"),G=DY(B),K=0;for(let L of Y){let f=bY(L);if(j.providers[f])continue;let D=eI(L,W,J,X);if(!D)continue;j.providers[f]={settings:D,updatedAt:V,tokenSource:"migration"},H+=1;let U=$x(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=b(X==="plan"?W.planModeApiProvider:W.actModeApiProvider),A=F?bY(F):void 0;if(j.lastUsedProvider=Z.lastUsedProvider??(A&&j.providers[A]?A:Object.keys(j.providers)[0]),$.providerSettingsManager.write(j),K>0)PU(B,G);return{migrated:H>0||K>0,providerCount:Object.keys(j.providers).length,lastUsedProvider:j.lastUsedProvider}}H7();L0();oQ();var tU={};N(tU,{FileTeamPersistenceStore:()=>r7});import{appendFileSync as Qx,existsSync as hY,mkdirSync as Wx,readFileSync as Jx,renameSync as Xx,unlinkSync as Yx,writeFileSync as jx}from"node:fs";import{join as kY}from"node:path";import{resolveTeamDataDir as Vx}from"@cline/shared/storage";function Hx($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class r7{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=Hx($.teamName),Q=$.baseDir?.trim()||Vx();this.dirPath=kY(Q,Z),this.statePath=kY(this.dirPath,"state.json"),this.taskHistoryPath=kY(this.dirPath,"task-history.jsonl")}loadState(){if(!hY(this.statePath))return;try{let $=Jx(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 jA(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`;jx(Q,`${JSON.stringify(Z,null,2)}
751
- `,"utf8"),Xx(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(),Qx(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:Z})}
752
- `,"utf8")}ensureDir(){if(!hY(this.dirPath))Wx(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(hY(this.statePath))Yx(this.statePath)}}var eU={};N(eU,{ChatViewStateSchema:()=>IY,ChatSummarySchema:()=>o7,ChatSessionStatusSchema:()=>n7,ChatSessionConfigSchema:()=>i7,ChatMessageSchema:()=>s7,ChatMessageRoleSchema:()=>a7});import{z as h}from"zod";var i7=h.object({workspaceRoot:h.string().min(1),cwd:h.string().optional(),provider:h.string().min(1),model:h.string().min(1),mode:h.enum(["act","plan"]).default("act"),apiKey:h.string(),systemPrompt:h.string().optional(),rules:h.string().optional(),maxIterations:h.number().int().positive().optional(),enableTools:h.boolean(),enableSpawn:h.boolean().optional(),enableTeams:h.boolean().optional(),autoApproveTools:h.boolean().optional(),missionStepInterval:h.number().int().positive().optional(),missionTimeIntervalMs:h.number().int().positive().optional()}),n7=h.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),a7=h.enum(["user","assistant","tool","system","status","error"]),s7=h.object({id:h.string().min(1),sessionId:h.string().nullable(),role:a7,content:h.string(),createdAt:h.number().int().nonnegative(),meta:h.object({stream:h.enum(["stdout","stderr"]).optional(),toolName:h.string().optional(),iteration:h.number().int().nonnegative().optional(),agentId:h.string().optional(),conversationId:h.string().optional(),hookEventName:h.string().optional(),inputTokens:h.number().int().nonnegative().optional(),outputTokens:h.number().int().nonnegative().optional(),checkpoint:h.object({ref:h.string(),createdAt:h.number().int().nonnegative(),runCount:h.number().int().positive(),kind:h.enum(["stash","commit"]).optional()}).optional()}).optional()}),o7=h.object({toolCalls:h.number().int().nonnegative(),tokensIn:h.number().int().nonnegative(),tokensOut:h.number().int().nonnegative()}),IY=h.object({sessionId:h.string().nullable(),status:n7,config:i7,messages:h.array(s7),rawTranscript:h.string(),error:h.string().nullable(),summary:o7});var $D={};N($D,{CORE_BUILD_VERSION:()=>xY});var xY=QF;import{Agent as Qg,createAgentRuntime as Wg}from"@cline/agents";var ZD={};N(ZD,{fetchClineRecommendedModels:()=>mY,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>t7});import{getClineEnvironmentConfig as Bx}from"@cline/shared";var Gx=5000,t7={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}],clinePass:[]};function Kx($){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 gY($){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 Fx($){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(gY).filter((V)=>V!==null),Y=W.map(gY).filter((V)=>V!==null),j=J.map(gY).filter((V)=>V!==null);if(X.length===0&&Y.length===0&&j.length===0)return null;return{recommended:X,free:Y,clinePass:j}}function Ax($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=Bx().apiBaseUrl;try{return($.providerSettingsManager??new q1).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function fx($,Z,Q){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await $(Z,{signal:W.signal})}finally{clearTimeout(J)}}async function mY($={}){try{let Z=Ax($),Q=$.fetchImpl??fetch,W=await fx(Q,`${Z}/api/v1/ai/cline/recommended-models`,$.timeoutMs??Gx);if(!W.ok)throw Error(`HTTP ${W.status}`);let J=await W.json(),X=Fx(J);if(X)return X}catch{}return Kx(t7)}var QD={};N(QD,{loadLlmsConfigFromFile:()=>cY,defineLlmsConfig:()=>vY});import{readFile as Ux}from"node:fs/promises";import Dx from"node:path";function vY($){return $}async function cY($){let Z=Dx.resolve($),Q=await Ux(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 Lx(W,Z)}function Lx($,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 $}var VD={};N(VD,{createLlmsSdk:()=>dY,DefaultLlmsSdk:()=>B9});import{BUILT_IN_PROVIDER_IDS as XD,createHandler as Tx,createHandlerAsync as Ox,getProviderCollection as qx,hasProvider as YD,registerAsyncHandler as Mx,registerHandler as Rx,registerModel as Ex,registerProvider as jD}from"@cline/llms";function WD($){return $?{...$}:{}}function _x($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function zx($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function JD($){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 uY{providers=new Map;register($){zx($.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??{},...WD($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:_x($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...WD($.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 B9{configuredProviders=new uY;constructor($){this.applyConfig($)}createHandler($){return Tx(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return Ox(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(jD($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)Rx($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)Mx($.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.`);jD({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($){Ex($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...XD]}async getBuiltInProviders(){return(await Promise.all(XD.map((Z)=>qx(Z)))).filter((Z)=>Z!==void 0).map((Z)=>JD({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=YD(Z.id),W=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,J=typeof W==="string"&&YD(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 dY($){return new B9($)}KX();async function Nx(){return Promise.resolve().then(() => (H7(),vf))}function Vg(){return new Date().toISOString()}var Hg="cline",Bg="cline-pass";function Gg($){if(KD($)!=="providers.json")return;let Z=pY($);if(KD(Z)!=="settings")return;return pY(Z)}class q1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??jg(),this.dataDir=$.dataDir??Gg(this.filePath),this.dataDir||!$.filePath)H9({providerSettingsManager:this,dataDir:this.dataDir});if(xU(this),g7(this.read()),lY(this.filePath))try{GD(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!lY(this.filePath))return N$();try{let $=Xg(this.filePath,"utf8"),Z=JSON.parse($),Q=k8.safeParse(Z);if(Q.success)return g7(Q.data),Q.data}catch{}return N$()}write($){let Z=k8.parse($),Q=pY(this.filePath);if(!lY(Q))Jg(Q,{recursive:!0,mode:448});Yg(this.filePath,`${JSON.stringify(Z,null,2)}
753
- `,"utf8");try{GD(this.filePath,384)}catch{}g7(Z)}saveProviderSettings($,Z={}){let Q=h8.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:Vg(),tokenSource:j}},lastUsedProvider:X?J:W.lastUsedProvider};return this.write(V),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,J=j0(Z)?.storageProviderId;if(!J||J===Z)return Q;let X=$.providers[J]?.settings;if(!X)return Q;return h8.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===Bg&&Z.isClinePassEnabled===!1)return Hg;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 l0(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return l0(Z,$)}async refreshCatalog(){try{await b8({})}catch{}}}L0();Z4();function Kg($,Z){let Q=$?.expiresAt,W=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===W}class e7 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 rY{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new q1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=j0($.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=j0($);if(!W)return null;let J=this.providerSettingsManager.getProviderSettings(Z);if(!J)return null;let X=u4($,J);if(!X)return null;let Y=await W.refresh({settings:J,credentials:X,forceRefresh:Q,telemetry:this.telemetry});if(!Y)throw new e7($);let j=n$({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:Y,setLastUsed:!1,save:!1}),V=!Kg(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 Fg}from"@cline/shared";import{nanoid as Ag}from"nanoid";class FD{list($){return $?Z1($):[]}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:Z1($),updated:!1};let J=$.pendingPrompts[W];if(!J)return{sessionId:Z.sessionId,prompts:Z1($),updated:!1};let X=Z.prompt===void 0?J.prompt:Fg(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),fg($,j,W,J.delivery),{sessionId:Z.sessionId,prompts:Z1($),prompt:$W(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:Z1($),removed:!1};let[J]=$.pendingPrompts.splice(W,1);return{sessionId:Z.sessionId,prompts:Z1($),prompt:J?$W(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()}_${Ag(5)}`,prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return Z1($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((W)=>W.delivery==="steer");if(Z<0)return{prompts:Z1($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:Z1($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:Z1($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),Z1($)}clear($){return $.pendingPrompts.length=0,[]}}class iY{deps;service=new FD;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:Z1($)}})}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=$W(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 $W($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function Z1($){return $.pendingPrompts.map($W)}function fg($,Z,Q,W){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(W==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}L0();class aY{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=W3(Q),Y=!!W&&(!X.agentId||X.agentId===nY(W.agent));J3(J,Q,Y?{isPrimaryAgentEvent:!0,agentId:nY(W.agent),conversationId:W.agent.getConversationId(),...W?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(rJ(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};J3(W,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let W=v1({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:nY(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(W)Y$(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...W})}}if(await iJ($,Z,this.deps.invokeBackendOptional),Q)nJ(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 nY($){return $.getAgentId()}function sY($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:T$($.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 oY($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function AD($,Z,...Q){let W=oY($,Z);if(!W)throw Error(`session service method not available: ${Z}`);return Promise.resolve(W.apply($,Q))}async function fD($,Z,...Q){let W=oY($,Z);if(!W)return;await Promise.resolve(W.apply($,Q))}async function UD($,Z,...Q){let W=oY($,Z);if(!W)return;return await Promise.resolve(W.apply($,Q))}Y1();L0();function tY($,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=v1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId});if(X)Y$(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...X});y4(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(`
754
- `).length:0;y4(Z.telemetry,{event:"ended",ulid:Q,durationMs:Y,outputLines:j,errorMessage:W.error?String(W.error):void 0,agentId:W.subAgentId,parentId:W.parentAgentId,...v1({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 eY($,Z,Q,W){let J=tY($,Z,Q);return _$({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?V2({cwd:Z.cwd,...u0[x1({mode:Z.mode})],executors:W}):[];if(Z.enableSpawnAgent)Y.push(eY($,Z,Q,W));return g1(Y)},...J})}import{readFile as Ug,stat as Dg}from"node:fs/promises";var Lg=20480000;async function DD($){let Z=await Dg($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>Lg)throw Error("File is too large to read into context.");let Q=await Ug($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var LD=5000;function G9($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Eg($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=G9(Z.inputTokens),W=G9(Z.outputTokens),J=G9(Z.cacheReadTokens),X=G9(Z.cacheWriteTokens),Y=G9(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 Ng($,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 T1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new R5;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new c$;constructor($){let Z=zg();if(Z)Rg(Z);let Q=h0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new q4,this.createAgentInstance=$.createAgent??((W)=>new U$(W)),this.defaultCapabilities=q0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new q1,this.oauthTokenManager=$.oauthTokenManager??new rY({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new iY({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 aY({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??z0.CLI,Q=J0(),W=$.config.sessionId?.trim()??"",J=W||Og(),X=await this.applyInitialOAuthCredentials($),Y=X.initialMessages??[],j=Y.length>0?T8(Y):D0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let H=$j(V,J),B=$j(H,`${J}.messages.json`),G=$j(H,`${J}.json`),K=T$($.config),F=P0.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 P=await this.invokeOptionalValue("readSessionManifest",J);if(P)F=P,A={manifestPath:G,messagesPath:P.messages_path||B,manifest:P}}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=q0(this.defaultCapabilities,$.capabilities),U=D?.toolExecutors??this.toolExecutors,T=$.localRuntime,q=T?.extensionContext?.logger??T?.logger,z=T?.extensionContext?.automation,_,E={getSession:(P)=>this.sessions.get(P),subAgentStarts:this.subAgentStarts,onAgentEvent:(P,B0,G0)=>this.eventBridge.dispatchAgentEvent(P,B0,G0),invokeBackendOptional:(P,...B0)=>this.invokeOptional(P,...B0)};_=await HG({input:X,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:D,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(P)=>{if(P.name==="plugin_log"){this.eventBridge.handlePluginLog(J,P.payload,q);return}this.eventBridge.handlePluginEvent(J,P,z)},onTeamEvent:(P)=>{this.eventBridge.handleTeamEvent(J,P),_.config.onTeamEvent?.(P)},createSpawnTool:()=>eY(E,_.config,J,U),createSubAgentLifecycleCallbacks:(P)=>tY(E,P,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(P)=>{await this.persistSessionMetadata(J,()=>P)}});let w=await this.runtimeBuilder.build(_.runtimeBuilderInput),y=_.config,l=_.providerConfig;if(w.teamRuntime&&!y.teamName?.trim())y.teamName=w.teamRuntime.getTeamName();let o=[...w.tools,...y.extraTools??[]],t=w.extensions??_.extensions,Q0={sessionId:J,providerId:l.providerId,modelId:l.modelId,apiKey:l.apiKey,baseUrl:l.baseUrl,headers:l.headers,knownModels:l.knownModels,providerConfig:l,thinking:y.thinking,reasoningEffort:y.reasoningEffort??l.reasoningEffort,maxTokensPerTurn:y.maxTokensPerTurn,systemPrompt:y.systemPrompt,maxIterations:y.maxIterations,execution:y.execution,prepareTurn:a4(y),tools:o,hooks:_.hooks,extensions:t,hookErrorMode:y.hookErrorMode,initialMessages:_.effectiveInput.initialMessages,userFileContentLoader:DD,toolPolicies:_.toolPolicies,requestToolApproval:_.requestToolApproval?async(P)=>{let B0=_.requestToolApproval,G0=this.sessions.get(J);if(G0)await this.markTurnPending(G0);try{if(!B0)return{approved:!1,reason:"Tool approval callback is not configured."};return await B0(P)}finally{let w0=this.sessions.get(J);if(w0?.status==="pending")await this.markTurnRunning(w0)}}:void 0,telemetry:y.telemetry,onConsecutiveMistakeLimitReached:y.onConsecutiveMistakeLimitReached,completionPolicy:w.completionPolicy,consumePendingUserMessage:()=>{let P=this.pendingPromptsController.consumeSteer(J);return P?g5(P.prompt,P.mode??y.mode):void 0},logger:w.logger??y.logger,extensionContext:y.extensionContext,onEvent:(P)=>this.eventBridge.dispatchAgentEvent(J,y,P)};Q0.hooks={...Q0.hooks,onEvent:async(P)=>{if(await _.hooks?.onEvent?.(P),P.type!=="assistant-message")return;let B0=this.sessions.get(J);if(!B0)return;let G0=B0.agent.getMessages();try{await this.invoke("persistSessionMessages",J,G0,y.systemPrompt)}catch(w0){y.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:w0}),n2(y.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:w0,severity:"warn",handled:!0,context:{sessionId:J,providerId:y.providerId,modelId:y.modelId}})}}};let Q1=this.createAgentInstance(Q0);if(Q0.onEvent)Q1.subscribeEvents(Q0.onEvent);w.registerLeadAgent?.(Q1);let l$=v1({agentId:Q1.getAgentId(),conversationId:Q1.getConversationId(),teamId:w.teamRuntime?.getTeamId(),teamName:w.teamRuntime?.getTeamName(),teamRole:w.teamRuntime?"lead":void 0});if(GG(y,J,W.length>0,K,l$),l$)Y$(y.telemetry,{ulid:J,modelId:y.modelId,provider:y.providerId,...l$});if(w.teamRuntime)N9(y.telemetry,{ulid:J,teamId:w.teamRuntime.getTeamId(),teamName:w.teamRuntime.getTeamName(),leadAgentId:Q1.getAgentId(),restoredFromPersistence:w.teamRestoredFromPersistence===!0});let r={sessionId:J,config:y,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:w,agent:Q1,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,r),this.emitStatus(J,"running"),Y.length>0&&!A){if(await this.ensureSessionPersisted(r),await this.invoke("persistSessionMessages",r.sessionId,Y,r.config.systemPrompt),!X.prompt?.trim())await this.updateStatus(r,"completed",0)}let M1;try{if(X.prompt?.trim())if(M1=await this.executeTurn(r,{prompt:X.prompt,userImages:X.userImages,userFiles:X.userFiles}),!r.interactive)await this.finalizeSingleRun(r,M1.finishReason);else await this.completeInteractiveTurn(r,M1.finishReason)}catch(P){if(r.interactive&&r.aborting)M1=await this.completeAbortedInteractiveTurn(r);else{n2(r.config.telemetry,{component:"core",operation:"session.start",error:P,severity:"error",handled:!1,context:{sessionId:r.sessionId,providerId:r.config.providerId,modelId:r.config.modelId}});try{await this.failSession(r)}catch(B0){r.config.logger?.error?.("Session failure cleanup threw",{sessionId:r.sessionId,error:B0})}throw P}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:B,result:M1}}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 n2(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=zJ(this.usageBySession.get($)),Q=zJ(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&&!H0(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&&!H0(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 sY(Z);let Q=$.trim();if(!Q)return;let W=await this.getRow(Q);if(W)return R6(W);let J=await this.readManifest(Q);return J?RQ(J):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(R6),W=new Set(Q.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(W.has(J.sessionId))continue;Q.unshift(sY(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 h$(Q.messagesPath);let W=await this.readManifest(Z);return h$(W?.messages_path)}async dispatchHookEvent($){await nK($,{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(aJ($,J.finishReason)){let X=await sJ($);if(X.length===0)break;let Y=oJ($,X);J=await this.executeAgentTurn($,Y)}return J}async completeInteractiveTurn($,Z){if(x5($))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=D0();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)??D0(),j=this.aggregateUsageBySession.get($.sessionId)??Y;$.turnUsageBaseline=Y,$.turnAggregateUsageBaseline=j,$.turnPrimaryUsage=D0(),$.turnUsageByAgent=new Map,T9($.config.telemetry,$.sessionId,$.config.mode),t2($.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=LZ(H.messages,H,X);$.persistedMessages=B;let G=N6($.turnUsageByAgent?.values()??[]),K=A0(Y,H.usage),F=A0(A0(D0(),H.usage),G),A=A0(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 n2($.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===U0.SUBMIT_AND_EXIT&&W.error===void 0))return;$.submitAndExitObserved=!0,S4($.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=T$($.config),W=Mg(Z.prompt).trim();if(!W)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let J=await B8(W,Q);KG($.config.telemetry,J);let X=g5(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=T$($.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(x5($))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)S4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});uQ($);let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),n2($.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"}),n2($.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,H0(Z))delete J.ended_at,J.exit_code=null;else J.ended_at=W.endedAt??J0(),J.exit_code=typeof Q==="number"?Q:null;$.artifacts.manifest=J,$.status=Z,$.updatedAt=W.endedAt??J0(),$.endedAt=H0(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(!i$($.config.providerId)||!qg(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 e7)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 r1($);throw n2(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)=>Tg(W)?W:Zj($,W));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return v1({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=A0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let W=Zj(Z),J=`${Q}.messages.json`,X;try{X=_g($)}catch{return D0()}let Y=D0();for(let j of X){if(!j.endsWith(".messages.json"))continue;if(j===J)continue;let V=Zj($,j);if(V===W)continue;let H=await h$(V);if(H.length===0)continue;Y=A0(Y,T8(H))}return Y}withPersistedAggregateUsageFloor($,Z){let Q=Eg(Z.metadata?.aggregateUsage);if(Q)return Ng($,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:U1({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($)),LD))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(LD)).find((W)=>W.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return AD(this.sessionService,$,...Z)}invokeOptional($,...Z){return fD(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return UD(this.sessionService,$,...Z)}}function wg($){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 Pg($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function V7($={}){let Z=new T1({sessionService:new z1(new L1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||z0.CLI,interactive:!1,config:{providerId:Cg(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:Pg(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:wg(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}}}}bg(process.env.CLINE_VCR);function hg($){let Z=process.cwd(),Q,W,J;for(let X=0;X<$.length;X+=1){let Y=$[X],j=$[X+1];if(Y==="--cwd"&&j){Z=j,X+=1;continue}if(Y==="--host"&&j){Q=j,X+=1;continue}if(Y==="--port"&&j){let V=Number(j);if(Number.isFinite(V))W=V;X+=1;continue}if(Y==="--pathname"&&j)J=j,X+=1}return{cwd:Z,host:Q,port:W,pathname:J}}async function kg(){let $=hg(process.argv.slice(2));process.chdir($.cwd);let Z=a0({host:$.host,port:$.port,pathname:$.pathname}),Q=await d2({host:Z.host,port:Z.port,pathname:Z.pathname,owner:yg()==="production"?s0():y0(),runtimeHandlers:V7(),cronOptions:{workspaceRoot:$.cwd}}),W=async()=>{await Q.close(),process.exit(0)},J=!1,X=(Y,j)=>{if(J)return;J=!0;let V=j instanceof Error?j.stack||j.message:String(j);process.stderr.write(`[hub-daemon] ${Y}: ${V}
747
+ `)}}async function HY($,Z={}){if($.type==="mcp"){let Q=J9($);if(Z.deleteMcpServer)await Z.deleteMcpServer(Q);else T7($,Z);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Q??$.id}.`}}if($.type==="skill")return q7($,Z);if($.type==="plugin")return M7($,Z);throw Error(`Unsupported marketplace entry type: ${$.type}`)}var RU={};N(RU,{parsePluginSource:()=>y7,isOfficialPluginSlug:()=>b7,installPlugin:()=>fY,collectPluginMcpOAuthCandidates:()=>h7});import{spawn as _k}from"node:child_process";import{createHash as zk}from"node:crypto";import{existsSync as O1,mkdirSync as KY,readdirSync as Tk,readFileSync as Ok,renameSync as R7,rmSync as C7,statSync as FY}from"node:fs";import{cp as GY,mkdir as _U,writeFile as w7}from"node:fs/promises";import{homedir as KU}from"node:os";import{basename as W$,dirname as FU,extname as qk,join as n,relative as zU,resolve as d$,sep as Mk}from"node:path";import{isPluginModulePath as N7,resolveClineDir as Rk,resolvePluginModuleEntries as Ek}from"@cline/shared/storage";var E4="_installed",P7="package",Nk="https://github.com/cline/plugins.git",AU=30000,E7=10485760,fU="@cline/",Ck=["dependencies","devDependencies","optionalDependencies","peerDependencies"],wk={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function S7($){if($==="~")return KU();if($.startsWith("~/"))return n(KU(),$.slice(2));return $}function TU($){return $.split(Mk).join("/")}function r2($){return zk("sha256").update($).digest("hex").slice(0,12)}function Pk($){let Z=0;while(Z<$.length&&$[Z]==="-")Z++;let Q=$.length;while(Q>Z&&$[Q-1]==="-")Q--;return $.slice(Z,Q)}function Q$($){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 Pk(Z)||"plugin"}function b7($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function Sk($){return $?.trim()||Nk}function UU($){let Q=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Q?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Q[1]}}function bk($){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 yk($){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 hk($){try{return decodeURIComponent($)}catch{return $}}function kk($){return W$(hk($))||"plugin"}function Ik($){let Z=$.split("/").filter(Boolean);return Z.length>=5&&(Z[2]==="blob"||Z[2]==="raw")}function DU($){if(!/^https?:\/\//i.test($))return null;let Z;try{Z=new URL($)}catch{return null}let Q=Z.hostname.toLowerCase(),W=kk(Z.pathname),J=N7(W),X=(Q==="github.com"||Q==="www.github.com")&&Ik(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 LU($,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}=yk(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 y7($,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}=UU(Y);return{type:"npm",spec:Y,name:j}}if(Z==="git"){let Y=LU(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=DU(Q);if(!Y)throw Error(`Invalid remote plugin source: ${$}`);return Y}if(Q.startsWith("npm:")){let Y=Q.slice(4).trim(),{name:j}=UU(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=DU(Q);if(J)return J;let X=LU(Q);if(X)return X;if(b7(Q))return{type:"official",slug:Q};if(bk(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 xk($){return $?n($,".cline","plugins"):n(Rk(),"plugins")}function gk($,Z,Q){if(Z.type==="npm")return n($,E4,"npm",`${Q$(Z.name)}-${r2(Q)}`);if(Z.type==="git")return n($,E4,"git",Q$(Z.host),`${Q$(Z.path)}-${r2(Q)}`);if(Z.type==="remote")return n($,E4,"remote",`${Q$(Z.filename)}-${r2(Q)}`);if(Z.type==="official")return n($,E4,"official",`${Q$(Z.slug)}-${r2(Q)}`);return n($,E4,"local",`${Q$(W$(S7(Z.path)))}-${r2(Q)}`)}function mk($,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:${d$(Z,S7($.path))}`}function vk($,Z){if($.type==="npm")return $.name;if($.type==="git")return Q$(W$($.path));if($.type==="remote")return Q$(W$($.filename,qk($.filename)));if($.type==="official")return $.slug;return Q$(W$(d$(Z,S7($.path))))}async function N4($,Z,Q={}){await new Promise((W,J)=>{let X=_k($,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 OU($){let Z=n($,"package.json");if(!O1(Z))return null;try{return JSON.parse(Ok(Z,"utf8"))}catch{return null}}function ck($){let Z=$?.cline?.plugins;if(!Array.isArray(Z))return[];return Z.flatMap((Q)=>{if(typeof Q==="string")return[Q];return Q.paths??[]})}async function uk($){let Z=n($,"package.json"),Q=OU($);if(!Q)return;let W=!1;for(let J of Ck){let X=Q[J];if(!X||typeof X!=="object")continue;for(let Y of Object.keys(X)){if(!Y.startsWith(fU))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(fU))continue;delete Q.peerDependenciesMeta[J],W=!0}if(Object.keys(Q.peerDependenciesMeta).length===0)delete Q.peerDependenciesMeta}if(!W)return;await w7(Z,`${JSON.stringify(Q,null,2)}
748
+ `,"utf8")}function dk($,Z){let Q=n($,"node_modules","@cline");if(!O1(Q))return;for(let W of MU(Q)){if(`@cline/${W.name}`===Z)continue;C7(n(Q,W.name),{recursive:!0,force:!0})}}function qU($){let Z=ck(OU($)).map((X)=>d$($,X)).filter((X)=>O1(X)&&FY(X).isFile()&&N7(X));if(Z.length>0)return Z;let Q=Ek($);if(Q?.length)return Q;let W=[],J=[$];while(J.length>0){let X=J.pop();if(!X)continue;for(let Y of MU(X)){let j=n(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(".")&&N7(j))W.push(j)}}return W.sort((X,Y)=>X.localeCompare(Y))}function MU($){try{return Tk($,{withFileTypes:!0})}catch{return[]}}function lk($,Z){let Q=qU(Z);if(Q.length===0)throw Error(`No plugin entry files found in ${Z}`);return Q.map((W)=>`./${TU(zU($,W))}`)}async function pk($,Z,Q){let W=lk($,Z);return await w7(n($,"package.json"),JSON.stringify({...wk,name:Q,cline:{plugins:[{paths:W}]}},null,2),"utf8"),W}async function rk($,Z,Q){let W=n(Z,P7);return await _U(W,{recursive:!0}),await w7(n(W,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await N4(Q,["install",$.spec,"--prefix",W,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),dk(W,$.name),n(W,"node_modules",$.name)}async function AY($,Z){if(!O1(n($,"package.json")))return;await uk($),await N4(Z,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function ik($,Z,Q){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let W=n(Z,P7),J=["clone","--filter=blob:none"];if($.ref)J.push("--branch",$.ref);J.push("--",$.repo,W);try{await N4("git",J)}catch(X){if(!$.ref)throw X;await N4("git",["clone","--filter=blob:none","--",$.repo,W]),await N4("git",["checkout","--detach",$.ref],{cwd:W})}return await AY(W,Q),W}async function nk($,Z,Q,W){let J=n(Z,"repo");await N4("git",["clone","--filter=blob:none","--depth","1","--",W,J]);let X=n(J,"plugins",$.slug);if(!O1(X)||!FY(X).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${W}`);let Y=n(Z,P7);return await GY(X,Y,{recursive:!0,filter:(j)=>{let V=W$(j);return V!==".git"&&V!=="node_modules"}}),C7(J,{recursive:!0,force:!0}),await AY(Y,Q),Y}function BY($){return Error(`Remote plugin file from ${$} exceeds the ${E7} byte limit`)}function ak($){let Z=$.headers.get("content-length");if(!Z)return;let Q=Number(Z);if(!Number.isFinite(Q)||Q<0)return;return Q}async function sk($,Z){let Q=ak($);if(Q!==void 0&&Q>E7)throw BY(Z);if(!$.body){let Y=Buffer.from(await $.text(),"utf8");if(Y.byteLength>E7)throw BY(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>E7)throw await W.cancel().catch(()=>{return}),BY(Z);J.push(V)}return Buffer.concat(J,X)}finally{W.releaseLock()}}async function ok($,Z){let Q=new AbortController,W=setTimeout(()=>{Q.abort()},AU);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 sk(J,$.url);return KY(Z,{recursive:!0}),await w7(n(Z,$.filename),X),Z}catch(J){if(J instanceof Error&&J.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${AU}ms`);throw J}finally{clearTimeout(W)}}async function tk($,Z,Q,W){let J=d$(Q,S7($.path));if(!O1(J))throw Error(`Plugin source path does not exist: ${J}`);let X=FY(J);if(X.isFile()){if(!N7(J))throw Error(`Plugin file must be .js or .ts: ${J}`);KY(Z,{recursive:!0});let j=n(Z,W$(J));return await GY(J,j),Z}if(!X.isDirectory())throw Error(`Plugin source must be a file or directory: ${J}`);let Y=n(Z,P7);return await GY(J,Y,{recursive:!0,filter:(j)=>{let V=W$(j);return V!==".git"&&V!=="node_modules"}}),await AY(Y,W),Y}function ek($,Z){if(O1($)&&!Z)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function $I($,Z,Q){if(KY(FU(Z),{recursive:!0}),!O1(Z)){R7($,Z);return}if(!Q)throw Error(`Plugin is already installed at ${Z}. Use --force to replace it.`);let W=n(FU(Z),`.replace-${W$(Z)}-${Date.now()}-${process.pid}-${r2(`${Z}:${Math.random()}`)}`);R7(Z,W);try{R7($,Z)}catch(J){if(!O1(Z)&&O1(W))R7(W,Z);throw J}try{C7(W,{recursive:!0,force:!0})}catch{}}function ZI($){let Z=$.transport;if(Z.type==="stdio")return!1;return Z.headers!==void 0&&Object.keys(Z.headers).length>0}function QI($){let Z=$.oauth?.tokens?.access_token;return typeof Z==="string"&&Z.trim().length>0}function WI($){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 h7($){let Z=new Set($.pluginPaths.map((J)=>d$(J)));if(Z.size===0)return[];let Q;try{Q=p0({filePath:$.settingsPath??$0()})}catch{return[]}let W=[];for(let J of Q){let X=WI(J);if(!X||!Z.has(d$(X.pluginPath)))continue;let Y=J.transport.type;if(Y==="stdio")continue;if(ZI(J)||QI(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 fY($){let Z=$.source.trim(),Q=y7(Z,$.sourceType),W=$.cwd?.trim(),J=W?d$(W):process.cwd(),X=xk(W?J:void 0),Y=Sk($.officialPluginsRepo),j=mk(Q,J,Y),V=gk(X,Q,j),H=vk(Q,J),B=n(X,E4,".tmp"),G=n(B,`${Date.now()}-${process.pid}-${r2(`${Z}:${Math.random()}`)}`),K=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;ek(V,F),await _U(B,{recursive:!0});let A;try{if(Q.type==="npm")A=await rk(Q,G,K);else if(Q.type==="git")A=await ik(Q,G,K);else if(Q.type==="official")A=await nk(Q,G,K,Y);else if(Q.type==="remote")A=await ok(Q,G);else A=await tk(Q,G,J,K);let L=(Q.type==="local"||Q.type==="remote")&&A===G?qU(G).map((U)=>`./${TU(zU(G,U))}`):await pk(G,A,H);if(L.length===0)throw Error(`No plugin entry files found for ${Z}`);$I(G,V,F);let f={source:Z,installPath:V,entryPaths:L.map((U)=>d$(V,U)),mcpSyncFailures:[],mcpOAuthCandidates:[]},D=await $9({pluginPaths:f.entryPaths,cwd:J,workspacePath:J});return f.mcpSyncFailures=D.failures,f.mcpOAuthCandidates=h7({pluginPaths:f.entryPaths}),f}catch(L){throw C7(G,{recursive:!0,force:!0}),L}}var rU={};N(rU,{updateLocalProvider:()=>u7,saveLocalProviderSettings:()=>qY,saveLocalProviderOAuthCredentials:()=>NY,resolveLocalClineAuthToken:()=>wY,refreshProviderModelsFromSource:()=>MY,normalizeOAuthProvider:()=>RY,loginLocalProvider:()=>EY,loginAndSaveLocalProviderOAuthCredentials:()=>CY,listLocalProviders:()=>TY,getLocalProviderModels:()=>OY,ensureCustomProvidersLoaded:()=>m7,deleteLocalProvider:()=>d7,addLocalProvider:()=>zY});import*as C0 from"@cline/llms";import{existsSync as JI,mkdirSync as XI,readFileSync as YI,writeFileSync as jI}from"node:fs";import{mkdir as VI,readFile as HI,writeFile as BI}from"node:fs/promises";import{dirname as UY,join as GI}from"node:path";import*as x0 from"@cline/llms";import{ModelCapabilitySchema as KI,ProviderCapabilitySchema as FI,ProviderClientSchema as AI,ProviderProtocolSchema as fI}from"@cline/shared";import{z as a}from"zod";var UI=a.object({id:a.string().optional(),name:a.string().optional(),maxTokens:a.number().optional(),contextWindow:a.number().optional(),maxInputTokens:a.number().optional(),capabilities:a.array(KI).optional(),supportsVision:a.boolean().optional(),supportsAttachments:a.boolean().optional(),supportsReasoning:a.boolean().optional()}).passthrough(),DI=a.object({name:a.string(),baseUrl:a.string(),defaultModelId:a.string().optional(),protocol:fI.optional(),client:AI.optional(),capabilities:a.array(FI).optional(),modelsSourceUrl:a.string().optional()}).passthrough(),EU=a.object({provider:DI.optional(),models:a.record(a.string(),UI).optional()}).passthrough(),NU=a.object({version:a.literal(1),providers:a.record(a.string(),EU)}),LI=a.object({version:a.literal(1),providers:a.record(a.string(),a.unknown())}),k7=new Set;function CU($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function i2($){return GI(UY($.getFilePath()),"models.json")}function I7(){return{version:1,providers:{}}}function wU($){let Z=LI.safeParse($);if(!Z.success)return I7();let Q={};for(let[W,J]of Object.entries(Z.data.providers)){let X=EU.safeParse(J);if(X.success)Q[W]=X.data}return{version:1,providers:Q}}function DY($){if(!JI($))return I7();try{let Z=YI($,"utf8");return wU(JSON.parse(Z))}catch{}return I7()}async function C4($){try{let Z=await HI($,"utf8");return wU(JSON.parse(Z))}catch{}return I7()}function PU($,Z){XI(UY($),{recursive:!0});let Q=NU.parse(Z);jI($,`${JSON.stringify(Q,null,2)}
749
+ `,"utf8")}async function x7($,Z){await VI(UY($),{recursive:!0});let Q=NU.parse(Z);await BI($,`${JSON.stringify(Q,null,2)}
750
+ `,"utf8")}function SU($,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 bU($){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 yU($){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 _I($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function hU($,Z){return $??Z??"openai-chat"}function kU($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function IU($,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 zI($,Z){for(let[Q,W]of Object.entries(Z??{})){let J=W.id?.trim()||Q.trim();if(!J)continue;x0.registerModel($,J,IU(J,W))}}function TI($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function OI($){return Object.assign({},...x0.resolveProviderModelCatalogKeys($).map((Q)=>x0.getGeneratedModelsForProvider(Q)))}function qI($){let Z=$.provider.trim();if(!Z||x0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let W=x0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],J=OI(Z),X=yU($.capabilities),Y=X.length>0?X:void 0,j=$.model?.trim(),V={...J,...W?.models??{}};if(j)V[j]=TI(j,V[j],Y);let H=Object.keys(V).filter(Boolean),B=j||H[0];if(!B)return;let G=hU($.protocol,W?.provider.protocol),K=kU($.client,G,W?.provider.client);x0.registerProvider({provider:{id:Z,name:W?.provider.name??CU(Z),description:W?.provider.description,protocol:G,client:K,baseUrl:Q,modelsSourceUrl:W?.provider.modelsSourceUrl,defaultModelId:B,capabilities:bU($.capabilities)??W?.provider.capabilities,source:"file"},models:V})}function g7($){for(let Z of Object.values($.providers))qI(Z.settings)}function V9($,Z){let Q=Z.models??{};if(!_I(Z.provider)){zI($,Q);return}let W=yU(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=hU(Z.provider.protocol,void 0),j=kU(Z.provider.client,Y,void 0),V=Object.fromEntries(J.map(({id:H,model:B})=>[H,{...IU(H,B,W.length>0?W:void 0),status:"active"}]));x0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||CU($),protocol:Y,client:j,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:X,capabilities:bU(Z.provider.capabilities),source:"file"},models:V})}function xU($){let Z=i2($);if(k7.has(Z))return;let Q=DY(Z);for(let[W,J]of Object.entries(Q.providers))V9(W,J);k7.add(Z)}async function m7($){let Z=i2($);if(k7.has(Z))return;let Q=await C4(Z);for(let[W,J]of Object.entries(Q.providers))V9(W,J);k7.add(Z)}var mU="cline-pass";function MI($){return $.apiKey??$.auth?.apiKey}function RI($){return($.auth?.accessToken?.trim()??"").length>0}function vU($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function EI($){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 NI($){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 cU($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>SU(Z,Q))}async function CI($,Z){let Q=await C0.getModelsForProvider($),W=$===mU;if(!Z&&!W)return Q;let J=await v6($,{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 LY($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function wI($){if(!$?.length)return;return[...new Set($)]}function PI($,Z){return wI([...$??[],...Z??[]])}function SI($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function bI($){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 yI($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(bI)}var v7={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},gU={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function hI($){if(!$)return[v7];if($.source!=="system")return $.baseUrl?[v7,gU]:[v7];let Z=[];if($.env?.length)Z.push(v7);if($.baseUrl)Z.push(gU);return Z}function kI($,Z){return Z.split(".").reduce((Q,W)=>{if(!Q||typeof Q!=="object")return;return Q[W]},$)}function II($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function xI($,Z,Q){if(!$?.length)return;let W={};for(let J of $){let Y=II(J.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:kI(Z,J.path))??J.defaultValue;if(Y!==void 0)W[J.path]=Y}return W}function uU($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function _Y($,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 dU($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await wZ($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function lU($,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);C0.unregisterProvider(Z)}async function zY($,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=i2($);if((await C4(A)).providers[Q]){let f=await d7($,{providerId:Q});return{providerId:Q,settingsPath:f.settingsPath,modelsPath:f.modelsPath,modelsCount:0}}return lU($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(C0.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=LY(Z.models),j=Z.modelsSourceUrl?.trim(),V=await dU({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=uU(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=i2($),F=await C4(K);return F.providers[Q]={provider:{name:X,baseUrl:W,defaultModelId:H,protocol:Z.protocol,client:Z.client,capabilities:B,modelsSourceUrl:j},models:_Y(V,B)},await x7(K,F),V9(Q,F.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function u7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=i2($),J=await C4(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(),_=LY(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()||vU(Q),baseUrl:Z.baseUrl?.trim()??q.baseUrl?.trim()??"",defaultModelId:_,protocol:q.protocol,client:q.client,capabilities:q.capabilities},models:_?_Y([_],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=LY(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 dU({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=uU(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:_Y(L,V)},await x7(W,J),V9(Q,J.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W,modelsCount:L.length}}async function d7($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=i2($),J=await C4(W);if(!J.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete J.providers[Q],await x7(W,J),C0.unregisterProvider(Q),lU($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W}}async function TY($,Z={}){let Q=$.read(),W=C0.getProviderIds(),J=await Promise.all(W.map(async(Y)=>{let[j,V]=await Promise.all([C0.getProvider(Y),C0.getModelsForProvider(Y)]),H=cU(V),B=Q.providers[Y]?.settings,G=j?.name??vU(Y),K=PI(j?.capabilities,B?.capabilities),F=yI(j?.metadata)??hI(j);return{provider:{id:Y,name:G,models:H.length,color:NI(Y),letter:EI(G),enabled:Boolean(B),apiKey:B?MI(B):void 0,oauthAccessTokenPresent:B?RI(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:xI(F,B,j),modelList:H},rank:SI(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!==mU);return{providers:X,settingsPath:$.getFilePath()}}async function OY($,Z){let Q=$.trim(),W=await CI(Q,Z),J=cU(W);return{providerId:Q,models:J}}function c7($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function pU($,Z){if(!c7(Z))return c7($)?{...$}:void 0;let Q=c7($)?{...$}:{};for(let[W,J]of Object.entries(Z)){if(J==null||J===""){delete Q[W];continue}if(c7(J)){let X=pU(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 qY($,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=pU(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 MY($,Z){let Q=Z.trim(),W=$.getProviderSettings(Q),X=C0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,Y=W?.baseUrl?.trim()||X?.baseUrl?.trim(),j=PZ(Y,X?.baseUrl,X?.modelsSourceUrl);if(!W||!X||!Y||!j)return{providerId:Q,refreshed:!1};let V=await u7($,{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 RY($){let Z=$.trim().toLowerCase(),Q=j0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function EY($,Z,Q,W){let J=j0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let X=g8({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 NY($,Z,Q,W,J){return n$({manager:$,providerId:Z,settings:Q,credentials:W,setLastUsed:J?.setLastUsed})}async function CY($,Z,Q,W){let J=g8({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return c4($,Z,{callbacks:J,telemetry:W})}function wY($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}var iU={};N(iU,{getProviderConfigFields:()=>PY});import*as l7 from"@cline/llms";var gI=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],mI={"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 vI($,Z){let Q={};for(let W of gI){let J=$[W],X=Z[W];if(J||X)Q[W]={...J,...X}}return Q}function cI($){let Z=mI[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:vI($.fields,Z.fields)}}var uI=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function dI($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return uI.has($)}function PY($){let Z=l7.normalizeProviderId($);if(i$(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=l7.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(dI(Z,Q))J.baseUrl={defaultValue:W};return cI({providerId:Z,authMethod:"api-key",fields:J})}var oU={};N(oU,{resolveLegacyClineAuth:()=>yY,migrateLegacyProviderSettings:()=>H9});import{existsSync as lI,readFileSync as pI}from"node:fs";import{dirname as rI,join as SY}from"node:path";import*as w4 from"@cline/llms";import{resolveClineDataDir as iI}from"@cline/shared/storage";var p7="openai",sU=w4.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,nU=128000;function yY($){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 b($){let Z=$?.trim();return Z?Z:void 0}function nI($){return $==="credentials"?"iam":$}function aU($){if(!lI($))return;try{let Z=pI($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function aI($){let Z=$.dataDir??iI(),Q=$.globalStatePath??SY(Z,"globalState.json"),W=$.secretsPath??SY(Z,"secrets.json"),J=aU(Q),X=aU(W);if(!J&&!X)return;return{globalState:J??{},secrets:X??{}}}function bY($){if($===p7)return sU;return $}function sI($,Z,Q,W){let J=Q==="plan"?"planMode":"actMode",X=Z===W?b(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?b(typeof $[j]==="string"?$[j]:void 0):void 0)??X}function oI($,Z,Q){let W=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,J=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(b).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 tI($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),W=b(Q.access_token),J=b(Q.refresh_token),X=b(Q.accountId);if(!W&&!J&&!X)return;return{...W?{apiKey:W}:{},auth:{...W?{accessToken:W}:{},...J?{refreshToken:J}:{},...X?{accountId:X}:{}}}}catch{return}}function eI($){let Z=w4.getGeneratedModelsForProvider($),W=w4.getProviderCollectionSync($)?.provider.defaultModelId;if(W&&Z[W])return W;return Object.keys(Z)[0]??void 0}function $x($,Z,Q,W){let J=bY($),X=b(W==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),Y=sI(Z,$,W,X)??eI(J),j=oI(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,tI(Q));if($==="cline")try{let D=b(Q["cline:clineAccountId"]);if(D)B.auth={...B.auth??{},...yY(D)}}catch{}if($===p7&&Z.openAiHeaders)B.headers=Z.openAiHeaders;if($==="bedrock"){let D=nI(Z.awsAuthentication),U=D==="profile"||Z.awsUseProfile===!0;B.aws={accessKey:b(Q.awsAccessKey),secretKey:b(Q.awsSecretKey),sessionToken:b(Q.awsSessionToken),region:b(Z.awsRegion),authentication:D,profile:U?b(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:b(Z.awsBedrockEndpoint),customModelBaseId:b(W==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")B.gcp={projectId:b(Z.vertexProjectId),region:b(Z.vertexRegion)};if($===p7&&(Z.azureApiVersion||Z.azureIdentity!==void 0))B.azure={apiVersion:b(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let D=Z.sapAiCoreUseOrchestrationMode??!0;B.sap={clientId:b(Q.sapAiCoreClientId),clientSecret:b(Q.sapAiCoreClientSecret),tokenUrl:b(Z.sapAiCoreTokenUrl),resourceGroup:b(Z.sapAiResourceGroup),deploymentId:D?void 0:b(W==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:D}}if($==="oca"){B.oca={mode:Z.ocaMode};let D=b(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=b(H[$]),F=b(G[$]),A={provider:J,...K?{apiKey:K}:{},...Y?{model:Y}:{},...F?{baseUrl:F}:{},...j?{reasoning:j}:{},...V?{timeout:V}:{},...B},L=h8.safeParse(A);if(!L.success)return;return Object.keys(A).filter((D)=>D!=="provider").length>0?L.data:void 0}function Zx($,Z){if($!==sU)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:nU,maxInputTokens:nU,capabilities:["streaming","tools","images"]}}}}function Qx($,Z){let Q=new Set;for(let J of[$.actModeApiProvider,$.planModeApiProvider]){let X=b(J);if(X)Q.add(X)}if(b(Z.apiKey))Q.add("anthropic");if(b(Z.openRouterApiKey))Q.add("openrouter");if(b(Z.openAiApiKey))Q.add(p7);if(b(Z.openAiNativeApiKey))Q.add("openai-native");if(b(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(b(Z.geminiApiKey))Q.add("gemini");if(b(Z.ollamaApiKey))Q.add("ollama");if(b(Z.awsAccessKey)||b(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||b($.awsProfile))Q.add("bedrock");if(b($.vertexProjectId)||b($.vertexRegion))Q.add("vertex");if(b(Z.clineApiKey))Q.add("cline");let W=yY(b(Z["cline:clineAccountId"]));if(W?.accessToken||W?.refreshToken||W?.accountId)Q.add("cline");if(b(Z.ocaApiKey))Q.add("oca");if(b(Z.sapAiCoreClientId)||b(Z.sapAiCoreClientSecret)||b($.sapAiCoreTokenUrl)||b($.sapAiCoreBaseUrl)||b($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function H9($){let Z=$.providerSettingsManager.read(),Q=aI($);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=Qx(W,J),j=N$();j.providers={...Z.providers},j.lastUsedProvider=Z.lastUsedProvider;let V=new Date().toISOString(),H=0,B=SY(rI($.providerSettingsManager.getFilePath()),"models.json"),G=DY(B),K=0;for(let L of Y){let f=bY(L);if(j.providers[f])continue;let D=$x(L,W,J,X);if(!D)continue;j.providers[f]={settings:D,updatedAt:V,tokenSource:"migration"},H+=1;let U=Zx(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=b(X==="plan"?W.planModeApiProvider:W.actModeApiProvider),A=F?bY(F):void 0;if(j.lastUsedProvider=Z.lastUsedProvider??(A&&j.providers[A]?A:Object.keys(j.providers)[0]),$.providerSettingsManager.write(j),K>0)PU(B,G);return{migrated:H>0||K>0,providerCount:Object.keys(j.providers).length,lastUsedProvider:j.lastUsedProvider}}H7();L0();oQ();var tU={};N(tU,{FileTeamPersistenceStore:()=>r7});import{appendFileSync as Wx,existsSync as hY,mkdirSync as Jx,readFileSync as Xx,renameSync as Yx,unlinkSync as jx,writeFileSync as Vx}from"node:fs";import{join as kY}from"node:path";import{resolveTeamDataDir as Hx}from"@cline/shared/storage";function Bx($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class r7{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=Bx($.teamName),Q=$.baseDir?.trim()||Hx();this.dirPath=kY(Q,Z),this.statePath=kY(this.dirPath,"state.json"),this.taskHistoryPath=kY(this.dirPath,"task-history.jsonl")}loadState(){if(!hY(this.statePath))return;try{let $=Xx(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 jA(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`;Vx(Q,`${JSON.stringify(Z,null,2)}
751
+ `,"utf8"),Yx(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(),Wx(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:Z})}
752
+ `,"utf8")}ensureDir(){if(!hY(this.dirPath))Jx(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(hY(this.statePath))jx(this.statePath)}}var eU={};N(eU,{ChatViewStateSchema:()=>IY,ChatSummarySchema:()=>o7,ChatSessionStatusSchema:()=>n7,ChatSessionConfigSchema:()=>i7,ChatMessageSchema:()=>s7,ChatMessageRoleSchema:()=>a7});import{z as h}from"zod";var i7=h.object({workspaceRoot:h.string().min(1),cwd:h.string().optional(),provider:h.string().min(1),model:h.string().min(1),mode:h.enum(["act","plan"]).default("act"),apiKey:h.string(),systemPrompt:h.string().optional(),rules:h.string().optional(),maxIterations:h.number().int().positive().optional(),enableTools:h.boolean(),enableSpawn:h.boolean().optional(),enableTeams:h.boolean().optional(),autoApproveTools:h.boolean().optional(),missionStepInterval:h.number().int().positive().optional(),missionTimeIntervalMs:h.number().int().positive().optional()}),n7=h.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),a7=h.enum(["user","assistant","tool","system","status","error"]),s7=h.object({id:h.string().min(1),sessionId:h.string().nullable(),role:a7,content:h.string(),createdAt:h.number().int().nonnegative(),meta:h.object({stream:h.enum(["stdout","stderr"]).optional(),toolName:h.string().optional(),iteration:h.number().int().nonnegative().optional(),agentId:h.string().optional(),conversationId:h.string().optional(),hookEventName:h.string().optional(),inputTokens:h.number().int().nonnegative().optional(),outputTokens:h.number().int().nonnegative().optional(),checkpoint:h.object({ref:h.string(),createdAt:h.number().int().nonnegative(),runCount:h.number().int().positive(),kind:h.enum(["stash","commit"]).optional()}).optional()}).optional()}),o7=h.object({toolCalls:h.number().int().nonnegative(),tokensIn:h.number().int().nonnegative(),tokensOut:h.number().int().nonnegative()}),IY=h.object({sessionId:h.string().nullable(),status:n7,config:i7,messages:h.array(s7),rawTranscript:h.string(),error:h.string().nullable(),summary:o7});var $D={};N($D,{CORE_BUILD_VERSION:()=>xY});var xY=QF;import{Agent as Wg,createAgentRuntime as Jg}from"@cline/agents";var ZD={};N(ZD,{fetchClineRecommendedModels:()=>mY,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>t7});import{getClineEnvironmentConfig as Gx}from"@cline/shared";var Kx=5000,t7={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}],clinePass:[]};function Fx($){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 gY($){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 Ax($){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(gY).filter((V)=>V!==null),Y=W.map(gY).filter((V)=>V!==null),j=J.map(gY).filter((V)=>V!==null);if(X.length===0&&Y.length===0&&j.length===0)return null;return{recommended:X,free:Y,clinePass:j}}function fx($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=Gx().apiBaseUrl;try{return($.providerSettingsManager??new q1).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function Ux($,Z,Q){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await $(Z,{signal:W.signal})}finally{clearTimeout(J)}}async function mY($={}){try{let Z=fx($),Q=$.fetchImpl??fetch,W=await Ux(Q,`${Z}/api/v1/ai/cline/recommended-models`,$.timeoutMs??Kx);if(!W.ok)throw Error(`HTTP ${W.status}`);let J=await W.json(),X=Ax(J);if(X)return X}catch{}return Fx(t7)}var QD={};N(QD,{loadLlmsConfigFromFile:()=>cY,defineLlmsConfig:()=>vY});import{readFile as Dx}from"node:fs/promises";import Lx from"node:path";function vY($){return $}async function cY($){let Z=Lx.resolve($),Q=await Dx(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 _x(W,Z)}function _x($,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 $}var VD={};N(VD,{createLlmsSdk:()=>dY,DefaultLlmsSdk:()=>B9});import{BUILT_IN_PROVIDER_IDS as XD,createHandler as Ox,createHandlerAsync as qx,getProviderCollection as Mx,hasProvider as YD,registerAsyncHandler as Rx,registerHandler as Ex,registerModel as Nx,registerProvider as jD}from"@cline/llms";function WD($){return $?{...$}:{}}function zx($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function Tx($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function JD($){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 uY{providers=new Map;register($){Tx($.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??{},...WD($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:zx($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...WD($.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 B9{configuredProviders=new uY;constructor($){this.applyConfig($)}createHandler($){return Ox(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return qx(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(jD($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)Ex($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)Rx($.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.`);jD({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($){Nx($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...XD]}async getBuiltInProviders(){return(await Promise.all(XD.map((Z)=>Mx(Z)))).filter((Z)=>Z!==void 0).map((Z)=>JD({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=YD(Z.id),W=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,J=typeof W==="string"&&YD(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 dY($){return new B9($)}KX();async function Cx(){return Promise.resolve().then(() => (H7(),vf))}function Hg(){return new Date().toISOString()}var Bg="cline",Gg="cline-pass";function Kg($){if(KD($)!=="providers.json")return;let Z=pY($);if(KD(Z)!=="settings")return;return pY(Z)}class q1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??Vg(),this.dataDir=$.dataDir??Kg(this.filePath),this.dataDir||!$.filePath)H9({providerSettingsManager:this,dataDir:this.dataDir});if(xU(this),g7(this.read()),lY(this.filePath))try{GD(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!lY(this.filePath))return N$();try{let $=Yg(this.filePath,"utf8"),Z=JSON.parse($),Q=k8.safeParse(Z);if(Q.success)return g7(Q.data),Q.data}catch{}return N$()}write($){let Z=k8.parse($),Q=pY(this.filePath);if(!lY(Q))Xg(Q,{recursive:!0,mode:448});jg(this.filePath,`${JSON.stringify(Z,null,2)}
753
+ `,"utf8");try{GD(this.filePath,384)}catch{}g7(Z)}saveProviderSettings($,Z={}){let Q=h8.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:Hg(),tokenSource:j}},lastUsedProvider:X?J:W.lastUsedProvider};return this.write(V),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,J=j0(Z)?.storageProviderId;if(!J||J===Z)return Q;let X=$.providers[J]?.settings;if(!X)return Q;return h8.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===Gg&&Z.isClinePassEnabled===!1)return Bg;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 l0(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return l0(Z,$)}async refreshCatalog(){try{await b8({})}catch{}}}L0();Z4();function Fg($,Z){let Q=$?.expiresAt,W=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===W}class e7 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 rY{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new q1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=j0($.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=j0($);if(!W)return null;let J=this.providerSettingsManager.getProviderSettings(Z);if(!J)return null;let X=u4($,J);if(!X)return null;let Y=await W.refresh({settings:J,credentials:X,forceRefresh:Q,telemetry:this.telemetry});if(!Y)throw new e7($);let j=n$({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:Y,setLastUsed:!1,save:!1}),V=!Fg(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 Ag}from"@cline/shared";import{nanoid as fg}from"nanoid";class FD{list($){return $?Z1($):[]}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:Z1($),updated:!1};let J=$.pendingPrompts[W];if(!J)return{sessionId:Z.sessionId,prompts:Z1($),updated:!1};let X=Z.prompt===void 0?J.prompt:Ag(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),Ug($,j,W,J.delivery),{sessionId:Z.sessionId,prompts:Z1($),prompt:$W(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:Z1($),removed:!1};let[J]=$.pendingPrompts.splice(W,1);return{sessionId:Z.sessionId,prompts:Z1($),prompt:J?$W(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()}_${fg(5)}`,prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return Z1($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((W)=>W.delivery==="steer");if(Z<0)return{prompts:Z1($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:Z1($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:Z1($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),Z1($)}clear($){return $.pendingPrompts.length=0,[]}}class iY{deps;service=new FD;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:Z1($)}})}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=$W(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 $W($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function Z1($){return $.pendingPrompts.map($W)}function Ug($,Z,Q,W){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(W==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}L0();class aY{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=W3(Q),Y=!!W&&(!X.agentId||X.agentId===nY(W.agent));J3(J,Q,Y?{isPrimaryAgentEvent:!0,agentId:nY(W.agent),conversationId:W.agent.getConversationId(),...W?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(rJ(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};J3(W,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let W=v1({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:nY(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(W)Y$(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...W})}}if(await iJ($,Z,this.deps.invokeBackendOptional),Q)nJ(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 nY($){return $.getAgentId()}function sY($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:T$($.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 oY($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function AD($,Z,...Q){let W=oY($,Z);if(!W)throw Error(`session service method not available: ${Z}`);return Promise.resolve(W.apply($,Q))}async function fD($,Z,...Q){let W=oY($,Z);if(!W)return;await Promise.resolve(W.apply($,Q))}async function UD($,Z,...Q){let W=oY($,Z);if(!W)return;return await Promise.resolve(W.apply($,Q))}Y1();L0();function tY($,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=v1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId});if(X)Y$(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...X});y4(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(`
754
+ `).length:0;y4(Z.telemetry,{event:"ended",ulid:Q,durationMs:Y,outputLines:j,errorMessage:W.error?String(W.error):void 0,agentId:W.subAgentId,parentId:W.parentAgentId,...v1({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 eY($,Z,Q,W){let J=tY($,Z,Q);return _$({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?V2({cwd:Z.cwd,...u0[x1({mode:Z.mode})],executors:W}):[];if(Z.enableSpawnAgent)Y.push(eY($,Z,Q,W));return g1(Y)},...J})}import{readFile as Dg,stat as Lg}from"node:fs/promises";var _g=20480000;async function DD($){let Z=await Lg($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>_g)throw Error("File is too large to read into context.");let Q=await Dg($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var LD=5000;function G9($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Ng($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=G9(Z.inputTokens),W=G9(Z.outputTokens),J=G9(Z.cacheReadTokens),X=G9(Z.cacheWriteTokens),Y=G9(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 Cg($,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 T1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new R5;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new c$;constructor($){let Z=Tg();if(Z)Eg(Z);let Q=h0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new q4,this.createAgentInstance=$.createAgent??((W)=>new U$(W)),this.defaultCapabilities=q0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new q1,this.oauthTokenManager=$.oauthTokenManager??new rY({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new iY({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 aY({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??z0.CLI,Q=J0(),W=$.config.sessionId?.trim()??"",J=W||qg(),X=await this.applyInitialOAuthCredentials($),Y=X.initialMessages??[],j=Y.length>0?T8(Y):D0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let H=$j(V,J),B=$j(H,`${J}.messages.json`),G=$j(H,`${J}.json`),K=T$($.config),F=P0.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 P=await this.invokeOptionalValue("readSessionManifest",J);if(P)F=P,A={manifestPath:G,messagesPath:P.messages_path||B,manifest:P}}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=q0(this.defaultCapabilities,$.capabilities),U=D?.toolExecutors??this.toolExecutors,T=$.localRuntime,q=T?.extensionContext?.logger??T?.logger,z=T?.extensionContext?.automation,_,E={getSession:(P)=>this.sessions.get(P),subAgentStarts:this.subAgentStarts,onAgentEvent:(P,B0,G0)=>this.eventBridge.dispatchAgentEvent(P,B0,G0),invokeBackendOptional:(P,...B0)=>this.invokeOptional(P,...B0)};_=await HG({input:X,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:D,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(P)=>{if(P.name==="plugin_log"){this.eventBridge.handlePluginLog(J,P.payload,q);return}this.eventBridge.handlePluginEvent(J,P,z)},onTeamEvent:(P)=>{this.eventBridge.handleTeamEvent(J,P),_.config.onTeamEvent?.(P)},createSpawnTool:()=>eY(E,_.config,J,U),createSubAgentLifecycleCallbacks:(P)=>tY(E,P,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(P)=>{await this.persistSessionMetadata(J,()=>P)}});let w=await this.runtimeBuilder.build(_.runtimeBuilderInput),y=_.config,l=_.providerConfig;if(w.teamRuntime&&!y.teamName?.trim())y.teamName=w.teamRuntime.getTeamName();let o=[...w.tools,...y.extraTools??[]],t=w.extensions??_.extensions,Q0={sessionId:J,providerId:l.providerId,modelId:l.modelId,apiKey:l.apiKey,baseUrl:l.baseUrl,headers:l.headers,knownModels:l.knownModels,providerConfig:l,thinking:y.thinking,reasoningEffort:y.reasoningEffort??l.reasoningEffort,maxTokensPerTurn:y.maxTokensPerTurn,systemPrompt:y.systemPrompt,maxIterations:y.maxIterations,execution:y.execution,prepareTurn:a4(y),tools:o,hooks:_.hooks,extensions:t,hookErrorMode:y.hookErrorMode,initialMessages:_.effectiveInput.initialMessages,userFileContentLoader:DD,toolPolicies:_.toolPolicies,requestToolApproval:_.requestToolApproval?async(P)=>{let B0=_.requestToolApproval,G0=this.sessions.get(J);if(G0)await this.markTurnPending(G0);try{if(!B0)return{approved:!1,reason:"Tool approval callback is not configured."};return await B0(P)}finally{let w0=this.sessions.get(J);if(w0?.status==="pending")await this.markTurnRunning(w0)}}:void 0,telemetry:y.telemetry,onConsecutiveMistakeLimitReached:y.onConsecutiveMistakeLimitReached,completionPolicy:w.completionPolicy,consumePendingUserMessage:()=>{let P=this.pendingPromptsController.consumeSteer(J);return P?g5(P.prompt,P.mode??y.mode):void 0},logger:w.logger??y.logger,extensionContext:y.extensionContext,onEvent:(P)=>this.eventBridge.dispatchAgentEvent(J,y,P)};Q0.hooks={...Q0.hooks,onEvent:async(P)=>{if(await _.hooks?.onEvent?.(P),P.type!=="assistant-message")return;let B0=this.sessions.get(J);if(!B0)return;let G0=B0.agent.getMessages();try{await this.invoke("persistSessionMessages",J,G0,y.systemPrompt)}catch(w0){y.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:w0}),n2(y.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:w0,severity:"warn",handled:!0,context:{sessionId:J,providerId:y.providerId,modelId:y.modelId}})}}};let Q1=this.createAgentInstance(Q0);if(Q0.onEvent)Q1.subscribeEvents(Q0.onEvent);w.registerLeadAgent?.(Q1);let l$=v1({agentId:Q1.getAgentId(),conversationId:Q1.getConversationId(),teamId:w.teamRuntime?.getTeamId(),teamName:w.teamRuntime?.getTeamName(),teamRole:w.teamRuntime?"lead":void 0});if(GG(y,J,W.length>0,K,l$),l$)Y$(y.telemetry,{ulid:J,modelId:y.modelId,provider:y.providerId,...l$});if(w.teamRuntime)N9(y.telemetry,{ulid:J,teamId:w.teamRuntime.getTeamId(),teamName:w.teamRuntime.getTeamName(),leadAgentId:Q1.getAgentId(),restoredFromPersistence:w.teamRestoredFromPersistence===!0});let r={sessionId:J,config:y,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:w,agent:Q1,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,r),this.emitStatus(J,"running"),Y.length>0&&!A){if(await this.ensureSessionPersisted(r),await this.invoke("persistSessionMessages",r.sessionId,Y,r.config.systemPrompt),!X.prompt?.trim())await this.updateStatus(r,"completed",0)}let M1;try{if(X.prompt?.trim())if(M1=await this.executeTurn(r,{prompt:X.prompt,userImages:X.userImages,userFiles:X.userFiles}),!r.interactive)await this.finalizeSingleRun(r,M1.finishReason);else await this.completeInteractiveTurn(r,M1.finishReason)}catch(P){if(r.interactive&&r.aborting)M1=await this.completeAbortedInteractiveTurn(r);else{n2(r.config.telemetry,{component:"core",operation:"session.start",error:P,severity:"error",handled:!1,context:{sessionId:r.sessionId,providerId:r.config.providerId,modelId:r.config.modelId}});try{await this.failSession(r)}catch(B0){r.config.logger?.error?.("Session failure cleanup threw",{sessionId:r.sessionId,error:B0})}throw P}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:B,result:M1}}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 n2(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=zJ(this.usageBySession.get($)),Q=zJ(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&&!H0(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&&!H0(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 sY(Z);let Q=$.trim();if(!Q)return;let W=await this.getRow(Q);if(W)return R6(W);let J=await this.readManifest(Q);return J?RQ(J):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(R6),W=new Set(Q.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(W.has(J.sessionId))continue;Q.unshift(sY(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 h$(Q.messagesPath);let W=await this.readManifest(Z);return h$(W?.messages_path)}async dispatchHookEvent($){await nK($,{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(aJ($,J.finishReason)){let X=await sJ($);if(X.length===0)break;let Y=oJ($,X);J=await this.executeAgentTurn($,Y)}return J}async completeInteractiveTurn($,Z){if(x5($))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=D0();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)??D0(),j=this.aggregateUsageBySession.get($.sessionId)??Y;$.turnUsageBaseline=Y,$.turnAggregateUsageBaseline=j,$.turnPrimaryUsage=D0(),$.turnUsageByAgent=new Map,T9($.config.telemetry,$.sessionId,$.config.mode),t2($.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=LZ(H.messages,H,X);$.persistedMessages=B;let G=N6($.turnUsageByAgent?.values()??[]),K=A0(Y,H.usage),F=A0(A0(D0(),H.usage),G),A=A0(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 n2($.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===U0.SUBMIT_AND_EXIT&&W.error===void 0))return;$.submitAndExitObserved=!0,S4($.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=T$($.config),W=Rg(Z.prompt).trim();if(!W)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let J=await B8(W,Q);KG($.config.telemetry,J);let X=g5(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=T$($.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(x5($))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)S4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});uQ($);let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),n2($.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"}),n2($.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,H0(Z))delete J.ended_at,J.exit_code=null;else J.ended_at=W.endedAt??J0(),J.exit_code=typeof Q==="number"?Q:null;$.artifacts.manifest=J,$.status=Z,$.updatedAt=W.endedAt??J0(),$.endedAt=H0(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(!i$($.config.providerId)||!Mg(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 e7)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 r1($);throw n2(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)=>Og(W)?W:Zj($,W));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return v1({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=A0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let W=Zj(Z),J=`${Q}.messages.json`,X;try{X=zg($)}catch{return D0()}let Y=D0();for(let j of X){if(!j.endsWith(".messages.json"))continue;if(j===J)continue;let V=Zj($,j);if(V===W)continue;let H=await h$(V);if(H.length===0)continue;Y=A0(Y,T8(H))}return Y}withPersistedAggregateUsageFloor($,Z){let Q=Ng(Z.metadata?.aggregateUsage);if(Q)return Cg($,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:U1({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($)),LD))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(LD)).find((W)=>W.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return AD(this.sessionService,$,...Z)}invokeOptional($,...Z){return fD(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return UD(this.sessionService,$,...Z)}}function Pg($){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 Sg($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function V7($={}){let Z=new T1({sessionService:new z1(new L1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||z0.CLI,interactive:!1,config:{providerId:wg(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:Sg(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:Pg(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}}}}yg(process.env.CLINE_VCR);function kg($){let Z=process.cwd(),Q,W,J;for(let X=0;X<$.length;X+=1){let Y=$[X],j=$[X+1];if(Y==="--cwd"&&j){Z=j,X+=1;continue}if(Y==="--host"&&j){Q=j,X+=1;continue}if(Y==="--port"&&j){let V=Number(j);if(Number.isFinite(V))W=V;X+=1;continue}if(Y==="--pathname"&&j)J=j,X+=1}return{cwd:Z,host:Q,port:W,pathname:J}}async function Ig(){let $=kg(process.argv.slice(2));process.chdir($.cwd);let Z=a0({host:$.host,port:$.port,pathname:$.pathname}),Q=await d2({host:Z.host,port:Z.port,pathname:Z.pathname,owner:hg()==="production"?s0():y0(),runtimeHandlers:V7(),cronOptions:{workspaceRoot:$.cwd}}),W=async()=>{await Q.close(),process.exit(0)},J=!1,X=(Y,j)=>{if(J)return;J=!0;let V=j instanceof Error?j.stack||j.message:String(j);process.stderr.write(`[hub-daemon] ${Y}: ${V}
755
755
  `),Q.close().catch((H)=>{let B=H instanceof Error?H.stack||H.message:String(H);process.stderr.write(`[hub-daemon] shutdown after ${Y} failed: ${B}
756
- `)}).finally(()=>{process.exit(1)})};process.on("SIGINT",()=>{W()}),process.on("SIGTERM",()=>{W()}),process.on("uncaughtException",(Y)=>{X("uncaughtException",Y)}),process.on("unhandledRejection",(Y)=>{if(Y instanceof Sg){process.stderr.write(`[hub-daemon] ignored agent runtime abort rejection: ${Y.message}
757
- `);return}X("unhandledRejection",Y)}),await new Promise(()=>{})}kg().catch(($)=>{let Z=$ instanceof Error?$.stack||$.message:String($);process.stderr.write(`[hub-daemon] fatal: ${Z}
756
+ `)}).finally(()=>{process.exit(1)})};process.on("SIGINT",()=>{W()}),process.on("SIGTERM",()=>{W()}),process.on("uncaughtException",(Y)=>{X("uncaughtException",Y)}),process.on("unhandledRejection",(Y)=>{if(Y instanceof bg){process.stderr.write(`[hub-daemon] ignored agent runtime abort rejection: ${Y.message}
757
+ `);return}X("unhandledRejection",Y)}),await new Promise(()=>{})}Ig().catch(($)=>{let Z=$ instanceof Error?$.stack||$.message:String($);process.stderr.write(`[hub-daemon] fatal: ${Z}
758
758
  `),process.exit(1)});