@cline/core 0.0.57 → 0.0.58-nightly.1783480459

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import{createRequire as RA}from"node:module";var OA=Object.defineProperty;var qA=($)=>$;function MA($,Z){this[$]=qA.bind(null,Z)}var n9=($,Z)=>{for(var Q in Z)OA($,Q,{get:Z[Q],enumerable:!0,configurable:!0,set:MA.bind(Z,Q)})};var F$=($,Z)=>()=>($&&(Z=$($=0)),Z);var fJ=RA(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as NA,captureAgentUnexpectedReasoningTokens as CA,SDK_ERROR_TELEMETRY_EVENT as wA}from"@cline/shared";function l($,Z,Q){$?.capture({event:Z,properties:Q})}function v4($){if(!$)return;return $.substring(0,PA)}function SA($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function bA($){return typeof $==="string"?$:$.message}function _J($,Z){return $.some((Q)=>Z.has(Q.trim().toLowerCase()))}function yA($){l($,I.CLIENT.EXTENSION_ACTIVATED)}function o9($,Z){let Q=[...Z.vcs_types],W={root_count:Z.root_count,vcs_types:Q,is_multi_root:Z.root_count>1,has_git:_J(Q,new Set(["git"])),has_mercurial:_J(Q,new Set(["mercurial","hg"]))};if(Z.init_duration_ms!==void 0)W.init_duration_ms=Z.init_duration_ms;if(Z.feature_flag_enabled!==void 0)W.feature_flag_enabled=Z.feature_flag_enabled;if(Z.is_remote_workspace!==void 0)W.is_remote_workspace=Z.is_remote_workspace;l($,I.WORKSPACE.INITIALIZED,W)}function t9($,Z,Q){l($,I.WORKSPACE.INIT_ERROR,{error_type:SA(Z),error_message:v4(bA(Z)),fallback_to_single_root:Q.fallback_to_single_root,workspace_count:Q.workspace_count??0})}function hA($,Z){l($,I.WORKSPACE.PATH_RESOLVED,{...Z})}function w1($,Z){l($,I.USER.AUTH_STARTED,{provider:Z})}function P1($,Z){l($,I.USER.AUTH_SUCCEEDED,{provider:Z})}function S1($,Z,Q){l($,I.USER.AUTH_FAILED,{provider:Z,errorMessage:v4(Q)})}function A$($,Z,Q){l($,I.USER.AUTH_LOGGED_OUT,{provider:Z,reason:Q})}function kA($,Z){l($,I.USER.PROVIDER_CONFIGURED,{provider:Z})}function zJ($,Z){$?.captureRequired(I.USER.TELEMETRY_OPT_OUT,Z)}function b1($,Z){let Q=Z.id?.trim();if(Q)$?.setDistinctId(Q);$?.updateCommonProperties({account_id:Z.id,account_email:Z.email,provider:Z.provider,organization_id:Z.organizationId,organization_name:Z.organizationName,member_id:Z.memberId})}function e9($,Z){l($,I.TASK.CREATED,Z)}function $Z($,Z){l($,I.TASK.RESTARTED,Z)}function c4($,Z){l($,I.TASK.COMPLETED,Z)}function Z8($,Z){l($,I.TASK.CONVERSATION_TURN,{...Z,timestamp:new Date().toISOString()})}function ZZ($,Z){l($,I.TASK.TOKEN_USAGE,Z)}function QZ($,Z,Q){l($,I.TASK.MODE_SWITCH,{ulid:Z,mode:Q})}function Q8($,Z){l($,I.TASK.TOOL_USED,Z)}function WZ($,Z){l($,I.TASK.SKILL_USED,Z)}function JZ($,Z){l($,I.TASK.DIFF_EDIT_FAILED,Z)}function u4($,Z){l($,I.TASK.PROVIDER_API_ERROR,{...Z,errorMessage:v4(Z.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function TJ($,Z){l($,I.SDK.TOOL_TIMEOUT,IA(Z))}function IA($){let Z={};for(let[Q,W]of Object.entries($))if(W!==void 0)Z[Q]=W;return Z}function XZ($,Z,Q){l($,I.TASK.MENTION_USED,{mentionType:Z,contentLength:Q,timestamp:new Date().toISOString()})}function YZ($,Z,Q,W){l($,I.TASK.MENTION_FAILED,{mentionType:Z,errorType:Q,errorMessage:v4(W),timestamp:new Date().toISOString()})}function jZ($,Z,Q,W,J){l($,I.TASK.MENTION_SEARCH_RESULTS,{queryLength:Z.length,resultCount:Q,searchType:W,isEmpty:J,timestamp:new Date().toISOString()})}function f$($,Z){l($,I.TASK.AGENT_CREATED,{...Z,timestamp:new Date().toISOString()})}function VZ($,Z){l($,I.TASK.AGENT_TEAM_CREATED,{...Z,timestamp:new Date().toISOString()})}function d4($,Z){l($,Z.event==="ended"?I.TASK.SUBAGENT_COMPLETED:I.TASK.SUBAGENT_STARTED,{...Z,timestamp:new Date().toISOString()})}function BZ($,Z,Q,W){l($,I.HOOKS.DISCOVERY_COMPLETED,{hookName:Z,globalCount:Q,workspaceCount:W,totalCount:Q+W,timestamp:new Date().toISOString()})}function HZ($,Z){l($,I.TASK.COMPACTION_EXECUTED,{...Z,timestamp:new Date().toISOString()})}function GZ($,Z){l($,I.TASK.COMPACTION_SKIPPED,{...Z,timestamp:new Date().toISOString()})}var PA=500,I;var G0=F$(()=>{I={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:NA},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:wA,TOOL_TIMEOUT:"sdk.tool_timeout"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as EU,readFileSync as NU,statSync as CU,writeFileSync as wU}from"node:fs";import{dirname as PU}from"node:path";import{resolveGlobalSettingsPath as DX}from"@cline/shared/storage";import{z as L$}from"zod";function j6(){return B6.parse({})}function bU(){V6=void 0}function yU($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function hU($){let Z;try{Z=NU($,"utf8")}catch{return j6()}try{let Q=B6.safeParse(JSON.parse(Z));return Q.success?Q.data:j6()}catch{return j6()}}function kU(){let $=DX(),Z=CU($,{throwIfNoEntry:!1}),Q=Z?.mtimeMs??0,W=Z?.size??0,J=V6;if(J&&J.path===$&&J.mtimeMs===Q&&J.size===W)return J;let X=yU(Z?hU($):j6());return V6={path:$,mtimeMs:Q,size:W,value:X},V6}function D0(){return kU().value}function G1($,Z={}){let Q=DX(),W=D0();EU(PU(Q),{recursive:!0});let J=B6.parse($);if(!W.telemetryOptOut&&J.telemetryOptOut)zJ(Z.telemetry);wU(Q,`${JSON.stringify(J,null,2)}
2
- `,"utf8"),bU()}function vZ(){return D0().telemetryOptOut}function IU($,Z={}){G1({...D0(),telemetryOptOut:$},Z)}function xU(){return D0().autoUpdateEnabled}function gU($,Z={}){G1({...D0(),autoUpdateEnabled:$},Z)}function mU(){return D0().compactionStrategy??"basic"}function vU($){G1({...D0(),compactionStrategy:$})}function K1($){return new Set($??D0().disabledTools??[])}function H6($){return new Set($??D0().disabledPlugins??[])}function cU($){return K1().has($)}function cZ($){let Z=D0(),Q=new Set(Z.disabledTools??[]),W=Q.has($);if(W)Q.delete($);else Q.add($);return G1({...Z,disabledTools:[...Q]}),!W}function LX($,Z){let Q=[...new Set($.map((X)=>X.trim()).filter(Boolean))];if(Q.length===0)return;let W=D0(),J=K1(W.disabledTools);for(let X of Q)if(Z)J.add(X);else J.delete(X);G1({...W,disabledTools:[...J]})}function _X($,Z){return LX([$],Z),Z}function uU($){return H6().has($)}function dU($,Z){let Q=$.trim();if(!Q)return;let W=D0(),J=H6(W.disabledPlugins);if(Z)J.add(Q);else J.delete(Q);G1({...W,disabledPlugins:[...J]})}function uZ($,Z){let Q=H6(Z);if(Q.size===0)return[...$];return $.filter((W)=>!Q.has(W))}function k1($,Z){let Q=K1(Z);if(Q.size===0)return[...$];return $.filter((W)=>!Q.has(W.name))}function dZ($,Z){if(!$||$.length===0)return $;let Q=K1(Z);if(Q.size===0)return $;return $.map((W)=>{if(!W.setup)return W;return{...W,setup:(J,X)=>W.setup?.({...J,registerTool:(Y)=>{if(!Q.has(Y.name))J.registerTool(Y)}},X)}})}var UX,SU,B6,V6;var r0=F$(()=>{G0();UX=L$.preprocess(($)=>Array.isArray($)?$.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter(Boolean):void 0,L$.array(L$.string()).optional()).transform(($)=>{if(!$)return;let Z=[...new Set($)].sort((Q,W)=>Q.localeCompare(W));return Z.length>0?Z:void 0}),SU=L$.enum(["basic","agentic"]).catch("basic"),B6=L$.object({telemetryOptOut:L$.boolean().default(!1).catch(!1),autoUpdateEnabled:L$.boolean().default(!0).catch(!0),compactionStrategy:SU.optional(),disabledTools:UX.optional(),disabledPlugins:UX.optional()}).strip().transform(($)=>{let Z={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.compactionStrategy)Z.compactionStrategy=$.compactionStrategy;if($.disabledTools?.length)Z.disabledTools=$.disabledTools;if($.disabledPlugins?.length)Z.disabledPlugins=$.disabledPlugins;return Z})});var Xj={};n9(Xj,{normalizeUserMessage:()=>Dz,buildInitialUserContent:()=>Uz});async function Uz($,Z,Q,W){let J=Lz(Z),X=await zz(Q,W);if(J.length===0&&!X)return $;let Y=[{type:"text",text:$},...J];if(X)Y.push(...X);return Y}function Dz($){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 Lz($){if(!$||$.length===0)return[];let Z=[];for(let Q of $){let W=_z(Q);if(W)Z.push(W)}return Z}function _z($){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 zz($,Z){if(!$||$.length===0)return;let Q=Z??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),W=await Promise.all($.map(async(J)=>{let X=J.replace(/\\/g,"/");try{let Y=await Q(J);return{type:"file",path:X,content:Y}}catch(Y){let j=Y instanceof Error?Y.message:String(Y);return{type:"file",path:X,content:`Error fetching content: ${j}`}}}));if(W.length===0)return;return W}var YV={};n9(YV,{updateMcpSettingsFileSync:()=>U1,updateMcpSettingsFile:()=>Y5,updateMcpServerOAuthStateAsync:()=>eQ,updateMcpServerOAuthState:()=>h8,setMcpServerDisabled:()=>b8,resolveMcpServerRegistrations:()=>$1,resolveDefaultMcpSettingsPath:()=>Z0,registerMcpServersFromSettingsFile:()=>k8,normalizeMcpServerOAuthState:()=>S2,loadMcpSettingsFile:()=>S8,listMcpServerOAuthStatuses:()=>$7,hasMcpSettingsFile:()=>w$,getMcpServerOAuthState:()=>y8,McpSettingsUpdateSkippedError:()=>J5,McpSettingsMutatorPurityError:()=>w2,McpSettingsLockTimeoutError:()=>P2});import{existsSync as pj,mkdirSync as iQ,readFileSync as rj,renameSync as sQ,rmdirSync as HT,rmSync as nQ,statSync as GT,unlinkSync as ij,writeFileSync as nj}from"node:fs";import{randomUUID as KT}from"node:crypto";import{dirname as aj,join as lj}from"node:path";import{setTimeout as FT}from"node:timers/promises";import{resolveMcpSettingsPath as AT}from"@cline/shared/storage";import{z as C}from"zod";function aQ($){if(!$)return;if($==="http")return"streamableHttp";return $}function Z0(){return AT()}function RT($,Z){iQ(aj($),{recursive:!0});let Q=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{nj(Q,Z,{encoding:"utf8",flag:"wx"}),sQ(Q,$)}catch(W){try{ij(Q)}catch{}throw W}}function NT($){Atomics.wait(ET,0,0,$)}function CT($){return`${$}.lock`}function ej(){return`${process.pid}.${Date.now()}.${KT()}`}function $V($,Z){iQ(aj($),{recursive:!0});let Q=`${$}.tmp.${Z}`;nQ(Q,{recursive:!0,force:!0}),iQ(Q,{recursive:!0}),nj(lj(Q,`owner.${Z}`),Z,{encoding:"utf8",flag:"wx"});try{return sQ(Q,$),{lockDir:$,ownerFile:lj($,`owner.${Z}`)}}catch(W){if(nQ(Q,{recursive:!0,force:!0}),pj($))return;throw W}}function ZV($,Z){let Q;try{Q=Date.now()-GT($).mtimeMs}catch(J){if(J.code==="ENOENT")return;throw J}if(Q<tQ)return;Z.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Q}ms); reclaiming.`,{severity:"warn"});let W=`${$}.stale.${ej()}`;try{sQ($,W)}catch(J){if(J.code==="ENOENT")return;throw J}nQ(W,{recursive:!0,force:!0})}function wT($){try{ij($.ownerFile)}catch(Z){if(Z.code!=="ENOENT")throw Z}try{HT($.lockDir)}catch(Z){let Q=Z.code;if(Q!=="ENOENT"&&Q!=="ENOTEMPTY"&&Q!=="EEXIST")throw Z}}function QV($){let Z=CT($);if(X5.has(Z))throw Error(`Reentrant MCP settings update for ${$}. Keep mutators pure: compute values up front and do not call back into the settings API.`);return{lockDir:Z,token:ej()}}function PT($,Z){let{lockDir:Q,token:W}=QV($),J=Z.timeoutMs??tQ,X=Date.now();while(!0){let Y=$V(Q,W);if(Y)return X5.add(Q),Y;if(Date.now()-X>J)throw new P2(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);ZV(Q,Z),NT(tj)}}async function ST($,Z){let{lockDir:Q,token:W}=QV($),J=Z.timeoutMs??tQ,X=Date.now();while(!0){let Y=$V(Q,W);if(Y)return X5.add(Q),Y;if(Date.now()-X>J)throw new P2(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);ZV(Q,Z),await FT(tj)}}function WV($,Z,Q){try{let W=bT(Z),J=yT(W,Q);return RT(Z,`${JSON.stringify(W,null,2)}
4
- `),J}finally{X5.delete($.lockDir),wT($)}}function U1($,Z,Q={}){let W=PT($,Q);return WV(W,$,Z)}async function Y5($,Z,Q={}){let W=await ST($,Q);return WV(W,$,Z)}function bT($){let Z=kT($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function yT($,Z){let Q=JSON.stringify($),W=JSON.parse(Q),J=Z(W),X=JSON.stringify(W),Y=Z($);if(JSON.stringify($)!==X)throw new w2("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 w2("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return Y}function hT($){let Z=rj($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(W){let J=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${$}": ${J}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function kT($){try{return hT($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function JV($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function IT($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function S8($={}){let Z=$.filePath??Z0(),Q=rj(Z,"utf8"),W;try{W=JSON.parse(Q)}catch(X){let Y=X instanceof Error?X.message:String(X);throw Error(`Failed to parse MCP settings JSON at "${Z}": ${Y}`)}let J=MT.safeParse(W);if(!J.success){let X=J.error.issues.map((Y)=>{let j=Y.path.join(".");return j?`${j}: ${Y.message}`:Y.message}).join("; ");throw Error(`Invalid MCP settings at "${Z}": ${X}`)}return J.data}function S2($){if(!$)return;let Z={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(Z).length>0?Z:void 0}function xT($){if($===void 0)return;let Z=oQ.safeParse($);if(!Z.success)return;return S2(Z.data)}function w$($={}){let Z=$.filePath??Z0();return pj(Z)}function $1($={}){let Z=S8($);return Object.entries(Z.mcpServers).map(([Q,W])=>({name:Q,transport:W.transport,disabled:W.disabled,metadata:W.metadata,oauth:W.oauth}))}function b8($){let Z=$.filePath??Z0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");U1(Z,(W)=>{let J=W.mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let X={...J},Y=JV(X,Q);if(!Y)throw Error(`Unknown MCP server: ${Q}`);let j={...Y};if($.disabled)j.disabled=!0;else delete j.disabled;IT(X,Q,j),W.mcpServers=X})}function y8($,Z={}){let Q=S8(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return S2(Q.mcpServers[$]?.oauth)}function XV($,Z){return(Q)=>{let W=Q.mcpServers,J=JV(W,$);if(!J)throw Error(`Unknown MCP server: ${$}`);let X=xT(J.oauth)??{},Y=S2(Z(X));if(Y)J.oauth=Y;else delete J.oauth;return Y??{}}}function h8($,Z,Q={}){let W=Q.filePath??Z0();return U1(W,XV($,Z))}async function eQ($,Z,Q={}){let W=Q.filePath??Z0();return Y5(W,XV($,Z))}function $7($={}){return $1($).map((Q)=>{let W=Q.transport.type!=="stdio",J=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:W,oauthConfigured:W&&typeof J==="string"&&J.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,W)=>Q.serverName.localeCompare(W.serverName))}async function k8($,Z={}){let Q=$1(Z);for(let W of Q)await $.registerServer(W);return Q}var P8,sj,oQ,fT,UT,DT,LT,_T,zT,oj,TT,OT,qT,MT,J5,P2,w2,tQ=1e4,tj=25,ET,X5;var j5=F$(()=>{P8=C.record(C.string(),C.string()),sj=C.record(C.string(),C.unknown()),oQ=C.object({clientInformation:C.record(C.string(),C.unknown()).optional(),tokens:C.record(C.string(),C.unknown()).optional(),codeVerifier:C.string().optional(),discoveryState:C.record(C.string(),C.unknown()).optional(),redirectUrl:C.string().url().optional(),lastError:C.string().optional(),lastAuthenticatedAt:C.number().int().positive().optional()}).strip(),fT=C.object({type:C.literal("stdio"),command:C.string().min(1),args:C.array(C.string()).optional(),cwd:C.string().min(1).optional(),env:P8.optional()}),UT=C.object({type:C.literal("sse"),url:C.string().url(),headers:P8.optional()}),DT=C.object({type:C.literal("streamableHttp"),url:C.string().url(),headers:P8.optional()}),LT=C.discriminatedUnion("type",[fT,UT,DT]),_T=C.object({transport:LT,disabled:C.boolean().optional(),metadata:sj.optional(),oauth:oQ.optional()}),zT=C.enum(["stdio","sse","http","streamableHttp"]).optional(),oj=C.object({type:C.enum(["stdio","sse","streamableHttp"]).optional(),transportType:zT,disabled:C.boolean().optional(),metadata:sj.optional(),oauth:oQ.optional()});TT=oj.extend({command:C.string().min(1),args:C.array(C.string()).optional(),cwd:C.string().min(1).optional(),env:P8.optional()}).superRefine(($,Z)=>{let Q=$.type??aQ($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:C.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})),OT=oj.extend({url:C.string().url(),headers:P8.optional()}).superRefine(($,Z)=>{let Q=$.type??aQ($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:C.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??aQ($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth}}),qT=C.union([_T,TT,OT]),MT=C.object({mcpServers:C.record(C.string(),qT)}).passthrough();J5=class J5 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};P2=class P2 extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};w2=class w2 extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};ET=new Int32Array(new SharedArrayBuffer(4)),X5=new Set});import{existsSync as LE,mkdirSync as _E,readFileSync as zE,writeFileSync as TE}from"node:fs";import{resolve as OE}from"node:path";import{resolveSessionDataDir as qE}from"@cline/shared/storage";import{nanoid as ME}from"nanoid";import*as RE from"node-machine-id";function m0($){let Z=$?.trim();if(Z)return Z;let Q=CE();if(Q)return Q;return wE()}function NE(){let $=RE;return $.machineIdSync??$.default?.machineIdSync}function CE(){try{let $=NE();if(!$)return;return $().trim()||void 0}catch{return}}function wE(){let $=qE(),Z=OE($,EE);try{if(LE(Z)){let W=zE(Z,"utf8").trim();if(W.length>0)return W}}catch{}let Q=`cl-${ME()}`;try{_E($,{recursive:!0}),TE(Z,Q,"utf8")}catch{}return Q}var EE="machine-id";var g2=()=>{};class w4{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 B=this.meter.createObservableGauge($,W?{description:W}:void 0);B.addCallback((H)=>{for(let G of this.snapshotGaugeSeries($))H.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set($,B)}V.set(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 B=Z?`${Z}.${j}`:j;if(V===null||V===void 0){J[B]=String(V);continue}if(Array.isArray(V)){let H=V.length>X?V.slice(0,X):V;try{J[B]=JSON.stringify(H)}catch{J[B]="[UnserializableArray]"}if(V.length>X)J[`${B}_truncated`]=!0,J[`${B}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){J[B]=V.toISOString();continue}if(V instanceof Error){J[B]=V.message;continue}if(Q.has(V)){J[B]="[Circular]";continue}if(W>=Y){J[B]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(J,this.flattenProperties(V,B,Q,W+1));continue}if(QS(V)){J[B]=V;continue}try{J[B]=JSON.stringify(V)}catch{J[B]=String(V)}}return J}}function QS($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class z9{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,Z){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:Z})}emitRequired($,Z){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:Z})}recordCounter($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordHistogram($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:W,required:J===!0})}recordGauge($,Z,Q,W,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:W,required:J===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class P4{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new z9({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let Z=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,Z)}captureRequired($,Z){let Q=this.buildAttributes(Z);for(let W of this.adapters)W.emitRequired($,Q)}recordCounter($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordCounter($,Z,X,W,J)}recordHistogram($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordHistogram($,Z,X,W,J)}recordGauge($,Z,Q,W,J=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordGauge($,Z,X,W,J)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var V3=()=>{};import{metrics as WS,trace as JS}from"@opentelemetry/api";import{logs as XS}from"@opentelemetry/api-logs";import{OTLPLogExporter as YS}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as jS}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as VS}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as BS}from"@opentelemetry/resources";import{BatchLogRecordProcessor as HS,ConsoleLogRecordExporter as GS,LoggerProvider as KS}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as FS,MeterProvider as AS,PeriodicExportingMetricReader as VK}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as fS,ConsoleSpanExporter as US,SimpleSpanProcessor as DS}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as LS}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as _S,ATTR_SERVICE_VERSION as zS}from"@opentelemetry/semantic-conventions";class BK{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,Z){this.resolveProperties(Z)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class S4{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=BS({[_S]:$.serviceName??"cline",...$.serviceVersion?{[zS]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)WS.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)XS.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return JS.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new w4({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new P4({...$,adapters:[Z],distinctId:m0($.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider($){let Z=B3(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)=>qS(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 AS({resource:$,readers:J})}createTracerProvider($){let Z=B3(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=OS(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 LS({resource:$,spanProcessors:J})}createLoggerProvider($){let Z=B3(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((W)=>{let J=TS(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new HS(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 KS({resource:$,processors:Q})}}function T9($){let Z=new S4($),Q=Z.createTelemetryService($);return Q.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion}),{provider:Z,telemetry:Q}}function s$($){if(vZ())return{telemetry:new BK($)};if($.enabled!==!0)return{telemetry:new P4({...$,distinctId:m0($.distinctId)})};return T9($)}function O9($){let{telemetry:Z,provider:Q}=s$($);return{telemetry:Z,provider:Q,flush:async()=>{let X=Q;if(X&&typeof X.forceFlush==="function")try{await X.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])}}}function B3($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function TS($,Z){if($==="console")return new GS;if(!Z.endpoint)return null;let Q=H3(Z.endpoint,"/v1/logs");return new YS({url:Q,headers:Z.headers})}function OS($,Z){if($==="console")return new DS(new US);if(!Z.endpoint)return null;let Q=H3(Z.endpoint,"/v1/traces");return new fS(new VS({url:Q,headers:Z.headers}))}function qS($,Z){if($==="console")return new VK({exporter:new FS,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=H3(Z.endpoint,"/v1/metrics");return new VK({exporter:new jS({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function H3($,Z){let Q=new URL($),W=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=W.endsWith(Z)?W:`${W}${Z}`,Q.toString()}var q9=F$(()=>{r0();g2();V3()});var UF={};n9(UF,{resolveCoreDistinctId:()=>m0,createOpenTelemetryTelemetryService:()=>T9,createConfiguredTelemetryService:()=>s$,createConfiguredTelemetryHandle:()=>O9,OpenTelemetryProvider:()=>S4,OpenTelemetryAdapter:()=>w4});var S9=F$(()=>{g2();q9()});import*as d00 from"@cline/llms";import{ClineNotSubscribedError as p00,ClineOrgIndividualInferenceSubscriptionError as r00,getClineOrgIndividualInferenceSubscriptionMessage as i00,getClineNotSubscribedMessage as n00,getClinePassSubscriptionUrl as a00,isClineNotSubscribedError as s00,isClineNotSubscribedMessage as o00,isClineOrgIndividualInferenceSubscriptionError as t00,isClineOrgIndividualInferenceSubscriptionMessage as e00}from"@cline/llms";import{buildClineSystemPrompt as Z10,buildSdkErrorProperties as Q10,ContributionRegistry as W10,captureSdkError as J10,createClineTelemetryServiceConfig as X10,createClineTelemetryServiceMetadata as Y10,createContributionRegistry as j10,createTool as V10,emptyWorkspaceManifest as B10,FEATURE_FLAGS as H10,FeatureFlagDefaultValue as G10,formatDisplayUserInput as K10,noopBasicLogger as F10,normalizeSdkError as A10,normalizeUserInput as f10,parseUserCommandEnvelope as U10,registerDisposable as D10,SDK_ERROR_TELEMETRY_EVENT as L10}from"@cline/shared";export*from"@cline/shared/storage";function EA($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function UJ($,Z,Q){let W=EA(Q);if(W)return W;let J=Z.trim();if(J){let X=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${X}`}return`Cline account request failed with status ${$}`}class a9{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let Z=$.apiBaseUrl.trim();if(!Z)throw Error("apiBaseUrl is required");this.apiBaseUrl=Z,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let Z=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(Z)}/balance`)}async fetchUsageTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/usages`)).items??[]}async fetchPaymentTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let Z=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)Z.searchParams.set("type",$.type);return this.request(`${Z.pathname}${Z.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}`)}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/balance`)}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(Z,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let Z=$?.trim();if(Z)return Z;let W=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(W)return W;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let Y=(await this.fetchUserOrganizations()).find((j)=>j.organizationId===$)?.memberId;if(!Y?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return Y}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let W=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,X=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let Y=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...W??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:J.signal});if(Y.status===204||Z?.expectNoContent){if(!Y.ok)throw Error(`Cline account request failed with status ${Y.status}`);return}let j=await Y.text(),V;if(j.trim())try{V=JSON.parse(j)}catch{if(!Y.ok)throw Error(UJ(Y.status,j,void 0));throw Error("Cline account response was not valid JSON")}if(!Y.ok)throw Error(UJ(Y.status,j,V));if(typeof V==="object"&&V!==null){let B=V;if(typeof B.success==="boolean"){if(!B.success)throw Error(B.error||"Cline account request failed");return B.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(X)}}}function DJ($){return $.action==="clineAccount"}async function LJ($,Z){switch($.operation){case"fetchMe":return Z.fetchMe();case"fetchBalance":return Z.fetchBalance($.userId);case"fetchUsageTransactions":return Z.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return Z.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return Z.fetchUserOrganizations();case"fetchOrganizationBalance":return Z.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return Z.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await Z.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return Z.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class s9{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:Z})}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:Z,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}function m4($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((W)=>{$.onOpenUrlError?.({url:Z,error:W})})}catch(W){$.onOpenUrlError?.({url:Z,error:W})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}G0();import{getClineEnvironmentConfig as KZ}from"@cline/shared";function xA(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function B1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",W=$.timeoutMs??300000,J=$.successHtml??gA,X=xA(),Y=!1,j=null,V=null,B=null,H=(F)=>{if(Y)return;Y=!0,X.resolve(F)},G=()=>{if(j)clearTimeout(j),j=null;let F=B;if(B=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(),H(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(),H(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(),H(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){B=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(),H(null)},close:()=>{G(),H(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var gA=`<!DOCTYPE html>
1
+ import{createRequire as aA}from"node:module";var rA=Object.defineProperty;var iA=($)=>$;function nA($,Z){this[$]=iA.bind(null,Z)}var $Z=($,Z)=>{for(var Q in Z)rA($,Q,{get:Z[Q],enumerable:!0,configurable:!0,set:nA.bind(Z,Q)})};var _$=($,Z)=>()=>($&&(Z=$($=0)),Z);var RW=aA(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as sA,captureAgentUnexpectedReasoningTokens as tA,SDK_ERROR_TELEMETRY_EVENT as eA}from"@cline/shared";function p($,Z,Q){$?.capture({event:Z,properties:Q})}function i4($){if(!$)return;return $.substring(0,$f)}function Zf($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function Qf($){return typeof $==="string"?$:$.message}function CW($,Z){return $.some((Q)=>Z.has(Q.trim().toLowerCase()))}function Jf($){p($,g.CLIENT.EXTENSION_ACTIVATED)}function JZ($,Z){let Q=[...Z.vcs_types],J={root_count:Z.root_count,vcs_types:Q,is_multi_root:Z.root_count>1,has_git:CW(Q,new Set(["git"])),has_mercurial:CW(Q,new Set(["mercurial","hg"]))};if(Z.init_duration_ms!==void 0)J.init_duration_ms=Z.init_duration_ms;if(Z.feature_flag_enabled!==void 0)J.feature_flag_enabled=Z.feature_flag_enabled;if(Z.is_remote_workspace!==void 0)J.is_remote_workspace=Z.is_remote_workspace;p($,g.WORKSPACE.INITIALIZED,J)}function WZ($,Z,Q){p($,g.WORKSPACE.INIT_ERROR,{error_type:Zf(Z),error_message:i4(Qf(Z)),fallback_to_single_root:Q.fallback_to_single_root,workspace_count:Q.workspace_count??0})}function Wf($,Z){p($,g.WORKSPACE.PATH_RESOLVED,{...Z})}function y1($,Z){p($,g.USER.AUTH_STARTED,{provider:Z})}function h1($,Z){p($,g.USER.AUTH_SUCCEEDED,{provider:Z})}function k1($,Z,Q){p($,g.USER.AUTH_FAILED,{provider:Z,errorMessage:i4(Q)})}function T$($,Z,Q){p($,g.USER.AUTH_LOGGED_OUT,{provider:Z,reason:Q})}function Xf($,Z){p($,g.USER.PROVIDER_CONFIGURED,{provider:Z})}function PW($,Z){$?.captureRequired(g.USER.TELEMETRY_OPT_OUT,Z)}function I1($,Z){let Q=Z.id?.trim();if(Q)$?.setDistinctId(Q);$?.updateCommonProperties({user_id:Q||Z.id,account_id:Z.id,account_email:Z.email,provider:Z.provider,organization_id:Z.organizationId,organization_name:Z.organizationName,member_id:Z.memberId})}function XZ($,Z){p($,g.TASK.CREATED,Z)}function YZ($,Z){p($,g.TASK.RESTARTED,Z)}function n4($,Z){p($,g.TASK.COMPLETED,Z)}function j8($,Z){p($,g.TASK.CONVERSATION_TURN,{...Z,timestamp:new Date().toISOString()})}function jZ($,Z){p($,g.TASK.TOKEN_USAGE,Z)}function VZ($,Z,Q){p($,g.TASK.MODE_SWITCH,{ulid:Z,mode:Q})}function V8($,Z){p($,g.TASK.TOOL_USED,Z)}function BZ($,Z){p($,g.TASK.SKILL_USED,Z)}function HZ($,Z){p($,g.TASK.DIFF_EDIT_FAILED,Z)}function a4($,Z){p($,g.TASK.PROVIDER_API_ERROR,{...Z,errorMessage:i4(Z.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function SW($,Z){p($,g.SDK.TOOL_TIMEOUT,Yf(Z))}function Yf($){let Z={};for(let[Q,J]of Object.entries($))if(J!==void 0)Z[Q]=J;return Z}function GZ($,Z,Q){p($,g.TASK.MENTION_USED,{mentionType:Z,contentLength:Q,timestamp:new Date().toISOString()})}function KZ($,Z,Q,J){p($,g.TASK.MENTION_FAILED,{mentionType:Z,errorType:Q,errorMessage:i4(J),timestamp:new Date().toISOString()})}function FZ($,Z,Q,J,W){p($,g.TASK.MENTION_SEARCH_RESULTS,{queryLength:Z.length,resultCount:Q,searchType:J,isEmpty:W,timestamp:new Date().toISOString()})}function O$($,Z){p($,g.TASK.AGENT_CREATED,{...Z,timestamp:new Date().toISOString()})}function AZ($,Z){p($,g.TASK.AGENT_TEAM_CREATED,{...Z,timestamp:new Date().toISOString()})}function o4($,Z){p($,Z.event==="ended"?g.TASK.SUBAGENT_COMPLETED:g.TASK.SUBAGENT_STARTED,{...Z,timestamp:new Date().toISOString()})}function fZ($,Z,Q,J){p($,g.HOOKS.DISCOVERY_COMPLETED,{hookName:Z,globalCount:Q,workspaceCount:J,totalCount:Q+J,timestamp:new Date().toISOString()})}function UZ($,Z){p($,g.TASK.COMPACTION_EXECUTED,{...Z,timestamp:new Date().toISOString()})}function DZ($,Z){p($,g.TASK.COMPACTION_SKIPPED,{...Z,timestamp:new Date().toISOString()})}var $f=500,g;var A0=_$(()=>{g={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:sA},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:eA,TOOL_TIMEOUT:"sdk.tool_timeout"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as oU,readFileSync as sU,statSync as tU,writeFileSync as eU}from"node:fs";import{dirname as $D}from"node:path";import{resolveGlobalSettingsPath as EX}from"@cline/shared/storage";import{z as M$}from"zod";function A6(){return U6.parse({})}function QD(){f6=void 0}function JD($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function WD($){let Z;try{Z=sU($,"utf8")}catch{return A6()}try{let Q=U6.safeParse(JSON.parse(Z));return Q.success?Q.data:A6()}catch{return A6()}}function XD(){let $=EX(),Z=tU($,{throwIfNoEntry:!1}),Q=Z?.mtimeMs??0,J=Z?.size??0,W=f6;if(W&&W.path===$&&W.mtimeMs===Q&&W.size===J)return W;let X=JD(Z?WD($):A6());return f6={path:$,mtimeMs:Q,size:J,value:X},f6}function O0(){return XD().value}function F1($,Z={}){let Q=EX(),J=O0();oU($D(Q),{recursive:!0});let W=U6.parse($);if(!J.telemetryOptOut&&W.telemetryOptOut)PW(Z.telemetry);eU(Q,`${JSON.stringify(W,null,2)}
2
+ `,"utf8"),QD()}function rZ(){return O0().telemetryOptOut}function YD($,Z={}){F1({...O0(),telemetryOptOut:$},Z)}function jD(){return O0().autoUpdateEnabled}function VD($,Z={}){F1({...O0(),autoUpdateEnabled:$},Z)}function BD(){return O0().compactionStrategy??"basic"}function HD($){F1({...O0(),compactionStrategy:$})}function A1($){return new Set($??O0().disabledTools??[])}function D6($){return new Set($??O0().disabledPlugins??[])}function GD($){return A1().has($)}function iZ($){let Z=O0(),Q=new Set(Z.disabledTools??[]),J=Q.has($);if(J)Q.delete($);else Q.add($);return F1({...Z,disabledTools:[...Q]}),!J}function wX($,Z){let Q=[...new Set($.map((X)=>X.trim()).filter(Boolean))];if(Q.length===0)return;let J=O0(),W=A1(J.disabledTools);for(let X of Q)if(Z)W.add(X);else W.delete(X);F1({...J,disabledTools:[...W]})}function CX($,Z){return wX([$],Z),Z}function KD($){return D6().has($)}function FD($,Z){let Q=$.trim();if(!Q)return;let J=O0(),W=D6(J.disabledPlugins);if(Z)W.add(Q);else W.delete(Q);F1({...J,disabledPlugins:[...W]})}function nZ($,Z){let Q=D6(Z);if(Q.size===0)return[...$];return $.filter((J)=>!Q.has(J))}function m1($,Z){let Q=A1(Z);if(Q.size===0)return[...$];return $.filter((J)=>!Q.has(J.name))}function aZ($,Z){if(!$||$.length===0)return $;let Q=A1(Z);if(Q.size===0)return $;return $.map((J)=>{if(!J.setup)return J;return{...J,setup:(W,X)=>J.setup?.({...W,registerTool:(Y)=>{if(!Q.has(Y.name))W.registerTool(Y)}},X)}})}var NX,ZD,U6,f6;var o0=_$(()=>{A0();NX=M$.preprocess(($)=>Array.isArray($)?$.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter(Boolean):void 0,M$.array(M$.string()).optional()).transform(($)=>{if(!$)return;let Z=[...new Set($)].sort((Q,J)=>Q.localeCompare(J));return Z.length>0?Z:void 0}),ZD=M$.enum(["basic","agentic"]).catch("basic"),U6=M$.object({telemetryOptOut:M$.boolean().default(!1).catch(!1),autoUpdateEnabled:M$.boolean().default(!0).catch(!0),compactionStrategy:ZD.optional(),disabledTools:NX.optional(),disabledPlugins:NX.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 Dj={};$Z(Dj,{normalizeUserMessage:()=>dT,buildInitialUserContent:()=>uT});async function uT($,Z,Q,J){let W=lT(Z),X=await rT(Q,J);if(W.length===0&&!X)return $;let Y=[{type:"text",text:$},...W];if(X)Y.push(...X);return Y}function dT($){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 J of Z)if(J&&typeof J==="object"&&J.type==="text"){let W=J.text;if(typeof W==="string")Q.push(W)}return Q.join(`
3
+ `)}function lT($){if(!$||$.length===0)return[];let Z=[];for(let Q of $){let J=pT(Q);if(J)Z.push(J)}return Z}function pT($){let Z=$.trim();if(!Z)return;let Q=Z.match(/^data:([^;,]+);base64,(.+)$/);if(Q){let J=Q[1],W=Q[2];if(!J||!W)return;return{type:"image",mediaType:J,data:W}}return{type:"image",mediaType:"image/png",data:Z}}async function rT($,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.")}),J=await Promise.all($.map(async(W)=>{let X=W.replace(/\\/g,"/");try{let Y=await Q(W);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(J.length===0)return;return J}var LV={};$Z(LV,{updateMcpSettingsFileSync:()=>L1,updateMcpSettingsFile:()=>F5,updateMcpServerOAuthStateAsync:()=>X7,updateMcpServerOAuthState:()=>v8,setMcpServerDisabled:()=>g8,resolveMcpServerRegistrations:()=>W1,resolveDefaultMcpSettingsPath:()=>Z0,registerMcpServersFromSettingsFile:()=>c8,normalizeMcpServerOAuthState:()=>x2,loadMcpSettingsFile:()=>x8,listMcpServerOAuthStatuses:()=>Y7,hasMcpSettingsFile:()=>k$,getMcpServerOAuthState:()=>m8,McpSettingsUpdateSkippedError:()=>G5,McpSettingsMutatorPurityError:()=>k2,McpSettingsLockTimeoutError:()=>I2});import{existsSync as JV,mkdirSync as eQ,readFileSync as WV,renameSync as Q7,rmdirSync as IO,rmSync as $7,statSync as xO,unlinkSync as XV,writeFileSync as YV}from"node:fs";import{randomUUID as gO}from"node:crypto";import{dirname as jV,join as QV}from"node:path";import{setTimeout as mO}from"node:timers/promises";import{resolveMcpSettingsPath as vO}from"@cline/shared/storage";import{z as w}from"zod";function Z7($){if(!$)return;if($==="http")return"streamableHttp";return $}function Z0(){return vO()}function sO($,Z){eQ(jV($),{recursive:!0});let Q=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{YV(Q,Z,{encoding:"utf8",flag:"wx"}),Q7(Q,$)}catch(J){try{XV(Q)}catch{}throw J}}function eO($){Atomics.wait(tO,0,0,$)}function $q($){return`${$}.lock`}function GV(){return`${process.pid}.${Date.now()}.${gO()}`}function KV($,Z){eQ(jV($),{recursive:!0});let Q=`${$}.tmp.${Z}`;$7(Q,{recursive:!0,force:!0}),eQ(Q,{recursive:!0}),YV(QV(Q,`owner.${Z}`),Z,{encoding:"utf8",flag:"wx"});try{return Q7(Q,$),{lockDir:$,ownerFile:QV($,`owner.${Z}`)}}catch(J){if($7(Q,{recursive:!0,force:!0}),JV($))return;throw J}}function FV($,Z){let Q;try{Q=Date.now()-xO($).mtimeMs}catch(W){if(W.code==="ENOENT")return;throw W}if(Q<W7)return;Z.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Q}ms); reclaiming.`,{severity:"warn"});let J=`${$}.stale.${GV()}`;try{Q7($,J)}catch(W){if(W.code==="ENOENT")return;throw W}$7(J,{recursive:!0,force:!0})}function Zq($){try{XV($.ownerFile)}catch(Z){if(Z.code!=="ENOENT")throw Z}try{IO($.lockDir)}catch(Z){let Q=Z.code;if(Q!=="ENOENT"&&Q!=="ENOTEMPTY"&&Q!=="EEXIST")throw Z}}function AV($){let Z=$q($);if(K5.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:GV()}}function Qq($,Z){let{lockDir:Q,token:J}=AV($),W=Z.timeoutMs??W7,X=Date.now();while(!0){let Y=KV(Q,J);if(Y)return K5.add(Q),Y;if(Date.now()-X>W)throw new I2(`Timed out waiting for MCP settings lock at ${Q} after ${W}ms.`);FV(Q,Z),eO(HV)}}async function Jq($,Z){let{lockDir:Q,token:J}=AV($),W=Z.timeoutMs??W7,X=Date.now();while(!0){let Y=KV(Q,J);if(Y)return K5.add(Q),Y;if(Date.now()-X>W)throw new I2(`Timed out waiting for MCP settings lock at ${Q} after ${W}ms.`);FV(Q,Z),await mO(HV)}}function fV($,Z,Q){try{let J=Wq(Z),W=Xq(J,Q);return sO(Z,`${JSON.stringify(J,null,2)}
4
+ `),W}finally{K5.delete($.lockDir),Zq($)}}function L1($,Z,Q={}){let J=Qq($,Q);return fV(J,$,Z)}async function F5($,Z,Q={}){let J=await Jq($,Q);return fV(J,$,Z)}function Wq($){let Z=jq($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function Xq($,Z){let Q=JSON.stringify($),J=JSON.parse(Q),W=Z(J),X=JSON.stringify(J),Y=Z($);if(JSON.stringify($)!==X)throw new k2("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(Y)!==JSON.stringify(W))throw new k2("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return Y}function Yq($){let Z=WV($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(J){let W=J instanceof Error?J.message:String(J);throw Error(`Failed to parse MCP settings JSON at "${$}": ${W}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function jq($){try{return Yq($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function UV($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function Vq($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function x8($={}){let Z=$.filePath??Z0(),Q=WV(Z,"utf8"),J;try{J=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 W=oO.safeParse(J);if(!W.success){let X=W.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 W.data}function x2($){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 Bq($){if($===void 0)return;let Z=J7.safeParse($);if(!Z.success)return;return x2(Z.data)}function k$($={}){let Z=$.filePath??Z0();return JV(Z)}function W1($={}){let Z=x8($);return Object.entries(Z.mcpServers).map(([Q,J])=>({name:Q,transport:J.transport,disabled:J.disabled,metadata:J.metadata,oauth:J.oauth}))}function g8($){let Z=$.filePath??Z0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");L1(Z,(J)=>{let W=J.mcpServers;if(!W||typeof W!=="object"||Array.isArray(W))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let X={...W},Y=UV(X,Q);if(!Y)throw Error(`Unknown MCP server: ${Q}`);let j={...Y};if($.disabled)j.disabled=!0;else delete j.disabled;Vq(X,Q,j),J.mcpServers=X})}function m8($,Z={}){let Q=x8(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return x2(Q.mcpServers[$]?.oauth)}function DV($,Z){return(Q)=>{let J=Q.mcpServers,W=UV(J,$);if(!W)throw Error(`Unknown MCP server: ${$}`);let X=Bq(W.oauth)??{},Y=x2(Z(X));if(Y)W.oauth=Y;else delete W.oauth;return Y??{}}}function v8($,Z,Q={}){let J=Q.filePath??Z0();return L1(J,DV($,Z))}async function X7($,Z,Q={}){let J=Q.filePath??Z0();return F5(J,DV($,Z))}function Y7($={}){return W1($).map((Q)=>{let J=Q.transport.type!=="stdio",W=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:J,oauthConfigured:J&&typeof W==="string"&&W.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,J)=>Q.serverName.localeCompare(J.serverName))}async function c8($,Z={}){let Q=W1(Z);for(let J of Q)await $.registerServer(J);return Q}var I8,VV,J7,cO,uO,dO,lO,pO,rO,BV,iO,nO,aO,oO,G5,I2,k2,W7=1e4,HV=25,tO,K5;var A5=_$(()=>{I8=w.record(w.string(),w.string()),VV=w.record(w.string(),w.unknown()),J7=w.object({clientInformation:w.record(w.string(),w.unknown()).optional(),tokens:w.record(w.string(),w.unknown()).optional(),codeVerifier:w.string().optional(),discoveryState:w.record(w.string(),w.unknown()).optional(),redirectUrl:w.string().url().optional(),lastError:w.string().optional(),lastAuthenticatedAt:w.number().int().positive().optional()}).strip(),cO=w.object({type:w.literal("stdio"),command:w.string().min(1),args:w.array(w.string()).optional(),cwd:w.string().min(1).optional(),env:I8.optional()}),uO=w.object({type:w.literal("sse"),url:w.string().url(),headers:I8.optional()}),dO=w.object({type:w.literal("streamableHttp"),url:w.string().url(),headers:I8.optional()}),lO=w.discriminatedUnion("type",[cO,uO,dO]),pO=w.object({transport:lO,disabled:w.boolean().optional(),metadata:VV.optional(),oauth:J7.optional()}),rO=w.enum(["stdio","sse","http","streamableHttp"]).optional(),BV=w.object({type:w.enum(["stdio","sse","streamableHttp"]).optional(),transportType:rO,disabled:w.boolean().optional(),metadata:VV.optional(),oauth:J7.optional()});iO=BV.extend({command:w.string().min(1),args:w.array(w.string()).optional(),cwd:w.string().min(1).optional(),env:I8.optional()}).superRefine(($,Z)=>{let Q=$.type??Z7($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:w.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth})),nO=BV.extend({url:w.string().url(),headers:I8.optional()}).superRefine(($,Z)=>{let Q=$.type??Z7($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:w.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??Z7($.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}}),aO=w.union([pO,iO,nO]),oO=w.object({mcpServers:w.record(w.string(),aO)}).passthrough();G5=class G5 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};I2=class I2 extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};k2=class k2 extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};tO=new Int32Array(new SharedArrayBuffer(4)),K5=new Set});import{existsSync as nN,mkdirSync as aN,readFileSync as oN,writeFileSync as sN}from"node:fs";import{resolve as tN}from"node:path";import{resolveSessionDataDir as eN}from"@cline/shared/storage";import{nanoid as $E}from"nanoid";import*as ZE from"node-machine-id";function r0($){let Z=$?.trim();if(Z)return Z;let Q=WE();if(Q)return Q;return XE()}function JE(){let $=ZE;return $.machineIdSync??$.default?.machineIdSync}function WE(){try{let $=JE();if(!$)return;return $().trim()||void 0}catch{return}}function XE(){let $=eN(),Z=tN($,QE);try{if(nN(Z)){let J=oN(Z,"utf8").trim();if(J.length>0)return J}}catch{}let Q=`cl-${$E()}`;try{aN($,{recursive:!0}),sN(Z,Q,"utf8")}catch{}return Q}var QE="machine-id";var l2=()=>{};class x4{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,J,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let X=this.counters.get($);if(!X)X=this.meter.createCounter($,J?{description:J}:void 0),this.counters.set($,X);X.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,J,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let X=this.histograms.get($);if(!X)X=this.meter.createHistogram($,J?{description:J}:void 0),this.histograms.set($,X);X.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,J,W=!1){if(!this.meter||!W&&!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 B=this.meter.createObservableGauge($,J?{description:J}:void 0);B.addCallback((H)=>{for(let G of this.snapshotGaugeSeries($))H.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set($,B)}V.set(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 J=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:J})}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,J=0){if(!$)return{};let W={},X=100,Y=10;for(let[j,V]of Object.entries($)){if(j==="__proto__"||j==="constructor"||j==="prototype")continue;let B=Z?`${Z}.${j}`:j;if(V===null||V===void 0){W[B]=String(V);continue}if(Array.isArray(V)){let H=V.length>X?V.slice(0,X):V;try{W[B]=JSON.stringify(H)}catch{W[B]="[UnserializableArray]"}if(V.length>X)W[`${B}_truncated`]=!0,W[`${B}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){W[B]=V.toISOString();continue}if(V instanceof Error){W[B]=V.message;continue}if(Q.has(V)){W[B]="[Circular]";continue}if(J>=Y){W[B]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(W,this.flattenProperties(V,B,Q,J+1));continue}if(vS(V)){W[B]=V;continue}try{W[B]=JSON.stringify(V)}catch{W[B]=String(V)}}return W}}function vS($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class E9{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,J,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:J,required:W===!0})}recordHistogram($,Z,Q,J,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:J,required:W===!0})}recordGauge($,Z,Q,J,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:J,required:W===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class g4{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new E9({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 J of this.adapters)J.emitRequired($,Q)}recordCounter($,Z,Q,J,W=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordCounter($,Z,X,J,W)}recordHistogram($,Z,Q,J,W=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordHistogram($,Z,X,J,W)}recordGauge($,Z,Q,J,W=!1){let X=this.buildAttributes(Q);for(let Y of this.adapters)Y.recordGauge($,Z,X,J,W)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var DJ=()=>{};import{metrics as cS,trace as uS}from"@opentelemetry/api";import{logs as dS}from"@opentelemetry/api-logs";import{OTLPLogExporter as lS}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as pS}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as rS}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as iS}from"@opentelemetry/resources";import{BatchLogRecordProcessor as nS,ConsoleLogRecordExporter as aS,LoggerProvider as oS}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as sS,MeterProvider as tS,PeriodicExportingMetricReader as wK}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as eS,ConsoleSpanExporter as $b,SimpleSpanProcessor as Zb}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as Qb}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as Jb,ATTR_SERVICE_VERSION as Wb}from"@opentelemetry/semantic-conventions";class CK{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 m4{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=iS({[Jb]:$.serviceName??"cline",...$.serviceVersion?{[Wb]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)cS.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)dS.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return uS.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new x4({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new g4({...$,adapters:[Z],distinctId:r0($.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=LJ(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),J=Math.min(30000,Math.floor(Q*0.8)),W=Z.map((X)=>jb(X,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:J})).filter((X)=>X!==null);if(W.length===0)return null;return new tS({resource:$,readers:W})}createTracerProvider($){let Z=LJ(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,J=this.options.otlpTracesHeaders??this.options.otlpHeaders,W=[];for(let X of Z){let Y=Yb(X,{endpoint:Q,headers:J,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(Y)W.push(Y)}if(W.length===0)return null;return new Qb({resource:$,spanProcessors:W})}createLoggerProvider($){let Z=LJ(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((J)=>{let W=Xb(J,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!W)return null;return new nS(W,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((J)=>J!==null);if(Q.length===0)return null;return new oS({resource:$,processors:Q})}}function w9($){let Z=new m4($),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 Q2($){if(rZ())return{telemetry:new CK($)};if($.enabled!==!0)return{telemetry:new g4({...$,distinctId:r0($.distinctId)})};return w9($)}function C9($){let{telemetry:Z,provider:Q}=Q2($);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 LJ($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function Xb($,Z){if($==="console")return new aS;if(!Z.endpoint)return null;let Q=_J(Z.endpoint,"/v1/logs");return new lS({url:Q,headers:Z.headers})}function Yb($,Z){if($==="console")return new Zb(new $b);if(!Z.endpoint)return null;let Q=_J(Z.endpoint,"/v1/traces");return new eS(new rS({url:Q,headers:Z.headers}))}function jb($,Z){if($==="console")return new wK({exporter:new sS,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=_J(Z.endpoint,"/v1/metrics");return new wK({exporter:new pS({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function _J($,Z){let Q=new URL($),J=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=J.endsWith(Z)?J:`${J}${Z}`,Q.toString()}var P9=_$(()=>{o0();l2();DJ()});var vF={};$Z(vF,{resolveCoreDistinctId:()=>r0,createOpenTelemetryTelemetryService:()=>w9,createConfiguredTelemetryService:()=>Q2,createConfiguredTelemetryHandle:()=>C9,OpenTelemetryProvider:()=>m4,OpenTelemetryAdapter:()=>x4});var x9=_$(()=>{l2();P9()});import*as o10 from"@cline/llms";import{ClineNotSubscribedError as t10,ClineOrgIndividualInferenceSubscriptionError as e10,getClineOrgIndividualInferenceSubscriptionMessage as $$0,getClineNotSubscribedMessage as Z$0,getClinePassSubscriptionUrl as Q$0,isClineNotSubscribedError as J$0,isClineNotSubscribedMessage as W$0,isClineOrgIndividualInferenceSubscriptionError as X$0,isClineOrgIndividualInferenceSubscriptionMessage as Y$0}from"@cline/llms";import{buildClineSystemPrompt as V$0,buildSdkErrorProperties as B$0,ContributionRegistry as H$0,captureSdkError as G$0,createClineTelemetryServiceConfig as K$0,createClineTelemetryServiceMetadata as F$0,createContributionRegistry as A$0,createTool as f$0,emptyWorkspaceManifest as U$0,FEATURE_FLAGS as D$0,FeatureFlagDefaultValue as L$0,formatDisplayUserInput as _$0,noopBasicLogger as T$0,normalizeSdkError as O$0,normalizeUserInput as q$0,parseUserCommandEnvelope as z$0,registerDisposable as M$0,SDK_ERROR_TELEMETRY_EVENT as R$0}from"@cline/shared";export*from"@cline/shared/storage";function oA($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function NW($,Z,Q){let J=oA(Q);if(J)return J;let W=Z.trim();if(W){let X=W.length>200?`${W.slice(0,200)}...`:W;return`Cline account request failed with status ${$}: ${X}`}return`Cline account request failed with status ${$}`}class ZZ{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 J=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(J)return J;let W=await this.fetchMe();if(!W.id?.trim())throw Error("Unable to resolve current user id");return W.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let W=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(W)return W;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 J=this.getHeadersFn?await this.getHeadersFn():{},W=new AbortController,X=setTimeout(()=>W.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",...J??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:W.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(NW(Y.status,j,void 0));throw Error("Cline account response was not valid JSON")}if(!Y.ok)throw Error(NW(Y.status,j,V));if(typeof V==="object"&&V!==null){let B=V;if(typeof B.success==="boolean"){if(!B.success)throw Error(B.error||"Cline account request failed");return B.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(X)}}}function EW($){return $.action==="clineAccount"}async function wW($,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 QZ{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:Z})}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:Z,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}function r4($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((J)=>{$.onOpenUrlError?.({url:Z,error:J})})}catch(J){$.onOpenUrlError?.({url:Z,error:J})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}A0();import{getClineEnvironmentConfig as LZ}from"@cline/shared";function jf(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function G1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",J=$.timeoutMs??300000,W=$.successHtml??Vf,X=jf(),Y=!1,j=null,V=null,B=null,H=(F)=>{if(Y)return;Y=!0,X.resolve(F)},G=()=>{if(j)clearTimeout(j),j=null;let F=B;if(B=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(),H(null)},J),X.promise};for(let F of $.ports){let A=Z.createServer((U,L)=>{try{let f=new URL(U.url||"",`http://${Q}:${F}`);if(f.pathname!==$.callbackPath){L.statusCode=404,L.end("Not found");return}let z={url:f,code:f.searchParams.get("code")??void 0,state:f.searchParams.get("state")??void 0,provider:f.searchParams.get("provider")??void 0,error:f.searchParams.get("error")??void 0};if(z.error){L.statusCode=400,L.end(`Authentication failed: ${z.error}`),G(),H(z);return}if(!z.code){L.statusCode=400,L.end("Missing authorization code");return}if($.expectedState&&z.state!==$.expectedState){L.statusCode=400,L.end("State mismatch");return}L.statusCode=200,L.setHeader("Content-Type","text/html; charset=utf-8"),L.end(W),G(),H(z)}catch{L.statusCode=500,L.end("Internal error")}}),D=await new Promise((U)=>{let L=(f)=>{A.off("error",L),U({bound:!1,error:f})};A.once("error",L),A.listen(F,Q,()=>{A.off("error",L),V=A,U({bound:!0})})});if(D.error){if(D.error.code==="EADDRINUSE")continue;throw G(),D.error}if(D.bound){B=F;let U=`http://${Q}:${F}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:F,callbackUrl:U})).catch(()=>{});return{callbackUrl:U,waitForCallback:K,cancelWait:()=>{G(),H(null)},close:()=>{G(),H(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var Vf=`<!DOCTYPE html>
5
5
  <html lang="en">
6
6
  <head>
7
7
  <meta charset="utf-8">
@@ -42,26 +42,26 @@ import{createRequire as RA}from"node:module";var OA=Object.defineProperty;var qA
42
42
  </div>
43
43
  <script>setTimeout(() => window.close(), 3000);</script>
44
44
  </body>
45
- </html>`;function OJ($){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 mA($){let Q=new TextEncoder().encode($),W=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(W)}function vA($=32){let Z=new Uint8Array($);return crypto.getRandomValues(Z),OJ(Z)}async function l4(){let $=vA(),Z=OJ(await mA($));return{verifier:$,challenge:Z}}function p4($){return $.endsWith("/")?$.slice(0,-1):$}function U$($,Z){return new URL(Z,`${p4($)}/`).toString()}function J2($,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 cA($){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 z0($){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=cA(J);if(!X)return null;return JSON.parse(X)}catch{return null}}function X2($){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 Y2($,Z){return Date.now()>=$.expires-Z}async function j2($){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 J2(Z,$.parseOptions);if(await W,Q)throw Q;if(Z)return J2(Z,$.parseOptions);return{}}var r4={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},EJ={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},FZ="https://api.workos.com",uA="/auth",qJ=Array.from({length:11},($,Z)=>48801+Z),dA=300000,lA=30000,V2=30000,pA=300,rA=5;class y1 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 iA($){let Z=Date.parse($);if(Number.isNaN(Z))throw Error(`Invalid expiresAt value: ${$}`);return Z}function AZ($,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:iA($.expiresAt),accountId:W??void 0,email:$.userInfo.email||Q.email,metadata:{provider:Z,tokenType:$.tokenType,userInfo:$.userInfo}}}async function fZ($){if(!$)return{};return typeof $==="function"?await $():$}function MJ($,Z){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return Z;return Math.floor($)}async function RJ($){await new Promise((Z)=>setTimeout(Z,$))}function UZ($,Z){if(!$.success||!$.data?.accessToken)throw Error(Z);return $.data}async function NJ($,Z){let Q=await fetch(U$(FZ,EJ.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(Z?.requestTimeoutMs??V2)}),W=await Q.json().catch(()=>({}));if(!Q.ok)throw new y1(`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:MJ(W.expires_in,pA),pollIntervalSeconds:MJ(W.interval,rA)}}async function CJ($){let Z=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=Z){let W=await fetch(U$($.workosApiBaseUrl,EJ.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 RJ(Q*1000);break}case"slow_down":{Q+=1,await RJ(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new y1(J.error_description||"WorkOS authorization failed",{status:W.status,errorCode:J.error});default:throw new y1(`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 wJ($,Z,Q){let W={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(U$(Z.apiBaseUrl,r4.register),{method:"POST",headers:{"Content-Type":"application/json",...await fZ(Z.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Z.requestTimeoutMs??V2)});if(!J.ok){let Y=await J.text().catch(()=>""),j=X2(Y);throw new y1(`Token registration failed: ${J.status}${j.message?` - ${j.message}`:""}`,{status:J.status,errorCode:j.code})}let X=await J.json();return AZ(UZ(X,"Invalid token exchange response"),Q??Z.provider)}async function nA($,Z,Q,W){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:Z,provider:W??Q.provider},X=await fetch(U$(Q.apiBaseUrl,r4.token),{method:"POST",headers:{"Content-Type":"application/json",...await fZ(Q.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Q.requestTimeoutMs??V2)});if(!X.ok){let j=await X.text().catch(()=>""),V=X2(j);throw new y1(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let Y=await X.json();return AZ(UZ(Y,"Invalid token exchange response"),W??Q.provider)}async function DZ($){w1($.telemetry,$.provider??"cline");let Z=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:qJ,W=$.callbackPath??uA,J=Z?null:await B1({ports:Q,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=J?.callbackUrl||`http://127.0.0.1:${Q[0]??qJ[0]}${W}`;try{let Y;if(Z){let j=KZ().workOsClientId,V=await NJ(j,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let B=await CJ({clientId:j,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??V2,workosApiBaseUrl:FZ,onProgress:$.callbacks.onProgress});Y=await wJ(B,$,$.provider)}else{let j=new URL(U$($.apiBaseUrl,r4.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,B=$.provider,H=await j2({waitForCallback:J?.waitForCallback??(async()=>null),cancelWait:J?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(H.error)throw Error(`OAuth error: ${H.error}`);if(V=H.code,B=H.provider??B,!V){let G=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=J2(G,{includeProvider:!0});V=K.code,B=K.provider??B}if(!V)throw Error("Missing authorization code");Y=await nA(V,X,$,B)}return P1($.telemetry,$.provider??"cline"),b1($.telemetry,{id:Y.accountId,email:Y.email,provider:$.provider??"cline"}),Y}catch(Y){throw S1($.telemetry,$.provider??"cline",Y instanceof Error?Y.message:String(Y)),Y}finally{J?.close()}}async function aA($){return await NJ(KZ().workOsClientId,$)}async function sA($){let Z=$.provider??"cline";w1($.telemetry,Z);try{let Q=await CJ({clientId:KZ().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??V2,workosApiBaseUrl:FZ}),W=await wJ(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return P1($.telemetry,Z),b1($.telemetry,{id:W.accountId,email:W.email,provider:Z}),W}catch(Q){throw S1($.telemetry,Z,Q instanceof Error?Q.message:String(Q)),Q}}async function PJ($,Z){let Q=await fetch(U$(Z.apiBaseUrl,r4.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await fZ(Z.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(Z.requestTimeoutMs??V2)});if(!Q.ok){let X=await Q.text().catch(()=>""),Y=X2(X);throw new y1(`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 AZ(UZ(W,"Invalid token refresh response"),J,$)}async function LZ($,Z,Q){if(!$)return null;let W=Q?.refreshBufferMs??dA,J=Q?.retryableTokenGraceMs??lA;if(Q?.forceRefresh!==!0&&!Y2($,W))return $;try{return await PJ($,Z)}catch(Y){if(Y instanceof y1&&Y.isLikelyInvalidGrant())return A$(Z.telemetry,Z.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}G0();import{nanoid as oA}from"nanoid";var W0={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 i4 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 tA($,Z,Q=W0.redirectUri){let W=await fetch(W0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:W0.clientId,code:$,code_verifier:Z,redirect_uri:Q}),signal:AbortSignal.timeout(W0.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 eA($){try{let Z=await fetch(W0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:W0.clientId}),signal:AbortSignal.timeout(W0.httpTimeoutMs)});if(!Z.ok){let W=await Z.text().catch(()=>""),J=X2(W);throw new i4(`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 i4)throw Z;return{type:"failed"}}}async function $f($="pi"){let{verifier:Z,challenge:Q}=await l4(),W=oA(32),J=new URL(W0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",W0.clientId),J.searchParams.set("redirect_uri",W0.redirectUri),J.searchParams.set("scope",W0.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 Zf(){try{let $=new URL(W0.redirectUri),Z=$.port.length>0?Number.parseInt($.port,10):W0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(Z)?Z:W0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:W0.callbackPort,callbackPath:"/auth/callback",redirectUri:W0.redirectUri}}}function Qf($,Z){let Q=Z?z0(Z):z0($),W=Q?Q:z0($),X=W?.[W0.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 SJ($,Z){let Q=Qf($.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 _Z($){w1($.telemetry,"openai-codex");let Z=Zf(),{verifier:Q,state:W,url:J}=await $f($.originator),X=await B1({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 j2({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 H=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=J2(H,{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 tA(Y,Q,Z.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let B=SJ(V);return P1($.telemetry,"openai-codex"),b1($.telemetry,{id:B.accountId,email:B.email,provider:"openai-codex"}),B}catch(j){throw S1($.telemetry,"openai-codex",j instanceof Error?j.message:String(j)),j}finally{X.close()}}async function bJ($,Z){let Q=await eA($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let W=SJ(Q,Z);if(!W.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return W}async function zZ($,Z){if(!$)return null;let Q=Z?.refreshBufferMs??W0.refreshBufferMs,W=Z?.retryableTokenGraceMs??W0.retryableTokenGraceMs;if(Z?.forceRefresh!==!0&&!Y2($,Q))return $;try{return await bJ($.refresh,$)}catch(X){if(X instanceof i4&&X.isLikelyInvalidGrant())return A$(Z?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}G0();import{nanoid as yJ}from"nanoid";class TZ{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 Wf="a8331954c0cf48ba99b5dd223a14c6ea",Jf="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",Xf="openid offline_access",qZ="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",Yf="c1aba3deed5740659981a752714eba33",jf="https://login-ext.identity.oraclecloud.com",Vf="openid offline_access",MZ="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm";var Bf="/auth/oca",Hf=Array.from({length:11},($,Z)=>48801+Z),Gf=300000,Kf=30000,hJ=30000,Ff=600000;class n4 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 h1={internal:{clientId:Wf,idcsUrl:Jf,scopes:Xf,baseUrl:qZ},external:{clientId:Yf,idcsUrl:jf,scopes:Vf,baseUrl:MZ}},W8=new Map,Af=86400000,ff=300000,Uf=32,OZ=new TZ(Af,Uf);function kJ($){if(typeof $==="function")return $();return $??"internal"}function IJ($){return{internal:{clientId:$?.internal?.clientId??h1.internal.clientId,idcsUrl:$?.internal?.idcsUrl??h1.internal.idcsUrl,scopes:$?.internal?.scopes??h1.internal.scopes,baseUrl:$?.internal?.baseUrl??h1.internal.baseUrl},external:{clientId:$?.external?.clientId??h1.external.clientId,idcsUrl:$?.external?.idcsUrl??h1.external.idcsUrl,scopes:$?.external?.scopes??h1.external.scopes,baseUrl:$?.external?.baseUrl??h1.external.baseUrl}}}function Df($=Date.now()){let Z=$-Ff;for(let[Q,W]of W8.entries())if(W.createdAt<Z)W8.delete(Q)}function Lf($,Z,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=z0(Z)?.exp;if(typeof J==="number"&&J>0)return J*1000;let Y=z0(Q)?.exp;if(typeof Y==="number"&&Y>0)return Y*1000;return Date.now()+3600000}function xJ($,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=z0($.id_token),Y=z0(W),j=X?.sub??Y?.sub,V=X?.email??Y?.email;return{access:W,refresh:J,expires:Lf($,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 gJ($,Z){let Q=p4($),W=OZ.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 OZ.set(Q,V,Date.now(),ff),V}let j=(await X.json()).token_endpoint||`${Q}/oauth2/v1/token`;return OZ.set(Q,j),j}function mJ($){return{code:$.error,message:$.error_description}}async function _f($){let Z=W8.get($.state);if(!Z)throw Error("No PKCE verifier found for this state");W8.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,W=await gJ(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=mJ(Y);throw new n4(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let j=z0(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 xJ(Y,$.mode)}function zf($){let Z=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${p4(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 RZ($){w1($.telemetry,"oca");let Z=IJ($.config),Q=kJ($.mode),W=$.callbackPorts?.length?$.callbackPorts:Hf,J=$.callbackPath??Bf,X=$.requestTimeoutMs??hJ,Y=await B1({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=yJ(16),B=yJ(16),{verifier:H,challenge:G}=await l4();Df(),W8.set(V,{verifier:H,nonce:B,mode:Q,redirectUri:j,createdAt:Date.now()});let K=zf({callbackUrl:j,mode:Q,state:V,nonce:B,challenge:G,config:Z});$.callbacks.onAuth({url:K,instructions:"Continue the authentication process in your browser."});try{let F=await j2({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 _f({code:A,state:L,mode:Q,config:Z,requestTimeoutMs:X});return P1($.telemetry,"oca"),b1($.telemetry,{id:f.accountId,email:f.email,provider:"oca"}),f}catch(F){throw S1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{Y.close()}}async function vJ($,Z={}){let Q=IJ(Z.config),W=Z.requestTimeoutMs??hJ,J=$.metadata?.mode,X=J==="internal"||J==="external"?J:kJ(Z.mode),Y=X==="external"?Q.external:Q.internal,j=await gJ(Y.idcsUrl,W),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:Y.clientId}),B=await fetch(j,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(W)}),H=await B.json();if(!B.ok){let G=mJ(H);throw new n4(`Token refresh failed: ${B.status}${G.message?` - ${G.message}`:""}`,{status:B.status,errorCode:G.code})}return xJ(H,X,$)}async function EZ($,Z,Q){if(!$)return null;let W=Z?.refreshBufferMs??Q?.refreshBufferMs??Gf,J=Z?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??Kf;if(Z?.forceRefresh!==!0&&!Y2($,W))return $;try{return await vJ($,Q)}catch(Y){if(Y instanceof n4&&Y.isLikelyInvalidGrant())return A$(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}import{getClineEnvironmentConfig as cJ}from"@cline/shared";var a4="workos:";function Tf($){let Z=$.trim();return Z.toLowerCase().startsWith(a4)?Z:`${a4}${Z}`}function Of($){let Z=$.trim();return Z.toLowerCase().startsWith(a4)?Z.slice(a4.length):Z}function qf($){let Q=z0($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function Mf($,Z){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let W=qf(Z);if(W)return W;return Date.now()-1}function Rf($,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:Mf($,J),accountId:$.auth?.accountId}}function Ef($){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 NZ($){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 Ef({...Q,storageProviderId:Z,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function uJ($){return NZ({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:Tf,normalizeStoredAccessToken:Of,login:({settings:Z,callbacks:Q,telemetry:W})=>DZ({apiBaseUrl:Z?.baseUrl?.trim()||cJ().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:W}),refresh:({settings:Z,credentials:Q,forceRefresh:W,telemetry:J})=>LZ(Q,{apiBaseUrl:Z.baseUrl?.trim()||cJ().apiBaseUrl,telemetry:J},{forceRefresh:W})})}var Nf=[uJ({providerId:"cline"}),uJ({providerId:"cline-pass",storageProviderId:"cline"}),NZ({providerId:"oca",login:({settings:$,callbacks:Z,telemetry:Q})=>RZ({mode:$?.oca?.mode,callbacks:Z,telemetry:Q}),refresh:({settings:$,credentials:Z,forceRefresh:Q,telemetry:W})=>EZ(Z,{forceRefresh:Q,telemetry:W},{mode:$.oca?.mode,telemetry:W})}),NZ({providerId:"openai-codex",login:({callbacks:$,telemetry:Z})=>_Z({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:Z}),refresh:({credentials:$,forceRefresh:Z,telemetry:Q})=>zZ($,{forceRefresh:Z,telemetry:Q})})],Cf=new Map(Nf.map(($)=>[$.providerId,$]));function H0($){return Cf.get($.trim().toLowerCase())}function J8($){return H0($)!==void 0}function wf($){return H0($)?.storageProviderId}function Pf($,Z){let Q=H0(Z),W=Q?.storageProviderId??Z,J=$.getProviderSettings(W);return Q?.getApiKey(J)??s4(Z,J)}async function CZ($,Z,Q){let W=H0(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 wZ($,Z){let Q=H0($);if(!Q)return null;return Rf(Z,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function X8($){let Z=H0($.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 s4($,Z){let Q=H0($);if(Q)return Q.getApiKey(Z);return Z?.auth?.accessToken?.trim()||Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0}function Sf($,Z){let Q=H0($);if(!Q)return Z.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:Z.access}})??Z.access}import*as S0 from"@cline/llms";import{z as R}from"zod";import*as i from"@cline/llms";function PZ($){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 bf($,Z){let Q=PZ($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let W=$,J=PZ(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=PZ(X.models??X);if(j.length>0)return j}return[]}async function o4($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return bf(await Q.json(),Z)}function dJ($){return $.replace(/\/+$/,"")}function t4($,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=dJ(Y.pathname),B=dJ(j.pathname);if(V&&X.pathname.startsWith(`${V}/`)){let H=X.pathname.slice(V.length);j.pathname=`${B}${H}`}else j.pathname=X.pathname;return j.search=X.search,j.hash=X.hash,j.toString()}catch{return W}}function yf($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function hf($){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 kf=Object.values(i.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:yf($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),rJ=Object.fromEntries(kf.map(($)=>[$.id,$]));function If($){return rJ[$]}function xf(){return Object.fromEntries(Object.entries(rJ).filter(([,$])=>hf($)))}function iJ($=[]){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 nJ="https://models.dev/api.json",gf=600000,aJ=300000,mf=5000,$6=new Map,Y8=new Map,bZ=new Map,e4=new Map;async function vf(){return i.getGeneratedProviderModels()}async function cf($,Z={},Q={},W={},J={},X={}){if($==="litellm")return i.sortModelsByReleaseDate(W);let Y=await vf(),j=i.resolveProviderModelCatalogKeys($),V=Object.assign({},...j.map((K)=>Y[K]??{})),B=Boolean(i.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),H=Object.keys(J).length>0;if(B&&H)return i.sortModelsByReleaseDate({...J,...X});if($==="openai-codex")return i.sortModelsByReleaseDate({...Z,...i.filterOpenAICodexModels(Q),...J,...X});if($==="cline-pass"&&Object.keys(Q).length>0)return i.sortModelsByReleaseDate({...Q,...X});let G=i.sortModelsByReleaseDate({...V,...Z,...Q,...W,...J});if($==="cline")return i.sortModelsByReleaseDate({...i.preferCanonicalModelIds(G,i.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...X});return i.sortModelsByReleaseDate({...G,...X})}function uf($,Z){let Q=i.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((W)=>Z[W]??{}))}function Z6($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function yZ($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function df($){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 lf($,Z){return`${$}:${Z6(Z.baseUrl)}:${df(yZ(Z)??"")}`}async function Q6($,Z,Q=mf){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await fetch($,{...Z,signal:W.signal})}finally{clearTimeout(J)}}function D$($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function W6($,Z){let Q=["streaming","tools"];return D$(Q,"images",Boolean(Z.supportsImages)),D$(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),D$(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 pf($,Z){let Q=await Q6("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]=W6(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 lJ($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function rf($,Z){let Q=await Q6("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]=W6(j,{name:j,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return X}async function nf($,Z){let W=`${(Z6($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await Q6(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 B=V.id?.trim();if(!B)continue;let H=V.supported_features??[],G=V.supported_sampling_parameters??[],K=V.input_modalities??[],F=["streaming"];D$(F,"tools",H.includes("tools")),D$(F,"reasoning",H.includes("reasoning")),D$(F,"temperature",G.includes("temperature")),D$(F,"images",K.includes("image"));let A={input:lJ(V.pricing?.prompt),output:lJ(V.pricing?.completion)};j[B]={id:B,name:V.name??B,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:A.input!==void 0||A.output!==void 0?A:void 0,status:"active"}}return j}function af($){let Z=Z6($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function sf($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function of($){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 tf($,Z){let Q=af($.baseUrl),W=[],J=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let X of sf(Q))for(let[Y,j]of J)try{let V=await Q6(X,{method:"GET",headers:{accept:"application/json",...j}});if(V.ok){let H=(await V.json())?.data??[],G={};for(let K of H){let F=K.model_name?.trim(),L=K.litellm_params?.model?.trim()||F;if(!L)continue;let f=K.model_info,D=W6(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 of(V)}`)}catch(V){let B=V instanceof Error?V.message:String(V);W.push(`${new URL(X).pathname} (${Y}): ${B}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${W.join("; ")}`)}var sJ={baseten:pf,hicap:rf,litellm:tf,poolside:nf},pJ=new Map,SZ=new Map;function ef($,Z){return`${$}:${Z6(Z.baseUrl)}`}async function $U($,Z,Q){let W=i.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=t4(Q.baseUrl,W?.provider.baseUrl,W?.provider.modelsSourceUrl);if(!J)return{};let X=Z?.cacheTtlMs??aJ,Y=ef($,Q),j=Date.now(),V=pJ.get(Y);if(V&&V.expiresAt>j)return V.data;let B=SZ.get(Y);if(B)return B;let H=o4(J,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,W6(F,{name:F})]));return pJ.set(Y,{data:K,expiresAt:j+X}),K}).finally(()=>{SZ.delete(Y)});return SZ.set(Y,H),H}async function ZU($,Z){let Q=yZ(Z);if(!Q)return{};let W=sJ[$];if(!W)return{};return W(Z,Q)}function QU($,Z,Q){if(!Q)return!1;if(!sJ[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(yZ(Q))}async function WU($,Z,Q){let W=Z?.cacheTtlMs??aJ,J=lf($,Q),X=Date.now(),Y=bZ.get(J);if(Y&&Y.expiresAt>X)return Y.data;let j=e4.get(J);if(j)return j;let V=ZU($,Q).then((B)=>{return bZ.set(J,{data:B,expiresAt:X+W}),B}).finally(()=>{e4.delete(J)});return e4.set(J,V),V}async function JU($){return i.fetchLiveProviderModels($,globalThis.fetch)}async function J6($={}){let Z=$.url??nJ,Q=$.cacheTtlMs??gf,W=Date.now(),J=$6.get(Z);if(J&&J.expiresAt>W)return J.data;let X=Y8.get(Z);if(X)return X;let Y=JU(Z).then((j)=>{return $6.set(Z,{data:j,expiresAt:W+Q}),j}).finally(()=>{Y8.delete(Z)});return Y8.set(Z,Y),Y}function XU($){if($){$6.delete($),Y8.delete($);return}$6.clear(),Y8.clear()}function YU(){bZ.clear(),e4.clear()}function jU($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:iJ(Q.capabilities)}]))}var hZ=jU(xf());function oJ($){let Z=If($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:iJ(Z.capabilities)}}async function kZ($,Z,Q){let W=oJ($);if(!W)return;try{let J=Z?.loadLatestOnInit?await J6(Z):void 0,X=J?uf($,J):{},Y=Q&&QU($,Z,Q)?await WU($,Z,Q):{},V=Boolean(i.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:W.modelId,baseUrl:W.baseUrl}:Q,B=V?await $U($,Z,V).catch(()=>({})):{},H=await cf($,W.knownModels,X,Y,B,Q?.knownModels);return{...W,knownModels:H}}catch(J){if(Z?.failOnError)throw J;if($==="litellm")return{...W,knownModels:{}};return W}}var IZ=S0.BUILT_IN_PROVIDER,VU=S0.BUILT_IN_PROVIDER_IDS,BU=S0.isBuiltInProviderId,X6=S0.normalizeProviderId,xZ=R.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),tJ=R.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),eJ=R.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),$X=R.object({apiKey:R.string().optional(),accessToken:R.string().optional(),refreshToken:R.string().optional(),expiresAt:R.number().int().positive().optional(),accountId:R.string().optional()}),HU=R.enum(["none","low","medium","high","xhigh"]),ZX=R.object({enabled:R.boolean().optional(),effort:HU.optional(),budgetTokens:R.number().int().positive().optional()}),QX=R.object({accessKey:R.string().optional(),secretKey:R.string().optional(),sessionToken:R.string().optional(),region:R.string().optional(),profile:R.string().optional(),authentication:R.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:R.boolean().optional(),useCrossRegionInference:R.boolean().optional(),useGlobalInference:R.boolean().optional(),endpoint:R.string().url().optional(),customModelBaseId:R.string().optional()}),WX=R.object({projectId:R.string().optional(),region:R.string().optional()}),JX=R.object({apiVersion:R.string().optional(),useIdentity:R.boolean().optional()}),XX=R.object({clientId:R.string().optional(),clientSecret:R.string().optional(),tokenUrl:R.string().url().optional(),resourceGroup:R.string().optional(),deploymentId:R.string().optional(),useOrchestrationMode:R.boolean().optional(),api:R.enum(["orchestration","foundation-models"]).optional(),defaultSettings:R.record(R.string(),R.unknown()).optional()}),YX=R.object({mode:R.enum(["internal","external"]).optional(),usePromptCache:R.boolean().optional()}),jX=R.object({loadLatestOnInit:R.boolean().optional(),loadPrivateOnAuth:R.boolean().optional(),url:R.string().url().optional(),cacheTtlMs:R.number().int().positive().optional(),failOnError:R.boolean().optional()}),B2=R.object({provider:xZ,apiKey:R.string().optional(),auth:$X.optional(),model:R.string().optional(),protocol:tJ.optional(),client:eJ.optional(),routingProviderId:xZ.optional(),maxTokens:R.number().int().positive().optional(),contextWindow:R.number().int().positive().optional(),baseUrl:R.string().url().optional(),headers:R.record(R.string(),R.string()).optional(),timeout:R.number().int().positive().optional(),reasoning:ZX.optional(),aws:QX.optional(),gcp:WX.optional(),azure:JX.optional(),sap:XX.optional(),oca:YX.optional(),region:R.string().optional(),apiLine:R.enum(["china","international"]).optional(),capabilities:R.array(R.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:jX.optional()});function VX($){return B2.parse($)}function BX($){return B2.safeParse($)}function GU($){return $.protocol==="openai-responses"||$.client==="openai"}function H1($,Z={}){let Q=$.provider,W=X6(Q),J=Z.includeKnownModels!==!1,X=$.reasoning?.effort||"none",Y=X==="none"?void 0:X,j=hZ[W],V=Object.assign({},...S0.resolveProviderModelCatalogKeys(W).map((L)=>S0.getGeneratedModelsForProvider(L))),B=Object.keys(V)[0],H=s4(W,$),G=$.baseUrl??(W==="oca"?$.oca?.mode==="internal"?qZ:MZ:j?.baseUrl),K=$.routingProviderId??(GU($)&&W!==IZ.OPENAI_NATIVE?IZ.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??B??"default",...J?{knownModels:F}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort: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 KU($){let Z=VX($);return H1(Z)}function FU($){let Z=BX($);if(Z.success)return{success:!0,config:H1(Z.data)};return{success:!1,error:Z.error}}import{SESSION_STATUS_VALUES as AU}from"@cline/shared";var gZ=AU,fU=["idle","running","pending"];function UU($){return!fU.includes($)}function j0($){return!UU($)}var T0={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"};function HX($){if($===!0)return{};if(!$)return;return $}function GX($){if($==="user")return"global";return $}class mZ{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 KX($){let{host:Z}=$;return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||T0.CLI,interactive:!1,config:{providerId:X6(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:_U(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:LU(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 Y6($){let Z=DU($.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 DU($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function LU($){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 _U($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}import{existsSync as g8,readFileSync as zO}from"node:fs";import{basename as Y7,dirname as MV,extname as TO,isAbsolute as NV,join as OO,relative as CV,resolve as RV}from"node:path";import{createHash as zU}from"node:crypto";import{watch as TU}from"node:fs";import{readdir as OU,readFile as qU}from"node:fs/promises";import{join as MU}from"node:path";function RU($){return zU("sha1").update($).digest("hex")}function fX($){return Boolean($&&typeof $==="object"&&"code"in $)}function FX($){return fX($)&&$.code==="ENOENT"}function AX($){return fX($)&&($.code==="EACCES"||$.code==="EPERM")}class j8{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=TU(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(!FX(Q)&&!AX(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 qU(j,"utf8"),B={type:$.type,directoryPath:X.directoryPath,fileName:Y,filePath:j,content:V},H=$.parseFile(B),G=$.resolveId(H,B).trim();if(!G)continue;Z.set(G,{type:$.type,id:G,item:H,filePath:j,fingerprint:RU(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 OU($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:MU($,Q.name)})).sort((Q,W)=>Q.fileName.localeCompare(W.fileName))}catch(Z){if(FX(Z)||AX(Z))return[];throw Z}}}import{readdir as jQ,readFile as pD,stat as YQ}from"node:fs/promises";import{basename as F1,dirname as rD,extname as z6,join as E0,resolve as K8}from"node:path";import{AGENTS_RULES_FILE_NAME as lX,RULES_CONFIG_DIRECTORY_NAME as pX,resolveGlobalAgentsRulesPath as iD,resolveRulesConfigSearchPaths as nD,resolveSkillsConfigSearchPaths as aD,resolveWorkflowsConfigSearchPaths as sD,SKILLS_CONFIG_DIRECTORY_NAME as VQ,WORKFLOWS_CONFIG_DIRECTORY_NAME as BQ}from"@cline/shared/storage";import oD from"yaml";r0();import{existsSync as U6,readFileSync as bD,statSync as yD}from"node:fs";import{basename as hD,dirname as A6,join as D6,resolve as f6}from"node:path";import{discoverPluginModulePaths as kD,resolveConfiguredPluginModulePaths as mX,resolvePluginConfigSearchPaths as ID,SKILLS_CONFIG_DIRECTORY_NAME as xD}from"@cline/shared/storage";import{resolve as BD}from"node:path";import{normalizePluginManifest as HD}from"@cline/shared";import{existsSync as K0,readFileSync as G2}from"node:fs";import{builtinModules as lU,createRequire as iZ}from"node:module";import{dirname as I1,extname as B8,isAbsolute as pU,resolve as u}from"node:path";import{fileURLToPath as TX}from"node:url";import{PLUGIN_FILE_EXTENSIONS as rU}from"@cline/shared";var OX=I1(TX(import.meta.url)),iU=iZ(import.meta.url),nU=u(OX,"..","..","..","..",".."),lZ=oU(nU),aU=["@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"],nZ=new Set(lU.flatMap(($)=>[$,$.replace(/^node:/,"")])),V8=new Set(rU),sU=["development","node","import","require","default"];function oU($){let Z={},Q={"@cline/sdk":u($,"packages/sdk/src/index.ts"),"@cline/agents":u($,"packages/agents/src/index.ts"),"@cline/core":u($,"packages/core/src/index.ts"),"@cline/llms":u($,"packages/llms/src/index.ts"),"@cline/shared":u($,"packages/shared/src/index.ts"),"@cline/shared/storage":u($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":u($,"packages/shared/src/db/index.ts")};for(let[W,J]of Object.entries(Q))if(K0(J))Z[W]=J;for(let W of["agents","core","llms","shared"]){let J=u($,"packages",W),X=u(J,"package.json");if(!K0(X))continue;try{let Y=JSON.parse(G2(X,"utf8"));if(typeof Y.name!=="string"||!Y.exports)continue;if(typeof Y.exports==="string"){let j=u(J,Y.exports);if(K0(j))Z[Y.name]=j;continue}if(typeof Y.exports!=="object")continue;for(let[j,V]of Object.entries(Y.exports)){let B=tU(J,V);if(!B)continue;let H=j==="."?Y.name:`${Y.name}/${j.replace(/^\.\//,"")}`;Z[H]=B}}catch{}}return Z}function tU($,Z){let Q=aZ(Z);if(!Q)return null;let W=qX($,Q);for(let J of W)if(K0(J))return J;return null}function aZ($,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 sU){let J=aZ(Q[W],Z);if(J)return J}return null}function qX($,Z){let Q=Z.replace(/^\.\//,""),W=[u($,Z)];if(Q.startsWith("dist/")){let J=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[u($,`${J}.ts`),u($,`${J}.tsx`),u($,`${J}.mts`),u($,`${J}.cts`),...W]}return W}function eU($){return Object.fromEntries(Object.entries($).sort(([Z],[Q])=>Q.length-Z.length))}function G6($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function H2($){if($.startsWith("@")){let[Z,Q]=$.split("/",3);return Q?`${Z}/${Q}`:$}return $.split("/",1)[0]??$}function $D($){let Z=H2($);if($===Z)return".";return`.${$.slice(Z.length)}`}function MX($){return H2($).startsWith("@cline/")}function pZ($,Z){let Q=H2(Z),W=I1($);while(!0){let J=u(W,"node_modules",Q);if(K0(J)||K0(u(J,"package.json")))return!0;let X=u(W,"..");if(X===W)return!1;W=X}}function zX($){return rZ($)!==null}function rZ($){try{return iU.resolve($)}catch{}return ZD($)}function ZD($){let Z=H2($),Q=RX(Z);if(!Q)return null;let W=u(Q,"package.json");try{let J=JSON.parse(G2(W,"utf8")),X=$D($),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=aZ(Y)??(X==="."&&typeof J.main==="string"?J.main:null);if(!j)return null;let V=u(Q,j),B=[V,...qX(Q,j).filter((H)=>H!==V)];for(let H of B)if(K0(H))return H;return null}catch{return null}}function QD(){let $=[OX],Z=process.env.CLINE_WRAPPER_PATH?.trim();if(Z)$.push(I1(I1(Z)));let Q=process.execPath?.trim();if(Q)$.push(I1(Q));return[...new Set($.map((W)=>u(W)))]}function WD($,Z){let Q=$;while(!0){let W=u(Q,"package.json");if(K0(W))try{if(JSON.parse(G2(W,"utf8")).name===Z)return Q}catch{}let J=u(Q,"node_modules",Z,"package.json");if(K0(J))return I1(J);let X=u(Q,"..");if(X===Q)return null;Q=X}}function RX($){for(let Z of QD()){let Q=WD(Z,$);if(Q)return Q}return null}function JD($){let Q=I1($);for(let W=0;W<4;W++){let J=u(Q,"package.json");if(K0(J))try{let Y=JSON.parse(G2(J,"utf8"));return Y!=null&&typeof Y==="object"&&"cline"in Y}catch{return!1}let X=u(Q,"..");if(X===Q)return!1;Q=X}return!1}function EX($,Z){let Q=Z.startsWith("file:")?TX(Z):pU(Z)?Z:u(I1($),Z);if(K0(Q)&&V8.has(B8(Q)))return Q;for(let W of V8){let J=`${Q}${W}`;if(K0(J))return J}for(let W of V8){let J=u(Q,`index${W}`);if(K0(J))return J}return null}function NX($){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 XD($){return B8($)!==".ts"}function CX($,Z,Q=new Set){if(Q.has($)||!K0($))return;if(Q.add($),!V8.has(B8($)))return;let W=G2($,"utf8"),J=XD($);for(let X of NX(W)){if(X.startsWith("node:")||nZ.has(X))continue;if(G6(X)){if(!J)continue;if(Object.hasOwn(lZ,X)||Object.hasOwn(lZ,H2(X))||pZ($,X)||MX(X)&&zX(X)||Z&&zX(X))continue;throw Error(`Cannot find module '${H2(X)}'`)}let Y=EX($,X);if(Y)CX(Y,Z,Q)}}function wX($,Z=new Set,Q=new Set){if(Z.has($)||!K0($))return Q;if(Z.add($),!V8.has(B8($)))return Q;let W=G2($,"utf8");for(let J of NX(W)){if(Q.add(J),G6(J))continue;let X=EX($,J);if(X)wX(X,Z,Q)}return Q}function YD($,Z){let Q=iZ($),W={},J=wX($),X=new Set(aU);for(let[Y,j]of Object.entries(lZ)){try{Q.resolve(Y);continue}catch{}W[Y]=j}for(let Y of J)if(G6(Y)&&(MX(Y)||Z))X.add(Y);for(let Y of X){if(Object.hasOwn(W,Y)||pZ($,Y))continue;let j=rZ(Y);if(j)W[Y]=j}if(!Z)return W;for(let Y of J){if(!G6(Y)||Object.hasOwn(W,Y)||pZ($,Y)||Y.startsWith("node:")||nZ.has(Y))continue;let j=rZ(Y);if(j)W[Y]=j}return W}function jD($){let Z=B8($);return Z===".ts"||Z===".tsx"||Z===".mts"||Z===".cts"}var _$;function VD(){if(_$!==void 0)return _$;let $=RX("jiti");if(!$)return _$=null,null;let Z=u($,"dist","babel.cjs");if(!K0(Z))return _$=null,null;try{let W=iZ(Z)(Z);_$=typeof W==="function"?W:null}catch{_$=null}return _$}async function PX($,Z={}){let Q=!JD($);CX($,Q);let W=YD($,Q),J=eU(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])=>jD(G)).map(([G])=>G),V=VD(),B=V?(G)=>V({...G,interopDefault:!0}):void 0;return await Y($,{alias:J,cache:Z.useCache,requireCache:Z.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...nZ],transformModules:j,tryNative:!1,...B?{transform:B}:{}}).import($,{})}function SX($,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 bX($){return typeof $==="object"&&$!==null}function sZ($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function GD($,Z){if(!bX($.manifest))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);if(!sZ($.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")&&!sZ($.manifest.providerIds))throw Error(`Invalid plugin module at ${Z}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!sZ($.manifest.modelIds))throw Error(`Invalid plugin module at ${Z}: manifest.modelIds must be a string array when provided`)}function KD($,Z){if(!bX($))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"`);GD($,Z)}async function oZ($,Z={}){let Q=BD(Z.cwd??process.cwd(),$),W=await PX(Q,{useCache:Z.useCache}),J=Z.exportName??"plugin",X=W.default??W[J];KD(X,Q);let Y=X,j=Y.setup,V=j?(B,H)=>{let G={...Z.session,...H.session},K={...H,session:Object.keys(G).length>0?G:void 0,client:Z.client??H.client,user:Z.user??H.user,workspaceInfo:Z.workspaceInfo??H.workspaceInfo,automation:Z.automation??H.automation,logger:Z.logger??H.logger,telemetry:Z.telemetry??H.telemetry};return j(B,K)}:void 0;return{...Y,manifest:HD(Y.manifest),setup:V}}async function yX($,Z={}){return(await H8($,Z)).plugins}async function H8($,Z={}){let Q=[],W=[],J=new Map,X=0;for(let j of $)try{let V=await oZ(j,Z);if(!SX(V.manifest,Z))continue;let B=J.get(V.name);if(B)W.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:j,overriddenPluginPath:B.pluginPath,message:`Plugin "${V.name}" from ${j} overrides ${B.pluginPath}`});J.set(V.name,{plugin:V,pluginPath:j,order:X++})}catch(V){let B=V instanceof Error?V.message:String(V);Q.push({pluginPath:j,phase:"load",message:B,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 $Q}from"node:fs";import{createRequire as gX}from"node:module";import{dirname as F6,join as K2}from"node:path";import{fileURLToPath as _D}from"node:url";import{spawn as FD}from"node:child_process";import{basename as AD}from"node:path";import{augmentNodeCommandForDebug as fD,withResolvedClineBuildEnv as UD}from"@cline/shared";function hX($){if($ instanceof Error)return $;return Error(String($))}var DD="CLINE_JS_RUNTIME_PATH";function kX($){let Z=$?.trim();if(!Z)return!1;let Q=AD(Z).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function IX($={}){let Z=$.env??process.env,Q=$.runtimeExecutable?.trim()||Z[DD]?.trim();if(Q)return Q;let W=$.execPath?.trim()||process.execPath;if(kX(W))return W;for(let J of[Z.BUN_EXEC_PATH,Z.npm_node_execpath,Z.NODE]){let X=J?.trim();if(X&&kX(X))return X}return"node"}function LD($,Z={}){let Q=IX({env:Z.env,execPath:Z.execPath,runtimeExecutable:Z.runtimeExecutable});return fD([Q,...$],{env:Z.env,execArgv:Z.execArgv,debugRole:Z.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class K6{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=LD($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=FD(Z[0]??IX(this.options),Z.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:UD(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: ${hX(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:(B)=>Y(B),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,(B)=>{if(!B)return;let H=this.clearPendingRequest(J);if(!H)return;H.reject(Error(`${this.processLabel} failed to send call "${$}": ${hX(B).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 zD($){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 G8($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function TD(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function OD(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=gX($).resolve(`${TD()}/package.json`),W=K2(F6(Q),"extensions","plugin-sandbox-bootstrap.js");return $Q(W)?W:void 0}catch{return}}function qD(){let $=process.execPath?.trim();if(!$)return;let Z=K2(F6(F6($)),"extensions","plugin-sandbox-bootstrap.js");return $Q(Z)?Z:void 0}function MD(){let $=F6(_D(import.meta.url)),Z=gX(import.meta.url),Q=[K2($,"plugin-sandbox-bootstrap.js"),K2($,"extensions","plugin-sandbox-bootstrap.js"),K2($,"agents","plugin-sandbox-bootstrap.js"),OD(),qD()];for(let X of Q.filter((Y)=>typeof Y==="string"))if($Q(X))return{file:X};let W=K2($,"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(`
46
- `)}}var tZ=MD();function eZ($,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 F2($){let Z=new K6({name:"plugin-sandbox",..."file"in tZ?{bootstrapFile:tZ.file}:{bootstrapScript:tZ.script},onEvent:$.onEvent}),Q=eZ($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),W=eZ($.hookTimeoutMs,3000),J=eZ($.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 B=V.plugins.map(zD);return{extensions:B.map((G)=>{let K={name:G.name,__clinePluginPath:G.pluginPath,manifest:G.manifest,setup:(F)=>{RD(F,Z,G,J,j),ED(F,Z,G,J,j),ND(F,Z,G,J,j),wD(F,Z,G,J,j),CD(F,G)}};return K.hooks=SD(Z,G,W,j),K}),failures:V.failures,pluginPaths:B.map((G)=>G.pluginPath),shutdown:async()=>{await Z.shutdown()},warnings:V.warnings}}function RD($,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(B){if(!G8(B))throw B;return await J(),await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:j,context:V},{timeoutMs:W})}}};$.registerTool(Y)}}function ED($,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(!G8(j))throw j;return await J(),await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:Y},{timeoutMs:W})}}})}function ND($,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(!G8(Y))throw Y;return await J(),await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:W})}}:X.content??""})}function CD($,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 wD($,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 xX(j)?j:Y}catch(j){if(!G8(j))throw j;await J();let V=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:Y},{timeoutMs:W});return xX(V)?V:Y}}})}function xX($){return Array.isArray($)&&$.every((Z)=>typeof Z==="object"&&Z!==null&&("role"in Z)&&("content"in Z))}function PD($,Z,Q,W,J){return async(X)=>{try{return await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:X},{timeoutMs:W})}catch(Y){if(!G8(Y))throw Y;return await J(),await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:X},{timeoutMs:W})}}}function SD($,Z,Q,W){let J={};for(let X of Z.hooks??[])J[X]=PD($,Z.pluginId,X,Q,W);return Object.keys(J).length>0?J:void 0}var QQ="package.json",gD="package";function WQ($){return ID($)}function JQ($){return kD($)}function mD($){try{return U6($)&&yD($).isDirectory()}catch{return!1}}function XQ($){let Z=[],Q=new Set;for(let W of $){let J=f6(W);if(Q.has(J))continue;Q.add(J),Z.push(J)}return Z}function vX($){let Z=XQ($);return uZ(Z)}function cX($){return WQ($).flatMap((Z)=>JQ(Z)).filter((Z)=>U6(Z))}function vD($,Z){let Q=[];for(let W of $)try{Q.push(...mX([W],Z))}catch{}return Q}function ZQ($){return typeof $==="object"&&$!==null}function cD($){try{let Z=JSON.parse(bD(D6($,QQ),"utf8"));if(!ZQ(Z)||!ZQ(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(!ZQ(J)||!Array.isArray(J.paths))continue;for(let X of J.paths)if(typeof X==="string")W.push(X)}return W}catch{return[]}}function uX($,Z){let Q=f6(Z);return cD($).some((W)=>f6($,W)===Q)}function uD($,Z){return hD($)===gD&&U6(D6(A6($),QQ))&&uX(A6($),Z)}function dD($){let Z=f6($),Q=[],W=A6(Z);while(!0){if(uD(W,Z)){Q.push(W);break}if(U6(D6(W,QQ))){if(uX(W,Z))Q.push(W);break}let J=A6(W);if(J===W)break;W=J}return XQ(Q)}function z$($={}){let Z=$.cwd??process.cwd(),Q=cX($.workspacePath),W=mX($.pluginPaths??[],Z);return vX([...W,...Q])}function lD($={}){let Z=$.cwd??process.cwd(),Q=cX($.workspacePath),W=vD($.pluginPaths??[],Z);return vX([...W,...Q])}function T$($){let Z=[];for(let Q of $)for(let W of dD(Q)){let J=D6(W,xD);if(mD(J))Z.push(J)}return XQ(Z)}function dX($={}){return T$(lD($))}async function L6($={}){let Z=z$($);if(Z.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let W=await H8(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 F2({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}}var _6="SKILL.md",tD="managed.json",eD=new Set([".md",".markdown",".txt"]);function HQ($){return $.trim().toLowerCase()}function A2($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function T6($){return eD.has(z6($).toLowerCase())}function rX($){let Z=[],Q=new Set;for(let W of $){let J=K8(W);if(Q.has(J))continue;Q.add(J),Z.push(W)}return Z}function $L($){let Z=[...$?.directories??UQ($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...dX({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return rX(Z)}async function GQ($){try{let Z=await jQ($,{withFileTypes:!0}),Q=[];for(let W of Z){if(!W.isDirectory())continue;let J=E0($,W.name),X=E0(J,tD);try{let Y=await pD(X,"utf8"),j=JSON.parse(Y);if(j&&typeof j==="object")Q.push(J)}catch(Y){if(A2(Y))continue;if(Y?.name==="SyntaxError")continue;throw Y}}return Q.sort((W,J)=>W.localeCompare(J))}catch(Z){if(A2(Z))return[];throw Z}}function KQ($){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=oD.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 O6($,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 f2($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function ZL($,Z){if(F1($.filePath).toLowerCase()!==lX.toLowerCase())return F1($.filePath,z6($.filePath));if(Z&&K8($.filePath)===K8(Z,lX))return"Workspace AGENTS.md";if(K8($.filePath)===K8(iD()))return"Global AGENTS.md";return F1($.filePath,z6($.filePath))}function FQ($,Z){let{data:Q,body:W,parseError:J}=KQ($);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=O6(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing skill name.");return{name:j,description:O6(Q.description,"description",!1),disabled:f2(Q.disabled,"disabled")??(f2(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function AQ($,Z){let{data:Q,body:W,parseError:J}=KQ($);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=O6(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing rule name.");return{name:Y,disabled:f2(Q.disabled,"disabled")??(f2(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function fQ($,Z){let{data:Q,body:W,parseError:J}=KQ($);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=O6(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing workflow name.");return{name:Y,disabled:f2(Q.disabled,"disabled")??(f2(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function UQ($){return aD($)}function DQ($){return nD($)}function LQ($){return sD($)}async function iX($){if(F1($)===".cline"){let Z=await GQ($);return(await Promise.all(Z.map((W)=>iX(E0(W,VQ))))).flat()}try{let Z=await jQ($,{withFileTypes:!0}),Q=[];for(let W of Z){if(W.isFile()&&W.name===_6){Q.push({directoryPath:$,fileName:W.name,filePath:E0($,W.name)});continue}let J=E0($,W.name);if(W.isDirectory()||W.isSymbolicLink()&&await YQ(J).then((Y)=>Y.isDirectory()).catch((Y)=>{if(A2(Y))return!1;throw Y}))Q.push({directoryPath:J,fileName:_6,filePath:E0(J,_6)})}return Q}catch(Z){if(A2(Z))return[];throw Z}}async function q6($){if(F1($)===".cline"){let Z=await GQ($);return(await Promise.all(Z.map((W)=>q6(E0(W,"rules.md"))))).flat()}try{if((await YQ($)).isFile())return[{directoryPath:rD($),fileName:F1($),filePath:$}]}catch(Z){if(!A2(Z))throw Z}try{let Q=(await jQ($,{withFileTypes:!0})).filter((J)=>J.isFile()&&T6(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:E0($,J.name)})),W=E0($,"AGENTS.md");try{if((await YQ(W)).isFile()){if(!Q.some((Y)=>Y.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:W})}}catch{}return Q}catch(Z){if(A2(Z))return[];throw Z}}async function QL($){if(F1($)===".cline"){let Z=await GQ($);return(await Promise.all(Z.map((W)=>q6(E0(W,BQ))))).flat()}return q6($)}function _Q($){let Z=$L($),Q=$?.workspacePath?E0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?rX([...Z,Q]):Z,discoverFiles:iX,includeFile:(W)=>W===_6,parseFile:(W)=>FQ(W.content,F1(W.directoryPath)),resolveId:(W)=>HQ(W.name)}}function zQ($){let Z=$?.directories??DQ($?.workspacePath),Q=$?.workspacePath?E0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:q6,includeFile:(W,J)=>W===".clinerules"||T6(W)||T6(J),parseFile:(W)=>AQ(W.content,ZL(W,$?.workspacePath)),resolveId:(W)=>HQ(W.name)}}function TQ($){let Z=$?.directories??LQ($?.workspacePath),Q=$?.workspacePath?E0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:QL,includeFile:(W)=>T6(W),parseFile:(W)=>fQ(W.content,F1(W.filePath,z6(W.filePath))),resolveId:(W)=>HQ(W.name)}}function nX($){let Z=[_Q($?.skills),zQ($?.rules),TQ($?.workflows)];return new j8(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as aX}from"@cline/shared";function WL($,Z){if($.description?.trim())return aX($.description,".");if(Z==="workflow")return;return aX($.instructions,".")}function JL($){return $.disabled!==!0}function sX($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,W])=>({id:Q,record:W})).filter(({record:Q})=>JL(Q.item)).map(({id:Q,record:W})=>({id:Q,name:W.item.name,instructions:W.item.instructions,description:WL(W.item,Z),kind:Z})).sort((Q,W)=>Q.name.localeCompare(W.name))}function F8($){let Z=new Map;for(let Q of[...sX($,"workflow"),...sX($,"skill")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,W)=>Q.name.localeCompare(W.name))}function oX($,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=F8(Z).find((j)=>j.name===W);return Y?`${Y.instructions}${X}`:$}function tX($){return $.disabled!==!0}function M6($){if($.length===0)return"";return`
45
+ </html>`;function bW($){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 Bf($){let Q=new TextEncoder().encode($),J=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(J)}function Hf($=32){let Z=new Uint8Array($);return crypto.getRandomValues(Z),bW(Z)}async function s4(){let $=Hf(),Z=bW(await Bf($));return{verifier:$,challenge:Z}}function t4($){return $.endsWith("/")?$.slice(0,-1):$}function q$($,Z){return new URL(Z,`${t4($)}/`).toString()}function B2($,Z={}){let Q=$.trim();if(!Q)return{};try{let J=new URL(Q);return{code:J.searchParams.get("code")??void 0,state:J.searchParams.get("state")??void 0,provider:Z.includeProvider?J.searchParams.get("provider")??void 0:void 0}}catch{}if(Z.allowHashCodeState&&Q.includes("#")){let[J,W]=Q.split("#",2);return{code:J||void 0,state:W||void 0}}if(Q.includes("code=")){let J=new URLSearchParams(Q);return{code:J.get("code")??void 0,state:J.get("state")??void 0,provider:Z.includeProvider?J.get("provider")??void 0:void 0}}return{code:Q}}function Gf($){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 E0($){if(!$)return null;try{let Z=$.split(".");if(Z.length!==3)return null;let Q=Z[1];if(!Q)return null;let J=Q.replace(/-/g,"+").replace(/_/g,"/"),W=J.padEnd(J.length+(4-J.length%4)%4,"="),X=Gf(W);if(!X)return null;return JSON.parse(X)}catch{return null}}function H2($){try{let Z=JSON.parse($),Q=Z.error,J=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,W=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:J,message:W}}catch{return{}}}function G2($,Z){return Date.now()>=$.expires-Z}async function K2($){if(!$.onManualCodeInput){let X=await $.waitForCallback();return{code:X?.code,state:X?.state,provider:X?.provider,error:X?.error}}let Z,Q,J=$.onManualCodeInput().then((X)=>{Z=X,$.cancelWait()}).catch((X)=>{Q=X instanceof Error?X:Error(String(X)),$.cancelWait()}),W=await $.waitForCallback();if(Q)throw Q;if(W?.code||W?.error)return{code:W.code,state:W.state,provider:W.provider,error:W.error};if(Z)return B2(Z,$.parseOptions);if(await J,Q)throw Q;if(Z)return B2(Z,$.parseOptions);return{}}var e4={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},IW={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},_Z="https://api.workos.com",Kf="/auth",yW=Array.from({length:11},($,Z)=>48801+Z),Ff=300000,Af=30000,F2=30000,ff=300,Uf=5;class x1 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 Df($){let Z=Date.parse($);if(Number.isNaN(Z))throw Error(`Invalid expiresAt value: ${$}`);return Z}function TZ($,Z,Q={}){let J=$.userInfo.clineUserId??Q.accountId,W=$.refreshToken??Q.refresh;if(!W)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:W,expires:Df($.expiresAt),accountId:J??void 0,email:$.userInfo.email||Q.email,metadata:{provider:Z,tokenType:$.tokenType,userInfo:$.userInfo}}}async function OZ($){if(!$)return{};return typeof $==="function"?await $():$}function hW($,Z){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return Z;return Math.floor($)}async function kW($){await new Promise((Z)=>setTimeout(Z,$))}function qZ($,Z){if(!$.success||!$.data?.accessToken)throw Error(Z);return $.data}async function xW($,Z){let Q=await fetch(q$(_Z,IW.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(Z?.requestTimeoutMs??F2)}),J=await Q.json().catch(()=>({}));if(!Q.ok)throw new x1(`Device authorization failed: ${Q.status}${J.error_description?` - ${J.error_description}`:""}`,{status:Q.status,errorCode:J.error});if(!J.device_code||!J.user_code||!J.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:J.device_code,userCode:J.user_code,verificationUri:J.verification_uri,verificationUriComplete:J.verification_uri_complete,expiresInSeconds:hW(J.expires_in,ff),pollIntervalSeconds:hW(J.interval,Uf)}}async function gW($){let Z=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=Z){let J=await fetch(q$($.workosApiBaseUrl,IW.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)}),W=await J.json().catch(()=>({}));if(J.ok){if(!W.access_token||!W.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:W.access_token,refreshToken:W.refresh_token,tokenType:W.token_type??"Bearer"}}switch(W.error){case"authorization_pending":{await kW(Q*1000);break}case"slow_down":{Q+=1,await kW(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new x1(W.error_description||"WorkOS authorization failed",{status:J.status,errorCode:W.error});default:throw new x1(`WorkOS token polling failed: ${J.status}${W.error_description?` - ${W.error_description}`:""}`,{status:J.status,errorCode:W.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function mW($,Z,Q){let J={accessToken:$.accessToken,refreshToken:$.refreshToken},W=await fetch(q$(Z.apiBaseUrl,e4.register),{method:"POST",headers:{"Content-Type":"application/json",...await OZ(Z.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Z.requestTimeoutMs??F2)});if(!W.ok){let Y=await W.text().catch(()=>""),j=H2(Y);throw new x1(`Token registration failed: ${W.status}${j.message?` - ${j.message}`:""}`,{status:W.status,errorCode:j.code})}let X=await W.json();return TZ(qZ(X,"Invalid token exchange response"),Q??Z.provider)}async function Lf($,Z,Q,J){let W={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:Z,provider:J??Q.provider},X=await fetch(q$(Q.apiBaseUrl,e4.token),{method:"POST",headers:{"Content-Type":"application/json",...await OZ(Q.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Q.requestTimeoutMs??F2)});if(!X.ok){let j=await X.text().catch(()=>""),V=H2(j);throw new x1(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let Y=await X.json();return TZ(qZ(Y,"Invalid token exchange response"),J??Q.provider)}async function zZ($){y1($.telemetry,$.provider??"cline");let Z=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:yW,J=$.callbackPath??Kf,W=Z?null:await G1({ports:Q,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=W?.callbackUrl||`http://127.0.0.1:${Q[0]??yW[0]}${J}`;try{let Y;if(Z){let j=LZ().workOsClientId,V=await xW(j,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let B=await gW({clientId:j,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??F2,workosApiBaseUrl:_Z,onProgress:$.callbacks.onProgress});Y=await mW(B,$,$.provider)}else{let j=new URL(q$($.apiBaseUrl,e4.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,B=$.provider,H=await K2({waitForCallback:W?.waitForCallback??(async()=>null),cancelWait:W?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(H.error)throw Error(`OAuth error: ${H.error}`);if(V=H.code,B=H.provider??B,!V){let G=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),K=B2(G,{includeProvider:!0});V=K.code,B=K.provider??B}if(!V)throw Error("Missing authorization code");Y=await Lf(V,X,$,B)}return h1($.telemetry,$.provider??"cline"),I1($.telemetry,{id:Y.accountId,email:Y.email,provider:$.provider??"cline"}),Y}catch(Y){throw k1($.telemetry,$.provider??"cline",Y instanceof Error?Y.message:String(Y)),Y}finally{W?.close()}}async function _f($){return await xW(LZ().workOsClientId,$)}async function Tf($){let Z=$.provider??"cline";y1($.telemetry,Z);try{let Q=await gW({clientId:LZ().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??F2,workosApiBaseUrl:_Z}),J=await mW(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return h1($.telemetry,Z),I1($.telemetry,{id:J.accountId,email:J.email,provider:Z}),J}catch(Q){throw k1($.telemetry,Z,Q instanceof Error?Q.message:String(Q)),Q}}async function vW($,Z){let Q=await fetch(q$(Z.apiBaseUrl,e4.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await OZ(Z.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(Z.requestTimeoutMs??F2)});if(!Q.ok){let X=await Q.text().catch(()=>""),Y=H2(X);throw new x1(`Token refresh failed: ${Q.status}${Y.message?` - ${Y.message}`:""}`,{status:Q.status,errorCode:Y.code})}let J=await Q.json(),W=$.metadata?.provider??Z.provider;return TZ(qZ(J,"Invalid token refresh response"),W,$)}async function MZ($,Z,Q){if(!$)return null;let J=Q?.refreshBufferMs??Ff,W=Q?.retryableTokenGraceMs??Af;if(Q?.forceRefresh!==!0&&!G2($,J))return $;try{return await vW($,Z)}catch(Y){if(Y instanceof x1&&Y.isLikelyInvalidGrant())return T$(Z.telemetry,Z.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}A0();import{nanoid as Of}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 $6 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 qf($,Z,Q=X0.redirectUri){let J=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(!J.ok)return{type:"failed"};let W=await J.json();if(!W.access_token||!W.refresh_token||typeof W.expires_in!=="number")return{type:"failed"};return{type:"success",access:W.access_token,refresh:W.refresh_token,expires:Date.now()+W.expires_in*1000,email:W.email,idToken:W.id_token}}async function zf($){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 J=await Z.text().catch(()=>""),W=H2(J);throw new $6(`Token refresh failed: ${Z.status}${W.message?` - ${W.message}`:""}`,{status:Z.status,errorCode:W.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 $6)throw Z;return{type:"failed"}}}async function Mf($="pi"){let{verifier:Z,challenge:Q}=await s4(),J=Of(32),W=new URL(X0.authorizationEndpoint);return W.searchParams.set("response_type","code"),W.searchParams.set("client_id",X0.clientId),W.searchParams.set("redirect_uri",X0.redirectUri),W.searchParams.set("scope",X0.scopes),W.searchParams.set("code_challenge",Q),W.searchParams.set("code_challenge_method","S256"),W.searchParams.set("state",J),W.searchParams.set("id_token_add_organizations","true"),W.searchParams.set("codex_cli_simplified_flow","true"),W.searchParams.set("originator",$),{verifier:Z,state:J,url:W.toString()}}function Rf(){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 Nf($,Z){let Q=Z?E0(Z):E0($),J=Q?Q:E0($),X=J?.[X0.jwtClaimPath]?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;let Y=J?.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=J?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return null}function cW($,Z){let Q=Nf($.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 RZ($){y1($.telemetry,"openai-codex");let Z=Rf(),{verifier:Q,state:J,url:W}=await Mf($.originator),X=await G1({host:Z.host,ports:[Z.port],callbackPath:Z.callbackPath,expectedState:J});$.onAuth({url:W,instructions:"Continue the authentication process in your browser."});let Y;try{let j=await K2({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(j.state&&j.state!==J)throw Error("State mismatch");if(Y=j.code,!Y){let H=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=B2(H,{allowHashCodeState:!0});if(G.state&&G.state!==J)throw Error("State mismatch");Y=G.code}if(!Y)throw Error("Missing authorization code");let V=await qf(Y,Q,Z.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let B=cW(V);return h1($.telemetry,"openai-codex"),I1($.telemetry,{id:B.accountId,email:B.email,provider:"openai-codex"}),B}catch(j){throw k1($.telemetry,"openai-codex",j instanceof Error?j.message:String(j)),j}finally{X.close()}}async function uW($,Z){let Q=await zf($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let J=cW(Q,Z);if(!J.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return J}async function NZ($,Z){if(!$)return null;let Q=Z?.refreshBufferMs??X0.refreshBufferMs,J=Z?.retryableTokenGraceMs??X0.retryableTokenGraceMs;if(Z?.forceRefresh!==!0&&!G2($,Q))return $;try{return await uW($.refresh,$)}catch(X){if(X instanceof $6&&X.isLikelyInvalidGrant())return T$(Z?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}A0();import{nanoid as dW}from"nanoid";class EZ{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(),J=this.ttlMs){this.pruneExpired(Q),this.entries.delete($);while(this.entries.size>=this.maxEntries){let W=this.entries.keys().next().value;if(W===void 0)break;this.entries.delete(W)}this.entries.set($,{value:Z,expiresAt:Q+J})}pruneExpired($){for(let[Z,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(Z)}}var Ef="a8331954c0cf48ba99b5dd223a14c6ea",wf="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",Cf="openid offline_access",CZ="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",Pf="c1aba3deed5740659981a752714eba33",Sf="https://login-ext.identity.oraclecloud.com",bf="openid offline_access",PZ="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm";var yf="/auth/oca",hf=Array.from({length:11},($,Z)=>48801+Z),kf=300000,If=30000,lW=30000,xf=600000;class Z6 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 g1={internal:{clientId:Ef,idcsUrl:wf,scopes:Cf,baseUrl:CZ},external:{clientId:Pf,idcsUrl:Sf,scopes:bf,baseUrl:PZ}},B8=new Map,gf=86400000,mf=300000,vf=32,wZ=new EZ(gf,vf);function pW($){if(typeof $==="function")return $();return $??"internal"}function rW($){return{internal:{clientId:$?.internal?.clientId??g1.internal.clientId,idcsUrl:$?.internal?.idcsUrl??g1.internal.idcsUrl,scopes:$?.internal?.scopes??g1.internal.scopes,baseUrl:$?.internal?.baseUrl??g1.internal.baseUrl},external:{clientId:$?.external?.clientId??g1.external.clientId,idcsUrl:$?.external?.idcsUrl??g1.external.idcsUrl,scopes:$?.external?.scopes??g1.external.scopes,baseUrl:$?.external?.baseUrl??g1.external.baseUrl}}}function cf($=Date.now()){let Z=$-xf;for(let[Q,J]of B8.entries())if(J.createdAt<Z)B8.delete(Q)}function uf($,Z,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let W=E0(Z)?.exp;if(typeof W==="number"&&W>0)return W*1000;let Y=E0(Q)?.exp;if(typeof Y==="number"&&Y>0)return Y*1000;return Date.now()+3600000}function iW($,Z,Q){let J=$.access_token;if(!J)throw Error("Token response did not include an access token");let W=$.refresh_token??Q?.refresh;if(!W)throw Error("Token response did not include a refresh token");let X=E0($.id_token),Y=E0(J),j=X?.sub??Y?.sub,V=X?.email??Y?.email;return{access:J,refresh:W,expires:uf($,J,$.id_token),accountId:j??Q?.accountId,email:V??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:Z,subject:j,idToken:$.id_token}}}async function nW($,Z){let Q=t4($),J=wZ.get(Q);if(J)return J;let W=`${Q}/.well-known/openid-configuration`,X=await fetch(W,{method:"GET",signal:AbortSignal.timeout(Z)});if(!X.ok){let V=`${Q}/oauth2/v1/token`;return wZ.set(Q,V,Date.now(),mf),V}let j=(await X.json()).token_endpoint||`${Q}/oauth2/v1/token`;return wZ.set(Q,j),j}function aW($){return{code:$.error,message:$.error_description}}async function df($){let Z=B8.get($.state);if(!Z)throw Error("No PKCE verifier found for this state");B8.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,J=await nW(Q.idcsUrl,$.requestTimeoutMs),W=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:Z.redirectUri,client_id:Q.clientId,code_verifier:Z.verifier}),X=await fetch(J,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:W,signal:AbortSignal.timeout($.requestTimeoutMs)}),Y=await X.json();if(!X.ok){let V=aW(Y);throw new Z6(`Token exchange failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code})}let j=E0(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 iW(Y,$.mode)}function lf($){let Z=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${t4(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 SZ($){y1($.telemetry,"oca");let Z=rW($.config),Q=pW($.mode),J=$.callbackPorts?.length?$.callbackPorts:hf,W=$.callbackPath??yf,X=$.requestTimeoutMs??lW,Y=await G1({ports:J,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=Y.callbackUrl;if(!j)throw Error("Unable to bind local OAuth callback server");let V=dW(16),B=dW(16),{verifier:H,challenge:G}=await s4();cf(),B8.set(V,{verifier:H,nonce:B,mode:Q,redirectUri:j,createdAt:Date.now()});let K=lf({callbackUrl:j,mode:Q,state:V,nonce:B,challenge:G,config:Z});$.callbacks.onAuth({url:K,instructions:"Continue the authentication process in your browser."});try{let F=await K2({waitForCallback:Y.waitForCallback,cancelWait:Y.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),A=F.code,D=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(!D||D!==V)throw Error("State mismatch");let U=await df({code:A,state:D,mode:Q,config:Z,requestTimeoutMs:X});return h1($.telemetry,"oca"),I1($.telemetry,{id:U.accountId,email:U.email,provider:"oca"}),U}catch(F){throw k1($.telemetry,"oca",F instanceof Error?F.message:String(F)),F}finally{Y.close()}}async function oW($,Z={}){let Q=rW(Z.config),J=Z.requestTimeoutMs??lW,W=$.metadata?.mode,X=W==="internal"||W==="external"?W:pW(Z.mode),Y=X==="external"?Q.external:Q.internal,j=await nW(Y.idcsUrl,J),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:Y.clientId}),B=await fetch(j,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(J)}),H=await B.json();if(!B.ok){let G=aW(H);throw new Z6(`Token refresh failed: ${B.status}${G.message?` - ${G.message}`:""}`,{status:B.status,errorCode:G.code})}return iW(H,X,$)}async function bZ($,Z,Q){if(!$)return null;let J=Z?.refreshBufferMs??Q?.refreshBufferMs??kf,W=Z?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??If;if(Z?.forceRefresh!==!0&&!G2($,J))return $;try{return await oW($,Q)}catch(Y){if(Y instanceof Z6&&Y.isLikelyInvalidGrant())return T$(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}import{getClineEnvironmentConfig as sW}from"@cline/shared";var Q6="workos:";function pf($){let Z=$.trim();return Z.toLowerCase().startsWith(Q6)?Z:`${Q6}${Z}`}function rf($){let Z=$.trim();return Z.toLowerCase().startsWith(Q6)?Z.slice(Q6.length):Z}function nf($){let Q=E0($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function af($,Z){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let J=nf(Z);if(J)return J;return Date.now()-1}function of($,Z){let Q=$.auth?.accessToken?.trim(),J=$.auth?.refreshToken?.trim();if(!Q||!J)return null;let W=Z?.normalizeAccessToken?.(Q)??Q;if(!W)return null;return{access:W,refresh:J,expires:af($,W),accountId:$.auth?.accountId}}function sf($){let Z=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:Z,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},J={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(J,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return J}function yZ($){let Z=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:Z,getApiKey(Q){let J=Q?.auth?.accessToken?.trim();if(J)return $.formatAccessToken?.(J)??J;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return sf({...Q,storageProviderId:Z,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function tW($){return yZ({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:pf,normalizeStoredAccessToken:rf,login:({settings:Z,callbacks:Q,telemetry:J})=>zZ({apiBaseUrl:Z?.baseUrl?.trim()||sW().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:J}),refresh:({settings:Z,credentials:Q,forceRefresh:J,telemetry:W})=>MZ(Q,{apiBaseUrl:Z.baseUrl?.trim()||sW().apiBaseUrl,telemetry:W},{forceRefresh:J})})}var tf=[tW({providerId:"cline"}),tW({providerId:"cline-pass",storageProviderId:"cline"}),yZ({providerId:"oca",login:({settings:$,callbacks:Z,telemetry:Q})=>SZ({mode:$?.oca?.mode,callbacks:Z,telemetry:Q}),refresh:({settings:$,credentials:Z,forceRefresh:Q,telemetry:J})=>bZ(Z,{forceRefresh:Q,telemetry:J},{mode:$.oca?.mode,telemetry:J})}),yZ({providerId:"openai-codex",login:({callbacks:$,telemetry:Z})=>RZ({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:Z}),refresh:({credentials:$,forceRefresh:Z,telemetry:Q})=>NZ($,{forceRefresh:Z,telemetry:Q})})],ef=new Map(tf.map(($)=>[$.providerId,$]));function K0($){return ef.get($.trim().toLowerCase())}function H8($){return K0($)!==void 0}function $U($){return K0($)?.storageProviderId}function ZU($,Z){let Q=K0(Z),J=Q?.storageProviderId??Z,W=$.getProviderSettings(J);return Q?.getApiKey(W)??J6(Z,W)}async function hZ($,Z,Q){let J=K0(Z);if(!J)throw Error(`Provider "${Z}" does not support OAuth login`);let W=$.getProviderSettings(J.storageProviderId),X=await J.login({settings:W,callbacks:Q.callbacks,telemetry:Q.telemetry});return J.saveCredentials({manager:$,settings:W,credentials:X})}function kZ($,Z){let Q=K0($);if(!Q)return null;return of(Z,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function G8($){let Z=K0($.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 J6($,Z){let Q=K0($);if(Q)return Q.getApiKey(Z);return Z?.auth?.accessToken?.trim()||Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0}function QU($,Z){let Q=K0($);if(!Q)return Z.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:Z.access}})??Z.access}import*as g0 from"@cline/llms";import{z as R}from"zod";import*as n from"@cline/llms";function IZ($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let J of[Q.id,Q.name,Q.model])if(typeof J==="string"&&J.trim())return J.trim()}return""}).filter((Z)=>Z.length>0)}function JU($,Z){let Q=IZ($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let J=$,W=IZ(J.data??J.models);if(W.length>0)return W;if(J.models&&typeof J.models==="object"&&!Array.isArray(J.models)){let Y=Object.keys(J.models).filter((j)=>j.trim().length>0);if(Y.length>0)return Y}let X=J.providers?.[Z];if(X&&typeof X==="object"){let j=IZ(X.models??X);if(j.length>0)return j}return[]}async function W6($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return JU(await Q.json(),Z)}function eW($){return $.replace(/\/+$/,"")}function X6($,Z,Q){let J=Q?.trim();if(!J)return;let W=$?.trim();if(!W||!Z?.trim())return J;try{let X=new URL(J),Y=new URL(Z),j=new URL(W);if(X.origin!==Y.origin)return J;let V=eW(Y.pathname),B=eW(j.pathname);if(V&&X.pathname.startsWith(`${V}/`)){let H=X.pathname.slice(V.length);j.pathname=`${B}${H}`}else j.pathname=X.pathname;return j.search=X.search,j.hash=X.hash,j.toString()}catch{return J}}function WU($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function XU($){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 YU=Object.values(n.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:WU($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),QX=Object.fromEntries(YU.map(($)=>[$.id,$]));function jU($){return QX[$]}function VU(){return Object.fromEntries(Object.entries(QX).filter(([,$])=>XU($)))}function JX($=[]){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 WX="https://models.dev/api.json",BU=600000,XX=300000,HU=5000,j6=new Map,K8=new Map,gZ=new Map,Y6=new Map;async function GU(){return n.getGeneratedProviderModels()}async function KU($,Z={},Q={},J={},W={},X={}){if($==="litellm")return n.sortModelsByReleaseDate(J);let Y=await GU(),j=n.resolveProviderModelCatalogKeys($),V=Object.assign({},...j.map((K)=>Y[K]??{})),B=Boolean(n.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),H=Object.keys(W).length>0;if(B&&H)return n.sortModelsByReleaseDate({...W,...X});if($==="openai-codex")return n.sortModelsByReleaseDate({...Z,...n.filterOpenAICodexModels(Q),...W,...X});if($==="cline-pass"&&Object.keys(Q).length>0)return n.sortModelsByReleaseDate({...Q,...X});let G=n.sortModelsByReleaseDate({...V,...Z,...Q,...J,...W});if($==="cline")return n.sortModelsByReleaseDate({...n.preferCanonicalModelIds(G,n.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...X});return n.sortModelsByReleaseDate({...G,...X})}function FU($,Z){let Q=n.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((J)=>Z[J]??{}))}function V6($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function mZ($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function AU($){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 fU($,Z){return`${$}:${V6(Z.baseUrl)}:${AU(mZ(Z)??"")}`}async function B6($,Z,Q=HU){let J=new AbortController,W=setTimeout(()=>J.abort(),Q);try{return await fetch($,{...Z,signal:J.signal})}finally{clearTimeout(W)}}function z$($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function H6($,Z){let Q=["streaming","tools"];return z$(Q,"images",Boolean(Z.supportsImages)),z$(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),z$(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 UU($,Z){let Q=await B6("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 W=(await Q.json())?.data??[],X={};for(let Y of W){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]=H6(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 $X($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function DU($,Z){let Q=await B6("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 W=(await Q.json())?.data??[],X={};for(let Y of W){let j=Y.id?.trim();if(!j)continue;X[j]=H6(j,{name:j,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return X}async function LU($,Z){let J=`${(V6($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,W=await B6(J,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!W.ok)throw Error(`Poolside model refresh failed: HTTP ${W.status}`);let Y=(await W.json())?.data??[],j={};for(let V of Y){let B=V.id?.trim();if(!B)continue;let H=V.supported_features??[],G=V.supported_sampling_parameters??[],K=V.input_modalities??[],F=["streaming"];z$(F,"tools",H.includes("tools")),z$(F,"reasoning",H.includes("reasoning")),z$(F,"temperature",G.includes("temperature")),z$(F,"images",K.includes("image"));let A={input:$X(V.pricing?.prompt),output:$X(V.pricing?.completion)};j[B]={id:B,name:V.name??B,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:F,pricing:A.input!==void 0||A.output!==void 0?A:void 0,status:"active"}}return j}function _U($){let Z=V6($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function TU($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function OU($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,J=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${J}`}async function qU($,Z){let Q=_U($.baseUrl),J=[],W=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let X of TU(Q))for(let[Y,j]of W)try{let V=await B6(X,{method:"GET",headers:{accept:"application/json",...j}});if(V.ok){let H=(await V.json())?.data??[],G={};for(let K of H){let F=K.model_name?.trim(),D=K.litellm_params?.model?.trim()||F;if(!D)continue;let U=K.model_info,L=H6(D,{name:F??D,maxTokens:U?.max_output_tokens??U?.max_tokens,maxInputTokens:U?.max_input_tokens??U?.max_tokens,supportsImages:U?.supports_vision,supportsPromptCache:U?.supports_prompt_caching,supportsReasoning:U?.supports_reasoning});if(G[D]=L,F)G[F]={...L,id:F,name:F}}return G}J.push(`${new URL(X).pathname} (${Y}): ${await OU(V)}`)}catch(V){let B=V instanceof Error?V.message:String(V);J.push(`${new URL(X).pathname} (${Y}): ${B}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${J.join("; ")}`)}var YX={baseten:UU,hicap:DU,litellm:qU,poolside:LU},ZX=new Map,xZ=new Map;function zU($,Z){return`${$}:${V6(Z.baseUrl)}`}async function MU($,Z,Q){let J=n.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],W=X6(Q.baseUrl,J?.provider.baseUrl,J?.provider.modelsSourceUrl);if(!W)return{};let X=Z?.cacheTtlMs??XX,Y=zU($,Q),j=Date.now(),V=ZX.get(Y);if(V&&V.expiresAt>j)return V.data;let B=xZ.get(Y);if(B)return B;let H=W6(W,$).then((G)=>{let K=Object.fromEntries(G.map((F)=>[F,H6(F,{name:F})]));return ZX.set(Y,{data:K,expiresAt:j+X}),K}).finally(()=>{xZ.delete(Y)});return xZ.set(Y,H),H}async function RU($,Z){let Q=mZ(Z);if(!Q)return{};let J=YX[$];if(!J)return{};return J(Z,Q)}function NU($,Z,Q){if(!Q)return!1;if(!YX[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(mZ(Q))}async function EU($,Z,Q){let J=Z?.cacheTtlMs??XX,W=fU($,Q),X=Date.now(),Y=gZ.get(W);if(Y&&Y.expiresAt>X)return Y.data;let j=Y6.get(W);if(j)return j;let V=RU($,Q).then((B)=>{return gZ.set(W,{data:B,expiresAt:X+J}),B}).finally(()=>{Y6.delete(W)});return Y6.set(W,V),V}async function wU($){return n.fetchLiveProviderModels($,globalThis.fetch)}async function G6($={}){let Z=$.url??WX,Q=$.cacheTtlMs??BU,J=Date.now(),W=j6.get(Z);if(W&&W.expiresAt>J)return W.data;let X=K8.get(Z);if(X)return X;let Y=wU(Z).then((j)=>{return j6.set(Z,{data:j,expiresAt:J+Q}),j}).finally(()=>{K8.delete(Z)});return K8.set(Z,Y),Y}function CU($){if($){j6.delete($),K8.delete($);return}j6.clear(),K8.clear()}function PU(){gZ.clear(),Y6.clear()}function SU($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:JX(Q.capabilities)}]))}var vZ=SU(VU());function jX($){let Z=jU($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:JX(Z.capabilities)}}async function cZ($,Z,Q){let J=jX($);if(!J)return;try{let W=Z?.loadLatestOnInit?await G6(Z):void 0,X=W?FU($,W):{},Y=Q&&NU($,Z,Q)?await EU($,Z,Q):{},V=Boolean(n.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:J.modelId,baseUrl:J.baseUrl}:Q,B=V?await MU($,Z,V).catch(()=>({})):{},H=await KU($,J.knownModels,X,Y,B,Q?.knownModels);return{...J,knownModels:H}}catch(W){if(Z?.failOnError)throw W;if($==="litellm")return{...J,knownModels:{}};return J}}var uZ=g0.BUILT_IN_PROVIDER,bU=g0.BUILT_IN_PROVIDER_IDS,yU=g0.isBuiltInProviderId,K6=g0.normalizeProviderId,dZ=R.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),VX=R.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),BX=R.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),HX=R.object({apiKey:R.string().optional(),accessToken:R.string().optional(),refreshToken:R.string().optional(),expiresAt:R.number().int().positive().optional(),accountId:R.string().optional()}),hU=R.enum(["none","low","medium","high","xhigh"]),GX=R.object({enabled:R.boolean().optional(),effort:hU.optional(),budgetTokens:R.number().int().positive().optional()}),KX=R.object({accessKey:R.string().optional(),secretKey:R.string().optional(),sessionToken:R.string().optional(),region:R.string().optional(),profile:R.string().optional(),authentication:R.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:R.boolean().optional(),useCrossRegionInference:R.boolean().optional(),useGlobalInference:R.boolean().optional(),endpoint:R.string().url().optional(),customModelBaseId:R.string().optional()}),FX=R.object({projectId:R.string().optional(),region:R.string().optional()}),AX=R.object({apiVersion:R.string().optional(),useIdentity:R.boolean().optional()}),fX=R.object({clientId:R.string().optional(),clientSecret:R.string().optional(),tokenUrl:R.string().url().optional(),resourceGroup:R.string().optional(),deploymentId:R.string().optional(),useOrchestrationMode:R.boolean().optional(),api:R.enum(["orchestration","foundation-models"]).optional(),defaultSettings:R.record(R.string(),R.unknown()).optional()}),UX=R.object({mode:R.enum(["internal","external"]).optional(),usePromptCache:R.boolean().optional()}),DX=R.object({loadLatestOnInit:R.boolean().optional(),loadPrivateOnAuth:R.boolean().optional(),url:R.string().url().optional(),cacheTtlMs:R.number().int().positive().optional(),failOnError:R.boolean().optional()}),A2=R.object({provider:dZ,apiKey:R.string().optional(),auth:HX.optional(),model:R.string().optional(),protocol:VX.optional(),client:BX.optional(),routingProviderId:dZ.optional(),maxTokens:R.number().int().positive().optional(),contextWindow:R.number().int().positive().optional(),baseUrl:R.string().url().optional(),headers:R.record(R.string(),R.string()).optional(),timeout:R.number().int().positive().optional(),reasoning:GX.optional(),aws:KX.optional(),gcp:FX.optional(),azure:AX.optional(),sap:fX.optional(),oca:UX.optional(),region:R.string().optional(),apiLine:R.enum(["china","international"]).optional(),capabilities:R.array(R.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:DX.optional()});function LX($){return A2.parse($)}function _X($){return A2.safeParse($)}function kU($){return $.protocol==="openai-responses"||$.client==="openai"}function K1($,Z={}){let Q=$.provider,J=K6(Q),W=Z.includeKnownModels!==!1,X=$.reasoning?.effort||"none",Y=X==="none"?void 0:X,j=vZ[J],V=Object.assign({},...g0.resolveProviderModelCatalogKeys(J).map((D)=>g0.getGeneratedModelsForProvider(D))),B=Object.keys(V)[0],H=J6(J,$),G=$.baseUrl??(J==="oca"?$.oca?.mode==="internal"?CZ:PZ:j?.baseUrl),K=$.routingProviderId??(kU($)&&J!==uZ.OPENAI_NATIVE?uZ.OPENAI_NATIVE:void 0),F=W?j?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,A={providerId:Q,clientType:$.client,routingProviderId:K,modelId:$.model??j?.modelId??B??"default",...W?{knownModels:F}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort: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(([D,U])=>U!==void 0))}function IU($){let Z=LX($);return K1(Z)}function xU($){let Z=_X($);if(Z.success)return{success:!0,config:K1(Z.data)};return{success:!1,error:Z.error}}import{SESSION_STATUS_VALUES as gU}from"@cline/shared";var lZ=gU,mU=["idle","running","pending"];function vU($){return!mU.includes($)}function V0($){return!vU($)}var w0={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"};function TX($){if($===!0)return{};if(!$)return;return $}function OX($){if($==="user")return"global";return $}class pZ{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 qX($){let{host:Z}=$;return{async startSession(Q){let J=(Q.cwd?.trim()||Q.workspaceRoot).trim(),W=await Z.startSession({source:Q.source?.trim()||w0.CLI,interactive:!1,config:{providerId:K6(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:J,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:dU(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:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(Q,J){let W=await Z.runTurn({sessionId:Q,prompt:J.prompt,userImages:J.attachments?.userImages,userFiles:J.attachments?.userFiles?.map((X)=>X.content),delivery:J.delivery});if(!W)throw Error("ClineCore automation runtime returned no result");return{result:uU(W)}},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 F6($){let Z=cU($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),J=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),W=$.context?.logger??$.logger,X=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!J&&!W&&!X)return $.context;return{...$.context??{},...Q?{client:Q}:{},...J?{user:J}:{},...W?{logger:W}:{},...X?{telemetry:X}:{},...Z?{automation:Z}:{}}}function cU($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function uU($){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 dU($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}import{existsSync as l8,readFileSync as rq}from"node:fs";import{basename as K7,dirname as IV,extname as iq,isAbsolute as mV,join as nq,relative as vV,resolve as xV}from"node:path";import{createHash as lU}from"node:crypto";import{watch as pU}from"node:fs";import{readdir as rU,readFile as iU}from"node:fs/promises";import{join as nU}from"node:path";function aU($){return lU("sha1").update($).digest("hex")}function RX($){return Boolean($&&typeof $==="object"&&"code"in $)}function zX($){return RX($)&&$.code==="ENOENT"}function MX($){return RX($)&&($.code==="EACCES"||$.code==="EPERM")}class F8{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 J of Q.directories){let W=this.baseTypesByDirectory.get(J);if(W)W.add(Q.type);else this.baseTypesByDirectory.set(J,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,J])=>[Q,{...J}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([J,W])=>[J,{...W}])));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=pU(Z,()=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let W of J)this.pendingTypes.add(W);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(J)=>{let W=this.watchedTypesByDirectory.get(Z);if(!W)return;for(let X of W)this.emit({kind:"error",type:X,error:J,filePath:Z})})}catch(Q){if(!zX(Q)&&!MX(Q)){let J=$.get(Z);if(!J)continue;for(let W of J)this.emit({kind:"error",type:W,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($),J=this.recordsByType.get($.type)??new Map;for(let[W,X]of J.entries()){if(Z.has(W))continue;this.emit({kind:"remove",type:$.type,id:W,filePath:X.filePath})}for(let[W,X]of Z.entries()){let Y=J.get(W);if(Y&&Y.filePath===X.filePath&&Y.fingerprint===X.fingerprint)continue;this.emit({kind:"upsert",record:{type:X.type,id:W,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 J of $.directories){Q.add(J);let W=$.discoverFiles?await $.discoverFiles(J):await this.readDirectoryFileCandidates(J);for(let X of W){let{fileName:Y,filePath:j}=X;if(Q.add(X.directoryPath),$.includeFile&&!$.includeFile(Y,j))continue;try{let V=await iU(j,"utf8"),B={type:$.type,directoryPath:X.directoryPath,fileName:Y,filePath:j,content:V},H=$.parseFile(B),G=$.resolveId(H,B).trim();if(!G)continue;Z.set(G,{type:$.type,id:G,item:H,filePath:j,fingerprint:aU(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 J of Q){let W=$.get(J);if(W)W.add(Z);else $.set(J,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await rU($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:nU($,Q.name)})).sort((Q,J)=>Q.fileName.localeCompare(J.fileName))}catch(Z){if(zX(Z)||MX(Z))return[];throw Z}}}import{readdir as FQ,readFile as fL,stat as KQ}from"node:fs/promises";import{basename as f1,dirname as UL,extname as E6,join as y0,resolve as L8}from"node:path";import{AGENTS_RULES_FILE_NAME as $Y,RULES_CONFIG_DIRECTORY_NAME as ZY,resolveGlobalAgentsRulesPath as DL,resolveRulesConfigSearchPaths as LL,resolveSkillsConfigSearchPaths as _L,resolveWorkflowsConfigSearchPaths as TL,SKILLS_CONFIG_DIRECTORY_NAME as AQ,WORKFLOWS_CONFIG_DIRECTORY_NAME as fQ}from"@cline/shared/storage";import OL from"yaml";o0();import{existsSync as z6,readFileSync as QL,statSync as JL}from"node:fs";import{basename as WL,dirname as O6,join as M6,resolve as q6}from"node:path";import{discoverPluginModulePaths as XL,resolveConfiguredPluginModulePaths as aX,resolvePluginConfigSearchPaths as YL,SKILLS_CONFIG_DIRECTORY_NAME as jL}from"@cline/shared/storage";import{resolve as yD}from"node:path";import{normalizePluginManifest as hD}from"@cline/shared";import{existsSync as f0,readFileSync as U2}from"node:fs";import{builtinModules as AD,createRequire as eZ}from"node:module";import{dirname as v1,extname as f8,isAbsolute as fD,resolve as l}from"node:path";import{fileURLToPath as SX}from"node:url";import{PLUGIN_FILE_EXTENSIONS as UD}from"@cline/shared";var bX=v1(SX(import.meta.url)),DD=eZ(import.meta.url),LD=l(bX,"..","..","..","..",".."),oZ=OD(LD),_D=["@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"],$Q=new Set(AD.flatMap(($)=>[$,$.replace(/^node:/,"")])),A8=new Set(UD),TD=["development","node","import","require","default"];function OD($){let Z={},Q={"@cline/sdk":l($,"packages/sdk/src/index.ts"),"@cline/agents":l($,"packages/agents/src/index.ts"),"@cline/core":l($,"packages/core/src/index.ts"),"@cline/llms":l($,"packages/llms/src/index.ts"),"@cline/shared":l($,"packages/shared/src/index.ts"),"@cline/shared/storage":l($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":l($,"packages/shared/src/db/index.ts")};for(let[J,W]of Object.entries(Q))if(f0(W))Z[J]=W;for(let J of["agents","core","llms","shared"]){let W=l($,"packages",J),X=l(W,"package.json");if(!f0(X))continue;try{let Y=JSON.parse(U2(X,"utf8"));if(typeof Y.name!=="string"||!Y.exports)continue;if(typeof Y.exports==="string"){let j=l(W,Y.exports);if(f0(j))Z[Y.name]=j;continue}if(typeof Y.exports!=="object")continue;for(let[j,V]of Object.entries(Y.exports)){let B=qD(W,V);if(!B)continue;let H=j==="."?Y.name:`${Y.name}/${j.replace(/^\.\//,"")}`;Z[H]=B}}catch{}}return Z}function qD($,Z){let Q=ZQ(Z);if(!Q)return null;let J=yX($,Q);for(let W of J)if(f0(W))return W;return null}function ZQ($,Z=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(Z.has($))return null;Z.add($);let Q=$;for(let J of TD){let W=ZQ(Q[J],Z);if(W)return W}return null}function yX($,Z){let Q=Z.replace(/^\.\//,""),J=[l($,Z)];if(Q.startsWith("dist/")){let W=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[l($,`${W}.ts`),l($,`${W}.tsx`),l($,`${W}.mts`),l($,`${W}.cts`),...J]}return J}function zD($){return Object.fromEntries(Object.entries($).sort(([Z],[Q])=>Q.length-Z.length))}function L6($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function f2($){if($.startsWith("@")){let[Z,Q]=$.split("/",3);return Q?`${Z}/${Q}`:$}return $.split("/",1)[0]??$}function MD($){let Z=f2($);if($===Z)return".";return`.${$.slice(Z.length)}`}function hX($){return f2($).startsWith("@cline/")}function sZ($,Z){let Q=f2(Z),J=v1($);while(!0){let W=l(J,"node_modules",Q);if(f0(W)||f0(l(W,"package.json")))return!0;let X=l(J,"..");if(X===J)return!1;J=X}}function PX($){return tZ($)!==null}function tZ($){try{return DD.resolve($)}catch{}return RD($)}function RD($){let Z=f2($),Q=kX(Z);if(!Q)return null;let J=l(Q,"package.json");try{let W=JSON.parse(U2(J,"utf8")),X=MD($),Y=X==="."&&typeof W.exports==="string"?W.exports:W.exports&&typeof W.exports==="object"&&Object.hasOwn(W.exports,X)?W.exports[X]:void 0,j=ZQ(Y)??(X==="."&&typeof W.main==="string"?W.main:null);if(!j)return null;let V=l(Q,j),B=[V,...yX(Q,j).filter((H)=>H!==V)];for(let H of B)if(f0(H))return H;return null}catch{return null}}function ND(){let $=[bX],Z=process.env.CLINE_WRAPPER_PATH?.trim();if(Z)$.push(v1(v1(Z)));let Q=process.execPath?.trim();if(Q)$.push(v1(Q));return[...new Set($.map((J)=>l(J)))]}function ED($,Z){let Q=$;while(!0){let J=l(Q,"package.json");if(f0(J))try{if(JSON.parse(U2(J,"utf8")).name===Z)return Q}catch{}let W=l(Q,"node_modules",Z,"package.json");if(f0(W))return v1(W);let X=l(Q,"..");if(X===Q)return null;Q=X}}function kX($){for(let Z of ND()){let Q=ED(Z,$);if(Q)return Q}return null}function wD($){let Q=v1($);for(let J=0;J<4;J++){let W=l(Q,"package.json");if(f0(W))try{let Y=JSON.parse(U2(W,"utf8"));return Y!=null&&typeof Y==="object"&&"cline"in Y}catch{return!1}let X=l(Q,"..");if(X===Q)return!1;Q=X}return!1}function IX($,Z){let Q=Z.startsWith("file:")?SX(Z):fD(Z)?Z:l(v1($),Z);if(f0(Q)&&A8.has(f8(Q)))return Q;for(let J of A8){let W=`${Q}${J}`;if(f0(W))return W}for(let J of A8){let W=l(Q,`index${J}`);if(f0(W))return W}return null}function xX($){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 J of Q)for(let W of $.matchAll(J)){let X=W[1];if(X)Z.add(X)}return[...Z]}function CD($){return f8($)!==".ts"}function gX($,Z,Q=new Set){if(Q.has($)||!f0($))return;if(Q.add($),!A8.has(f8($)))return;let J=U2($,"utf8"),W=CD($);for(let X of xX(J)){if(X.startsWith("node:")||$Q.has(X))continue;if(L6(X)){if(!W)continue;if(Object.hasOwn(oZ,X)||Object.hasOwn(oZ,f2(X))||sZ($,X)||hX(X)&&PX(X)||Z&&PX(X))continue;throw Error(`Cannot find module '${f2(X)}'`)}let Y=IX($,X);if(Y)gX(Y,Z,Q)}}function mX($,Z=new Set,Q=new Set){if(Z.has($)||!f0($))return Q;if(Z.add($),!A8.has(f8($)))return Q;let J=U2($,"utf8");for(let W of xX(J)){if(Q.add(W),L6(W))continue;let X=IX($,W);if(X)mX(X,Z,Q)}return Q}function PD($,Z){let Q=eZ($),J={},W=mX($),X=new Set(_D);for(let[Y,j]of Object.entries(oZ)){try{Q.resolve(Y);continue}catch{}J[Y]=j}for(let Y of W)if(L6(Y)&&(hX(Y)||Z))X.add(Y);for(let Y of X){if(Object.hasOwn(J,Y)||sZ($,Y))continue;let j=tZ(Y);if(j)J[Y]=j}if(!Z)return J;for(let Y of W){if(!L6(Y)||Object.hasOwn(J,Y)||sZ($,Y)||Y.startsWith("node:")||$Q.has(Y))continue;let j=tZ(Y);if(j)J[Y]=j}return J}function SD($){let Z=f8($);return Z===".ts"||Z===".tsx"||Z===".mts"||Z===".cts"}var R$;function bD(){if(R$!==void 0)return R$;let $=kX("jiti");if(!$)return R$=null,null;let Z=l($,"dist","babel.cjs");if(!f0(Z))return R$=null,null;try{let J=eZ(Z)(Z);R$=typeof J==="function"?J:null}catch{R$=null}return R$}async function vX($,Z={}){let Q=!wD($);gX($,Q);let J=PD($,Q),W=zD(J),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(W).filter(([,G])=>SD(G)).map(([G])=>G),V=bD(),B=V?(G)=>V({...G,interopDefault:!0}):void 0;return await Y($,{alias:W,cache:Z.useCache,requireCache:Z.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...$Q],transformModules:j,tryNative:!1,...B?{transform:B}:{}}).import($,{})}function cX($,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 uX($){return typeof $==="object"&&$!==null}function QQ($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function kD($,Z){if(!uX($.manifest))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);if(!QQ($.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")&&!QQ($.manifest.providerIds))throw Error(`Invalid plugin module at ${Z}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!QQ($.manifest.modelIds))throw Error(`Invalid plugin module at ${Z}: manifest.modelIds must be a string array when provided`)}function ID($,Z){if(!uX($))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"`);kD($,Z)}async function JQ($,Z={}){let Q=yD(Z.cwd??process.cwd(),$),J=await vX(Q,{useCache:Z.useCache}),W=Z.exportName??"plugin",X=J.default??J[W];ID(X,Q);let Y=X,j=Y.setup,V=j?(B,H)=>{let G={...Z.session,...H.session},K={...H,session:Object.keys(G).length>0?G:void 0,client:Z.client??H.client,user:Z.user??H.user,workspaceInfo:Z.workspaceInfo??H.workspaceInfo,automation:Z.automation??H.automation,logger:Z.logger??H.logger,telemetry:Z.telemetry??H.telemetry};return j(B,K)}:void 0;return{...Y,manifest:hD(Y.manifest),setup:V}}async function dX($,Z={}){return(await U8($,Z)).plugins}async function U8($,Z={}){let Q=[],J=[],W=new Map,X=0;for(let j of $)try{let V=await JQ(j,Z);if(!cX(V.manifest,Z))continue;let B=W.get(V.name);if(B)J.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:j,overriddenPluginPath:B.pluginPath,message:`Plugin "${V.name}" from ${j} overrides ${B.pluginPath}`});W.set(V.name,{plugin:V,pluginPath:j,order:X++})}catch(V){let B=V instanceof Error?V.message:String(V);Q.push({pluginPath:j,phase:"load",message:B,stack:V instanceof Error?V.stack:void 0})}let Y=[...W.values()].sort((j,V)=>j.order-V.order);return{plugins:Y.map((j)=>j.plugin),pluginPaths:Y.map((j)=>j.pluginPath),failures:Q,warnings:J}}import{existsSync as YQ}from"node:fs";import{createRequire as nX}from"node:module";import{dirname as T6,join as D2}from"node:path";import{fileURLToPath as dD}from"node:url";import{spawn as xD}from"node:child_process";import{basename as gD}from"node:path";import{augmentNodeCommandForDebug as mD,withResolvedClineBuildEnv as vD}from"@cline/shared";function lX($){if($ instanceof Error)return $;return Error(String($))}var cD="CLINE_JS_RUNTIME_PATH";function pX($){let Z=$?.trim();if(!Z)return!1;let Q=gD(Z).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function rX($={}){let Z=$.env??process.env,Q=$.runtimeExecutable?.trim()||Z[cD]?.trim();if(Q)return Q;let J=$.execPath?.trim()||process.execPath;if(pX(J))return J;for(let W of[Z.BUN_EXEC_PATH,Z.npm_node_execpath,Z.NODE]){let X=W?.trim();if(X&&pX(X))return X}return"node"}function uD($,Z={}){let Q=rX({env:Z.env,execPath:Z.execPath,runtimeExecutable:Z.runtimeExecutable});return mD([Q,...$],{env:Z.env,execArgv:Z.execArgv,debugRole:Z.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class _6{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=uD($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=xD(Z[0]??rX(this.options),Z.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:vD(process.env),windowsHide:!0});this.process=Q;let J="",W=(X)=>{let Y=J+X;J=Y.length>4000?Y.slice(-4000):Y};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(X)=>{W(X)}),Q.on("message",(X)=>{this.onMessage(X)}),Q.on("error",(X)=>{this.failPending(Error(`${this.processLabel} process error: ${lX(X).message}`))}),Q.on("exit",(X,Y)=>{this.process=null;let j=J.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 J=this.process;if(!J||J.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let W=`req_${++this.requestCounter}`,X={type:"call",id:W,method:$,args:Z};return await new Promise((Y,j)=>{let V={resolve:(B)=>Y(B),reject:j};if((Q.timeoutMs??0)>0)V.timeout=setTimeout(()=>{this.clearPendingRequest(W),this.shutdown().catch(()=>{}),j(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(W,V),J.send(X,(B)=>{if(!B)return;let H=this.clearPendingRequest(W);if(!H)return;H.reject(Error(`${this.processLabel} failed to send call "${$}": ${lX(B).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 lD($){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 D8($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function pD(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function rD(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=nX($).resolve(`${pD()}/package.json`),J=D2(T6(Q),"extensions","plugin-sandbox-bootstrap.js");return YQ(J)?J:void 0}catch{return}}function iD(){let $=process.execPath?.trim();if(!$)return;let Z=D2(T6(T6($)),"extensions","plugin-sandbox-bootstrap.js");return YQ(Z)?Z:void 0}function nD(){let $=T6(dD(import.meta.url)),Z=nX(import.meta.url),Q=[D2($,"plugin-sandbox-bootstrap.js"),D2($,"extensions","plugin-sandbox-bootstrap.js"),D2($,"agents","plugin-sandbox-bootstrap.js"),rD(),iD()];for(let X of Q.filter((Y)=>typeof Y==="string"))if(YQ(X))return{file:X};let J=D2($,"plugin-sandbox-bootstrap.ts"),W="jiti";try{W=Z.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(W)});`,`const jiti = createJiti(${JSON.stringify(J)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(J)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
46
+ `)}}var WQ=nD();function XQ($,Z,Q){if(typeof $==="number"&&$>0)return $;if(Q){let J=process.env[Q];if(J){let W=Number(J);if(Number.isInteger(W)&&W>0)return W}}return Z}async function L2($){let Z=new _6({name:"plugin-sandbox",..."file"in WQ?{bootstrapFile:WQ.file}:{bootstrapScript:WQ.script},onEvent:$.onEvent}),Q=XQ($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),J=XQ($.hookTimeoutMs,3000),W=XQ($.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 B=V.plugins.map(lD);return{extensions:B.map((G)=>{let K={name:G.name,__clinePluginPath:G.pluginPath,manifest:G.manifest,setup:(F)=>{aD(F,Z,G,W,j),oD(F,Z,G,W,j),sD(F,Z,G,W,j),eD(F,Z,G,W,j),tD(F,G)}};return K.hooks=ZL(Z,G,J,j),K}),failures:V.failures,pluginPaths:B.map((G)=>G.pluginPath),shutdown:async()=>{await Z.shutdown()},warnings:V.warnings}}function aD($,Z,Q,J,W){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:J})}catch(B){if(!D8(B))throw B;return await W(),await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:X.id,input:j,context:V},{timeoutMs:J})}}};$.registerTool(Y)}}function oD($,Z,Q,J,W){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:J})}catch(j){if(!D8(j))throw j;return await W(),await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:X.id,input:Y},{timeoutMs:J})}}})}function sD($,Z,Q,J,W){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:J})}catch(Y){if(!D8(Y))throw Y;return await W(),await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:X.id},{timeoutMs:J})}}:X.content??""})}function tD($,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 eD($,Z,Q,J,W){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:J});return iX(j)?j:Y}catch(j){if(!D8(j))throw j;await W();let V=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:X.id,messages:Y},{timeoutMs:J});return iX(V)?V:Y}}})}function iX($){return Array.isArray($)&&$.every((Z)=>typeof Z==="object"&&Z!==null&&("role"in Z)&&("content"in Z))}function $L($,Z,Q,J,W){return async(X)=>{try{return await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:X},{timeoutMs:J})}catch(Y){if(!D8(Y))throw Y;return await W(),await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:X},{timeoutMs:J})}}}function ZL($,Z,Q,J){let W={};for(let X of Z.hooks??[])W[X]=$L($,Z.pluginId,X,Q,J);return Object.keys(W).length>0?W:void 0}var VQ="package.json",VL="package";function BQ($){return YL($)}function HQ($){return XL($)}function BL($){try{return z6($)&&JL($).isDirectory()}catch{return!1}}function GQ($){let Z=[],Q=new Set;for(let J of $){let W=q6(J);if(Q.has(W))continue;Q.add(W),Z.push(W)}return Z}function oX($){let Z=GQ($);return nZ(Z)}function sX($){return BQ($).flatMap((Z)=>HQ(Z)).filter((Z)=>z6(Z))}function HL($,Z){let Q=[];for(let J of $)try{Q.push(...aX([J],Z))}catch{}return Q}function jQ($){return typeof $==="object"&&$!==null}function GL($){try{let Z=JSON.parse(QL(M6($,VQ),"utf8"));if(!jQ(Z)||!jQ(Z.cline))return[];let Q=Z.cline.plugins;if(!Array.isArray(Q))return[];let J=[];for(let W of Q){if(typeof W==="string"){J.push(W);continue}if(!jQ(W)||!Array.isArray(W.paths))continue;for(let X of W.paths)if(typeof X==="string")J.push(X)}return J}catch{return[]}}function tX($,Z){let Q=q6(Z);return GL($).some((J)=>q6($,J)===Q)}function KL($,Z){return WL($)===VL&&z6(M6(O6($),VQ))&&tX(O6($),Z)}function FL($){let Z=q6($),Q=[],J=O6(Z);while(!0){if(KL(J,Z)){Q.push(J);break}if(z6(M6(J,VQ))){if(tX(J,Z))Q.push(J);break}let W=O6(J);if(W===J)break;J=W}return GQ(Q)}function N$($={}){let Z=$.cwd??process.cwd(),Q=sX($.workspacePath),J=aX($.pluginPaths??[],Z);return oX([...J,...Q])}function AL($={}){let Z=$.cwd??process.cwd(),Q=sX($.workspacePath),J=HL($.pluginPaths??[],Z);return oX([...J,...Q])}function E$($){let Z=[];for(let Q of $)for(let J of FL(Q)){let W=M6(J,jL);if(BL(W))Z.push(W)}return GQ(Z)}function eX($={}){return E$(AL($))}async function R6($={}){let Z=N$($);if(Z.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let J=await U8(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:J.plugins,failures:J.failures,pluginPaths:J.pluginPaths,warnings:J.warnings}}let Q=await L2({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}}var N6="SKILL.md",qL="managed.json",zL=new Set([".md",".markdown",".txt"]);function UQ($){return $.trim().toLowerCase()}function _2($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function w6($){return zL.has(E6($).toLowerCase())}function QY($){let Z=[],Q=new Set;for(let J of $){let W=L8(J);if(Q.has(W))continue;Q.add(W),Z.push(J)}return Z}function ML($){let Z=[...$?.directories??qQ($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...eX({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return QY(Z)}async function DQ($){try{let Z=await FQ($,{withFileTypes:!0}),Q=[];for(let J of Z){if(!J.isDirectory())continue;let W=y0($,J.name),X=y0(W,qL);try{let Y=await fL(X,"utf8"),j=JSON.parse(Y);if(j&&typeof j==="object")Q.push(W)}catch(Y){if(_2(Y))continue;if(Y?.name==="SyntaxError")continue;throw Y}}return Q.sort((J,W)=>J.localeCompare(W))}catch(Z){if(_2(Z))return[];throw Z}}function LQ($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,J,W]=Q;try{let X=OL.parse(J);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:W,hadFrontmatter:!0}}catch(X){let Y=X instanceof Error?X.message:String(X);return{data:{},body:$,hadFrontmatter:!0,parseError:Y}}}function C6($,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 J=$.trim();if(!J&&Q)throw Error(`Frontmatter field '${Z}' cannot be empty.`);return J||void 0}function T2($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function RL($,Z){if(f1($.filePath).toLowerCase()!==$Y.toLowerCase())return f1($.filePath,E6($.filePath));if(Z&&L8($.filePath)===L8(Z,$Y))return"Workspace AGENTS.md";if(L8($.filePath)===L8(DL()))return"Global AGENTS.md";return f1($.filePath,E6($.filePath))}function _Q($,Z){let{data:Q,body:J,parseError:W}=LQ($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let X=J.trim();if(!X)throw Error("Missing instructions body in skill file.");let j=C6(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing skill name.");return{name:j,description:C6(Q.description,"description",!1),disabled:T2(Q.disabled,"disabled")??(T2(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function TQ($,Z){let{data:Q,body:J,parseError:W}=LQ($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let X=J.trim();if(!X)throw Error("Missing instructions body in rule file.");let Y=C6(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing rule name.");return{name:Y,disabled:T2(Q.disabled,"disabled")??(T2(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function OQ($,Z){let{data:Q,body:J,parseError:W}=LQ($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let X=J.trim();if(!X)throw Error("Missing instructions body in workflow file.");let Y=C6(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing workflow name.");return{name:Y,disabled:T2(Q.disabled,"disabled")??(T2(Q.enabled,"enabled")===!1?!0:void 0),instructions:X,frontmatter:Q}}function qQ($){return _L($)}function zQ($){return LL($)}function MQ($){return TL($)}async function JY($){if(f1($)===".cline"){let Z=await DQ($);return(await Promise.all(Z.map((J)=>JY(y0(J,AQ))))).flat()}try{let Z=await FQ($,{withFileTypes:!0}),Q=[];for(let J of Z){if(J.isFile()&&J.name===N6){Q.push({directoryPath:$,fileName:J.name,filePath:y0($,J.name)});continue}let W=y0($,J.name);if(J.isDirectory()||J.isSymbolicLink()&&await KQ(W).then((Y)=>Y.isDirectory()).catch((Y)=>{if(_2(Y))return!1;throw Y}))Q.push({directoryPath:W,fileName:N6,filePath:y0(W,N6)})}return Q}catch(Z){if(_2(Z))return[];throw Z}}async function P6($){if(f1($)===".cline"){let Z=await DQ($);return(await Promise.all(Z.map((J)=>P6(y0(J,"rules.md"))))).flat()}try{if((await KQ($)).isFile())return[{directoryPath:UL($),fileName:f1($),filePath:$}]}catch(Z){if(!_2(Z))throw Z}try{let Q=(await FQ($,{withFileTypes:!0})).filter((W)=>W.isFile()&&w6(W.name)).map((W)=>({directoryPath:$,fileName:W.name,filePath:y0($,W.name)})),J=y0($,"AGENTS.md");try{if((await KQ(J)).isFile()){if(!Q.some((Y)=>Y.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:J})}}catch{}return Q}catch(Z){if(_2(Z))return[];throw Z}}async function NL($){if(f1($)===".cline"){let Z=await DQ($);return(await Promise.all(Z.map((J)=>P6(y0(J,fQ))))).flat()}return P6($)}function RQ($){let Z=ML($),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?QY([...Z,Q]):Z,discoverFiles:JY,includeFile:(J)=>J===N6,parseFile:(J)=>_Q(J.content,f1(J.directoryPath)),resolveId:(J)=>UQ(J.name)}}function NQ($){let Z=$?.directories??zQ($?.workspacePath),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:P6,includeFile:(J,W)=>J===".clinerules"||w6(J)||w6(W),parseFile:(J)=>TQ(J.content,RL(J,$?.workspacePath)),resolveId:(J)=>UQ(J.name)}}function EQ($){let Z=$?.directories??MQ($?.workspacePath),Q=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:NL,includeFile:(J)=>w6(J),parseFile:(J)=>OQ(J.content,f1(J.filePath,E6(J.filePath))),resolveId:(J)=>UQ(J.name)}}function WY($){let Z=[RQ($?.skills),NQ($?.rules),EQ($?.workflows)];return new F8(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as XY}from"@cline/shared";function EL($,Z){if($.description?.trim())return XY($.description,".");if(Z==="workflow")return;return XY($.instructions,".")}function wL($){return $.disabled!==!0}function YY($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,J])=>({id:Q,record:J})).filter(({record:Q})=>wL(Q.item)).map(({id:Q,record:J})=>({id:Q,name:J.item.name,instructions:J.item.instructions,description:EL(J.item,Z),kind:Z})).sort((Q,J)=>Q.name.localeCompare(J.name))}function _8($){let Z=new Map;for(let Q of[...YY($,"workflow"),...YY($,"skill")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,J)=>Q.name.localeCompare(J.name))}function jY($,Z){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let J=Q[1];if(!J)return $;let W=J.length+1,X=$.slice(W),Y=_8(Z).find((j)=>j.name===J);return Y?`${Y.instructions}${X}`:$}function VY($){return $.disabled!==!0}function S6($){if($.length===0)return"";return`
47
47
 
48
48
  # Rules
49
49
  ${$.map((Q)=>`## ${Q.name}
50
50
  ${Q.instructions}`).join(`
51
51
 
52
- `)}`}function R6($,Z){let Q=$?.trim(),W=Z?.trim();if(Q&&W)return`${Q}
52
+ `)}`}function b6($,Z){let Q=$?.trim(),J=Z?.trim();if(Q&&J)return`${Q}
53
53
 
54
- ${W}`;return Q||W||void 0}function XL($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(tX).sort((Q,W)=>Q.name.localeCompare(W.name))}function eX($){return M6(XL($))}import{validateWithZod as Lv,zodToJsonSchema as _v}from"@cline/shared";var L0={READ_FILES:"read_files",SEARCH_CODEBASE:"search_codebase",RUN_COMMANDS:"run_commands",FETCH_WEB_CONTENT:"fetch_web_content",APPLY_PATCH:"apply_patch",EDITOR:"editor",SKILLS:"skills",ASK:"ask_question",SUBMIT_AND_EXIT:"submit_and_exit"},U2=[L0.READ_FILES,L0.SEARCH_CODEBASE,L0.RUN_COMMANDS,L0.FETCH_WEB_CONTENT,L0.APPLY_PATCH,L0.EDITOR,L0.SKILLS,L0.ASK,L0.SUBMIT_AND_EXIT];G0();import{createTool as m1,validateWithZod as v1,zodToJsonSchema as f1}from"@cline/shared";var $Y="__clineInternalTelemetry";function ZY($){let Z=$?.__clineInternalTelemetry;return Z&&typeof Z==="object"&&"capture"in Z&&typeof Z.capture==="function"?Z:void 0}import{spawn as FY}from"node:child_process";import{StringDecoder as BL}from"node:string_decoder";import{getDefaultShell as HL,getShellArgs as GL}from"@cline/shared";import{validateWithZod as jL}from"@cline/shared";import{z as O}from"zod";var g1=6000,A8=O.string().describe("The absolute file path of a text file to read content from"),QY=O.object({start_line:O.number().int().positive().nullable().optional().describe("Optional one-based starting line number to read from; use null or omit for the start of the file"),end_line:O.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit to read to the end of the file or the read cap, whichever comes first")}).describe("Optional inclusive one-based file line range"),x1=O.object({path:A8,start_line:QY.shape.start_line,end_line:QY.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),N6=O.object({files:O.array(x1).describe("Array of file read requests. Omit start_line/end_line or set them to null to read from the start; provide integers to return only that inclusive one-based line range. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),WY=O.union([N6,x1,O.array(x1),O.array(O.string()),O.string(),O.object({files:O.array(O.union([A8,x1]))}),O.object({files:x1}),O.object({files:A8}),O.object({file_paths:O.array(A8)}),O.object({file_paths:O.string()}),O.object({paths:O.array(O.union([A8,x1]))}),O.object({paths:x1}),O.object({paths:O.string()})]),C6=O.object({queries:O.array(O.string()).describe("Array of regex search queries to execute")}),JY=O.union([C6,O.array(O.string()),O.string(),O.object({queries:O.string()})]),E6=O.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${g1*2} characters) to avoid timeouts.`),f8=O.object({command:O.string().min(1).describe("The executable to run directly without shell parsing."),args:O.array(O.string()).optional().describe("Optional argv list passed directly to the executable.")}),XY=O.union([E6,f8]),w6=O.object({commands:O.array(E6).describe("Array of complete shell command strings to execute.")}),YL=O.object({commands:O.array(XY)}),YY=O.union([w6,YL,O.object({commands:XY}),O.array(f8),f8,O.object({command:E6}),O.object({cmd:E6}),O.array(O.string()),O.string()]),jY=O.object({url:O.string().describe("The URL to fetch"),prompt:O.string().min(2).describe("Analysis prompt for the fetched content")}),P6=O.object({requests:O.array(jY).describe("Array of the URLs for the web fetch requests")}),S6=O.object({path:O.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:O.string().nullable().optional().describe(`Exact text to replace (must match exactly once). Omit this when creating a missing file or inserting via insert_line. Keep this at or below ${g1} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:O.string().describe(`The new content to write when creating a missing file, the replacement text for edits, or the inserted text when insert_line is provided. Keep this at or below ${g1} characters when possible; for large edits, use multiple calls with small chunks of old_text and new_text to iteratively edit the file.`),insert_line:O.number().int().nullable().optional().describe("Optional positive one-based boundary line. When provided, the tool inserts new_text before that line instead of performing a replacement edit; use line_count + 1 to append at EOF.")}).describe("Edit a text file by replacing old_text with new_text, create the file with new_text if it does not exist, or insert new_text at insert_line when insert_line is provided. Prefer using this tool for file edits over shell commands. IMPORTANT: large edits can time out, so use small chunks and multiple calls when possible."),b6=O.object({input:O.string().min(1).describe("The freeform apply_patch payload in the canonical patch grammar (e.g *** Begin Patch, *** Update File:, @@, and *** End Patch).")}).describe("Modify or create a text file by applying patches using the canonical apply_patch diff grammar. Prefer sending the patch body directly rather than wrapping it in shell syntax. IMPORTANT: large patches can time out, so use small chunks and multiple calls when possible."),VY=O.union([b6,O.string()]),y6=O.object({skill:O.string().min(1).describe("Name of the skill to execute."),args:O.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),h6=O.object({question:O.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:O.array(O.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),k6=O.object({summary:O.string().min(10).describe("Summarization of the investigation, steps taken, and resolution status to submit at the end of the session. Before submitting, read the problem again along with any provided test's assertions carefully and confirm your fix produces the expected output."),verified:O.boolean().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and taken all necessary steps to resolve the issue.
54
+ ${J}`;return Q||J||void 0}function CL($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(VY).sort((Q,J)=>Q.name.localeCompare(J.name))}function BY($){return S6(CL($))}import{validateWithZod as Vc,zodToJsonSchema as Bc}from"@cline/shared";var q0={READ_FILES:"read_files",SEARCH_CODEBASE:"search_codebase",RUN_COMMANDS:"run_commands",FETCH_WEB_CONTENT:"fetch_web_content",APPLY_PATCH:"apply_patch",EDITOR:"editor",SKILLS:"skills",ASK:"ask_question",SUBMIT_AND_EXIT:"submit_and_exit"},O2=[q0.READ_FILES,q0.SEARCH_CODEBASE,q0.RUN_COMMANDS,q0.FETCH_WEB_CONTENT,q0.APPLY_PATCH,q0.EDITOR,q0.SKILLS,q0.ASK,q0.SUBMIT_AND_EXIT];A0();import{createTool as d1,validateWithZod as l1,zodToJsonSchema as D1}from"@cline/shared";var HY="__clineInternalTelemetry";function GY($){let Z=$?.__clineInternalTelemetry;return Z&&typeof Z==="object"&&"capture"in Z&&typeof Z.capture==="function"?Z:void 0}import{spawn as RY}from"node:child_process";import{StringDecoder as kL}from"node:string_decoder";import{getDefaultShell as IL,getShellArgs as xL}from"@cline/shared";import{validateWithZod as SL}from"@cline/shared";import{z as q}from"zod";var u1=6000,T8=q.string().describe("The absolute file path of a text file to read content from"),KY=q.object({start_line:q.number().int().positive().nullable().optional().describe("Optional one-based starting line number to read from; use null or omit for the start of the file"),end_line:q.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit to read to the end of the file or the read cap, whichever comes first")}).describe("Optional inclusive one-based file line range"),c1=q.object({path:T8,start_line:KY.shape.start_line,end_line:KY.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds. Always include path; start_line/end_line must be on the same object as the path they apply to, never in a separate array element"),h6=q.object({files:q.array(c1).describe("Array of file read requests; each element is one file and must include path. Omit start_line/end_line or set them to null to read from the start; provide integers on the same object as the path to return only that inclusive one-based line range — never emit a range as its own array element. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),FY=q.union([h6,c1,q.array(c1),q.array(q.string()),q.string(),q.object({files:q.array(q.union([T8,c1]))}),q.object({files:c1}),q.object({files:T8}),q.object({file_paths:q.array(T8)}),q.object({file_paths:q.string()}),q.object({paths:q.array(q.union([T8,c1]))}),q.object({paths:c1}),q.object({paths:q.string()})]),k6=q.object({queries:q.array(q.string()).describe("Array of regex search queries to execute")}),AY=q.union([k6,q.array(q.string()),q.string(),q.object({queries:q.string()})]),y6=q.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${u1*2} characters) to avoid timeouts.`),O8=q.object({command:q.string().min(1).describe("The executable to run directly without shell parsing."),args:q.array(q.string()).optional().describe("Optional argv list passed directly to the executable.")}),fY=q.union([y6,O8]),I6=q.object({commands:q.array(y6).describe("Array of complete shell command strings to execute.")}),PL=q.object({commands:q.array(fY)}),UY=q.union([I6,PL,q.object({commands:fY}),q.array(O8),O8,q.object({command:y6}),q.object({cmd:y6}),q.array(q.string()),q.string()]),DY=q.object({url:q.string().describe("The URL to fetch"),prompt:q.string().min(2).describe("Analysis prompt for the fetched content")}),x6=q.object({requests:q.array(DY).describe("Array of the URLs for the web fetch requests")}),g6=q.object({path:q.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:q.string().nullable().optional().describe(`Exact text to replace (must match exactly once). Omit this when creating a missing file or inserting via insert_line. Keep this at or below ${u1} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:q.string().describe(`The new content to write when creating a missing file, the replacement text for edits, or the inserted text when insert_line is provided. Keep this at or below ${u1} characters when possible; for large edits, use multiple calls with small chunks of old_text and new_text to iteratively edit the file.`),insert_line:q.number().int().nullable().optional().describe("Optional positive one-based boundary line. When provided, the tool inserts new_text before that line instead of performing a replacement edit; use line_count + 1 to append at EOF.")}).describe("Edit a text file by replacing old_text with new_text, create the file with new_text if it does not exist, or insert new_text at insert_line when insert_line is provided. Prefer using this tool for file edits over shell commands. IMPORTANT: large edits can time out, so use small chunks and multiple calls when possible."),m6=q.object({input:q.string().min(1).describe("The freeform apply_patch payload in the canonical patch grammar (e.g *** Begin Patch, *** Update File:, @@, and *** End Patch).")}).describe("Modify or create a text file by applying patches using the canonical apply_patch diff grammar. Prefer sending the patch body directly rather than wrapping it in shell syntax. IMPORTANT: large patches can time out, so use small chunks and multiple calls when possible."),LY=q.union([m6,q.string()]),v6=q.object({skill:q.string().min(1).describe("Name of the skill to execute."),args:q.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),c6=q.object({question:q.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:q.array(q.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),u6=q.object({summary:q.string().min(10).describe("Summarization of the investigation, steps taken, and resolution status to submit at the end of the session. Before submitting, read the problem again along with any provided test's assertions carefully and confirm your fix produces the expected output."),verified:q.boolean().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and taken all necessary steps to resolve the issue.
55
55
  'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
56
- IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function O$($){if($ instanceof Error)return $.message;return String($)}function BY($){if(typeof $.old_text==="string"&&$.old_text.length>g1)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${g1}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>g1)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${g1}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class D2 extends Error{timeoutMs;constructor($,Z){super($);this.name="TimeoutError",this.timeoutMs=Z}}function A1($,Z,Q){return Promise.race([$,new Promise((W,J)=>{setTimeout(()=>J(new D2(Q,Z)),Z)})])}function I6($){let{path:Z,start_line:Q,end_line:W}=$;if(Q==null&&W==null)return Z;return`${Z}:${Q??1}-${W??"EOF"}`}function HY($){let{start_line:Z,end_line:Q}=$;if(Z==null||Q==null||Z<=Q)return null;return`start_line must be less than or equal to end_line (received start_line: ${Z}, end_line: ${Q})`}function GY($){let Z=jL(YY,$);if(typeof Z==="string")return[Z];if(Array.isArray(Z))return Z;if("commands"in Z)return Array.isArray(Z.commands)?Z.commands:[Z.commands];if("command"in Z)return"args"in Z?[Z]:[Z.command];if("cmd"in Z)return[Z.cmd];return[Z]}function VL($){if(typeof $==="string")return $;let Z=$.args??[];if(Z.length===0)return $.command;let Q=Z.map((W)=>/[\s"]/u.test(W)?JSON.stringify(W):W);return`${$.command} ${Q.join(" ")}`}var OQ=200;function KY($){let Z=VL($);if(Z.length<=OQ)return Z;let Q=Z.length-OQ;return`${Z.slice(0,OQ)} ... [command truncated: ${Q} more chars; full command is in the tool call input]`}var q$=48000;function U8($,Z={}){let Q=Z.maxChars??48000,W=Z.totalChars??$.length;if($.length<=Q&&W<=Q)return $;let J=Math.ceil(Q/2),X=Math.max(1,Q-J);return`${$.slice(0,J)}
57
- [... output truncated: ${W} chars total. Refine the command (grep, head, tail) to view the elided middle ...]
58
- `+$.slice(-X)}var L2=2000,qQ=2000,x6=48000,_2=48000;class g6 extends Error{exitCode;output;constructor($,Z){super(`Command exited with code ${$}`);this.exitCode=$;this.output=Z;this.name="CommandExitError"}}function AY($){let Z=Math.ceil($/2),Q=Math.max(1,$-Z),W=new BL("utf8"),J="",X="",Y=0,j=(V)=>{if(!V)return;Y+=V.length;let B=Z-J.length;if(B>0){J+=V.slice(0,B),X=(X+V.slice(B)).slice(-Q);return}X=(X+V).slice(-Q)};return{append(V){j(W.write(V))},snapshot(){return j(W.end()),{text:J+X,totalChars:Y,dropped:Y>J.length+X.length}}}}function KL($,Z,Q,W,J){return new Promise((X,Y)=>{let j=process.platform==="win32",V=FY($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!j,windowsHide:!0}),B=V.pid,H=AY(W),G=AY(W),K=!1,F=!1,A=(q)=>{if(F)return;F=!0,q()},L=()=>{if(!B)return;if(j){FY("taskkill",["/pid",String(B),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-B,"SIGKILL")}catch{V.kill("SIGKILL")}},f=(q)=>{K=!0,L(),A(()=>Y(q))},D=setTimeout(()=>f(new D2(`Command timed out after ${Q}ms`,Q)),Q),U=()=>f(Error("Command was aborted"));if(Z.signal)Z.signal.addEventListener("abort",U);let T=()=>{clearTimeout(D),Z.signal?.removeEventListener("abort",U)};V.stdout?.on("data",(q)=>{H.append(q)}),V.stderr?.on("data",(q)=>{G.append(q)}),V.on("close",(q)=>{if(T(),K)return;let z=H.snapshot(),_=G.snapshot();if(q!==0){let M=q??1,E=J?z.text+(_.text?`
56
+ IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function w$($){if($ instanceof Error)return $.message;return String($)}function TY($){if(typeof $.old_text==="string"&&$.old_text.length>u1)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${u1}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>u1)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${u1}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class q2 extends Error{timeoutMs;constructor($,Z){super($);this.name="TimeoutError",this.timeoutMs=Z}}function U1($,Z,Q){return Promise.race([$,new Promise((J,W)=>{setTimeout(()=>W(new q2(Q,Z)),Z)})])}function d6($){let{path:Z,start_line:Q,end_line:J}=$;if(Q==null&&J==null)return Z;return`${Z}:${Q??1}-${J??"EOF"}`}function OY($){let{start_line:Z,end_line:Q}=$;if(Z==null||Q==null||Z<=Q)return null;return`start_line must be less than or equal to end_line (received start_line: ${Z}, end_line: ${Q})`}var bL=new Set(["start_line","end_line"]);function yL($){if($===null||typeof $!=="object"||Array.isArray($))return!1;let Z=Object.keys($);return Z.length>0&&Z.every((Q)=>bL.has(Q))}function _Y($){let Z=[];for(let Q of $){if(yL(Q)){let J=Z[Z.length-1];if(typeof J==="string"){Z[Z.length-1]={path:J,...Q};continue}if(J!==null&&typeof J==="object"&&!Array.isArray(J)&&"path"in J&&Object.keys(Q).every((W)=>!(W in J))){Z[Z.length-1]={...J,...Q};continue}}Z.push(Q)}return Z}function qY($){if(Array.isArray($))return _Y($);if($!==null&&typeof $==="object")for(let Z of["files","paths"]){let Q=$[Z];if(Array.isArray(Q))return{...$,[Z]:_Y(Q)}}return $}function zY($){let Z=SL(UY,$);if(typeof Z==="string")return[Z];if(Array.isArray(Z))return Z;if("commands"in Z)return Array.isArray(Z.commands)?Z.commands:[Z.commands];if("command"in Z)return"args"in Z?[Z]:[Z.command];if("cmd"in Z)return[Z.cmd];return[Z]}function hL($){if(typeof $==="string")return $;let Z=$.args??[];if(Z.length===0)return $.command;let Q=Z.map((J)=>/[\s"]/u.test(J)?JSON.stringify(J):J);return`${$.command} ${Q.join(" ")}`}var wQ=200;function MY($){let Z=hL($);if(Z.length<=wQ)return Z;let Q=Z.length-wQ;return`${Z.slice(0,wQ)} ... [command truncated: ${Q} more chars; full command is in the tool call input]`}var C$=48000;function q8($,Z={}){let Q=Z.maxChars??48000,J=Z.totalChars??$.length;if($.length<=Q&&J<=Q)return $;let W=Math.ceil(Q/2),X=Math.max(1,Q-W);return`${$.slice(0,W)}
57
+ [... output truncated: ${J} chars total. Refine the command (grep, head, tail) to view the elided middle ...]
58
+ `+$.slice(-X)}var z2=2000,CQ=2000,l6=48000,M2=48000;class p6 extends Error{exitCode;output;constructor($,Z){super(`Command exited with code ${$}`);this.exitCode=$;this.output=Z;this.name="CommandExitError"}}function NY($){let Z=Math.ceil($/2),Q=Math.max(1,$-Z),J=new kL("utf8"),W="",X="",Y=0,j=(V)=>{if(!V)return;Y+=V.length;let B=Z-W.length;if(B>0){W+=V.slice(0,B),X=(X+V.slice(B)).slice(-Q);return}X=(X+V).slice(-Q)};return{append(V){j(J.write(V))},snapshot(){return j(J.end()),{text:W+X,totalChars:Y,dropped:Y>W.length+X.length}}}}function gL($,Z,Q,J,W){return new Promise((X,Y)=>{let j=process.platform==="win32",V=RY($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!j,windowsHide:!0}),B=V.pid,H=NY(J),G=NY(J),K=!1,F=!1,A=(O)=>{if(F)return;F=!0,O()},D=()=>{if(!B)return;if(j){RY("taskkill",["/pid",String(B),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-B,"SIGKILL")}catch{V.kill("SIGKILL")}},U=(O)=>{K=!0,D(),A(()=>Y(O))},L=setTimeout(()=>U(new q2(`Command timed out after ${Q}ms`,Q)),Q),f=()=>U(Error("Command was aborted"));if(Z.signal)Z.signal.addEventListener("abort",f);let z=()=>{clearTimeout(L),Z.signal?.removeEventListener("abort",f)};V.stdout?.on("data",(O)=>{H.append(O)}),V.stderr?.on("data",(O)=>{G.append(O)}),V.on("close",(O)=>{if(z(),K)return;let T=H.snapshot(),_=G.snapshot();if(O!==0){let M=O??1,N=W?T.text+(_.text?`
59
59
  [stderr]
60
- ${_.text}`:""):z.text,P=z.dropped||J&&_.dropped,c=J?z.totalChars+_.totalChars:z.totalChars;if(P||E.length>W)E=U8(E,{maxChars:W,totalChars:c});let n=E.length>0?`[Command exited with code ${M}]
61
- ${E}`:`[Command exited with code ${M}]`;A(()=>Y(new g6(M,n)))}else{let M=J?z.text+(_.text?`
60
+ ${_.text}`:""):T.text,m=T.dropped||W&&_.dropped,E=W?T.totalChars+_.totalChars:T.totalChars;if(m||N.length>J)N=q8(N,{maxChars:J,totalChars:E});let d=N.length>0?`[Command exited with code ${M}]
61
+ ${N}`:`[Command exited with code ${M}]`;A(()=>Y(new p6(M,d)))}else{let M=W?T.text+(_.text?`
62
62
  [stderr]
63
- ${_.text}`:""):z.text;if(z.dropped||J&&_.dropped||M.length>W){let P=J?z.totalChars+_.totalChars:z.totalChars;M=U8(M,{maxChars:W,totalChars:P})}A(()=>X(M))}}),V.on("error",(q)=>{T(),A(()=>Y(Error(`Failed to execute command: ${q.message}`)))})})}function D8($={}){let{shell:Z=HL(process.platform),timeoutMs:Q=30000,env:W={},combineOutput:J=!0}=$,X=$.maxOutputChars??$.maxOutputBytes??q$;return(Y,j,V)=>{let B=typeof Y!=="string";return KL({executable:B?Y.command:Z,args:B?Y.args??[]:GL(Z,Y),cwd:j,env:W},V,Q,X,J)}}function fY($,Z){let Q=$.metadata?.[Z];return typeof Q==="string"?Q:void 0}function FL($,Z){TJ(ZY($.metadata),{tool_name:"run_commands",effective_timeout_ms:Z.effectiveTimeoutMs,timeout_source:Z.timeoutSource,command_count:Z.commandCount,duration_ms:Z.durationMs,ulid:$.sessionId,mode:fY($,"mode"),source:fY($,"source"),session_id:$.sessionId,agent_id:$.agentId,conversation_id:$.conversationId,run_id:$.runId,iteration:$.iteration,tool_call_id:$.toolCallId})}function AL($){let Z=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return Z?.[1]??Z?.[2]??Z?.[3]}function fL($){let Z=[];for(let Q=0;Q<$.length;Q+=1){let W=$[Q],J=AL(W);if(!J){Z.push(W);continue}let X=$.findIndex((j,V)=>V>Q&&j.trim()===J);if(X===-1){Z.push(W);continue}let Y=[W];while(Q<X){Q+=1;let j=$[Q];Y.push(j)}Z.push(Y.join(`
64
- `))}return Z}function UL($){let Z=[],Q=[],W=()=>{if(Q.length>0)Z.push(...fL(Q)),Q=[]};for(let J of $){if(typeof J==="string"){Q.push(J);continue}W(),Z.push(J)}return W(),Z}async function DL($,Z){let{executor:Q,cwd:W,context:J,timeoutMs:X,timeoutSource:Y}=Z;return Promise.all($.map(async(j)=>{let V=Date.now(),B=KY(j);try{let H=await A1(Q(j,W,J),X,`Command timed out after ${X}ms`);return{query:B,result:H,success:!0}}catch(H){if(H instanceof D2)FL(J,{effectiveTimeoutMs:H.timeoutMs,timeoutSource:Y,commandCount:$.length,durationMs:Date.now()-V});if(H instanceof g6)return{query:B,result:H.output,error:H.message,success:!1};let G=O$(H);return{query:B,result:"",error:`Command failed: ${G}`,success:!1}}}))}function DY($,Z={}){let Q=Z.fileReadTimeoutMs??1e4;return m1({name:"read_files",description:`Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. When you already know multiple files you need, read them together in one call, and call this tool in the same response as other independent tool calls. Each read returns at most ${L2} lines / ~${Math.round(x6/1024)}k characters; longer files report their total line count, page through them with start_line/end_line. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. `,inputSchema:f1(N6),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(W,J)=>{let X=v1(WY,W),Y;if(typeof X==="string")Y=[{path:X}];else if(Array.isArray(X))Y=X.map((j)=>typeof j==="string"?{path:j}:j);else if("files"in X)Y=(Array.isArray(X.files)?X.files:[X.files]).map((V)=>typeof V==="string"?{path:V}:V);else if("file_paths"in X)Y=(Array.isArray(X.file_paths)?X.file_paths:[X.file_paths]).map((V)=>({path:V}));else if("paths"in X)Y=(Array.isArray(X.paths)?X.paths:[X.paths]).map((V)=>typeof V==="string"?{path:V}:V);else Y=[X];return Promise.all(Y.map(async(j)=>{let V=HY(j);if(V)return{query:I6(j),result:"",error:`Invalid file range: ${V}`,success:!1};try{let B=await A1($(j,J),Q,`File read timed out after ${Q}ms`);return{query:I6(j),result:B,success:!0}}catch(B){let H=O$(B);return{query:I6(j),result:"",error:`Error reading file: ${H}`,success:!1}}}))}})}function LY($,Z={}){let Q=Z.searchTimeoutMs??30000,W=Z.cwd??process.cwd();return m1({name:"search_codebase",description:`Perform regex pattern searches across the codebase. Supports multiple parallel searches. When several search patterns could be useful and do not depend on each other, run them together in one call, and call this tool in the same response as other independent tool calls. Use for finding code patterns, function definitions, class names, imports, etc. Output beyond ~${Math.round(_2/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:f1(C6),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(J,X)=>{let Y=v1(JY,J),j=Array.isArray(Y)?Y:typeof Y==="object"?Array.isArray(Y.queries)?Y.queries:[Y.queries]:[Y];return Promise.all(j.map(async(V)=>{try{let B=await A1($(V,W,X),Q,`Search timed out after ${Q}ms`);return{query:V,result:B,success:!0}}catch(B){let H=O$(B);return{query:V,result:"",error:`Search failed: ${H}`,success:!1}}}))}})}var UY="Use for listing files, checking git status, running builds, executing tests, etc. Commands must be non-interactive. Commands that require follow-up input like pagers should be skipped or used with supported flags/env (e.g. git --no-pager, --non-interactive) to bypass the interaction steps. ";function MQ($,Z={}){let Q=Z.bashTimeoutMs??30000,W=Z.bashTimeoutMs===void 0?"default_setting":"configured_setting",J=Z.cwd??process.cwd(),X=process.platform==="win32";return m1({name:"run_commands",description:X?"Run non-interactive shell commands from the root of the workspace in Windows environment. "+UY+`Output beyond ~${Math.round(q$/1000)}k characters is middle-truncated (start and end preserved); filter output when you need specific sections. Commands run through PowerShell; quote paths and arguments for PowerShell and use ';' to sequence commands. Include multiple commands in the same call when they are independent and safe to run concurrently. When independent reads, searches, or edits are also needed, call those tools in the same response.`:"Run non-interactive shell commands from the root of the workspace. "+UY+`Commands should be properly shell-escaped and targeted to avoid error or timeout. Include multiple commands in the same call when they are independent complete shell commands and safe to run concurrently; multiline scripts and heredocs must be a single command string. When independent reads, searches, or edits are also needed, call those tools in the same response. Output beyond ~${Math.round(q$/1000)}k characters is middle-truncated (start and end preserved); pipe through grep/head/tail when you need specific sections of large output. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.`,inputSchema:f1(w6),timeoutMs:Q*2,retryable:!1,maxRetries:0,execute:async(Y,j)=>{let V=UL(GY(Y));return DL(V,{executor:$,cwd:J,context:j,timeoutMs:Q,timeoutSource:W})}})}function _Y($,Z={}){let Q=Z.webFetchTimeoutMs??30000;return m1({name:"fetch_web_content",description:"Fetch content from URLs and analyze them using the provided prompts. Use for retrieving documentation, API references, or any web content. Each request includes a URL and a prompt describing what information to extract. Fetch independent URLs together in one call, and call this tool in the same response as other independent tool calls.",inputSchema:f1(P6),timeoutMs:Q*2,retryable:!0,maxRetries:2,execute:async(W,J)=>{let X=v1(P6,W);return Promise.all(X.requests.map(async(Y)=>{try{let j=await A1($(Y.url,Y.prompt,J),Q,`Web fetch timed out after ${Q}ms`);return{query:Y.url,result:j,success:!0}}catch(j){let V=O$(j);return{query:Y.url,result:"",error:`Error fetching web content: ${V}`,success:!1}}}))}})}var LL=`Use \`apply_patch\` to edit files with the canonical freeform patch grammar. Pass the patch text directly as the \`input\` string. Prefer the exact format below:
63
+ ${_.text}`:""):T.text;if(T.dropped||W&&_.dropped||M.length>J){let m=W?T.totalChars+_.totalChars:T.totalChars;M=q8(M,{maxChars:J,totalChars:m})}A(()=>X(M))}}),V.on("error",(O)=>{z(),A(()=>Y(Error(`Failed to execute command: ${O.message}`)))})})}function z8($={}){let{shell:Z=IL(process.platform),timeoutMs:Q=30000,env:J={},combineOutput:W=!0}=$,X=$.maxOutputChars??$.maxOutputBytes??C$;return(Y,j,V)=>{let B=typeof Y!=="string";return gL({executable:B?Y.command:Z,args:B?Y.args??[]:xL(Z,Y),cwd:j,env:J},V,Q,X,W)}}function EY($,Z){let Q=$.metadata?.[Z];return typeof Q==="string"?Q:void 0}function mL($,Z){SW(GY($.metadata),{tool_name:"run_commands",effective_timeout_ms:Z.effectiveTimeoutMs,timeout_source:Z.timeoutSource,command_count:Z.commandCount,duration_ms:Z.durationMs,ulid:$.sessionId,mode:EY($,"mode"),source:EY($,"source"),session_id:$.sessionId,agent_id:$.agentId,conversation_id:$.conversationId,run_id:$.runId,iteration:$.iteration,tool_call_id:$.toolCallId})}function vL($){let Z=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return Z?.[1]??Z?.[2]??Z?.[3]}function cL($){let Z=[];for(let Q=0;Q<$.length;Q+=1){let J=$[Q],W=vL(J);if(!W){Z.push(J);continue}let X=$.findIndex((j,V)=>V>Q&&j.trim()===W);if(X===-1){Z.push(J);continue}let Y=[J];while(Q<X){Q+=1;let j=$[Q];Y.push(j)}Z.push(Y.join(`
64
+ `))}return Z}function uL($){let Z=[],Q=[],J=()=>{if(Q.length>0)Z.push(...cL(Q)),Q=[]};for(let W of $){if(typeof W==="string"){Q.push(W);continue}J(),Z.push(W)}return J(),Z}async function dL($,Z){let{executor:Q,cwd:J,context:W,timeoutMs:X,timeoutSource:Y}=Z;return Promise.all($.map(async(j)=>{let V=Date.now(),B=MY(j);try{let H=await U1(Q(j,J,W),X,`Command timed out after ${X}ms`);return{query:B,result:H,success:!0}}catch(H){if(H instanceof q2)mL(W,{effectiveTimeoutMs:H.timeoutMs,timeoutSource:Y,commandCount:$.length,durationMs:Date.now()-V});if(H instanceof p6)return{query:B,result:H.output,error:H.message,success:!1};let G=w$(H);return{query:B,result:"",error:`Command failed: ${G}`,success:!1}}}))}function CY($,Z={}){let Q=Z.fileReadTimeoutMs??1e4;return d1({name:"read_files",description:`Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided on the same file entry as its path. When you already know multiple files you need, read them together in one call, and call this tool in the same response as other independent tool calls. Each read returns at most ${z2} lines / ~${Math.round(l6/1024)}k characters; longer files report their total line count, page through them with start_line/end_line on that file's entry. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. `,inputSchema:D1(h6),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(J,W)=>{let X=l1(FY,qY(J)),Y;if(typeof X==="string")Y=[{path:X}];else if(Array.isArray(X))Y=X.map((j)=>typeof j==="string"?{path:j}:j);else if("files"in X)Y=(Array.isArray(X.files)?X.files:[X.files]).map((V)=>typeof V==="string"?{path:V}:V);else if("file_paths"in X)Y=(Array.isArray(X.file_paths)?X.file_paths:[X.file_paths]).map((V)=>({path:V}));else if("paths"in X)Y=(Array.isArray(X.paths)?X.paths:[X.paths]).map((V)=>typeof V==="string"?{path:V}:V);else Y=[X];return Promise.all(Y.map(async(j)=>{let V=OY(j);if(V)return{query:d6(j),result:"",error:`Invalid file range: ${V}`,success:!1};try{let B=await U1($(j,W),Q,`File read timed out after ${Q}ms`);return{query:d6(j),result:B,success:!0}}catch(B){let H=w$(B);return{query:d6(j),result:"",error:`Error reading file: ${H}`,success:!1}}}))}})}function PY($,Z={}){let Q=Z.searchTimeoutMs??30000,J=Z.cwd??process.cwd();return d1({name:"search_codebase",description:`Perform regex pattern searches across the codebase. Supports multiple parallel searches. When several search patterns could be useful and do not depend on each other, run them together in one call, and call this tool in the same response as other independent tool calls. Use for finding code patterns, function definitions, class names, imports, etc. Output beyond ~${Math.round(M2/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:D1(k6),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(W,X)=>{let Y=l1(AY,W),j=Array.isArray(Y)?Y:typeof Y==="object"?Array.isArray(Y.queries)?Y.queries:[Y.queries]:[Y];return Promise.all(j.map(async(V)=>{try{let B=await U1($(V,J,X),Q,`Search timed out after ${Q}ms`);return{query:V,result:B,success:!0}}catch(B){let H=w$(B);return{query:V,result:"",error:`Search failed: ${H}`,success:!1}}}))}})}var wY="Use for listing files, checking git status, running builds, executing tests, etc. Commands must be non-interactive. Commands that require follow-up input like pagers should be skipped or used with supported flags/env (e.g. git --no-pager, --non-interactive) to bypass the interaction steps. ";function PQ($,Z={}){let Q=Z.bashTimeoutMs??30000,J=Z.bashTimeoutMs===void 0?"default_setting":"configured_setting",W=Z.cwd??process.cwd(),X=process.platform==="win32";return d1({name:"run_commands",description:X?"Run non-interactive shell commands from the root of the workspace in Windows environment. "+wY+`Output beyond ~${Math.round(C$/1000)}k characters is middle-truncated (start and end preserved); filter output when you need specific sections. Commands run through PowerShell; quote paths and arguments for PowerShell and use ';' to sequence commands. Include multiple commands in the same call when they are independent and safe to run concurrently. When independent reads, searches, or edits are also needed, call those tools in the same response.`:"Run non-interactive shell commands from the root of the workspace. "+wY+`Commands should be properly shell-escaped and targeted to avoid error or timeout. Include multiple commands in the same call when they are independent complete shell commands and safe to run concurrently; multiline scripts and heredocs must be a single command string. When independent reads, searches, or edits are also needed, call those tools in the same response. Output beyond ~${Math.round(C$/1000)}k characters is middle-truncated (start and end preserved); pipe through grep/head/tail when you need specific sections of large output. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.`,inputSchema:D1(I6),timeoutMs:Q*2,retryable:!1,maxRetries:0,execute:async(Y,j)=>{let V=uL(zY(Y));return dL(V,{executor:$,cwd:W,context:j,timeoutMs:Q,timeoutSource:J})}})}function SY($,Z={}){let Q=Z.webFetchTimeoutMs??30000;return d1({name:"fetch_web_content",description:"Fetch content from URLs and analyze them using the provided prompts. Use for retrieving documentation, API references, or any web content. Each request includes a URL and a prompt describing what information to extract. Fetch independent URLs together in one call, and call this tool in the same response as other independent tool calls.",inputSchema:D1(x6),timeoutMs:Q*2,retryable:!0,maxRetries:2,execute:async(J,W)=>{let X=l1(x6,J);return Promise.all(X.requests.map(async(Y)=>{try{let j=await U1($(Y.url,Y.prompt,W),Q,`Web fetch timed out after ${Q}ms`);return{query:Y.url,result:j,success:!0}}catch(j){let V=w$(j);return{query:Y.url,result:"",error:`Error fetching web content: ${V}`,success:!1}}}))}})}var lL=`Use \`apply_patch\` to edit files with the canonical freeform patch grammar. Pass the patch text directly as the \`input\` string. Prefer the exact format below:
65
65
 
66
66
  *** Begin Patch
67
67
  *** Update File: path/to/file.ts
@@ -97,96 +97,96 @@ Example:
97
97
  </div>
98
98
  );
99
99
  }
100
- *** End Patch`;function zY($,Z={}){let Q=Z.applyPatchTimeoutMs??30000,W=Z.cwd??process.cwd();return m1({name:"apply_patch",description:LL,inputSchema:f1(b6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(J,X)=>{let Y=v1(VY,J),j=typeof Y==="string"?Y:Y.input;try{return{query:"apply_patch",result:await A1($({input:j},W,X),Q,`apply_patch timed out after ${Q}ms`),success:!0}}catch(V){return{query:"apply_patch",result:"",error:`apply_patch failed: ${O$(V)}`,success:!1}}}})}function TY($,Z={}){let Q=Z.editorTimeoutMs??30000,W=Z.cwd??process.cwd();return m1({name:"editor",description:"An editor for controlled filesystem edits on the text file at the provided path. Provide `insert_line` to insert `new_text` at a specific line number. Otherwise, the tool replaces `old_text` with `new_text`, or creates the file with `new_text` if file does not exist. Use this tool for making small, precise edits to existing files or creating new files over shell commands. If several edits to different files or non-overlapping regions are already known, emit multiple editor tool calls in the same response instead of serializing them across turns.",inputSchema:f1(S6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(J,X)=>{let Y=v1(S6,J),j=Y.insert_line==null?"edit":"insert",V=BY(Y);if(V)return{query:`${j}:${Y.path}`,result:"",error:V,success:!1};try{let B=await A1($(Y,W,X),Q,`Editor operation timed out after ${Q}ms`);return{query:`${j}:${Y.path}`,result:B,success:!0}}catch(B){let H=O$(B);return{query:`${j}:${Y.path}`,result:"",error:`Editor operation failed: ${H}`,success:!1}}}})}function z2($,Z={}){let Q=Z.skillsTimeoutMs??15000,W='Execute a skill within the main conversation. When users ask you to perform tasks, check if any available skills match. When users reference a slash command, invoke it with this tool. Input: `skill` (required) and optional `args`. Example: `skill: "pdf"`, `skill: "commit", args: "-m \\"Fix bug\\""`, `skill: "review-pr", args: "123"`, `skill: "ms-office-suite:pdf"`. When a skill matches the user\'s request, invoking this tool is a blocking requirement before any other response. Never mention a skill without invoking this tool.',J=m1({name:"skills",description:W,inputSchema:f1(y6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(X,Y)=>{let j=v1(y6,X);return A1($(j.skill,j.args||void 0,Y),Q,`Skills operation timed out after ${Q}ms`)}});return Object.defineProperty(J,"description",{get(){let X=$.configuredSkills?.filter((Y)=>!Y.disabled).map((Y)=>Y.name);if(X&&X.length>0)return`${W} Available skills: ${X.join(", ")}.`;return W},enumerable:!0,configurable:!0}),J}function OY($){return{name:"ask_question",description:"Ask user a question for clarifying or gathering information needed to complete the task. For example, ask the user clarifying questions about a key implementation decision. You should only ask one question. Provide an array of 2-5 options for the user to choose from. Never include an option to toggle to Act mode.",inputSchema:f1(h6),retryable:!1,maxRetries:0,execute:async(Z,Q)=>{let W=v1(h6,Z);return $(W.question,W.options,Q)}}}function qY($,Z={}){let Q=Z.submitTimeoutMs??15000;return m1({name:"submit_and_exit",description:"Submit the final answer and exit the conversation. For example, submit a summary of the investigation and confirm the issue is resolved. You should only submit once all necessary steps are completed. Make sure to verify your output matches the expected format, data types, and file locations specified. Provide a summary of the investigation and confirm the issue is resolved.",inputSchema:f1(k6),lifecycle:{completesRun:!0},timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(W,J)=>{let X=v1(k6,W);return A1($(X.summary,X.verified,J),Q,`submit_and_exit timed out after ${Q}ms`)}})}function T2($){let{executors:Z,enableReadFiles:Q=!0,enableSearch:W=!0,enableBash:J=!0,enableWebFetch:X=!0,enableApplyPatch:Y=!1,enableEditor:j=!0,enableSkills:V=!0,enableAskQuestion:B=!0,enableSubmitAndExit:H=!1,...G}=$,K=[];if(Q&&Z.readFile)K.push(DY(Z.readFile,G));if(W&&Z.search)K.push(LY(Z.search,G));if(J&&Z.bash)K.push(MQ(Z.bash,G));if(X&&Z.webFetch)K.push(_Y(Z.webFetch,G));if(j&&Z.editor)K.push(TY(Z.editor,G));else if(Y&&Z.applyPatch)K.push(zY(Z.applyPatch,G));if(V&&Z.skills)K.push(z2(Z.skills,G));let F=H?Z.submit:void 0;if(B&&Z.askQuestion&&!F)K.push(OY(Z.askQuestion));if(F)K.push(qY(F,G));return K}import*as y0 from"node:fs/promises";import*as h0 from"node:path";var v={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},RY=["%%bash","apply_patch","EOF","```"];class J0 extends Error{constructor($){super($);this.name="DiffError"}}function b0($){let Z={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(Q)=>Z[Q]??Q).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class RQ{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor($,Z){this.lines=$;this.currentFiles=Z}parse(){this.skipBeginSentinel();while(this.hasMoreLines()&&!this.isEndMarker())this.parseNextAction();if(this.patch.warnings?.length===0)delete this.patch.warnings;return{patch:this.patch,fuzz:this.fuzz}}addWarning($){if(!this.patch.warnings)this.patch.warnings=[];this.patch.warnings.push($)}skipBeginSentinel(){if(this.lines[this.index]?.startsWith(v.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(v.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(v.UPDATE)){this.parseUpdate($.substring(v.UPDATE.length).trim());return}if($?.startsWith(v.DELETE)){this.parseDelete($.substring(v.DELETE.length).trim());return}if($?.startsWith(v.ADD)){this.parseAdd($.substring(v.ADD.length).trim());return}throw new J0(`Unknown line while parsing: ${$}`)}checkDuplicate($,Z){if($ in this.patch.actions)throw new J0(`Duplicate ${Z} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let Z=this.lines[this.index]?.startsWith(v.MOVE)?(this.lines[this.index++]??"").substring(v.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new J0(`Update File Error: Missing File: ${$}`);let Q=this.currentFiles[$]??"",W=this.parseUpdateFile(Q,$);W.movePath=Z,this.patch.actions[$]=W,this.currentPath=void 0}parseUpdateFile($,Z){let Q={type:"update",chunks:[]},W=$.split(`
101
- `),J=0,X=[v.END,v.UPDATE,v.DELETE,v.ADD,v.END_FILE];while(!X.some((Y)=>this.lines[this.index]?.startsWith(Y.trim()))){let Y=this.lines[this.index],j=Y?.startsWith("@@ ")?Y.substring(3):void 0;if(j!==void 0||(Y==="@@"?Y:void 0)!==void 0)this.index++;else if(J!==0)throw new J0(`Invalid Line:
102
- ${this.lines[this.index]}`);if(j?.trim()){let f=b0(j.trim());for(let D=J;D<W.length;D++){let U=W[D];if(U&&(b0(U)===f||b0(U.trim())===f)){if(J=D+1,b0(U.trim())===f&&b0(U)!==f)this.fuzz++;break}}}let[B,H,G,K]=TL(this.lines,this.index),[F,A,L]=zL(W,B,J,K);if(F===-1){let f=B.join(`
103
- `);this.addWarning({path:this.currentPath||Z,chunkIndex:Q.chunks.length,message:`Could not find matching context (similarity: ${L.toFixed(2)}). Chunk skipped.`,context:f.length>200?`${f.substring(0,200)}...`:f}),this.index=G}else{this.fuzz+=A;for(let f of H)f.origIndex+=F,Q.chunks.push(f);J=F+B.length,this.index=G}}return Q}parseDelete($){if(this.checkDuplicate($,"delete"),!($ in this.currentFiles))throw new J0(`Delete File Error: Missing File: ${$}`);this.patch.actions[$]={type:"delete",chunks:[]},this.index++}parseAdd($){if(this.checkDuplicate($,"add"),$ in this.currentFiles)throw new J0(`Add File Error: File already exists: ${$}`);this.index++;let Z=[],Q=[v.END,v.UPDATE,v.DELETE,v.ADD];while(this.hasMoreLines()&&!Q.some((W)=>this.lines[this.index]?.startsWith(W.trim()))){let W=this.lines[this.index++];if(W===void 0)break;if(!W.startsWith("+"))throw new J0(`Invalid Add File line (missing '+'): ${W}`);Z.push(W.substring(1))}this.patch.actions[$]={type:"add",newFile:Z.join(`
104
- `),chunks:[]}}}function MY($,Z){let Q=$.length>Z.length?$:Z,W=$.length>Z.length?Z:$;if(Q.length===0)return 1;let J=_L(W,Q);return(Q.length-J)/Q.length}function _L($,Z){let Q=Z.length+1,W=$.length+1,J=Array(Q*W).fill(0),X=(j,V)=>J[j*W+V]??0,Y=(j,V,B)=>{J[j*W+V]=B};for(let j=0;j<=Z.length;j++)Y(j,0,j);for(let j=0;j<=$.length;j++)Y(0,j,j);for(let j=1;j<=Z.length;j++)for(let V=1;V<=$.length;V++)if(Z[j-1]===$[V-1])Y(j,V,X(j-1,V-1));else Y(j,V,1+Math.min(X(j-1,V-1),X(j,V-1),X(j-1,V)));return X(Z.length,$.length)}function zL($,Z,Q,W){if(Z.length===0)return[Q,0,1];let J=0,X=(Y)=>{let j=b0(Z.join(`
105
- `));for(let B=Y;B<$.length;B++){let H=b0($.slice(B,B+Z.length).join(`
106
- `));if(H===j)return[B,0,1];let G=MY(H,j);if(G>J)J=G}for(let B=Y;B<$.length;B++){let H=b0($.slice(B,B+Z.length).map((K)=>K.trimEnd()).join(`
107
- `)),G=b0(Z.map((K)=>K.trimEnd()).join(`
108
- `));if(H===G)return[B,1,1]}for(let B=Y;B<$.length;B++){let H=b0($.slice(B,B+Z.length).map((K)=>K.trim()).join(`
109
- `)),G=b0(Z.map((K)=>K.trim()).join(`
110
- `));if(H===G)return[B,100,1]}let V=0.66;for(let B=Y;B<$.length;B++){let H=b0($.slice(B,B+Z.length).join(`
111
- `)),G=MY(H,j);if(G>=V)return[B,1000,G];if(G>J)J=G}return[-1,0,J]};if(W){let[Y,j,V]=X($.length-Z.length);if(Y!==-1)return[Y,j,V];return[Y,j,V]=X(Q),[Y,j+1e4,V]}return X(Q)}function TL($,Z){let Q=Z,W=[],J=[],X=[],Y=[],j="keep",V=["@@",v.END,v.UPDATE,v.DELETE,v.ADD,v.END_FILE];while(Q<$.length){let B=$[Q];if(!B||V.some((K)=>B.startsWith(K.trim())))break;if(B==="***")break;if(B.startsWith("***"))throw new J0(`Invalid line: ${B}`);Q++;let H=j,G=B;if(G[0]==="+")j="add";else if(G[0]==="-")j="delete";else if(G[0]===" ")j="keep";else j="keep",G=` ${G}`;if(G=G.slice(1),j==="keep"&&H!==j){if(X.length||J.length)Y.push({origIndex:W.length-J.length,delLines:J,insLines:X});J=[],X=[]}if(j==="delete")J.push(G),W.push(G);else if(j==="add")X.push(G);else W.push(G)}if(X.length||J.length)Y.push({origIndex:W.length-J.length,delLines:J,insLines:X});if(Q<$.length&&$[Q]===v.END_FILE)return Q++,[W,Y,Q,!0];return[W,Y,Q,!1]}function EQ($,Z,Q){let W=h0.isAbsolute(Z),J=W?h0.normalize(Z):h0.resolve($,Z);if(!Q||W)return J;let X=h0.relative($,J);if(X.startsWith("..")||h0.isAbsolute(X))throw new J0(`Path must stay within cwd: ${Z}`);return J}function OL($){return $.split(`
112
- `).map((Z)=>Z.replace(/\r$/,""))}function EY($){if($.trim()==="")return!1;return RY.some((Z)=>$.startsWith(Z))}function qL($){let Z=0,Q=$.length;while(Z<Q&&EY($[Z]??""))Z++;while(Q>Z&&EY($[Q-1]??""))Q--;return $.slice(Z,Q)}function ML($){let Z=OL($),Q=Z.findIndex((Y)=>Y.startsWith(v.BEGIN)),W=-1;for(let Y=Z.length-1;Y>=0;Y--)if(Z[Y]?.startsWith(v.END)){W=Y;break}if(Q!==-1||W!==-1){if(Q===-1||W===-1||W<Q)throw new J0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:Z.slice(Q,W+1)}}let J=qL(Z);while(J.length>0&&J[0]==="")J.shift();while(J.length>0&&J[J.length-1]==="")J.pop();return{lines:[v.BEGIN,...J,v.END]}}function RL($,Z){let Q=new Set;for(let W of $)for(let J of Z)if(W.startsWith(J)){Q.add(W.substring(J.length).trim());break}return[...Q]}function EL($,Z,Q){if(Z.length===0)return $;let W=$.split(`
113
- `),J=[],X=0;for(let Y of Z){if(Y.origIndex>W.length)throw new J0(`${Q}: chunk.origIndex ${Y.origIndex} > lines.length ${W.length}`);if(X>Y.origIndex)throw new J0(`${Q}: currentIndex ${X} > chunk.origIndex ${Y.origIndex}`);J.push(...W.slice(X,Y.origIndex)),J.push(...Y.insLines),X=Y.origIndex+Y.delLines.length}return J.push(...W.slice(X)),J.join(`
114
- `)}async function NL($,Z,Q,W){let J=RL($,[v.UPDATE,v.DELETE]),X={};for(let Y of J){let j=EQ(Z,Y,W),V;try{V=await y0.readFile(j,Q)}catch{throw new J0(`File not found: ${Y}`)}X[Y]=V.replace(/\r\n/g,`
115
- `)}return X}function CL($,Z){let Q={};for(let[W,J]of Object.entries($.actions))switch(J.type){case"delete":Q[W]={type:"delete",oldContent:Z[W]};break;case"add":if(J.newFile===void 0)throw new J0("ADD action without file content");Q[W]={type:"add",newContent:J.newFile};break;case"update":Q[W]={type:"update",oldContent:Z[W],newContent:EL(Z[W]??"",J.chunks,W),movePath:J.movePath};break}return Q}function wL($){let Z=[`Patch could not be applied because ${$.length} hunk${$.length===1?"":"s"} did not match the current file content.`];for(let Q of $){let W=Q.chunkIndex===void 0?"unknown":String(Q.chunkIndex+1);if(Z.push(`${Q.path}: hunk ${W}: ${Q.message}`),Q.context)Z.push(`Context:
100
+ *** End Patch`;function bY($,Z={}){let Q=Z.applyPatchTimeoutMs??30000,J=Z.cwd??process.cwd();return d1({name:"apply_patch",description:lL,inputSchema:D1(m6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(W,X)=>{let Y=l1(LY,W),j=typeof Y==="string"?Y:Y.input;try{return{query:"apply_patch",result:await U1($({input:j},J,X),Q,`apply_patch timed out after ${Q}ms`),success:!0}}catch(V){return{query:"apply_patch",result:"",error:`apply_patch failed: ${w$(V)}`,success:!1}}}})}function yY($,Z={}){let Q=Z.editorTimeoutMs??30000,J=Z.cwd??process.cwd();return d1({name:"editor",description:"An editor for controlled filesystem edits on the text file at the provided path. Provide `insert_line` to insert `new_text` at a specific line number. Otherwise, the tool replaces `old_text` with `new_text`, or creates the file with `new_text` if file does not exist. Use this tool for making small, precise edits to existing files or creating new files over shell commands. If several edits to different files or non-overlapping regions are already known, emit multiple editor tool calls in the same response instead of serializing them across turns.",inputSchema:D1(g6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(W,X)=>{let Y=l1(g6,W),j=Y.insert_line==null?"edit":"insert",V=TY(Y);if(V)return{query:`${j}:${Y.path}`,result:"",error:V,success:!1};try{let B=await U1($(Y,J,X),Q,`Editor operation timed out after ${Q}ms`);return{query:`${j}:${Y.path}`,result:B,success:!0}}catch(B){let H=w$(B);return{query:`${j}:${Y.path}`,result:"",error:`Editor operation failed: ${H}`,success:!1}}}})}function R2($,Z={}){let Q=Z.skillsTimeoutMs??15000,J='Execute a skill within the main conversation. When users ask you to perform tasks, check if any available skills match. When users reference a slash command, invoke it with this tool. Input: `skill` (required) and optional `args`. Example: `skill: "pdf"`, `skill: "commit", args: "-m \\"Fix bug\\""`, `skill: "review-pr", args: "123"`, `skill: "ms-office-suite:pdf"`. When a skill matches the user\'s request, invoking this tool is a blocking requirement before any other response. Never mention a skill without invoking this tool.',W=d1({name:"skills",description:J,inputSchema:D1(v6),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(X,Y)=>{let j=l1(v6,X);return U1($(j.skill,j.args||void 0,Y),Q,`Skills operation timed out after ${Q}ms`)}});return Object.defineProperty(W,"description",{get(){let X=$.configuredSkills?.filter((Y)=>!Y.disabled).map((Y)=>Y.name);if(X&&X.length>0)return`${J} Available skills: ${X.join(", ")}.`;return J},enumerable:!0,configurable:!0}),W}function hY($){return{name:"ask_question",description:"Ask user a question for clarifying or gathering information needed to complete the task. For example, ask the user clarifying questions about a key implementation decision. You should only ask one question. Provide an array of 2-5 options for the user to choose from. Never include an option to toggle to Act mode.",inputSchema:D1(c6),retryable:!1,maxRetries:0,execute:async(Z,Q)=>{let J=l1(c6,Z);return $(J.question,J.options,Q)}}}function kY($,Z={}){let Q=Z.submitTimeoutMs??15000;return d1({name:"submit_and_exit",description:"Submit the final answer and exit the conversation. For example, submit a summary of the investigation and confirm the issue is resolved. You should only submit once all necessary steps are completed. Make sure to verify your output matches the expected format, data types, and file locations specified. Provide a summary of the investigation and confirm the issue is resolved.",inputSchema:D1(u6),lifecycle:{completesRun:!0},timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(J,W)=>{let X=l1(u6,J);return U1($(X.summary,X.verified,W),Q,`submit_and_exit timed out after ${Q}ms`)}})}function N2($){let{executors:Z,enableReadFiles:Q=!0,enableSearch:J=!0,enableBash:W=!0,enableWebFetch:X=!0,enableApplyPatch:Y=!1,enableEditor:j=!0,enableSkills:V=!0,enableAskQuestion:B=!0,enableSubmitAndExit:H=!1,...G}=$,K=[];if(Q&&Z.readFile)K.push(CY(Z.readFile,G));if(J&&Z.search)K.push(PY(Z.search,G));if(W&&Z.bash)K.push(PQ(Z.bash,G));if(X&&Z.webFetch)K.push(SY(Z.webFetch,G));if(j&&Z.editor)K.push(yY(Z.editor,G));else if(Y&&Z.applyPatch)K.push(bY(Z.applyPatch,G));if(V&&Z.skills)K.push(R2(Z.skills,G));let F=H?Z.submit:void 0;if(B&&Z.askQuestion&&!F)K.push(hY(Z.askQuestion));if(F)K.push(kY(F,G));return K}import*as v0 from"node:fs/promises";import*as c0 from"node:path";var u={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},xY=["%%bash","apply_patch","EOF","```"];class Y0 extends Error{constructor($){super($);this.name="DiffError"}}function m0($){let Z={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(Q)=>Z[Q]??Q).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class SQ{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor($,Z){this.lines=$;this.currentFiles=Z}parse(){this.skipBeginSentinel();while(this.hasMoreLines()&&!this.isEndMarker())this.parseNextAction();if(this.patch.warnings?.length===0)delete this.patch.warnings;return{patch:this.patch,fuzz:this.fuzz}}addWarning($){if(!this.patch.warnings)this.patch.warnings=[];this.patch.warnings.push($)}skipBeginSentinel(){if(this.lines[this.index]?.startsWith(u.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(u.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(u.UPDATE)){this.parseUpdate($.substring(u.UPDATE.length).trim());return}if($?.startsWith(u.DELETE)){this.parseDelete($.substring(u.DELETE.length).trim());return}if($?.startsWith(u.ADD)){this.parseAdd($.substring(u.ADD.length).trim());return}throw new Y0(`Unknown line while parsing: ${$}`)}checkDuplicate($,Z){if($ in this.patch.actions)throw new Y0(`Duplicate ${Z} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let Z=this.lines[this.index]?.startsWith(u.MOVE)?(this.lines[this.index++]??"").substring(u.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new Y0(`Update File Error: Missing File: ${$}`);let Q=this.currentFiles[$]??"",J=this.parseUpdateFile(Q,$);J.movePath=Z,this.patch.actions[$]=J,this.currentPath=void 0}parseUpdateFile($,Z){let Q={type:"update",chunks:[]},J=$.split(`
101
+ `),W=0,X=[u.END,u.UPDATE,u.DELETE,u.ADD,u.END_FILE];while(!X.some((Y)=>this.lines[this.index]?.startsWith(Y.trim()))){let Y=this.lines[this.index],j=Y?.startsWith("@@ ")?Y.substring(3):void 0;if(j!==void 0||(Y==="@@"?Y:void 0)!==void 0)this.index++;else if(W!==0)throw new Y0(`Invalid Line:
102
+ ${this.lines[this.index]}`);if(j?.trim()){let U=m0(j.trim());for(let L=W;L<J.length;L++){let f=J[L];if(f&&(m0(f)===U||m0(f.trim())===U)){if(W=L+1,m0(f.trim())===U&&m0(f)!==U)this.fuzz++;break}}}let[B,H,G,K]=iL(this.lines,this.index),[F,A,D]=rL(J,B,W,K);if(F===-1){let U=B.join(`
103
+ `);this.addWarning({path:this.currentPath||Z,chunkIndex:Q.chunks.length,message:`Could not find matching context (similarity: ${D.toFixed(2)}). Chunk skipped.`,context:U.length>200?`${U.substring(0,200)}...`:U}),this.index=G}else{this.fuzz+=A;for(let U of H)U.origIndex+=F,Q.chunks.push(U);W=F+B.length,this.index=G}}return Q}parseDelete($){if(this.checkDuplicate($,"delete"),!($ in this.currentFiles))throw new Y0(`Delete File Error: Missing File: ${$}`);this.patch.actions[$]={type:"delete",chunks:[]},this.index++}parseAdd($){if(this.checkDuplicate($,"add"),$ in this.currentFiles)throw new Y0(`Add File Error: File already exists: ${$}`);this.index++;let Z=[],Q=[u.END,u.UPDATE,u.DELETE,u.ADD];while(this.hasMoreLines()&&!Q.some((J)=>this.lines[this.index]?.startsWith(J.trim()))){let J=this.lines[this.index++];if(J===void 0)break;if(!J.startsWith("+"))throw new Y0(`Invalid Add File line (missing '+'): ${J}`);Z.push(J.substring(1))}this.patch.actions[$]={type:"add",newFile:Z.join(`
104
+ `),chunks:[]}}}function IY($,Z){let Q=$.length>Z.length?$:Z,J=$.length>Z.length?Z:$;if(Q.length===0)return 1;let W=pL(J,Q);return(Q.length-W)/Q.length}function pL($,Z){let Q=Z.length+1,J=$.length+1,W=Array(Q*J).fill(0),X=(j,V)=>W[j*J+V]??0,Y=(j,V,B)=>{W[j*J+V]=B};for(let j=0;j<=Z.length;j++)Y(j,0,j);for(let j=0;j<=$.length;j++)Y(0,j,j);for(let j=1;j<=Z.length;j++)for(let V=1;V<=$.length;V++)if(Z[j-1]===$[V-1])Y(j,V,X(j-1,V-1));else Y(j,V,1+Math.min(X(j-1,V-1),X(j,V-1),X(j-1,V)));return X(Z.length,$.length)}function rL($,Z,Q,J){if(Z.length===0)return[Q,0,1];let W=0,X=(Y)=>{let j=m0(Z.join(`
105
+ `));for(let B=Y;B<$.length;B++){let H=m0($.slice(B,B+Z.length).join(`
106
+ `));if(H===j)return[B,0,1];let G=IY(H,j);if(G>W)W=G}for(let B=Y;B<$.length;B++){let H=m0($.slice(B,B+Z.length).map((K)=>K.trimEnd()).join(`
107
+ `)),G=m0(Z.map((K)=>K.trimEnd()).join(`
108
+ `));if(H===G)return[B,1,1]}for(let B=Y;B<$.length;B++){let H=m0($.slice(B,B+Z.length).map((K)=>K.trim()).join(`
109
+ `)),G=m0(Z.map((K)=>K.trim()).join(`
110
+ `));if(H===G)return[B,100,1]}let V=0.66;for(let B=Y;B<$.length;B++){let H=m0($.slice(B,B+Z.length).join(`
111
+ `)),G=IY(H,j);if(G>=V)return[B,1000,G];if(G>W)W=G}return[-1,0,W]};if(J){let[Y,j,V]=X($.length-Z.length);if(Y!==-1)return[Y,j,V];return[Y,j,V]=X(Q),[Y,j+1e4,V]}return X(Q)}function iL($,Z){let Q=Z,J=[],W=[],X=[],Y=[],j="keep",V=["@@",u.END,u.UPDATE,u.DELETE,u.ADD,u.END_FILE];while(Q<$.length){let B=$[Q];if(!B||V.some((K)=>B.startsWith(K.trim())))break;if(B==="***")break;if(B.startsWith("***"))throw new Y0(`Invalid line: ${B}`);Q++;let H=j,G=B;if(G[0]==="+")j="add";else if(G[0]==="-")j="delete";else if(G[0]===" ")j="keep";else j="keep",G=` ${G}`;if(G=G.slice(1),j==="keep"&&H!==j){if(X.length||W.length)Y.push({origIndex:J.length-W.length,delLines:W,insLines:X});W=[],X=[]}if(j==="delete")W.push(G),J.push(G);else if(j==="add")X.push(G);else J.push(G)}if(X.length||W.length)Y.push({origIndex:J.length-W.length,delLines:W,insLines:X});if(Q<$.length&&$[Q]===u.END_FILE)return Q++,[J,Y,Q,!0];return[J,Y,Q,!1]}function bQ($,Z,Q){let J=c0.isAbsolute(Z),W=J?c0.normalize(Z):c0.resolve($,Z);if(!Q||J)return W;let X=c0.relative($,W);if(X.startsWith("..")||c0.isAbsolute(X))throw new Y0(`Path must stay within cwd: ${Z}`);return W}function nL($){return $.split(`
112
+ `).map((Z)=>Z.replace(/\r$/,""))}function gY($){if($.trim()==="")return!1;return xY.some((Z)=>$.startsWith(Z))}function aL($){let Z=0,Q=$.length;while(Z<Q&&gY($[Z]??""))Z++;while(Q>Z&&gY($[Q-1]??""))Q--;return $.slice(Z,Q)}function oL($){let Z=nL($),Q=Z.findIndex((Y)=>Y.startsWith(u.BEGIN)),J=-1;for(let Y=Z.length-1;Y>=0;Y--)if(Z[Y]?.startsWith(u.END)){J=Y;break}if(Q!==-1||J!==-1){if(Q===-1||J===-1||J<Q)throw new Y0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:Z.slice(Q,J+1)}}let W=aL(Z);while(W.length>0&&W[0]==="")W.shift();while(W.length>0&&W[W.length-1]==="")W.pop();return{lines:[u.BEGIN,...W,u.END]}}function sL($,Z){let Q=new Set;for(let J of $)for(let W of Z)if(J.startsWith(W)){Q.add(J.substring(W.length).trim());break}return[...Q]}function tL($,Z,Q){if(Z.length===0)return $;let J=$.split(`
113
+ `),W=[],X=0;for(let Y of Z){if(Y.origIndex>J.length)throw new Y0(`${Q}: chunk.origIndex ${Y.origIndex} > lines.length ${J.length}`);if(X>Y.origIndex)throw new Y0(`${Q}: currentIndex ${X} > chunk.origIndex ${Y.origIndex}`);W.push(...J.slice(X,Y.origIndex)),W.push(...Y.insLines),X=Y.origIndex+Y.delLines.length}return W.push(...J.slice(X)),W.join(`
114
+ `)}async function eL($,Z,Q,J){let W=sL($,[u.UPDATE,u.DELETE]),X={};for(let Y of W){let j=bQ(Z,Y,J),V;try{V=await v0.readFile(j,Q)}catch{throw new Y0(`File not found: ${Y}`)}X[Y]=V.replace(/\r\n/g,`
115
+ `)}return X}function $_($,Z){let Q={};for(let[J,W]of Object.entries($.actions))switch(W.type){case"delete":Q[J]={type:"delete",oldContent:Z[J]};break;case"add":if(W.newFile===void 0)throw new Y0("ADD action without file content");Q[J]={type:"add",newContent:W.newFile};break;case"update":Q[J]={type:"update",oldContent:Z[J],newContent:tL(Z[J]??"",W.chunks,J),movePath:W.movePath};break}return Q}function Z_($){let Z=[`Patch could not be applied because ${$.length} hunk${$.length===1?"":"s"} did not match the current file content.`];for(let Q of $){let J=Q.chunkIndex===void 0?"unknown":String(Q.chunkIndex+1);if(Z.push(`${Q.path}: hunk ${J}: ${Q.message}`),Q.context)Z.push(`Context:
116
116
  ${Q.context}`)}return Z.join(`
117
- `)}async function PL($,Z,Q,W){let J=[];for(let[X,Y]of Object.entries($)){let j=EQ(Z,X,W);switch(Y.type){case"delete":await y0.rm(j,{force:!0}),J.push(`${X}: [deleted]`);break;case"add":if(Y.newContent===void 0)throw new J0(`Cannot create ${X} with no content`);await y0.mkdir(h0.dirname(j),{recursive:!0}),await y0.writeFile(j,Y.newContent,{encoding:Q}),J.push(X);break;case"update":{if(Y.newContent===void 0)throw new J0(`UPDATE change for ${X} has no new content`);if(Y.movePath){let V=EQ(Z,Y.movePath,W);await y0.mkdir(h0.dirname(V),{recursive:!0}),await y0.writeFile(V,Y.newContent,{encoding:Q}),await y0.rm(j,{force:!0}),J.push(`${X} -> ${Y.movePath}`)}else await y0.writeFile(j,Y.newContent,{encoding:Q}),J.push(X);break}}}return J}function m6($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0}=$;return async(W,J,X)=>{let Y=ML(W.input),j=await NL(Y.lines,J,Z,Q),V=new RQ(Y.lines,j),{patch:B,fuzz:H}=V.parse();if(B.warnings&&B.warnings.length>0)throw new J0(wL(B.warnings));let G=CL(B,j),K=await PL(G,J,Z,Q),F=["Successfully applied patch to the following files:"];for(let A of K)F.push(A);if(H>0)F.push(`Note: Patch applied with fuzz factor ${H}`);return F.join(`
118
- `)}}import*as n0 from"node:fs/promises";import*as i0 from"node:path";function SL($,Z,Q){let W=i0.isAbsolute(Z),J=W?i0.normalize(Z):i0.resolve($,Z);if(!Q)return J;if(W)return J;let X=i0.relative($,J);if(X.startsWith("..")||i0.isAbsolute(X))throw Error(`Path must stay within cwd: ${Z}`);return J}function bL($,Z){if(Z.length===0)return 0;return $.split(Z).length-1}function yL($,Z,Q){let W=$.split(`
119
- `),J=Z.split(`
120
- `),X=Math.max(W.length,J.length),Y=["```diff"],j=0;for(let V=0;V<X;V++){if(j>=Q){Y.push("... diff truncated ...");break}let B=W[V],H=J[V];if(B===H)continue;let G=V+1;if(B!==void 0)Y.push(`-${G}: ${B}`),j++;if(H!==void 0&&j<Q)Y.push(`+${G}: ${H}`),j++}return Y.push("```"),Y.join(`
121
- `)}async function hL($,Z,Q){return await n0.mkdir(i0.dirname($),{recursive:!0}),await n0.writeFile($,Z,{encoding:Q}),`File created successfully at: ${$}`}async function kL($){try{return await n0.access($),!0}catch{return!1}}async function IL($,Z,Q,W,J){let X=await n0.readFile($,W),Y=bL(X,Z);if(Y===0)throw Error(`No replacement performed: text not found in ${$}.`);if(Y>1)throw Error(`No replacement performed: multiple occurrences of text found in ${$}.`);let j=X.replace(Z,Q??"");await n0.writeFile($,j,{encoding:W});let V=yL(X,j,J);return`Edited ${$}
122
- ${V}`}async function xL($,Z,Q,W){let X=(await n0.readFile($,W)).split(`
117
+ `)}async function Q_($,Z,Q,J){let W=[];for(let[X,Y]of Object.entries($)){let j=bQ(Z,X,J);switch(Y.type){case"delete":await v0.rm(j,{force:!0}),W.push(`${X}: [deleted]`);break;case"add":if(Y.newContent===void 0)throw new Y0(`Cannot create ${X} with no content`);await v0.mkdir(c0.dirname(j),{recursive:!0}),await v0.writeFile(j,Y.newContent,{encoding:Q}),W.push(X);break;case"update":{if(Y.newContent===void 0)throw new Y0(`UPDATE change for ${X} has no new content`);if(Y.movePath){let V=bQ(Z,Y.movePath,J);await v0.mkdir(c0.dirname(V),{recursive:!0}),await v0.writeFile(V,Y.newContent,{encoding:Q}),await v0.rm(j,{force:!0}),W.push(`${X} -> ${Y.movePath}`)}else await v0.writeFile(j,Y.newContent,{encoding:Q}),W.push(X);break}}}return W}function r6($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0}=$;return async(J,W,X)=>{let Y=oL(J.input),j=await eL(Y.lines,W,Z,Q),V=new SQ(Y.lines,j),{patch:B,fuzz:H}=V.parse();if(B.warnings&&B.warnings.length>0)throw new Y0(Z_(B.warnings));let G=$_(B,j),K=await Q_(G,W,Z,Q),F=["Successfully applied patch to the following files:"];for(let A of K)F.push(A);if(H>0)F.push(`Note: Patch applied with fuzz factor ${H}`);return F.join(`
118
+ `)}}import*as t0 from"node:fs/promises";import*as s0 from"node:path";function J_($,Z,Q){let J=s0.isAbsolute(Z),W=J?s0.normalize(Z):s0.resolve($,Z);if(!Q)return W;if(J)return W;let X=s0.relative($,W);if(X.startsWith("..")||s0.isAbsolute(X))throw Error(`Path must stay within cwd: ${Z}`);return W}function W_($,Z){if(Z.length===0)return 0;return $.split(Z).length-1}function X_($,Z,Q){let J=$.split(`
119
+ `),W=Z.split(`
120
+ `),X=0;while(X<J.length&&X<W.length&&J[X]===W[X])X++;let Y=J.length,j=W.length;while(Y>X&&j>X&&J[Y-1]===W[j-1])Y--,j--;let V=Y-X,B=j-X,H=V,G=B;if(V+B>Q)H=Math.min(V,Math.max(Math.ceil(Q/2),Q-B)),G=Math.min(B,Q-H);let K=["```diff"];for(let D=X;D<X+H;D++)K.push(`-${D+1}: ${J[D]}`);for(let D=X;D<X+G;D++)K.push(`+${D+1}: ${W[D]}`);let F=V-H,A=B-G;if(F>0||A>0)K.push(`... diff truncated (${F} more removed, ${A} more added lines) ...`);return K.push("```"),K.join(`
121
+ `)}async function Y_($,Z,Q){return await t0.mkdir(s0.dirname($),{recursive:!0}),await t0.writeFile($,Z,{encoding:Q}),`File created successfully at: ${$}`}async function j_($){try{return await t0.access($),!0}catch{return!1}}async function V_($,Z,Q,J,W){let X=await t0.readFile($,J),Y=W_(X,Z);if(Y===0)throw Error(`No replacement performed: text not found in ${$}.`);if(Y>1)throw Error(`No replacement performed: multiple occurrences of text found in ${$}.`);let j=X.replace(Z,Q??"");await t0.writeFile($,j,{encoding:J});let V=X_(X,j,W);return`Edited ${$}
122
+ ${V}`}async function B_($,Z,Q,J){let X=(await t0.readFile($,J)).split(`
123
123
  `),Y=X.length+1;if(Z<1||Z>Y)throw Error(`Invalid insert_line: ${Z}. insert_line must be a positive one-based boundary line in the range 1-${Y}. Use ${Y} to append at EOF.`);let j=Z-1;return X.splice(j,0,...Q.split(`
124
- `)),await n0.writeFile($,X.join(`
125
- `),{encoding:W}),`Inserted content at line ${Z} in ${$}.`}function v6($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0,maxDiffLines:W=200}=$;return async(J,X,Y)=>{let j=SL(X,J.path,Q);if(J.insert_line!=null)return xL(j,J.insert_line,J.new_text,Z);if(!await kL(j))return hL(j,J.new_text,Z);if(J.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return IL(j,J.old_text,J.new_text,Z,W)}}import{createReadStream as gL}from"node:fs";import*as c6 from"node:fs/promises";import*as c1 from"node:path";import{createInterface as mL}from"node:readline";import{resolveExistingFilePath as vL}from"@cline/shared/storage";var cL=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),uL={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},NY=1e8,dL=50000;function CY($){let{reason:Z}=$;if(Z instanceof Error)return Z;if(Z!==void 0)return Error(String(Z));return Error("File read was aborted")}async function lL($,Z,Q,W,J,X){if(X?.aborted)throw CY(X);let Y=Math.max(W??1,1),j=J??Number.POSITIVE_INFINITY,V=Number.isFinite(j),B=V?j:Y+dL-1,H=[],G=0,K=0,F=!1,A=!1,L=Number.isFinite(j)?Math.min(j,Y+L2-1):Y+L2-1,f=Q?String(L).length+3:0,D=gL($,{encoding:Z}),U=mL({input:D,crlfDelay:Number.POSITIVE_INFINITY}),T=X?()=>D.destroy(CY(X)):void 0;if(X&&T)X.addEventListener("abort",T,{once:!0});try{for await(let P of U){if(K+=1,K>j){K=j;break}if(!V&&F&&K>=B){A=!0;break}if(K<Y||F)continue;if(H.length>=L2){F=!0;continue}let c=P;if(c.length>qQ)c=`${c.slice(0,qQ)} [line truncated]`;let n=G+c.length+f+1;if(n>x6&&H.length>0){F=!0;continue}H.push({lineNumber:K,text:c}),G=n}}finally{if(X&&T)X.removeEventListener("abort",T);U.close(),D.destroy()}let q=String(H[H.length-1]?.lineNumber??K).length,z=H.map(({lineNumber:P,text:c})=>Q?`${String(P).padStart(q," ")} | ${c}`:c).join(`
126
- `),_=H[H.length-1]?.lineNumber;if(_===void 0)return z;let M=Math.min(j,K);if(_>=M)return z;let E=A?`${K}+ lines`:M;return`${z}
127
-
128
- [Showing lines ${Y}-${_} of ${E}. Use start_line/end_line to read other sections.]`}function u6($={}){let{maxFileSizeBytes:Z,encoding:Q,includeLineNumbers:W}={...uL,...$};return async(J,X)=>{let{path:Y,start_line:j,end_line:V}=J,B=c1.isAbsolute(Y)?c1.normalize(Y):c1.resolve(process.cwd(),Y),H=vL(B)??B,G=c1.extname(H).toLowerCase(),K=cL.get(G),F=await c6.stat(H);if(!F.isFile())throw Error(`Path is not a file: ${H}`);if(K){if(F.size>Z)throw Error(`Image file too large: ${F.size} bytes (max: ${Z} bytes).`);if(X.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let A=await c6.readFile(H);return[{type:"text",text:"Successfully read image"},{type:"image",data:A.toString("base64"),mediaType:K}]}if(F.size>NY)throw Error(`Text file too large to stream safely: ${F.size} bytes (max: ${NY} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return lL(H,Q,W,j,V,X.signal)}}import{spawn as IY}from"node:child_process";import*as xY from"node:fs/promises";import*as p6 from"node:path";import{spawn as pL}from"node:child_process";import{readdir as rL}from"node:fs/promises";import CQ from"node:path";import{isMainThread as SY,parentPort as wY,Worker as iL}from"node:worker_threads";var nL=15000,aL=600000,sL=1000,oL=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function PY($){let Z=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return Z==="EACCES"||Z==="EPERM"||Z==="ENOENT"}var O2=new Map;function tL(){if(!SY)return!1;return!0}function eL($){if(O2.size<=1)return;for(let[Z,Q]of O2.entries()){if(Q.pending)continue;if($-Q.lastAccessedAt>aL)O2.delete(Z)}}function $_($,Z){return CQ.relative($,Z).split(CQ.sep).join("/")}async function Z_($){let Q=(await new Promise((W,J)=>{let X=pL("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"],windowsHide:!0}),Y="",j="";X.stdout.on("data",(V)=>{Y+=V.toString()}),X.stderr.on("data",(V)=>{j+=V.toString()}),X.on("error",J),X.on("close",(V)=>{if(V===0){W(Y);return}J(Error(j||`rg exited with code ${V}`))})})).split(/\r?\n/).map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>W.replace(/\\/g,"/"));return new Set(Q)}async function bY($,Z,Q){let W;try{W=await rL(Z,{withFileTypes:!0})}catch(J){if(PY(J))return;throw J}for(let J of W){let X=CQ.join(Z,J.name);if(J.isDirectory()){if(oL.has(J.name))continue;try{await bY($,X,Q)}catch(Y){if(PY(Y))continue;throw Y}continue}if(J.isFile())Q.add($_($,X))}}async function Q_($){let Z=new Set;return await bY($,$,Z),Z}async function d6($){try{return await Z_($)}catch{return Q_($)}}function W_(){if(SY||!wY)return;let $=wY;$.on("message",(Z)=>{if(Z.type!=="index")return;d6(Z.cwd).then((Q)=>{let W={type:"indexResult",requestId:Z.requestId,files:Array.from(Q)};$.postMessage(W)}).catch((Q)=>{let W={type:"indexResult",requestId:Z.requestId,error:Q instanceof Error?Q.message:"Failed to build file index"};$.postMessage(W)})})}class yY{worker=new iL(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",($)=>{if($.type!=="indexResult")return;let Z=this.pending.get($.requestId);if(!Z)return;if(this.pending.delete($.requestId),$.error){Z.reject(Error($.error));return}Z.resolve($.files??[])}),this.worker.on("error",($)=>{this.flushPending($)}),this.worker.on("exit",($)=>{if($!==0)this.flushPending(Error(`File index worker exited with code ${$}`))})}requestIndex($){let Z=++this.nextRequestId,Q=new Promise((J,X)=>{let Y=setTimeout(()=>{this.pending.delete(Z),J(null)},sL);Y.unref(),this.pending.set(Z,{resolve:(j)=>{clearTimeout(Y),J(j)},reject:(j)=>{clearTimeout(Y),X(j)}})}),W={type:"index",requestId:Z,cwd:$};return this.worker.postMessage(W),Q}flushPending($){for(let[Z,Q]of this.pending.entries())Q.reject($),this.pending.delete(Z)}}W_();var NQ;function J_(){if(!tL())return null;if(NQ===void 0)NQ=new yY;return NQ}async function X_($){let Z=J_();if(!Z)return d6($);try{let Q=await Z.requestIndex($);if(Q===null)return d6($);return new Set(Q)}catch{return d6($)}}async function M$($,Z={}){let Q=Z.ttlMs??nL,W=Date.now();eL(W);let J=O2.get($);if(J&&Q>0&&W-J.lastBuiltAt<=Q&&J.files.size>0)return J.lastAccessedAt=W,J.files;if(J?.pending)return J.lastAccessedAt=W,J.pending;let X=X_($).then((Y)=>{return O2.set($,{files:Y,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),Y});return O2.set($,{files:J?.files??new Set,lastBuiltAt:J?.lastBuiltAt??0,lastAccessedAt:W,pending:X}),X}async function hY($,Z={}){await M$($,{...Z,ttlMs:0})}import{stat as Y_}from"node:fs/promises";import R$ from"node:path";var j_=/[),.:;!?`'"]+$/,V_=/^[(`'"]+/;function B_($){let Z=$.matchAll(/(^|[\s])@([^\s]+)/g),Q=[];for(let W of Z){let J=(W[2]??"").trim();if(J.length===0)continue;let X=J.replace(V_,"").replace(j_,"");if(X.length===0||X.includes("@"))continue;Q.push(X)}return Array.from(new Set(Q))}function H_($,Z){let Q=$.replace(/\\/g,"/"),W=R$.isAbsolute(Q)?R$.resolve(Q):R$.resolve(Z,Q),J=R$.relative(Z,W);if(J.startsWith("..")||R$.isAbsolute(J))return;return J.split(R$.sep).join("/")}async function l6($,Z,Q={}){let W=B_($);if(W.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:J,maxFileBytes:X,maxTotalBytes:Y}=Q,j=await M$(Z,{ttlMs:Q.ttlMs}),V=[],B=[],H=[],G=0;for(let K of W){if(J&&H.length>=J){B.push(K);continue}let F=H_(K,Z);if(!F||!j.has(F)){B.push(K);continue}if(!X||!Y){V.push(F);continue}let A=R$.join(Z,F);try{if(!(await Y_(A)).isFile()){B.push(K);continue}let f=G+X;if(f>Y){B.push(K);continue}G=f,V.push(F)}catch{B.push(K)}}return{prompt:$,mentions:W,matchedFiles:V,ignoredMentions:B}}var G_=["ts","tsx","js","jsx","mjs","cjs","json","md","mdx","txt","yaml","yml","toml","py","rb","go","rs","java","kt","swift","c","cpp","h","hpp","css","scss","less","html","vue","svelte","sql","sh","bash","zsh","fish","ps1","env","gitignore","dockerignore","editorconfig"],K_=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],E$=null;function F_(){if(E$!==null)return Promise.resolve(E$);return new Promise(($)=>{let Z=IY("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});Z.on("close",(Q)=>{E$=Q===0,$(E$)}),Z.on("error",()=>{E$=!1,$(!1)}),setTimeout(()=>{if(!Z.killed)Z.kill("SIGTERM");if(E$===null)E$=!1,$(!1)},1000)})}function A_($,Z,Q,W,J=5000,X){return new Promise((Y)=>{let j=IY("rg",["--json",`--context=${W}`,"--max-count=1","-i",$],{cwd:Z,stdio:["ignore","pipe","pipe"],windowsHide:!0}),V="",B=!1,H=()=>{if(!j.killed)j.kill("SIGTERM")},G=setTimeout(()=>{if(!B)B=!0,H(),Y(null)},J),K=(F)=>{if(!B)B=!0,clearTimeout(G),H(),Y(F)};if(X?.aborted){H(),Y(null);return}X?.addEventListener("abort",()=>{K(null)}),j.stdout.on("data",(F)=>{V+=F.toString()}),j.stderr.on("data",()=>{}),j.on("close",(F)=>{if(F===0||F===1){try{let A=[],L=V.split(`
129
- `).filter((f)=>f.trim());for(let f of L){if(A.length>=Q)break;let D=JSON.parse(f);if(D.type==="match"){let U=D.data,T=[];if(D.data.submatches&&D.data.submatches.length>0){let q=D.data.submatches[0];A.push({file:U.path.text,line:U.line_number,column:(q?.start??0)+1,match:q?.match?.text??"",context:T})}}else if(D.type==="context"&&A.length>0){let U=A[A.length-1],T=D.data.line_number===U.line?">":" ";U.context.push(`${T} ${D.data.line_number}: ${D.data.lines?.text??D.data.line?.text??""}`)}}K(A.length>0?A:null)}catch{K(null)}return}K(null)}),j.on("error",()=>{K(null)})})}function f_($,Z,Q,W){let J=$.split("/"),X=J[J.length-1]??"";if(J.length-1>W)return!1;for(let V=0;V<J.length-1;V++)if(Z.has(J[V]??""))return!1;let j=p6.posix.extname(X).slice(1).toLowerCase();return Q.has(j)||!j&&!X.startsWith(".")}function r6($={}){let{includeExtensions:Z=G_,excludeDirs:Q=K_,maxResults:W=100,contextLines:J=2,maxDepth:X=20}=$,Y=new Set(Q),j=new Set(Z.map((V)=>V.toLowerCase()));return async(V,B,H)=>{if(H.signal?.aborted)throw Error("Search operation aborted");let G=await F_(),K=null;if(G)K=await A_(V,B,W,J,5000,H.signal);if(K){let U=[`Found ${K.length} result${K.length===1?"":"s"} for pattern: ${V}`,""];for(let T of K)U.push(`${T.file}:${T.line}:${T.column}`),U.push(...T.context),U.push("");if(K.length>=W)U.push(`(Showing first ${W} results. Refine your search for more specific results.)`);return kY(U.join(`
130
- `))}let F;try{F=new RegExp(V,"gim")}catch(U){throw Error(`Invalid regex pattern: ${V}. ${U instanceof Error?U.message:""}`)}let A=[],L=0,f=await M$(B);for(let U of f){if(H.signal?.aborted)throw Error("Search operation aborted");if(!f_(U,Y,j,X))continue;if(A.length>=W)break;L++;let T=p6.join(B,U);try{let z=(await xY.readFile(T,"utf-8")).split(`
131
- `);for(let _=0;_<z.length;_++){let M=z[_];F.lastIndex=0;let E=F.exec(M);while(E!==null){if(A.length>=W)break;let P=Math.max(0,_-J),c=Math.min(z.length-1,_+J),n=[];for(let a=P;a<=c;a++){let t=a===_?">":" ";n.push(`${t} ${a+1}: ${z[a]}`)}if(A.push({file:U,line:_+1,column:E.index+1,match:E[0],context:n}),E.index===F.lastIndex)F.lastIndex++;E=F.exec(M)}}}catch{}}if(A.length===0)return`No results found for pattern: ${V}
132
- Searched ${L} files.`;let D=[`Found ${A.length} result${A.length===1?"":"s"} for pattern: ${V}`,`Searched ${L} files.`,""];for(let U of A)D.push(`${U.file}:${U.line}:${U.column}`),D.push(...U.context),D.push("");if(A.length>=W)D.push(`(Showing first ${W} results. Refine your search for more specific results.)`);return kY(D.join(`
133
- `))}}function kY($){if($.length<=_2)return $;let Z=Math.ceil(_2/2),Q=Math.max(1,_2-Z);return`${$.slice(0,Z)}
124
+ `)),await t0.writeFile($,X.join(`
125
+ `),{encoding:J}),`Inserted content at line ${Z} in ${$}.`}function i6($={}){let{encoding:Z="utf-8",restrictToCwd:Q=!0,maxDiffLines:J=200}=$;return async(W,X,Y)=>{let j=J_(X,W.path,Q);if(W.insert_line!=null)return B_(j,W.insert_line,W.new_text,Z);if(!await j_(j))return Y_(j,W.new_text,Z);if(W.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return V_(j,W.old_text,W.new_text,Z,J)}}import{createReadStream as H_}from"node:fs";import*as n6 from"node:fs/promises";import*as p1 from"node:path";import{createInterface as G_}from"node:readline";import{resolveExistingFilePath as K_}from"@cline/shared/storage";var F_=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),A_={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},mY=1e8,f_=50000;function vY($){let{reason:Z}=$;if(Z instanceof Error)return Z;if(Z!==void 0)return Error(String(Z));return Error("File read was aborted")}async function U_($,Z,Q,J,W,X){if(X?.aborted)throw vY(X);let Y=Math.max(J??1,1),j=W??Number.POSITIVE_INFINITY,V=Number.isFinite(j),B=V?j:Y+f_-1,H=[],G=0,K=0,F=!1,A=!1,D=Number.isFinite(j)?Math.min(j,Y+z2-1):Y+z2-1,U=Q?String(D).length+3:0,L=H_($,{encoding:Z}),f=G_({input:L,crlfDelay:Number.POSITIVE_INFINITY}),z=X?()=>L.destroy(vY(X)):void 0;if(X&&z)X.addEventListener("abort",z,{once:!0});try{for await(let m of f){if(K+=1,K>j){K=j;break}if(!V&&F&&K>=B){A=!0;break}if(K<Y||F)continue;if(H.length>=z2){F=!0;continue}let E=m;if(E.length>CQ)E=`${E.slice(0,CQ)} [line truncated]`;let d=G+E.length+U+1;if(d>l6&&H.length>0){F=!0;continue}H.push({lineNumber:K,text:E}),G=d}}finally{if(X&&z)X.removeEventListener("abort",z);f.close(),L.destroy()}let O=String(H[H.length-1]?.lineNumber??K).length,T=H.map(({lineNumber:m,text:E})=>Q?`${String(m).padStart(O," ")} | ${E}`:E).join(`
126
+ `),_=H[H.length-1]?.lineNumber;if(_===void 0)return T;let M=Math.min(j,K);if(_>=M)return T;let N=A?`${K}+ lines`:M;return`${T}
127
+
128
+ [Showing lines ${Y}-${_} of ${N}. Use start_line/end_line to read other sections.]`}function a6($={}){let{maxFileSizeBytes:Z,encoding:Q,includeLineNumbers:J}={...A_,...$};return async(W,X)=>{let{path:Y,start_line:j,end_line:V}=W,B=p1.isAbsolute(Y)?p1.normalize(Y):p1.resolve(process.cwd(),Y),H=K_(B)??B,G=p1.extname(H).toLowerCase(),K=F_.get(G),F=await n6.stat(H);if(!F.isFile())throw Error(`Path is not a file: ${H}`);if(K){if(F.size>Z)throw Error(`Image file too large: ${F.size} bytes (max: ${Z} bytes).`);if(X.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let A=await n6.readFile(H);return[{type:"text",text:"Successfully read image"},{type:"image",data:A.toString("base64"),mediaType:K}]}if(F.size>mY)throw Error(`Text file too large to stream safely: ${F.size} bytes (max: ${mY} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return U_(H,Q,J,j,V,X.signal)}}import{spawn as nY}from"node:child_process";import*as aY from"node:fs/promises";import*as t6 from"node:path";import{spawn as D_}from"node:child_process";import{readdir as L_}from"node:fs/promises";import hQ from"node:path";import{isMainThread as dY,parentPort as cY,Worker as __}from"node:worker_threads";var T_=15000,O_=600000,q_=1000,z_=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function uY($){let Z=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return Z==="EACCES"||Z==="EPERM"||Z==="ENOENT"}var E2=new Map;function M_(){if(!dY)return!1;return!0}function R_($){if(E2.size<=1)return;for(let[Z,Q]of E2.entries()){if(Q.pending)continue;if($-Q.lastAccessedAt>O_)E2.delete(Z)}}function N_($,Z){return hQ.relative($,Z).split(hQ.sep).join("/")}async function E_($){let Q=(await new Promise((J,W)=>{let X=D_("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"],windowsHide:!0}),Y="",j="";X.stdout.on("data",(V)=>{Y+=V.toString()}),X.stderr.on("data",(V)=>{j+=V.toString()}),X.on("error",W),X.on("close",(V)=>{if(V===0){J(Y);return}W(Error(j||`rg exited with code ${V}`))})})).split(/\r?\n/).map((J)=>J.trim()).filter((J)=>J.length>0).map((J)=>J.replace(/\\/g,"/"));return new Set(Q)}async function lY($,Z,Q){let J;try{J=await L_(Z,{withFileTypes:!0})}catch(W){if(uY(W))return;throw W}for(let W of J){let X=hQ.join(Z,W.name);if(W.isDirectory()){if(z_.has(W.name))continue;try{await lY($,X,Q)}catch(Y){if(uY(Y))continue;throw Y}continue}if(W.isFile())Q.add(N_($,X))}}async function w_($){let Z=new Set;return await lY($,$,Z),Z}async function o6($){try{return await E_($)}catch{return w_($)}}function C_(){if(dY||!cY)return;let $=cY;$.on("message",(Z)=>{if(Z.type!=="index")return;o6(Z.cwd).then((Q)=>{let J={type:"indexResult",requestId:Z.requestId,files:Array.from(Q)};$.postMessage(J)}).catch((Q)=>{let J={type:"indexResult",requestId:Z.requestId,error:Q instanceof Error?Q.message:"Failed to build file index"};$.postMessage(J)})})}class pY{worker=new __(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",($)=>{if($.type!=="indexResult")return;let Z=this.pending.get($.requestId);if(!Z)return;if(this.pending.delete($.requestId),$.error){Z.reject(Error($.error));return}Z.resolve($.files??[])}),this.worker.on("error",($)=>{this.flushPending($)}),this.worker.on("exit",($)=>{if($!==0)this.flushPending(Error(`File index worker exited with code ${$}`))})}requestIndex($){let Z=++this.nextRequestId,Q=new Promise((W,X)=>{let Y=setTimeout(()=>{this.pending.delete(Z),W(null)},q_);Y.unref(),this.pending.set(Z,{resolve:(j)=>{clearTimeout(Y),W(j)},reject:(j)=>{clearTimeout(Y),X(j)}})}),J={type:"index",requestId:Z,cwd:$};return this.worker.postMessage(J),Q}flushPending($){for(let[Z,Q]of this.pending.entries())Q.reject($),this.pending.delete(Z)}}C_();var yQ;function P_(){if(!M_())return null;if(yQ===void 0)yQ=new pY;return yQ}async function S_($){let Z=P_();if(!Z)return o6($);try{let Q=await Z.requestIndex($);if(Q===null)return o6($);return new Set(Q)}catch{return o6($)}}async function P$($,Z={}){let Q=Z.ttlMs??T_,J=Date.now();R_(J);let W=E2.get($);if(W&&Q>0&&J-W.lastBuiltAt<=Q&&W.files.size>0)return W.lastAccessedAt=J,W.files;if(W?.pending)return W.lastAccessedAt=J,W.pending;let X=S_($).then((Y)=>{return E2.set($,{files:Y,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),Y});return E2.set($,{files:W?.files??new Set,lastBuiltAt:W?.lastBuiltAt??0,lastAccessedAt:J,pending:X}),X}async function rY($,Z={}){await P$($,{...Z,ttlMs:0})}import{stat as b_}from"node:fs/promises";import S$ from"node:path";var y_=/[),.:;!?`'"]+$/,h_=/^[(`'"]+/;function k_($){let Z=$.matchAll(/(^|[\s])@([^\s]+)/g),Q=[];for(let J of Z){let W=(J[2]??"").trim();if(W.length===0)continue;let X=W.replace(h_,"").replace(y_,"");if(X.length===0||X.includes("@"))continue;Q.push(X)}return Array.from(new Set(Q))}function I_($,Z){let Q=$.replace(/\\/g,"/"),J=S$.isAbsolute(Q)?S$.resolve(Q):S$.resolve(Z,Q),W=S$.relative(Z,J);if(W.startsWith("..")||S$.isAbsolute(W))return;return W.split(S$.sep).join("/")}async function s6($,Z,Q={}){let J=k_($);if(J.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:W,maxFileBytes:X,maxTotalBytes:Y}=Q,j=await P$(Z,{ttlMs:Q.ttlMs}),V=[],B=[],H=[],G=0;for(let K of J){if(W&&H.length>=W){B.push(K);continue}let F=I_(K,Z);if(!F||!j.has(F)){B.push(K);continue}if(!X||!Y){V.push(F);continue}let A=S$.join(Z,F);try{if(!(await b_(A)).isFile()){B.push(K);continue}let U=G+X;if(U>Y){B.push(K);continue}G=U,V.push(F)}catch{B.push(K)}}return{prompt:$,mentions:J,matchedFiles:V,ignoredMentions:B}}var x_=["ts","tsx","js","jsx","mjs","cjs","json","md","mdx","txt","yaml","yml","toml","py","rb","go","rs","java","kt","swift","c","cpp","h","hpp","css","scss","less","html","vue","svelte","sql","sh","bash","zsh","fish","ps1","env","gitignore","dockerignore","editorconfig"],g_=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],b$=null;function m_(){if(b$!==null)return Promise.resolve(b$);return new Promise(($)=>{let Z=nY("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});Z.on("close",(Q)=>{b$=Q===0,$(b$)}),Z.on("error",()=>{b$=!1,$(!1)}),setTimeout(()=>{if(!Z.killed)Z.kill("SIGTERM");if(b$===null)b$=!1,$(!1)},1000)})}function v_($,Z,Q,J,W=5000,X){return new Promise((Y)=>{let j=nY("rg",["--json",`--context=${J}`,"--max-count=1","-i",$],{cwd:Z,stdio:["ignore","pipe","pipe"],windowsHide:!0}),V="",B=!1,H=()=>{if(!j.killed)j.kill("SIGTERM")},G=setTimeout(()=>{if(!B)B=!0,H(),Y(null)},W),K=(F)=>{if(!B)B=!0,clearTimeout(G),H(),Y(F)};if(X?.aborted){H(),Y(null);return}X?.addEventListener("abort",()=>{K(null)}),j.stdout.on("data",(F)=>{V+=F.toString()}),j.stderr.on("data",()=>{}),j.on("close",(F)=>{if(F===0||F===1){try{let A=[],D=V.split(`
129
+ `).filter((U)=>U.trim());for(let U of D){if(A.length>=Q)break;let L=JSON.parse(U);if(L.type==="match"){let f=L.data,z=[];if(L.data.submatches&&L.data.submatches.length>0){let O=L.data.submatches[0];A.push({file:f.path.text,line:f.line_number,column:(O?.start??0)+1,match:O?.match?.text??"",context:z})}}else if(L.type==="context"&&A.length>0){let f=A[A.length-1],z=L.data.line_number===f.line?">":" ";f.context.push(`${z} ${L.data.line_number}: ${L.data.lines?.text??L.data.line?.text??""}`)}}K(A.length>0?A:null)}catch{K(null)}return}K(null)}),j.on("error",()=>{K(null)})})}function c_($,Z,Q,J){let W=$.split("/"),X=W[W.length-1]??"";if(W.length-1>J)return!1;for(let V=0;V<W.length-1;V++)if(Z.has(W[V]??""))return!1;let j=t6.posix.extname(X).slice(1).toLowerCase();return Q.has(j)||!j&&!X.startsWith(".")}function e6($={}){let{includeExtensions:Z=x_,excludeDirs:Q=g_,maxResults:J=100,contextLines:W=2,maxDepth:X=20}=$,Y=new Set(Q),j=new Set(Z.map((V)=>V.toLowerCase()));return async(V,B,H)=>{if(H.signal?.aborted)throw Error("Search operation aborted");let G=await m_(),K=null;if(G)K=await v_(V,B,J,W,5000,H.signal);if(K){let f=[`Found ${K.length} result${K.length===1?"":"s"} for pattern: ${V}`,""];for(let z of K)f.push(`${z.file}:${z.line}:${z.column}`),f.push(...z.context),f.push("");if(K.length>=J)f.push(`(Showing first ${J} results. Refine your search for more specific results.)`);return iY(f.join(`
130
+ `))}let F;try{F=new RegExp(V,"gim")}catch(f){throw Error(`Invalid regex pattern: ${V}. ${f instanceof Error?f.message:""}`)}let A=[],D=0,U=await P$(B);for(let f of U){if(H.signal?.aborted)throw Error("Search operation aborted");if(!c_(f,Y,j,X))continue;if(A.length>=J)break;D++;let z=t6.join(B,f);try{let T=(await aY.readFile(z,"utf-8")).split(`
131
+ `);for(let _=0;_<T.length;_++){let M=T[_];F.lastIndex=0;let N=F.exec(M);while(N!==null){if(A.length>=J)break;let m=Math.max(0,_-W),E=Math.min(T.length-1,_+W),d=[];for(let s=m;s<=E;s++){let j0=s===_?">":" ";d.push(`${j0} ${s+1}: ${T[s]}`)}if(A.push({file:f,line:_+1,column:N.index+1,match:N[0],context:d}),N.index===F.lastIndex)F.lastIndex++;N=F.exec(M)}}}catch{}}if(A.length===0)return`No results found for pattern: ${V}
132
+ Searched ${D} files.`;let L=[`Found ${A.length} result${A.length===1?"":"s"} for pattern: ${V}`,`Searched ${D} files.`,""];for(let f of A)L.push(`${f.file}:${f.line}:${f.column}`),L.push(...f.context),L.push("");if(A.length>=J)L.push(`(Showing first ${J} results. Refine your search for more specific results.)`);return iY(L.join(`
133
+ `))}}function iY($){if($.length<=M2)return $;let Z=Math.ceil(M2/2),Q=Math.max(1,M2-Z);return`${$.slice(0,Z)}
134
134
  [... search output truncated: ${$.length} chars total. Narrow the pattern or scope to view the elided matches ...]
135
- `+$.slice(-Q)}function U_($){return $.replace(/<script[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style[^>]*>[\s\S]*?<\/style>/gi,"").replace(/<!--[\s\S]*?-->/g,"").replace(/<(p|div|br|hr|h[1-6]|li|tr)[^>]*>/gi,`
135
+ `+$.slice(-Q)}function u_($){return $.replace(/<script[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style[^>]*>[\s\S]*?<\/style>/gi,"").replace(/<!--[\s\S]*?-->/g,"").replace(/<(p|div|br|hr|h[1-6]|li|tr)[^>]*>/gi,`
136
136
  `).replace(/<[^>]+>/g," ").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#(\d+);/g,(Z,Q)=>String.fromCharCode(parseInt(Q,10))).replace(/\s+/g," ").replace(/\n\s+/g,`
137
137
  `).replace(/\n{3,}/g,`
138
138
 
139
- `).trim()}function i6($={}){let{timeoutMs:Z=30000,maxResponseBytes:Q=5000000,userAgent:W="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:J={},followRedirects:X=!0}=$;return async(Y,j,V)=>{let B;try{B=new URL(Y)}catch{throw Error(`Invalid URL: ${Y}`)}if(!["http:","https:"].includes(B.protocol))throw Error(`Invalid protocol: ${B.protocol}. Only http and https are supported.`);let H=new AbortController,G=setTimeout(()=>H.abort(),Z),K;if(V.signal)K=()=>H.abort(),V.signal.addEventListener("abort",K);try{let F=await fetch(Y,{method:"GET",headers:{"User-Agent":W,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...J},redirect:X?"follow":"manual",signal:H.signal});if(clearTimeout(G),!X&&F.status>=300&&F.status<400)return`Redirect to: ${F.headers.get("location")}`;if(!F.ok)throw Error(`HTTP ${F.status}: ${F.statusText}`);let A=F.headers.get("content-type")||"",L=F.body?.getReader();if(!L)throw Error("Failed to read response body");let f=[],D=0;while(!0){let{done:M,value:E}=await L.read();if(M)break;if(D+=E.length,D>Q)throw L.cancel(),Error(`Response too large: exceeded ${Q} bytes`);f.push(E)}let U=new Uint8Array(D),T=0;for(let M of f)U.set(M,T),T+=M.length;let q=new TextDecoder("utf-8").decode(U),z;if(A.includes("text/html")||A.includes("application/xhtml"))z=U_(q);else if(A.includes("application/json"))try{let M=JSON.parse(q);z=JSON.stringify(M,null,2)}catch{z=q}else z=q;let _=[`URL: ${Y}`,`Content-Type: ${A}`,`Size: ${D} bytes`,"","--- Content ---",z.slice(0,50000)];if(z.length>50000)_.push(`
140
- [Content truncated: showing first 50000 of ${z.length} characters]`);return _.push("","--- Analysis Request ---",`Prompt: ${j}`),_.join(`
141
- `)}catch(F){if(clearTimeout(G),F instanceof Error){if(F.name==="AbortError")throw Error(`Request timed out after ${Z}ms`);throw F}throw Error(`Fetch failed: ${String(F)}`)}finally{if(V.signal&&K)V.signal.removeEventListener("abort",K)}}}function wQ($={}){return D8($)}function n6($={}){return{readFile:u6($.fileRead),search:r6($.search),bash:wQ($.bash),webFetch:i6($.webFetch),applyPatch:m6($.applyPatch),editor:v6($.editor)}}var D_={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion",submit_and_exit:"enableSubmitAndExit"},L8=[{name:"openai-native-use-apply-patch",mode:"act",providerIdIncludes:["openai-native"],enableTools:["apply_patch"],disableTools:["editor"]},{name:"codex-and-gpt-use-apply-patch",mode:"act",modelIdIncludes:["codex","gpt"],enableTools:["apply_patch"],disableTools:["editor"]}];function gY($,Z){if(!Z||Z.length===0)return!0;let Q=$.toLowerCase();return Z.some((W)=>Q.includes(W.toLowerCase()))}function L_($,Z,Q,W){if($.mode&&$.mode!=="any"&&$.mode!==W)return!1;return gY(Z,$.providerIdIncludes)&&gY(Q,$.modelIdIncludes)}function _8($,Z,Q,W){if(!W||W.length===0)return{};let J=new Map;for(let Y of W){if(!L_(Y,$,Z,Q))continue;for(let j of Y.disableTools??[])J.set(j,!1);for(let j of Y.enableTools??[])J.set(j,!0)}let X={};for(let[Y,j]of J.entries())X[D_[Y]]=j;return X}var e0={act:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!0,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},plan:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!1,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},search:{enableReadFiles:!0,enableSearch:!0,enableBash:!1,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},minimal:{enableReadFiles:!1,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!1},yolo:{enableReadFiles:!0,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!0,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!0,enableSpawnAgent:!1,enableAgentTeams:!1}};function u1($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function mY($){if($!=="yolo")return{};let Z={enabled:!0,autoApprove:!0},Q={"*":Z};for(let W of U2)Q[W]=Z;return Q}function vY($,Z){let Q=e0[$],{enableSpawnAgent:W,enableAgentTeams:J,...X}=Q;return T2({...X,...Z})}import{createTool as yz,zodToJsonSchema as hz}from"@cline/shared";import{z as cQ}from"zod";r0();import{createAgentRuntime as Tz}from"@cline/agents";import{createContributionRegistry as Oz,mergeModelOptions as Yj}from"@cline/shared";import{createGateway as C_,createHandlerAsync as w_,hasRegisteredHandler as P_,MODEL_COLLECTIONS_BY_PROVIDER_ID as S_,normalizeProviderId as b_}from"@cline/llms";import{EMPTY_CONTENT_TEXT as __}from"@cline/shared";function z_($){let Z=O_($.content),Q=[],W=$.id??R_(),J=0,X=[],Y=()=>{if(X.length===0)return;let j=J===0?W:`${W}_part_${J}`;J+=1,Q.push({id:j,role:$.role,content:X.map(q_),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:cY($.metrics)}),X=[]};if(Z.length===0)return Q.push({id:W,role:$.role,content:[{type:"text",text:__}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:cY($.metrics)}),Q;for(let j of Z){if(j.type!=="tool_result"){X.push(j);continue}Y(),Q.push({id:`${W}_tool_${j.tool_use_id}`,role:"tool",content:[dY(j)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return Y(),Q}function a6($){return $.flatMap(z_)}function T_($){let Z=$.content.map(lY).filter((Q)=>Q!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:Z,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:M_($.metrics)}}function q2($){return $.map(T_)}function s6($){let Z=[];for(let Q of $){let W=Q.content.map(lY).filter((Y)=>Y!==void 0),J=Q.role==="tool"?"user":Q.role,X=Z[Z.length-1];if(J==="user"&&W.length>0&&W.every((Y)=>Y.type==="tool_result")&&X?.role==="user"&&Array.isArray(X.content)&&X.content.every((Y)=>Y.type==="tool_result")){X.content.push(...W);continue}Z.push({role:J,content:W})}return Z}function O_($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function q_($){switch($.type){case"text":return{type:"text",text:$.text};case"thinking":return{type:"reasoning",text:$.thinking,metadata:$.signature?{signature:$.signature,details:$.details}:$.details?{details:$.details}:void 0};case"redacted_thinking":return{type:"reasoning",text:"",redacted:!0,metadata:{data:$.data}};case"image":return{type:"image",image:$.data,mediaType:$.mediaType};case"file":return{type:"file",path:$.path,content:$.content};case"tool_use":return{type:"tool-call",toolCallId:$.id,toolName:$.name,input:$.input,metadata:$.signature?{signature:$.signature}:void 0};case"tool_result":return dY($)}}function dY($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function lY($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let Z=$.metadata;return{type:"thinking",thinking:$.text,signature:Z?.signature,details:Z?.details}}case"image":return typeof $.image==="string"?{type:"image",data:$.image,mediaType:$.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:$.path,content:$.content};case"tool-call":{let Z=$.metadata;return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:Z?.thoughtSignature??Z?.signature}}case"tool-result":{let Z=$.output,Q=typeof Z==="string"?Z:Array.isArray(Z)?Z:JSON.stringify(Z);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:Q,is_error:$.isError}}}}function cY($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function M_($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var uY=0;function R_(){return uY+=1,`msg_${Date.now().toString(36)}_${uY.toString(36)}`}function E_($){switch($.type){case"text":return[{type:"text-delta",text:$.text}];case"reasoning":return[{type:"reasoning-delta",text:$.reasoning,metadata:$.signature?{thoughtSignature:$.signature,details:$.details}:{details:$.details}}];case"tool_calls":{let Z=$.tool_call.function,Q=Z.arguments;return[{type:"tool-call-delta",toolCallId:$.tool_call.call_id??Z.id,toolName:Z.name,inputText:typeof Q==="string"?Q:void 0,input:typeof Q==="string"?void 0:Q,...$.signature?{metadata:{thoughtSignature:$.signature}}:{}}]}case"usage":return[{type:"usage",usage:{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,reasoningTokenCount:$.thoughtsTokenCount,totalCost:$.totalCost}}];case"done":return[{type:"finish",reason:N_($),error:$.error}];default:return[]}}function N_($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function pY($){return{async*stream(Z){let Q=!1,W=!1;try{let J=typeof $==="function"?await $():$;J.setAbortSignal?.(Z.signal);let X=s6(Z.messages),Y=Z.tools.map((j)=>({name:j.name,description:j.description,inputSchema:j.inputSchema}));for await(let j of J.createMessage(Z.systemPrompt??"",X,Y))for(let V of E_(j)){if(V.type==="finish")Q=!0;else if(V.type==="tool-call-delta")W=!0;yield V}if(!Q)yield{type:"finish",reason:W?"tool-calls":"stop"}}catch(J){if(!Q)yield{type:"finish",reason:Z.signal?.aborted?"aborted":"error",error:J instanceof Error?J.message:String(J)}}}}}function y_($){let Z=Object.fromEntries(Object.entries($).filter(([,Q])=>Q!==void 0));return Object.keys(Z).length>0?Z:void 0}function h_($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function k_($){let Z={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(h_($))Object.assign(Z,{apiVersion:$.azure?.apiVersion,useIdentity:$.azure?.useIdentity});if($.providerId==="bedrock")Object.assign(Z,{authentication:$.aws?.authentication,profile:$.aws?.profile,accessKeyId:$.aws?.accessKey,secretAccessKey:$.aws?.secretKey,sessionToken:$.aws?.sessionToken,usePromptCache:$.aws?.usePromptCache,useCrossRegionInference:$.useCrossRegionInference,useGlobalInference:$.useGlobalInference,endpoint:$.aws?.endpoint,customModelBaseId:$.aws?.customModelBaseId});if($.providerId==="vertex"){let Q=$.gcp?.region??$.region;Object.assign(Z,{project:$.gcp?.projectId,projectId:$.gcp?.projectId,location:Q,region:Q})}if($.providerId==="sapaicore")Object.assign(Z,$.sap);return y_(Z)}function PQ($){let Z=$.providerConfig;if(Z?.knownModels)return Z.knownModels;if($.knownModels)return $.knownModels;return S_[$.providerId]?.models??void 0}function I_($){if(!$?.length)return;let Z=new Set;for(let Q of $)switch(Q){case"tools":case"reasoning":case"prompt-cache":case"images":Z.add(Q);break;case"structured_output":Z.add("structured-output");break;default:Z.add("text")}return Z.add("text"),[...Z]}function x_($,Z){return{id:$,name:Z.name??$,description:Z.description,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxOutputTokens:Z.maxTokens,capabilities:I_(Z.capabilities),metadata:{family:Z.family,pricing:Z.pricing,status:Z.status,releaseDate:Z.releaseDate}}}function rY($,Z,Q){let W=$.providerConfig,J=W?.providerId===$.providerId?W:void 0,X={...J??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??J?.apiKey,baseUrl:$.baseUrl??J?.baseUrl,headers:$.headers??J?.headers,knownModels:PQ($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:Z,extensionContext:$.extensionContext};if(P_(b_(X.providerId)))return pY(()=>w_(X));return C_({fetch:X.fetch,providerConfigs:[{providerId:X.providerId,apiKey:X.apiKey,baseUrl:X.baseUrl,headers:X.headers,fetch:X.fetch,options:k_(X),models:X.knownModels?Object.entries(X.knownModels).map(([Y,j])=>x_(Y,j)):void 0}],logger:Z,telemetry:Q??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:X.providerId,modelId:X.modelId},{maxTokens:X.maxOutputTokens})}import{createMediaBudgetState as g_,IMAGE_OMITTED_PLACEHOLDER as iY,normalizeUserInput as nY,resolveMediaBudget as m_,validateAndReserveImageMedia as v_}from"@cline/shared";var c_=8000,u_=50000,d_=6000000,l_=200000,p_=12000,r_=65536,T8=2000,aY=40000,i_=8,SQ={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},n_=new Set(["read","read_files"]),N$="[outdated - see the latest file content]",sY="Tool execution was interrupted before a result was produced.",oY=($)=>`
139
+ `).trim()}function $5($={}){let{timeoutMs:Z=30000,maxResponseBytes:Q=5000000,userAgent:J="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:W={},followRedirects:X=!0}=$;return async(Y,j,V)=>{let B;try{B=new URL(Y)}catch{throw Error(`Invalid URL: ${Y}`)}if(!["http:","https:"].includes(B.protocol))throw Error(`Invalid protocol: ${B.protocol}. Only http and https are supported.`);let H=new AbortController,G=setTimeout(()=>H.abort(),Z),K;if(V.signal)K=()=>H.abort(),V.signal.addEventListener("abort",K);try{let F=await fetch(Y,{method:"GET",headers:{"User-Agent":J,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...W},redirect:X?"follow":"manual",signal:H.signal});if(clearTimeout(G),!X&&F.status>=300&&F.status<400)return`Redirect to: ${F.headers.get("location")}`;if(!F.ok)throw Error(`HTTP ${F.status}: ${F.statusText}`);let A=F.headers.get("content-type")||"",D=F.body?.getReader();if(!D)throw Error("Failed to read response body");let U=[],L=0;while(!0){let{done:M,value:N}=await D.read();if(M)break;if(L+=N.length,L>Q)throw D.cancel(),Error(`Response too large: exceeded ${Q} bytes`);U.push(N)}let f=new Uint8Array(L),z=0;for(let M of U)f.set(M,z),z+=M.length;let O=new TextDecoder("utf-8").decode(f),T;if(A.includes("text/html")||A.includes("application/xhtml"))T=u_(O);else if(A.includes("application/json"))try{let M=JSON.parse(O);T=JSON.stringify(M,null,2)}catch{T=O}else T=O;let _=[`URL: ${Y}`,`Content-Type: ${A}`,`Size: ${L} bytes`,"","--- Content ---",T.slice(0,50000)];if(T.length>50000)_.push(`
140
+ [Content truncated: showing first 50000 of ${T.length} characters]`);return _.push("","--- Analysis Request ---",`Prompt: ${j}`),_.join(`
141
+ `)}catch(F){if(clearTimeout(G),F instanceof Error){if(F.name==="AbortError")throw Error(`Request timed out after ${Z}ms`);throw F}throw Error(`Fetch failed: ${String(F)}`)}finally{if(V.signal&&K)V.signal.removeEventListener("abort",K)}}}function kQ($={}){return z8($)}function Z5($={}){return{readFile:a6($.fileRead),search:e6($.search),bash:kQ($.bash),webFetch:$5($.webFetch),applyPatch:r6($.applyPatch),editor:i6($.editor)}}var d_={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion",submit_and_exit:"enableSubmitAndExit"},M8=[{name:"openai-native-use-apply-patch",mode:"act",providerIdIncludes:["openai-native"],enableTools:["apply_patch"],disableTools:["editor"]},{name:"codex-and-gpt-use-apply-patch",mode:"act",modelIdIncludes:["codex","gpt"],enableTools:["apply_patch"],disableTools:["editor"]}];function oY($,Z){if(!Z||Z.length===0)return!0;let Q=$.toLowerCase();return Z.some((J)=>Q.includes(J.toLowerCase()))}function l_($,Z,Q,J){if($.mode&&$.mode!=="any"&&$.mode!==J)return!1;return oY(Z,$.providerIdIncludes)&&oY(Q,$.modelIdIncludes)}function R8($,Z,Q,J){if(!J||J.length===0)return{};let W=new Map;for(let Y of J){if(!l_(Y,$,Z,Q))continue;for(let j of Y.disableTools??[])W.set(j,!1);for(let j of Y.enableTools??[])W.set(j,!0)}let X={};for(let[Y,j]of W.entries())X[d_[Y]]=j;return X}var J1={act:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!0,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},plan:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!1,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},search:{enableReadFiles:!0,enableSearch:!0,enableBash:!1,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},minimal:{enableReadFiles:!1,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!1},yolo:{enableReadFiles:!0,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!0,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!0,enableSpawnAgent:!1,enableAgentTeams:!1}};function r1($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function sY($){if($!=="yolo")return{};let Z={enabled:!0,autoApprove:!0},Q={"*":Z};for(let J of O2)Q[J]=Z;return Q}function tY($,Z){let Q=J1[$],{enableSpawnAgent:J,enableAgentTeams:W,...X}=Q;return N2({...X,...Z})}import{createTool as XO,zodToJsonSchema as YO}from"@cline/shared";import{z as iQ}from"zod";o0();import{createAgentRuntime as iT}from"@cline/agents";import{createContributionRegistry as nT,mergeModelOptions as Lj}from"@cline/shared";import{createGateway as $T,createHandlerAsync as ZT,hasRegisteredHandler as QT,MODEL_COLLECTIONS_BY_PROVIDER_ID as JT,normalizeProviderId as WT}from"@cline/llms";import{EMPTY_CONTENT_TEXT as p_}from"@cline/shared";function r_($){let Z=n_($.content),Q=[],J=$.id??s_(),W=0,X=[],Y=()=>{if(X.length===0)return;let j=W===0?J:`${J}_part_${W}`;W+=1,Q.push({id:j,role:$.role,content:X.map(a_),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:eY($.metrics)}),X=[]};if(Z.length===0)return Q.push({id:J,role:$.role,content:[{type:"text",text:p_}],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:eY($.metrics)}),Q;for(let j of Z){if(j.type!=="tool_result"){X.push(j);continue}Y(),Q.push({id:`${J}_tool_${j.tool_use_id}`,role:"tool",content:[Zj(j)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return Y(),Q}function Q5($){return $.flatMap(r_)}function i_($){let Z=$.content.map(Qj).filter((Q)=>Q!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:Z,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:o_($.metrics)}}function w2($){return $.map(i_)}function J5($){let Z=[];for(let Q of $){let J=Q.content.map(Qj).filter((Y)=>Y!==void 0),W=Q.role==="tool"?"user":Q.role,X=Z[Z.length-1];if(W==="user"&&J.length>0&&J.every((Y)=>Y.type==="tool_result")&&X?.role==="user"&&Array.isArray(X.content)&&X.content.every((Y)=>Y.type==="tool_result")){X.content.push(...J);continue}Z.push({role:W,content:J})}return Z}function n_($){if(typeof $==="string")return $.trim().length>0?[{type:"text",text:$}]:[];return[...$]}function a_($){switch($.type){case"text":return{type:"text",text:$.text};case"thinking":return{type:"reasoning",text:$.thinking,metadata:$.signature?{signature:$.signature,details:$.details}:$.details?{details:$.details}:void 0};case"redacted_thinking":return{type:"reasoning",text:"",redacted:!0,metadata:{data:$.data}};case"image":return{type:"image",image:$.data,mediaType:$.mediaType};case"file":return{type:"file",path:$.path,content:$.content};case"tool_use":return{type:"tool-call",toolCallId:$.id,toolName:$.name,input:$.input,metadata:$.signature?{signature:$.signature}:void 0};case"tool_result":return Zj($)}}function Zj($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function Qj($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let Z=$.metadata;return{type:"thinking",thinking:$.text,signature:Z?.signature,details:Z?.details}}case"image":return typeof $.image==="string"?{type:"image",data:$.image,mediaType:$.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:$.path,content:$.content};case"tool-call":{let Z=$.metadata;return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:Z?.thoughtSignature??Z?.signature}}case"tool-result":{let Z=$.output,Q=typeof Z==="string"?Z:Array.isArray(Z)?Z:JSON.stringify(Z);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:Q,is_error:$.isError}}}}function eY($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function o_($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var $j=0;function s_(){return $j+=1,`msg_${Date.now().toString(36)}_${$j.toString(36)}`}function t_($){switch($.type){case"text":return[{type:"text-delta",text:$.text}];case"reasoning":return[{type:"reasoning-delta",text:$.reasoning,metadata:$.signature?{thoughtSignature:$.signature,details:$.details}:{details:$.details}}];case"tool_calls":{let Z=$.tool_call.function,Q=Z.arguments;return[{type:"tool-call-delta",toolCallId:$.tool_call.call_id??Z.id,toolName:Z.name,inputText:typeof Q==="string"?Q:void 0,input:typeof Q==="string"?void 0:Q,...$.signature?{metadata:{thoughtSignature:$.signature}}:{}}]}case"usage":return[{type:"usage",usage:{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,reasoningTokenCount:$.thoughtsTokenCount,totalCost:$.totalCost}}];case"done":return[{type:"finish",reason:e_($),error:$.error}];default:return[]}}function e_($){if($.success===!1)return"error";if($.incompleteReason==="max_output_tokens"||$.incompleteReason==="max-tokens")return"max-tokens";return"stop"}function Jj($){return{async*stream(Z){let Q=!1,J=!1;try{let W=typeof $==="function"?await $():$;W.setAbortSignal?.(Z.signal);let X=J5(Z.messages),Y=Z.tools.map((j)=>({name:j.name,description:j.description,inputSchema:j.inputSchema}));for await(let j of W.createMessage(Z.systemPrompt??"",X,Y))for(let V of t_(j)){if(V.type==="finish")Q=!0;else if(V.type==="tool-call-delta")J=!0;yield V}if(!Q)yield{type:"finish",reason:J?"tool-calls":"stop"}}catch(W){if(!Q)yield{type:"finish",reason:Z.signal?.aborted?"aborted":"error",error:W instanceof Error?W.message:String(W)}}}}}function XT($){let Z=Object.fromEntries(Object.entries($).filter(([,Q])=>Q!==void 0));return Object.keys(Z).length>0?Z:void 0}function YT($){return $.providerId==="openai-compatible"||$.clientType==="openai-compatible"}function jT($){let Z={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if(YT($))Object.assign(Z,{apiVersion:$.azure?.apiVersion,useIdentity:$.azure?.useIdentity});if($.providerId==="bedrock")Object.assign(Z,{authentication:$.aws?.authentication,profile:$.aws?.profile,accessKeyId:$.aws?.accessKey,secretAccessKey:$.aws?.secretKey,sessionToken:$.aws?.sessionToken,usePromptCache:$.aws?.usePromptCache,useCrossRegionInference:$.useCrossRegionInference,useGlobalInference:$.useGlobalInference,endpoint:$.aws?.endpoint,customModelBaseId:$.aws?.customModelBaseId});if($.providerId==="vertex"){let Q=$.gcp?.region??$.region;Object.assign(Z,{project:$.gcp?.projectId,projectId:$.gcp?.projectId,location:Q,region:Q})}if($.providerId==="sapaicore")Object.assign(Z,$.sap);return XT(Z)}function IQ($){let Z=$.providerConfig;if(Z?.knownModels)return Z.knownModels;if($.knownModels)return $.knownModels;return JT[$.providerId]?.models??void 0}function VT($){if(!$?.length)return;let Z=new Set;for(let Q of $)switch(Q){case"tools":case"reasoning":case"prompt-cache":case"images":Z.add(Q);break;case"structured_output":Z.add("structured-output");break;default:Z.add("text")}return Z.add("text"),[...Z]}function BT($,Z){return{id:$,name:Z.name??$,description:Z.description,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxOutputTokens:Z.maxTokens,capabilities:VT(Z.capabilities),metadata:{family:Z.family,pricing:Z.pricing,status:Z.status,releaseDate:Z.releaseDate}}}function Wj($,Z,Q){let J=$.providerConfig,W=J?.providerId===$.providerId?J:void 0,X={...W??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??W?.apiKey,baseUrl:$.baseUrl??W?.baseUrl,headers:$.headers??W?.headers,knownModels:IQ($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:Z,extensionContext:$.extensionContext};if(QT(WT(X.providerId)))return Jj(()=>ZT(X));return $T({fetch:X.fetch,providerConfigs:[{providerId:X.providerId,apiKey:X.apiKey,baseUrl:X.baseUrl,headers:X.headers,fetch:X.fetch,options:jT(X),models:X.knownModels?Object.entries(X.knownModels).map(([Y,j])=>BT(Y,j)):void 0}],logger:Z,telemetry:Q??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:X.providerId,modelId:X.modelId},{maxTokens:X.maxOutputTokens})}import{createMediaBudgetState as HT,IMAGE_OMITTED_PLACEHOLDER as Xj,normalizeUserInput as Yj,resolveMediaBudget as GT,validateAndReserveImageMedia as KT}from"@cline/shared";var FT=8000,AT=50000,fT=6000000,UT=200000,DT=12000,LT=65536,E8=2000,jj=40000,_T=8,xQ={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},TT=new Set(["read","read_files"]),y$="[outdated - see the latest file content]",Vj="Tool execution was interrupted before a result was produced.",Bj=($)=>`
142
142
 
143
143
  ...[truncated ${$} chars]...
144
144
 
145
- `,O8=($)=>`
145
+ `,w8=($)=>`
146
146
 
147
147
  ...[truncated ${$} chars to fit provider request budget]...
148
148
 
149
- `,a_=($)=>`
149
+ `,OT=($)=>`
150
150
 
151
151
  ...[assistant text truncated: omitted ${$} chars]...
152
152
 
153
- `,tY=($)=>`
153
+ `,Hj=($)=>`
154
154
 
155
155
  ...[assistant text truncated: omitted ${$} chars to fit provider request budget]...
156
156
 
157
- `,s_=($)=>`
157
+ `,qT=($)=>`
158
158
 
159
159
  ...[assistant text truncated: omitted ${$} chars due to repeated tool-call markup]...
160
160
 
161
- `;function Zj($=process.env){return{maxToolResultChars:$j($[SQ.maxToolResultChars]),maxTotalTextBytes:$j($[SQ.maxTotalTextBytes]),minOutdatedRewriteBytes:t_($[SQ.minOutdatedRewriteBytes])}}class yQ{indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor($={}){this.maxToolResultChars=z8($.maxToolResultChars,c_),this.maxFileContentChars=z8($.maxFileContentChars,u_),this.maxTotalTextBytes=z8($.maxTotalTextBytes,d_),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=z8($.maxAssistantTextChars,l_),this.maxAssistantToolMarkupChars=z8($.maxAssistantToolMarkupChars,p_),this.minOutdatedRewriteBytes=e_($.minOutdatedRewriteBytes,r_)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Q=this.addMissingToolResults($).map((J)=>{if(!Array.isArray(J.content)){if(J.role==="user"&&typeof J.content==="string"){let j=nY(J.content);if(j!==J.content)return{...J,content:j}}if(J.role==="assistant"&&typeof J.content==="string"){let j=this.truncateAssistantText(J.content);if(j!==J.content)return{...J,content:j}}return J}let X=!1,Y=J.content.map((j)=>{let V=this.transformBlock(j,J.role);if(V!==j)X=!0;return V});return X?{...J,content:Y}:J}),W=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(W)}transformBlock($,Z){if(Z==="user"&&$.type==="text"&&typeof $.text==="string"){let J=nY($.text);if(J!==$.text)return{...$,text:J};return $}if(Z==="assistant"&&$.type==="text"&&typeof $.text==="string"){let J=this.truncateAssistantText($.text);return J===$.text?$:{...$,text:J}}if($.type==="file"){let J=M2($.content,this.maxFileContentChars,oY);return J===$.content?$:{...$,content:J}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),W=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let J=this.committedOutdatedRewrites.get($.tool_use_id);if(J&&J.size>0){let Y=this.getReadLocators($).filter((j)=>J.has(this.toReadLocatorKey(j))&&this.isOutdatedReadLocator(j,$.tool_use_id));if(Y.length>0)W=this.replaceOutdatedReadContent(W,Y)}}return W=this.truncateToolResultContent(W),W===$.content?$:{...$,content:W}}reindex($){let Z=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!Z)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let W=$[Q];if(!Array.isArray(W.content))continue;for(let J=0;J<W.content.length;J++){let X=W.content[J];if(X.type==="file")this.latestFullContentOwnerByPathCache.set(X.path,`file:${Q}:${J}`);else if(X.type==="tool_use"){let Y=X.name.toLowerCase();if(this.toolNameByIdCache.set(X.id,Y),this.isReadTool(Y)){let j=this.extractLocatorsFromReadToolInput(X.input);if(j.length>0)this.readLocatorsByToolUseIdCache.set(X.id,j)}}else if(X.type==="tool_result"){let Y=this.resolveToolName(X);if(!this.isReadTool(Y)||X.is_error===!0)continue;let j=this.getReadLocators(X);for(let V of j)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),X.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,X.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let Z=new Map,Q=new Set,W=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type!=="tool_result"||X.is_error===!0)continue;let Y=this.resolveToolName(X);if(!this.isReadTool(Y))continue;Q.add(X.tool_use_id);let j=this.committedOutdatedRewrites.get(X.tool_use_id),V=new Set,B=new Set;for(let G of this.getReadLocators(X)){let K=this.toReadLocatorKey(G);if(!this.isOutdatedReadLocator(G,X.tool_use_id))continue;if(B.add(K),!j?.has(K))V.add(K)}if(j){for(let G of j)if(!B.has(G))j.delete(G);if(j.size===0)this.committedOutdatedRewrites.delete(X.tool_use_id)}if(V.size===0)continue;let H=Z.get(X.tool_use_id);if(!H)H=new Set,Z.set(X.tool_use_id,H);for(let G of V)H.add(G);W+=this.estimateOutdatedReclaimBytes(X.content,V)}}for(let J of this.committedOutdatedRewrites.keys())if(!Q.has(J))this.committedOutdatedRewrites.delete(J);if(Z.size===0||W<this.minOutdatedRewriteBytes)return;for(let[J,X]of Z){let Y=this.committedOutdatedRewrites.get(J);if(!Y)Y=new Set,this.committedOutdatedRewrites.set(J,Y);for(let j of X)Y.add(j)}}estimateOutdatedReclaimBytes($,Z){let Q=this.extractReadLocatorsFromToolResultContent($),W=Q.length>0&&Q.every((V)=>Z.has(this.toReadLocatorKey(V))),J=(V)=>{let B;try{B=JSON.parse(V)}catch{return W||Q.length===0?e(this.truncateMiddle(V)):0}let H=Array.isArray(B)?B:[B],G=0;for(let K of H){let F=this.extractLocatorFromResultEntry(K);if(F&&Z.has(this.toReadLocatorKey(F)))G+=this.providerBoundEntryBytes(K)}return G};if(typeof $==="string")return J($);let X=new Set(Z),Y=0;for(let V of $)if(V.type==="text")Y+=this.countOutdatedImageEntries(V.text,X);let j=0;for(let V of $)if(V.type==="text")j+=J(V.text);else if(V.type==="image"){if(Y>0)Y-=1,j+=e(V.data)}else if(d1(V)){let B=this.extractLocatorFromResultEntry(V);if(B&&Z.has(this.toReadLocatorKey(B)))j+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(Z.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))j+=e(this.truncateMiddle(V.content))}return j}providerBoundEntryBytes($){let Z=this.truncateNestedStrings($);return e(JSON.stringify(Z))}addMissingToolResults($){let Z=this.collectToolResultIds($),Q=[],W=new Map,J=!1,X=()=>{if(W.size===0)return;Y(this.createMissingToolResultMessage(W)),W.clear(),J=!0},Y=(j)=>{let V=Q.at(-1);if(this.shouldMergeUserAfterToolResults(V,j)){Q[Q.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(j.content)]},J=!0;return}Q.push(j)};for(let j of $){if(this.isToolResultOnlyMessage(j)){if(Y(this.appendMissingToolResults(j,W)),W.size>0)W.clear(),J=!0;continue}if(Array.isArray(j.content)){let V=j.content.filter((H)=>H.type==="tool_result"),B=j.content.filter((H)=>H.type!=="tool_result");if(V.length>0){let H=this.appendMissingToolResults({...j,role:"user",content:V},W);if(Y(H),W.size>0)W.clear();J=!0}if(B.length>0||V.length===0){if(V.length===0)X();let H=V.length>0?{...j,content:B}:j;if(Y(H),H.role==="assistant")this.trackMissingToolCalls(H,Z,W)}continue}X(),Y(j)}return X(),J?Q:$}appendMissingToolResults($,Z){if(Z.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(Z)]}}shouldMergeUserAfterToolResults($,Z){return $?.role==="user"&&Z.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(Z.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let W of Q.content)if(W.type==="tool_result")Z.add(W.tool_use_id)}return Z}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}trackMissingToolCalls($,Z,Q){if(!Array.isArray($.content))return;for(let W of $.content){if(W.type!=="tool_use"||Z.has(W.id))continue;Q.set(W.id,W.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([Z,Q])=>({type:"tool_result",tool_use_id:Z,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${sY} Tool: ${$}.`:sY}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let Z=$,Q=this.readResultLocatorCache.get(Z);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(Z,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let Z=$,Q=[],W=this.extractLocatorFromReadRequest(Z);if(W)Q.push(W);if(Array.isArray(Z.files))for(let J of Z.files){let X=this.extractLocatorFromReadRequest(J);if(X)Q.push(X)}if(Array.isArray(Z.file_paths)){for(let J of Z.file_paths)if(typeof J==="string"&&J.length>0)Q.push({path:J,startLine:null,endLine:null})}return this.dedupeReadLocators(Q)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);let Z=[];for(let Q of $){if(Q.type==="text"){Z.push(...this.tryParseReadLocators(Q.text));continue}if(d1(Q)){let W=this.extractLocatorFromResultEntry(Q);if(W)Z.push(W)}}return this.dedupeReadLocators(Z)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let W of $){let J=this.extractLocatorFromResultEntry(W);if(J)Q.push(J)}return this.dedupeReadLocators(Q)}let Z=this.extractLocatorFromResultEntry($);return Z?[Z]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(Q)return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)};if(typeof Z.query==="string"&&Z.query.length>0)return this.parseReadQuery(Z.query);return}extractPath($){let Z=[$.path,$.file_path,$.filePath];for(let Q of Z)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let Z=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!Z)return{path:$,startLine:null,endLine:null};return{path:Z[1],startLine:Number(Z[2]),endLine:Z[3]==="EOF"?null:Number(Z[3])}}dedupeReadLocators($){let Z=new Map;for(let Q of $)Z.set(this.toReadLocatorKey(Q),Q);return Array.from(Z.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,Z){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==Z)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==Z}replaceOutdatedReadContent($,Z){let Q=new Set(Z.map((X)=>this.toReadLocatorKey(X))),W=new Set(Z.map((X)=>X.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??N$;let J=0;for(let X of $)if(X.type==="text")J+=this.countOutdatedImageEntries(X.text,Q);return $.map((X)=>{if(X.type==="file"){if(!W.has(X.path))return X;return{...X,content:N$}}if(X.type==="image"){if(J===0)return X;return J-=1,{type:"text",text:N$}}if(d1(X))return this.replaceOutdatedReadEntry(X,Q);if(X.type!=="text")return X;let Y=this.replaceOutdatedInString(X.text,Q);if(Y===null)return{...X,text:N$};return Y===X.text?X:{...X,text:Y}})}countOutdatedImageEntries($,Z){let Q;try{Q=JSON.parse($)}catch{return 0}let W=Array.isArray(Q)?Q:[Q],J=0;for(let X of W){if(!X||typeof X!=="object")continue;let Y=X,j=this.extractLocatorFromResultEntry(Y);if(!j)continue;if(!Z.has(this.toReadLocatorKey(j)))continue;if(Y.result==="Successfully read image"||Y.content==="Successfully read image")J+=1}return J}replaceOutdatedInString($,Z){let Q;try{Q=JSON.parse($)}catch{return null}let W=Array.isArray(Q)?Q.map((J)=>this.replaceOutdatedReadEntry(J,Z)):this.replaceOutdatedReadEntry(Q,Z);return JSON.stringify(W)}replaceOutdatedReadEntry($,Z){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!Z.has(this.toReadLocatorKey(Q)))return $;let W={...$};if(typeof W.result==="string")W.result=N$;else if(typeof W.content==="string")W.content=N$;else W.result=N$;return W}isReadTool($){return!!$&&n_.has($)}resolveToolName($){let Z=this.toolNameByIdCache.get($.tool_use_id);if(Z!==void 0)return Z;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((Z)=>{if(Z.type==="file"){let Q=this.truncateMiddle(Z.content);return Q===Z.content?Z:{...Z,content:Q}}if(Z.type==="text"){let Q=this.truncateMiddle(Z.text);return Q===Z.text?Z:{...Z,text:Q}}if(d1(Z))return this.truncateNestedStrings(Z);return Z})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let Z=!1,Q=$.map((W)=>{let J=this.truncateNestedStrings(W);if(J!==W)Z=!0;return J});return Z?Q:$}if($!==null&&typeof $==="object"){if(hQ($))return $;let Z=!1,Q={};for(let[W,J]of Object.entries($)){let X=this.truncateNestedStrings(J);if(X!==J)Z=!0;Q[W]=X}return Z?Q:$}return $}truncateMiddle($){return M2($,this.maxToolResultChars,oY)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return M2($,this.maxAssistantToolMarkupChars,s_);return M2($,this.maxAssistantTextChars,a_)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let Z=0;for(let Q of $.matchAll(o_))if(Z+=1,Z>=i_)return!0;return!1}truncateToTotalTextBudget($){let Z=this.countMessageTextBytes($);if(Z<=this.maxTotalTextBytes)return $;let Q=$.map((J)=>{if(!Array.isArray(J.content))return{...J};return{...J,content:J.content.map((X)=>Zz(X))}}),W=this.collectTruncationCandidates(Q);for(let J of W){if(Z<=this.maxTotalTextBytes)break;let X=J.byteLength;if(X<=J.minBytes)continue;let Y=Z-this.maxTotalTextBytes,j=Math.max(J.minBytes,X-Y),V=$z(J.get(),j,J.makeMarker);J.set(V),Z-=X-e(V)}return Q}countMessageTextBytes($){let Z=0;for(let Q of $){if(typeof Q.content==="string"){Z+=e(Q.content);continue}for(let W of Q.content)if(W.type==="text")Z+=e(W.text);else if(W.type==="thinking")Z+=e(W.thinking);else if(W.type==="file")Z+=e(W.content);else if(W.type==="tool_use")Z+=o6(W.input);else if(W.type==="tool_result"){if(typeof W.content==="string")Z+=e(W.content);else for(let J of W.content)if(J.type==="text")Z+=e(J.text);else if(J.type==="file")Z+=e(J.content);else if(d1(J))Z+=o6(J)}}return Z}collectTruncationCandidates($){let Z=[],Q=[];for(let W of $){if(W.role==="assistant"&&typeof W.content==="string"){Z.push({byteLength:e(W.content),minBytes:aY,makeMarker:tY,get:()=>W.content,set:(J)=>{W.content=J}});continue}if(!Array.isArray(W.content))continue;for(let J of W.content){if(J.type==="tool_use"){t6(J.input,Q);continue}if(W.role==="assistant"&&J.type==="text"){Z.push({byteLength:e(J.text),minBytes:aY,makeMarker:tY,get:()=>J.text,set:(X)=>{J.text=X}});continue}if(J.type!=="tool_result")continue;if(typeof J.content==="string"){Z.push({byteLength:e(J.content),minBytes:T8,makeMarker:O8,get:()=>J.content,set:(X)=>{J.content=X}});continue}for(let X of J.content)if(X.type==="text")Z.push({byteLength:e(X.text),minBytes:T8,makeMarker:O8,get:()=>X.text,set:(Y)=>{X.text=Y}});else if(X.type==="file")Z.push({byteLength:e(X.content),minBytes:T8,makeMarker:O8,get:()=>X.content,set:(Y)=>{X.content=Y}});else if(d1(X))t6(X,Z)}}return Z.sort((W,J)=>J.byteLength-W.byteLength),Q.sort((W,J)=>J.byteLength-W.byteLength),[...Z,...Q]}applyMediaBudget($){let Z=this.resolveMediaBudget();if(Z.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&Z.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&Z.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=g_(),W=!1,J=$.map((X)=>{if(!Array.isArray(X.content))return X;let Y=!1,j=X.content.map((V)=>{let B=this.applyMediaBudgetToBlock(V,Z,Q);if(B!==V)Y=!0;return B});if(!Y)return X;return W=!0,{...X,content:j}});return W?J:$}resolveMediaBudget(){return m_(this.mediaBudget)}applyMediaBudgetToBlock($,Z,Q){if(bQ($))return this.limitImageContent($,Z,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let W=!1,J=$.content.map((X)=>{let Y=this.applyMediaBudgetToToolResultEntry(X,Z,Q);if(Y!==X)W=!0;return Y});return W?{...$,content:J}:$}applyMediaBudgetToToolResultEntry($,Z,Q){if(bQ($))return this.limitImageContent($,Z,Q);if(d1($))return this.limitNestedMedia($,Z,Q);return $}limitNestedMedia($,Z,Q){if(bQ($)){let W=this.limitImageContent($,Z,Q);return W.type==="text"?W.text:W}if(Array.isArray($)){let W=!1,J=$.map((X)=>{let Y=this.limitNestedMedia(X,Z,Q);if(Y!==X)W=!0;return Y});return W?J:$}if($!==null&&typeof $==="object"){let W=!1,J={};for(let[X,Y]of Object.entries($)){let j=this.limitNestedMedia(Y,Z,Q);if(j!==Y)W=!0;J[X]=j}return W?J:$}return $}limitImageContent($,Z,Q){if(!Qj($))return{type:"text",text:iY};let W=v_($.mediaType,$.data,{maxImageEncodedBytes:Z.maxImageEncodedBytes,maxImageDecodedBytes:Z.maxImageDecodedBytes,maxTotalMediaBytes:Z.maxTotalMediaBytes},Q);if(!W.ok)return{type:"text",text:iY};return{...$,data:W.base64,mediaType:W.mediaType}}}var eY=String.raw`[\|\uFF5C]`,o_=new RegExp(String.raw`<\s*(?:${eY}\s*)?DSML\s*(?:${eY}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function e($){return Buffer.byteLength($,"utf8")}function $j($){if($===void 0)return;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>0?Z:void 0}function t_($){if($===void 0)return;let Z=$.trim().toLowerCase();if(Z==="infinity"||Z==="disable")return Number.POSITIVE_INFINITY;let Q=Number.parseInt($,10);return Number.isFinite(Q)&&Q>=0?Q:void 0}function z8($,Z){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):Z}function e_($,Z){if(typeof $!=="number"||Number.isNaN($)||$<0)return Z;return Number.isFinite($)?Math.floor($):$}function M2($,Z,Q){if($.length<=Z)return $;let W=Q($.length-Z),J=Math.max(0,Math.floor((Z-W.length)/2)),X=Math.max(0,$.length-J*2),Y=Q(X),j=Math.max(0,Math.floor((Z-Y.length)/2)),V=$.slice(0,j),B=j>0?$.slice(-j):"";return`${V}${Y}${B}`}function $z($,Z,Q){if(e($)<=Z)return $;let W=0,J=$.length,X=M2($,0,Q);while(W<=J){let Y=W+J>>>1,j=M2($,Y,Q);if(e(j)<=Z)X=j,W=Y+1;else J=Y-1}return X}function Zz($){if($.type==="tool_use")return{...$,input:e6($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((Z)=>d1(Z)?e6(Z):{...Z})}}function d1($){if($===null||typeof $!=="object")return!1;let Z=$.type;return Z!=="text"&&Z!=="image"&&Z!=="file"}function bQ($){return $!==null&&typeof $==="object"&&$.type==="image"}function Qj($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function hQ($){return Qj($)}function o6($){if(typeof $==="string")return e($);if(Array.isArray($)){let Z=0;for(let Q of $)Z+=o6(Q);return Z}if($!==null&&typeof $==="object"){if(hQ($))return 0;let Z=0;for(let Q of Object.values($))Z+=o6(Q);return Z}return 0}function t6($,Z){if(Array.isArray($)){$.forEach((Q,W)=>{if(typeof Q==="string")Z.push({byteLength:e(Q),minBytes:T8,makeMarker:O8,get:()=>$[W],set:(J)=>{$[W]=J}});else t6(Q,Z)});return}if($!==null&&typeof $==="object"){if(hQ($))return;let Q=$;for(let W of Object.keys(Q)){let J=Q[W];if(typeof J==="string")Z.push({byteLength:e(J),minBytes:T8,makeMarker:O8,get:()=>Q[W],set:(X)=>{Q[W]=X}});else t6(J,Z)}}}function e6($){if(Array.isArray($))return $.map(e6);if($!==null&&typeof $==="object"){let Z={};for(let[Q,W]of Object.entries($))Z[Q]=e6(W);return Z}return $}function kQ(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class IQ{messages=[];conversationId=kQ();sessionStarted=!1;constructor($){if(($?.length??0)>0)this.restore($??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage($){this.messages.push($)}appendMessages($){if($.length===0)return;this.messages.push(...$)}replaceMessages($){this.messages=[...$]}resetForRun(){this.messages=[],this.conversationId=kQ(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=kQ(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function Wj($){let{agentConfig:Z}=$,Q=Qz(Z),W=Wz(Z),J=$.hooks,X=Jz(Z.maxParallelToolCalls);return{sessionId:$.sessionId??Z.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??Z.systemPrompt,messageModelInfo:W,model:$.model,modelOptions:Q,tools:$.tools,hooks:J,prepareTurn:$.prepareTurn,consumePendingUserMessage:Z.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??Z.logger,telemetry:$.telemetry??Z.telemetry,initialMessages:$.initialMessages,completionPolicy:Z.completionPolicy,maxIterations:Z.maxIterations,toolExecution:X,toolPolicies:Z.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:Z.requestToolApproval}}function Qz($){let Z={};if($.thinking!==void 0)Z.thinking=$.thinking;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)Z.maxTokensPerTurn=$.maxTokensPerTurn;if($.apiTimeoutMs!==void 0)Z.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(Z).length>0?Z:void 0}function Wz($){let Z=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:Z}}function Jz($){if($===void 0)return;return $>=2?"parallel":"sequential"}function Xz(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function Yz($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function xQ($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(xQ);let Z={};for(let Q of Object.keys($).sort())Z[Q]=xQ($[Q]);return Z}function jz($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(xQ($))}catch{return String($)}}function Vz($,Z,Q,W){if(Z===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=Z,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===W.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=W.hardThreshold}}var Jj={softThreshold:3,hardThreshold:5};class gQ{config;state=Xz();constructor($){this.config={softThreshold:$?.softThreshold??Jj.softThreshold,hardThreshold:$?.hardThreshold??Jj.hardThreshold}}inspect($){let Z=jz($.input),Q=Vz(this.state,$.name,Z,this.config);if(Q.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Q.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){Yz(this.state)}}class mQ{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let Z=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&Z?Z:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let W=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(W),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Q,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!Z||Q<Z)return{action:"continue"};let J=await Hz({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details},this.options.onLimitReached);if(J.action==="continue"){let X=J.guidance?.trim();if(X)this.options.appendRecoveryNotice(X,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:X}}return{action:"stop",reason:J.reason?.trim()||void 0,message:Bz({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details,stopReason:J.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function Bz($){let Z=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)Z.push(`Error: ${Q}`);let W=$.stopReason?.trim();if(W)Z.push(`Decision: ${W}`);return Z.push("Session state was preserved. Send a new prompt to resume from the latest state."),Z.join(" ")}async function Hz($,Z){if(!Z)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await Z($)}catch(Q){return{action:"stop",reason:Q instanceof Error?Q.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function Gz($){let Z=$.content.filter((Q)=>Q.type==="text");if(Z.length===0)return;return Z.map((Q)=>Q.text).join("")}function Kz($){let Z=$.content.filter((Q)=>Q.type==="reasoning");if(Z.length===0)return;return{reasoning:Z.map((Q)=>Q.text).join(""),redacted:Z.some((Q)=>Q.redacted===!0)}}function Fz($){return $.content.find((Z)=>Z.type==="tool-result")}function Az($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function fz($){if(!$||$.isError!==!0)return;if(typeof $.output==="string")return $.output;if($.output instanceof Error)return $.output.message;try{return JSON.stringify($.output)}catch{return String($.output)}}class vQ{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:$.metadata?.reason==="auto_compaction"?"auto_compaction":void 0,metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let Z=[],Q=Gz($);if(Q!==void 0)Z.push({type:"content_end",contentType:"text",text:Q});let W=Kz($);if(W!==void 0)Z.push({type:"content_end",contentType:"reasoning",reasoning:W.reasoning});return Z}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input}]}translateToolFinished($){let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=Z===void 0?void 0:Date.now()-Z;this.toolStartedAt.delete($.toolCall.toolCallId);let W=Fz($.message),J=W?.output,X=fz(W);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:J,error:X,durationMs:Q}]}translateUsage($){let Z=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,W=$.cacheReadTokens-this.lastUsage.cacheReadTokens,J=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,X=this.lastUsage.totalCost??0,j=($.totalCost??0)-X;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,Z),outputTokens:Math.max(0,Q),cacheReadTokens:W===0?void 0:Math.max(0,W),cacheWriteTokens:J===0?void 0:Math.max(0,J),cost:j===0?void 0:j,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let Z={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:Az($.status),text:$.outputText,iterations:$.iterations,usage:Z}]}}function qz($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function Mz($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function Rz($,Z){let Q=$.trim(),W=Z.map((J)=>J.trim()).filter(Boolean).join(`
161
+ `;function Fj($=process.env){return{maxToolResultChars:Kj($[xQ.maxToolResultChars]),maxTotalTextBytes:Kj($[xQ.maxTotalTextBytes]),minOutdatedRewriteBytes:MT($[xQ.minOutdatedRewriteBytes])}}class mQ{indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor($={}){this.maxToolResultChars=N8($.maxToolResultChars,FT),this.maxFileContentChars=N8($.maxFileContentChars,AT),this.maxTotalTextBytes=N8($.maxTotalTextBytes,fT),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=N8($.maxAssistantTextChars,UT),this.maxAssistantToolMarkupChars=N8($.maxAssistantToolMarkupChars,DT),this.minOutdatedRewriteBytes=RT($.minOutdatedRewriteBytes,LT)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Q=this.addMissingToolResults($).map((W)=>{if(!Array.isArray(W.content)){if(W.role==="user"&&typeof W.content==="string"){let j=Yj(W.content);if(j!==W.content)return{...W,content:j}}if(W.role==="assistant"&&typeof W.content==="string"){let j=this.truncateAssistantText(W.content);if(j!==W.content)return{...W,content:j}}return W}let X=!1,Y=W.content.map((j)=>{let V=this.transformBlock(j,W.role);if(V!==j)X=!0;return V});return X?{...W,content:Y}:W}),J=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(J)}transformBlock($,Z){if(Z==="user"&&$.type==="text"&&typeof $.text==="string"){let W=Yj($.text);if(W!==$.text)return{...$,text:W};return $}if(Z==="assistant"&&$.type==="text"&&typeof $.text==="string"){let W=this.truncateAssistantText($.text);return W===$.text?$:{...$,text:W}}if($.type==="file"){let W=C2($.content,this.maxFileContentChars,Bj);return W===$.content?$:{...$,content:W}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),J=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let W=this.committedOutdatedRewrites.get($.tool_use_id);if(W&&W.size>0){let Y=this.getReadLocators($).filter((j)=>W.has(this.toReadLocatorKey(j))&&this.isOutdatedReadLocator(j,$.tool_use_id));if(Y.length>0)J=this.replaceOutdatedReadContent(J,Y)}}return J=this.truncateToolResultContent(J),J===$.content?$:{...$,content:J}}reindex($){let Z=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!Z)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let J=$[Q];if(!Array.isArray(J.content))continue;for(let W=0;W<J.content.length;W++){let X=J.content[W];if(X.type==="file")this.latestFullContentOwnerByPathCache.set(X.path,`file:${Q}:${W}`);else if(X.type==="tool_use"){let Y=X.name.toLowerCase();if(this.toolNameByIdCache.set(X.id,Y),this.isReadTool(Y)){let j=this.extractLocatorsFromReadToolInput(X.input);if(j.length>0)this.readLocatorsByToolUseIdCache.set(X.id,j)}}else if(X.type==="tool_result"){let Y=this.resolveToolName(X);if(!this.isReadTool(Y)||X.is_error===!0)continue;let j=this.getReadLocators(X);for(let V of j)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),X.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,X.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let Z=new Map,Q=new Set,J=0;for(let W of $){if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type!=="tool_result"||X.is_error===!0)continue;let Y=this.resolveToolName(X);if(!this.isReadTool(Y))continue;Q.add(X.tool_use_id);let j=this.committedOutdatedRewrites.get(X.tool_use_id),V=new Set,B=new Set;for(let G of this.getReadLocators(X)){let K=this.toReadLocatorKey(G);if(!this.isOutdatedReadLocator(G,X.tool_use_id))continue;if(B.add(K),!j?.has(K))V.add(K)}if(j){for(let G of j)if(!B.has(G))j.delete(G);if(j.size===0)this.committedOutdatedRewrites.delete(X.tool_use_id)}if(V.size===0)continue;let H=Z.get(X.tool_use_id);if(!H)H=new Set,Z.set(X.tool_use_id,H);for(let G of V)H.add(G);J+=this.estimateOutdatedReclaimBytes(X.content,V)}}for(let W of this.committedOutdatedRewrites.keys())if(!Q.has(W))this.committedOutdatedRewrites.delete(W);if(Z.size===0||J<this.minOutdatedRewriteBytes)return;for(let[W,X]of Z){let Y=this.committedOutdatedRewrites.get(W);if(!Y)Y=new Set,this.committedOutdatedRewrites.set(W,Y);for(let j of X)Y.add(j)}}estimateOutdatedReclaimBytes($,Z){let Q=this.extractReadLocatorsFromToolResultContent($),J=Q.length>0&&Q.every((V)=>Z.has(this.toReadLocatorKey(V))),W=(V)=>{let B;try{B=JSON.parse(V)}catch{return J||Q.length===0?e(this.truncateMiddle(V)):0}let H=Array.isArray(B)?B:[B],G=0;for(let K of H){let F=this.extractLocatorFromResultEntry(K);if(F&&Z.has(this.toReadLocatorKey(F)))G+=this.providerBoundEntryBytes(K)}return G};if(typeof $==="string")return W($);let X=new Set(Z),Y=0;for(let V of $)if(V.type==="text")Y+=this.countOutdatedImageEntries(V.text,X);let j=0;for(let V of $)if(V.type==="text")j+=W(V.text);else if(V.type==="image"){if(Y>0)Y-=1,j+=e(V.data)}else if(i1(V)){let B=this.extractLocatorFromResultEntry(V);if(B&&Z.has(this.toReadLocatorKey(B)))j+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(Z.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))j+=e(this.truncateMiddle(V.content))}return j}providerBoundEntryBytes($){let Z=this.truncateNestedStrings($);return e(JSON.stringify(Z))}addMissingToolResults($){let Z=this.collectToolResultIds($),Q=[],J=new Map,W=!1,X=()=>{if(J.size===0)return;Y(this.createMissingToolResultMessage(J)),J.clear(),W=!0},Y=(j)=>{let V=Q.at(-1);if(this.shouldMergeUserAfterToolResults(V,j)){Q[Q.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(j.content)]},W=!0;return}Q.push(j)};for(let j of $){if(this.isToolResultOnlyMessage(j)){if(Y(this.appendMissingToolResults(j,J)),J.size>0)J.clear(),W=!0;continue}if(Array.isArray(j.content)){let V=j.content.filter((H)=>H.type==="tool_result"),B=j.content.filter((H)=>H.type!=="tool_result");if(V.length>0){let H=this.appendMissingToolResults({...j,role:"user",content:V},J);if(Y(H),J.size>0)J.clear();W=!0}if(B.length>0||V.length===0){if(V.length===0)X();let H=V.length>0?{...j,content:B}:j;if(Y(H),H.role==="assistant")this.trackMissingToolCalls(H,Z,J)}continue}X(),Y(j)}return X(),W?Q:$}appendMissingToolResults($,Z){if(Z.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(Z)]}}shouldMergeUserAfterToolResults($,Z){return $?.role==="user"&&Z.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(Z.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let J of Q.content)if(J.type==="tool_result")Z.add(J.tool_use_id)}return Z}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}trackMissingToolCalls($,Z,Q){if(!Array.isArray($.content))return;for(let J of $.content){if(J.type!=="tool_use"||Z.has(J.id))continue;Q.set(J.id,J.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([Z,Q])=>({type:"tool_result",tool_use_id:Z,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${Vj} Tool: ${$}.`:Vj}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let Z=$,Q=this.readResultLocatorCache.get(Z);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(Z,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let Z=$,Q=[],J=this.extractLocatorFromReadRequest(Z);if(J)Q.push(J);if(Array.isArray(Z.files))for(let W of Z.files){let X=this.extractLocatorFromReadRequest(W);if(X)Q.push(X)}if(Array.isArray(Z.file_paths)){for(let W of Z.file_paths)if(typeof W==="string"&&W.length>0)Q.push({path:W,startLine:null,endLine:null})}return this.dedupeReadLocators(Q)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);let Z=[];for(let Q of $){if(Q.type==="text"){Z.push(...this.tryParseReadLocators(Q.text));continue}if(i1(Q)){let J=this.extractLocatorFromResultEntry(Q);if(J)Z.push(J)}}return this.dedupeReadLocators(Z)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let J of $){let W=this.extractLocatorFromResultEntry(J);if(W)Q.push(W)}return this.dedupeReadLocators(Q)}let Z=this.extractLocatorFromResultEntry($);return Z?[Z]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(Q)return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)};if(typeof Z.query==="string"&&Z.query.length>0)return this.parseReadQuery(Z.query);return}extractPath($){let Z=[$.path,$.file_path,$.filePath];for(let Q of Z)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let Z=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!Z)return{path:$,startLine:null,endLine:null};return{path:Z[1],startLine:Number(Z[2]),endLine:Z[3]==="EOF"?null:Number(Z[3])}}dedupeReadLocators($){let Z=new Map;for(let Q of $)Z.set(this.toReadLocatorKey(Q),Q);return Array.from(Z.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,Z){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==Z)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==Z}replaceOutdatedReadContent($,Z){let Q=new Set(Z.map((X)=>this.toReadLocatorKey(X))),J=new Set(Z.map((X)=>X.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??y$;let W=0;for(let X of $)if(X.type==="text")W+=this.countOutdatedImageEntries(X.text,Q);return $.map((X)=>{if(X.type==="file"){if(!J.has(X.path))return X;return{...X,content:y$}}if(X.type==="image"){if(W===0)return X;return W-=1,{type:"text",text:y$}}if(i1(X))return this.replaceOutdatedReadEntry(X,Q);if(X.type!=="text")return X;let Y=this.replaceOutdatedInString(X.text,Q);if(Y===null)return{...X,text:y$};return Y===X.text?X:{...X,text:Y}})}countOutdatedImageEntries($,Z){let Q;try{Q=JSON.parse($)}catch{return 0}let J=Array.isArray(Q)?Q:[Q],W=0;for(let X of J){if(!X||typeof X!=="object")continue;let Y=X,j=this.extractLocatorFromResultEntry(Y);if(!j)continue;if(!Z.has(this.toReadLocatorKey(j)))continue;if(Y.result==="Successfully read image"||Y.content==="Successfully read image")W+=1}return W}replaceOutdatedInString($,Z){let Q;try{Q=JSON.parse($)}catch{return null}let J=Array.isArray(Q)?Q.map((W)=>this.replaceOutdatedReadEntry(W,Z)):this.replaceOutdatedReadEntry(Q,Z);return JSON.stringify(J)}replaceOutdatedReadEntry($,Z){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!Z.has(this.toReadLocatorKey(Q)))return $;let J={...$};if(typeof J.result==="string")J.result=y$;else if(typeof J.content==="string")J.content=y$;else J.result=y$;return J}isReadTool($){return!!$&&TT.has($)}resolveToolName($){let Z=this.toolNameByIdCache.get($.tool_use_id);if(Z!==void 0)return Z;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((Z)=>{if(Z.type==="file"){let Q=this.truncateMiddle(Z.content);return Q===Z.content?Z:{...Z,content:Q}}if(Z.type==="text"){let Q=this.truncateMiddle(Z.text);return Q===Z.text?Z:{...Z,text:Q}}if(i1(Z))return this.truncateNestedStrings(Z);return Z})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let Z=!1,Q=$.map((J)=>{let W=this.truncateNestedStrings(J);if(W!==J)Z=!0;return W});return Z?Q:$}if($!==null&&typeof $==="object"){if(vQ($))return $;let Z=!1,Q={};for(let[J,W]of Object.entries($)){let X=this.truncateNestedStrings(W);if(X!==W)Z=!0;Q[J]=X}return Z?Q:$}return $}truncateMiddle($){return C2($,this.maxToolResultChars,Bj)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return C2($,this.maxAssistantToolMarkupChars,qT);return C2($,this.maxAssistantTextChars,OT)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let Z=0;for(let Q of $.matchAll(zT))if(Z+=1,Z>=_T)return!0;return!1}truncateToTotalTextBudget($){let Z=this.countMessageTextBytes($);if(Z<=this.maxTotalTextBytes)return $;let Q=$.map((W)=>{if(!Array.isArray(W.content))return{...W};return{...W,content:W.content.map((X)=>ET(X))}}),J=this.collectTruncationCandidates(Q);for(let W of J){if(Z<=this.maxTotalTextBytes)break;let X=W.byteLength;if(X<=W.minBytes)continue;let Y=Z-this.maxTotalTextBytes,j=Math.max(W.minBytes,X-Y),V=NT(W.get(),j,W.makeMarker);W.set(V),Z-=X-e(V)}return Q}countMessageTextBytes($){let Z=0;for(let Q of $){if(typeof Q.content==="string"){Z+=e(Q.content);continue}for(let J of Q.content)if(J.type==="text")Z+=e(J.text);else if(J.type==="thinking")Z+=e(J.thinking);else if(J.type==="file")Z+=e(J.content);else if(J.type==="tool_use")Z+=W5(J.input);else if(J.type==="tool_result"){if(typeof J.content==="string")Z+=e(J.content);else for(let W of J.content)if(W.type==="text")Z+=e(W.text);else if(W.type==="file")Z+=e(W.content);else if(i1(W))Z+=W5(W)}}return Z}collectTruncationCandidates($){let Z=[],Q=[];for(let J of $){if(J.role==="assistant"&&typeof J.content==="string"){Z.push({byteLength:e(J.content),minBytes:jj,makeMarker:Hj,get:()=>J.content,set:(W)=>{J.content=W}});continue}if(!Array.isArray(J.content))continue;for(let W of J.content){if(W.type==="tool_use"){X5(W.input,Q);continue}if(J.role==="assistant"&&W.type==="text"){Z.push({byteLength:e(W.text),minBytes:jj,makeMarker:Hj,get:()=>W.text,set:(X)=>{W.text=X}});continue}if(W.type!=="tool_result")continue;if(typeof W.content==="string"){Z.push({byteLength:e(W.content),minBytes:E8,makeMarker:w8,get:()=>W.content,set:(X)=>{W.content=X}});continue}for(let X of W.content)if(X.type==="text")Z.push({byteLength:e(X.text),minBytes:E8,makeMarker:w8,get:()=>X.text,set:(Y)=>{X.text=Y}});else if(X.type==="file")Z.push({byteLength:e(X.content),minBytes:E8,makeMarker:w8,get:()=>X.content,set:(Y)=>{X.content=Y}});else if(i1(X))X5(X,Z)}}return Z.sort((J,W)=>W.byteLength-J.byteLength),Q.sort((J,W)=>W.byteLength-J.byteLength),[...Z,...Q]}applyMediaBudget($){let Z=this.resolveMediaBudget();if(Z.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&Z.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&Z.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=HT(),J=!1,W=$.map((X)=>{if(!Array.isArray(X.content))return X;let Y=!1,j=X.content.map((V)=>{let B=this.applyMediaBudgetToBlock(V,Z,Q);if(B!==V)Y=!0;return B});if(!Y)return X;return J=!0,{...X,content:j}});return J?W:$}resolveMediaBudget(){return GT(this.mediaBudget)}applyMediaBudgetToBlock($,Z,Q){if(gQ($))return this.limitImageContent($,Z,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let J=!1,W=$.content.map((X)=>{let Y=this.applyMediaBudgetToToolResultEntry(X,Z,Q);if(Y!==X)J=!0;return Y});return J?{...$,content:W}:$}applyMediaBudgetToToolResultEntry($,Z,Q){if(gQ($))return this.limitImageContent($,Z,Q);if(i1($))return this.limitNestedMedia($,Z,Q);return $}limitNestedMedia($,Z,Q){if(gQ($)){let J=this.limitImageContent($,Z,Q);return J.type==="text"?J.text:J}if(Array.isArray($)){let J=!1,W=$.map((X)=>{let Y=this.limitNestedMedia(X,Z,Q);if(Y!==X)J=!0;return Y});return J?W:$}if($!==null&&typeof $==="object"){let J=!1,W={};for(let[X,Y]of Object.entries($)){let j=this.limitNestedMedia(Y,Z,Q);if(j!==Y)J=!0;W[X]=j}return J?W:$}return $}limitImageContent($,Z,Q){if(!Aj($))return{type:"text",text:Xj};let J=KT($.mediaType,$.data,{maxImageEncodedBytes:Z.maxImageEncodedBytes,maxImageDecodedBytes:Z.maxImageDecodedBytes,maxTotalMediaBytes:Z.maxTotalMediaBytes},Q);if(!J.ok)return{type:"text",text:Xj};return{...$,data:J.base64,mediaType:J.mediaType}}}var Gj=String.raw`[\|\uFF5C]`,zT=new RegExp(String.raw`<\s*(?:${Gj}\s*)?DSML\s*(?:${Gj}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function e($){return Buffer.byteLength($,"utf8")}function Kj($){if($===void 0)return;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>0?Z:void 0}function MT($){if($===void 0)return;let Z=$.trim().toLowerCase();if(Z==="infinity"||Z==="disable")return Number.POSITIVE_INFINITY;let Q=Number.parseInt($,10);return Number.isFinite(Q)&&Q>=0?Q:void 0}function N8($,Z){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):Z}function RT($,Z){if(typeof $!=="number"||Number.isNaN($)||$<0)return Z;return Number.isFinite($)?Math.floor($):$}function C2($,Z,Q){if($.length<=Z)return $;let J=Q($.length-Z),W=Math.max(0,Math.floor((Z-J.length)/2)),X=Math.max(0,$.length-W*2),Y=Q(X),j=Math.max(0,Math.floor((Z-Y.length)/2)),V=$.slice(0,j),B=j>0?$.slice(-j):"";return`${V}${Y}${B}`}function NT($,Z,Q){if(e($)<=Z)return $;let J=0,W=$.length,X=C2($,0,Q);while(J<=W){let Y=J+W>>>1,j=C2($,Y,Q);if(e(j)<=Z)X=j,J=Y+1;else W=Y-1}return X}function ET($){if($.type==="tool_use")return{...$,input:Y5($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((Z)=>i1(Z)?Y5(Z):{...Z})}}function i1($){if($===null||typeof $!=="object")return!1;let Z=$.type;return Z!=="text"&&Z!=="image"&&Z!=="file"}function gQ($){return $!==null&&typeof $==="object"&&$.type==="image"}function Aj($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function vQ($){return Aj($)}function W5($){if(typeof $==="string")return e($);if(Array.isArray($)){let Z=0;for(let Q of $)Z+=W5(Q);return Z}if($!==null&&typeof $==="object"){if(vQ($))return 0;let Z=0;for(let Q of Object.values($))Z+=W5(Q);return Z}return 0}function X5($,Z){if(Array.isArray($)){$.forEach((Q,J)=>{if(typeof Q==="string")Z.push({byteLength:e(Q),minBytes:E8,makeMarker:w8,get:()=>$[J],set:(W)=>{$[J]=W}});else X5(Q,Z)});return}if($!==null&&typeof $==="object"){if(vQ($))return;let Q=$;for(let J of Object.keys(Q)){let W=Q[J];if(typeof W==="string")Z.push({byteLength:e(W),minBytes:E8,makeMarker:w8,get:()=>Q[J],set:(X)=>{Q[J]=X}});else X5(W,Z)}}}function Y5($){if(Array.isArray($))return $.map(Y5);if($!==null&&typeof $==="object"){let Z={};for(let[Q,J]of Object.entries($))Z[Q]=Y5(J);return Z}return $}function cQ(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class uQ{messages=[];conversationId=cQ();sessionStarted=!1;constructor($){if(($?.length??0)>0)this.restore($??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage($){this.messages.push($)}appendMessages($){if($.length===0)return;this.messages.push(...$)}replaceMessages($){this.messages=[...$]}resetForRun(){this.messages=[],this.conversationId=cQ(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=cQ(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function fj($){let{agentConfig:Z}=$,Q=wT(Z),J=CT(Z),W=$.hooks,X=PT(Z.maxParallelToolCalls);return{sessionId:$.sessionId??Z.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??Z.systemPrompt,messageModelInfo:J,model:$.model,modelOptions:Q,tools:$.tools,hooks:W,prepareTurn:$.prepareTurn,consumePendingUserMessage:Z.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??Z.logger,telemetry:$.telemetry??Z.telemetry,initialMessages:$.initialMessages,completionPolicy:Z.completionPolicy,maxIterations:Z.maxIterations,toolExecution:X,toolPolicies:Z.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:Z.requestToolApproval}}function wT($){let Z={};if($.thinking!==void 0)Z.thinking=$.thinking;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)Z.maxTokensPerTurn=$.maxTokensPerTurn;if($.apiTimeoutMs!==void 0)Z.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(Z).length>0?Z:void 0}function CT($){let Z=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:Z}}function PT($){if($===void 0)return;return $>=2?"parallel":"sequential"}function P2($){let Z={...$},Q=Object.hasOwn($,"thinking"),J=Object.hasOwn($,"thinkingBudgetTokens");if($.thinking===!1||$.thinking===null)return Z.reasoningEffort=void 0,Z.thinkingBudgetTokens=void 0,Z;if(!Q&&J&&typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0;return Z}function ST(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function bT($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function dQ($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(dQ);let Z={};for(let Q of Object.keys($).sort())Z[Q]=dQ($[Q]);return Z}function yT($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(dQ($))}catch{return String($)}}function hT($,Z,Q,J){if(Z===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=Z,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===J.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=J.hardThreshold}}var Uj={softThreshold:3,hardThreshold:5};class lQ{config;state=ST();constructor($){this.config={softThreshold:$?.softThreshold??Uj.softThreshold,hardThreshold:$?.hardThreshold??Uj.hardThreshold}}inspect($){let Z=yT($.input),Q=hT(this.state,$.name,Z,this.config);if(Q.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Q.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){bT(this.state)}}class pQ{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let Z=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&Z?Z:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let J=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(J),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Q,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!Z||Q<Z)return{action:"continue"};let W=await IT({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details},this.options.onLimitReached);if(W.action==="continue"){let X=W.guidance?.trim();if(X)this.options.appendRecoveryNotice(X,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:X}}return{action:"stop",reason:W.reason?.trim()||void 0,message:kT({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details,stopReason:W.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function kT($){let Z=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)Z.push(`Error: ${Q}`);let J=$.stopReason?.trim();if(J)Z.push(`Decision: ${J}`);return Z.push("Session state was preserved. Send a new prompt to resume from the latest state."),Z.join(" ")}async function IT($,Z){if(!Z)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await Z($)}catch(Q){return{action:"stop",reason:Q instanceof Error?Q.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function xT($){let Z=$.content.filter((Q)=>Q.type==="text");if(Z.length===0)return;return Z.map((Q)=>Q.text).join("")}function gT($){let Z=$.content.filter((Q)=>Q.type==="reasoning");if(Z.length===0)return;return{reasoning:Z.map((Q)=>Q.text).join(""),redacted:Z.some((Q)=>Q.redacted===!0)}}function mT($){return $.content.find((Z)=>Z.type==="tool-result")}function vT($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function cT($){if(!$||$.isError!==!0)return;if(typeof $.output==="string")return $.output;if($.output instanceof Error)return $.output.message;try{return JSON.stringify($.output)}catch{return String($.output)}}class rQ{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:$.metadata?.reason==="auto_compaction"?"auto_compaction":void 0,metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let Z=[],Q=xT($);if(Q!==void 0)Z.push({type:"content_end",contentType:"text",text:Q});let J=gT($);if(J!==void 0)Z.push({type:"content_end",contentType:"reasoning",reasoning:J.reasoning});return Z}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input}]}translateToolFinished($){let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=Z===void 0?void 0:Date.now()-Z;this.toolStartedAt.delete($.toolCall.toolCallId);let J=mT($.message),W=J?.output,X=cT(J);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:W,error:X,durationMs:Q}]}translateUsage($){let Z=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,J=$.cacheReadTokens-this.lastUsage.cacheReadTokens,W=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,X=this.lastUsage.totalCost??0,j=($.totalCost??0)-X;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,Z),outputTokens:Math.max(0,Q),cacheReadTokens:J===0?void 0:Math.max(0,J),cacheWriteTokens:W===0?void 0:Math.max(0,W),cost:j===0?void 0:j,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let Z={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:vT($.status),text:$.outputText,iterations:$.iterations,usage:Z}]}}function aT($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function oT($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function sT($,Z){let Q=$.trim(),J=Z.map((W)=>W.trim()).filter(Boolean).join(`
162
162
 
163
- `);if(Q&&W)return`${Q}
163
+ `);if(Q&&J)return`${Q}
164
164
 
165
- ${W}`;return Q||W}function Ez($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function Nz($,Z){return $.filter((Q)=>Ez(Q.name,Z))}function Cz($,Z){return k1(Nz($,Z))}function wz($){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:Yj(J?.options,Y.options)},W={...W,...Y.messages?{messages:Y.messages}:{},...Y.tools?{tools:Y.tools}:{},...Y.options?{options:Yj(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 l1{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 vQ;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??Tz,this.conversation=new IQ($.initialMessages),this.messageBuilder=new yQ(Zj()),this.contributionRegistry=Oz({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 mQ({maxConsecutiveMistakes:Q,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(X)=>this.emitLegacyEvent(X),log:(X,Y,j)=>Pz(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 gQ(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 Mz(Z);if(Q)$.push(Q)}return Rz(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 bz(Q,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:U})}let W=await this.composeSystemPrompt(),J=rY(this.config,this.logger,this.telemetry),X=new Map;for(let U of this.contributionRegistry.getRegisteredTools())X.set(U.name,U);let Y=Cz([...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(),B=jj(this.config),H=Array.from(j.values()),G=a6(this.conversation.getMessages()),K=Wj({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:J,logger:this.logger,telemetry:this.telemetry,tools:H,toolContextMetadata:{modelSupportsImages:B?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[$Y]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(B,H),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=q2(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 $=wz([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=q2(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:a6(Y.messages)}:{},...Y.systemPrompt!==void 0?{systemPrompt:Y.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let Z=await this.prepareProviderMessagesForApi(s6($));return a6(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?qz(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(q2($));return}if(Z.length===0)return;let Q=new Set(this.conversation.getMessages().map((J)=>J.id).filter((J)=>typeof J==="string")),W=q2(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":Sz(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,B=Z?q2(Z.messages):this.conversation.getMessages(),H=jj(this.config);if(Q)throw Q;return{text:j,usage:V,messages:B,toolCalls:this.currentRunToolCalls,iterations:Z?.iterations??0,finishReason:Y,model:{id:this.config.modelId,provider:this.config.providerId,info:H},startedAt:W,endedAt:J,durationMs:X}}}function Pz($,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 Sz($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function bz($,Z,Q,W){let{buildInitialUserContent:J}=await Promise.resolve().then(() => Xj);return J($,Z,Q,W)}function jj($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let Z=PQ($);if(Z?.[$.modelId])return Z[$.modelId];return}import{buildClineSystemPrompt as Vj}from"@cline/shared";function Bj($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return Vj({ide:Z.clineIdeName?.trim()||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,rules:`# Team Teammate Role
166
- ${Q}`,platform:Z.clinePlatform,metadata:Z.workspaceMetadata})}function Hj($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return Vj({ide:Z.clineIdeName||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,overridePrompt:Q,metadata:Z.workspaceMetadata,platform:Z.clinePlatform})}function R2($){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 M8($){let Z=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?Bj($.prompt,Z):Hj($.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 E2($){let Z=M8($),Q=new l1(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);return Q}var kz=cQ.object({systemPrompt:cQ.string().describe("System prompt defining the sub-agent's behavior"),task:cQ.string().describe("Task for the sub-agent to complete")});function N2($){return yz({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:hz(kz),execute:async(Z,Q)=>{let W=$.createSubAgentTools?await $.createSubAgentTools(Z,Q):$.subAgentTools??[],J=E2({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),B={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,result:B,agentResult:V})}catch{}return B}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 V0,TEAM_AWAIT_TIMEOUT_MS as Iz,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as xz,TEAM_RUN_TEXT_PREVIEW_LIMIT as gz,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as mz,TeamAttachOutcomeFragmentInputSchema as Gj,TeamAwaitRunsInputSchema as Kj,TeamBroadcastInputSchema as Fj,TeamBroadcastToolResultSchema as vz,TeamCancelRunInputSchema as Aj,TeamCancelRunToolResultSchema as cz,TeamCleanupInputSchema as fj,TeamCleanupToolResultSchema as uz,TeamCreateOutcomeInputSchema as Uj,TeamCreateOutcomeToolResultSchema as dz,TeamFinalizeOutcomeInputSchema as Dj,TeamFinalizeOutcomeToolResultSchema as lz,TeamListOutcomesInputSchema as Lj,TeamListRunsInputSchema as _j,TeamMailboxMessageToolResultSchema as pz,TeamMissionLogInputSchema as zj,TeamMissionLogToolResultSchema as rz,TeamOutcomeFragmentToolResultSchema as Tj,TeamOutcomeToolResultSchema as iz,TeamReadMailboxInputSchema as Oj,TeamReviewOutcomeFragmentInputSchema as qj,TeamRunTaskInputSchema as Mj,TeamRunTaskToolResultSchema as uQ,TeamRunToolSummarySchema as dQ,TeamSendMessageInputSchema as Rj,TeamSendMessageToolResultSchema as nz,TeamShutdownTeammateInputSchema as Ej,TeamSimpleAgentStatusToolResultSchema as Nj,TeamSpawnTeammateInputSchema as Cj,TeamStatusInputSchema as wj,TeamStatusToolResultSchema as az,TeamTaskInputSchema as Pj,TeamTaskToolResultSchema as R8,validateWithZod as b,zodToJsonSchema as B0}from"@cline/shared";function Sj($,Z){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=Z)return Q;return`${Q.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function C$($,Z){if($===void 0)throw Error(`Missing required field: ${Z}`);return $}function sz($){let Z=$.result;if(!Z)return;return{textPreview:Sj(Z.text,gz),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 $5($){return $?.toISOString()}function lQ($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:Sj($.message,xz),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:$5($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:$5($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:$5($.heartbeatAt),lastProgressAt:$5($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:sz($)}}function oz($){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 Z5=["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 bj($){let Z=[];if($.createBaseTools)Z.push(...$.createBaseTools());Z.push(...E8({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:M8({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:Z,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function Q5($){let Z=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,W=E8({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;bj({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:X}),J.push(X.agentId)}return{tools:W,restoredFromPersistence:Q,restoredTeammates:J}}function E8($){let Z=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,W=$.includeManagementTools??!0,J=[];if(Q)J.push(V0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:B0(Cj),execute:async(Y)=>{let j=b(Cj,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(bj({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!W)$.onLeadToolsUnlocked?.(E8({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return b(Nj,{agentId:j.agentId,status:"spawned"})}}));if(!W)return J;J.push(V0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:B0(Ej),execute:async(Y)=>{let j=b(Ej,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(j.agentId,j.reason),b(Nj,{agentId:j.agentId,status:"stopped"})}})),J.push(V0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:B0(wj),execute:async(Y)=>{return b(wj,Y),b(az,$.runtime.getSnapshot())}})),J.push(V0({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:B0(Pj),execute:async(Y)=>{let j=b(Pj,Y);switch(j.action){case"create":{let V=new Set(mz.create??[]),B=Object.entries(Y).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),H=$.runtime.createTask({title:C$(j.title,"title"),description:C$(j.description,"description"),dependsOn:j.dependsOn,assignee:j.assignee,createdBy:$.requesterId});return b(R8,{action:"create",taskId:H.id,status:H.status,...B.length>0?{ignoredFields:B,note:`Ignored fields for action=create: ${B.join(", ")}`}:{}})}case"list":return b(R8,{action:"list",tasks:$.runtime.listTaskItems({status:j.status,assignee:j.assignee})});case"claim":{let V=$.runtime.claimTask(C$(j.taskId,"taskId"),$.requesterId);return b(R8,{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(C$(j.taskId,"taskId"),$.requesterId,C$(j.summary,"summary"));return b(R8,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(C$(j.taskId,"taskId"),$.requesterId,C$(j.reason,"reason"));return b(R8,{action:"block",taskId:V.id,status:V.status})}}}}));let X=new Map;return J.push(V0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:B0(Mj),execute:async(Y)=>{let j=b(Mj,Y);if(j.runMode==="async"){let H=$.runtime.startTeammateRun(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0});return b(uQ,{agentId:j.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${j.agentId} and queued as ${H.id}.`,runId:H.id})}let V=X.get(j.agentId);if(V){let H=await V;return b(uQ,{...H,status:"joined",deduped:!0,message:`Task for ${j.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let B=$.runtime.routeToTeammate(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0}).then((H)=>b(uQ,{agentId:j.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${j.agentId} and completed in sync mode.`,text:H.text,iterations:H.iterations})).finally(()=>{X.delete(j.agentId)});return X.set(j.agentId,B),await B}})),J.push(V0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:B0(Aj),execute:async(Y)=>{let j=b(Aj,Y),V=$.runtime.cancelRun(j.runId,j.reason);return b(cz,{runId:V.id,status:V.status})}})),J.push(V0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:B0(_j),execute:async(Y)=>b(dQ.array(),$.runtime.listRuns(b(_j,Y)).map(lQ))})),J.push(V0({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:B0(Kj),timeoutMs:Iz,execute:async(Y)=>{let j=b(Kj,Y);if(j.runId){let H=await $.runtime.awaitRun(j.runId);return oz(H),b(dQ,lQ(H))}let V=await $.runtime.awaitAllRuns(),B=V.filter((H)=>["failed","cancelled","interrupted"].includes(H.status));if(B.length>0){let H=B.map((G)=>`${G.id}:${G.status}${G.error?`(${G.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${H}`)}return b(dQ.array(),V.map(lQ))}})),J.push(V0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:B0(Rj),execute:async(Y)=>{let j=b(Rj,Y),V=$.runtime.sendMessage($.requesterId,j.toAgentId,j.subject,j.body,j.taskId??void 0);return b(nz,{id:V.id,toAgentId:V.toAgentId})}})),J.push(V0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:B0(Fj),execute:async(Y)=>{let j=b(Fj,Y),V=$.runtime.broadcast($.requesterId,j.subject,j.body,{taskId:j.taskId??void 0});return b(vz,{delivered:V.length})}})),J.push(V0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:B0(Oj),execute:async(Y)=>{let j=b(Oj,Y);return b(pz.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:j.unreadOnly,markRead:!0}))}})),J.push(V0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:B0(zj),execute:async(Y)=>{let j=b(zj,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 b(rz,{id:V.id})}})),J.push(V0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:B0(fj),execute:async(Y)=>{if(b(fj,Y),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),b(uz,{status:"cleaned"})}})),J.push(V0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:B0(Uj),execute:async(Y)=>{let j=b(Uj,Y),V=$.runtime.createOutcome({title:j.title,requiredSections:j.requiredSections,createdBy:$.requesterId});return b(dz,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),J.push(V0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:B0(Gj),execute:async(Y)=>{let j=b(Gj,Y),V=$.runtime.attachOutcomeFragment({outcomeId:j.outcomeId,section:j.section,sourceAgentId:$.requesterId,sourceRunId:j.sourceRunId||void 0,content:j.content});return b(Tj,{fragmentId:V.id,status:V.status})}})),J.push(V0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:B0(qj),execute:async(Y)=>{let j=b(qj,Y),V=$.runtime.reviewOutcomeFragment({fragmentId:j.fragmentId,reviewedBy:$.requesterId,approved:j.approved});return b(Tj,{fragmentId:V.id,status:V.status})}})),J.push(V0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:B0(Dj),execute:async(Y)=>{let j=b(Dj,Y),V=$.runtime.finalizeOutcome(j.outcomeId);return b(lz,{outcomeId:V.id,status:V.status})}})),J.push(V0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:B0(Lj),execute:async(Y)=>{return b(Lj,Y),b(iz.array(),$.runtime.listOutcomes())}})),J}function yj($){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}))}}var tz=[{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:N2({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...Z5]}],ez={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function $T($){return $==="plan"||$==="yolo"?$:"act"}function kj($){let Z=$T($.mode),Q=e0[u1({mode:Z})],W=_8($.providerId??"",$.modelId??"",Z,L8);return{mode:Z,flags:{...Q,...W,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function hj($,Z){if(Z.disabledToolIds?.has($))return!1;let{flags:Q}=kj(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=ez[$];return W?Q[W]===!0:!1}function ZT($,Z){if($.id==="editor"){let{flags:Q}=kj(Z),W=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:hj($.id,Z),headlessToolNames:[W?"apply_patch":"editor"]}}return{...$,defaultEnabled:hj($.id,Z)}}function N8($={}){return tz.map((Z)=>ZT(Z,$))}function Ij($={}){return N8($).filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id)}function xj($){if(!$.enabled)return new Set;let Z=N8($.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 pQ($,Z={}){return N8(Z).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function gj($,Z={}){return pQ($,Z)}function C8($={}){let{executorOptions:Z={},executors:Q,...W}=$,J={...n6(Z),...Q??{}};return T2({...W,executors:J})}function W5($){return $.trim().replace(/^\/+/,"").toLowerCase()}function QT($){if(!$||$.length===0)return;let Z=$.map(W5).filter((Q)=>Q.length>0);return Z.length>0?new Set(Z):void 0}function WT($,Z,Q){if(!Q)return!0;let W=W5($),J=W5(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 w8($,Z){let Q=QT(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)=>WT(J.id,J.name,Q))}function JT($,Z){return w8($,Z).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,W)=>Q.localeCompare(W))}function XT($,Z,Q){let W=W5(Z);if(!W)return{error:"Missing skill name."};let J=w8($,Q),X=J.find((H)=>H.id===W);if(X){let{skill:H}=X;if(H.disabled===!0)return{error:`Skill "${H.name}" is configured but disabled.`};return{id:X.id,skill:H}}let Y=W.includes(":")?W.split(":").at(-1)??W:W,j=J.filter(({id:H})=>{if(H===Y)return!0;return H.endsWith(`:${Y}`)}),V=j.filter(({skill:H})=>H.disabled!==!0);if(V.length===1){let{id:H,skill:G}=V[0];return{id:H,skill:G}}if(V.length>1)return{error:`Skill "${Z}" is ambiguous. Use one of: ${V.map(({id:H})=>H).join(", ")}`};if(j.length===1){let{skill:H}=j[0];return{error:`Skill "${H.name}" is configured but disabled.`}}if(j.length>1)return{error:`Skill "${Z}" is ambiguous, and all matches are disabled: ${j.map(({id:H})=>H).join(", ")}`};let B=JT($,Q);return{error:B.length>0?`Skill "${Z}" not found. Available skills: ${B.join(", ")}`:"No skills are currently available."}}function rQ($,Z=Promise.resolve(),Q){let W=new Set,J=async(X,Y)=>{await Z;let j=XT($,X,Q);if("error"in j)return j.error;let{id:V,skill:B}=j;if(W.has(V))return`Skill "${B.name}" is already running.`;W.add(V);try{let H=Y?.trim(),G=H?`
165
+ ${J}`;return Q||J}function tT($,Z){let Q=Z?.["*"]??{},J=Z?.[$]??{};return{...Q,...J}.enabled!==!1}function eT($,Z){return $.filter((Q)=>tT(Q.name,Z))}function $O($,Z){return m1(eT($,Z))}function ZO($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return{};return{beforeRun:async(Q)=>{for(let J of Z){let W=await J.beforeRun?.(Q);if(W?.stop)return W}return},afterRun:async(Q)=>{for(let J of Z)await J.afterRun?.(Q)},beforeModel:async(Q)=>{let J=Q.request,W;for(let X of Z){let Y=await X.beforeModel?.({...Q,request:J});if(!Y)continue;if(Y.stop)return Y;W={...W,...Y,options:Lj(W?.options,Y.options)},J={...J,...Y.messages?{messages:Y.messages}:{},...Y.tools?{tools:Y.tools}:{},...Y.options?{options:Lj(J.options,Y.options)}:{}}}return W},afterModel:async(Q)=>{for(let J of Z){let W=await J.afterModel?.(Q);if(W?.stop)return W}return},beforeTool:async(Q)=>{let J=Q.input,W;for(let X of Z){let Y=await X.beforeTool?.({...Q,input:J});if(!Y)continue;if(Y.stop||Y.skip)return Y;if(W={...W,...Y},Object.hasOwn(Y,"input"))J=Y.input}return W},afterTool:async(Q)=>{let J=Q.result,W;for(let X of Z){let Y=await X.afterTool?.({...Q,result:J});if(!Y)continue;if(Y.stop)return Y;if(W={...W,...Y},Y.result)J=Y.result}return W},onEvent:async(Q)=>{for(let J of Z)await J.onEvent?.(Q)}}}class n1{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 rQ;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??iT,this.conversation=new uQ($.initialMessages),this.messageBuilder=new mQ(Fj()),this.contributionRegistry=nT({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 pQ({maxConsecutiveMistakes:Q,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(X)=>this.emitLegacyEvent(X),log:(X,Y,j)=>QO(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 J=$.execution?.loopDetection;this.loopDetectionDisabled=J===!1;let W=J===!1||J===void 0?void 0:J;this.loopTracker=new lQ(W)}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((J)=>J.name)),Q=[...this.config.tools];for(let J of $)if(!Z.has(J.name))Q.push(J),Z.add(J.name);this.config={...this.config,tools:Q}}updateConnection($){let Z=P2($),Q={...this.config};if(Z.providerId!==void 0)Q.providerId=Z.providerId;if(Z.modelId!==void 0)Q.modelId=Z.modelId;if(Z.apiKey!==void 0)Q.apiKey=Z.apiKey;if(Z.baseUrl!==void 0)Q.baseUrl=Z.baseUrl;if(Z.headers!==void 0)Q.headers=Z.headers;if(Z.providerConfig!==void 0)Q.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"reasoningEffort"))Q.reasoningEffort=Z.reasoningEffort??void 0;if(Object.hasOwn(Z,"thinkingBudgetTokens"))Q.thinkingBudgetTokens=Z.thinkingBudgetTokens??void 0;if(Object.hasOwn(Z,"thinking")){if(Q.thinking=Z.thinking??void 0,Z.thinking===!1||Z.thinking===null)Q.reasoningEffort=void 0,Q.thinkingBudgetTokens=void 0}this.config=Q}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 oT(Z);if(Q)$.push(Q)}return sT(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 f=await WO(Q,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:f})}let J=await this.composeSystemPrompt(),W=Wj(this.config,this.logger,this.telemetry),X=new Map;for(let f of this.contributionRegistry.getRegisteredTools())X.set(f.name,f);let Y=$O([...X.values()],this.config.toolPolicies),j=new Map;for(let f of Y)j.set(f.name,f);for(let f of this.config.tools)j.set(f.name,f);let V=this.conversation.getConversationId(),B=_j(this.config),H=Array.from(j.values()),G=Q5(this.conversation.getMessages()),K=fj({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:V,parentAgentId:this.parentAgentId,model:W,logger:this.logger,telemetry:this.telemetry,tools:H,toolContextMetadata:{modelSupportsImages:B?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[HY]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(B,H),initialMessages:G,systemPrompt:J}),F=this.createAgentRuntimeImpl(K);if(this.activeRuntime=F,this.abortRequested)F.abort(this.abortReason);let A=F.subscribe((f)=>{this.handleRuntimeEvent(f)}),D,U;try{if($.isContinue)D=await F.continue(void 0);else D=await F.run("")}catch(f){U=f instanceof Error?f:Error(String(f))}finally{A();try{await this.activeTrackerWork}catch(f){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:f})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(D&&D.messages.length>0){let f=w2(D.messages);this.conversation.replaceMessages(f)}let L=new Date;try{return this.buildLegacyResult({runResult:D,thrownError:U,startedAt:Z,endedAt:L})}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 $=ZO([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 J=Q?.messages??Z.request.messages,W=await this.prepareMessagesForModelRequest(J);return{...Q,messages:W}}}}createRuntimePrepareTurn($,Z){let Q=this.config.prepareTurn;if(!Q)return;return async(J)=>{let W=w2(J.messages),X=await this.prepareProviderMessagesForApi(W),Y=await Q({agentId:J.agentId,conversationId:J.conversationId??this.conversation.getConversationId(),parentAgentId:J.parentAgentId??null,iteration:J.iteration,messages:W,apiMessages:X,abortSignal:J.signal??new AbortController().signal,systemPrompt:J.systemPrompt??"",tools:Z,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:J.emitStatusNotice});if(!Y)return;return{...Y.messages?{messages:Q5(Y.messages)}:{},...Y.systemPrompt!==void 0?{systemPrompt:Y.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let Z=await this.prepareProviderMessagesForApi(J5($));return Q5(Z)}async prepareProviderMessagesForApi($){let Z=$,Q=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let J of Q)Z=await J.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,J=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let W=$.message.content.find((V)=>V.type==="tool-result"),X=W?.type==="tool-result"&&W.isError===!0,Y=X?aT(W?.type==="tool-result"?W.output:void 0):void 0,j={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:J,output:W?.type==="tool-result"?W.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 J=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${Z} tool call(s) failed${J?`: ${J}`:""}`})}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(w2($));return}if(Z.length===0)return;let Q=new Set(this.conversation.getMessages().map((W)=>W.id).filter((W)=>typeof W==="string")),J=w2(Z).filter((W)=>!W.id||!Q.has(W.id));if(J.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...J])}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 J=this.loopTracker.inspect({name:$,input:Z});if(J.kind==="ok")return;if(J.kind==="soft"){if(J.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:J.message}]});return}this.enqueueMistakeRecord({iteration:Q,reason:"tool_execution_failed",forceAtLimit:!0,details:J.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:J,endedAt:W}=$,X=W.getTime()-J.getTime(),Y=Q?"error":JO(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,B=Z?w2(Z.messages):this.conversation.getMessages(),H=_j(this.config);if(Q)throw Q;return{text:j,usage:V,messages:B,toolCalls:this.currentRunToolCalls,iterations:Z?.iterations??0,finishReason:Y,model:{id:this.config.modelId,provider:this.config.providerId,info:H},startedAt:J,endedAt:W,durationMs:X}}}function QO($,Z,Q,J){if(!$)return;if(Z==="debug"){$.debug(Q,J);return}if(Z==="error"&&$.error){$.error(Q,J);return}let W=Z==="warn"?"warn":Z==="error"?"error":"info";$.log(Q,{...J,severity:W})}function JO($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function WO($,Z,Q,J){let{buildInitialUserContent:W}=await Promise.resolve().then(() => Dj);return W($,Z,Q,J)}function _j($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let Z=IQ($);if(Z?.[$.modelId])return Z[$.modelId];return}import{buildClineSystemPrompt as Tj}from"@cline/shared";function Oj($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return Tj({ide:Z.clineIdeName?.trim()||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,rules:`# Team Teammate Role
166
+ ${Q}`,platform:Z.clinePlatform,metadata:Z.workspaceMetadata})}function qj($,Z){let Q=$.trim();if(Z.providerId.toLowerCase()!=="cline")return Q;return Tj({ide:Z.clineIdeName||"Terminal",workspaceRoot:Z.cwd?.trim()||"/",providerId:Z.providerId,overridePrompt:Q,metadata:Z.workspaceMetadata,platform:Z.clinePlatform})}function S2($){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,reasoningEffort:Z.reasoningEffort,thinkingBudgetTokens:Z.thinkingBudgetTokens,maxTokensPerTurn:Z.maxTokensPerTurn}),updateConnectionDefaults:(Q)=>{Z={...Z,...Q}}}}function P8($){let Z=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?Oj($.prompt,Z):qj($.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 b2($){let Z=P8($),Q=new n1(Z);if(Z.onEvent)Q.subscribeEvents(Z.onEvent);return Q}var jO=iQ.object({systemPrompt:iQ.string().describe("System prompt defining the sub-agent's behavior"),task:iQ.string().describe("Task for the sub-agent to complete")});function y2($){return XO({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:YO(jO),execute:async(Z,Q)=>{let J=$.createSubAgentTools?await $.createSubAgentTools(Z,Q):$.subAgentTools??[],W=b2({kind:"subagent",prompt:Z.systemPrompt,configProvider:$.configProvider,tools:J,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),X=W.getAgentId(),Y=W.getConversationId(),j=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z})}catch{}try{let V=await W.run(Z.task),B={text:V.text,iterations:V.iterations,finishReason:V.finishReason,usage:{inputTokens:V.usage.inputTokens,outputTokens:V.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:X,conversationId:Y,parentAgentId:j,input:Z,result:B,agentResult:V})}catch{}return B}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 B0,TEAM_AWAIT_TIMEOUT_MS as VO,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as BO,TEAM_RUN_TEXT_PREVIEW_LIMIT as HO,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as GO,TeamAttachOutcomeFragmentInputSchema as zj,TeamAwaitRunsInputSchema as Mj,TeamBroadcastInputSchema as Rj,TeamBroadcastToolResultSchema as KO,TeamCancelRunInputSchema as Nj,TeamCancelRunToolResultSchema as FO,TeamCleanupInputSchema as Ej,TeamCleanupToolResultSchema as AO,TeamCreateOutcomeInputSchema as wj,TeamCreateOutcomeToolResultSchema as fO,TeamFinalizeOutcomeInputSchema as Cj,TeamFinalizeOutcomeToolResultSchema as UO,TeamListOutcomesInputSchema as Pj,TeamListRunsInputSchema as Sj,TeamMailboxMessageToolResultSchema as DO,TeamMissionLogInputSchema as bj,TeamMissionLogToolResultSchema as LO,TeamOutcomeFragmentToolResultSchema as yj,TeamOutcomeToolResultSchema as _O,TeamReadMailboxInputSchema as hj,TeamReviewOutcomeFragmentInputSchema as kj,TeamRunTaskInputSchema as Ij,TeamRunTaskToolResultSchema as nQ,TeamRunToolSummarySchema as aQ,TeamSendMessageInputSchema as xj,TeamSendMessageToolResultSchema as TO,TeamShutdownTeammateInputSchema as gj,TeamSimpleAgentStatusToolResultSchema as mj,TeamSpawnTeammateInputSchema as vj,TeamStatusInputSchema as cj,TeamStatusToolResultSchema as OO,TeamTaskInputSchema as uj,TeamTaskToolResultSchema as S8,validateWithZod as y,zodToJsonSchema as H0}from"@cline/shared";function dj($,Z){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=Z)return Q;return`${Q.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function h$($,Z){if($===void 0)throw Error(`Missing required field: ${Z}`);return $}function qO($){let Z=$.result;if(!Z)return;return{textPreview:dj(Z.text,HO),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 j5($){return $?.toISOString()}function oQ($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:dj($.message,BO),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:j5($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:j5($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:j5($.heartbeatAt),lastProgressAt:j5($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:qO($)}}function zO($){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 V5=["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 lj($){let Z=[];if($.createBaseTools)Z.push(...$.createBaseTools());Z.push(...b8({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:P8({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:Z,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function B5($){let Z=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,J=b8({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),W=[];for(let X of $.restoredTeammates??[]){if($.runtime.isTeammateActive(X.agentId))continue;lj({runtime:$.runtime,requesterId:Z,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:X}),W.push(X.agentId)}return{tools:J,restoredFromPersistence:Q,restoredTeammates:W}}function b8($){let Z=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,J=$.includeManagementTools??!0,W=[];if(Q)W.push(B0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:H0(vj),execute:async(Y)=>{let j=y(vj,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(lj({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:V}),!J)$.onLeadToolsUnlocked?.(b8({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return y(mj,{agentId:j.agentId,status:"spawned"})}}));if(!J)return W;W.push(B0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:H0(gj),execute:async(Y)=>{let j=y(gj,Y);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(j.agentId,j.reason),y(mj,{agentId:j.agentId,status:"stopped"})}})),W.push(B0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:H0(cj),execute:async(Y)=>{return y(cj,Y),y(OO,$.runtime.getSnapshot())}})),W.push(B0({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:H0(uj),execute:async(Y)=>{let j=y(uj,Y);switch(j.action){case"create":{let V=new Set(GO.create??[]),B=Object.entries(Y).filter(([G,K])=>V.has(G)&&K!=null).map(([G])=>G),H=$.runtime.createTask({title:h$(j.title,"title"),description:h$(j.description,"description"),dependsOn:j.dependsOn,assignee:j.assignee,createdBy:$.requesterId});return y(S8,{action:"create",taskId:H.id,status:H.status,...B.length>0?{ignoredFields:B,note:`Ignored fields for action=create: ${B.join(", ")}`}:{}})}case"list":return y(S8,{action:"list",tasks:$.runtime.listTaskItems({status:j.status,assignee:j.assignee})});case"claim":{let V=$.runtime.claimTask(h$(j.taskId,"taskId"),$.requesterId);return y(S8,{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(h$(j.taskId,"taskId"),$.requesterId,h$(j.summary,"summary"));return y(S8,{action:"complete",taskId:V.id,status:V.status})}case"block":{let V=$.runtime.blockTask(h$(j.taskId,"taskId"),$.requesterId,h$(j.reason,"reason"));return y(S8,{action:"block",taskId:V.id,status:V.status})}}}}));let X=new Map;return W.push(B0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:H0(Ij),execute:async(Y)=>{let j=y(Ij,Y);if(j.runMode==="async"){let H=$.runtime.startTeammateRun(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0});return y(nQ,{agentId:j.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${j.agentId} and queued as ${H.id}.`,runId:H.id})}let V=X.get(j.agentId);if(V){let H=await V;return y(nQ,{...H,status:"joined",deduped:!0,message:`Task for ${j.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let B=$.runtime.routeToTeammate(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:$.requesterId,continueConversation:j.continueConversation||void 0}).then((H)=>y(nQ,{agentId:j.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${j.agentId} and completed in sync mode.`,text:H.text,iterations:H.iterations})).finally(()=>{X.delete(j.agentId)});return X.set(j.agentId,B),await B}})),W.push(B0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:H0(Nj),execute:async(Y)=>{let j=y(Nj,Y),V=$.runtime.cancelRun(j.runId,j.reason);return y(FO,{runId:V.id,status:V.status})}})),W.push(B0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:H0(Sj),execute:async(Y)=>y(aQ.array(),$.runtime.listRuns(y(Sj,Y)).map(oQ))})),W.push(B0({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:H0(Mj),timeoutMs:VO,execute:async(Y)=>{let j=y(Mj,Y);if(j.runId){let H=await $.runtime.awaitRun(j.runId);return zO(H),y(aQ,oQ(H))}let V=await $.runtime.awaitAllRuns(),B=V.filter((H)=>["failed","cancelled","interrupted"].includes(H.status));if(B.length>0){let H=B.map((G)=>`${G.id}:${G.status}${G.error?`(${G.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${H}`)}return y(aQ.array(),V.map(oQ))}})),W.push(B0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:H0(xj),execute:async(Y)=>{let j=y(xj,Y),V=$.runtime.sendMessage($.requesterId,j.toAgentId,j.subject,j.body,j.taskId??void 0);return y(TO,{id:V.id,toAgentId:V.toAgentId})}})),W.push(B0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:H0(Rj),execute:async(Y)=>{let j=y(Rj,Y),V=$.runtime.broadcast($.requesterId,j.subject,j.body,{taskId:j.taskId??void 0});return y(KO,{delivered:V.length})}})),W.push(B0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:H0(hj),execute:async(Y)=>{let j=y(hj,Y);return y(DO.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:j.unreadOnly,markRead:!0}))}})),W.push(B0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:H0(bj),execute:async(Y)=>{let j=y(bj,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 y(LO,{id:V.id})}})),W.push(B0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:H0(Ej),execute:async(Y)=>{if(y(Ej,Y),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),y(AO,{status:"cleaned"})}})),W.push(B0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:H0(wj),execute:async(Y)=>{let j=y(wj,Y),V=$.runtime.createOutcome({title:j.title,requiredSections:j.requiredSections,createdBy:$.requesterId});return y(fO,{outcomeId:V.id,status:V.status,requiredSections:V.requiredSections})}})),W.push(B0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:H0(zj),execute:async(Y)=>{let j=y(zj,Y),V=$.runtime.attachOutcomeFragment({outcomeId:j.outcomeId,section:j.section,sourceAgentId:$.requesterId,sourceRunId:j.sourceRunId||void 0,content:j.content});return y(yj,{fragmentId:V.id,status:V.status})}})),W.push(B0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:H0(kj),execute:async(Y)=>{let j=y(kj,Y),V=$.runtime.reviewOutcomeFragment({fragmentId:j.fragmentId,reviewedBy:$.requesterId,approved:j.approved});return y(yj,{fragmentId:V.id,status:V.status})}})),W.push(B0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:H0(Cj),execute:async(Y)=>{let j=y(Cj,Y),V=$.runtime.finalizeOutcome(j.outcomeId);return y(UO,{outcomeId:V.id,status:V.status})}})),W.push(B0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:H0(Pj),execute:async(Y)=>{return y(Pj,Y),y(_O.array(),$.runtime.listOutcomes())}})),W}function pj($){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}))}}var MO=[{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:y2({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...V5]}],RO={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function NO($){return $==="plan"||$==="yolo"?$:"act"}function ij($){let Z=NO($.mode),Q=J1[r1({mode:Z})],J=R8($.providerId??"",$.modelId??"",Z,M8);return{mode:Z,flags:{...Q,...J,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function rj($,Z){if(Z.disabledToolIds?.has($))return!1;let{flags:Q}=ij(Z);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let J=RO[$];return J?Q[J]===!0:!1}function EO($,Z){if($.id==="editor"){let{flags:Q}=ij(Z),J=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:rj($.id,Z),headlessToolNames:[J?"apply_patch":"editor"]}}return{...$,defaultEnabled:rj($.id,Z)}}function y8($={}){return MO.map((Z)=>EO(Z,$))}function nj($={}){return y8($).filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id)}function aj($){if(!$.enabled)return new Set;let Z=y8($.availabilityContext),Q=new Set(Z.map((J)=>J.id));if(!$.allowlist||$.allowlist.length===0)return new Set(Z.filter((J)=>J.defaultEnabled).map((J)=>J.id));for(let J of $.allowlist)if(!Q.has(J))throw Error(`Unknown tool "${J}". Available tools: ${Z.map((W)=>W.id).join(", ")}`);return new Set($.allowlist)}function sQ($,Z={}){return y8(Z).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function oj($,Z={}){return sQ($,Z)}function h8($={}){let{executorOptions:Z={},executors:Q,...J}=$,W={...Z5(Z),...Q??{}};return N2({...J,executors:W})}function H5($){return $.trim().replace(/^\/+/,"").toLowerCase()}function wO($){if(!$||$.length===0)return;let Z=$.map(H5).filter((Q)=>Q.length>0);return Z.length>0?new Set(Z):void 0}function CO($,Z,Q){if(!Q)return!0;let J=H5($),W=H5(Z),X=J.includes(":")?J.split(":").at(-1)??J:J,Y=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(J)||Q.has(W)||Q.has(X)||Q.has(Y)}function k8($,Z){let Q=wO(Z);return[...$.getSnapshot("skill").entries()].map(([W,X])=>{let Y=X.item;return{id:W,name:Y.name.trim(),description:Y.description?.trim(),disabled:Y.disabled===!0,skill:Y}}).filter((W)=>CO(W.id,W.name,Q))}function PO($,Z){return k8($,Z).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,J)=>Q.localeCompare(J))}function SO($,Z,Q){let J=H5(Z);if(!J)return{error:"Missing skill name."};let W=k8($,Q),X=W.find((H)=>H.id===J);if(X){let{skill:H}=X;if(H.disabled===!0)return{error:`Skill "${H.name}" is configured but disabled.`};return{id:X.id,skill:H}}let Y=J.includes(":")?J.split(":").at(-1)??J:J,j=W.filter(({id:H})=>{if(H===Y)return!0;return H.endsWith(`:${Y}`)}),V=j.filter(({skill:H})=>H.disabled!==!0);if(V.length===1){let{id:H,skill:G}=V[0];return{id:H,skill:G}}if(V.length>1)return{error:`Skill "${Z}" is ambiguous. Use one of: ${V.map(({id:H})=>H).join(", ")}`};if(j.length===1){let{skill:H}=j[0];return{error:`Skill "${H.name}" is configured but disabled.`}}if(j.length>1)return{error:`Skill "${Z}" is ambiguous, and all matches are disabled: ${j.map(({id:H})=>H).join(", ")}`};let B=PO($,Q);return{error:B.length>0?`Skill "${Z}" not found. Available skills: ${B.join(", ")}`:"No skills are currently available."}}function tQ($,Z=Promise.resolve(),Q){let J=new Set,W=async(X,Y)=>{await Z;let j=SO($,X,Q);if("error"in j)return j.error;let{id:V,skill:B}=j;if(J.has(V))return`Skill "${B.name}" is already running.`;J.add(V);try{let H=Y?.trim(),G=H?`
167
167
  <command-args>${H}</command-args>`:"",K=B.description?.trim()?`Description: ${B.description.trim()}
168
168
 
169
169
  `:"";return`<command-name>${B.name}</command-name>${G}
170
170
  <command-instructions>
171
171
  ${K}${B.instructions}
172
- </command-instructions>`}finally{W.delete(V)}};return Object.defineProperty(J,"configuredSkills",{get:()=>w8($,Q).map(({skill:X,...Y})=>Y),enumerable:!0,configurable:!1}),J}function mj($){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:()=>eX($.watcher)});if($.registerSkillsTool)W.registerTool(z2(rQ($.watcher,Z,$.allowedSkillNames)));for(let J of F8($.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}
172
+ </command-instructions>`}finally{J.delete(V)}};return Object.defineProperty(W,"configuredSkills",{get:()=>k8($,Q).map(({skill:X,...Y})=>Y),enumerable:!0,configurable:!1}),W}function sj($){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((J)=>Boolean(J))},async setup(J){if(await Z,$.includeRules)J.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>BY($.watcher)});if($.registerSkillsTool)J.registerTool(R2(tQ($.watcher,Z,$.allowedSkillNames)));for(let W of _8($.watcher).filter((X)=>X.kind==="skill"&&$.includeSkills||X.kind==="workflow"&&$.includeWorkflows))J.registerCommand({name:W.name,description:W.description,handler:(X)=>{let Y=X.trim();return Y?`${W.instructions}
173
173
 
174
- ${Y}`:J.instructions}})}}}class vj{watcher;ready;stopped=!1;constructor($){this.watcher=nX($)}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 F8(this.watcher)}resolveRuntimeSlashCommand($){return oX($,this.watcher)}hasConfiguredSkills($){return w8(this.watcher,$).some((Z)=>!Z.disabled)}createSkillsExecutor($){return rQ(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return mj({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function C2($){return new vj($)}import{readFile as YT,writeFile as jT}from"node:fs/promises";import uj from"yaml";function VT($){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=uj.parse(W);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:J,hadFrontmatter:!0}}function cj($,Z){return`---
175
- ${uj.stringify($).trimEnd()}
174
+ ${Y}`:W.instructions}})}}}class tj{watcher;ready;stopped=!1;constructor($){this.watcher=WY($)}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 _8(this.watcher)}resolveRuntimeSlashCommand($){return jY($,this.watcher)}hasConfiguredSkills($){return k8(this.watcher,$).some((Z)=>!Z.disabled)}createSkillsExecutor($){return tQ(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return sj({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function h2($){return new tj($)}import{readFile as bO,writeFile as yO}from"node:fs/promises";import $V from"yaml";function hO($){let Z=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(Z);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,J,W]=Q,X=$V.parse(J);return{data:X&&typeof X==="object"&&!Array.isArray(X)?X:{},body:W,hadFrontmatter:!0}}function ej($,Z){return`---
175
+ ${$V.stringify($).trimEnd()}
176
176
  ---
177
- ${Z}`}function BT($,Z){let{data:Q,body:W,hadFrontmatter:J}=VT($);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 cj(Q,W)}return Q.disabled=!0,cj(Q,W)}async function dj({filePath:$,enabled:Z}){let Q=await YT($,"utf8"),W=BT(Q,Z);return await jT($,W),{filePath:$,enabled:Z,disabled:!Z}}import{spawn as nT}from"node:child_process";import{StringDecoder as FV}from"node:string_decoder";import{UnauthorizedError as BV}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as aT}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as gT}from"node:crypto";import{UnauthorizedError as mT}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as vT}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as cT}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as uT}from"@modelcontextprotocol/sdk/client/streamableHttp.js";j5();var dT="/mcp/oauth/callback",lT=[1456,1457,1458],pT=300000;function rT($){if($ instanceof Error){let Z=$.message.trim();if(Z.length>0)return Z}return String($)}function iT($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function B5($){let Z={};try{Z=y8($.serverName,{filePath:$.settingsPath})??{}}catch{Z={}}let Q,W,J=async(Y)=>{let j=S2(Y(Z))??{};try{Z=h8($.serverName,()=>j,{filePath:$.settingsPath})}catch{Z=j}};return{provider:{get redirectUrl(){return Z.redirectUrl??$.redirectUrl},get clientMetadata(){return iT(Z.redirectUrl??$.redirectUrl)},state:()=>{return W=gT(),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 V5($){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 cT(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch});return new uT(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch})}function jV($){return new vT({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function VV($){let Z=$.serverName.trim();if(!Z)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Q}=await Promise.resolve().then(() => (j5(),YV)),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 B1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:lT,callbackPath:$.callbackPath??dT,timeoutMs:$.timeoutMs??pT,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!J.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let X=B5({settingsPath:$.filePath,serverName:Z,redirectUrl:J.callbackUrl,onAuthorizationUrl:async(V)=>{await $.openUrl?.(V)}});await X.resetInteractiveState();let Y=jV($),j;try{let V=V5({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(B){if(!(B instanceof mT))throw B;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=jV($);let F=V5({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 B=rT(V);throw await X.markError(B),Error(B)}finally{await Y.close().catch(()=>{return}),await j?.close().catch(()=>{return}),J.close()}}var sT="2024-11-05",oT=5000,tT=1500,HV="http://127.0.0.1:1456/mcp/oauth/callback";function H5($){return $ instanceof Error?$.message:String($)}function GV($){let Z=Buffer.from(JSON.stringify($),"utf8"),Q=Buffer.from(`Content-Length: ${Z.byteLength}\r
177
+ ${Z}`}function kO($,Z){let{data:Q,body:J,hadFrontmatter:W}=hO($);if(!W&&Z)return $;if(Z){if(delete Q.disabled,Q.enabled===!1)delete Q.enabled;if(Object.keys(Q).length===0)return J;return ej(Q,J)}return Q.disabled=!0,ej(Q,J)}async function ZV({filePath:$,enabled:Z}){let Q=await bO($,"utf8"),J=kO(Q,Z);return await yO($,J),{filePath:$,enabled:Z,disabled:!Z}}import{spawn as Tq}from"node:child_process";import{StringDecoder as RV}from"node:string_decoder";import{UnauthorizedError as OV}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as Oq}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as Hq}from"node:crypto";import{UnauthorizedError as Gq}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as Kq}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as Fq}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as Aq}from"@modelcontextprotocol/sdk/client/streamableHttp.js";A5();var fq="/mcp/oauth/callback",Uq=[1456,1457,1458],Dq=300000;function Lq($){if($ instanceof Error){let Z=$.message.trim();if(Z.length>0)return Z}return String($)}function _q($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function U5($){let Z={};try{Z=m8($.serverName,{filePath:$.settingsPath})??{}}catch{Z={}}let Q,J,W=async(Y)=>{let j=x2(Y(Z))??{};try{Z=v8($.serverName,()=>j,{filePath:$.settingsPath})}catch{Z=j}};return{provider:{get redirectUrl(){return Z.redirectUrl??$.redirectUrl},get clientMetadata(){return _q(Z.redirectUrl??$.redirectUrl)},state:()=>{return J=Hq(),J},clientInformation:()=>Z.clientInformation,saveClientInformation:async(Y)=>{await W((j)=>({...j,clientInformation:Y,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>Z.tokens,saveTokens:async(Y)=>{let j=Date.now();await W((V)=>({...V,tokens:Y,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:j}))},redirectToAuthorization:async(Y)=>{Q=Y.toString(),await $.onAuthorizationUrl?.(Q)},saveCodeVerifier:async(Y)=>{await W((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 W((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 W((j)=>({...j,discoveryState:Y}))},discoveryState:()=>Z.discoveryState},getLastAuthorizationUrl:()=>Q,getLastOAuthState:()=>J,resetInteractiveState:async()=>{await W((Y)=>({...Y,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(Y)=>{await W((j)=>({...j,lastError:Y}))},clearError:async()=>{await W((Y)=>({...Y,lastError:void 0}))}}}function f5($){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 Fq(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch});return new Aq(new URL(Z.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch})}function _V($){return new Kq({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function TV($){let Z=$.serverName.trim();if(!Z)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Q}=await Promise.resolve().then(() => (A5(),LV)),J=Q({filePath:$.filePath}).find((V)=>V.name===Z);if(!J)throw Error(`MCP server "${Z}" is not configured.`);if(J.disabled)throw Error(`MCP server "${Z}" is disabled. Enable it before running OAuth.`);if(J.transport.type==="stdio")throw Error(`MCP server "${Z}" uses stdio transport and does not support OAuth browser flow.`);let W=await G1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:Uq,callbackPath:$.callbackPath??fq,timeoutMs:$.timeoutMs??Dq,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!W.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let X=U5({settingsPath:$.filePath,serverName:Z,redirectUrl:W.callbackUrl,onAuthorizationUrl:async(V)=>{await $.openUrl?.(V)}});await X.resetInteractiveState();let Y=_V($),j;try{let V=f5({registration:J,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(B){if(!(B instanceof Gq))throw B;if(!X.getLastAuthorizationUrl())throw Error(`MCP server "${Z}" did not provide an authorization URL.`);let G=await W.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=_V($);let F=f5({registration:J,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 B=Lq(V);throw await X.markError(B),Error(B)}finally{await Y.close().catch(()=>{return}),await j?.close().catch(()=>{return}),W.close()}}var qq="2024-11-05",zq=5000,Mq=1500,qV="http://127.0.0.1:1456/mcp/oauth/callback";function D5($){return $ instanceof Error?$.message:String($)}function zV($){let Z=Buffer.from(JSON.stringify($),"utf8"),Q=Buffer.from(`Content-Length: ${Z.byteLength}\r
178
178
  \r
179
- `,"utf8");return Buffer.concat([Q,Z])}function KV($){return Buffer.from(`${JSON.stringify($)}
180
- `,"utf8")}class Z7{buffer="";decoder=new FV("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`\r
179
+ `,"utf8");return Buffer.concat([Q,Z])}function MV($){return Buffer.from(`${JSON.stringify($)}
180
+ `,"utf8")}class j7{buffer="";decoder=new RV("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`\r
181
181
  \r
182
- `);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 Q7{buffer="";decoder=new FV("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`
183
- `);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 AV{registration;process;nextRequestId=1;pending=new Map;framedParser=new Z7;newlineParser=new Q7;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:sT,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},tT),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 Z7,this.newlineParser=new Q7,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},W=nT(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: ${H5(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}": ${H5($)}.${Q}`)),Z.kill()}async request($,Z,Q=oT){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 B=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:B})});try{W.stdin.write(this.protocolMode==="framed"?GV(X):KV(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"?GV(W):KV(W))}failAllPending($){for(let[Z,Q]of this.pending)clearTimeout(Q.timeout),this.pending.delete(Z),Q.reject($)}}class fV{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 $=B5({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??HV});this.authContext=$;try{let Z=new aT({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Q=V5({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await Z.connect(Q),await $.clearError(),this.client=Z}catch(Z){let Q=Z instanceof BV?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):H5(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??B5({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??HV}),Q=$ instanceof BV?this.formatUnauthorizedMessage(Z.getLastAuthorizationUrl()):H5($);throw await Z.markError(Q),Error(Q)}}function G5($={}){return(Z)=>Z.transport.type==="stdio"?new AV(Z):new fV(Z,$)}j5();function k0(){return Date.now()}function eT($){return $.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}class I8{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:k0()});return}let Q=JSON.stringify(Z.registration.transport)!==JSON.stringify($.transport);if(Z.registration={...$},Z.updatedAt=k0(),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=k0(),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&&k0()-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=eT(W);return Z.toolCache=J,Z.toolCacheUpdatedAt=k0(),Z.updatedAt=k0(),J})}async callTool($){return this.runExclusive($.serverName,async()=>{let Z=this.requireServer($.serverName),Q=await this.ensureConnectedClient(Z);return Z.updatedAt=k0(),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=k0();try{let Z=$.client??await this.clientFactory($.registration);await Z.connect(),$.client=Z,$.status="connected",$.lastError=void 0,$.updatedAt=k0()}catch(Z){throw $.status="disconnected",$.lastError=Z instanceof Error?Z.message:String(Z),$.updatedAt=k0(),Z}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=k0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=k0()}}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 b2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function UV($){return b2($)&&Object.values($).every((Z)=>typeof Z==="string")}function $O($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function ZO($){if(!b2($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function QO($){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 DV($){if(!b2($))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(!b2(W))return{name:Z,loadError:"invalid env"};for(let[V,B]of Object.entries(W))if(typeof B!=="string"&&!ZO(B))return{name:Z,loadError:`invalid env "${V}"`}}let J=$.transport;if(!b2(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=b2($.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 B=J.args;if(B!==void 0&&!$O(B))return{name:Z,loadError:"stdio MCP transport args must be strings"};let H=J.cwd;if(H!==void 0&&typeof H!=="string")return{name:Z,loadError:"stdio MCP transport cwd must be a string"};let G=J.env;if(G!==void 0&&!UV(G))return{name:Z,loadError:"stdio MCP transport env must be strings"};let K=QO({name:Z,transport:{type:"stdio",command:V,args:B,cwd:H,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:B,cwd:H,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&&!UV(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 W7($){let Z=new Map;return $.map(({server:Q,owner:W,ownerLabel:J})=>{let X=DV(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 WO}from"node:crypto";var LV=64,JO=/[^a-zA-Z0-9_-]+/g,_V=8,XO=1,YO="mcp_tool";function jO($){return WO("sha1").update($).digest("hex").slice(0,_V)}function VO($){return $.replace(JO,"_")}var K5=({serverName:$,toolName:Z})=>{let Q=`${$}__${Z}`,W=VO(Q);if(W===Q&&Q.length<=LV)return Q;let J=jO(Q),X=LV-XO-_V;return`${W.slice(0,X)||YO}_${J}`};function J7($){return{[($.nameTransform??K5)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function zV($){let Z={};for(let Q of $.toolNames)Object.assign(Z,J7({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return Z}import{createTool as BO}from"@cline/shared";function HO($,Z){let Q=Z.description?.trim();if(Q)return Q;return`Execute MCP tool "${Z.name}" from server "${$}".`}async function F5($){let Z=await $.provider.listTools($.serverName),Q=$.nameTransform??K5;return Z.map((W)=>{let J=Q({serverName:$.serverName,toolName:W.name});return BO({name:J,description:HO($.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})})})}r0();import{stat as GO}from"node:fs/promises";import{isAbsolute as KO,relative as FO,resolve as TV}from"node:path";r0();function AO($,Z){let Q=FO(TV($),TV(Z));return Q===""||!Q.startsWith("..")&&!KO(Q)}var fO=32,y2=new Map;function UO($,Z){if(!y2.has($)&&y2.size>=fO){let Q=y2.keys().next().value;if(Q)y2.delete(Q)}y2.set($,Z)}async function DO($){let Z=await Promise.all($.pluginPaths.map(async(Q)=>{try{let W=await GO(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 OV($,Z){return $.map((Q)=>({...Q,enabled:!Z.has(Q.name)}))}function LO($){return $.sort((Z,Q)=>{let W=Z.name.localeCompare(Q.name);if(W!==0)return W;return Z.path.localeCompare(Q.path)})}async function _O($,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 qV($){let Z=z$({workspacePath:$.workspacePath,cwd:$.cwd}),Q=K1($.disabledToolNames);if(Z.length===0)return{tools:[],failures:[],warnings:[]};let W=await DO({pluginPaths:Z,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),J=y2.get(W);if(J)return{tools:OV(J.tools,Q),failures:J.failures,warnings:J.warnings};let X=[],Y=[],j=[],V;try{V=await F2({pluginPaths:Z,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),Y=[...V.failures],j=[...V.warnings];for(let H of V.extensions??[]){let G=H.__clinePluginPath;if(!G)continue;let K=AO($.workspacePath,G)?"workspace-plugin":"global-plugin",F;try{F=await _O(H,{rootPath:$.workspacePath})}catch(A){Y.push({pluginPath:G,pluginName:H.name,phase:"setup",message:A instanceof Error?A.message:String(A),stack:A instanceof Error?A.stack:void 0});continue}for(let A of F.tools)X.push({name:A.name,pluginName:H.name,path:G,source:K,description:A.description?.trim()||void 0})}}catch(H){Y=Z.map((G)=>({pluginPath:G,phase:"load",message:H instanceof Error?H.message:String(H),stack:H instanceof Error?H.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let B=LO(X);return UO(W,{tools:B,failures:Y,warnings:j}),{tools:OV(B,Q),failures:Y,warnings:j}}async function X7($){return(await qV($)).tools}function m8($,Z){if(!Z)return"global";let Q=CV(Z,$);return!Q.startsWith("..")&&!NV(Q)?"workspace":"global"}function qO($,Z){return m8($,Z)==="workspace"?"workspace-plugin":"global-plugin"}function MO($,Z){let Q=CV(RV($),RV(Z));return Q===""||!Q.startsWith("..")&&!NV(Q)}function RO($){try{let Z=JSON.parse(zO($,"utf8"));return typeof Z.name==="string"&&Z.name.trim()?Z.name.trim():void 0}catch{return}}function EO($){let Z=MV($);while(!0){let Q=OO(Z,"package.json");if(g8(Q)){let J=RO(Q);if(J)return J;break}let W=MV(Z);if(W===Z)break;Z=W}return Y7($,TO($))}function NO($){let Z=[];for(let Q of z$({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let W of T$([Q]))Z.push({directory:W,pluginName:EO(Q),pluginPath:Q,source:$.workspaceRoot?qO(Q,$.workspaceRoot):"global-plugin"});return Z.sort((Q,W)=>W.directory.length-Q.directory.length)}function CO($,Z){return Z.find((Q)=>MO(Q.directory,$))}function x8($){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 wV($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function PV($,Z){return $.cwd?.trim()||Z||process.cwd()}async function EV($,Z){if($.userInstructionService)return await Z($.userInstructionService);let Q=wV($),W=PV($,Q),J=C2({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 wO($,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 h2{async list($={}){return await EV($,async(Z)=>{let Q=wV($),W=NO({workspaceRoot:Q,cwd:PV($,Q)}),J=[],X=[],Y=[],j=[],V=[];if(Z){for(let H of Z.listRecords("workflow")){let G=H.item;J.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"workflow",source:m8(H.filePath,Q),description:G.instructions,toggleable:!1})}for(let H of Z.listRecords("rule")){let G=H.item;X.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"rule",source:m8(H.filePath,Q),description:G.instructions,toggleable:!1})}for(let H of Z.listRecords("skill")){let G=H.item,K=CO(H.filePath,W);Y.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"skill",source:K?.source??m8(H.filePath,Q),description:G.description,pluginName:K?.pluginName,pluginPath:K?.pluginPath,toggleable:!0})}}if(Q)try{for(let H of await X7({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))j.push({id:`${H.pluginName}:${H.name}:${H.path}`,name:H.name,path:H.path,enabled:H.enabled,kind:"tool",source:H.source,description:H.description,toggleable:!0})}catch{}let B=Z0();if(w$({filePath:B}))try{for(let H of $1({filePath:B}))V.push({id:H.name,name:H.name,path:B,enabled:H.disabled!==!0,kind:"mcp",source:m8(B,Q),description:H.transport.type,toggleable:!0})}catch{}return{workflows:x8(J.filter((H)=>g8(H.path))),rules:x8(X.filter((H)=>g8(H.path))),skills:x8(Y.filter((H)=>g8(H.path))),tools:x8(j),mcp:x8(V.filter((H)=>g8(H.path)))}})}async toggle($){if($.type==="skills")return await EV($,async(Z)=>{let Q=wO(Z,$),W=Q?.filePath;if(!W)throw Error(`Unable to resolve skill setting '${$.id??$.name??Y7($.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??Y7($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await dj({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)cZ($.name);else _X($.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()||Z0(),W=$.enabled;if(W===void 0){let J=$1({filePath:Q}).find((X)=>X.name===Z);if(!J)throw Error(`Unknown MCP server: ${Z}`);W=J.disabled===!0}return b8({filePath:Q,name:Z,disabled:!W}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function v8(){return new h2}function SV($){return{async list(Z){let Q=$;if(Q.listSettings)return await Q.listSettings(Z);return await v8().list(Z)},async toggle(Z){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(Z);return await v8().toggle(Z)}}}function bV($){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)}}}function O0(...$){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 c8="session_not_found";class P$ extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function S$($){return $ instanceof P$||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function j7($){let{hooks:Z,logger:Q,telemetry:W,extensionContext:J,extraTools:X,extensions:Y,onTeamEvent:j,onConsecutiveMistakeLimitReached:V,checkpoint:B,compaction:H,...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(B?.createCheckpoint)K.checkpoint=B;if(H?.compact)K.compaction=H;let F=Object.keys(K).length>0?K:void 0;return{config:{...G,...B?{checkpoint:{enabled:B.enabled}}:{},...H?{compaction:{enabled:H.enabled,strategy:H.strategy,thresholdRatio:H.thresholdRatio,reserveTokens:H.reserveTokens,preserveRecentTokens:H.preserveRecentTokens,maxInputTokens:H.maxInputTokens,summarizer:H.summarizer}}:{}},...F?{localRuntime:F}:{}}}function yV($){let Z=$.config;return"providerId"in Z?{...$,config:{...Z,...PO($.localRuntime)},localRuntime:$.localRuntime}:$}function V7($,Z={}){let Q=j7($.config),W=O0(Z.defaultCapabilities,$.capabilities),J=SO(Q.localRuntime,$.localRuntime),X=Z.withExtensionContext?.(J?.extensionContext);if(X)J={...J??{},extensionContext:X};return{...$,...Q,...J?{localRuntime:J}:{},...W?{capabilities:W}:{}}}function PO($){if(!$)return{};let{modelCatalogDefaults:Z,userInstructionService:Q,configExtensions:W,onTeamRestored:J,...X}=$;return X}function SO(...$){let Z={};for(let Q of $)if(Q)Object.assign(Z,Q);return Object.keys(Z).length>0?Z:void 0}G0();function hV($){let Z=$.input.config.telemetry??$.telemetry;if(!Z)return;Z.capture({event:I.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??T0.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 u8($){return!!$&&typeof $==="object"&&!Array.isArray($)}function B7($){let Z=$?.trim();return Z?Z:void 0}function bO($,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 kV($,Z){return new Date(new Date($).getTime()+Math.max(0,Math.floor(Z))*1000).toISOString()}function IV($,Z){return new Date(new Date($).getTime()-Math.max(0,Math.floor(Z))*1000).toISOString()}function yO($,Z){if(!$)return Z;return new Date($).getTime()>=new Date(Z).getTime()?$:Z}function hO($,Z){let Q=$.eventId.trim(),W=$.eventType.trim(),J=$.source.trim(),X=B7($.subject),Y=B7($.dedupeKey)??`${W}:${J}:${X??Q}`;return{eventId:Q,eventType:W,source:J,subject:X,occurredAt:bO($.occurredAt,Z),workspaceRoot:B7($.workspaceRoot),payload:u8($.payload)?$.payload:void 0,attributes:u8($.attributes)?$.attributes:void 0,dedupeKey:Y}}function H7($,Z){if(!Z)return;let Q=Z.split("."),W=$;for(let J of Q){if(!u8(W))return;W=W[J]}return W}function kO($,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=H7(Q,Z);if(W!==void 0)return W;if($.attributes){let J=H7($.attributes,Z);if(J!==void 0)return J}if($.payload)return H7($.payload,Z);return}function A5($,Z){if(Array.isArray(Z))return Z.some((Q)=>A5($,Q));if(Array.isArray($))return $.some((Q)=>A5(Q,Z));if(u8(Z)){if(!u8($))return!1;return Object.entries(Z).every(([Q,W])=>A5($[Q],W))}return Object.is($,Z)}function IO($,Z){if(!Z||Object.keys(Z).length===0)return!0;return Object.entries(Z).every(([Q,W])=>A5(kO($,Q),W))}class G7{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let Z=new Date(this.nowFn()).toISOString(),Q=hO($,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 H of J){if(!IO(Q,H.filters)){X.push({specId:H.specId,externalId:H.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}Y.push(H);let G=this.materializeForSpec(H,Q,W.record.receivedAt);if(G.run)j.push(G.run);else X.push({specId:H.specId,externalId:H.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((H)=>H.reason!=="filter_mismatch").length});let B=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:B??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 B=yO(V.scheduledFor,kV(Q,J)),H=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:Z.eventId,scheduledFor:B});if(H)return{run:H,reason:"dedupe_window"}}}let X=$.dedupeWindowSeconds??0;if(X>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:W,sinceIso:IV(Q,X)}))return{reason:"dedupe_window"};let Y=$.cooldownSeconds??0;if(Y>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:IV(Q,Y)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:Z.eventId,scheduledFor:J>0?kV(Q,J):Q}),reason:"dedupe_window"}}}class d8{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 rO}from"node:path";import{buildClineSystemPrompt as iO}from"@cline/shared";import{nowIso as vV}from"@cline/shared/db";import{basename as xO,resolve as gO}from"node:path";import{performance as xV}from"node:perf_hooks";import{processWorkspaceInfo as gV}from"@cline/shared";import mO from"simple-git";function b$($){return gO($)}async function U5($){return(await K7($)).info}function f5($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function K7($){let Z=b$($),Q={rootPath:Z,hint:xO(Z)},W;try{let J=mO({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 B=V.refs.fetch||V.refs.push;return`${V.name}: ${B}`});Q.associatedRemoteUrls=j}}catch(Y){W??=f5(Y)}try{let Y=(await J.revparse(["HEAD"])).trim();if(Y.length>0)Q.latestGitCommitHash=Y}catch(Y){W??=f5(Y)}try{let Y=(await J.branch()).current.trim();if(Y.length>0)Q.latestGitBranchName=Y}catch(Y){W??=f5(Y)}return{info:Q,vcsType:"git",error:W}}catch(J){return{info:Q,vcsType:"none",error:f5(J)}}}async function F7($){let Z=await U5($);return gV(Z)}async function mV($){let Z=xV.now(),Q=await K7($),W=xV.now()-Z,J=Q.info;return{workspaceInfo:J,workspaceMetadata:gV(J),durationMs:W,vcsType:Q.vcsType,initError:Q.error}}import{mkdirSync as vO,writeFileSync as cO}from"node:fs";import{join as uO}from"node:path";import{resolveCronReportsDir as dO}from"@cline/shared/storage";function p1($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function y$($,Z){if(Z===void 0||Z===null)return;return`${$}: ${p1(Z)}`}function lO($,Z,Q){let W=[`runId: ${p1($.runId)}`,`specId: ${p1(Z.specId)}`,`externalId: ${p1(Z.externalId)}`,`title: ${p1(Z.title)}`,`triggerKind: ${p1($.triggerKind)}`,`status: ${p1($.status)}`,`sourcePath: ${p1(Z.sourcePath)}`],J=[y$("sessionId",$.sessionId),y$("startedAt",$.startedAt),y$("completedAt",$.completedAt),y$("triggerEventId",$.triggerEventId),y$("triggerEventType",Q?.eventType),y$("triggerEventSource",Q?.source),y$("triggerEventSubject",Q?.subject)];for(let X of J)if(X)W.push(X);return`---
184
- ${W.join(`
182
+ `);if(Q<0)break;let W=this.buffer.slice(0,Q).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!W)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let X=Number.parseInt(W[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 V7{buffer="";decoder=new RV("utf8");push($){this.buffer+=this.decoder.write($);let Z=[];while(!0){let Q=this.buffer.indexOf(`
183
+ `);if(Q<0)break;let J=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),J.length>0)Z.push(J)}return Z}}class NV{registration;process;nextRequestId=1;pending=new Map;framedParser=new j7;newlineParser=new V7;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:qq,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},Mq),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Q;return}catch(J){Z=J instanceof Error?J:Error(String(J))}}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 j7,this.newlineParser=new V7,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},J=Tq(Z.command,Z.args??[],{cwd:Z.cwd,env:{...process.env,...Z.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=J,J.stdout.on("data",(W)=>this.handleStdout(W)),J.stderr.on("data",(W)=>{if(this.process!==J)return;if(this.stderrBuffer+=W.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),J.once("error",(W)=>{if(this.process!==J)return;this.failAllPending(Error(`MCP process error: ${D5(W)}`))}),J.once("exit",(W,X)=>{if(this.process!==J)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=${W??"null"}, signal=${X??"null"}).${Y}`))})}handleStdout($){try{let Z=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of Z){let J=JSON.parse(Q);if(typeof J.id!=="number")continue;let W=this.pending.get(J.id);if(!W)continue;if(this.pending.delete(J.id),clearTimeout(W.timeout),J.error){let X=J.error.message||`MCP request failed with code ${J.error.code??"unknown"}`;W.reject(Error(X));continue}W.resolve(J.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}": ${D5($)}.${Q}`)),Z.kill()}async request($,Z,Q=zq){let J=this.process;if(!J?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let W=this.nextRequestId++,X={jsonrpc:"2.0",id:W,method:$,...Z?{params:Z}:{}},Y=new Promise((j,V)=>{let B=setTimeout(()=>{this.pending.delete(W),V(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Q);this.pending.set(W,{resolve:j,reject:V,timeout:B})});try{J.stdin.write(this.protocolMode==="framed"?zV(X):MV(X))}catch(j){let V=this.pending.get(W);if(V)clearTimeout(V.timeout),this.pending.delete(W);throw j}return Y}notify($,Z){let Q=this.process;if(!Q?.stdin.writable)return;let J={jsonrpc:"2.0",method:$,...Z?{params:Z}:{}};Q.stdin.write(this.protocolMode==="framed"?zV(J):MV(J))}failAllPending($){for(let[Z,Q]of this.pending)clearTimeout(Q.timeout),this.pending.delete(Z),Q.reject($)}}class EV{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 $=U5({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??qV});this.authContext=$;try{let Z=new Oq({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Q=f5({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await Z.connect(Q),await $.clearError(),this.client=Z}catch(Z){let Q=Z instanceof OV?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):D5(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??U5({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??qV}),Q=$ instanceof OV?this.formatUnauthorizedMessage(Z.getLastAuthorizationUrl()):D5($);throw await Z.markError(Q),Error(Q)}}function L5($={}){return(Z)=>Z.transport.type==="stdio"?new NV(Z):new EV(Z,$)}A5();function u0(){return Date.now()}function Rq($){return $.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema}))}class u8{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:u0()});return}let Q=JSON.stringify(Z.registration.transport)!==JSON.stringify($.transport);if(Z.registration={...$},Z.updatedAt=u0(),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=u0(),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&&u0()-Q<=this.toolsCacheTtlMs)return Z.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let Z=this.requireServer($),J=await(await this.ensureConnectedClient(Z)).listTools(),W=Rq(J);return Z.toolCache=W,Z.toolCacheUpdatedAt=u0(),Z.updatedAt=u0(),W})}async callTool($){return this.runExclusive($.serverName,async()=>{let Z=this.requireServer($.serverName),Q=await this.ensureConnectedClient(Z);return Z.updatedAt=u0(),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=u0();try{let Z=$.client??await this.clientFactory($.registration);await Z.connect(),$.client=Z,$.status="connected",$.lastError=void 0,$.updatedAt=u0()}catch(Z){throw $.status="disconnected",$.lastError=Z instanceof Error?Z.message:String(Z),$.updatedAt=u0(),Z}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=u0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=u0()}}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(),J,W=new Promise((Y)=>{J=Y}),X=Q.catch(()=>{return}).then(()=>W);this.operationLocks.set($,X),await Q.catch(()=>{return});try{return await Z()}finally{if(J?.(),this.operationLocks.get($)===X)this.operationLocks.delete($)}}}function g2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function wV($){return g2($)&&Object.values($).every((Z)=>typeof Z==="string")}function Nq($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function Eq($){if(!g2($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function wq($){let Z=$.env?Object.entries($.env):[];if(Z.length===0)return{ok:!0};let Q={};for(let[J,W]of Z){if(typeof W==="string"){Q[J]=W;continue}let X=W.fromEnv?.trim()||J,Y=process.env[X];if(typeof Y==="string"&&Y.length>0){Q[J]=Y;continue}if(typeof W.value==="string"){Q[J]=W.value;continue}if(W.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 CV($){if(!g2($))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,J=Q===void 0?void 0:Q;if(J!==void 0){if(!g2(J))return{name:Z,loadError:"invalid env"};for(let[V,B]of Object.entries(J))if(typeof B!=="string"&&!Eq(B))return{name:Z,loadError:`invalid env "${V}"`}}let W=$.transport;if(!g2(W))return{name:Z,loadError:"invalid MCP transport"};let X=W.type;if(X!=="stdio"&&X!=="sse"&&X!=="streamableHttp")return{name:Z,loadError:"invalid MCP transport type"};if(X!=="stdio"&&J!==void 0)return{name:Z,loadError:"top-level env is only supported for stdio MCP transports"};let Y=g2($.metadata)?$.metadata:void 0;if(X==="stdio"){let V=W.command;if(typeof V!=="string"||!V.trim())return{name:Z,loadError:"stdio MCP transport requires command"};let B=W.args;if(B!==void 0&&!Nq(B))return{name:Z,loadError:"stdio MCP transport args must be strings"};let H=W.cwd;if(H!==void 0&&typeof H!=="string")return{name:Z,loadError:"stdio MCP transport cwd must be a string"};let G=W.env;if(G!==void 0&&!wV(G))return{name:Z,loadError:"stdio MCP transport env must be strings"};let K=wq({name:Z,transport:{type:"stdio",command:V,args:B,cwd:H,env:G},env:J,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:B,cwd:H,env:F},metadata:Y}}}if(typeof W.url!=="string"||!W.url.trim())return{name:Z,loadError:`${X} MCP transport requires url`};let j=W.headers;if(j!==void 0&&!wV(j))return{name:Z,loadError:`${X} MCP transport headers must be strings`};return{name:Z,registration:{name:Z,transport:X==="sse"?{type:"sse",url:W.url,headers:j}:{type:"streamableHttp",url:W.url,headers:j},metadata:Y}}}function B7($){let Z=new Map;return $.map(({server:Q,owner:J,ownerLabel:W})=>{let X=CV(Q);if(!X.registration)return{owner:J,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:J,name:X.registration.name,loadError:`duplicate MCP server name "${X.registration.name}"${j}`}}return Z.set(X.registration.name,W),{owner:J,name:X.registration.name,registration:X.registration}})}import{createHash as Cq}from"node:crypto";var PV=64,Pq=/[^a-zA-Z0-9_-]+/g,SV=8,Sq=1,bq="mcp_tool";function yq($){return Cq("sha1").update($).digest("hex").slice(0,SV)}function hq($){return $.replace(Pq,"_")}var _5=({serverName:$,toolName:Z})=>{let Q=`${$}__${Z}`,J=hq(Q);if(J===Q&&Q.length<=PV)return Q;let W=yq(Q),X=PV-Sq-SV;return`${J.slice(0,X)||bq}_${W}`};function H7($){return{[($.nameTransform??_5)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function bV($){let Z={};for(let Q of $.toolNames)Object.assign(Z,H7({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return Z}import{createTool as kq}from"@cline/shared";function Iq($,Z){let Q=Z.description?.trim();if(Q)return Q;return`Execute MCP tool "${Z.name}" from server "${$}".`}async function T5($){let Z=await $.provider.listTools($.serverName),Q=$.nameTransform??_5;return Z.map((J)=>{let W=Q({serverName:$.serverName,toolName:J.name});return kq({name:W,description:Iq($.serverName,J),inputSchema:J.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(X,Y)=>$.provider.callTool({serverName:$.serverName,toolName:J.name,arguments:X&&typeof X==="object"&&!Array.isArray(X)?X:void 0,context:Y})})})}o0();import{stat as xq}from"node:fs/promises";import{isAbsolute as gq,relative as mq,resolve as yV}from"node:path";o0();function vq($,Z){let Q=mq(yV($),yV(Z));return Q===""||!Q.startsWith("..")&&!gq(Q)}var cq=32,m2=new Map;function uq($,Z){if(!m2.has($)&&m2.size>=cq){let Q=m2.keys().next().value;if(Q)m2.delete(Q)}m2.set($,Z)}async function dq($){let Z=await Promise.all($.pluginPaths.map(async(Q)=>{try{let J=await xq(Q);return`${Q}:${J.mtimeMs}:${J.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:Z})}function hV($,Z){return $.map((Q)=>({...Q,enabled:!Z.has(Q.name)}))}function lq($){return $.sort((Z,Q)=>{let J=Z.name.localeCompare(Q.name);if(J!==0)return J;return Z.path.localeCompare(Q.path)})}async function pq($,Z){if(!$.setup)return{tools:[]};let Q=[],J={registerTool:(W)=>Q.push(W),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(W)=>{if(!$.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability')}};return await $.setup(J,{workspaceInfo:Z}),{tools:Q}}async function kV($){let Z=N$({workspacePath:$.workspacePath,cwd:$.cwd}),Q=A1($.disabledToolNames);if(Z.length===0)return{tools:[],failures:[],warnings:[]};let J=await dq({pluginPaths:Z,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),W=m2.get(J);if(W)return{tools:hV(W.tools,Q),failures:W.failures,warnings:W.warnings};let X=[],Y=[],j=[],V;try{V=await L2({pluginPaths:Z,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),Y=[...V.failures],j=[...V.warnings];for(let H of V.extensions??[]){let G=H.__clinePluginPath;if(!G)continue;let K=vq($.workspacePath,G)?"workspace-plugin":"global-plugin",F;try{F=await pq(H,{rootPath:$.workspacePath})}catch(A){Y.push({pluginPath:G,pluginName:H.name,phase:"setup",message:A instanceof Error?A.message:String(A),stack:A instanceof Error?A.stack:void 0});continue}for(let A of F.tools)X.push({name:A.name,pluginName:H.name,path:G,source:K,description:A.description?.trim()||void 0})}}catch(H){Y=Z.map((G)=>({pluginPath:G,phase:"load",message:H instanceof Error?H.message:String(H),stack:H instanceof Error?H.stack:void 0}))}finally{await V?.shutdown().catch(()=>{})}let B=lq(X);return uq(J,{tools:B,failures:Y,warnings:j}),{tools:hV(B,Q),failures:Y,warnings:j}}async function G7($){return(await kV($)).tools}function p8($,Z){if(!Z)return"global";let Q=vV(Z,$);return!Q.startsWith("..")&&!mV(Q)?"workspace":"global"}function aq($,Z){return p8($,Z)==="workspace"?"workspace-plugin":"global-plugin"}function oq($,Z){let Q=vV(xV($),xV(Z));return Q===""||!Q.startsWith("..")&&!mV(Q)}function sq($){try{let Z=JSON.parse(rq($,"utf8"));return typeof Z.name==="string"&&Z.name.trim()?Z.name.trim():void 0}catch{return}}function tq($){let Z=IV($);while(!0){let Q=nq(Z,"package.json");if(l8(Q)){let W=sq(Q);if(W)return W;break}let J=IV(Z);if(J===Z)break;Z=J}return K7($,iq($))}function eq($){let Z=[];for(let Q of N$({workspacePath:$.workspaceRoot||void 0,cwd:$.cwd}))for(let J of E$([Q]))Z.push({directory:J,pluginName:tq(Q),pluginPath:Q,source:$.workspaceRoot?aq(Q,$.workspaceRoot):"global-plugin"});return Z.sort((Q,J)=>J.directory.length-Q.directory.length)}function $z($,Z){return Z.find((Q)=>oq(Q.directory,$))}function d8($){return[...$].sort((Z,Q)=>{let J=(W)=>{switch(W){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(Z.source!==Q.source)return J(Z.source)-J(Q.source);return Z.name.localeCompare(Q.name)})}function cV($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}function uV($,Z){return $.cwd?.trim()||Z||process.cwd()}async function gV($,Z){if($.userInstructionService)return await Z($.userInstructionService);let Q=cV($),J=uV($,Q),W=h2({skills:{workspacePath:Q||void 0,includePluginSkills:!0,cwd:J},rules:{workspacePath:Q||void 0},workflows:{workspacePath:Q||void 0}});try{return await W.start(),await Z(W)}finally{W.stop()}}function Zz($,Z){if(!$)return;let Q=$.listRecords("skill");if(Z.id){let J=Q.find((W)=>W.id===Z.id);if(J)return J}for(let J of Q)if(J.filePath===Z.path||J.item.name===Z.name||J.id===Z.name)return J;return}class v2{async list($={}){return await gV($,async(Z)=>{let Q=cV($),J=eq({workspaceRoot:Q,cwd:uV($,Q)}),W=[],X=[],Y=[],j=[],V=[];if(Z){for(let H of Z.listRecords("workflow")){let G=H.item;W.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"workflow",source:p8(H.filePath,Q),description:G.instructions,toggleable:!1})}for(let H of Z.listRecords("rule")){let G=H.item;X.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"rule",source:p8(H.filePath,Q),description:G.instructions,toggleable:!1})}for(let H of Z.listRecords("skill")){let G=H.item,K=$z(H.filePath,J);Y.push({id:H.id,name:G.name,path:H.filePath,enabled:G.disabled!==!0,kind:"skill",source:K?.source??p8(H.filePath,Q),description:G.description,pluginName:K?.pluginName,pluginPath:K?.pluginPath,toggleable:!0})}}if(Q)try{for(let H of await G7({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))j.push({id:`${H.pluginName}:${H.name}:${H.path}`,name:H.name,path:H.path,enabled:H.enabled,kind:"tool",source:H.source,description:H.description,toggleable:!0})}catch{}let B=Z0();if(k$({filePath:B}))try{for(let H of W1({filePath:B}))V.push({id:H.name,name:H.name,path:B,enabled:H.disabled!==!0,kind:"mcp",source:p8(B,Q),description:H.transport.type,toggleable:!0})}catch{}return{workflows:d8(W.filter((H)=>l8(H.path))),rules:d8(X.filter((H)=>l8(H.path))),skills:d8(Y.filter((H)=>l8(H.path))),tools:d8(j),mcp:d8(V.filter((H)=>l8(H.path)))}})}async toggle($){if($.type==="skills")return await gV($,async(Z)=>{let Q=Zz(Z,$),J=Q?.filePath;if(!J)throw Error(`Unable to resolve skill setting '${$.id??$.name??K7($.path??"")}'.`);let W=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,X=$.enabled??(W!==void 0?!W:void 0);if(X===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??K7($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await ZV({filePath:J,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)iZ($.name);else CX($.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()||Z0(),J=$.enabled;if(J===void 0){let W=W1({filePath:Q}).find((X)=>X.name===Z);if(!W)throw Error(`Unknown MCP server: ${Z}`);J=W.disabled===!0}return g8({filePath:Q,name:Z,disabled:!J}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function r8(){return new v2}function dV($){return{async list(Z){let Q=$;if(Q.listSettings)return await Q.listSettings(Z);return await r8().list(Z)},async toggle(Z){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(Z);return await r8().toggle(Z)}}}function lV($){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)}}}function C0(...$){let Z,Q;for(let W of $){if(!W)continue;if(W.toolExecutors)Z={...Z??{},...W.toolExecutors};if(W.requestToolApproval)Q=W.requestToolApproval}let J=Z&&Object.keys(Z).length>0;if(!J&&!Q)return;return{...J?{toolExecutors:Z}:{},...Q?{requestToolApproval:Q}:{}}}var i8="session_not_found";class I$ extends Error{sessionId;code="session_not_found";constructor($,Z){super(Z??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function x$($){return $ instanceof I$||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function F7($){let{hooks:Z,logger:Q,telemetry:J,extensionContext:W,extraTools:X,extensions:Y,onTeamEvent:j,onConsecutiveMistakeLimitReached:V,checkpoint:B,compaction:H,...G}=$,K={};if(Z)K.hooks=Z;if(Q)K.logger=Q;if(J)K.telemetry=J;if(W)K.extensionContext=W;if(X)K.extraTools=X;if(Y)K.extensions=Y;if(j)K.onTeamEvent=j;if(V)K.onConsecutiveMistakeLimitReached=V;if(B?.createCheckpoint)K.checkpoint=B;if(H?.compact)K.compaction=H;let F=Object.keys(K).length>0?K:void 0;return{config:{...G,...B?{checkpoint:{enabled:B.enabled}}:{},...H?{compaction:{enabled:H.enabled,strategy:H.strategy,thresholdRatio:H.thresholdRatio,reserveTokens:H.reserveTokens,preserveRecentTokens:H.preserveRecentTokens,maxInputTokens:H.maxInputTokens,summarizer:H.summarizer}}:{}},...F?{localRuntime:F}:{}}}function pV($){let Z=$.config;return"providerId"in Z?{...$,config:{...Z,...Qz($.localRuntime)},localRuntime:$.localRuntime}:$}function A7($,Z={}){let Q=F7($.config),J=C0(Z.defaultCapabilities,$.capabilities),W=Jz(Q.localRuntime,$.localRuntime),X=Z.withExtensionContext?.(W?.extensionContext);if(X)W={...W??{},extensionContext:X};return{...$,...Q,...W?{localRuntime:W}:{},...J?{capabilities:J}:{}}}function Qz($){if(!$)return{};let{modelCatalogDefaults:Z,userInstructionService:Q,configExtensions:J,onTeamRestored:W,...X}=$;return X}function Jz(...$){let Z={};for(let Q of $)if(Q)Object.assign(Z,Q);return Object.keys(Z).length>0?Z:void 0}A0();function rV($){let Z=$.input.config.telemetry??$.telemetry;if(!Z)return;Z.capture({event:g.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??w0.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 n8($){return!!$&&typeof $==="object"&&!Array.isArray($)}function f7($){let Z=$?.trim();return Z?Z:void 0}function Wz($,Z){let Q=$?.trim();if(!Q)return Z;let J=Date.parse(Q);if(!Number.isFinite(J))return Z;return new Date(J).toISOString()}function iV($,Z){return new Date(new Date($).getTime()+Math.max(0,Math.floor(Z))*1000).toISOString()}function nV($,Z){return new Date(new Date($).getTime()-Math.max(0,Math.floor(Z))*1000).toISOString()}function Xz($,Z){if(!$)return Z;return new Date($).getTime()>=new Date(Z).getTime()?$:Z}function Yz($,Z){let Q=$.eventId.trim(),J=$.eventType.trim(),W=$.source.trim(),X=f7($.subject),Y=f7($.dedupeKey)??`${J}:${W}:${X??Q}`;return{eventId:Q,eventType:J,source:W,subject:X,occurredAt:Wz($.occurredAt,Z),workspaceRoot:f7($.workspaceRoot),payload:n8($.payload)?$.payload:void 0,attributes:n8($.attributes)?$.attributes:void 0,dedupeKey:Y}}function U7($,Z){if(!Z)return;let Q=Z.split("."),J=$;for(let W of Q){if(!n8(J))return;J=J[W]}return J}function jz($,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},J=U7(Q,Z);if(J!==void 0)return J;if($.attributes){let W=U7($.attributes,Z);if(W!==void 0)return W}if($.payload)return U7($.payload,Z);return}function O5($,Z){if(Array.isArray(Z))return Z.some((Q)=>O5($,Q));if(Array.isArray($))return $.some((Q)=>O5(Q,Z));if(n8(Z)){if(!n8($))return!1;return Object.entries(Z).every(([Q,J])=>O5($[Q],J))}return Object.is($,Z)}function Vz($,Z){if(!Z||Object.keys(Z).length===0)return!0;return Object.entries(Z).every(([Q,J])=>O5(jz($,Q),J))}class D7{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let Z=new Date(this.nowFn()).toISOString(),Q=Yz($,Z),J=this.store.insertEventLog(Q,{receivedAtIso:Z});if(!J.created)return this.logger?.debug("cron.event.duplicate",{eventId:J.record.eventId,eventType:J.record.eventType,source:J.record.source}),{event:J.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:J.record.dedupeKey}]};try{let W=this.store.listEventSpecsForType(Q.eventType),X=[],Y=[],j=[];for(let H of W){if(!Vz(Q,H.filters)){X.push({specId:H.specId,externalId:H.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}Y.push(H);let G=this.materializeForSpec(H,Q,J.record.receivedAt);if(G.run)j.push(G.run);else X.push({specId:H.specId,externalId:H.externalId,reason:G.reason,dedupeKey:Q.dedupeKey})}let V=Y.length===0?"unmatched":j.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(J.record.eventId,{status:V,matchedSpecCount:Y.length,queuedRunCount:j.length,suppressedCount:X.filter((H)=>H.reason!=="filter_mismatch").length});let B=this.store.getEventLog(J.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:J.record.eventId,eventType:J.record.eventType,status:V,matchedSpecCount:Y.length,queuedRunCount:j.length}),{event:B??J.record,duplicate:!1,matchedSpecs:Y,queuedRuns:j,suppressions:X}}catch(W){if(this.store.updateEventLogProcessing(J.record.eventId,{status:"failed",error:W instanceof Error?W.message:String(W)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:J.record.eventId,eventType:J.record.eventType,error:W});throw W}}materializeForSpec($,Z,Q){let J=Z.dedupeKey??Z.eventId,W=$.debounceSeconds??0;if(W>0){let V=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:J});if(V){let B=Xz(V.scheduledFor,iV(Q,W)),H=this.store.updateQueuedEventRunForDebounce({runId:V.runId,triggerEventId:Z.eventId,scheduledFor:B});if(H)return{run:H,reason:"dedupe_window"}}}let X=$.dedupeWindowSeconds??0;if(X>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:J,sinceIso:nV(Q,X)}))return{reason:"dedupe_window"};let Y=$.cooldownSeconds??0;if(Y>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:nV(Q,Y)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:Z.eventId,scheduledFor:W>0?iV(Q,W):Q}),reason:"dedupe_window"}}}class a8{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 J of Z)if(this.materializeOneOff(J))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let J of Q)try{if(this.materializeSchedule(J))$.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 Lz}from"node:path";import{buildClineSystemPrompt as _z}from"@cline/shared";import{nowIso as tV}from"@cline/shared/db";import{basename as Bz,resolve as Hz}from"node:path";import{performance as aV}from"node:perf_hooks";import{processWorkspaceInfo as oV}from"@cline/shared";import Gz from"simple-git";function g$($){return Hz($)}async function z5($){return(await L7($)).info}function q5($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function L7($){let Z=g$($),Q={rootPath:Z,hint:Bz(Z)},J;try{let W=Gz({baseDir:Z});if(!await W.checkIsRepo())return{info:Q,vcsType:"none"};try{let Y=await W.getRemotes(!0);if(Y.length>0){let j=Y.map((V)=>{let B=V.refs.fetch||V.refs.push;return`${V.name}: ${B}`});Q.associatedRemoteUrls=j}}catch(Y){J??=q5(Y)}try{let Y=(await W.revparse(["HEAD"])).trim();if(Y.length>0)Q.latestGitCommitHash=Y}catch(Y){J??=q5(Y)}try{let Y=(await W.branch()).current.trim();if(Y.length>0)Q.latestGitBranchName=Y}catch(Y){J??=q5(Y)}return{info:Q,vcsType:"git",error:J}}catch(W){return{info:Q,vcsType:"none",error:q5(W)}}}async function _7($){let Z=await z5($);return oV(Z)}async function sV($){let Z=aV.now(),Q=await L7($),J=aV.now()-Z,W=Q.info;return{workspaceInfo:W,workspaceMetadata:oV(W),durationMs:J,vcsType:Q.vcsType,initError:Q.error}}import{mkdirSync as Kz,writeFileSync as Fz}from"node:fs";import{join as Az}from"node:path";import{resolveCronReportsDir as fz}from"@cline/shared/storage";function a1($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function m$($,Z){if(Z===void 0||Z===null)return;return`${$}: ${a1(Z)}`}function Uz($,Z,Q){let J=[`runId: ${a1($.runId)}`,`specId: ${a1(Z.specId)}`,`externalId: ${a1(Z.externalId)}`,`title: ${a1(Z.title)}`,`triggerKind: ${a1($.triggerKind)}`,`status: ${a1($.status)}`,`sourcePath: ${a1(Z.sourcePath)}`],W=[m$("sessionId",$.sessionId),m$("startedAt",$.startedAt),m$("completedAt",$.completedAt),m$("triggerEventId",$.triggerEventId),m$("triggerEventType",Q?.eventType),m$("triggerEventSource",Q?.source),m$("triggerEventSubject",Q?.subject)];for(let X of W)if(X)J.push(X);return`---
184
+ ${J.join(`
185
185
  `)}
186
186
  ---
187
- `}function pO($){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
187
+ `}function Dz($){let Z=[];if($.triggerEvent){let Q=$.triggerEvent,J=[`- 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((W)=>W.length>0);Z.push(`## Trigger Event
188
188
 
189
- ${W.join(`
189
+ ${J.join(`
190
190
  `)}
191
191
  `)}if($.error)Z.push(`## Error
192
192
 
@@ -194,26 +194,26 @@ ${$.error}
194
194
  `);if($.finalText&&$.finalText.trim().length>0)Z.push(`## Summary
195
195
 
196
196
  ${$.finalText.trim()}
197
- `);if($.usage){let Q=$.usage,W=[Q.inputTokens!==void 0?`- inputTokens: ${Q.inputTokens}`:"",Q.outputTokens!==void 0?`- outputTokens: ${Q.outputTokens}`:"",Q.cacheReadTokens!==void 0?`- cacheReadTokens: ${Q.cacheReadTokens}`:"",Q.cacheWriteTokens!==void 0?`- cacheWriteTokens: ${Q.cacheWriteTokens}`:"",Q.totalCost!==void 0?`- totalCostUsd: ${Q.totalCost}`:"",$.durationMs!==void 0?`- durationMs: ${$.durationMs}`:""].filter((J)=>J.length>0);if(W.length>0)Z.push(`## Usage
197
+ `);if($.usage){let Q=$.usage,J=[Q.inputTokens!==void 0?`- inputTokens: ${Q.inputTokens}`:"",Q.outputTokens!==void 0?`- outputTokens: ${Q.outputTokens}`:"",Q.cacheReadTokens!==void 0?`- cacheReadTokens: ${Q.cacheReadTokens}`:"",Q.cacheWriteTokens!==void 0?`- cacheWriteTokens: ${Q.cacheWriteTokens}`:"",Q.totalCost!==void 0?`- totalCostUsd: ${Q.totalCost}`:"",$.durationMs!==void 0?`- durationMs: ${$.durationMs}`:""].filter((W)=>W.length>0);if(J.length>0)Z.push(`## Usage
198
198
 
199
- ${W.join(`
199
+ ${J.join(`
200
200
  `)}
201
- `)}if($.toolCalls&&$.toolCalls.length>0){let Q=$.toolCalls.map((W)=>{let J=[`- ${W.name}`];if(W.durationMs!==void 0)J.push(`(${W.durationMs}ms)`);if(W.error)J.push(`error: ${W.error}`);return J.join(" ")});Z.push(`## Tool Calls
201
+ `)}if($.toolCalls&&$.toolCalls.length>0){let Q=$.toolCalls.map((J)=>{let W=[`- ${J.name}`];if(J.durationMs!==void 0)W.push(`(${J.durationMs}ms)`);if(J.error)W.push(`error: ${J.error}`);return W.join(" ")});Z.push(`## Tool Calls
202
202
 
203
203
  ${Q.join(`
204
204
  `)}
205
205
  `)}return Z.join(`
206
- `)}function A7($){let Z=dO($.specs);vO(Z,{recursive:!0});let Q=uO(Z,`${$.run.runId}.md`),W=`${lO($.run,$.spec,$.data.triggerEvent)}
207
- ${pO($.data)}`;return cO(Q,W,"utf8"),Q}class f7{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 nO=15000,aO=90,cV=["rules","skills","plugins"];function sO($,Z){return new Set($.extensions??cV).has(Z)}function oO($,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[L0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Q}function tO($){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(`
208
- `)}class U7 extends Error{constructor($){super($);this.name="TimeoutError"}}async function eO($,Z){if(Z<=0)return $;let Q,W=new Promise((J,X)=>{Q=setTimeout(()=>{X(new U7("cron run timed out"))},Z)});try{return await Promise.race([$,W])}finally{if(Q)clearTimeout(Q)}}class l8{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 f7($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??aO)*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??nO);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:vV(),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(),B;if(Q.timeoutSeconds&&Q.timeoutSeconds>0)B=V+Q.timeoutSeconds*1000;try{j=this.startClaimLeaseHeartbeat($);let H=await this.buildStartRequest(Q);if(Y=(await this.options.runtimeHandlers.startSession(H)).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:H,prompt:this.buildPrompt(Q,X)},F=this.options.runtimeHandlers.sendSession(Y,K),A=B?Math.max(1,B-Date.now()):0,f=(await eO(F,A)).result,D=Date.now(),U=A7({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,vV())}catch(H){let G=H instanceof U7;if(Y&&G)try{await this.options.runtimeHandlers.abortSession(Y)}catch{}let K=H instanceof Error?H.message:String(H),F=Date.now(),A=A7({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}
206
+ `)}function T7($){let Z=fz($.specs);Kz(Z,{recursive:!0});let Q=Az(Z,`${$.run.runId}.md`),J=`${Uz($.run,$.spec,$.data.triggerEvent)}
207
+ ${Dz($.data)}`;return Fz(Q,J,"utf8"),Q}class O7{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,Z,Q){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let J=Math.max(1,Math.floor(Q)),W=this.activeExecutions.get($)??new Set;if(W.size>=J)return!1;return W.add(Z),this.activeExecutions.set($,W),!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 Tz=15000,Oz=90,eV=["rules","skills","plugins"];function qz($,Z){return new Set($.extensions??eV).has(Z)}function zz($,Z){if($.tools===void 0)return{"*":{autoApprove:!0}};let Q={"*":{enabled:!1,autoApprove:!0}};for(let J of $.tools)Q[J]={enabled:!0,autoApprove:!0};if(Z==="yolo")Q[q0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Q}function Mz($){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(`
208
+ `)}class q7 extends Error{constructor($){super($);this.name="TimeoutError"}}async function Rz($,Z){if(Z<=0)return $;let Q,J=new Promise((W,X)=>{Q=setTimeout(()=>{X(new q7("cron run timed out"))},Z)});try{return await Promise.race([$,J])}finally{if(Q)clearTimeout(Q)}}class o8{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 O7($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??Oz)*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??Tz);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,J])=>{if(J.sessionId)try{await this.options.runtimeHandlers.abortSession(J.sessionId)}catch{}try{this.store.requeueRun({runId:Q,claimToken:J.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:tV(),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 J=Q.maxParallel&&Q.maxParallel>0?Q.maxParallel:1;if(!this.limiter.acquire(Q.specId,Z.runId,J)){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(),B;if(Q.timeoutSeconds&&Q.timeoutSeconds>0)B=V+Q.timeoutSeconds*1000;try{j=this.startClaimLeaseHeartbeat($);let H=await this.buildStartRequest(Q);if(Y=(await this.options.runtimeHandlers.startSession(H)).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:H,prompt:this.buildPrompt(Q,X)},F=this.options.runtimeHandlers.sendSession(Y,K),A=B?Math.max(1,B-Date.now()):0,U=(await Rz(F,A)).result,L=Date.now(),f=T7({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...Z,sessionId:Y,status:"done"},spec:Q,data:{finalText:U.text,usage:U.usage,toolCalls:U.toolCalls,durationMs:L-V,triggerEvent:X}});this.store.completeRun(Z.runId,{status:"done",sessionId:Y,reportPath:f,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",Q,Z.runId),this.store.updateSpecLastRunAt(Q.specId,tV())}catch(H){let G=H instanceof q7;if(Y&&G)try{await this.options.runtimeHandlers.abortSession(Y)}catch{}let K=H instanceof Error?H.message:String(H),F=Date.now(),A=T7({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 J=this.store.getRun(Q);if(!J)return;let W=J.status==="done"?"success":J.status==="cancelled"?"aborted":J.status==="running"?"running":J.status==="queued"?"pending":"failed";this.options.eventPublisher($,{scheduleId:Z.externalId,executionId:J.runId,sessionId:J.sessionId,triggeredAt:new Date(J.scheduledFor??J.createdAt).getTime(),startedAt:J.startedAt?new Date(J.startedAt).getTime():void 0,endedAt:J.completedAt?new Date(J.completedAt).getTime():void 0,status:W,errorMessage:J.error})}buildPrompt($,Z){let Q=$.prompt??"";if(!Z)return Q;let J={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}
209
209
 
210
210
  Trigger event:
211
- ${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=tO($.notesDirectory),X=R6(void 0,J),Y=await F7(Z),j=iO({ide:"Cline Cron",workspaceRoot:Z,workspaceName:rO(Z),metadata:Y,rules:$.systemPrompt?void 0:X,mode:Q,providerId:W,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?R6(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:oO($,Y),configExtensions:cV.filter((j)=>sO($,j))}}}import{existsSync as Oq,readdirSync as qq,readFileSync as Mq,statSync as Rq}from"node:fs";import{relative as Eq}from"node:path";import{resolveCronSpecsDir as Nq}from"@cline/shared/storage";function p8($,Z,Q,W){let J=new Set;function X(Y){let j=Y.toLowerCase();if(W){let B=W.indexOf(j);if(B!==-1)return B+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 B=Z;B<=Q;B+=1)J.add(B);continue}let j=Y.indexOf("/");if(j!==-1){let B=Y.slice(0,j),H=Number(Y.slice(j+1));if(!Number.isInteger(H)||H<1)throw Error(`Invalid step "${Y.slice(j+1)}"`);let G=Z,K=Q;if(B!=="*"){let F=B.indexOf("-");if(F!==-1)G=X(B.slice(0,F)),K=X(B.slice(F+1));else G=X(B)}if(G>K)throw Error(`Invalid cron range "${B}"`);for(let F=G;F<=K;F+=H)J.add(F);continue}let V=Y.indexOf("-");if(V!==-1){let B=X(Y.slice(0,V)),H=X(Y.slice(V+1));if(B>H)throw Error(`Invalid cron range "${Y}"`);for(let G=B;G<=H;G+=1)J.add(G);continue}J.add(X(Y))}return[...J].sort((Y,j)=>Y-j)}var $q=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],dV=["sun","mon","tue","wed","thu","fri","sat"];function r8($,Z,Q){let W=$[Z];if(typeof W!=="string")throw Error(`Invalid cron pattern "${Q}": missing field ${Z+1}`);return W}function D7($,Z){let Q=$[0];if(typeof Q!=="number")throw Error(`Invalid cron pattern: no values parsed for ${Z}`);return Q}function L7($){let Z=$.trim().split(/\s+/);if(Z.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${Z.length}`);return{minutes:p8(r8(Z,0,$),0,59),hours:p8(r8(Z,1,$),0,23),daysOfMonth:p8(r8(Z,2,$),1,31),months:p8(r8(Z,3,$),1,12,$q),daysOfWeek:p8(r8(Z,4,$),0,6,dV)}}function _7($){L7($)}function lV($,Z,Q=Date.now()){h$($,Q,Z)}var uV=new Map,Zq=new Map(dV.map(($,Z)=>[$,Z]));function pV($){let Z=$?.trim();return Z?Z:void 0}function rV($){let Z=uV.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 uV.set($,Q),Q}function Qq($){let Z=pV($);if(!Z)return;rV(Z).format(new Date)}function Wq($,Z){let Q=rV(Z).formatToParts(new Date($)),W=new Map(Q.map((Y)=>[Y.type,Y.value])),J=W.get("weekday")?.toLowerCase().slice(0,3)??"",X=Zq.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 Jq($){let Z=new Date($);return{month:Z.getMonth()+1,dayOfMonth:Z.getDate(),dayOfWeek:Z.getDay(),hour:Z.getHours(),minute:Z.getMinutes()}}function Xq($,Z){return $.months.includes(Z.month)&&$.daysOfMonth.includes(Z.dayOfMonth)&&$.daysOfWeek.includes(Z.dayOfWeek)&&$.hours.includes(Z.hour)&&$.minutes.includes(Z.minute)}function Yq($,Z,Q){let W=L7($),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(Xq(W,Wq(X,Q)))return X;X+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Q}"`)}function h$($,Z,Q){let W=pV(Q);if(W)return Qq(W),Yq($,Z,W);let J=L7($),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:B,hour:H,minute:G}=Jq(X.getTime());if(!J.months.includes(j)){let K=J.months.find((A)=>A>j)??D7(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(B)){X=new Date(X.getFullYear(),X.getMonth(),V+1,0,0,0,0);continue}if(!J.hours.includes(H)){let K=J.hours.find((A)=>A>H)??D7(J.hours,"hours"),F=K<=H?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)??D7(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 jq}from"node:crypto";import Vq from"yaml";function Bq($){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 Hq($){let Z=$.replace(/\r\n/g,`
211
+ ${JSON.stringify(J,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Q=setInterval(()=>{let J=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,J))clearInterval(Q)},Z);return()=>clearInterval(Q)}async buildSystemPrompt($,Z,Q,J){let W=Mz($.notesDirectory),X=b6(void 0,W),Y=await _7(Z),j=_z({ide:"Cline Cron",workspaceRoot:Z,workspaceName:Lz(Z),metadata:Y,rules:$.systemPrompt?void 0:X,mode:Q,providerId:J,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?b6(j,X)??j:j}async buildStartRequest($){let Z=($.workspaceRoot??"").trim(),Q=($.providerId??"").trim(),J=($.modelId??"").trim(),W=$.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:J,mode:Y,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,Z,Y,Q),maxIterations:$.maxIterations,enableTools:W?.enableTools??!0,enableSpawn:W?.enableSpawn??!0,enableTeams:W?.enableTeams??!0,autoApproveTools:W?.autoApproveTools??!0,toolPolicies:zz($,Y),configExtensions:eV.filter((j)=>qz($,j))}}}import{existsSync as nz,readdirSync as az,readFileSync as oz,statSync as sz}from"node:fs";import{relative as tz}from"node:path";import{resolveCronSpecsDir as ez}from"@cline/shared/storage";function s8($,Z,Q,J){let W=new Set;function X(Y){let j=Y.toLowerCase();if(J){let B=J.indexOf(j);if(B!==-1)return B+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 B=Z;B<=Q;B+=1)W.add(B);continue}let j=Y.indexOf("/");if(j!==-1){let B=Y.slice(0,j),H=Number(Y.slice(j+1));if(!Number.isInteger(H)||H<1)throw Error(`Invalid step "${Y.slice(j+1)}"`);let G=Z,K=Q;if(B!=="*"){let F=B.indexOf("-");if(F!==-1)G=X(B.slice(0,F)),K=X(B.slice(F+1));else G=X(B)}if(G>K)throw Error(`Invalid cron range "${B}"`);for(let F=G;F<=K;F+=H)W.add(F);continue}let V=Y.indexOf("-");if(V!==-1){let B=X(Y.slice(0,V)),H=X(Y.slice(V+1));if(B>H)throw Error(`Invalid cron range "${Y}"`);for(let G=B;G<=H;G+=1)W.add(G);continue}W.add(X(Y))}return[...W].sort((Y,j)=>Y-j)}var Nz=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],ZB=["sun","mon","tue","wed","thu","fri","sat"];function t8($,Z,Q){let J=$[Z];if(typeof J!=="string")throw Error(`Invalid cron pattern "${Q}": missing field ${Z+1}`);return J}function z7($,Z){let Q=$[0];if(typeof Q!=="number")throw Error(`Invalid cron pattern: no values parsed for ${Z}`);return Q}function M7($){let Z=$.trim().split(/\s+/);if(Z.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${Z.length}`);return{minutes:s8(t8(Z,0,$),0,59),hours:s8(t8(Z,1,$),0,23),daysOfMonth:s8(t8(Z,2,$),1,31),months:s8(t8(Z,3,$),1,12,Nz),daysOfWeek:s8(t8(Z,4,$),0,6,ZB)}}function R7($){M7($)}function QB($,Z,Q=Date.now()){v$($,Q,Z)}var $B=new Map,Ez=new Map(ZB.map(($,Z)=>[$,Z]));function JB($){let Z=$?.trim();return Z?Z:void 0}function WB($){let Z=$B.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 $B.set($,Q),Q}function wz($){let Z=JB($);if(!Z)return;WB(Z).format(new Date)}function Cz($,Z){let Q=WB(Z).formatToParts(new Date($)),J=new Map(Q.map((Y)=>[Y.type,Y.value])),W=J.get("weekday")?.toLowerCase().slice(0,3)??"",X=Ez.get(W);if(X===void 0)throw Error(`Unable to resolve weekday for timezone "${Z}"`);return{month:Number(J.get("month")),dayOfMonth:Number(J.get("day")),dayOfWeek:X,hour:Number(J.get("hour")),minute:Number(J.get("minute"))}}function Pz($){let Z=new Date($);return{month:Z.getMonth()+1,dayOfMonth:Z.getDate(),dayOfWeek:Z.getDay(),hour:Z.getHours(),minute:Z.getMinutes()}}function Sz($,Z){return $.months.includes(Z.month)&&$.daysOfMonth.includes(Z.dayOfMonth)&&$.daysOfWeek.includes(Z.dayOfWeek)&&$.hours.includes(Z.hour)&&$.minutes.includes(Z.minute)}function bz($,Z,Q){let J=M7($),W=new Date(Z);W.setSeconds(0,0);let X=W.getTime()+60000,Y=new Date(Z);Y.setFullYear(Y.getFullYear()+4);let j=Y.getTime();while(X<=j){if(Sz(J,Cz(X,Q)))return X;X+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Q}"`)}function v$($,Z,Q){let J=JB(Q);if(J)return wz(J),bz($,Z,J);let W=M7($),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:B,hour:H,minute:G}=Pz(X.getTime());if(!W.months.includes(j)){let K=W.months.find((A)=>A>j)??z7(W.months,"months"),F=K<=j?1:0;X=new Date(X.getFullYear()+F,K-1,1,0,0,0,0);continue}if(!W.daysOfMonth.includes(V)||!W.daysOfWeek.includes(B)){X=new Date(X.getFullYear(),X.getMonth(),V+1,0,0,0,0);continue}if(!W.hours.includes(H)){let K=W.hours.find((A)=>A>H)??z7(W.hours,"hours"),F=K<=H?1:0;X=new Date(X.getFullYear(),X.getMonth(),X.getDate()+F,K,0,0,0);continue}if(!W.minutes.includes(G)){let K=W.minutes.find((A)=>A>G)??z7(W.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 yz}from"node:crypto";import hz from"yaml";function kz($){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 Iz($){let Z=$.replace(/\r\n/g,`
212
212
  `);if(!Z.startsWith(`---
213
- `))return{frontmatter:void 0,body:$};let Q=Z.slice(4),W=Q.indexOf(`
214
- ---`);if(W===-1)return{frontmatter:void 0,body:$};let J=Q.slice(0,W),X=Q.slice(W+4);if(X.startsWith(`
215
- `))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 Gq($){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 O7($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function Kq($){let Z=O7($);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 Fq($){if(typeof $!=="string")return;let Z=$.trim().toLowerCase();if(Z==="act"||Z==="plan"||Z==="yolo")return Z;return}function nV($,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 Aq=new Set(U2);function fq($){let Z=nV($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((W)=>!Aq.has(W));if(Q.length>0)throw Error(`unknown tool(s): ${Q.join(", ")}`);return Z}var Uq=new Set(["rules","skills","plugins"]);function Dq($){let Z=nV($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((W)=>!Uq.has(W));if(Q.length>0)throw Error(`unknown extension(s): ${Q.join(", ")}`);return Z}function z7($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function T7($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function q7($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Q)=>q7(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)}:${q7(W)}`).join(",")}}`}function aV($,Z){let Q=jq("sha256");return Q.update(q7($)),Q.update(`
216
- `),Q.update(Z),Q.digest("hex")}function Lq($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var _q=["schedule","timezone"],zq=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],Tq=["cwd"];function iV($,Z,Q,W,J){return{externalId:$,relativePath:$,triggerKind:Z,body:Q,contentHash:aV(W,Q),error:J}}function Z1($,Z,Q,W,J,X){return{externalId:$,relativePath:Z,triggerKind:Q,body:W,contentHash:J,error:X}}function sV($){let Z=$.relativePath.replace(/\\/g,"/"),Q=Bq(Z),{frontmatter:W,body:J}=Hq($.raw),X={};if(W!==void 0&&W.trim().length>0)try{let U=Vq.parse(W);if(U&&typeof U==="object"&&!Array.isArray(U))X=U;else if(U!==null&&U!==void 0)return iV(Z,Q,J,{},"frontmatter must be a YAML mapping")}catch(U){return iV(Z,Q,J,{},U instanceof Error?`failed to parse frontmatter: ${U.message}`:"failed to parse frontmatter")}let Y=aV(X,J),j=I0(X.id),V=j??Z;if(Q!=="schedule"){for(let U of _q)if(X[U]!==void 0)return Z1(V,Z,Q,J,Y,`field "${U}" is only allowed on *.cron.md specs`)}for(let U of Tq)if(X[U]!==void 0)return Z1(V,Z,Q,J,Y,`field "${U}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Q!=="event"){for(let U of zq)if(X[U]!==void 0)return Z1(V,Z,Q,J,Y,`field "${U}" is only allowed on .event.md specs`)}let B=I0(X.prompt),H=J.trim(),G=B??(H.length>0?H:void 0);if(!G)return Z1(V,Z,Q,J,Y,"prompt is required (frontmatter `prompt` or markdown body)");let K=I0(X.workspaceRoot);if(!K)return Z1(V,Z,Q,J,Y,"workspaceRoot is required");let F,A;try{F=fq(X.tools),A=Dq(X.extensions)}catch(U){return Z1(V,Z,Q,J,Y,U instanceof Error?U.message:String(U))}let L=Fq(X.mode);if(X.mode!==void 0&&L===void 0)return Z1(V,Z,Q,J,Y,"mode must be one of: act, plan, yolo");let f={id:j,title:I0(X.title)??j??Lq(Z),prompt:G,workspaceRoot:K,mode:L??"yolo",systemPrompt:I0(X.systemPrompt),modelSelection:Kq(X.modelSelection),maxIterations:z7(X.maxIterations),timeoutSeconds:z7(X.timeoutSeconds),tools:F,notesDirectory:I0(X.notesDirectory),extensions:A,source:I0(X.source)??"user",tags:Gq(X.tags),enabled:typeof X.enabled==="boolean"?X.enabled:!0,metadata:O7(X.metadata)},D;if(Q==="schedule"){let U=I0(X.schedule);if(!U)return Z1(V,Z,Q,J,Y,"schedule is required for *.cron.md specs");let T=I0(X.timezone);try{lV(U,T)}catch(z){return Z1(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 Z1(V,Z,Q,J,Y,"event is required for .event.md specs");D={...f,triggerKind:"event",event:U,filters:O7(X.filters),debounceSeconds:T7(X.debounceSeconds),dedupeWindowSeconds:T7(X.dedupeWindowSeconds),cooldownSeconds:T7(X.cooldownSeconds),maxParallel:z7(X.maxParallel)}}else D={...f,triggerKind:"one_off"};return{externalId:V,relativePath:Z,triggerKind:Q,body:J,contentHash:Y,spec:D}}function Cq($,Z){return Eq($,Z).replace(/\\/g,"/")}function wq($){if(!Oq($))return[];let Z=[],Q=[$];while(Q.length>0){let W=Q.pop();if(!W)continue;let J;try{J=qq(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 M7{store;cronDir;constructor($){this.store=$.store,this.cronDir=Nq($.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=wq(this.cronDir),Q=new Set;for(let J of Z){let X=Cq(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=Mq(Z,"utf8"),J=Rq(Z).mtimeMs}catch{return}let Y=sV({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=h$($.scheduleExpr,W,$.timezone),X=new Date(J).toISOString();if($.nextRunAt!==X)this.store.updateSpecNextRunAt($.specId,X)}catch{}}}import{existsSync as Pq,mkdirSync as Sq,watch as bq}from"node:fs";import{relative as yq,resolve as hq}from"node:path";var kq=250;class R7{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??kq),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{Sq($,{recursive:!0}),this.watcher=bq($,{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=hq(this.reconciler.getCronDir(),$);if(!Pq(Z)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Q=yq(this.reconciler.getCronDir(),Z).replace(/\\/g,"/");await this.reconciler.reconcileFile(Q,Z),await this.onReconciled()}catch(Z){this.onError(Z)}}}import{randomUUID as i8}from"node:crypto";import{asOptionalString as k,asString as s,loadSqliteDb as xq,nowIso as F0}from"@cline/shared/db";import{resolveCronDbPath as gq}from"@cline/shared/storage";var Iq=[`CREATE TABLE IF NOT EXISTS cron_specs (
213
+ `))return{frontmatter:void 0,body:$};let Q=Z.slice(4),J=Q.indexOf(`
214
+ ---`);if(J===-1)return{frontmatter:void 0,body:$};let W=Q.slice(0,J),X=Q.slice(J+4);if(X.startsWith(`
215
+ `))X=X.slice(1);return{frontmatter:W,body:X}}function d0($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function xz($){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 w7($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function gz($){let Z=w7($);if(!Z)return;let Q=d0(Z.providerId),J=d0(Z.modelId);if(Q===void 0&&J===void 0)return;return{providerId:Q,modelId:J}}function mz($){if(typeof $!=="string")return;let Z=$.trim().toLowerCase();if(Z==="act"||Z==="plan"||Z==="yolo")return Z;return}function YB($,Z={}){let Q=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!Q)return;let J=[...new Set(Q.map((W)=>typeof W==="string"?W.trim():"").filter((W)=>W.length>0))];if(Array.isArray($)&&Z.preserveEmptyArray)return J;return J.length>0?J:void 0}var vz=new Set(O2);function cz($){let Z=YB($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((J)=>!vz.has(J));if(Q.length>0)throw Error(`unknown tool(s): ${Q.join(", ")}`);return Z}var uz=new Set(["rules","skills","plugins"]);function dz($){let Z=YB($,{preserveEmptyArray:!0});if(!Z)return;let Q=Z.filter((J)=>!uz.has(J));if(Q.length>0)throw Error(`unknown extension(s): ${Q.join(", ")}`);return Z}function N7($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function E7($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function C7($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Q)=>C7(Q)).join(",")}]`;let Z=Object.entries($).filter(([,Q])=>Q!==void 0);return Z.sort(([Q],[J])=>Q<J?-1:Q>J?1:0),`{${Z.map(([Q,J])=>`${JSON.stringify(Q)}:${C7(J)}`).join(",")}}`}function jB($,Z){let Q=yz("sha256");return Q.update(C7($)),Q.update(`
216
+ `),Q.update(Z),Q.digest("hex")}function lz($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var pz=["schedule","timezone"],rz=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],iz=["cwd"];function XB($,Z,Q,J,W){return{externalId:$,relativePath:$,triggerKind:Z,body:Q,contentHash:jB(J,Q),error:W}}function X1($,Z,Q,J,W,X){return{externalId:$,relativePath:Z,triggerKind:Q,body:J,contentHash:W,error:X}}function VB($){let Z=$.relativePath.replace(/\\/g,"/"),Q=kz(Z),{frontmatter:J,body:W}=Iz($.raw),X={};if(J!==void 0&&J.trim().length>0)try{let f=hz.parse(J);if(f&&typeof f==="object"&&!Array.isArray(f))X=f;else if(f!==null&&f!==void 0)return XB(Z,Q,W,{},"frontmatter must be a YAML mapping")}catch(f){return XB(Z,Q,W,{},f instanceof Error?`failed to parse frontmatter: ${f.message}`:"failed to parse frontmatter")}let Y=jB(X,W),j=d0(X.id),V=j??Z;if(Q!=="schedule"){for(let f of pz)if(X[f]!==void 0)return X1(V,Z,Q,W,Y,`field "${f}" is only allowed on *.cron.md specs`)}for(let f of iz)if(X[f]!==void 0)return X1(V,Z,Q,W,Y,`field "${f}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Q!=="event"){for(let f of rz)if(X[f]!==void 0)return X1(V,Z,Q,W,Y,`field "${f}" is only allowed on .event.md specs`)}let B=d0(X.prompt),H=W.trim(),G=B??(H.length>0?H:void 0);if(!G)return X1(V,Z,Q,W,Y,"prompt is required (frontmatter `prompt` or markdown body)");let K=d0(X.workspaceRoot);if(!K)return X1(V,Z,Q,W,Y,"workspaceRoot is required");let F,A;try{F=cz(X.tools),A=dz(X.extensions)}catch(f){return X1(V,Z,Q,W,Y,f instanceof Error?f.message:String(f))}let D=mz(X.mode);if(X.mode!==void 0&&D===void 0)return X1(V,Z,Q,W,Y,"mode must be one of: act, plan, yolo");let U={id:j,title:d0(X.title)??j??lz(Z),prompt:G,workspaceRoot:K,mode:D??"yolo",systemPrompt:d0(X.systemPrompt),modelSelection:gz(X.modelSelection),maxIterations:N7(X.maxIterations),timeoutSeconds:N7(X.timeoutSeconds),tools:F,notesDirectory:d0(X.notesDirectory),extensions:A,source:d0(X.source)??"user",tags:xz(X.tags),enabled:typeof X.enabled==="boolean"?X.enabled:!0,metadata:w7(X.metadata)},L;if(Q==="schedule"){let f=d0(X.schedule);if(!f)return X1(V,Z,Q,W,Y,"schedule is required for *.cron.md specs");let z=d0(X.timezone);try{QB(f,z)}catch(T){return X1(V,Z,Q,W,Y,T instanceof Error?T.message:String(T))}L={...U,triggerKind:"schedule",schedule:f,timezone:z}}else if(Q==="event"){let f=d0(X.event);if(!f)return X1(V,Z,Q,W,Y,"event is required for .event.md specs");L={...U,triggerKind:"event",event:f,filters:w7(X.filters),debounceSeconds:E7(X.debounceSeconds),dedupeWindowSeconds:E7(X.dedupeWindowSeconds),cooldownSeconds:E7(X.cooldownSeconds),maxParallel:N7(X.maxParallel)}}else L={...U,triggerKind:"one_off"};return{externalId:V,relativePath:Z,triggerKind:Q,body:W,contentHash:Y,spec:L}}function $M($,Z){return tz($,Z).replace(/\\/g,"/")}function ZM($){if(!nz($))return[];let Z=[],Q=[$];while(Q.length>0){let J=Q.pop();if(!J)continue;let W;try{W=az(J,{withFileTypes:!0})}catch{continue}for(let X of W){let Y=`${J}/${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 P7{store;cronDir;constructor($){this.store=$.store,this.cronDir=ez($.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=ZM(this.cronDir),Q=new Set;for(let W of Z){let X=$M(this.cronDir,W);Q.add(X),$.scanned+=1;let Y=await this.reconcileFile(X,W);if(Y){if($.changes.push(Y),$.upserted+=1,Y.parse.error)$.invalidParses+=1}}let J=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let W of J)if(!Q.has(W.sourcePath))this.handleFileDeleted(W),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,Z){let Q=this.store.getSpecBySourcePath($),J,W;try{J=oz(Z,"utf8"),W=sz(Z).mtimeMs}catch{return}let Y=VB({relativePath:$,raw:J}),j=this.store.upsertSpec({externalId:Y.externalId,sourcePath:$,triggerKind:Y.triggerKind,sourceMtimeMs:W,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(),J=$.lastRunAt?Math.max(Q,new Date($.lastRunAt).getTime()):Q,W=v$($.scheduleExpr,J,$.timezone),X=new Date(W).toISOString();if($.nextRunAt!==X)this.store.updateSpecNextRunAt($.specId,X)}catch{}}}import{existsSync as QM,mkdirSync as JM,watch as WM}from"node:fs";import{relative as XM,resolve as YM}from"node:path";var jM=250;class S7{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??jM),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{JM($,{recursive:!0}),this.watcher=WM($,{recursive:!0},(Z,Q)=>{if(!Q)return;let J=String(Q).replace(/\\/g,"/");if(!J.endsWith(".md"))return;if(J.startsWith("reports/"))return;this.scheduleReconcile(J)}),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=YM(this.reconciler.getCronDir(),$);if(!QM(Z)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Q=XM(this.reconciler.getCronDir(),Z).replace(/\\/g,"/");await this.reconciler.reconcileFile(Q,Z),await this.onReconciled()}catch(Z){this.onError(Z)}}}import{randomUUID as e8}from"node:crypto";import{asOptionalString as I,asString as t,loadSqliteDb as BM,nowIso as U0}from"@cline/shared/db";import{resolveCronDbPath as HM}from"@cline/shared/storage";var VM=[`CREATE TABLE IF NOT EXISTS cron_specs (
217
217
  spec_id TEXT PRIMARY KEY,
218
218
  external_id TEXT NOT NULL,
219
219
  source_path TEXT NOT NULL UNIQUE,
@@ -304,17 +304,17 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
304
304
  ON cron_specs(trigger_kind, enabled, next_run_at);`,`CREATE INDEX IF NOT EXISTS cron_specs_event_match_idx
305
305
  ON cron_specs(trigger_kind, event_type, enabled);`,`CREATE INDEX IF NOT EXISTS cron_specs_parse_status_idx
306
306
  ON cron_specs(parse_status, updated_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_source_path_idx
307
- ON cron_specs(source_path);`];function oV($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let Z of Iq)$.exec(Z)}function D5($){if(!$)return;try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function E7($,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 k$($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function r1($){return{specId:s($.spec_id),externalId:s($.external_id),sourcePath:s($.source_path),triggerKind:s($.trigger_kind),sourceMtimeMs:k$($.source_mtime_ms),sourceHash:k($.source_hash),parseStatus:s($.parse_status)==="invalid"?"invalid":"valid",parseError:k($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:s($.title),prompt:k($.prompt),workspaceRoot:k($.workspace_root),scheduleExpr:k($.schedule_expr),timezone:k($.timezone),eventType:k($.event_type),filters:D5(k($.filters_json)),debounceSeconds:k$($.debounce_seconds),dedupeWindowSeconds:k$($.dedupe_window_seconds),cooldownSeconds:k$($.cooldown_seconds),mode:k($.mode),systemPrompt:k($.system_prompt),providerId:k($.provider_id),modelId:k($.model_id),maxIterations:k$($.max_iterations),timeoutSeconds:k$($.timeout_seconds),maxParallel:k$($.max_parallel),tools:E7(k($.tools_json),{preserveEmpty:!0}),notesDirectory:k($.notes_directory),extensions:E7(k($.extensions_json),{preserveEmpty:!0}),source:k($.source),tags:E7(k($.tags_json)),metadata:D5(k($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:k($.last_materialized_run_id),lastRunAt:k($.last_run_at),nextRunAt:k($.next_run_at),createdAt:s($.created_at),updatedAt:s($.updated_at)}}function N7($){return{runId:s($.run_id),specId:s($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:s($.trigger_kind),status:s($.status),claimToken:k($.claim_token),claimStartedAt:k($.claim_started_at),claimUntilAt:k($.claim_until_at),scheduledFor:k($.scheduled_for),triggerEventId:k($.trigger_event_id),startedAt:k($.started_at),completedAt:k($.completed_at),sessionId:k($.session_id),reportPath:k($.report_path),error:k($.error),attemptCount:Number($.attempt_count??0),createdAt:s($.created_at),updatedAt:s($.updated_at)}}function tV($){return{eventId:s($.event_id),eventType:s($.event_type),source:s($.source),subject:k($.subject),occurredAt:s($.occurred_at),receivedAt:s($.received_at),workspaceRoot:k($.workspace_root),dedupeKey:k($.dedupe_key),payload:D5(k($.payload_json)),attributes:D5(k($.attributes_json)),processingStatus:s($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:k($.error),createdAt:s($.created_at),updatedAt:s($.updated_at)}}function eV($){return $?JSON.stringify($):null}var mq=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function $B($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function vq($,Z,Q,W){for(let J of mq){let X=$[J],Y=Z[J];if($B(X)!==$B(Y))return!0}if(Q===!1&&W===!0)return!0;return!1}function cq($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function uq($){return`hub/schedules/${$}.cron.md`}function dq($){let Z={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(Z).length>0?Z:void 0}function C7($){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:dq($)}}function ZB($){return JSON.stringify(C7($))}function lq($,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 n8{db;constructor($={}){let Z=$.dbPath??gq();this.db=xq(Z),oV(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return Z?r1(Z):void 0}getSpec($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return Z?r1(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?r1(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)=>r1(Y))}createHubSchedule($){let Z=`sched_${i8()}`,Q=this.upsertSpec({externalId:Z,sourcePath:uq(Z),triggerKind:"schedule",sourceHash:ZB($),parseStatus:"valid",spec:C7($)});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
307
+ ON cron_specs(source_path);`];function BB($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let Z of VM)$.exec(Z)}function M5($){if(!$)return;try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return}function b7($,Z={}){if(!$)return;try{let Q=JSON.parse($);if(!Array.isArray(Q))return;let J=Q.map((W)=>typeof W==="string"?W.trim():"").filter((W)=>W.length>0);if(Z.preserveEmpty)return J;return J.length>0?J:void 0}catch{return}}function c$($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function o1($){return{specId:t($.spec_id),externalId:t($.external_id),sourcePath:t($.source_path),triggerKind:t($.trigger_kind),sourceMtimeMs:c$($.source_mtime_ms),sourceHash:I($.source_hash),parseStatus:t($.parse_status)==="invalid"?"invalid":"valid",parseError:I($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:t($.title),prompt:I($.prompt),workspaceRoot:I($.workspace_root),scheduleExpr:I($.schedule_expr),timezone:I($.timezone),eventType:I($.event_type),filters:M5(I($.filters_json)),debounceSeconds:c$($.debounce_seconds),dedupeWindowSeconds:c$($.dedupe_window_seconds),cooldownSeconds:c$($.cooldown_seconds),mode:I($.mode),systemPrompt:I($.system_prompt),providerId:I($.provider_id),modelId:I($.model_id),maxIterations:c$($.max_iterations),timeoutSeconds:c$($.timeout_seconds),maxParallel:c$($.max_parallel),tools:b7(I($.tools_json),{preserveEmpty:!0}),notesDirectory:I($.notes_directory),extensions:b7(I($.extensions_json),{preserveEmpty:!0}),source:I($.source),tags:b7(I($.tags_json)),metadata:M5(I($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:I($.last_materialized_run_id),lastRunAt:I($.last_run_at),nextRunAt:I($.next_run_at),createdAt:t($.created_at),updatedAt:t($.updated_at)}}function y7($){return{runId:t($.run_id),specId:t($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:t($.trigger_kind),status:t($.status),claimToken:I($.claim_token),claimStartedAt:I($.claim_started_at),claimUntilAt:I($.claim_until_at),scheduledFor:I($.scheduled_for),triggerEventId:I($.trigger_event_id),startedAt:I($.started_at),completedAt:I($.completed_at),sessionId:I($.session_id),reportPath:I($.report_path),error:I($.error),attemptCount:Number($.attempt_count??0),createdAt:t($.created_at),updatedAt:t($.updated_at)}}function HB($){return{eventId:t($.event_id),eventType:t($.event_type),source:t($.source),subject:I($.subject),occurredAt:t($.occurred_at),receivedAt:t($.received_at),workspaceRoot:I($.workspace_root),dedupeKey:I($.dedupe_key),payload:M5(I($.payload_json)),attributes:M5(I($.attributes_json)),processingStatus:t($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:I($.error),createdAt:t($.created_at),updatedAt:t($.updated_at)}}function GB($){return $?JSON.stringify($):null}var GM=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function KB($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function KM($,Z,Q,J){for(let W of GM){let X=$[W],Y=Z[W];if(KB(X)!==KB(Y))return!0}if(Q===!1&&J===!0)return!0;return!1}function FM($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function AM($){return`hub/schedules/${$}.cron.md`}function fM($){let Z={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(Z).length>0?Z:void 0}function h7($){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:fM($)}}function FB($){return JSON.stringify(h7($))}function UM($,Z){let Q=$.metadata?{...$.metadata}:{},J=Z.createdBy===null?void 0:Z.createdBy!==void 0?Z.createdBy:typeof Q.__hubScheduleCreatedBy==="string"?Q.__hubScheduleCreatedBy:void 0,W=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:W,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:J,tags:Z.tags??$.tags,runtimeOptions:X,metadata:Z.metadata!==void 0?Z.metadata:Object.keys(Q).length>0?Q:void 0}}class $4{db;constructor($={}){let Z=$.dbPath??HM();this.db=BM(Z),BB(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return Z?o1(Z):void 0}getSpec($){let Z=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return Z?o1(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?o1(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 J=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${J} ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((Y)=>o1(Y))}createHubSchedule($){let Z=`sched_${e8()}`,Q=this.upsertSpec({externalId:Z,sourcePath:AM(Z),triggerKind:"schedule",sourceHash:FB($),parseStatus:"valid",spec:h7($)});this.initializeScheduleNextRun(Q.record.specId);let J=this.getSpec(Q.record.specId);if(!J)throw Error("failed to create hub schedule");return J}getHubSchedule($){let Z=this.db.prepare(`SELECT * FROM cron_specs
308
308
  WHERE external_id = ? AND source = 'hub-schedule' AND removed = 0
309
- ORDER BY created_at ASC LIMIT 1`).get($);return Z?r1(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
309
+ ORDER BY created_at ASC LIMIT 1`).get($);return Z?o1(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 J=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_specs
310
310
  WHERE ${Z.join(" AND ")}
311
- ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((X)=>r1(X))}updateHubSchedule($,Z){let Q=this.getHubSchedule($);if(!Q)return;let W=lq(Q,Z),J=this.upsertSpec({externalId:$,sourcePath:Q.sourcePath,triggerKind:"schedule",sourceHash:ZB(W),parseStatus:"valid",spec:C7(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:F0()})}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
311
+ ORDER BY created_at DESC LIMIT ?`).all(...Q,J).map((X)=>o1(X))}updateHubSchedule($,Z){let Q=this.getHubSchedule($);if(!Q)return;let J=UM(Q,Z),W=this.upsertSpec({externalId:$,sourcePath:Q.sourcePath,triggerKind:"schedule",sourceHash:FB(J),parseStatus:"valid",spec:h7(J)});if(Z.cronPattern!==void 0||Z.enabled!==void 0)this.initializeScheduleNextRun(W.record.specId);return this.getSpec(W.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:U0()})}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
312
312
  WHERE trigger_kind = 'event'
313
313
  AND event_type = ?
314
314
  AND enabled = 1
315
315
  AND removed = 0
316
316
  AND parse_status = 'valid'
317
- ORDER BY created_at ASC`).all($).map((Q)=>r1(Q))}upsertSpec($){let Z=F0(),Q=this.getSpecBySourcePath($.sourcePath),W=$.spec,J={title:W?.title??Q?.title??cq($.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 H=`cspec_${i8()}`;this.insertSpecRow(H,$,J,X,Z);let G=this.getSpec(H);if(!G)throw Error("failed to insert cron_spec row");return{record:G,created:!0,revisionChanged:!0}}let j=Q.sourceHash!==$.sourceHash&&vq(Q,J,Q.enabled,X),V=j?Q.revision+1:Q.revision;this.updateSpecRow(Q.specId,$,J,X,V,Z);let B=this.getSpec(Q.specId);if(!B)throw Error("failed to reload cron_spec after update");return{record:B,created:!1,revisionChanged:j}}insertSpecRow($,Z,Q,W,J){let X=Z.spec;this.db.prepare(`INSERT INTO cron_specs (
317
+ ORDER BY created_at ASC`).all($).map((Q)=>o1(Q))}upsertSpec($){let Z=U0(),Q=this.getSpecBySourcePath($.sourcePath),J=$.spec,W={title:J?.title??Q?.title??FM($.sourcePath),prompt:J?.prompt,workspaceRoot:J?.workspaceRoot,scheduleExpr:J?.triggerKind==="schedule"?J.schedule:void 0,timezone:J?.triggerKind==="schedule"?J.timezone:void 0,eventType:J?.triggerKind==="event"?J.event:void 0,filters:J?.triggerKind==="event"?J.filters:void 0,debounceSeconds:J?.triggerKind==="event"?J.debounceSeconds:void 0,dedupeWindowSeconds:J?.triggerKind==="event"?J.dedupeWindowSeconds:void 0,cooldownSeconds:J?.triggerKind==="event"?J.cooldownSeconds:void 0,mode:J?.mode,systemPrompt:J?.systemPrompt,providerId:J?.modelSelection?.providerId,modelId:J?.modelSelection?.modelId,maxIterations:J?.maxIterations,timeoutSeconds:J?.timeoutSeconds,maxParallel:J&&"maxParallel"in J?J.maxParallel:void 0,tools:J?.tools,notesDirectory:J?.notesDirectory,extensions:J?.extensions,source:J?.source},X=$.parseStatus==="valid"&&(J?.enabled??!0);if(!Q){let H=`cspec_${e8()}`;this.insertSpecRow(H,$,W,X,Z);let G=this.getSpec(H);if(!G)throw Error("failed to insert cron_spec row");return{record:G,created:!0,revisionChanged:!0}}let j=Q.sourceHash!==$.sourceHash&&KM(Q,W,Q.enabled,X),V=j?Q.revision+1:Q.revision;this.updateSpecRow(Q.specId,$,W,X,V,Z);let B=this.getSpec(Q.specId);if(!B)throw Error("failed to reload cron_spec after update");return{record:B,created:!1,revisionChanged:j}}insertSpecRow($,Z,Q,J,W){let X=Z.spec;this.db.prepare(`INSERT INTO cron_specs (
318
318
  spec_id, external_id, source_path, trigger_kind,
319
319
  source_mtime_ms, source_hash, parse_status, parse_error,
320
320
  enabled, removed, title, prompt, workspace_root,
@@ -325,7 +325,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
325
325
  tools_json, notes_directory, extensions_json, source,
326
326
  tags_json, metadata_json, revision,
327
327
  created_at, updated_at
328
- ) VALUES (${Array.from({length:36},()=>"?").join(",")})`).run($,Z.externalId,Z.sourcePath,Z.triggerKind,Z.sourceMtimeMs??null,Z.sourceHash,Z.parseStatus,Z.parseError??null,W?1:0,0,Q.title??"",Q.prompt??null,Q.workspaceRoot??null,Q.scheduleExpr??null,Q.timezone??null,Q.eventType??null,Q.filters?JSON.stringify(Q.filters):null,Q.debounceSeconds??null,Q.dedupeWindowSeconds??null,Q.cooldownSeconds??null,Q.mode??null,Q.systemPrompt??null,Q.providerId??null,Q.modelId??null,Q.maxIterations??null,Q.timeoutSeconds??null,Q.maxParallel??null,Q.tools?JSON.stringify(Q.tools):null,Q.notesDirectory??null,Q.extensions?JSON.stringify(Q.extensions):null,Q.source??null,X?.tags?JSON.stringify(X.tags):null,X?.metadata?JSON.stringify(X.metadata):null,1,J,J)}updateSpecRow($,Z,Q,W,J,X){let Y=Z.spec;this.db.prepare(`UPDATE cron_specs SET
328
+ ) VALUES (${Array.from({length:36},()=>"?").join(",")})`).run($,Z.externalId,Z.sourcePath,Z.triggerKind,Z.sourceMtimeMs??null,Z.sourceHash,Z.parseStatus,Z.parseError??null,J?1:0,0,Q.title??"",Q.prompt??null,Q.workspaceRoot??null,Q.scheduleExpr??null,Q.timezone??null,Q.eventType??null,Q.filters?JSON.stringify(Q.filters):null,Q.debounceSeconds??null,Q.dedupeWindowSeconds??null,Q.cooldownSeconds??null,Q.mode??null,Q.systemPrompt??null,Q.providerId??null,Q.modelId??null,Q.maxIterations??null,Q.timeoutSeconds??null,Q.maxParallel??null,Q.tools?JSON.stringify(Q.tools):null,Q.notesDirectory??null,Q.extensions?JSON.stringify(Q.extensions):null,Q.source??null,X?.tags?JSON.stringify(X.tags):null,X?.metadata?JSON.stringify(X.metadata):null,1,W,W)}updateSpecRow($,Z,Q,J,W,X){let Y=Z.spec;this.db.prepare(`UPDATE cron_specs SET
329
329
  external_id = ?, trigger_kind = ?,
330
330
  source_mtime_ms = ?, source_hash = ?, parse_status = ?, parse_error = ?,
331
331
  enabled = ?, removed = 0, title = ?, prompt = ?,
@@ -337,31 +337,31 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
337
337
  tools_json = ?, notes_directory = ?, extensions_json = ?, source = ?,
338
338
  tags_json = ?, metadata_json = ?,
339
339
  revision = ?, updated_at = ?
340
- WHERE spec_id = ?`).run(Z.externalId,Z.triggerKind,Z.sourceMtimeMs??null,Z.sourceHash,Z.parseStatus,Z.parseError??null,W?1:0,Q.title??"",Q.prompt??null,Q.workspaceRoot??null,Q.scheduleExpr??null,Q.timezone??null,Q.eventType??null,Q.filters?JSON.stringify(Q.filters):null,Q.debounceSeconds??null,Q.dedupeWindowSeconds??null,Q.cooldownSeconds??null,Q.mode??null,Q.systemPrompt??null,Q.providerId??null,Q.modelId??null,Q.maxIterations??null,Q.timeoutSeconds??null,Q.maxParallel??null,Q.tools?JSON.stringify(Q.tools):null,Q.notesDirectory??null,Q.extensions?JSON.stringify(Q.extensions):null,Q.source??null,Y?.tags?JSON.stringify(Y.tags):null,Y?.metadata?JSON.stringify(Y.metadata):null,J,X,$)}markSpecRemoved($){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(F0(),$)}updateSpecNextRunAt($,Z){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(Z??null,F0(),$)}updateSpecLastRunAt($,Z){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(Z,F0(),$)}updateLastMaterializedRunId($,Z){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(Z,F0(),$)}initializeScheduleNextRun($){let Z=this.getSpec($);if(!Z||Z.triggerKind!=="schedule"||!Z.enabled||!Z.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let Q=new Date(h$(Z.scheduleExpr,Date.now(),Z.timezone)).toISOString();this.updateSpecNextRunAt($,Q)}materializeDueScheduleRun($){let Z=$.nowMs,Q=new Date(Z).toISOString();this.db.exec("BEGIN IMMEDIATE;");try{let W=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($.specId);if(!W)return this.db.exec("COMMIT;"),{queued:!1};let J=r1(W);if(J.triggerKind!=="schedule"||!J.enabled||J.removed||J.parseStatus!=="valid"||!J.scheduleExpr)return this.db.exec("COMMIT;"),{queued:!1};let X=J.nextRunAt;if(!X){let V=new Date(h$(J.scheduleExpr,Z,J.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(V,Q,J.specId),this.db.exec("COMMIT;"),{queued:!1,nextRunAt:V}}if(new Date(X).getTime()>Z)return this.db.exec("COMMIT;"),{queued:!1,nextRunAt:X};let Y=`crun_${i8()}`,j;try{j=new Date(h$(J.scheduleExpr,Z,J.timezone)).toISOString()}catch{j=void 0}return this.db.prepare(`INSERT INTO cron_runs (
340
+ WHERE spec_id = ?`).run(Z.externalId,Z.triggerKind,Z.sourceMtimeMs??null,Z.sourceHash,Z.parseStatus,Z.parseError??null,J?1:0,Q.title??"",Q.prompt??null,Q.workspaceRoot??null,Q.scheduleExpr??null,Q.timezone??null,Q.eventType??null,Q.filters?JSON.stringify(Q.filters):null,Q.debounceSeconds??null,Q.dedupeWindowSeconds??null,Q.cooldownSeconds??null,Q.mode??null,Q.systemPrompt??null,Q.providerId??null,Q.modelId??null,Q.maxIterations??null,Q.timeoutSeconds??null,Q.maxParallel??null,Q.tools?JSON.stringify(Q.tools):null,Q.notesDirectory??null,Q.extensions?JSON.stringify(Q.extensions):null,Q.source??null,Y?.tags?JSON.stringify(Y.tags):null,Y?.metadata?JSON.stringify(Y.metadata):null,W,X,$)}markSpecRemoved($){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(U0(),$)}updateSpecNextRunAt($,Z){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(Z??null,U0(),$)}updateSpecLastRunAt($,Z){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(Z,U0(),$)}updateLastMaterializedRunId($,Z){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(Z,U0(),$)}initializeScheduleNextRun($){let Z=this.getSpec($);if(!Z||Z.triggerKind!=="schedule"||!Z.enabled||!Z.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let Q=new Date(v$(Z.scheduleExpr,Date.now(),Z.timezone)).toISOString();this.updateSpecNextRunAt($,Q)}materializeDueScheduleRun($){let Z=$.nowMs,Q=new Date(Z).toISOString();this.db.exec("BEGIN IMMEDIATE;");try{let J=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($.specId);if(!J)return this.db.exec("COMMIT;"),{queued:!1};let W=o1(J);if(W.triggerKind!=="schedule"||!W.enabled||W.removed||W.parseStatus!=="valid"||!W.scheduleExpr)return this.db.exec("COMMIT;"),{queued:!1};let X=W.nextRunAt;if(!X){let V=new Date(v$(W.scheduleExpr,Z,W.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(V,Q,W.specId),this.db.exec("COMMIT;"),{queued:!1,nextRunAt:V}}if(new Date(X).getTime()>Z)return this.db.exec("COMMIT;"),{queued:!1,nextRunAt:X};let Y=`crun_${e8()}`,j;try{j=new Date(v$(W.scheduleExpr,Z,W.timezone)).toISOString()}catch{j=void 0}return this.db.prepare(`INSERT INTO cron_runs (
341
341
  run_id, spec_id, spec_revision, trigger_kind, status,
342
342
  scheduled_for, trigger_event_id, attempt_count,
343
343
  created_at, updated_at
344
- ) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(Y,J.specId,J.revision,"schedule","queued",X,null,0,Q,Q),this.db.prepare(`UPDATE cron_specs SET
344
+ ) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(Y,W.specId,W.revision,"schedule","queued",X,null,0,Q,Q),this.db.prepare(`UPDATE cron_specs SET
345
345
  last_materialized_run_id = ?,
346
346
  last_run_at = ?,
347
347
  next_run_at = ?,
348
348
  updated_at = ?
349
- WHERE spec_id = ?`).run(Y,Q,j??null,Q,J.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(Y),nextRunAt:j}}catch(W){throw this.db.exec("ROLLBACK;"),W}}getRun($){let Z=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get($);return Z?N7(Z):void 0}insertEventLog($,Z={}){let Q=F0(),W=Z.receivedAtIso??Q,J=$.eventId.trim();if(!J)throw Error("automation event requires eventId");let X=$.eventType.trim();if(!X)throw Error("automation event requires eventType");let Y=$.source.trim();if(!Y)throw Error("automation event requires source");let j=$.occurredAt.trim()||W,V=this.db.prepare(`INSERT OR IGNORE INTO cron_event_log (
349
+ WHERE spec_id = ?`).run(Y,Q,j??null,Q,W.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(Y),nextRunAt:j}}catch(J){throw this.db.exec("ROLLBACK;"),J}}getRun($){let Z=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get($);return Z?y7(Z):void 0}insertEventLog($,Z={}){let Q=U0(),J=Z.receivedAtIso??Q,W=$.eventId.trim();if(!W)throw Error("automation event requires eventId");let X=$.eventType.trim();if(!X)throw Error("automation event requires eventType");let Y=$.source.trim();if(!Y)throw Error("automation event requires source");let j=$.occurredAt.trim()||J,V=this.db.prepare(`INSERT OR IGNORE INTO cron_event_log (
350
350
  event_id, event_type, source, subject,
351
351
  occurred_at, received_at, workspace_root, dedupe_key,
352
352
  payload_json, attributes_json, processing_status,
353
353
  matched_spec_count, queued_run_count, suppressed_count,
354
354
  error, created_at, updated_at
355
- ) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(J,X,Y,$.subject?.trim()||null,j,W,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,eV($.payload),eV($.attributes),"received",0,0,0,null,Q,Q).changes??0,B=this.getEventLog(J);if(!B)throw Error("failed to insert cron_event_log row");return{record:B,created:V===1}}getEventLog($){let Z=this.db.prepare("SELECT * FROM cron_event_log WHERE event_id = ?").get($);return Z?tV(Z):void 0}listEventLogs($={}){let Z=[],Q=[];if($.eventType)Z.push("event_type = ?"),Q.push($.eventType);if($.source)Z.push("source = ?"),Q.push($.source);if($.processingStatus)Z.push("processing_status = ?"),Q.push($.processingStatus);let W=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_event_log ${W}
355
+ ) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(W,X,Y,$.subject?.trim()||null,j,J,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,GB($.payload),GB($.attributes),"received",0,0,0,null,Q,Q).changes??0,B=this.getEventLog(W);if(!B)throw Error("failed to insert cron_event_log row");return{record:B,created:V===1}}getEventLog($){let Z=this.db.prepare("SELECT * FROM cron_event_log WHERE event_id = ?").get($);return Z?HB(Z):void 0}listEventLogs($={}){let Z=[],Q=[];if($.eventType)Z.push("event_type = ?"),Q.push($.eventType);if($.source)Z.push("source = ?"),Q.push($.source);if($.processingStatus)Z.push("processing_status = ?"),Q.push($.processingStatus);let J=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_event_log ${J}
356
356
  ORDER BY received_at DESC, created_at DESC
357
- LIMIT ?`).all(...Q,J).map((Y)=>tV(Y))}updateEventLogProcessing($,Z){return(this.db.prepare(`UPDATE cron_event_log SET
357
+ LIMIT ?`).all(...Q,W).map((Y)=>HB(Y))}updateEventLogProcessing($,Z){return(this.db.prepare(`UPDATE cron_event_log SET
358
358
  processing_status = ?,
359
359
  matched_spec_count = COALESCE(?, matched_spec_count),
360
360
  queued_run_count = COALESCE(?, queued_run_count),
361
361
  suppressed_count = COALESCE(?, suppressed_count),
362
362
  error = ?,
363
363
  updated_at = ?
364
- WHERE event_id = ?`).run(Z.status,Z.matchedSpecCount??null,Z.queuedRunCount??null,Z.suppressedCount??null,Z.error??null,F0(),$).changes??0)===1}listRuns($={}){let Z=[],Q=[];if($.specId)Z.push("spec_id = ?"),Q.push($.specId);if($.status){let Y=Array.isArray($.status)?$.status:[$.status];if(Y.length>0){let j=Y.map(()=>"?").join(",");Z.push(`status IN (${j})`);for(let V of Y)Q.push(V)}}let W=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",J=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${W} ORDER BY created_at DESC LIMIT ?`).all(...Q,J).map((Y)=>N7(Y))}hasRecentEventRunForDedupe($){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
364
+ WHERE event_id = ?`).run(Z.status,Z.matchedSpecCount??null,Z.queuedRunCount??null,Z.suppressedCount??null,Z.error??null,U0(),$).changes??0)===1}listRuns($={}){let Z=[],Q=[];if($.specId)Z.push("spec_id = ?"),Q.push($.specId);if($.status){let Y=Array.isArray($.status)?$.status:[$.status];if(Y.length>0){let j=Y.map(()=>"?").join(",");Z.push(`status IN (${j})`);for(let V of Y)Q.push(V)}}let J=Z.length>0?`WHERE ${Z.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${J} ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((Y)=>y7(Y))}hasRecentEventRunForDedupe($){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
365
365
  INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
366
366
  WHERE r.spec_id = ?
367
367
  AND r.trigger_kind = 'event'
@@ -379,7 +379,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
379
379
  AND r.status = 'queued'
380
380
  AND e.dedupe_key = ?
381
381
  ORDER BY COALESCE(r.scheduled_for, r.created_at) DESC
382
- LIMIT 1`).get($.specId,$.dedupeKey);return Z?N7(Z):void 0}updateQueuedEventRunForDebounce($){let Z=F0();if((this.db.prepare(`UPDATE cron_runs SET
382
+ LIMIT 1`).get($.specId,$.dedupeKey);return Z?y7(Z):void 0}updateQueuedEventRunForDebounce($){let Z=U0();if((this.db.prepare(`UPDATE cron_runs SET
383
383
  trigger_event_id = ?,
384
384
  scheduled_for = ?,
385
385
  updated_at = ?
@@ -388,12 +388,12 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
388
388
  AND status = 'queued'`).run($.triggerEventId,$.scheduledFor,Z,$.runId).changes??0)!==1)return;return this.getRun($.runId)}hasOneOffRunForRevision($,Z){return!!this.db.prepare(`SELECT run_id FROM cron_runs
389
389
  WHERE spec_id = ? AND spec_revision = ?
390
390
  AND trigger_kind = 'one_off'
391
- LIMIT 1`).get($,Z)}enqueueRun($){let Z=`crun_${i8()}`,Q=F0();this.db.prepare(`INSERT INTO cron_runs (
391
+ LIMIT 1`).get($,Z)}enqueueRun($){let Z=`crun_${e8()}`,Q=U0();this.db.prepare(`INSERT INTO cron_runs (
392
392
  run_id, spec_id, spec_revision, trigger_kind, status,
393
393
  scheduled_for, trigger_event_id, attempt_count,
394
394
  created_at, updated_at
395
- ) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(Z,$.specId,$.specRevision,$.triggerKind,"queued",$.scheduledFor??null,$.triggerEventId??null,0,Q,Q),this.updateLastMaterializedRunId($.specId,Z);let W=this.getRun(Z);if(!W)throw Error("failed to insert cron_run row");return W}cancelQueuedRunsForSpec($){return this.db.prepare(`UPDATE cron_runs SET status = 'cancelled', updated_at = ?
396
- WHERE spec_id = ? AND status = 'queued'`).run(F0(),$).changes??0}claimDueRuns($){let Z=$.nowIso,Q=Math.max(1000,Math.floor($.leaseMs)),W=new Date(new Date(Z).getTime()+Q).toISOString(),J=Math.max(1,Math.floor($.limit??25)),X=[];this.db.exec("BEGIN IMMEDIATE;");try{let Y=this.db.prepare(`SELECT * FROM cron_runs
395
+ ) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(Z,$.specId,$.specRevision,$.triggerKind,"queued",$.scheduledFor??null,$.triggerEventId??null,0,Q,Q),this.updateLastMaterializedRunId($.specId,Z);let J=this.getRun(Z);if(!J)throw Error("failed to insert cron_run row");return J}cancelQueuedRunsForSpec($){return this.db.prepare(`UPDATE cron_runs SET status = 'cancelled', updated_at = ?
396
+ WHERE spec_id = ? AND status = 'queued'`).run(U0(),$).changes??0}claimDueRuns($){let Z=$.nowIso,Q=Math.max(1000,Math.floor($.leaseMs)),J=new Date(new Date(Z).getTime()+Q).toISOString(),W=Math.max(1,Math.floor($.limit??25)),X=[];this.db.exec("BEGIN IMMEDIATE;");try{let Y=this.db.prepare(`SELECT * FROM cron_runs
397
397
  WHERE (
398
398
  status = 'queued'
399
399
  OR (
@@ -405,7 +405,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
405
405
  )
406
406
  AND (scheduled_for IS NULL OR scheduled_for <= ?)
407
407
  ORDER BY COALESCE(scheduled_for, created_at) ASC
408
- LIMIT ?`).all(Z,Z,J);for(let j of Y){let V=s(j.run_id);if(!V)continue;let B=`cclaim_${i8()}`;if((this.db.prepare(`UPDATE cron_runs SET
408
+ LIMIT ?`).all(Z,Z,W);for(let j of Y){let V=t(j.run_id);if(!V)continue;let B=`cclaim_${e8()}`;if((this.db.prepare(`UPDATE cron_runs SET
409
409
  status = 'running',
410
410
  claim_token = ?,
411
411
  claim_started_at = ?,
@@ -426,8 +426,8 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
426
426
  AND claim_until_at <= ?
427
427
  AND completed_at IS NULL
428
428
  )
429
- )`).run(B,Z,W,Z,Z,V,Z).changes??0)!==1)continue;let G=this.getRun(V);if(!G)continue;X.push({run:G,claimToken:B,claimUntilAt:W})}this.db.exec("COMMIT;")}catch(Y){throw this.db.exec("ROLLBACK;"),Y}return X}renewClaim($,Z,Q){return(this.db.prepare(`UPDATE cron_runs SET claim_until_at = ?, updated_at = ?
430
- WHERE run_id = ? AND claim_token = ?`).run(Q,F0(),$,Z).changes??0)===1}completeRun($,Z){let Q=Z.completedAtIso??F0(),W=Z.claimToken?"WHERE run_id = ? AND claim_token = ?":"WHERE run_id = ?";return(this.db.prepare(`UPDATE cron_runs SET
429
+ )`).run(B,Z,J,Z,Z,V,Z).changes??0)!==1)continue;let G=this.getRun(V);if(!G)continue;X.push({run:G,claimToken:B,claimUntilAt:J})}this.db.exec("COMMIT;")}catch(Y){throw this.db.exec("ROLLBACK;"),Y}return X}renewClaim($,Z,Q){return(this.db.prepare(`UPDATE cron_runs SET claim_until_at = ?, updated_at = ?
430
+ WHERE run_id = ? AND claim_token = ?`).run(Q,U0(),$,Z).changes??0)===1}completeRun($,Z){let Q=Z.completedAtIso??U0(),J=Z.claimToken?"WHERE run_id = ? AND claim_token = ?":"WHERE run_id = ?";return(this.db.prepare(`UPDATE cron_runs SET
431
431
  status = ?,
432
432
  session_id = COALESCE(?, session_id),
433
433
  report_path = COALESCE(?, report_path),
@@ -437,7 +437,7 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
437
437
  claim_token = NULL,
438
438
  claim_until_at = NULL,
439
439
  updated_at = ?
440
- ${W}`).run(Z.status,Z.sessionId??null,Z.reportPath??null,Z.error??null,Q,Q,$,...Z.claimToken?[Z.claimToken]:[]).changes??0)>0}requeueRun($){let Z=F0();return(this.db.prepare(`UPDATE cron_runs SET
440
+ ${J}`).run(Z.status,Z.sessionId??null,Z.reportPath??null,Z.error??null,Q,Q,$,...Z.claimToken?[Z.claimToken]:[]).changes??0)>0}requeueRun($){let Z=U0();return(this.db.prepare(`UPDATE cron_runs SET
441
441
  status = 'queued',
442
442
  claim_started_at = NULL,
443
443
  claim_token = NULL,
@@ -449,41 +449,45 @@ ${JSON.stringify(W,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
449
449
  error = ?,
450
450
  scheduled_for = COALESCE(?, scheduled_for),
451
451
  updated_at = ?
452
- WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,Z,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,Z){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(Z,F0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,F0(),$)}}class a8{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new n8({dbPath:$.dbPath});let Z=$.specs;this.reconciler=new M7({store:this.store,specs:Z}),this.materializer=new d8({store:this.store}),this.eventIngress=new G7({store:this.store,logger:$.logger}),this.runner=new l8({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:Z,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new R7({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let W=$.logger;if(W)if(W.error)W.error("cron.watcher.failed",{error:Q});else W.log("cron.watcher.failed",{error:Q})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}import{readdir as QM,readFile as BB}from"node:fs/promises";import{join as HB}from"node:path";import{formatDisplayUserInput as WM,normalizeUserInput as JM}from"@cline/shared";import{resolveSessionDataDir as GB}from"@cline/shared/storage";import{mkdirSync as iq,writeFileSync as nq}from"node:fs";import{dirname as aq}from"node:path";import{normalizeUserInput as sq,stripModeNotices as oq}from"@cline/shared";import{nanoid as tq}from"nanoid";import{nanoid as pq}from"nanoid";function s8($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function L5($,Z){let Q=s8($),W=s8(Z),J=`${Q}__${W}`;return J.length>180?J.slice(0,180):J}function w7($,Z){let Q=s8($),W=s8(Z);return`${Q}__teamtask__${W}__${pq(6)}`}function o8($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+12),X=J.lastIndexOf("__");if(X<=0)return null;let Y=J.slice(0,X),j=J.slice(X+2);if(!W||!Y||!j)return null;return{rootSessionId:W,agentId:Y,teamTaskId:j}}function _5($){if(o8($))return null;let Z="__",Q=$.indexOf(Z);if(Q<=0)return null;let W=$.slice(0,Q),J=$.slice(Q+Z.length);if(!W||!J)return null;return{rootSessionId:W,agentId:J}}function P7($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let Z=String($.reason??"").toLowerCase();if(Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt"))return"cancelled";if(Z.includes("fail")||Z.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as o}from"zod";var rq=o.enum(gZ),N0=o.object({version:o.literal(1),session_id:o.string().min(1),source:o.string().min(1),pid:o.number().int(),started_at:o.string().min(1),ended_at:o.string().min(1).optional(),exit_code:o.number().int().nullable().optional(),status:rq,interactive:o.boolean(),provider:o.string().min(1),model:o.string().min(1),cwd:o.string().min(1),workspace_root:o.string().min(1),team_name:o.string().min(1).optional(),enable_tools:o.boolean(),enable_spawn:o.boolean(),enable_teams:o.boolean(),prompt:o.string().optional(),metadata:o.record(o.string(),o.unknown()).optional(),messages_path:o.string().min(1).optional()});function QB($){if(!$)return!1;return Object.values($).some((Z)=>typeof Z==="function")}function b7($,Z){let Q=[...$??[],...Z??[]];if(Q.length===0)return;let W=[],J=new Set;for(let X of Q){if(J.has(X.name))continue;J.add(X.name),W.push(X)}return W}function WB($){return JSON.stringify($,(Z,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function D1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function S7($,Z){let Q={...$};Q.id=D1(Q.id)??tq();let W=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,J={id:D1(W?.id)??D1(Q.modelId)??D1(Z?.id),provider:D1(W?.provider)??D1(Q.providerId)??D1(Z?.provider),family:D1(W?.family)??D1(Z?.family)};if(delete Q.providerId,delete Q.modelId,J.id&&J.provider)Q.modelInfo={id:J.id,provider:J.provider,...J.family?{family:J.family}:{}};else delete Q.modelInfo;return Q}function z5($){return $.map((Z)=>S7(Z))}function T5($,Z,Q=[]){let W=$.map((V,B)=>{let H=Q[B],K=H?.role===V.role&&JSON.stringify(H.content)===JSON.stringify(V.content)?{...H,...V}:{...V};return S7(K)}),J=Q.length,X=[];for(let V=J;V<W.length;V+=1)if(W[V]?.role==="assistant")X.push(V);if(X.length===0){let V=[...W].reverse().findIndex((B)=>B.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 B=W[V],H=B.metrics;if(!H&&V===Y&&!j){let G=Z.usage;H={inputTokens:G.inputTokens,outputTokens:G.outputTokens,cacheReadTokens:G.cacheReadTokens??0,cacheWriteTokens:G.cacheWriteTokens??0,cost:G.totalCost}}W[V]={...S7(B,{id:Z.model.id,provider:Z.model.provider,family:Z.model.info?.family}),...H?{metrics:H}:{},ts:B.ts??Z.endedAt.getTime()}}return W}function t8($){return{sessionId:$.sessionId,source:$.source,pid:$.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??void 0,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:$.parentSessionId??void 0,parentAgentId:$.parentAgentId??void 0,agentId:$.agentId??void 0,conversationId:$.conversationId??void 0,isSubagent:$.isSubagent,prompt:$.prompt??void 0,metadata:$.metadata??void 0,messagesPath:$.messagesPath??void 0,updatedAt:$.updatedAt}}var eq=120;function I$($){let Z=$?.trim();return Z?Z.slice(0,eq):void 0}function y7($){let Z=oq(sq($??"")).trim();if(!Z)return;return I$(Z.split(`
453
- `)[0]?.trim())}function i1($){if(!$)return;let Z={...$},Q=I$(typeof Z.title==="string"?Z.title:void 0);if(Q)Z.title=Q;else delete Z.title;return Object.keys(Z).length>0?Z:void 0}function e8($){let Z=i1($.metadata)??{},Q=$.title!==void 0?I$($.title):y7($.prompt);if(Q)Z.title=Q;return Object.keys(Z).length>0?Z:void 0}function h7($){let Z=o8($);if(Z)return{agent:"teammate",sessionId:Z.rootSessionId,taskType:"team"};let Q=_5($);if(Q)return{agent:"subagent",sessionId:Q.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function k7($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:z5($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function JB($,Z,Q){iq(aq($),{recursive:!0}),nq($,`${JSON.stringify(k7({updatedAt:Z,context:Q,messages:[]}),null,2)}
454
- `,"utf8")}function XB($,Z){return N0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:Z?.endedAt??$.endedAt??void 0,exit_code:Z?.exitCode??$.exitCode??void 0,status:Z?.status??$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName??void 0,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt??void 0,metadata:Z?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function YB($,Z,Q){let W=0;while(!0){let J=await $();if(J===void 0)return{updated:!1};let X=await Z(J);if(typeof X==="object"&&X!==null&&"updated"in X&&X.updated===!1){if(W+=1,W>=Q)return X;continue}return X}}import{existsSync as $M}from"node:fs";import{readFile as ZM}from"node:fs/promises";class $4{listeners=new Set;subscribe($,Z){let Q={listener:$,sessionId:Z?.sessionId?.trim()||void 0};return this.listeners.add(Q),()=>{this.listeners.delete(Q)}}emit($){let Z=$.payload.sessionId?.trim();for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==Z)continue;Q.listener($)}}get size(){return this.listeners.size}}async function n1($){let Z=$?.trim();if(!Z||!$M(Z))return[];try{let Q=(await ZM(Z,"utf8")).trim();if(!Q)return[];let W=JSON.parse(Q);if(Array.isArray(W))return W;if(W&&typeof W==="object"&&!Array.isArray(W)){let J=W.messages;if(Array.isArray(J))return J}return[]}catch{return[]}}function I7($){return $?{...$}:void 0}async function jB($,Z){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await Z.queueSpawnRequest($);let W=await Z.upsertSubagentSessionFromHook($);if(!W)return;await Z.appendSubagentHookAudit(W,$),await Z.applySubagentStatus(W,$)}function Z4($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function x0($){let Z=Z4($);if(!Z)return;return Z.toLowerCase()==="unknown"?void 0:Z}function O5($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function XM($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function g7($){let Z=$??200;return Number.isFinite(Z)?Math.max(0,Math.floor(Z)):200}function YM($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function jM($){return $.isSubagent!==!0&&!Z4($.parentSessionId)}function VM($){let Z=$.match(/\d{13,}/g);if(!Z||Z.length===0)return 0;let Q=0;for(let W of Z){let J=Number.parseInt(W,10);if(Number.isFinite(J)&&J>Q)Q=J}return Q}function m7($){return{sessionId:$.session_id,source:$.source,pid:$.pid,startedAt:$.started_at,endedAt:$.ended_at??null,exitCode:$.exit_code??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspace_root,teamName:$.team_name,enableTools:$.enable_tools,enableSpawn:$.enable_spawn,enableTeams:$.enable_teams,isSubagent:!1,prompt:$.prompt,metadata:$.metadata,messagesPath:$.messages_path,updatedAt:$.ended_at??$.started_at}}async function BM($){let Z=g7($);if(Z===0)return[];let Q=GB(),J=(await QM(Q,{withFileTypes:!0}).catch(()=>[])).filter((Y)=>Y.isDirectory()).map((Y)=>({entry:Y,recency:VM(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=HB(Q,j,`${j}.json`),B=await BB(V,"utf8").catch(()=>{return});if(!B)return;let H;try{H=JSON.parse(B)}catch{return}let G=N0.safeParse(H);if(!G.success)return;return m7(G.data)}))).filter((Y)=>Boolean(Y)).sort((Y,j)=>j.startedAt.localeCompare(Y.startedAt)).slice(0,Z)}async function HM($,Z,Q){let W=g7(Z);if(W===0)return await $.listSessions(0),[];let J=Q.includeSubagents?W:YM(W),X=await $.listSessions(J);return(Q.includeSubagents?X:X.filter(jM)).slice(0,W)}function GM($){if(typeof $==="string")return $.trim();let Z=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let W=Q;if(W.type!=="text")continue;let J=W.text?.trim();if(J)Z.push(J)}return Z.join(`
455
- `).trim()}function VB($){return $.replace(/\s+/g," ").trim()}function KM($,Z){if($.length<=Z)return $;return`${$.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function FM($){for(let Z of["user","assistant"])for(let Q of $){if(Q.role!==Z)continue;let W=VB(GM(Q.content));if(!W)continue;let J=Z==="user"?VB(WM(W)):W,X=JM(J.split(`
456
- `)[0]??J);return KM(X,50)}return}function AM($){let Z=0;for(let Q of $)Z+=O5(Q.metrics?.cost)??0;return Z}function fM($){let Z,Q;for(let W=$.length-1;W>=0;W-=1){let J=$[W];if(!Z)Z=x0(J.modelInfo?.provider);if(!Q)Q=x0(J.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function UM($){return x0($?.provider)??x0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function DM($){return x0($?.model)??x0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function x7($,Z){let Q=XM($.metadata),W=Z4(Z?.title)??Z4(Q?.title),J=O5(Z?.totalCost)??O5(Q?.totalCost),X=Q||W!==void 0||J!==void 0?{...Q??{},...W!==void 0?{title:W}:{},...J!==void 0?{totalCost:J}:{}}:void 0;return{...$,provider:x0(Z?.provider)??x0($.provider)??UM(Q)??"",model:x0(Z?.model)??x0($.model)??DM(Q)??"",metadata:X}}function LM($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function _M($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!LM(Q)}async function zM($,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 _M(Q,W)?{...Q,status:"idle"}:Q}))}async function TM($,Z){return await Promise.all(Z.map(async(Q)=>{let W=x7(Q),J=Boolean(Z4(W.metadata?.title)),X=Boolean(x0(W.provider)),Y=Boolean(x0(W.model)),j=O5(W.metadata?.totalCost),V=j!==void 0&&j>0;if(J&&X&&Y&&V)return W;let B=await $.readSessionMessages(Q.sessionId);if(B.length===0)return W;let H=fM(B),G=AM(B);return x7(Q,{title:J?void 0:FM(B),provider:X?void 0:H.provider,model:Y?void 0:H.model,totalCost:V||G<=0?void 0:G})}))}async function v7($,Z={}){let Q=g7(Z.limit),W=Z.includeSubagents===!0,J=await HM($,Q,{includeSubagents:W}),X=Z.includeManifestFallback===!0&&J.length<Q?await BM(Math.min(Math.max(Q*2,100),500)):[],Y=new Map;for(let B of[...J,...X]){if(Y.has(B.sessionId))continue;Y.set(B.sessionId,B)}let j=X.length===0?J:Array.from(Y.values()).sort((B,H)=>H.startedAt.localeCompare(B.startedAt)).slice(0,Q),V=await zM($,j);if(Z.hydrate===!1)return V.map((B)=>x7(B));return await TM($,V)}async function OM($){let Z=$.trim();if(!Z)return;let Q=HB(GB(),Z,`${Z}.json`),W=await BB(Q,"utf8").catch(()=>{return});if(!W)return;try{let J=N0.safeParse(JSON.parse(W));return J.success?J.data.messages_path:void 0}catch{return}}async function qM($,Z={}){let Q=new Map;return await v7({listSessions:async(J)=>{let X=await $.listSessions(J);Q.clear();for(let Y of X)Q.set(Y.sessionId,Y);return X.map(t8)},readSessionMessages:async(J)=>{let X=Q.get(J)?.messagesPath??await OM(J);return await n1(X)}},Z)}import{captureSdkError as iG}from"@cline/shared";import{createSessionId as MR,isHubProtocolCompatible as RR,resolveClineBuildEnv as ER,resolveHubCommandTimeoutMs as NR}from"@cline/shared";import{spawn as $R}from"node:child_process";import{closeSync as ZR,mkdirSync as QR,openSync as WR}from"node:fs";import{basename as JR,dirname as XR,join as YR}from"node:path";import{fileURLToPath as jR}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as VR,isHubDaemonProcess as EB,isHubProtocolCompatible as BR,resolveClineBuildEnv as NB,withResolvedClineBuildEnv as HR}from"@cline/shared";import{createHash as MM,randomBytes as RM}from"node:crypto";import{existsSync as EM}from"node:fs";import{chmod as NM,mkdir as c7,readFile as UB,rm as u7,writeFile as DB}from"node:fs/promises";import{dirname as LB,join as d7}from"node:path";import{resolveClineDataDir as W4,resolveClineDir as Nd}from"@cline/shared/storage";var FB="0.0.57";var Q4={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:FB,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 CM="CLINE_HUB_DISCOVERY_PATH",wM="CLINE_HUB_BUILD_ID",AB=30000,PM=15000,SM=100;function bM($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function yM($){return MM("sha256").update($).digest("hex").slice(0,12)}function hM($){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 _B(){return RM(32).toString("hex")}function kM($){return new Promise((Z)=>setTimeout(Z,$))}function IM($){return`${$}.lock`}async function xM($){try{let Z=JSON.parse(await UB(d7($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function fB($){await u7($,{recursive:!0,force:!0}).catch(()=>{return})}function zB(){return process.env[wM]?.trim()||String(Q4.version)}function x$($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${yM($)}`,Q=process.env[CM]?.trim()||d7(W4(),"locks","hub","owners",`${bM(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function wd($=`hub-${Date.now().toString(36)}`){return x$($)}async function A0($){try{let Z=JSON.parse(await UB($,"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 TB($,Z){await c7(LB($),{recursive:!0}),await u7($,{force:!0}).catch(()=>{return}),await DB($,`${JSON.stringify(Z,null,2)}
457
- `,{encoding:"utf8",mode:384}),await NM($,384)}async function a0($){await u7($,{force:!0}).catch(()=>{return})}async function OB($,Z){let Q=IM($);await c7(LB(Q),{recursive:!0});let W=Date.now()+PM;while(!0)try{await c7(Q,{recursive:!1}),await DB(d7(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
458
- `,"utf8");try{return await Z()}finally{await fB(Q)}}catch(J){if((J instanceof Error&&"code"in J?String(J.code):"")!=="EEXIST")throw J;let Y=await xM(Q),j=Y?Date.now()-Date.parse(Y.acquiredAt):AB+1;if(!Y||!hM(Y.pid)||j>AB){await fB(Q);continue}if(Date.now()>=W)throw Error(`Timed out waiting for hub startup lock ${Q}`);await kM(SM)}}async function g$($,Z){try{let Q=await fetch(Z?.authToken?gM($):qB($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let W=await Q.json();if(typeof W.protocolVersion!=="string"||typeof W.host!=="string"||typeof W.port!=="number"||typeof W.url!=="string")return;return{protocolVersion:W.protocolVersion,minClientProtocolVersion:typeof W.minClientProtocolVersion==="string"?W.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof W.maxClientProtocolVersion==="string"?W.maxClientProtocolVersion:void 0,capabilities:Array.isArray(W.capabilities)?W.capabilities.filter((J)=>typeof J==="string"):void 0,coreVersion:typeof W.coreVersion==="string"?W.coreVersion:void 0,buildId:typeof W.buildId==="string"?W.buildId:void 0,host:W.host,port:W.port,url:W.url,hubId:typeof W.hubId==="string"?W.hubId:void 0,authToken:typeof W.authToken==="string"?W.authToken:void 0,pid:typeof W.pid==="number"?W.pid:void 0,startedAt:typeof W.startedAt==="string"?W.startedAt:void 0,updatedAt:typeof W.updatedAt==="string"?W.updatedAt:void 0}}catch{return}}function L1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function qB($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function gM($){let Z=new URL(qB($));return Z.pathname="/status",Z.toString()}function Pd($){return EM($)}import{CLINE_HUB_DEV_PORT as mM,CLINE_HUB_PORT as vM,resolveClineBuildEnv as cM}from"@cline/shared";var uM="CLINE_HUB_HOST",dM="CLINE_HUB_PORT",lM="CLINE_HUB_PATHNAME",pM="127.0.0.1",rM=vM,iM="/hub";function MB($){return cM($)==="development"?mM:rM}function nM($={}){return($.env??process.env)[uM]?.trim()||pM}function q5($={}){let Q=($.env??process.env)[dM]?.trim();if(!Q)return MB($);let W=Number.parseInt(Q,10);if(!Number.isInteger(W)||W<1||W>65535)return MB($);return W}function aM($={}){return($.env??process.env)[lM]?.trim()||iM}function a1($={},Z={}){return{host:$.host??nM(Z),port:$.port??q5(Z),pathname:$.pathname??aM(Z)}}import{join as sM}from"node:path";var oM="shared:cline",tM="CLINE_HUB_DISCOVERY_PATH",eM="hub-production";function xd($){let Z=b$($.trim());return x$(`workspace:${Z||$.trim()}`)}function _1($=oM){return x$($)}function s1(){return{ownerId:eM,discoveryPath:process.env[tM]?.trim()||sM(W4(),"locks","hub","production.json")}}var GR=8000,KR=200,FR=3000,AR=100,fR=[100,250,500,1000,2000],UR="--cline-hub-daemon";function DR($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function LR(){try{let $=YR(W4(),"logs","hub-daemon.log");return QR(XR($),{recursive:!0}),{fd:WR($,"a"),logPath:$}}catch{return}}function CB(){return NB()==="production"?s1():_1()}function m$($){return BR($).compatible}function RB($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function v$($,Z){try{return await g$($,{authToken:Z})}catch{return}}async function _R($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await v$($))?.url)return!0;await new Promise((J)=>setTimeout(J,AR))}return!1}async function M5($,Z){if(await l7($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await _R($.url,FR);return await a0(Z).catch(()=>{return}),Q}async function J4($,Z){if(m$($))return!0;return M5($,Z)}async function wB($){if(NB()!=="production")return;let Z=_1();if(Z.discoveryPath===$.discoveryPath)return;let Q=await A0(Z.discoveryPath);if(Q?.url)await M5(Q,Z.discoveryPath);else await a0(Z.discoveryPath).catch(()=>{return})}function zR(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return jR(new URL(`./entry.${$}`,import.meta.url))}function TR($,Z){let Q=zR(),W=process.execPath?.trim();if(!W)throw Error("unable to resolve runtime executable for hub daemon");let J=JR(W).toLowerCase().includes("bun"),X=Q.startsWith("/$bunfs/"),Y=J&&Q.toLowerCase().endsWith(".ts"),j=X?[UR]:[...Y?["--conditions=development"]:[],Q];return{launcher:W,args:[...j,"--cwd",$,...DR(Z)],cwd:$,env:{...HR(process.env),CLINE_NO_INTERACTIVE:"1",[VR]:"1"}}}function OR($){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 qR($,Z={}){if(EB())return;let Q=TR($,Z),W=LR();try{$R(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)ZR(W.fd)}}async function R5($,Z={}){for(let Q=0;;Q++)try{qR($,Z);return}catch(W){let J=fR[Q];if(!OR(W)||J===void 0)throw W;await new Promise((X)=>setTimeout(X,J))}}function PB($,Z={}){if(EB())return;let Q=CB(),W=a1(Z),J=L1(W.host,W.port,W.pathname),X=Z.allowPortFallback===!0&&W.port!==0;wB(Q).catch(()=>{return}).then(()=>A0(Q.discoveryPath)).then(async(Y)=>{let j=!1;if(Y?.url)if(!Y.authToken){if(j=!0,!await M5(Y,Q.discoveryPath)&&!X)return}else{let H=await v$(Y.url,Y.authToken);if(H?.url&&m$(H)&&await o1(H.url,{authToken:Y.authToken}))return;if(H?.url)await J4({...H,authToken:Y.authToken},Q.discoveryPath);else await a0(Q.discoveryPath).catch(()=>{return})}let V=await v$(J);if(V?.url){if(m$(V)){if(!X||!j)return}else if(!await J4({...V,authToken:void 0},Q.discoveryPath)&&!X)return}let B=X?{...W,port:0}:W;await R5($,B)}).catch(()=>{})}async function nd($,Z={}){let Q=CB(),W=Z.host!==void 0||Z.port!==void 0||Z.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=a1(Z),X=L1(J.host,J.port,J.pathname),Y=(F)=>{if(!W)k2(F.url,F.authToken);return F};await wB(Q).catch(()=>{return});let j=await A0(Q.discoveryPath),V=!1;if(j?.url){let F=j.authToken;if(!F)V=!0,await M5(j,Q.discoveryPath);else{let A=await v$(j.url,F);if(A?.url&&m$(A)&&await o1(A.url,{authToken:F}))return Y({url:A.url,authToken:F});if(A?.url)await J4({...A,authToken:F},Q.discoveryPath);else await a0(Q.discoveryPath).catch(()=>{return})}}let B=await v$(X);if(B?.url){let F=RB(B,j,X);if(m$(B))throw Error(`A compatible Cline Hub is already running at ${X}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${V?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`);if(!await J4(F,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is already running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let G=Z.allowPortFallback===!0&&J.port!==0?{...J,port:0}:J;await R5($,G);let K=Date.now()+GR;while(Date.now()<K){let F=await A0(Q.discoveryPath);if(F?.url&&F.authToken){let L=await v$(F.url,F.authToken);if(L?.url&&m$(L)&&await o1(L.url,{authToken:F.authToken}))return Y({url:L.url,authToken:F.authToken})}let A=await v$(X);if(A?.url&&!m$(A)){let L=RB(A,F,X);if(!await J4(L,Q.discoveryPath)&&Z.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is still running at ${X} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((L)=>setTimeout(L,KR))}throw Error("Timed out waiting for detached hub startup.")}function N5(){return ER()==="production"?s1():_1()}function CR(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function kB($){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 kB($.data);return String($)}function wR($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function SB($){let Z=$,Q=wR(Z.reason);return new g0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:p7,{closeCode:Z.code,closeReason:Q||void 0})}function PR($,Z){if($ instanceof g0)return $;if($ instanceof Error)return new g0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new g0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new g0("hub_connect_failed",Q);let W=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new g0("hub_connect_failed",W?`Failed to connect to hub at ${Z.toString()} (${W} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var SR=8000,bR=200,bB="*",yB=8000,yR="cline-hub-auth.",IB=new Map,xB=new Set,hR=3000,kR=3000,IR=100,p7="Hub connection closed",xR=250,gR=5000,hB=0.5;class g0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function mR($){return $ instanceof g0}class E5 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function gB($,Z){return $ instanceof E5&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function mB($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=n7($.toString());return Q?IB.get(Q):void 0}function vR($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function n7($){if(!vR($))return;let Z=new URL(I2($));return Z.search="",Z.hash="",Z.toString()}function r7($){let Z=n7($);return!!Z&&xB.has(Z)}function k2($,Z){let Q=n7($);if(Q){if(xB.add(Q),Z?.trim())IB.set(Q,Z)}return $}class z1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new g0("hub_connection_closed",p7);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),Z=this.options.authToken?.trim()||mB($);$.hash="";let W=new(CR())($.toString(),Z?[`${yR}${Z}`]:void 0);this.socket=W;let J=!1;this.connectPromise=new Promise((X,Y)=>{let j=!1,V=setTimeout(()=>{if(j)return;j=!0,J=!0,this.lastCloseError=new g0("hub_connect_timeout",`Timed out connecting to hub after ${yB}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{W.close()}catch{}Y(this.lastCloseError)},yB);W.addEventListener("open",()=>{if(j)return;j=!0,clearTimeout(V),X()}),W.addEventListener("error",(B)=>{if(j)return;j=!0,clearTimeout(V),this.lastCloseError=PR(B,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)}),W.addEventListener("close",(B)=>{if(j)return;if(j=!0,clearTimeout(V),!J)this.lastCloseError=SB(B),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)})}),W.addEventListener("message",(X)=>{this.handleFrame(JSON.parse(kB(X)))}),W.addEventListener("close",(X)=>{if(this.socket!==W)return;if(!J)this.lastCloseError=SB(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=MR("hubreq_"),X=NR($,W?.timeoutMs),Y=new Promise((V,B)=>{let H=X===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;B(new E5($,"hub_command_timeout",`Hub command ${$} timed out after ${X}ms (hub=${this.currentUrl}, requestId=${J}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},X);this.pendingReplies.set(J,{resolve:(G)=>{if(H)clearTimeout(H);V(G)},reject:(G)=>{if(H)clearTimeout(H);B(G)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:J,clientId:this.clientId,sessionId:Q,timeoutMs:X,payload:Z}})}catch(V){throw this.pendingReplies.delete(J),V}let j=await Y;if(!j.ok){if(j.error?.code===c8){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new P$(V,j.error.message)}throw new E5($,j.error?.code,j.error?.message??`Hub command ${$} failed`)}return j}async recoverLocalHubTransport($){if(!r7(this.currentUrl)||!mR($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await X4({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!Z)return!1;return this.currentUrl=Z,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(xR*2**this.reconnectAttempt,gR),Z=Math.round($*(1-hB)+Math.random()*$*hB);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},Z)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!r7(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await X4({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if($){this.currentUrl=$,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let $=this.socket;if(this.closedByClient=!0,this.clearReconnectTimer(),this.registered=!1,!$)return;this.lastCloseError=new g0("hub_connection_closed",p7),this.sawSocketClose=!1;for(let Z of this.pendingReplies.values())Z.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new g0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,Z){this.sendFrame({kind:$,clientId:this.clientId,...Z?{sessionId:Z}:{}})}adjustSubscriptionCount($,Z){let Q=this.subscriptionKeyForSessionId($),W=(this.subscriptionCounts.get(Q)??0)+Z;if(W<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(Z<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,W),Z>0&&W===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??bB}subscriptionSessionIdFromKey($){return $===bB?void 0:$}handleFrame($){switch($.kind){case"reply":{let Z=$.envelope.requestId;if(!Z)return;let Q=this.pendingReplies.get(Z);if(!Q)return;this.pendingReplies.delete(Z),Q.resolve($.envelope);return}case"event":for(let Z of this.listeners){if(Z.sessionId&&Z.sessionId!==$.envelope.sessionId?.trim())continue;Z.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function I2($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function o1($,Z){let Q=new z1({url:$,authToken:Z?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function i7($,Z){let Q=I2($),W=await g$(Q,{authToken:Z?.authToken});if(!W)return{status:"unreachable",url:Q};if(!RR(W).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await o1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function cR($){let Z=Date.now()+SR;while(Date.now()<Z){let Q=await A0($.discoveryPath);if(Q?.url){let W=await i7(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(W.status==="compatible")return k2(W.url,Q.authToken)}await new Promise((W)=>setTimeout(W,bR))}return}async function uR($){let Z=Date.now()+kR;while(Date.now()<Z){if(!(await g$($).catch(()=>{return}))?.url)return!0;await new Promise((W)=>setTimeout(W,IR))}return!1}function dR($,Z){try{return I2($)===I2(Z)}catch{return!1}}function lR($){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 pR($,Z,Q){let W=new z1({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let J=await W.command("session.list",{limit:500},void 0,{timeoutMs:hR});return!lR(J.payload)}catch{return!1}finally{await W.dispose().catch(()=>{return})}}async function a7($={}){if($.endpoint?.trim()){let J=await i7($.endpoint);return J.status==="compatible"?J.url:void 0}let Z=N5(),Q=await A0(Z.discoveryPath);if(!Q?.url)return;let W=await i7(Q.url,{authToken:Q.authToken});if(W.status==="compatible")return k2(W.url,Q.authToken);if(W.status==="protocol_mismatch")await a0(Z.discoveryPath).catch(()=>{return});return}async function X4($={}){let Z=await a7($);if(Z&&await o1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;let Q=N5();return await R5($.workspaceRoot??process.cwd()),await cR(Q)}async function l7($,Z){let Q=new URL($),W=Z?.trim()||mB(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 rR($=N5()){let Z=await A0($.discoveryPath);if(!Z?.url)return!1;try{if(await l7(Z.url,Z.authToken))return!0}catch{}return!1}async function vB($){if(!r7($.url))return;let Z=N5(),Q=await A0(Z.discoveryPath);if(!Q?.url||!dR(Q.url,$.url))return;if(!await pR(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await rR())return;if(!await uR(Q.url))return;return await a0(Z.discoveryPath).catch(()=>{return}),await X4({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{captureSdkError as cB,createSessionId as uB,HUB_CHECKPOINT_CAPABILITY as sR,HUB_COMPACTION_CAPABILITY as oR,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as tR,HUB_HOOK_CAPABILITY_PREFIX as eR,HUB_MISTAKE_LIMIT_CAPABILITY as $E,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as ZE,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as QE,isHubToolExecutorName as WE}from"@cline/shared";function iR($){return $?JSON.parse(JSON.stringify($)):void 0}function nR($){return $?JSON.parse(JSON.stringify($)):void 0}function aR($){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),B=Number(Y.runCount);if(!j||!Number.isFinite(V)||!Number.isInteger(B))return[];return[{ref:j,createdAt:V,runCount:B,...Y.kind==="stash"||Y.kind==="commit"?{kind:Y.kind}:{}}]}),J=W.at(-1),X=$?.checkpointEnabled===!0?!0:void 0;if(!X&&W.length===0)return;return{...X?{enabled:X}:{},...J?{latest:J}:{},history:W}}function t1($){let{session:Z}=$,Q=iR(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:nR($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let W=aR(Q);return W?{checkpoint:W}:{}})()}}function s7($){return{sessionId:$.sessionId,parentSessionId:$.lineage.parentSessionId,agentId:$.lineage.agentId,parentAgentId:$.lineage.parentAgentId,conversationId:$.lineage.conversationId,isSubagent:$.lineage.isSubagent,source:$.source,startedAt:$.createdAt,endedAt:$.endedAt??void 0,exitCode:$.exitCode??void 0,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspaceRoot:$.workspace.root,teamName:$.team?.name,enableTools:$.capabilities.enableTools,enableSpawn:$.capabilities.enableSpawn,enableTeams:$.capabilities.enableTeams,prompt:$.prompt,metadata:$.metadata,updatedAt:$.updatedAt,messagesPath:$.artifacts?.messagesPath}}function x2($){if(!$)return;return JSON.parse(JSON.stringify($))}var JE=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function dB($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function lB($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function pB($){let Z=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof Z.agentId==="string"?Z.agentId:"",conversationId:typeof Z.conversationId==="string"?Z.conversationId:"",iteration:typeof Z.iteration==="number"?Z.iteration:0,metadata:Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0}}function c$($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function rB($,Z){let Q={manifest:[],handlers:new Map};for(let J of Object.keys(Z.toolExecutors??{}).filter(WE)){let X=Z.toolExecutors?.[J];if(typeof X!=="function")continue;c$(Q,{kind:"toolExecutor",executor:J,capabilityName:`${ZE}${J}`},async({payload:Y,abortSignal:j})=>{let V=Array.isArray(Y.args)?[...Y.args]:[],B={...pB(Y.context),signal:j};return{result:await X(...V,B)}})}for(let J of $?.extraTools??[])c$(Q,{kind:"tool",name:J.name,description:J.description,inputSchema:x2(J.inputSchema)??{},...J.lifecycle?{lifecycle:x2(J.lifecycle)}:{},capabilityName:`${tR}${J.name}`},async({payload:X,abortSignal:Y,progress:j})=>{let V={...pB(X.context),signal:Y};return{result:await J.execute(X.input,{...V,emitUpdate:(H)=>{j({update:H})}})}});let W=$?.hooks;if(W)for(let J of JE){let X=W[J];if(typeof X!=="function")continue;c$(Q,{kind:"hook",name:J,capabilityName:`${eR}${J}`},async({payload:Y})=>({control:await X(Y.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;c$(Q,{kind:"compaction",capabilityName:oR,config:dB($.compaction)},async({payload:X})=>({result:await J(X.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;c$(Q,{kind:"checkpoint",capabilityName:sR,config:dB($.checkpoint)},async({payload:X})=>({result:await J(X.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;c$(Q,{kind:"mistakeLimit",capabilityName:$E},async({payload:X})=>({result:await J(X.context)}))}if($?.userInstructionService){let J=$.userInstructionService;c$(Q,{kind:"userInstructionService",capabilityName:QE},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 sB($){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 XE($){return sB($)??"Capability request was cancelled."}function YE($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function jE($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function VE($){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 iB($){if(!$)return;return{inputTokens:typeof $.inputTokens==="number"?$.inputTokens:0,outputTokens:typeof $.outputTokens==="number"?$.outputTokens:0,cacheReadTokens:typeof $.cacheReadTokens==="number"?$.cacheReadTokens:0,cacheWriteTokens:typeof $.cacheWriteTokens==="number"?$.cacheWriteTokens:0,totalCost:typeof $.totalCost==="number"?$.totalCost:0}}function o7($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function e1($,Z){return o7($?.[Z])??0}function BE($){let Z=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,W=$?.agent&&typeof $.agent==="object"?$.agent:void 0,J=W?.teamRole==="teammate"||W?.teamRole==="lead"?W.teamRole:void 0;return{event:{type:"usage",agentId:typeof W?.agentId==="string"?W.agentId:void 0,conversationId:typeof W?.conversationId==="string"?W.conversationId:void 0,parentAgentId:typeof W?.parentAgentId==="string"?W.parentAgentId:void 0,inputTokens:e1(Z,"inputTokens"),outputTokens:e1(Z,"outputTokens"),cacheReadTokens:e1(Z,"cacheReadTokens"),cacheWriteTokens:e1(Z,"cacheWriteTokens"),cost:o7(Z?.totalCost),totalInputTokens:e1(Q,"inputTokens"),totalOutputTokens:e1(Q,"outputTokens"),totalCacheReadTokens:e1(Q,"cacheReadTokens"),totalCacheWriteTokens:e1(Q,"cacheWriteTokens"),totalCost:o7(Q?.totalCost)},teamAgentId:typeof W?.teamAgentId==="string"?W.teamAgentId:void 0,teamRole:J}}function HE($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,W=jE(Q)?Q:Q==="failed"?"error":"completed",J=VE($?.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 C5($,Z){return $.error?.message??`hub command failed: ${Z}`}function Y4($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function oB($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof Z?.agentId==="string"?Z.agentId:void 0),parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,isSubagent:typeof Z?.isSubagent==="boolean"?Z.isSubagent:!1,source:typeof Z?.source==="string"?Z.source:T0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:Y4($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:Y4($.status)==="completed"?0:Y4($.status)==="failed"?1:void 0,status:Y4($.status),interactive:Z?.interactive===!0,provider:typeof Z?.provider==="string"?Z.provider:"hub",model:typeof Z?.model==="string"?Z.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof Z?.teamName==="string"?Z.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??Z?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??Z?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??Z?.enableTeams===!0,prompt:typeof Z?.prompt==="string"?Z.prompt:void 0,metadata:Z,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,hookPath:typeof Z?.hookPath==="string"?Z.hookPath:void 0}}function $$($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function GE($){let Z=$$($?.snapshot);if(Z)return s7(Z);let Q=$?.session;return Q?oB(Q):void 0}function nB($,Z,Q){let W=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot||Z.config.cwd;return N0.parse({version:1,session_id:$,source:Z.source??T0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:Y4(Q?.status),interactive:Z.interactive===!0,provider:Z.config.providerId,model:Z.config.modelId,cwd:Q?.cwd?.trim()||Z.config.cwd,workspace_root:W,team_name:Z.config.teamName,enable_tools:Z.config.enableTools,enable_spawn:Z.config.enableSpawnAgent,enable_teams:Z.config.enableAgentTeams,prompt:Z.prompt?.trim()||void 0,metadata:Z.sessionMetadata&&Object.keys(Z.sessionMetadata).length>0?Z.sessionMetadata:void 0})}function aB($,Z){return N0.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??Z.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class u${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new $4;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,Z){this.clientContext=Z,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd},this.defaultCapabilities=O0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Q)=>this.requestPendingPromptsList(Q),update:(Q)=>this.requestPendingPromptUpdate(Q),delete:(Q)=>this.requestPendingPromptDelete(Q)},this.client=this.createClient($.url)}createClient($){return new z1({...this.clientOptions,url:$})}async replaceClient($){let Z=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(Z.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!gB($,"session.create"))return!1;let Z=await vB({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=rB($.localRuntime,Z),W=$.config.sessionId?.trim()||uB(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:x2({...$.config,sessionId:W}),metadata:{...$.sessionMetadata??{},source:$.source??T0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:x2($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(W,Z,Q.handlers);let X;try{X=await J()}catch(B){if(this.cleanupPlannedSession(W),await this.recoverLocalHubStartupDeadlock(B)){this.registerPlannedSession(W,Z,Q.handlers);try{X=await J()}catch(H){throw this.cleanupPlannedSession(W),H}}else throw B}let Y=$$(X.payload?.snapshot),j=X.payload?.session,V=(Y?.sessionId??j?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(W),Error("Hub runtime did not return a session id.");if(V!==W)this.cleanupPlannedSession(W),this.registerPlannedSession(V,Z,Q.handlers);return{sessionId:V,manifest:Y?aB(Y,$):nB(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?rB(W.localRuntime,J??{}):{manifest:[],handlers:new Map},Y=W?W.config.sessionId?.trim()||uB():void 0;if(Y&&J)this.sessionCapabilities.set(Y,J);if(Y&&X.handlers.size>0)this.sessionClientContributionHandlers.set(Y,X.handlers),this.ensureSessionSubscription(Y);let j;try{j=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...W?{workspaceRoot:W.config.workspaceRoot?.trim()||W.config.cwd,cwd:W.config.cwd??$.cwd,sessionConfig:x2({...W.config,sessionId:Y}),metadata:{...W.sessionMetadata??{},source:W.source??T0.CORE,provider:W.config.providerId,model:W.config.modelId,enableTools:W.config.enableTools,enableSpawn:W.config.enableSpawnAgent,enableTeams:W.config.enableAgentTeams,teamName:W.config.teamName,prompt:W.prompt,interactive:W.interactive===!0},runtimeOptions:{...X.manifest.length>0?{clientContributions:X.manifest}:{},...W.localRuntime?.configExtensions?{configExtensions:W.localRuntime.configExtensions}:{}},toolPolicies:x2(W.toolPolicies)}:{}},Z)}catch(F){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw F}if(!j.ok){let F=typeof j.payload?.error==="string"?j.payload.error:"session.restore failed";if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error(F)}let V=$$(j.payload?.snapshot),B=j.payload?.session,H=(V?.sessionId??B?.sessionId)?.trim();if(Q&&!H){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error("Hub checkpoint restore returned no session id")}if(H&&Y&&H!==Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);if(H&&J)this.sessionCapabilities.set(H,J);if(H&&X.handlers.size>0)this.sessionClientContributionHandlers.set(H,X.handlers);if(H)this.ensureSessionSubscription(H);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:H,startResult:H?{sessionId:H,manifest:V?aB(V,W??{}):nB(H,W??{},B),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:G,checkpoint:K}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,updated:Z.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,removed:Z.payload?.removed===!0}}async getAccumulatedUsage($){let Z=await this.client.command("session.get",{includeSnapshot:!0},$),Q=$$(Z.payload?.snapshot);if(Q){let Y=Q.usage?{...Q.usage}:void 0,j=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return Y||j?{usage:Y,aggregateUsage:j}:void 0}let W=Z.payload?.session,J=iB(W?.usage),X=iB(W?.aggregateUsage);return J||X?{usage:J,aggregateUsage:X}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:sB(Z)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,Z]of this.sessionSubscriptions){Z();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(S$(Q))return;throw Q}return GE(Z.payload)}async listSessions($=100){let Z=await this.client.command("session.list",{limit:$}),Q=Array.isArray(Z.payload?.snapshots)?Z.payload.snapshots.flatMap((J)=>{let X=$$(J);return X?[s7(X)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(oB)}async listSettings($){let Z=await this.client.command("settings.list",lB($));if(!Z.ok)throw Error(C5(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",lB($));if(!Z.ok)throw Error(C5(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 cB(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(C5(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(C5(Q,"session.messages"));let W=Q.payload?.messages;return Array.isArray(W)?W:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,Z){return this.events.subscribe($,Z)}ensureSessionSubscription($){let Z=$.trim();if(!Z||this.sessionSubscriptions.has(Z))return;let Q=this.client.subscribe((W)=>{this.handleHubEvent(W)},{sessionId:Z});this.sessionSubscriptions.set(Z,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let Z=$.trim();if(!Z)return;this.sessionSubscriptions.get(Z)?.(),this.sessionSubscriptions.delete(Z),this.agentDoneEmittedForCurrentRunBySession.delete(Z)}resolveCapabilities($){return O0(this.defaultCapabilities,$.capabilities)??{}}emitToolCallContentStart($){this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:{type:"content_start",contentType:"tool",toolCallId:$.toolCallId,toolName:$.toolName,input:$.toolInput}}})}emitAgentDoneIfNeeded($){if(this.agentDoneEmittedForCurrentRunBySession.has($.sessionId))return;this.agentDoneEmittedForCurrentRunBySession.add($.sessionId),this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:HE($.payload)}})}handleHubEvent($){let Z=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!Z)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(Z);let Q=$$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"assistant.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",W=$.payload?.redacted===!0;if(!Q&&!W)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:W}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:Z,payload:$.payload});return}case"usage.updated":{let Q=BE($.payload);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:Z,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"tool",toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Q=$$($.payload?.snapshot),W=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:W?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:Z,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:Z,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=$$($.payload?.snapshot),W=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:Z,payload:{...$.payload,reason:W}}),Q?.interactive===!0&&j0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:W,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{cB(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=(B)=>{this.client.command("capability.progress",{requestId:W,payload:B},Z).catch((H)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",H,$)})};try{let B=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:B},Z)}catch(B){if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:W,ok:!1,error:B instanceof Error?B.message:String(B)},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(XE($.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=YE($.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((B)=>({approved:!1,reason:B instanceof Error?B.message:`Tool approval request failed: ${String(B)}`}));await this.client.command("approval.respond",{approvalId:W,approved:V.approved,reason:V.reason},Z).catch(()=>{})}}class w5 extends u${constructor($){super({url:I2($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}import{existsSync as KE,mkdirSync as FE}from"node:fs";import{join as AE}from"node:path";import{asBool as j4,asOptionalString as Q1,asString as T1,ensureSessionSchema as fE,loadSqliteDb as UE,nowIso as P5,toBoolInt as V4}from"@cline/shared/db";import{resolveDbDataDir as DE}from"@cline/shared/storage";class Z${sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??DE()}init(){this.getRawDb()}ensureSessionsDir(){if(!KE(this.sessionsDirPath))FE(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return AE(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=UE(this.sessionDbPath());return fE($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}create($){let Z=P5();this.run(`INSERT OR REPLACE INTO sessions (
452
+ WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,Z,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,Z){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(Z,U0(),$)}attachReportPathToRun($,Z){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(Z,U0(),$)}}class Z4{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new $4({dbPath:$.dbPath});let Z=$.specs;this.reconciler=new P7({store:this.store,specs:Z}),this.materializer=new a8({store:this.store}),this.eventIngress=new D7({store:this.store,logger:$.logger}),this.runner=new o8({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:Z,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new S7({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let J=$.logger;if(J)if(J.error)J.error("cron.watcher.failed",{error:Q});else J.log("cron.watcher.failed",{error:Q})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}import{readdir as wM,readFile as OB}from"node:fs/promises";import{join as qB}from"node:path";import{formatDisplayUserInput as CM,normalizeUserInput as PM}from"@cline/shared";import{resolveSessionDataDir as zB}from"@cline/shared/storage";import{mkdirSync as _M,writeFileSync as TM}from"node:fs";import{dirname as OM}from"node:path";import{normalizeUserInput as qM,stripModeNotices as zM}from"@cline/shared";import{nanoid as MM}from"nanoid";import{nanoid as DM}from"nanoid";function Q4($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function R5($,Z){let Q=Q4($),J=Q4(Z),W=`${Q}__${J}`;return W.length>180?W.slice(0,180):W}function k7($,Z){let Q=Q4($),J=Q4(Z);return`${Q}__teamtask__${J}__${DM(6)}`}function J4($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let J=$.slice(0,Q),W=$.slice(Q+12),X=W.lastIndexOf("__");if(X<=0)return null;let Y=W.slice(0,X),j=W.slice(X+2);if(!J||!Y||!j)return null;return{rootSessionId:J,agentId:Y,teamTaskId:j}}function N5($){if(J4($))return null;let Z="__",Q=$.indexOf(Z);if(Q<=0)return null;let J=$.slice(0,Q),W=$.slice(Q+Z.length);if(!J||!W)return null;return{rootSessionId:J,agentId:W}}function I7($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let Z=String($.reason??"").toLowerCase();if(Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt"))return"cancelled";if(Z.includes("fail")||Z.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as o}from"zod";var LM=o.enum(lZ),h0=o.object({version:o.literal(1),session_id:o.string().min(1),source:o.string().min(1),pid:o.number().int(),started_at:o.string().min(1),ended_at:o.string().min(1).optional(),exit_code:o.number().int().nullable().optional(),status:LM,interactive:o.boolean(),provider:o.string().min(1),model:o.string().min(1),cwd:o.string().min(1),workspace_root:o.string().min(1),team_name:o.string().min(1).optional(),enable_tools:o.boolean(),enable_spawn:o.boolean(),enable_teams:o.boolean(),prompt:o.string().optional(),metadata:o.record(o.string(),o.unknown()).optional(),messages_path:o.string().min(1).optional(),compaction_path:o.string().min(1).optional()});function AB($){if(!$)return!1;return Object.values($).some((Z)=>typeof Z==="function")}function g7($,Z){let Q=[...$??[],...Z??[]];if(Q.length===0)return;let J=[],W=new Set;for(let X of Q){if(W.has(X.name))continue;W.add(X.name),J.push(X)}return J}function fB($){return JSON.stringify($,(Z,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function _1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function x7($,Z){let Q={...$};Q.id=_1(Q.id)??MM();let J=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,W={id:_1(J?.id)??_1(Q.modelId)??_1(Z?.id),provider:_1(J?.provider)??_1(Q.providerId)??_1(Z?.provider),family:_1(J?.family)??_1(Z?.family)};if(delete Q.providerId,delete Q.modelId,W.id&&W.provider)Q.modelInfo={id:W.id,provider:W.provider,...W.family?{family:W.family}:{}};else delete Q.modelInfo;return Q}function E5($){return $.map((Z)=>x7(Z))}function w5($,Z,Q=[]){let J=$.map((V,B)=>{let H=Q[B],K=H?.role===V.role&&JSON.stringify(H.content)===JSON.stringify(V.content)?{...H,...V}:{...V};return x7(K)}),W=Q.length,X=[];for(let V=W;V<J.length;V+=1)if(J[V]?.role==="assistant")X.push(V);if(X.length===0){let V=[...J].reverse().findIndex((B)=>B.role==="assistant");if(V===-1)return J;X.push(J.length-1-V)}let Y=X[X.length-1],j=X.some((V)=>J[V]?.metrics);for(let V of X){let B=J[V],H=B.metrics;if(!H&&V===Y&&!j){let G=Z.usage;H={inputTokens:G.inputTokens,outputTokens:G.outputTokens,cacheReadTokens:G.cacheReadTokens??0,cacheWriteTokens:G.cacheWriteTokens??0,cost:G.totalCost}}J[V]={...x7(B,{id:Z.model.id,provider:Z.model.provider,family:Z.model.info?.family}),...H?{metrics:H}:{},ts:B.ts??Z.endedAt.getTime()}}return J}function W4($){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 RM=120;function u$($){let Z=$?.trim();return Z?Z.slice(0,RM):void 0}function m7($){let Z=zM(qM($??"")).trim();if(!Z)return;return u$(Z.split(`
453
+ `)[0]?.trim())}function s1($){if(!$)return;let Z={...$},Q=u$(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 X4($){let Z=s1($.metadata)??{},Q=$.title!==void 0?u$($.title):m7($.prompt);if(Q)Z.title=Q;return Object.keys(Z).length>0?Z:void 0}function v7($){let Z=J4($);if(Z)return{agent:"teammate",sessionId:Z.rootSessionId,taskType:"team"};let Q=N5($);if(Q)return{agent:"subagent",sessionId:Q.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function c7($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:E5($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function UB($,Z,Q){_M(OM($),{recursive:!0}),TM($,`${JSON.stringify(c7({updatedAt:Z,context:Q,messages:[]}),null,2)}
454
+ `,"utf8")}function DB($,Z){return h0.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 LB($,Z,Q){let J=0;while(!0){let W=await $();if(W===void 0)return{updated:!1};let X=await Z(W);if(typeof X==="object"&&X!==null&&"updated"in X&&X.updated===!1){if(J+=1,J>=Q)return X;continue}return X}}import{existsSync as NM}from"node:fs";import{readFile as EM}from"node:fs/promises";class Y4{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 t1($){let Z=$?.trim();if(!Z||!NM(Z))return[];try{let Q=(await EM(Z,"utf8")).trim();if(!Q)return[];let J=JSON.parse(Q);if(Array.isArray(J))return J;if(J&&typeof J==="object"&&!Array.isArray(J)){let W=J.messages;if(Array.isArray(W))return W}return[]}catch{return[]}}function u7($){return $?{...$}:void 0}async function _B($,Z){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await Z.queueSpawnRequest($);let J=await Z.upsertSubagentSessionFromHook($);if(!J)return;await Z.appendSubagentHookAudit(J,$),await Z.applySubagentStatus(J,$)}function j4($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function l0($){let Z=j4($);if(!Z)return;return Z.toLowerCase()==="unknown"?void 0:Z}function C5($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function SM($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function l7($){let Z=$??200;return Number.isFinite(Z)?Math.max(0,Math.floor(Z)):200}function bM($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function yM($){return $.isSubagent!==!0&&!j4($.parentSessionId)}function hM($){let Z=$.match(/\d{13,}/g);if(!Z||Z.length===0)return 0;let Q=0;for(let J of Z){let W=Number.parseInt(J,10);if(Number.isFinite(W)&&W>Q)Q=W}return Q}function p7($){return{sessionId:$.session_id,source:$.source,pid:$.pid,startedAt:$.started_at,endedAt:$.ended_at??null,exitCode:$.exit_code??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspace_root,teamName:$.team_name,enableTools:$.enable_tools,enableSpawn:$.enable_spawn,enableTeams:$.enable_teams,isSubagent:!1,prompt:$.prompt,metadata:$.metadata,messagesPath:$.messages_path,updatedAt:$.ended_at??$.started_at}}async function kM($){let Z=l7($);if(Z===0)return[];let Q=zB(),W=(await wM(Q,{withFileTypes:!0}).catch(()=>[])).filter((Y)=>Y.isDirectory()).map((Y)=>({entry:Y,recency:hM(Y.name.trim())})).sort((Y,j)=>j.recency-Y.recency||j.entry.name.localeCompare(Y.entry.name));return(await Promise.all(W.map(async({entry:Y})=>{let j=Y.name.trim();if(!j)return;let V=qB(Q,j,`${j}.json`),B=await OB(V,"utf8").catch(()=>{return});if(!B)return;let H;try{H=JSON.parse(B)}catch{return}let G=h0.safeParse(H);if(!G.success)return;return p7(G.data)}))).filter((Y)=>Boolean(Y)).sort((Y,j)=>j.startedAt.localeCompare(Y.startedAt)).slice(0,Z)}async function IM($,Z,Q){let J=l7(Z);if(J===0)return await $.listSessions(0),[];let W=Q.includeSubagents?J:bM(J),X=await $.listSessions(W);return(Q.includeSubagents?X:X.filter(yM)).slice(0,J)}function xM($){if(typeof $==="string")return $.trim();let Z=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let J=Q;if(J.type!=="text")continue;let W=J.text?.trim();if(W)Z.push(W)}return Z.join(`
455
+ `).trim()}function TB($){return $.replace(/\s+/g," ").trim()}function gM($,Z){if($.length<=Z)return $;return`${$.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function mM($){for(let Z of["user","assistant"])for(let Q of $){if(Q.role!==Z)continue;let J=TB(xM(Q.content));if(!J)continue;let W=Z==="user"?TB(CM(J)):J,X=PM(W.split(`
456
+ `)[0]??W);return gM(X,50)}return}function vM($){let Z=0;for(let Q of $)Z+=C5(Q.metrics?.cost)??0;return Z}function cM($){let Z,Q;for(let J=$.length-1;J>=0;J-=1){let W=$[J];if(!Z)Z=l0(W.modelInfo?.provider);if(!Q)Q=l0(W.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function uM($){return l0($?.provider)??l0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function dM($){return l0($?.model)??l0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function d7($,Z){let Q=SM($.metadata),J=j4(Z?.title)??j4(Q?.title),W=C5(Z?.totalCost)??C5(Q?.totalCost),X=Q||J!==void 0||W!==void 0?{...Q??{},...J!==void 0?{title:J}:{},...W!==void 0?{totalCost:W}:{}}:void 0;return{...$,provider:l0(Z?.provider)??l0($.provider)??uM(Q)??"",model:l0(Z?.model)??l0($.model)??dM(Q)??"",metadata:X}}function lM($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function pM($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!lM(Q)}async function rM($,Z){return await Promise.all(Z.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let J=await $.readSessionMessages(Q.sessionId);return pM(Q,J)?{...Q,status:"idle"}:Q}))}async function iM($,Z){return await Promise.all(Z.map(async(Q)=>{let J=d7(Q),W=Boolean(j4(J.metadata?.title)),X=Boolean(l0(J.provider)),Y=Boolean(l0(J.model)),j=C5(J.metadata?.totalCost),V=j!==void 0&&j>0;if(W&&X&&Y&&V)return J;let B=await $.readSessionMessages(Q.sessionId);if(B.length===0)return J;let H=cM(B),G=vM(B);return d7(Q,{title:W?void 0:mM(B),provider:X?void 0:H.provider,model:Y?void 0:H.model,totalCost:V||G<=0?void 0:G})}))}async function r7($,Z={}){let Q=l7(Z.limit),J=Z.includeSubagents===!0,W=await IM($,Q,{includeSubagents:J}),X=Z.includeManifestFallback===!0&&W.length<Q?await kM(Math.min(Math.max(Q*2,100),500)):[],Y=new Map;for(let B of[...W,...X]){if(Y.has(B.sessionId))continue;Y.set(B.sessionId,B)}let j=X.length===0?W:Array.from(Y.values()).sort((B,H)=>H.startedAt.localeCompare(B.startedAt)).slice(0,Q),V=await rM($,j);if(Z.hydrate===!1)return V.map((B)=>d7(B));return await iM($,V)}async function nM($){let Z=$.trim();if(!Z)return;let Q=qB(zB(),Z,`${Z}.json`),J=await OB(Q,"utf8").catch(()=>{return});if(!J)return;try{let W=h0.safeParse(JSON.parse(J));return W.success?W.data.messages_path:void 0}catch{return}}async function aM($,Z={}){let Q=new Map;return await r7({listSessions:async(W)=>{let X=await $.listSessions(W);Q.clear();for(let Y of X)Q.set(Y.sessionId,Y);return X.map(W4)},readSessionMessages:async(W)=>{let X=Q.get(W)?.messagesPath??await nM(W);return await t1(X)}},Z)}import{captureSdkError as FK}from"@cline/shared";import{createSessionId as oR,isHubProtocolCompatible as sR,resolveClineBuildEnv as tR,resolveHubCommandTimeoutMs as eR}from"@cline/shared";import{spawn as NR}from"node:child_process";import{closeSync as ER,mkdirSync as wR,openSync as CR}from"node:fs";import{basename as PR,dirname as SR,join as bR}from"node:path";import{fileURLToPath as yR}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as hR,isHubDaemonProcess as gB,isHubProtocolCompatible as kR,resolveClineBuildEnv as mB,withResolvedClineBuildEnv as IR}from"@cline/shared";import{createHash as oM,randomBytes as sM}from"node:crypto";import{existsSync as tM}from"node:fs";import{chmod as eM,mkdir as i7,readFile as wB,rm as n7,writeFile as CB}from"node:fs/promises";import{dirname as PB,join as a7}from"node:path";import{resolveClineDataDir as B4,resolveClineDir as Dl}from"@cline/shared/storage";var RB="0.0.58-nightly.1783480459";var V4={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:RB,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 $R="CLINE_HUB_DISCOVERY_PATH",ZR="CLINE_HUB_BUILD_ID",NB=30000,QR=15000,JR=100;function WR($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function XR($){return oM("sha256").update($).digest("hex").slice(0,12)}function YR($){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 SB(){return sM(32).toString("hex")}function jR($){return new Promise((Z)=>setTimeout(Z,$))}function VR($){return`${$}.lock`}async function BR($){try{let Z=JSON.parse(await wB(a7($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function EB($){await n7($,{recursive:!0,force:!0}).catch(()=>{return})}function bB(){return process.env[ZR]?.trim()||String(V4.version)}function d$($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${XR($)}`,Q=process.env[$R]?.trim()||a7(B4(),"locks","hub","owners",`${WR(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function _l($=`hub-${Date.now().toString(36)}`){return d$($)}async function D0($){try{let Z=JSON.parse(await wB($,"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 yB($,Z){await i7(PB($),{recursive:!0}),await n7($,{force:!0}).catch(()=>{return}),await CB($,`${JSON.stringify(Z,null,2)}
457
+ `,{encoding:"utf8",mode:384}),await eM($,384)}async function e0($){await n7($,{force:!0}).catch(()=>{return})}async function hB($,Z){let Q=VR($);await i7(PB(Q),{recursive:!0});let J=Date.now()+QR;while(!0)try{await i7(Q,{recursive:!1}),await CB(a7(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
458
+ `,"utf8");try{return await Z()}finally{await EB(Q)}}catch(W){if((W instanceof Error&&"code"in W?String(W.code):"")!=="EEXIST")throw W;let Y=await BR(Q),j=Y?Date.now()-Date.parse(Y.acquiredAt):NB+1;if(!Y||!YR(Y.pid)||j>NB){await EB(Q);continue}if(Date.now()>=J)throw Error(`Timed out waiting for hub startup lock ${Q}`);await jR(JR)}}async function l$($,Z){try{let Q=await fetch(Z?.authToken?HR($):kB($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let J=await Q.json();if(typeof J.protocolVersion!=="string"||typeof J.host!=="string"||typeof J.port!=="number"||typeof J.url!=="string")return;return{protocolVersion:J.protocolVersion,minClientProtocolVersion:typeof J.minClientProtocolVersion==="string"?J.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof J.maxClientProtocolVersion==="string"?J.maxClientProtocolVersion:void 0,capabilities:Array.isArray(J.capabilities)?J.capabilities.filter((W)=>typeof W==="string"):void 0,coreVersion:typeof J.coreVersion==="string"?J.coreVersion:void 0,buildId:typeof J.buildId==="string"?J.buildId:void 0,host:J.host,port:J.port,url:J.url,hubId:typeof J.hubId==="string"?J.hubId:void 0,authToken:typeof J.authToken==="string"?J.authToken:void 0,pid:typeof J.pid==="number"?J.pid:void 0,startedAt:typeof J.startedAt==="string"?J.startedAt:void 0,updatedAt:typeof J.updatedAt==="string"?J.updatedAt:void 0}}catch{return}}function T1($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function kB($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function HR($){let Z=new URL(kB($));return Z.pathname="/status",Z.toString()}function Tl($){return tM($)}import{CLINE_HUB_DEV_PORT as GR,CLINE_HUB_PORT as KR,resolveClineBuildEnv as FR}from"@cline/shared";var AR="CLINE_HUB_HOST",fR="CLINE_HUB_PORT",UR="CLINE_HUB_PATHNAME",DR="127.0.0.1",LR=KR,_R="/hub";function IB($){return FR($)==="development"?GR:LR}function TR($={}){return($.env??process.env)[AR]?.trim()||DR}function P5($={}){let Q=($.env??process.env)[fR]?.trim();if(!Q)return IB($);let J=Number.parseInt(Q,10);if(!Number.isInteger(J)||J<1||J>65535)return IB($);return J}function OR($={}){return($.env??process.env)[UR]?.trim()||_R}function e1($={},Z={}){return{host:$.host??TR(Z),port:$.port??P5(Z),pathname:$.pathname??OR(Z)}}import{join as qR}from"node:path";var zR="shared:cline",MR="CLINE_HUB_DISCOVERY_PATH",RR="hub-production";function El($){let Z=g$($.trim());return d$(`workspace:${Z||$.trim()}`)}function O1($=zR){return d$($)}function $$(){return{ownerId:RR,discoveryPath:process.env[MR]?.trim()||qR(B4(),"locks","hub","production.json")}}var xR=8000,gR=200,mR=3000,vR=100,cR=[100,250,500,1000,2000],uR="--cline-hub-daemon";function dR($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function lR(){try{let $=bR(B4(),"logs","hub-daemon.log");return wR(SR($),{recursive:!0}),{fd:CR($,"a"),logPath:$}}catch{return}}function vB(){return mB()==="production"?$$():O1()}function p$($){return kR($).compatible}function xB($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function r$($,Z){try{return await l$($,{authToken:Z})}catch{return}}async function pR($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await r$($))?.url)return!0;await new Promise((W)=>setTimeout(W,vR))}return!1}async function S5($,Z){if(await o7($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await pR($.url,mR);return await e0(Z).catch(()=>{return}),Q}async function H4($,Z){if(p$($))return!0;return S5($,Z)}async function cB($){if(mB()!=="production")return;let Z=O1();if(Z.discoveryPath===$.discoveryPath)return;let Q=await D0(Z.discoveryPath);if(Q?.url)await S5(Q,Z.discoveryPath);else await e0(Z.discoveryPath).catch(()=>{return})}function rR(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return yR(new URL(`./entry.${$}`,import.meta.url))}function iR($,Z){let Q=rR(),J=process.execPath?.trim();if(!J)throw Error("unable to resolve runtime executable for hub daemon");let W=PR(J).toLowerCase().includes("bun"),X=Q.startsWith("/$bunfs/"),Y=W&&Q.toLowerCase().endsWith(".ts"),j=X?[uR]:[...Y?["--conditions=development"]:[],Q];return{launcher:J,args:[...j,"--cwd",$,...dR(Z)],cwd:$,env:{...IR(process.env),CLINE_NO_INTERACTIVE:"1",[hR]:"1"}}}function nR($){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 aR($,Z={}){if(gB())return;let Q=iR($,Z),J=lR();try{NR(Q.launcher,Q.args,{detached:!0,stdio:J?["ignore",J.fd,J.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(J)ER(J.fd)}}async function b5($,Z={}){for(let Q=0;;Q++)try{aR($,Z);return}catch(J){let W=cR[Q];if(!nR(J)||W===void 0)throw J;await new Promise((X)=>setTimeout(X,W))}}function uB($,Z={}){if(gB())return;let Q=vB(),J=e1(Z),W=T1(J.host,J.port,J.pathname),X=Z.allowPortFallback===!0&&J.port!==0;cB(Q).catch(()=>{return}).then(()=>D0(Q.discoveryPath)).then(async(Y)=>{let j=!1;if(Y?.url)if(!Y.authToken){if(j=!0,!await S5(Y,Q.discoveryPath)&&!X)return}else{let H=await r$(Y.url,Y.authToken);if(H?.url&&p$(H)&&await Z$(H.url,{authToken:Y.authToken}))return;if(H?.url)await H4({...H,authToken:Y.authToken},Q.discoveryPath);else await e0(Q.discoveryPath).catch(()=>{return})}let V=await r$(W);if(V?.url){if(p$(V)){if(!X||!j)return}else if(!await H4({...V,authToken:void 0},Q.discoveryPath)&&!X)return}let B=X?{...J,port:0}:J;await b5($,B)}).catch(()=>{})}async function gl($,Z={}){let Q=vB(),J=Z.host!==void 0||Z.port!==void 0||Z.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=e1(Z),X=T1(W.host,W.port,W.pathname),Y=(F)=>{if(!J)c2(F.url,F.authToken);return F};await cB(Q).catch(()=>{return});let j=await D0(Q.discoveryPath),V=!1;if(j?.url){let F=j.authToken;if(!F)V=!0,await S5(j,Q.discoveryPath);else{let A=await r$(j.url,F);if(A?.url&&p$(A)&&await Z$(A.url,{authToken:F}))return Y({url:A.url,authToken:F});if(A?.url)await H4({...A,authToken:F},Q.discoveryPath);else await e0(Q.discoveryPath).catch(()=>{return})}}let B=await r$(X);if(B?.url){let F=xB(B,j,X);if(p$(B))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 H4(F,Q.discoveryPath)&&Z.allowPortFallback!==!0&&W.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&&W.port!==0?{...W,port:0}:W;await b5($,G);let K=Date.now()+xR;while(Date.now()<K){let F=await D0(Q.discoveryPath);if(F?.url&&F.authToken){let D=await r$(F.url,F.authToken);if(D?.url&&p$(D)&&await Z$(D.url,{authToken:F.authToken}))return Y({url:D.url,authToken:F.authToken})}let A=await r$(X);if(A?.url&&!p$(A)){let D=xB(A,F,X);if(!await H4(D,Q.discoveryPath)&&Z.allowPortFallback!==!0&&W.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((D)=>setTimeout(D,gR))}throw Error("Timed out waiting for detached hub startup.")}function h5(){return tR()==="production"?$$():O1()}function $N(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function iB($){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 iB($.data);return String($)}function ZN($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function dB($){let Z=$,Q=ZN(Z.reason);return new p0("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:s7,{closeCode:Z.code,closeReason:Q||void 0})}function QN($,Z){if($ instanceof p0)return $;if($ instanceof Error)return new p0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new p0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new p0("hub_connect_failed",Q);let J=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new p0("hub_connect_failed",J?`Failed to connect to hub at ${Z.toString()} (${J} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var JN=8000,WN=200,lB="*",pB=8000,XN="cline-hub-auth.",nB=new Map,aB=new Set,YN=3000,jN=3000,VN=100,s7="Hub connection closed",BN=250,HN=5000,rB=0.5;class p0 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function GN($){return $ instanceof p0}class y5 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function oB($,Z){return $ instanceof y5&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function sB($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=$3($.toString());return Q?nB.get(Q):void 0}function KN($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function $3($){if(!KN($))return;let Z=new URL(u2($));return Z.search="",Z.hash="",Z.toString()}function t7($){let Z=$3($);return!!Z&&aB.has(Z)}function c2($,Z){let Q=$3($);if(Q){if(aB.add(Q),Z?.trim())nB.set(Q,Z)}return $}class q1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new p0("hub_connection_closed",s7);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()||sB($);$.hash="";let J=new($N())($.toString(),Z?[`${XN}${Z}`]:void 0);this.socket=J;let W=!1;this.connectPromise=new Promise((X,Y)=>{let j=!1,V=setTimeout(()=>{if(j)return;j=!0,W=!0,this.lastCloseError=new p0("hub_connect_timeout",`Timed out connecting to hub after ${pB}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{J.close()}catch{}Y(this.lastCloseError)},pB);J.addEventListener("open",()=>{if(j)return;j=!0,clearTimeout(V),X()}),J.addEventListener("error",(B)=>{if(j)return;j=!0,clearTimeout(V),this.lastCloseError=QN(B,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)}),J.addEventListener("close",(B)=>{if(j)return;if(j=!0,clearTimeout(V),!W)this.lastCloseError=dB(B),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,Y(this.lastCloseError)})}),J.addEventListener("message",(X)=>{this.handleFrame(JSON.parse(iB(X)))}),J.addEventListener("close",(X)=>{if(this.socket!==J)return;if(!W)this.lastCloseError=dB(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,J={listener:$,sessionId:Q};return this.listeners.add(J),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(J))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,J){let W=0,X=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,J)}catch(Y){if(!X||W>=1||!await this.recoverLocalHubTransport(Y))throw Y;W+=1}}async commandOnce($,Z,Q,J){await this.connect();let W=oR("hubreq_"),X=eR($,J?.timeoutMs),Y=new Promise((V,B)=>{let H=X===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(W))return;B(new y5($,"hub_command_timeout",`Hub command ${$} timed out after ${X}ms (hub=${this.currentUrl}, requestId=${W}, 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(W,{resolve:(G)=>{if(H)clearTimeout(H);V(G)},reject:(G)=>{if(H)clearTimeout(H);B(G)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:W,clientId:this.clientId,sessionId:Q,timeoutMs:X,payload:Z}})}catch(V){throw this.pendingReplies.delete(W),V}let j=await Y;if(!j.ok){if(j.error?.code===i8){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new I$(V,j.error.message)}throw new y5($,j.error?.code,j.error?.message??`Hub command ${$} failed`)}return j}async recoverLocalHubTransport($){if(!t7(this.currentUrl)||!GN($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await G4({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(BN*2**this.reconnectAttempt,HN),Z=Math.round($*(1-rB)+Math.random()*$*rB);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(!t7(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await G4({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 p0("hub_connection_closed",s7),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 p0("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($),J=(this.subscriptionCounts.get(Q)??0)+Z;if(J<=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,J),Z>0&&J===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??lB}subscriptionSessionIdFromKey($){return $===lB?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 u2($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function Z$($,Z){let Q=new q1({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 e7($,Z){let Q=u2($),J=await l$(Q,{authToken:Z?.authToken});if(!J)return{status:"unreachable",url:Q};if(!sR(J).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await Z$(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function FN($){let Z=Date.now()+JN;while(Date.now()<Z){let Q=await D0($.discoveryPath);if(Q?.url){let J=await e7(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(J.status==="compatible")return c2(J.url,Q.authToken)}await new Promise((J)=>setTimeout(J,WN))}return}async function AN($){let Z=Date.now()+jN;while(Date.now()<Z){if(!(await l$($).catch(()=>{return}))?.url)return!0;await new Promise((J)=>setTimeout(J,VN))}return!1}function fN($,Z){try{return u2($)===u2(Z)}catch{return!1}}function UN($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let J=Q;if(J.status==="running"||J.status==="idle"||J.status==="pending")return!0;return Array.isArray(J.participants)&&J.participants.length>0})}async function DN($,Z,Q){let J=new q1({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let W=await J.command("session.list",{limit:500},void 0,{timeoutMs:YN});return!UN(W.payload)}catch{return!1}finally{await J.dispose().catch(()=>{return})}}async function Z3($={}){if($.endpoint?.trim()){let W=await e7($.endpoint);return W.status==="compatible"?W.url:void 0}let Z=h5(),Q=await D0(Z.discoveryPath);if(!Q?.url)return;let J=await e7(Q.url,{authToken:Q.authToken});if(J.status==="compatible")return c2(J.url,Q.authToken);if(J.status==="protocol_mismatch")await e0(Z.discoveryPath).catch(()=>{return});return}async function G4($={}){let Z=await Z3($);if(Z&&await Z$(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;let Q=h5();return await b5($.workspaceRoot??process.cwd()),await FN(Q)}async function o7($,Z){let Q=new URL($),J=Z?.trim()||sB(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:J?{authorization:`Bearer ${J}`}:void 0})).ok}async function LN($=h5()){let Z=await D0($.discoveryPath);if(!Z?.url)return!1;try{if(await o7(Z.url,Z.authToken))return!0}catch{}return!1}async function tB($){if(!t7($.url))return;let Z=h5(),Q=await D0(Z.discoveryPath);if(!Q?.url||!fN(Q.url,$.url))return;if(!await DN(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await LN())return;if(!await AN(Q.url))return;return await e0(Z.discoveryPath).catch(()=>{return}),await G4({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{captureSdkError as W3,createSessionId as WH,HUB_CHECKPOINT_CAPABILITY as NN,HUB_COMPACTION_CAPABILITY as EN,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as wN,HUB_HOOK_CAPABILITY_PREFIX as CN,HUB_MISTAKE_LIMIT_CAPABILITY as PN,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as SN,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as bN,isHubToolExecutorName as yN}from"@cline/shared";import{createHash as _N}from"node:crypto";import{formatDisplayUserInput as eB}from"@cline/shared";import{z as Y1}from"zod";function TN($){if(!$||typeof $!=="object"||Array.isArray($))return!1;let Z=$;if(Z.role!=="user"&&Z.role!=="assistant")return!1;return typeof Z.content==="string"||Array.isArray(Z.content)}var ON=Y1.custom(TN),k5=Y1.object({version:Y1.literal(1),updated_at:Y1.string().datetime(),conversation_id:Y1.string().min(1).optional(),source_message_count:Y1.number().int().nonnegative(),source_prefix_hash:Y1.string().min(1).optional(),source_last_message_key:Y1.string().min(1).optional(),messages:Y1.array(ON),system_prompt:Y1.string().optional()});function Q3($){return JSON.parse(JSON.stringify($))}function $H($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:eB($.content)};return{...$,content:$.content.map((Z)=>Z.type==="text"?{...Z,text:eB(Z.text)}:Z)}}function ZH($){if($.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function qN($){let Z=$H($);return ZH(Z.role),[["role",Z.role],["content",Z.content],["id",Z.id??null],["agent",Z.agent??null],["sessionId",Z.sessionId??null],["metadata",Z.metadata??null],["modelInfo",Z.modelInfo??null],["metrics",Z.metrics??null],["ts",Z.ts??null]]}function QH($){if(!$)return"";let Z=$H($);if(typeof Z.id==="string"&&Z.id.trim())return`id:${Z.id.trim()}`;if(ZH(Z.role),typeof Z.ts==="number"&&Number.isFinite(Z.ts))return`ts:${Z.role}:${Z.ts}`;return`content:${Z.role}:${JSON.stringify(Z.content)}`}function JH($,Z=$.length){let Q=_N("sha256");Q.update(`cline-session-compaction-source-v1
459
+ `),Q.update(`${Z}
460
+ `);for(let J of $.slice(0,Z))Q.update(JSON.stringify(qN(J))),Q.update(`
461
+ `);return`sha256:${Q.digest("hex")}`}function I5($){let Z=$.sourceMessages.at(-1),Q=QH(Z);return k5.parse({version:1,updated_at:$.updatedAt??new Date().toISOString(),...$.conversationId?.trim()?{conversation_id:$.conversationId.trim()}:{},source_message_count:$.sourceMessages.length,source_prefix_hash:JH($.sourceMessages),...Q?{source_last_message_key:Q}:{},messages:Q3($.compactedMessages),...$.systemPrompt!==void 0?{system_prompt:$.systemPrompt}:{}})}function K4($,Z){if(!($.source_message_count<=Z.length))return;let J=!!$.source_prefix_hash&&JH(Z,$.source_message_count)===$.source_prefix_hash,W=Z[$.source_message_count-1],X=!$.source_prefix_hash&&$.source_message_count>0&&!!$.source_last_message_key&&QH(W)===$.source_last_message_key;if(!(J||X))return;return[...Q3($.messages),...Q3(Z.slice($.source_message_count))]}function z1($){let Z=k5.safeParse($);return Z.success?Z.data:void 0}function zN($){return $?JSON.parse(JSON.stringify($)):void 0}function MN($){return $?JSON.parse(JSON.stringify($)):void 0}function RN($){let Z=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,J=(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),B=Number(Y.runCount);if(!j||!Number.isFinite(V)||!Number.isInteger(B))return[];return[{ref:j,createdAt:V,runCount:B,...Y.kind==="stash"||Y.kind==="commit"?{kind:Y.kind}:{}}]}),W=J.at(-1),X=$?.checkpointEnabled===!0?!0:void 0;if(!X&&J.length===0)return;return{...X?{enabled:X}:{},...W?{latest:W}:{},history:J}}function Q$($){let{session:Z}=$,Q=zN(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:MN($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let J=RN(Q);return J?{checkpoint:J}:{}})()}}function J3($){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 d2($){if(!$)return;return JSON.parse(JSON.stringify($))}var hN=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function XH($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function YH($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function jH($){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 i$($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function VH($,Z){let Q={manifest:[],handlers:new Map};for(let W of Object.keys(Z.toolExecutors??{}).filter(yN)){let X=Z.toolExecutors?.[W];if(typeof X!=="function")continue;i$(Q,{kind:"toolExecutor",executor:W,capabilityName:`${SN}${W}`},async({payload:Y,abortSignal:j})=>{let V=Array.isArray(Y.args)?[...Y.args]:[],B={...jH(Y.context),signal:j};return{result:await X(...V,B)}})}for(let W of $?.extraTools??[])i$(Q,{kind:"tool",name:W.name,description:W.description,inputSchema:d2(W.inputSchema)??{},...W.lifecycle?{lifecycle:d2(W.lifecycle)}:{},capabilityName:`${wN}${W.name}`},async({payload:X,abortSignal:Y,progress:j})=>{let V={...jH(X.context),signal:Y};return{result:await W.execute(X.input,{...V,emitUpdate:(H)=>{j({update:H})}})}});let J=$?.hooks;if(J)for(let W of hN){let X=J[W];if(typeof X!=="function")continue;i$(Q,{kind:"hook",name:W,capabilityName:`${CN}${W}`},async({payload:Y})=>({control:await X(Y.context)}))}if($?.compaction?.compact){let W=$.compaction.compact;i$(Q,{kind:"compaction",capabilityName:EN,config:XH($.compaction)},async({payload:X})=>({result:await W(X.context)}))}if($?.checkpoint?.createCheckpoint){let W=$.checkpoint.createCheckpoint;i$(Q,{kind:"checkpoint",capabilityName:NN,config:XH($.checkpoint)},async({payload:X})=>({result:await W(X.context)}))}if($?.onConsecutiveMistakeLimitReached){let W=$.onConsecutiveMistakeLimitReached;i$(Q,{kind:"mistakeLimit",capabilityName:PN},async({payload:X})=>({result:await W(X.context)}))}if($?.userInstructionService){let W=$.userInstructionService;i$(Q,{kind:"userInstructionService",capabilityName:bN},async()=>{return await W.start().catch(()=>{}),{snapshot:{records:{skill:W.listRecords("skill"),rule:W.listRecords("rule"),workflow:W.listRecords("workflow")},runtimeCommands:W.listRuntimeCommands()}}})}return Q}function KH($){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 kN($){return KH($)??"Capability request was cancelled."}function IN($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function xN($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function gN($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=typeof Z.inputTokens==="number"?Z.inputTokens:void 0,J=typeof Z.outputTokens==="number"?Z.outputTokens:void 0;if(Q===void 0||J===void 0)return;return{inputTokens:Q,outputTokens:J,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 BH($){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 X3($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function J$($,Z){return X3($?.[Z])??0}function mN($){let Z=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,J=$?.agent&&typeof $.agent==="object"?$.agent:void 0,W=J?.teamRole==="teammate"||J?.teamRole==="lead"?J.teamRole:void 0;return{event:{type:"usage",agentId:typeof J?.agentId==="string"?J.agentId:void 0,conversationId:typeof J?.conversationId==="string"?J.conversationId:void 0,parentAgentId:typeof J?.parentAgentId==="string"?J.parentAgentId:void 0,inputTokens:J$(Z,"inputTokens"),outputTokens:J$(Z,"outputTokens"),cacheReadTokens:J$(Z,"cacheReadTokens"),cacheWriteTokens:J$(Z,"cacheWriteTokens"),cost:X3(Z?.totalCost),totalInputTokens:J$(Q,"inputTokens"),totalOutputTokens:J$(Q,"outputTokens"),totalCacheReadTokens:J$(Q,"cacheReadTokens"),totalCacheWriteTokens:J$(Q,"cacheWriteTokens"),totalCost:X3(Q?.totalCost)},teamAgentId:typeof J?.teamAgentId==="string"?J.teamAgentId:void 0,teamRole:W}}function vN($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,J=xN(Q)?Q:Q==="failed"?"error":"completed",W=gN($?.usage??Z?.usage);return{type:"done",reason:J,text:typeof $?.text==="string"?$.text:typeof Z?.text==="string"?Z.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof Z?.iterations==="number"?Z.iterations:0,usage:W}}function n$($,Z){return $.error?.message??`hub command failed: ${Z}`}function F4($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function FH($){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:w0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:F4($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:F4($.status)==="completed"?0:F4($.status)==="failed"?1:void 0,status:F4($.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 W$($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function cN($){let Z=W$($?.snapshot);if(Z)return J3(Z);let Q=$?.session;return Q?FH(Q):void 0}function HH($,Z,Q){let J=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot||Z.config.cwd;return h0.parse({version:1,session_id:$,source:Z.source??w0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:F4(Q?.status),interactive:Z.interactive===!0,provider:Z.config.providerId,model:Z.config.modelId,cwd:Q?.cwd?.trim()||Z.config.cwd,workspace_root:J,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 GH($,Z){return h0.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 a${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new Y4;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=C0($.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 q1({...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(!oB($,"session.create"))return!1;let Z=await tB({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=VH($.localRuntime,Z),J=$.config.sessionId?.trim()||WH(),W=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:d2({...$.config,sessionId:J}),metadata:{...$.sessionMetadata??{},source:$.source??w0.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:d2($.toolPolicies),initialMessages:$.initialMessages,...$.initialCompactionState?{initialCompactionState:$.initialCompactionState}:{}});this.registerPlannedSession(J,Z,Q.handlers);let X;try{X=await W()}catch(B){if(this.cleanupPlannedSession(J),await this.recoverLocalHubStartupDeadlock(B)){this.registerPlannedSession(J,Z,Q.handlers);try{X=await W()}catch(H){throw this.cleanupPlannedSession(J),H}}else throw B}let Y=W$(X.payload?.snapshot),j=X.payload?.session,V=(Y?.sessionId??j?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(J),Error("Hub runtime did not return a session id.");if(V!==J)this.cleanupPlannedSession(J),this.registerPlannedSession(V,Z,Q.handlers);return{sessionId:V,manifest:Y?GH(Y,$):HH(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 J=$.start,W=J?this.resolveCapabilities(J):void 0,X=J?VH(J.localRuntime,W??{}):{manifest:[],handlers:new Map},Y=J?J.config.sessionId?.trim()||WH():void 0;if(Y&&W)this.sessionCapabilities.set(Y,W);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,...J?{workspaceRoot:J.config.workspaceRoot?.trim()||J.config.cwd,cwd:J.config.cwd??$.cwd,sessionConfig:d2({...J.config,sessionId:Y}),metadata:{...J.sessionMetadata??{},source:J.source??w0.CORE,provider:J.config.providerId,model:J.config.modelId,enableTools:J.config.enableTools,enableSpawn:J.config.enableSpawnAgent,enableTeams:J.config.enableAgentTeams,teamName:J.config.teamName,prompt:J.prompt,interactive:J.interactive===!0},runtimeOptions:{...X.manifest.length>0?{clientContributions:X.manifest}:{},...J.localRuntime?.configExtensions?{configExtensions:J.localRuntime.configExtensions}:{}},toolPolicies:d2(J.toolPolicies),...J.initialCompactionState?{initialCompactionState:J.initialCompactionState}:{}}:{}},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=W$(j.payload?.snapshot),B=j.payload?.session,H=(V?.sessionId??B?.sessionId)?.trim();if(Q&&!H){if(Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);throw Error("Hub checkpoint restore returned no session id")}if(H&&Y&&H!==Y)this.sessionCapabilities.delete(Y),this.sessionClientContributionHandlers.delete(Y),this.disposeSessionSubscription(Y);if(H&&W)this.sessionCapabilities.set(H,W);if(H&&X.handlers.size>0)this.sessionClientContributionHandlers.set(H,X.handlers);if(H)this.ensureSessionSubscription(H);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:H,startResult:H?{sessionId:H,manifest:V?GH(V,J??{}):HH(H,J??{},B),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=W$(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 J=Z.payload?.session,W=BH(J?.usage),X=BH(J?.aggregateUsage);return W||X?{usage:W,aggregateUsage:X}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:KH(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(x$(Q))return;throw Q}return cN(Z.payload)}async listSessions($=100){let Z=await this.client.command("session.list",{limit:$}),Q=Array.isArray(Z.payload?.snapshots)?Z.payload.snapshots.flatMap((W)=>{let X=W$(W);return X?[J3(X)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(FH)}async listSettings($){let Z=await this.client.command("settings.list",YH($));if(!Z.ok)throw Error(n$(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",YH($));if(!Z.ok)throw Error(n$(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 updateSessionConnection($,Z){let Q=$.trim();if(!Q)return;let J=await this.client.command("session.update_connection",{sessionId:Q,updates:Z},Q);if(!J.ok)throw Error(n$(J,"session.update_connection"))}async updateSessionCompactionState($,Z){let Q=$.trim();if(!Q)return{updated:!1};let J=await this.client.command("session.compaction.update",{sessionId:Q,state:Z},Q);if(!J.ok)W3(this.telemetry,{component:"core",operation:"hub.runtime_host.update_session_compaction_state",error:Error(n$(J,"session.compaction.update")),severity:"warn",handled:!0,context:{command:"session.compaction.update",sessionId:Q,errorCode:J.error?.code}});return{updated:J.ok&&J.payload?.updated===!0}}async readSessionCompactionState($){let Z=$.trim();if(!Z)return;let Q=await this.client.command("session.compaction.get",{sessionId:Z},Z);if(!Q.ok)throw Error(n$(Q,"session.compaction.get"));return z1(Q.payload?.state)}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw W3(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(n$(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(n$(Q,"session.messages"));let J=Q.payload?.messages;return Array.isArray(J)?J:[]}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((J)=>{this.handleHubEvent(J)},{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 C0(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:vN($.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=W$($.payload?.snapshot),J=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:J?.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:"",J=$.payload?.redacted===!0;if(!Q&&!J)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:J}}});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=mN($.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=W$($.payload?.snapshot),J=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:J?.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=W$($.payload?.snapshot),J=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:Z,payload:{...$.payload,reason:J}}),Q?.interactive===!0&&V0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:J,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{W3(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 J=typeof $.payload?.requestId==="string"?$.payload.requestId:"",W=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!J)return;let X=this.sessionClientContributionHandlers.get(Z)?.get(W);if(!X){await this.client.command("capability.respond",{requestId:J,ok:!1,error:`No client contribution handler registered for capability ${W} 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(J,j);let V=(B)=>{this.client.command("capability.progress",{requestId:J,payload:B},Z).catch((H)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",H,$)})};try{let B=await X({payload:Y,abortSignal:j.signal,progress:V});if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:J,ok:!0,payload:B},Z)}catch(B){if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:J,ok:!1,error:B instanceof Error?B.message:String(B)},Z)}finally{this.activeCapabilityAbortControllers.delete(J)}}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(kN($.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 J=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",W=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",X=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!J||!W||!X)return;let Y=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},j=IN($.payload?.inputJson);this.pendingApprovalToolCallIds.add(W),this.emitToolCallContentStart({sessionId:Z,toolCallId:W,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:W,toolName:X,input:j,policy:Y})).catch((B)=>({approved:!1,reason:B instanceof Error?B.message:`Tool approval request failed: ${String(B)}`}));await this.client.command("approval.respond",{approvalId:J,approved:V.approved,reason:V.reason},Z).catch(()=>{})}}class x5 extends a${constructor($){super({url:u2($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}import{existsSync as uN,mkdirSync as dN}from"node:fs";import{join as lN}from"node:path";import{asBool as A4,asOptionalString as j1,asString as M1,ensureSessionSchema as pN,loadSqliteDb as rN,nowIso as g5,toBoolInt as f4}from"@cline/shared/db";import{resolveDbDataDir as iN}from"@cline/shared/storage";class X${sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??iN()}init(){this.getRawDb()}ensureSessionsDir(){if(!uN(this.sessionsDirPath))dN(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return lN(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=rN(this.sessionDbPath());return pN($,{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=g5();this.run(`INSERT OR REPLACE INTO sessions (
459
462
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
460
463
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
461
464
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
462
465
  metadata_json, transcript_path, hook_path, messages_path, updated_at
463
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,V4($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,V4($.enableTools),V4($.enableSpawn),V4($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,V4($.isSubagent),$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"",$.hookPath??"",$.messagesPath??null,Z])}update($){let Z=[],Q=[];if($.endedAt!==void 0)Z.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)Z.push("exit_code = ?"),Q.push($.exitCode);if($.status!==void 0)Z.push("status = ?"),Q.push($.status);if($.prompt!==void 0)Z.push("prompt = ?"),Q.push($.prompt);if($.metadata!==void 0)Z.push("metadata_json = ?"),Q.push($.metadata?JSON.stringify($.metadata):null);if($.parentSessionId!==void 0)Z.push("parent_session_id = ?"),Q.push($.parentSessionId);if($.parentAgentId!==void 0)Z.push("parent_agent_id = ?"),Q.push($.parentAgentId);if($.agentId!==void 0)Z.push("agent_id = ?"),Q.push($.agentId);if($.conversationId!==void 0)Z.push("conversation_id = ?"),Q.push($.conversationId);if(Z.length===0)return;Z.push("updated_at = ?"),Q.push(P5()),Q.push($.sessionId),this.run(`UPDATE sessions SET ${Z.join(", ")} WHERE session_id = ?`,Q)}updateStatus($,Z,Q){this.update({sessionId:$,status:Z,endedAt:j0(Z)?null:P5(),exitCode:j0(Z)?null:Q??(Z==="failed"?1:0)})}get($){let Z=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
466
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,f4($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,f4($.enableTools),f4($.enableSpawn),f4($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,f4($.isSubagent),$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"",$.hookPath??"",$.messagesPath??null,Z])}update($){let Z=[],Q=[];if($.endedAt!==void 0)Z.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)Z.push("exit_code = ?"),Q.push($.exitCode);if($.status!==void 0)Z.push("status = ?"),Q.push($.status);if($.prompt!==void 0)Z.push("prompt = ?"),Q.push($.prompt);if($.metadata!==void 0)Z.push("metadata_json = ?"),Q.push($.metadata?JSON.stringify($.metadata):null);if($.parentSessionId!==void 0)Z.push("parent_session_id = ?"),Q.push($.parentSessionId);if($.parentAgentId!==void 0)Z.push("parent_agent_id = ?"),Q.push($.parentAgentId);if($.agentId!==void 0)Z.push("agent_id = ?"),Q.push($.agentId);if($.conversationId!==void 0)Z.push("conversation_id = ?"),Q.push($.conversationId);if(Z.length===0)return;Z.push("updated_at = ?"),Q.push(g5()),Q.push($.sessionId),this.run(`UPDATE sessions SET ${Z.join(", ")} WHERE session_id = ?`,Q)}updateStatus($,Z,Q){this.update({sessionId:$,status:Z,endedAt:V0(Z)?null:g5(),exitCode:V0(Z)?null:Q??(Z==="failed"?1:0)})}get($){let Z=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
464
467
  provider, model, cwd, workspace_root, team_name,
465
468
  enable_tools, enable_spawn, enable_teams,
466
469
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
467
470
  prompt, metadata_json, hook_path, messages_path, updated_at
468
- FROM sessions WHERE session_id = ?`,[$]);if(!Z)return;return{sessionId:T1(Z.session_id),source:T1(Z.source),pid:Number(Z.pid??0),startedAt:T1(Z.started_at),endedAt:Z.ended_at??null,exitCode:Z.exit_code??null,status:T1(Z.status),interactive:j4(Z.interactive),provider:T1(Z.provider),model:T1(Z.model),cwd:T1(Z.cwd),workspaceRoot:T1(Z.workspace_root),teamName:Q1(Z.team_name),enableTools:j4(Z.enable_tools),enableSpawn:j4(Z.enable_spawn),enableTeams:j4(Z.enable_teams),parentSessionId:Q1(Z.parent_session_id),parentAgentId:Q1(Z.parent_agent_id),agentId:Q1(Z.agent_id),conversationId:Q1(Z.conversation_id),isSubagent:j4(Z.is_subagent),prompt:Q1(Z.prompt),metadata:(()=>{let Q=Q1(Z.metadata_json);if(!Q)return;try{let W=JSON.parse(Q);if(W&&typeof W==="object"&&!Array.isArray(W))return W}catch{}return})(),hookPath:Q1(Z.hook_path),messagesPath:Q1(Z.messages_path),updatedAt:Q1(Z.updated_at)??P5()}}list($=200){let Z=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Q=[];for(let W of Z){let J=this.get(T1(W.session_id));if(J)Q.push(J)}return Q}delete($,Z=!1){let Q=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(Z)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}}g2();import{existsSync as UW,mkdirSync as zN,readFileSync as AH,renameSync as TN,writeFileSync as ON}from"node:fs";import{join as fH}from"node:path";import{resolveSessionDataDir as qN}from"@cline/shared/storage";import{dirname as LN}from"node:path";import{nanoid as _N}from"nanoid";import{execFile as PE}from"node:child_process";import{promisify as SE}from"node:util";var bE=SE(PE);function t7($,Z){$?.log(Z,{severity:"warn"})}function yE($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))return;let Q=Z;if(!Q.latest||!Array.isArray(Q.history))return;let W=Q.latest,J=Q.history.filter((X)=>!!X&&typeof X==="object"&&typeof X.ref==="string"&&typeof X.createdAt==="number"&&typeof X.runCount==="number");if(typeof W.ref!=="string"||typeof W.createdAt!=="number"||typeof W.runCount!=="number")return;return{latest:W,history:J}}async function d$($,Z){let Q=await bE("git",["-C",$,...Z],{windowsHide:!0});return{stdout:Q.stdout.trim(),stderr:Q.stderr.trim()}}async function e7($,Z){if(!$)return;let Q=`refs/cline/checkpoints/${Z}/`;try{let{stdout:W}=await d$($,["for-each-ref","--format=%(refname)",Q]),J=W.trim().split(`
469
- `).filter(Boolean);await Promise.allSettled(J.map((X)=>d$($,["update-ref","-d",X])))}catch{}}async function tB($,Z,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((W)=>d$($,["update-ref",`refs/cline/checkpoints/${Z}/${W.runCount}`,W.ref])))}function hE($,Z){let Q=$.findIndex((W)=>W.runCount===Z.runCount);if(Q<0)return[...$,Z];return $.map((W,J)=>J===Q?Z:W)}function eB($){let Z=$.initialRunCount??0,Q,W=async()=>{if(Q!==void 0)return Q;try{Q=(await d$($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Q=!1}return Q},J=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:Z});if(!await W())return;let X=async(B)=>{try{let G=(await d$($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:Z,kind:"commit"}}catch(H){t7($.logger,`${B}: ${H instanceof Error?H.message:String(H)}`);return}},Y=`cline checkpoint session=${$.sessionId} run=${Z}`,j="";try{j=(await d$($.cwd,["stash","create",Y])).stdout.trim()}catch(B){return t7($.logger,`Checkpoint snapshot failed: ${B instanceof Error?B.message:String(B)}`),X("Checkpoint HEAD fallback failed")}if(!j)return X("Checkpoint HEAD fallback failed");let V=`refs/cline/checkpoints/${$.sessionId}/${Z}`;try{await d$($.cwd,["update-ref",V,j])}catch(B){t7($.logger,`Checkpoint store failed: ${B instanceof Error?B.message:String(B)}`);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=yE(j);if(V?.latest.ref===Y.ref)return;let B=hE(V?.history??[],Y);await $.writeSessionMetadata({...j??{},checkpoint:{latest:Y,history:B}});return}}}import{existsSync as b5,mkdirSync as kE,readdirSync as IE,rmdirSync as xE,rmSync as gE,unlinkSync as mE}from"node:fs";import{dirname as $H,join as S5}from"node:path";function $0(){return new Date().toISOString()}function B4($){if(!$||!b5($))return;try{mE($)}catch{}}function vE($){let Z=o8($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=_5($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class $W{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return S5(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!b5(Z))kE(Z,{recursive:!0});return Z}sessionMessagesPath($){return S5(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return S5(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!b5(Z)){Z=$H(Z);continue}try{if(IE(Z).length>0)break;xE(Z)}catch{break}Z=$H(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!b5($))return;try{gE($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:W,fileStem:J}=vE($),X=this.sessionArtifactsDir(W);return{messagesPath:S5(X,`${J}.messages.json`)}}}import{appendFileSync as cE,existsSync as uE,mkdirSync as ZH,readFileSync as dE,writeFileSync as QH}from"node:fs";import{dirname as WH,join as lE}from"node:path";import{ensureHookLogDir as pE}from"@cline/shared/storage";class ZW{adapter;messagesArtifactUploader;logger;artifacts;constructor($,Z,Q){this.adapter=$;this.messagesArtifactUploader=Z;this.logger=Q;this.artifacts=new $W(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,Z,Q){JB(Z,Q,h7($))}writeSessionManifest($,Z){ZH(WH($),{recursive:!0}),QH($,`${JSON.stringify(N0.parse(Z),null,2)}
470
- `,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let Z=this.artifacts.sessionManifestPath($,!1);if(!uE(Z))return{path:Z};try{return{path:Z,manifest:N0.parse(JSON.parse(dE(Z,"utf8")))}}catch{return{path:Z}}}async resolveArtifactPath($,Z,Q){let J=(await this.adapter.getSession($))?.[Z];return typeof J==="string"&&J.trim().length>0?J:Q($)}async persistSessionMessages($,Z,Q){let W=await this.resolveArtifactPath($,"messagesPath",(Y)=>this.artifacts.sessionMessagesPath(Y)),J=k7({updatedAt:$0(),context:h7($),messages:Z,systemPrompt:Q}),X=`${JSON.stringify(J,null,2)}
471
- `;if(ZH(WH(W),{recursive:!0}),QH(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)??lE(pE(),"hooks.jsonl");cE(Y,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:W,sessionId:Z,pid:Q,source:J})}
472
- `,"utf8")}}import{appendFileSync as rE}from"node:fs";import{join as iE}from"node:path";import{resolveRootSessionId as JH}from"@cline/shared";import{ensureHookLogDir as nE}from"@cline/shared/storage";import{z as QW}from"zod";var aE="subagent",sE=QW.looseObject({task:QW.string().optional(),systemPrompt:QW.string().optional()});class y5{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,Z,Q,W){this.adapter=$;this.manifestStore=Z;this.toPersistedMessages=Q;this.heartbeatLogIntervalMs=W}teamTaskQueueKey($,Z){return`${$}::${Z}`}activeTeamTaskSessionId($,Z){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,Z))?.at(-1)}buildSubsessionRow($,Z){return{sessionId:Z.sessionId,source:aE,pid:process.ppid,startedAt:Z.startedAt,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:!1,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:Z.parentSessionId,parentAgentId:Z.parentAgentId,agentId:Z.agentId,conversationId:Z.conversationId??null,isSubagent:!0,prompt:Z.prompt,metadata:e8({prompt:Z.prompt}),hookPath:"",messagesPath:Z.messagesPath,updatedAt:Z.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let Z=JH($.sessionContext);if(!Z)return;let Q=sE.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:Z,parentAgentId:$.agent_id,task:Q.success?Q.data.task:void 0,systemPrompt:Q.success?Q.data.systemPrompt:void 0})}async upsertSubagentSession($){let Z=$.rootSessionId;if(!Z)return;let Q=await this.adapter.getSession(Z);if(!Q)return;let W=L5(Z,$.agentId),J=await this.adapter.getSession(W),X=$0(),Y=this.manifestStore.artifacts.subagentArtifactPaths(W,$.agentId,this.activeTeamTaskSessionId(Z,$.parentAgentId)),j=$.prompt??J?.prompt??void 0;if(!j)j=await this.adapter.claimSpawnRequest(Z,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!J)return await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:W,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:j,startedAt:X,...Y})),this.manifestStore.initializeMessagesFile(W,Y.messagesPath,X),W;return await this.adapter.updateSession({sessionId:W,setRunning:!0,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:J.prompt??j??null,metadata:e8({metadata:J.metadata??void 0,prompt:J.prompt??j??null}),expectedStatusLock:J.statusLock}),W}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let Z=JH($.sessionContext);if(!Z)return;if($.hookName==="session_shutdown"){let Q=L5(Z,$.agent_id);return await this.adapter.getSession(Q)?Q:void 0}return await this.upsertSubagentSession({agentId:$.agent_id,parentAgentId:$.parent_agent_id,conversationId:$.taskId,rootSessionId:Z})}async applySubagentStatus($,Z){await this.applySubagentStatusBySessionId($,P7(Z))}async applySubagentStatusBySessionId($,Z){let Q=await this.adapter.getSession($);if(!Q)return;let W=j0(Z)?null:$0(),J=j0(Z)?null:Z==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:Z,endedAt:W,exitCode:J,expectedStatusLock:Q.statusLock})}async applyStatusToRunningChildSessions($,Z){if(!$)return;let Q=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let W of Q)await this.applySubagentStatusBySessionId(W.sessionId,Z)}async onTeamTaskStart($,Z,Q){let W=await this.adapter.getSession($);if(!W)return;let J=w7($,Z),X=$0(),{messagesPath:Y}=this.manifestStore.artifacts.subagentArtifactPaths(J,Z);await this.adapter.upsertSession(this.buildSubsessionRow(W,{sessionId:J,parentSessionId:$,parentAgentId:"lead",agentId:Z,prompt:Q||`Team task for ${Z}`,startedAt:X,messagesPath:Y})),this.manifestStore.initializeMessagesFile(J,Y,X);let j=this.teamTaskQueueKey($,Z),V=this.teamTaskSessionsByAgent.get(j)??[];V.push(J),this.teamTaskSessionsByAgent.set(j,V)}async onTeamTaskEnd($,Z,Q,W,J,X){let Y=this.teamTaskQueueKey($,Z),j=this.teamTaskSessionsByAgent.get(Y);if(!j||j.length===0)return;let V=j.shift();if(j.length===0)this.teamTaskSessionsByAgent.delete(Y);if(!V)return;let B=J?.messages??X,H=this.toPersistedMessages(B,J,X);if(H)await this.manifestStore.persistSessionMessages(V,H);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 B=Date.now(),H=this.teamTaskLastHeartbeatBySession.get(X)??0;if(B-H<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(X,B)}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)??iE(nE(),"hooks.jsonl");rE(Q,`${JSON.stringify({ts:$0(),...$})}
473
- `,"utf8")}}import{formatUserInputBlock as DN}from"@cline/shared";import{existsSync as oE,readdirSync as tE,readFileSync as eE}from"node:fs";import{basename as XH,extname as $N,join as ZN}from"node:path";import{resolveAgentConfigSearchPaths as QN}from"@cline/shared/storage";import jH from"yaml";import{z as q0}from"zod";var VH=q0.object({name:q0.string().trim().min(1),description:q0.string().trim().min(1),tools:q0.union([q0.string(),q0.array(q0.string())]).optional(),skills:q0.union([q0.string(),q0.array(q0.string())]).optional(),providerId:q0.string().trim().min(1).optional(),modelId:q0.string().trim().min(1).optional(),maxIterations:q0.number().int().positive().optional()});function WN($){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 B=jH.parse(V);if(!B||typeof B!=="object"||Array.isArray(B))continue;VH.parse(B);let H=$.slice(j+Y[0].length);J={frontmatter:V,body:H}}catch{}}if(J)return J;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function YH($){if($===void 0)return;let Z=Array.isArray($)?$:$.split(",");return Array.from(new Set(Z.map((Q)=>Q.trim()).filter((Q)=>Q.length>0)))}function JN($){return $.trim().toLowerCase()}function XN($){let Z=$N($).toLowerCase();return Z===".yml"||Z===".yaml"}function WW($,Z={}){let{frontmatter:Q,body:W}=WN($),J=jH.parse(Q);if(!J||typeof J!=="object"||Array.isArray(J))throw Error("Agent config frontmatter must be a YAML mapping.");let X=VH.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:YH(X.tools),skills:YH(X.skills),providerId:X.providerId,modelId:X.modelId,maxIterations:X.maxIterations,systemPrompt:Y,path:Z.path}}function h5($){let Z=$.searchPaths??QN($.workspaceRoot),Q=new Map,W=[];for(let X of Z.filter(Boolean)){if(!oE(X))continue;let Y;try{Y=tE(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()||!XN(j.name))continue;let V=ZN(X,j.name);try{let B=eE(V,"utf8"),H=WW(B,{path:V}),G=JN(H.name);if(!Q.has(G))Q.set(G,H)}catch(B){W.push({path:V,error:B instanceof Error?B:Error(String(B))})}}}return{configs:Array.from(Q.values()).sort((X,Y)=>(X.path?XH(X.path):X.name).localeCompare(Y.path?XH(Y.path):Y.name)),errors:W}}import{createTool as YN,zodToJsonSchema as jN}from"@cline/shared";import{z as BH}from"zod";var JW="subagent_",k5=64,VN=BH.object({prompt:BH.string().trim().min(1).describe("Task for the subagent to perform")});function BN($){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 HN($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z^=$.charCodeAt(Q),Z=Math.imul(Z,16777619);return(Z>>>0).toString(36)}function XW($){let Z=BN($)||"agent",Q=HN($).slice(0,6),W=`${JW}${Z}`;if(W.length<=k5)return W;let J=k5-JW.length-Q.length-1,X=Z.slice(0,Math.max(1,J));return`${JW}${X}_${Q}`.slice(0,k5)}function YW($){let Z=new Set,Q=[];for(let W of[...$].sort((J,X)=>J.name.localeCompare(X.name))){let J=XW(W.name),X=J,Y=2;while(Z.has(X)){let j=`_${Y++}`,V=Math.max(1,k5-j.length);X=`${J.slice(0,V)}${j}`}Z.add(X),Q.push({toolName:X,config:W})}return Q}function GN($,Z){return{...$,providerId:Z.providerId??$.providerId,modelId:Z.modelId??$.modelId,maxIterations:Z.maxIterations??$.maxIterations}}function I5($){return YW($.agents).map(({toolName:Z,config:Q})=>{return YN({name:Z,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:jN(VN),execute:async(J,X)=>{let Y=$.configProvider.getRuntimeConfig(),j=R2(GN(Y,Q)),V=$.createSubAgentTools?await $.createSubAgentTools(Q,J,X):[],B=E2({kind:"subagent",prompt:Q.systemPrompt,configProvider:j,tools:V,maxIterations:Q.maxIterations,parentAgentId:X.agentId,abortSignal:X.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),H=B.getAgentId(),G=B.getConversationId(),K=X.agentId,F={systemPrompt:Q.systemPrompt,task:J.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:H,conversationId:G,parentAgentId:K,input:F})}catch{}try{let A=await B.run(J.prompt),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:H,conversationId:G,parentAgentId:K,input:F,result:L,agentResult:A})}catch{}return L}catch(A){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:G,parentAgentId:K,input:F,error:A instanceof Error?A:Error(String(A))})}catch{}throw A}},timeoutMs:300000,retryable:!1})})}function W1(){return new Date().toISOString()}function HH($,Z){if(Z<=0)return 0;return Math.round($/Z*100)}function KN($,Z){let Q=new Set;for(let J of Z)if(J.status==="reviewed")Q.add(`${J.outcomeId}:${J.section}`);let W=new Set;for(let J of $){if(J.status==="finalized")continue;for(let X of J.requiredSections)if(!Q.has(`${J.id}:${X}`))W.add(`${J.id}:${X}`)}return[...W].sort((J,X)=>J.localeCompare(X))}function x5($,Z){let Q={idle:0,running:0,stopped:0},W={pending:0,in_progress:0,blocked:0,completed:0},J={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},X={draft:0,in_review:0,finalized:0},Y={draft:0,reviewed:0,rejected:0},j=0,V=0;for(let f of Z.members)if(Q[f.status]+=1,f.role==="lead")j+=1;else V+=1;let B=[],H=[],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"){B.push(f.id);continue}if(f.status!=="pending")continue;if(f.dependsOn.every((U)=>{return K.get(U)?.status==="completed"}))H.push(f.id)}let F=[],A,L=0;for(let f of Z.runs){if(J[f.status]+=1,f.status==="queued"||f.status==="running")F.push(f.id);let D=f.startedAt.getTime();if(D>=L)L=D,A=f.id}for(let f of Z.outcomes)X[f.status]+=1;for(let f of Z.outcomeFragments)Y[f.status]+=1;return{teamName:$,updatedAt:W1(),members:{total:Z.members.length,byStatus:Q,leadCount:j,teammateCount:V},tasks:{total:Z.tasks.length,byStatus:W,blockedTaskIds:B,readyTaskIds:H,completionPct:HH(G,Z.tasks.length)},runs:{total:Z.runs.length,byStatus:J,activeRunIds:F,latestRunId:A},outcomes:{total:Z.outcomes.length,byStatus:X,finalizedPct:HH(X.finalized,Z.outcomes.length),missingRequiredSections:KN(Z.outcomes,Z.outcomeFragments)},fragments:{total:Z.outcomeFragments.length,byStatus:Y}}}function g5($){let{event:Z}=$;switch(Z.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1(),taskId:Z.task.id,agentId:Z.task.assignee??Z.task.createdBy};case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1(),outcomeId:Z.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1(),outcomeId:Z.fragment.outcomeId,fragmentId:Z.fragment.id,agentId:Z.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1(),taskId:Z.message.taskId,agentId:Z.message.fromAgentId,message:Z.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1(),taskId:Z.entry.taskId,agentId:Z.entry.agentId,message:Z.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1(),agentId:Z.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:W1()}}import{sanitizeFileName as FN,TeamMessageType as y}from"@cline/shared";import{nanoid as AN}from"nanoid";import{TeamMessageType as Kp}from"@cline/shared";function jW($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function GH($,Z){return $?.status==="stopped"&&jW(Z)}var fN=600000,KH="recovered_queued";function UN($){return`This is an automatic recovery of interrupted team run ${$.id}. The previous process stopped before completion. Continue the task safely, inspect the current workspace state before making changes, and avoid duplicating completed work.
474
-
475
- ${$.message}`}class VW{agents=new Map;configs=new Map;onTeamEvent;constructor($,Z){if(this.onTeamEvent=Z,$)for(let[Q,W]of Object.entries($))this.addAgent(Q,W)}addAgent($,Z){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let Q={...Z,onEvent:(J)=>{Z.onEvent?.(J),this.emitEvent({type:y.AgentEvent,agentId:$,event:J})}},W=new l1(Q);if(Q.onEvent)W.subscribeEvents(Q.onEvent);this.agents.set($,W),this.configs.set($,Z)}removeAgent($){return this.configs.delete($),this.agents.delete($)}getAgent($){return this.agents.get($)}getAgentIds(){return Array.from(this.agents.keys())}get size(){return this.agents.size}async routeTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:y.TaskStart,agentId:$,message:Z});try{let W=await Q.run(Z);return this.emitEvent({type:y.TaskEnd,agentId:$,result:W}),W}catch(W){let J=W instanceof Error?W:Error(String(W));throw this.emitEvent({type:y.TaskEnd,agentId:$,error:J,messages:Q.getMessages()}),W}}async continueTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:y.TaskStart,agentId:$,message:Z});try{let W=await Q.continue(Z);return this.emitEvent({type:y.TaskEnd,agentId:$,result:W}),W}catch(W){let J=W instanceof Error?W:Error(String(W));throw this.emitEvent({type:y.TaskEnd,agentId:$,error:J,messages:Q.getMessages()}),W}}async runParallel($){let Z=$.map(async(Q)=>{let W=this.agents.get(Q.agentId);if(!W)return{agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata};this.emitEvent({type:y.TaskStart,agentId:Q.agentId,message:Q.message});try{let J=await W.run(Q.message);return this.emitEvent({type:y.TaskEnd,agentId:Q.agentId,result:J}),{agentId:Q.agentId,result:J,metadata:Q.metadata}}catch(J){let X=J instanceof Error?J:Error(String(J));return this.emitEvent({type:y.TaskEnd,agentId:Q.agentId,error:X,messages:W.getMessages()}),{agentId:Q.agentId,result:void 0,error:X,metadata:Q.metadata}}});return Promise.all(Z)}async runSequential($){let Z=[];for(let Q of $){let W=this.agents.get(Q.agentId);if(!W){Z.push({agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata});continue}this.emitEvent({type:y.TaskStart,agentId:Q.agentId,message:Q.message});try{let J=await W.run(Q.message);this.emitEvent({type:y.TaskEnd,agentId:Q.agentId,result:J}),Z.push({agentId:Q.agentId,result:J,metadata:Q.metadata})}catch(J){let X=J instanceof Error?J:Error(String(J));this.emitEvent({type:y.TaskEnd,agentId:Q.agentId,error:X,messages:W.getMessages()}),Z.push({agentId:Q.agentId,result:void 0,error:X,metadata:Q.metadata})}}return Z}async runPipeline($,Z,Q){let W=[],J=Z;for(let X of $){let Y=this.agents.get(X);if(!Y){W.push({agentId:X,result:void 0,error:Error(`Agent "${X}" not found in team`)});break}this.emitEvent({type:y.TaskStart,agentId:X,message:J});try{let j=await Y.run(J);this.emitEvent({type:y.TaskEnd,agentId:X,result:j}),W.push({agentId:X,result:j});let V=$.indexOf(X)+1;if(V<$.length){let B=$[V];J=Q?Q(j,B):`Previous agent output:
471
+ FROM sessions WHERE session_id = ?`,[$]);if(!Z)return;return{sessionId:M1(Z.session_id),source:M1(Z.source),pid:Number(Z.pid??0),startedAt:M1(Z.started_at),endedAt:Z.ended_at??null,exitCode:Z.exit_code??null,status:M1(Z.status),interactive:A4(Z.interactive),provider:M1(Z.provider),model:M1(Z.model),cwd:M1(Z.cwd),workspaceRoot:M1(Z.workspace_root),teamName:j1(Z.team_name),enableTools:A4(Z.enable_tools),enableSpawn:A4(Z.enable_spawn),enableTeams:A4(Z.enable_teams),parentSessionId:j1(Z.parent_session_id),parentAgentId:j1(Z.parent_agent_id),agentId:j1(Z.agent_id),conversationId:j1(Z.conversation_id),isSubagent:A4(Z.is_subagent),prompt:j1(Z.prompt),metadata:(()=>{let Q=j1(Z.metadata_json);if(!Q)return;try{let J=JSON.parse(Q);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return})(),hookPath:j1(Z.hook_path),messagesPath:j1(Z.messages_path),updatedAt:j1(Z.updated_at)??g5()}}list($=200){let Z=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Q=[];for(let J of Z){let W=this.get(M1(J.session_id));if(W)Q.push(W)}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}}l2();import{existsSync as M3,mkdirSync as Ww,readFileSync as yH,renameSync as Xw,writeFileSync as Yw}from"node:fs";import{join as hH}from"node:path";import{resolveSessionDataDir as jw}from"@cline/shared/storage";import{dirname as Qw}from"node:path";import{nanoid as Jw}from"nanoid";import{execFile as YE}from"node:child_process";import{promisify as jE}from"node:util";var VE=jE(YE);function Y3($,Z){$?.log(Z,{severity:"warn"})}function BE($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))return;let Q=Z;if(!Q.latest||!Array.isArray(Q.history))return;let J=Q.latest,W=Q.history.filter((X)=>!!X&&typeof X==="object"&&typeof X.ref==="string"&&typeof X.createdAt==="number"&&typeof X.runCount==="number");if(typeof J.ref!=="string"||typeof J.createdAt!=="number"||typeof J.runCount!=="number")return;return{latest:J,history:W}}async function o$($,Z){let Q=await VE("git",["-C",$,...Z],{windowsHide:!0});return{stdout:Q.stdout.trim(),stderr:Q.stderr.trim()}}async function j3($,Z){if(!$)return;let Q=`refs/cline/checkpoints/${Z}/`;try{let{stdout:J}=await o$($,["for-each-ref","--format=%(refname)",Q]),W=J.trim().split(`
472
+ `).filter(Boolean);await Promise.allSettled(W.map((X)=>o$($,["update-ref","-d",X])))}catch{}}async function AH($,Z,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((J)=>o$($,["update-ref",`refs/cline/checkpoints/${Z}/${J.runCount}`,J.ref])))}function HE($,Z){let Q=$.findIndex((J)=>J.runCount===Z.runCount);if(Q<0)return[...$,Z];return $.map((J,W)=>W===Q?Z:J)}function fH($){let Z=$.initialRunCount??0,Q,J=async()=>{if(Q!==void 0)return Q;try{Q=(await o$($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{Q=!1}return Q},W=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:Z});if(!await J())return;let X=async(B)=>{try{let G=(await o$($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!G)return;return{ref:G,createdAt:Date.now(),runCount:Z,kind:"commit"}}catch(H){Y3($.logger,`${B}: ${H instanceof Error?H.message:String(H)}`);return}},Y=`cline checkpoint session=${$.sessionId} run=${Z}`,j="";try{j=(await o$($.cwd,["stash","create",Y])).stdout.trim()}catch(B){return Y3($.logger,`Checkpoint snapshot failed: ${B instanceof Error?B.message:String(B)}`),X("Checkpoint HEAD fallback failed")}if(!j)return X("Checkpoint HEAD fallback failed");let V=`refs/cline/checkpoints/${$.sessionId}/${Z}`;try{await o$($.cwd,["update-ref",V,j])}catch(B){Y3($.logger,`Checkpoint store failed: ${B instanceof Error?B.message:String(B)}`);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 W();if(!Y)return;let j=await $.readSessionMetadata(),V=BE(j);if(V?.latest.ref===Y.ref)return;let B=HE(V?.history??[],Y);await $.writeSessionMetadata({...j??{},checkpoint:{latest:Y,history:B}});return}}}import{existsSync as m5,mkdirSync as GE,readdirSync as KE,rmdirSync as FE,rmSync as AE,unlinkSync as fE}from"node:fs";import{dirname as UH,join as U4}from"node:path";function $0(){return new Date().toISOString()}function D4($){if(!$||!m5($))return;try{fE($)}catch{}}function UE($){let Z=J4($);if(Z)return{rootSessionId:Z.rootSessionId,fileStem:`${Z.agentId}__${Z.teamTaskId}`};let Q=N5($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class V3{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return U4(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let Z=this.sessionArtifactsDir($);if(!m5(Z))GE(Z,{recursive:!0});return Z}sessionMessagesPath($){return U4(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionCompactionPath($){return U4(this.sessionArtifactsDir($),`${$}.compaction.json`)}sessionManifestPath($,Z=!1){let Q=Z?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return U4(Q,`${$}.json`)}removeSessionDirIfEmpty($){let Z=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(Z.startsWith(Q)&&Z!==Q){if(!m5(Z)){Z=UH(Z);continue}try{if(KE(Z).length>0)break;FE(Z)}catch{break}Z=UH(Z)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!m5($))return;try{AE($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,Z,Q){let{rootSessionId:J,fileStem:W}=UE($),X=this.sessionArtifactsDir(J);return{messagesPath:U4(X,`${W}.messages.json`)}}}import{appendFileSync as qE,existsSync as zE,mkdirSync as TH,readFileSync as ME,writeFileSync as OH}from"node:fs";import{readFile as RE,rm as NE}from"node:fs/promises";import{dirname as qH,join as EE}from"node:path";import{ensureHookLogDir as wE}from"@cline/shared/storage";import{randomUUID as DE}from"node:crypto";import{mkdir as LE,open as LH,rename as _E,rm as TE}from"node:fs/promises";import{dirname as DH}from"node:path";async function OE($){let Z;try{Z=await LH($,"r"),await Z.sync()}catch{}finally{if(Z!==void 0)try{await Z.close()}catch{}}}async function _H($,Z){await LE(DH($),{recursive:!0});let Q=`${$}.${process.pid}.${DE()}.tmp`,J;try{J=await LH(Q,"wx"),await J.writeFile(Z,"utf8"),await J.sync(),await J.close(),J=void 0,await _E(Q,$),await OE(DH($))}catch(W){if(J!==void 0)try{await J.close()}catch{}try{await TE(Q,{force:!0})}catch{}throw W}}function CE($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="ENOENT"}class B3{adapter;messagesArtifactUploader;logger;artifacts;constructor($,Z,Q){this.adapter=$;this.messagesArtifactUploader=Z;this.logger=Q;this.artifacts=new V3(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,Z,Q){UB(Z,Q,v7($))}writeSessionManifest($,Z){TH(qH($),{recursive:!0}),OH($,`${JSON.stringify(h0.parse(Z),null,2)}
473
+ `,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let Z=this.artifacts.sessionManifestPath($,!1);if(!zE(Z))return{path:Z};try{return{path:Z,manifest:h0.parse(JSON.parse(ME(Z,"utf8")))}}catch{return{path:Z}}}async resolveArtifactPath($,Z,Q){let W=(await this.adapter.getSession($))?.[Z];return typeof W==="string"&&W.trim().length>0?W:Q($)}async persistSessionMessages($,Z,Q){let J=await this.resolveArtifactPath($,"messagesPath",(Y)=>this.artifacts.sessionMessagesPath(Y)),W=c7({updatedAt:$0(),context:v7($),messages:Z,systemPrompt:Q}),X=`${JSON.stringify(W,null,2)}
474
+ `;if(TH(qH(J),{recursive:!0}),OH(J,X,"utf8"),!this.messagesArtifactUploader)return;try{let Y=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:J,contents:X,row:Y})}catch(Y){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:Y})}}resolveCompactionPath($){let{manifest:Z}=this.readManifestFile($);return Z?.compaction_path?.trim()||this.artifacts.sessionCompactionPath($)}updateCompactionPath($,Z){let Q=this.readManifestFile($);if(!Q.manifest)return;if(Q.manifest.compaction_path===Z)return;this.writeSessionManifest(Q.path,{...Q.manifest,compaction_path:Z})}async readSessionCompactionState($){let Z=this.resolveCompactionPath($);try{return z1(JSON.parse(await RE(Z,"utf8")))}catch(Q){if(CE(Q))return;this.logger?.debug("Ignoring invalid session compaction state",{sessionId:$,path:Z,error:Q,recovery:"Canonical history is unchanged; deleting the sidecar is safe."});return}}async persistSessionCompactionState($,Z){let Q=this.resolveCompactionPath($),J=k5.parse(Z);await _H(Q,`${JSON.stringify(J,null,2)}
475
+ `),this.updateCompactionPath($,Q)}async deleteSessionCompactionState($){await NE(this.resolveCompactionPath($),{force:!0}),this.updateCompactionPath($,void 0)}appendStaleSessionHookLog($,Z,Q,J,W){let Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??EE(wE(),"hooks.jsonl");qE(Y,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:J,sessionId:Z,pid:Q,source:W})}
476
+ `,"utf8")}}import{appendFileSync as PE}from"node:fs";import{join as SE}from"node:path";import{resolveRootSessionId as zH}from"@cline/shared";import{ensureHookLogDir as bE}from"@cline/shared/storage";import{z as H3}from"zod";var yE="subagent",hE=H3.looseObject({task:H3.string().optional(),systemPrompt:H3.string().optional()});class v5{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,Z,Q,J){this.adapter=$;this.manifestStore=Z;this.toPersistedMessages=Q;this.heartbeatLogIntervalMs=J}teamTaskQueueKey($,Z){return`${$}::${Z}`}activeTeamTaskSessionId($,Z){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,Z))?.at(-1)}buildSubsessionRow($,Z){return{sessionId:Z.sessionId,source:yE,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:X4({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=zH($.sessionContext);if(!Z)return;let Q=hE.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 J=R5(Z,$.agentId),W=await this.adapter.getSession(J),X=$0(),Y=this.manifestStore.artifacts.subagentArtifactPaths(J,$.agentId,this.activeTeamTaskSessionId(Z,$.parentAgentId)),j=$.prompt??W?.prompt??void 0;if(!j)j=await this.adapter.claimSpawnRequest(Z,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!W)return await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:J,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:j,startedAt:X,...Y})),this.manifestStore.initializeMessagesFile(J,Y.messagesPath,X),J;return await this.adapter.updateSession({sessionId:J,setRunning:!0,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:W.prompt??j??null,metadata:X4({metadata:W.metadata??void 0,prompt:W.prompt??j??null}),expectedStatusLock:W.statusLock}),J}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let Z=zH($.sessionContext);if(!Z)return;if($.hookName==="session_shutdown"){let Q=R5(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($,I7(Z))}async applySubagentStatusBySessionId($,Z){let Q=await this.adapter.getSession($);if(!Q)return;let J=V0(Z)?null:$0(),W=V0(Z)?null:Z==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:Z,endedAt:J,exitCode:W,expectedStatusLock:Q.statusLock})}async applyStatusToRunningChildSessions($,Z){if(!$)return;let Q=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let J of Q)await this.applySubagentStatusBySessionId(J.sessionId,Z)}async onTeamTaskStart($,Z,Q){let J=await this.adapter.getSession($);if(!J)return;let W=k7($,Z),X=$0(),{messagesPath:Y}=this.manifestStore.artifacts.subagentArtifactPaths(W,Z);await this.adapter.upsertSession(this.buildSubsessionRow(J,{sessionId:W,parentSessionId:$,parentAgentId:"lead",agentId:Z,prompt:Q||`Team task for ${Z}`,startedAt:X,messagesPath:Y})),this.manifestStore.initializeMessagesFile(W,Y,X);let j=this.teamTaskQueueKey($,Z),V=this.teamTaskSessionsByAgent.get(j)??[];V.push(W),this.teamTaskSessionsByAgent.set(j,V)}async onTeamTaskEnd($,Z,Q,J,W,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 B=W?.messages??X,H=this.toPersistedMessages(B,W,X);if(H)await this.manifestStore.persistSessionMessages(V,H);await this.applySubagentStatusBySessionId(V,Q),this.teamTaskLastHeartbeatBySession.delete(V),this.teamTaskLastProgressLineBySession.delete(V)}async onTeamTaskProgress($,Z,Q,J){let W=this.teamTaskQueueKey($,Z),X=this.teamTaskSessionsByAgent.get(W)?.[0];if(!X)return;let Y=Q.trim();if(!Y)return;let j=J?.kind??"progress";if(j==="heartbeat"){let B=Date.now(),H=this.teamTaskLastHeartbeatBySession.get(X)??0;if(B-H<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(X,B)}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 J=this.toPersistedMessages(Z.agentResult?.messages,Z.agentResult);if(J)await this.manifestStore.persistSessionMessages(Q,J);let W=Z.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Q,W==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Q=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??SE(bE(),"hooks.jsonl");PE(Q,`${JSON.stringify({ts:$0(),...$})}
477
+ `,"utf8")}}import{formatUserInputBlock as Zw}from"@cline/shared";import{existsSync as kE,readdirSync as IE,readFileSync as xE}from"node:fs";import{basename as MH,extname as gE,join as mE}from"node:path";import{resolveAgentConfigSearchPaths as vE}from"@cline/shared/storage";import NH from"yaml";import{z as P0}from"zod";var EH=P0.object({name:P0.string().trim().min(1),description:P0.string().trim().min(1),tools:P0.union([P0.string(),P0.array(P0.string())]).optional(),skills:P0.union([P0.string(),P0.array(P0.string())]).optional(),providerId:P0.string().trim().min(1).optional(),modelId:P0.string().trim().min(1).optional(),maxIterations:P0.number().int().positive().optional()});function cE($){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,J=/^---[^\S\r\n]*(?:\r?\n|$)/gm;J.lastIndex=Q;let W,X=Array.from($.matchAll(J)).filter((Y)=>Y.index>=Q);for(let Y of X){let j=Y.index,V=$.slice(Q,j);try{let B=NH.parse(V);if(!B||typeof B!=="object"||Array.isArray(B))continue;EH.parse(B);let H=$.slice(j+Y[0].length);W={frontmatter:V,body:H}}catch{}}if(W)return W;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function RH($){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 uE($){return $.trim().toLowerCase()}function dE($){let Z=gE($).toLowerCase();return Z===".yml"||Z===".yaml"}function G3($,Z={}){let{frontmatter:Q,body:J}=cE($),W=NH.parse(Q);if(!W||typeof W!=="object"||Array.isArray(W))throw Error("Agent config frontmatter must be a YAML mapping.");let X=EH.parse(W),Y=J.trim();if(!Y)throw Error("Missing system prompt body in agent config file.");return{name:X.name,description:X.description,tools:RH(X.tools),skills:RH(X.skills),providerId:X.providerId,modelId:X.modelId,maxIterations:X.maxIterations,systemPrompt:Y,path:Z.path}}function c5($){let Z=$.searchPaths??vE($.workspaceRoot),Q=new Map,J=[];for(let X of Z.filter(Boolean)){if(!kE(X))continue;let Y;try{Y=IE(X,{withFileTypes:!0})}catch(j){J.push({path:X,error:j instanceof Error?j:Error(String(j))});continue}for(let j of Y){if(!j.isFile()||!dE(j.name))continue;let V=mE(X,j.name);try{let B=xE(V,"utf8"),H=G3(B,{path:V}),G=uE(H.name);if(!Q.has(G))Q.set(G,H)}catch(B){J.push({path:V,error:B instanceof Error?B:Error(String(B))})}}}return{configs:Array.from(Q.values()).sort((X,Y)=>(X.path?MH(X.path):X.name).localeCompare(Y.path?MH(Y.path):Y.name)),errors:J}}import{createTool as lE,zodToJsonSchema as pE}from"@cline/shared";import{z as wH}from"zod";var K3="subagent_",u5=64,rE=wH.object({prompt:wH.string().trim().min(1).describe("Task for the subagent to perform")});function iE($){let Z="",Q=!0;for(let J of $.trim().toLowerCase()){let W=J.charCodeAt(0);if(!(W>=97&&W<=122||W>=48&&W<=57||J==="_")||J==="_"){if(!Q)Z+="_",Q=!0;continue}Z+=J,Q=!1}return Q?Z.slice(0,-1):Z}function nE($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z^=$.charCodeAt(Q),Z=Math.imul(Z,16777619);return(Z>>>0).toString(36)}function F3($){let Z=iE($)||"agent",Q=nE($).slice(0,6),J=`${K3}${Z}`;if(J.length<=u5)return J;let W=u5-K3.length-Q.length-1,X=Z.slice(0,Math.max(1,W));return`${K3}${X}_${Q}`.slice(0,u5)}function A3($){let Z=new Set,Q=[];for(let J of[...$].sort((W,X)=>W.name.localeCompare(X.name))){let W=F3(J.name),X=W,Y=2;while(Z.has(X)){let j=`_${Y++}`,V=Math.max(1,u5-j.length);X=`${W.slice(0,V)}${j}`}Z.add(X),Q.push({toolName:X,config:J})}return Q}function aE($,Z){return{...$,providerId:Z.providerId??$.providerId,modelId:Z.modelId??$.modelId,maxIterations:Z.maxIterations??$.maxIterations}}function d5($){return A3($.agents).map(({toolName:Z,config:Q})=>{return lE({name:Z,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:pE(rE),execute:async(W,X)=>{let Y=$.configProvider.getRuntimeConfig(),j=S2(aE(Y,Q)),V=$.createSubAgentTools?await $.createSubAgentTools(Q,W,X):[],B=b2({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}),H=B.getAgentId(),G=B.getConversationId(),K=X.agentId,F={systemPrompt:Q.systemPrompt,task:W.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:H,conversationId:G,parentAgentId:K,input:F})}catch{}try{let A=await B.run(W.prompt),D={text:A.text,iterations:A.iterations,finishReason:A.finishReason,usage:{inputTokens:A.usage.inputTokens,outputTokens:A.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:G,parentAgentId:K,input:F,result:D,agentResult:A})}catch{}return D}catch(A){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:G,parentAgentId:K,input:F,error:A instanceof Error?A:Error(String(A))})}catch{}throw A}},timeoutMs:300000,retryable:!1})})}function V1(){return new Date().toISOString()}function CH($,Z){if(Z<=0)return 0;return Math.round($/Z*100)}function oE($,Z){let Q=new Set;for(let W of Z)if(W.status==="reviewed")Q.add(`${W.outcomeId}:${W.section}`);let J=new Set;for(let W of $){if(W.status==="finalized")continue;for(let X of W.requiredSections)if(!Q.has(`${W.id}:${X}`))J.add(`${W.id}:${X}`)}return[...J].sort((W,X)=>W.localeCompare(X))}function l5($,Z){let Q={idle:0,running:0,stopped:0},J={pending:0,in_progress:0,blocked:0,completed:0},W={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 U of Z.members)if(Q[U.status]+=1,U.role==="lead")j+=1;else V+=1;let B=[],H=[],G=Z.tasks.filter((U)=>U.status==="completed").length,K=new Map(Z.tasks.map((U)=>[U.id,U]));for(let U of Z.tasks){if(J[U.status]+=1,U.status==="blocked"){B.push(U.id);continue}if(U.status!=="pending")continue;if(U.dependsOn.every((f)=>{return K.get(f)?.status==="completed"}))H.push(U.id)}let F=[],A,D=0;for(let U of Z.runs){if(W[U.status]+=1,U.status==="queued"||U.status==="running")F.push(U.id);let L=U.startedAt.getTime();if(L>=D)D=L,A=U.id}for(let U of Z.outcomes)X[U.status]+=1;for(let U of Z.outcomeFragments)Y[U.status]+=1;return{teamName:$,updatedAt:V1(),members:{total:Z.members.length,byStatus:Q,leadCount:j,teammateCount:V},tasks:{total:Z.tasks.length,byStatus:J,blockedTaskIds:B,readyTaskIds:H,completionPct:CH(G,Z.tasks.length)},runs:{total:Z.runs.length,byStatus:W,activeRunIds:F,latestRunId:A},outcomes:{total:Z.outcomes.length,byStatus:X,finalizedPct:CH(X.finalized,Z.outcomes.length),missingRequiredSections:oE(Z.outcomes,Z.outcomeFragments)},fragments:{total:Z.outcomeFragments.length,byStatus:Y}}}function p5($){let{event:Z}=$;switch(Z.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:V1(),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:V1(),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:V1(),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:V1(),outcomeId:Z.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:V1(),outcomeId:Z.fragment.outcomeId,fragmentId:Z.fragment.id,agentId:Z.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:V1(),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:V1(),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:V1(),agentId:Z.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:V1()}}import{sanitizeFileName as sE,TeamMessageType as k}from"@cline/shared";import{nanoid as tE}from"nanoid";import{TeamMessageType as Ar}from"@cline/shared";function f3($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function PH($,Z){return $?.status==="stopped"&&f3(Z)}var eE=600000,SH="recovered_queued";function $w($){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.
478
+
479
+ ${$.message}`}class U3{agents=new Map;configs=new Map;onTeamEvent;constructor($,Z){if(this.onTeamEvent=Z,$)for(let[Q,J]of Object.entries($))this.addAgent(Q,J)}addAgent($,Z){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let Q={...Z,onEvent:(W)=>{Z.onEvent?.(W),this.emitEvent({type:k.AgentEvent,agentId:$,event:W})}},J=new n1(Q);if(Q.onEvent)J.subscribeEvents(Q.onEvent);this.agents.set($,J),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:k.TaskStart,agentId:$,message:Z});try{let J=await Q.run(Z);return this.emitEvent({type:k.TaskEnd,agentId:$,result:J}),J}catch(J){let W=J instanceof Error?J:Error(String(J));throw this.emitEvent({type:k.TaskEnd,agentId:$,error:W,messages:Q.getMessages()}),J}}async continueTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:k.TaskStart,agentId:$,message:Z});try{let J=await Q.continue(Z);return this.emitEvent({type:k.TaskEnd,agentId:$,result:J}),J}catch(J){let W=J instanceof Error?J:Error(String(J));throw this.emitEvent({type:k.TaskEnd,agentId:$,error:W,messages:Q.getMessages()}),J}}async runParallel($){let Z=$.map(async(Q)=>{let J=this.agents.get(Q.agentId);if(!J)return{agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata};this.emitEvent({type:k.TaskStart,agentId:Q.agentId,message:Q.message});try{let W=await J.run(Q.message);return this.emitEvent({type:k.TaskEnd,agentId:Q.agentId,result:W}),{agentId:Q.agentId,result:W,metadata:Q.metadata}}catch(W){let X=W instanceof Error?W:Error(String(W));return this.emitEvent({type:k.TaskEnd,agentId:Q.agentId,error:X,messages:J.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 J=this.agents.get(Q.agentId);if(!J){Z.push({agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata});continue}this.emitEvent({type:k.TaskStart,agentId:Q.agentId,message:Q.message});try{let W=await J.run(Q.message);this.emitEvent({type:k.TaskEnd,agentId:Q.agentId,result:W}),Z.push({agentId:Q.agentId,result:W,metadata:Q.metadata})}catch(W){let X=W instanceof Error?W:Error(String(W));this.emitEvent({type:k.TaskEnd,agentId:Q.agentId,error:X,messages:J.getMessages()}),Z.push({agentId:Q.agentId,result:void 0,error:X,metadata:Q.metadata})}}return Z}async runPipeline($,Z,Q){let J=[],W=Z;for(let X of $){let Y=this.agents.get(X);if(!Y){J.push({agentId:X,result:void 0,error:Error(`Agent "${X}" not found in team`)});break}this.emitEvent({type:k.TaskStart,agentId:X,message:W});try{let j=await Y.run(W);this.emitEvent({type:k.TaskEnd,agentId:X,result:j}),J.push({agentId:X,result:j});let V=$.indexOf(X)+1;if(V<$.length){let B=$[V];W=Q?Q(j,B):`Previous agent output:
476
480
  ${j.text}
477
481
 
478
- Please continue from here.`}}catch(j){let V=j instanceof Error?j:Error(String(j));this.emitEvent({type:y.TaskEnd,agentId:X,error:V,messages:Y.getMessages()}),W.push({agentId:X,result:void 0,error:V});break}}return W}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}class H4{teamId;teamName;onTeamEvent;members=new Map;tasks=new Map;missionLog=[];mailbox=[];missionStepCounter=0;taskCounter=0;messageCounter=0;missionCounter=0;runCounter=0;outcomeCounter=0;outcomeFragmentCounter=0;runs=new Map;runQueue=[];queuedRunDispatchTimer;outcomes=new Map;outcomeFragments=new Map;missionLogIntervalSteps;missionLogIntervalMs;maxConcurrentRuns;constructor($){this.teamName=$.teamName,this.teamId=`t_${FN(AN(10))}`,this.onTeamEvent=$.onTeamEvent,this.missionLogIntervalSteps=Math.max(1,$.missionLogIntervalSteps??3),this.missionLogIntervalMs=Math.max(1000,$.missionLogIntervalMs??120000),this.maxConcurrentRuns=Math.max(1,$.maxConcurrentRuns??2);let Z=$.leadAgentId??"lead";this.members.set(Z,{agentId:Z,role:"lead",status:"idle",runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()})}getTeamId(){return this.teamId}getTeamName(){return this.teamName}getMemberRole($){return this.members.get($)?.role}getMemberIds(){return Array.from(this.members.keys())}getTeammateIds(){return Array.from(this.members.values()).filter(($)=>$.role==="teammate").map(($)=>$.agentId)}getTask($){return this.tasks.get($)}listTasks(){return Array.from(this.tasks.values())}listTaskItems($){return Array.from(this.tasks.values()).map((Z)=>{let Q=this.getUnresolvedDependencies(Z);return{...Z,blockedBy:Q,isReady:Z.status==="pending"&&!Z.assignee&&Q.length===0}}).filter((Z)=>{if($?.status&&Z.status!==$.status)return!1;if($?.assignee&&Z.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,Z){let Q=Z?.unreadOnly??!0,W=Z?.markRead??!0,J=Z?.limit,X=this.mailbox.filter((j)=>j.toAgentId===$&&(!Q||!j.readAt)),Y=typeof J==="number"&&J>0?X.slice(Math.max(0,X.length-J)):X;if(W){let j=new Date;for(let V of Y)if(!V.readAt)V.readAt=j}return Y.map((j)=>({...j}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let Q of this.tasks.values())$[Q.status]++;let Z={draft:0,in_review:0,finalized:0};for(let Q of this.outcomes.values())Z[Q.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((Q)=>({agentId:Q.agentId,role:Q.role,description:Q.description,status:Q.status})),taskCounts:$,unreadMessages:this.mailbox.filter((Q)=>!Q.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").length,outcomeCounts:Z}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map(($)=>({agentId:$.agentId,role:$.role,description:$.description,status:$.status})),tasks:Array.from(this.tasks.values()).map(($)=>({...$})),mailbox:this.mailbox.map(($)=>({...$})),missionLog:this.missionLog.map(($)=>({...$})),runs:Array.from(this.runs.values()).map(($)=>({...$})),outcomes:Array.from(this.outcomes.values()).map(($)=>({...$})),outcomeFragments:Array.from(this.outcomeFragments.values()).map(($)=>({...$}))}}hydrateState($){this.clearQueuedRunDispatchTimer(),this.tasks.clear();for(let Q of $.tasks)this.tasks.set(Q.id,{...Q});this.mailbox.length=0,this.mailbox.push(...$.mailbox.map((Q)=>({...Q}))),this.missionLog.length=0,this.missionLog.push(...$.missionLog.map((Q)=>({...Q}))),this.runs.clear();for(let Q of $.runs??[])this.runs.set(Q.id,{...Q});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((Q)=>Q.status==="queued").map((Q)=>Q.id)),this.outcomes.clear();for(let Q of $.outcomes??[])this.outcomes.set(Q.id,{...Q});this.outcomeFragments.clear();for(let Q of $.outcomeFragments??[])this.outcomeFragments.set(Q.id,{...Q});let Z=Array.from(this.members.values()).filter((Q)=>Q.role==="lead");this.members.clear();for(let Q of Z)this.members.set(Q.agentId,{...Q,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let Q of $.members){if(Q.role!=="teammate")continue;this.members.set(Q.agentId,{agentId:Q.agentId,role:"teammate",description:Q.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,m2($.tasks.map((Q)=>Q.id),"task_")),this.messageCounter=Math.max(this.messageCounter,m2($.mailbox.map((Q)=>Q.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,m2($.missionLog.map((Q)=>Q.id),"log_")),this.runCounter=Math.max(this.runCounter,m2(($.runs??[]).map((Q)=>Q.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,m2(($.outcomes??[]).map((Q)=>Q.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,m2(($.outcomeFragments??[]).map((Q)=>Q.id),"frag_"))}isTeammateActive($){let Z=this.members.get($);return!!Z&&Z.role==="teammate"&&!!Z.agent}spawnTeammate({agentId:$,config:Z}){let Q=this.members.get($);if(Q&&Q.role!=="teammate")throw Error(`Team member "${$}" already exists and is not a teammate`);if(Q&&Q.runningCount>0)throw Error(`Teammate "${$}" is currently running and cannot be respawned`);let W={...Z,apiTimeoutMs:fN,consumePendingUserMessage:()=>{let Y=this.members.get($);if(!Y||!Y.pendingSteerMessage)return;let j=Y.pendingSteerMessage;return Y.pendingSteerMessage=void 0,j},onEvent:(Y)=>{Z.onEvent?.(Y),this.emitEvent({type:y.AgentEvent,agentId:$,event:Y}),this.trackMeaningfulEvent($,Y)}},J=new l1(W);if(W.onEvent)J.subscribeEvents(W.onEvent);let X={agentId:$,role:"teammate",description:Z.role,status:"idle",agent:J,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,X),this.emitEvent({type:y.TeammateSpawned,agentId:$,role:Z.role,teammate:{rolePrompt:Z.systemPrompt,modelId:Z.modelId,maxIterations:Z.maxIterations,runtimeAgentId:J.getAgentId(),conversationId:J.getConversationId(),parentAgentId:null}}),{agentId:X.agentId,role:X.role,description:X.description,status:X.status}}shutdownTeammate($,Z){let Q=this.members.get($);if(!Q||Q.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{Q.agent?.abort()}catch(W){if(!jW(W))throw W}Q.status="stopped",this.emitEvent({type:y.TeammateShutdown,agentId:$,reason:Z})}updateTeammateConnections($){for(let Z of this.members.values()){if(Z.role!=="teammate"||!Z.agent)continue;Z.agent.updateConnection($)}}createTask($){let Z=`task_${String(++this.taskCounter).padStart(4,"0")}`,Q=new Date,W={id:Z,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:Q,updatedAt:Q,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(Z,W),this.emitEvent({type:y.TeamTaskUpdated,task:{...W}}),{...W}}claimTask($,Z){let Q=this.requireTask($);return this.assertDependenciesResolved(Q),Q.status="in_progress",Q.assignee=Z,Q.updatedAt=new Date,this.emitEvent({type:y.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"progress",summary:`Claimed task "${Q.title}"`}),{...Q}}blockTask($,Z,Q){let W=this.requireTask($);return W.status="blocked",W.updatedAt=new Date,W.summary=Q,this.emitEvent({type:y.TeamTaskUpdated,task:{...W}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"blocked",summary:Q}),{...W}}completeTask($,Z,Q){let W=this.requireTask($);if(W.status="completed",W.updatedAt=new Date,W.summary=Q,!W.assignee)W.assignee=Z;return this.emitEvent({type:y.TeamTaskUpdated,task:{...W}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"done",summary:Q}),{...W}}async routeToTeammate($,Z,Q){let W=this.members.get($);if(!W||W.role!=="teammate"||!W.agent)throw Error(`Teammate "${$}" was not found`);if(!W.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");W.runningCount++,W.status="running",this.emitEvent({type:y.TaskStart,agentId:$,message:Z});try{let J=this.listMailbox($,{unreadOnly:!0,markRead:!0}),X=J.length>0?`${this.buildMailboxNotification(J)}
482
+ Please continue from here.`}}catch(j){let V=j instanceof Error?j:Error(String(j));this.emitEvent({type:k.TaskEnd,agentId:X,error:V,messages:Y.getMessages()}),J.push({agentId:X,result:void 0,error:V});break}}return J}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}class L4{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_${sE(tE(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,J=Z?.markRead??!0,W=Z?.limit,X=this.mailbox.filter((j)=>j.toAgentId===$&&(!Q||!j.readAt)),Y=typeof W==="number"&&W>0?X.slice(Math.max(0,X.length-W)):X;if(J){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,p2($.tasks.map((Q)=>Q.id),"task_")),this.messageCounter=Math.max(this.messageCounter,p2($.mailbox.map((Q)=>Q.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,p2($.missionLog.map((Q)=>Q.id),"log_")),this.runCounter=Math.max(this.runCounter,p2(($.runs??[]).map((Q)=>Q.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,p2(($.outcomes??[]).map((Q)=>Q.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,p2(($.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 J={...Z,apiTimeoutMs:eE,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:k.AgentEvent,agentId:$,event:Y}),this.trackMeaningfulEvent($,Y)}},W=new n1(J);if(J.onEvent)W.subscribeEvents(J.onEvent);let X={agentId:$,role:"teammate",description:Z.role,status:"idle",agent:W,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,X),this.emitEvent({type:k.TeammateSpawned,agentId:$,role:Z.role,teammate:{rolePrompt:Z.systemPrompt,modelId:Z.modelId,maxIterations:Z.maxIterations,runtimeAgentId:W.getAgentId(),conversationId:W.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(J){if(!f3(J))throw J}Q.status="stopped",this.emitEvent({type:k.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,J={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,J),this.emitEvent({type:k.TeamTaskUpdated,task:{...J}}),{...J}}claimTask($,Z){let Q=this.requireTask($);return this.assertDependenciesResolved(Q),Q.status="in_progress",Q.assignee=Z,Q.updatedAt=new Date,this.emitEvent({type:k.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"progress",summary:`Claimed task "${Q.title}"`}),{...Q}}blockTask($,Z,Q){let J=this.requireTask($);return J.status="blocked",J.updatedAt=new Date,J.summary=Q,this.emitEvent({type:k.TeamTaskUpdated,task:{...J}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"blocked",summary:Q}),{...J}}completeTask($,Z,Q){let J=this.requireTask($);if(J.status="completed",J.updatedAt=new Date,J.summary=Q,!J.assignee)J.assignee=Z;return this.emitEvent({type:k.TeamTaskUpdated,task:{...J}}),this.appendMissionLog({agentId:Z,taskId:$,kind:"done",summary:Q}),{...J}}async routeToTeammate($,Z,Q){let J=this.members.get($);if(!J||J.role!=="teammate"||!J.agent)throw Error(`Teammate "${$}" was not found`);if(!J.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");J.runningCount++,J.status="running",this.emitEvent({type:k.TaskStart,agentId:$,message:Z});try{let W=this.listMailbox($,{unreadOnly:!0,markRead:!0}),X=W.length>0?`${this.buildMailboxNotification(W)}
479
483
 
480
- ${Z}`:Z,Y=Q?.continueConversation?await W.agent.continue(X):await W.agent.run(X);return this.emitEvent({type:y.TaskEnd,agentId:$,result:Y}),this.recordProgressStep($,`Completed a delegated run (${Y.iterations} iterations)`,Q?.taskId,!0),Y}catch(J){let X=J instanceof Error?J:Error(String(J));if(this.emitEvent({type:y.TaskEnd,agentId:$,error:X,messages:W.agent.getMessages()}),!GH(W,X))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:X.message});throw X}finally{if(W.runningCount--,W.runningCount<=0&&this.members.get($)?.status!=="stopped")W.status="idle"}}startTeammateRun($,Z,Q){let W=`run_${String(++this.runCounter).padStart(5,"0")}`,J={id:W,agentId:$,taskId:Q?.taskId,status:"queued",message:Z,priority:Q?.priority??0,retryCount:0,maxRetries:Math.max(0,Q?.maxRetries??0),continueConversation:Q?.continueConversation,startedAt:new Date(0),leaseOwner:Q?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(W,J),this.runQueue.push(W),this.emitEvent({type:y.RunQueued,run:{...J}}),this.dispatchQueuedRuns(),{...J}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let Z=this.selectNextDispatchableQueuedRun();$=Z.nextDelayedAttemptAt;let Q=Z.index;if(Q<0){this.scheduleQueuedRunDispatch($);return}let[W]=this.runQueue.splice(Q,1),J=W?this.runs.get(W):void 0;if(!J||J.status!=="queued")continue;this.executeQueuedRun(J)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,Z=Number.NEGATIVE_INFINITY,Q,W=Date.now();for(let J=0;J<this.runQueue.length;J++){let X=this.runs.get(this.runQueue[J]);if(!X||X.status!=="queued")continue;if(X.nextAttemptAt&&X.nextAttemptAt.getTime()>W){if(!Q||X.nextAttemptAt<Q)Q=X.nextAttemptAt;continue}if(X.priority>Z)Z=X.priority,$=J}return{index:$,nextDelayedAttemptAt:Q}}scheduleQueuedRunDispatch($){if(!$)return;let Z=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},Z)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let Z of this.runs.values())if(Z.status==="running")$++;return $}async executeQueuedRun($){let Z=$.currentActivity===KH;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:y.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let W=Z?UN($):$.message,J=await this.routeToTeammate($.agentId,W,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=J,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:y.RunCompleted,run:{...$}})}catch(W){let J=W instanceof Error?W.message:String(W??"Unknown error");$.error=J,$.endedAt=new Date;let X=this.members.get($.agentId);if(GH(X,W))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:y.RunCancelled,run:{...$},reason:J});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:y.RunFailed,run:{...$}})}finally{clearInterval(Q),this.dispatchQueuedRuns()}}listRuns($){let Z=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Q)=>{if(!Z&&!["running","queued"].includes(Q.status))return!1;if($?.status&&Q.status!==$.status)return!1;if($?.agentId&&Q.agentId!==$.agentId)return!1;return!0}).map((Q)=>({...Q}))}getRun($){let Z=this.runs.get($);return Z?{...Z}:void 0}async awaitRun($,Z=250){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);while(Q.status==="queued"||Q.status==="running")await FH(Z);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((Z)=>["queued","running"].includes(Z.status)))await FH($);return this.listRuns()}cancelRun($,Z){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);if(Q.status==="completed"||Q.status==="failed")return{...Q};Q.status="cancelled",Q.error=Z,Q.endedAt=new Date,Q.currentActivity="cancelled";let W=this.runQueue.indexOf($);if(W>=0)this.runQueue.splice(W,1);return this.emitEvent({type:y.RunCancelled,run:{...Q},reason:Z}),{...Q}}recoverActiveRuns($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;let W=this.members.get(Q.agentId);if(!W||W.role!=="teammate"||!W.agent){Q.status="interrupted",Q.error="teammate_unavailable_after_recovery",Q.endedAt=new Date,Q.currentActivity="interrupted",this.emitEvent({type:y.RunInterrupted,run:{...Q},reason:Q.error});continue}let J=new Date;if(Q.status="queued",Q.error=void 0,Q.endedAt=void 0,Q.heartbeatAt=J,Q.lastProgressAt=J,Q.lastProgressMessage=$,Q.currentActivity=KH,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);Z.push({...Q}),this.emitEvent({type:y.RunQueued,run:{...Q}})}return this.dispatchQueuedRuns(),Z}markStaleRunsInterrupted($="runtime_recovered"){let Z=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;Q.status="interrupted",Q.error=$,Q.endedAt=new Date,Q.currentActivity="interrupted",Z.push({...Q}),this.emitEvent({type:y.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),Z}sendMessage($,Z,Q,W,J){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let X=this.members.get(Z);if(!X)throw Error(`Unknown recipient "${Z}"`);let Y={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:Z,subject:Q,body:W,taskId:J,sentAt:new Date};if(this.mailbox.push(Y),this.emitEvent({type:y.TeamMessage,message:{...Y}}),X.role==="teammate"&&X.runningCount>0&&X.agent)X.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Q}". Use the team_read_mailbox tool to read it at your convenience.`;return{...Y}}broadcast($,Z,Q,W){let J=[];for(let X of this.members.values()){if(X.agentId===$)continue;if(X.role==="lead")continue;J.push(this.sendMessage($,X.agentId,Z,Q,W?.taskId))}return J}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let Z={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:$.agentId,taskId:$.taskId,kind:$.kind,summary:$.summary,evidence:$.evidence,nextAction:$.nextAction};this.missionLog.push(Z);let Q=this.members.get($.agentId);if(Q)Q.lastMissionAt=Date.now(),Q.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:y.TeamMissionLog,entry:{...Z}}),{...Z}}createOutcome($){let Z={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:$.title,status:"draft",requiredSections:[...new Set($.requiredSections)],createdBy:$.createdBy,createdAt:new Date};return this.outcomes.set(Z.id,Z),this.emitEvent({type:y.OutcomeCreated,outcome:{...Z}}),{...Z}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let Z=this.outcomes.get($.outcomeId);if(!Z)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!Z.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let Q={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(Q.id,Q),Z.status==="draft")Z.status="in_review";return this.emitEvent({type:y.OutcomeFragmentAttached,fragment:{...Q}}),{...Q}}reviewOutcomeFragment($){let Z=this.outcomeFragments.get($.fragmentId);if(!Z)throw Error(`Fragment "${$.fragmentId}" was not found`);return Z.status=$.approved?"reviewed":"rejected",Z.reviewedBy=$.reviewedBy,Z.reviewedAt=new Date,this.emitEvent({type:y.OutcomeFragmentReviewed,fragment:{...Z}}),{...Z}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((Z)=>Z.outcomeId===$).map((Z)=>({...Z}))}finalizeOutcome($){let Z=this.outcomes.get($);if(!Z)throw Error(`Outcome "${$}" was not found`);let Q=this.listOutcomeFragments($);for(let W of Z.requiredSections)if(!Q.some((X)=>X.section===W&&X.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${W}" is missing a reviewed fragment.`);return Z.status="finalized",Z.finalizedAt=new Date,this.emitEvent({type:y.OutcomeFinalized,outcome:{...Z}}),{...Z}}cleanup(){for(let $ of this.members.values())if($.role==="teammate"&&$.runningCount>0)throw Error(`Cannot cleanup team while teammate "${$.agentId}" is still running`);if(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let $ of this.members.values())if($.role==="teammate")try{$.agent?.abort()}catch(Z){if(!jW(Z))throw Z}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[$,Z]of this.members.entries())if(Z.role==="teammate")this.members.delete($)}requireTask($){let Z=this.tasks.get($);if(!Z)throw Error(`Task "${$}" was not found`);return Z}assertDependenciesResolved($){let Z=this.getUnresolvedDependencies($);if(Z.length>0)throw Error(`Task "${$.id}" is blocked by "${Z[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((Z)=>{let Q=this.tasks.get(Z);return!Q||Q.status!=="completed"})}trackMeaningfulEvent($,Z){if(this.recordRunActivityFromAgentEvent($,Z),Z.type==="iteration_end"&&Z.hadToolCalls){this.recordProgressStep($,`Completed iteration ${Z.iteration} with ${Z.toolCallCount} tool call(s)`);return}if(Z.type==="content_end"&&Z.contentType==="tool"&&!Z.error){this.recordProgressStep($,`Finished tool "${Z.toolName??"unknown"}"`);return}if(Z.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${Z.iterations} iterations)`});return}if(Z.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:Z.error.message})}recordRunActivityFromAgentEvent($,Z){let Q;switch(Z.type){case"iteration_start":Q=`iteration_${Z.iteration}_started`;break;case"content_start":if(Z.contentType==="tool")Q=`running_tool_${Z.toolName??"unknown"}`;break;case"content_end":if(Z.contentType==="tool")Q=Z.error?this.formatProgressErrorActivity(`tool_${Z.toolName??"unknown"}_error`,Z.error):`finished_tool_${Z.toolName??"unknown"}`;break;case"done":Q="finalizing_response";break;case"error":Q=this.formatProgressErrorActivity("run_error",Z.error.message);break;default:break}if(!Q)return;for(let W of this.runs.values()){if(W.agentId!==$||W.status!=="running")continue;this.recordRunProgress(W,Q)}}recordRunProgress($,Z){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=Z,$.currentActivity=Z,this.emitEvent({type:y.RunProgress,run:{...$},message:Z})}formatProgressErrorActivity($,Z){let Q=Z.replace(/\s+/g," ").trim();if(Q.length===0)return $;let W=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${W}`}recordProgressStep($,Z,Q,W=!1){this.missionStepCounter++;let J=this.members.get($);if(!J)return;let X=this.missionStepCounter-J.lastMissionStep,Y=Date.now()-J.lastMissionAt;if(!W&&X<this.missionLogIntervalSteps&&Y<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Q,kind:"progress",summary:Z})}buildMailboxNotification($){if($.length===0)return"";let Z=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Q of $)Z.push(`--- Message from ${Q.fromAgentId} | subject: ${Q.subject} ---`),Z.push(Q.body);return Z.push("---"),Z.join(`
481
- `)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function FH($){return new Promise((Z)=>setTimeout(Z,$))}function m2($,Z){let Q=0;for(let W of $){if(!W.startsWith(Z))continue;let J=Number.parseInt(W.slice(Z.length),10);if(Number.isFinite(J))Q=Math.max(Q,J)}return Q}function BW($,Z){switch(Z.type){case"run_queued":case"run_started":$.activeTeamRunIds.add(Z.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let Q;if(Z.type==="run_failed")Q=Z.run.error;else if(Z.type==="run_cancelled"||Z.type==="run_interrupted")Q=Z.run.error??Z.reason;$.activeTeamRunIds.delete(Z.run.id),$.pendingTeamRunUpdates.push({runId:Z.run.id,agentId:Z.run.agentId,taskId:Z.run.taskId,status:Z.type.replace("run_",""),error:Q,iterations:Z.run.result?.iterations}),m5($);break}default:break}}async function HW($,Z,Q){switch(Z.type){case"run_progress":await Q("onTeamTaskProgress",$,Z.run.agentId,Z.message,{kind:Z.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(Z.event.type==="content_start"&&Z.event.contentType==="text"&&typeof Z.event.text==="string"){let W=Z.event.text.replace(/\s+/g," ").trim().slice(0,120);if(W)await Q("onTeamTaskProgress",$,Z.agentId,W,{kind:"text"})}break;case"task_start":await Q("onTeamTaskStart",$,Z.agentId,Z.message);break;case"task_end":{if(Z.error)await Q("onTeamTaskEnd",$,Z.agentId,"failed",`[error] ${Z.error.message}`,void 0,Z.messages);else if(Z.result?.finishReason==="aborted")await Q("onTeamTaskEnd",$,Z.agentId,"cancelled","[done] aborted",Z.result,Z.result.messages);else await Q("onTeamTaskEnd",$,Z.agentId,"completed",`[done] ${Z.result?.finishReason??"completed"}`,Z.result,Z.result?.messages);break}default:break}}function GW($,Z,Q,W){if(!$.runtime.teamRuntime)return;let J=$.runtime.teamRuntime.getTeamName();W({type:"team_progress",payload:{sessionId:Z,teamName:J,lifecycle:g5({teamName:J,sessionId:Z,event:Q}),summary:x5(J,$.runtime.teamRuntime.exportState())}})}function G4($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function KW($,Z){if($.aborting)return!1;if(!(Z==="completed"||Z==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&G4($)}function m5($){let Z=$.teamRunWaiters.splice(0);for(let Q of Z)Q()}async function FW($){while(!0){if($.aborting)return[];if($.pendingTeamRunUpdates.length>0){let Z=[...$.pendingTeamRunUpdates];return $.pendingTeamRunUpdates.length=0,Z}if($.activeTeamRunIds.size===0)return[];await new Promise((Z)=>{$.teamRunWaiters.push(Z)})}}function AW($,Z){let Q=Z.map((X)=>{let Y=[`- ${X.runId} (${X.agentId}) -> ${X.status}`];if(X.taskId)Y.push(` task=${X.taskId}`);if(typeof X.iterations==="number")Y.push(` iterations=${X.iterations}`);if(X.error)Y.push(` error=${X.error}`);return Y.join("")}),W=$.activeTeamRunIds.size,J=W>0?`There are still ${W} teammate run(s) in progress. Continue coordination and decide whether to wait for more updates.`:"No teammate runs are currently in progress. Continue coordination using these updates.";return K4(`System-delivered teammate async run updates:
484
+ ${Z}`:Z,Y=Q?.continueConversation?await J.agent.continue(X):await J.agent.run(X);return this.emitEvent({type:k.TaskEnd,agentId:$,result:Y}),this.recordProgressStep($,`Completed a delegated run (${Y.iterations} iterations)`,Q?.taskId,!0),Y}catch(W){let X=W instanceof Error?W:Error(String(W));if(this.emitEvent({type:k.TaskEnd,agentId:$,error:X,messages:J.agent.getMessages()}),!PH(J,X))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:X.message});throw X}finally{if(J.runningCount--,J.runningCount<=0&&this.members.get($)?.status!=="stopped")J.status="idle"}}startTeammateRun($,Z,Q){let J=`run_${String(++this.runCounter).padStart(5,"0")}`,W={id:J,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(J,W),this.runQueue.push(J),this.emitEvent({type:k.RunQueued,run:{...W}}),this.dispatchQueuedRuns(),{...W}}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[J]=this.runQueue.splice(Q,1),W=J?this.runs.get(J):void 0;if(!W||W.status!=="queued")continue;this.executeQueuedRun(W)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,Z=Number.NEGATIVE_INFINITY,Q,J=Date.now();for(let W=0;W<this.runQueue.length;W++){let X=this.runs.get(this.runQueue[W]);if(!X||X.status!=="queued")continue;if(X.nextAttemptAt&&X.nextAttemptAt.getTime()>J){if(!Q||X.nextAttemptAt<Q)Q=X.nextAttemptAt;continue}if(X.priority>Z)Z=X.priority,$=W}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===SH;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:k.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let J=Z?$w($):$.message,W=await this.routeToTeammate($.agentId,J,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=W,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:k.RunCompleted,run:{...$}})}catch(J){let W=J instanceof Error?J.message:String(J??"Unknown error");$.error=W,$.endedAt=new Date;let X=this.members.get($.agentId);if(PH(X,J))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:k.RunCancelled,run:{...$},reason:W});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:k.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 bH(Z);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((Z)=>["queued","running"].includes(Z.status)))await bH($);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 J=this.runQueue.indexOf($);if(J>=0)this.runQueue.splice(J,1);return this.emitEvent({type:k.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 J=this.members.get(Q.agentId);if(!J||J.role!=="teammate"||!J.agent){Q.status="interrupted",Q.error="teammate_unavailable_after_recovery",Q.endedAt=new Date,Q.currentActivity="interrupted",this.emitEvent({type:k.RunInterrupted,run:{...Q},reason:Q.error});continue}let W=new Date;if(Q.status="queued",Q.error=void 0,Q.endedAt=void 0,Q.heartbeatAt=W,Q.lastProgressAt=W,Q.lastProgressMessage=$,Q.currentActivity=SH,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);Z.push({...Q}),this.emitEvent({type:k.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:k.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),Z}sendMessage($,Z,Q,J,W){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:J,taskId:W,sentAt:new Date};if(this.mailbox.push(Y),this.emitEvent({type:k.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,J){let W=[];for(let X of this.members.values()){if(X.agentId===$)continue;if(X.role==="lead")continue;W.push(this.sendMessage($,X.agentId,Z,Q,J?.taskId))}return W}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:k.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:k.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:k.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:k.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 J of Z.requiredSections)if(!Q.some((X)=>X.section===J&&X.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${J}" is missing a reviewed fragment.`);return Z.status="finalized",Z.finalizedAt=new Date,this.emitEvent({type:k.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(!f3(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 J of this.runs.values()){if(J.agentId!==$||J.status!=="running")continue;this.recordRunProgress(J,Q)}}recordRunProgress($,Z){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=Z,$.currentActivity=Z,this.emitEvent({type:k.RunProgress,run:{...$},message:Z})}formatProgressErrorActivity($,Z){let Q=Z.replace(/\s+/g," ").trim();if(Q.length===0)return $;let J=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${J}`}recordProgressStep($,Z,Q,J=!1){this.missionStepCounter++;let W=this.members.get($);if(!W)return;let X=this.missionStepCounter-W.lastMissionStep,Y=Date.now()-W.lastMissionAt;if(!J&&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(`
485
+ `)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function bH($){return new Promise((Z)=>setTimeout(Z,$))}function p2($,Z){let Q=0;for(let J of $){if(!J.startsWith(Z))continue;let W=Number.parseInt(J.slice(Z.length),10);if(Number.isFinite(W))Q=Math.max(Q,W)}return Q}function D3($,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}),r5($);break}default:break}}async function L3($,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 J=Z.event.text.replace(/\s+/g," ").trim().slice(0,120);if(J)await Q("onTeamTaskProgress",$,Z.agentId,J,{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 _3($,Z,Q,J){if(!$.runtime.teamRuntime)return;let W=$.runtime.teamRuntime.getTeamName();J({type:"team_progress",payload:{sessionId:Z,teamName:W,lifecycle:p5({teamName:W,sessionId:Z,event:Q}),summary:l5(W,$.runtime.teamRuntime.exportState())}})}function _4($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function T3($,Z){if($.aborting)return!1;if(!(Z==="completed"||Z==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&_4($)}function r5($){let Z=$.teamRunWaiters.splice(0);for(let Q of Z)Q()}async function O3($){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 q3($,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("")}),J=$.activeTeamRunIds.size,W=J>0?`There are still ${J} 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 T4(`System-delivered teammate async run updates:
482
486
  ${Q.join(`
483
487
  `)}
484
488
 
485
- ${J}`,$.config.mode)}function K4($,Z){return DN($,Z==="plan"?"plan":Z==="yolo"?"yolo":"act")}var fW=4;class O1{adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor($,Z={}){this.adapter=$;this.manifestStore=new ZW($,Z.messagesArtifactUploader,Z.logger),this.teamChildren=new y5($,this.manifestStore,(Q,W,J)=>this.toPersistedMessages(Q,W,J),O1.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,Z,Q){if(!$)return;return Z?T5(Z.messages,Z,Q):z5($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,Z){this.manifestStore.writeSessionManifest($,Z)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let Z=$.startedAt??$0(),Q=$.sessionId.trim(),W=Q.length>0?Q:`${Date.now()}_${_N(5)}`,J=this.manifestStore.artifacts.sessionMessagesPath(W),X=this.manifestStore.artifacts.sessionManifestPath(W),Y=e8({metadata:$.metadata,prompt:$.prompt}),j={version:1,session_id:W,source:$.source,pid:$.pid,started_at:Z,status:"running",interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt?.trim()||void 0,metadata:Y,messages_path:J};return await this.adapter.upsertSession({sessionId:W,source:$.source,pid:$.pid,startedAt:Z,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:null,parentAgentId:null,agentId:null,conversationId:null,isSubagent:!1,prompt:j.prompt??null,metadata:i1(j.metadata),hookPath:"",messagesPath:J,updatedAt:$0()}),this.manifestStore.initializeMessagesFile(W,J,Z),this.manifestStore.writeSessionManifest(X,j),{manifestPath:X,messagesPath:J,manifest:j}}async updateSessionStatus($,Z,Q){let W;if((await YB(()=>this.adapter.getSession($),async(X)=>{return W=j0(Z)?void 0:$0(),this.adapter.updateSession({sessionId:$,status:Z,endedAt:W??null,exitCode:j0(Z)?null:typeof Q==="number"?Q:null,expectedStatusLock:X.statusLock})},fW)).updated){if(Z==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:W}}return{updated:!1}}async updateSession($){for(let Z=0;Z<fW;Z++){let Q=await this.adapter.getSession($.sessionId);if(!Q)return{updated:!1};let W=Q.metadata??void 0,J=$.metadata!==void 0?i1($.metadata)??{}:i1(W)??{},X=I$(typeof W?.title==="string"?W.title:void 0),Y=$.title!==void 0?I$($.title):X??y7($.prompt);if(Y)J.title=Y;else delete J.title;let j=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:j?Object.keys(J).length>0?J:null:void 0,title:Y,expectedStatusLock:Q.statusLock})).updated)continue;let{path:B,manifest:H}=this.manifestStore.readManifestFile($.sessionId);if(H){if($.prompt!==void 0)H.prompt=$.prompt??void 0;let G=$.metadata!==void 0?i1($.metadata)??{}:i1(H.metadata)??{};if(Y)G.title=Y;H.metadata=Object.keys(G).length>0?G:void 0,this.manifestStore.writeSessionManifest(B,H)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,Z){return this.teamChildren.appendSubagentHookAudit(Z),Promise.resolve()}persistSessionMessages($,Z,Q){let W=z5(Z);return this.manifestStore.persistSessionMessages($,W,Q)}applySubagentStatus($,Z){return this.teamChildren.applySubagentStatus($,Z)}applySubagentStatusBySessionId($,Z){return this.teamChildren.applySubagentStatusBySessionId($,Z)}applyStatusToRunningChildSessions($,Z){return this.teamChildren.applyStatusToRunningChildSessions($,Z)}onTeamTaskStart($,Z,Q){return this.teamChildren.onTeamTaskStart($,Z,Q)}onTeamTaskEnd($,Z,Q,W,J,X){return this.teamChildren.onTeamTaskEnd($,Z,Q,W,J,X)}onTeamTaskProgress($,Z,Q,W){return this.teamChildren.onTeamTaskProgress($,Z,Q,W)}handleSubAgentStart($,Z){return this.teamChildren.handleSubAgentStart($,Z)}handleSubAgentEnd($,Z){return this.teamChildren.handleSubAgentEnd($,Z)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(Z){return typeof Z==="object"&&Z!==null&&"code"in Z&&Z.code==="EPERM"}}async reconcileDeadRunningSession($){if(j0($.status)===!1||this.isPidAlive($.pid))return $;let Z=$0(),Q=O1.STALE_REASON;for(let W=0;W<fW;W++){let J=await this.adapter.getSession($.sessionId);if(!J)return;if(j0(J.status)===!1)return J;let X={...J.metadata??{},terminal_marker:Q,terminal_marker_at:Z,terminal_marker_pid:J.pid,terminal_marker_source:O1.STALE_SOURCE},Y=await this.adapter.updateSession({sessionId:J.sessionId,status:"failed",endedAt:Z,exitCode:1,metadata:X,expectedStatusLock:J.statusLock});if(!Y.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(J.sessionId,"failed");let j=XB(J,{status:"failed",endedAt:Z,exitCode:1,metadata:X}),{path:V}=this.manifestStore.readManifestFile(J.sessionId);return this.manifestStore.writeSessionManifest(V,j),this.manifestStore.appendStaleSessionHookLog(Z,J.sessionId,J.pid,Q,O1.STALE_SOURCE),{...J,status:"failed",endedAt:Z,exitCode:1,metadata:X,statusLock:Y.statusLock,updatedAt:Z}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let Z=Math.max(1,Math.floor($)),Q=Math.min(Z*5,2000);return await this.reconcileDeadSessions(Q),(await this.adapter.listSessions({limit:Q})).slice(0,Z).map((J)=>{let X=i1(J.metadata??void 0),Y=this.manifestStore.readSessionManifest(J.sessionId),j=I$(typeof Y?.metadata?.title==="string"?Y.metadata.title:void 0),V=j?{...X??{},title:j}:X;return{...J,metadata:V}})}async reconcileDeadSessions($=2000){let Z=Math.max(1,Math.floor($)),Q=(await Promise.all(["idle","running","pending"].map((J)=>this.adapter.listSessions({limit:Z,status:J})))).flat(),W=0;for(let J of Q){let X=await this.reconcileDeadRunningSession(J);if(X&&X.status!==J.status)W++}return W}async deleteSession($){let Z=$.trim();if(!Z)throw Error("session id is required");let Q=await this.adapter.getSession(Z);if(!Q)return{deleted:!1};if(await this.adapter.deleteSession(Z,!1),!Q.isSubagent){let W=await this.adapter.listSessions({limit:2000,parentSessionId:Z});await this.adapter.deleteSession(Z,!0),await Promise.allSettled(W.map(async(J)=>{await e7(J.cwd,J.sessionId),B4(J.messagesPath),B4(this.manifestStore.artifacts.sessionManifestPath(J.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(J.sessionId)}))}if(await e7(Q.cwd,Z),B4(Q.messagesPath),B4(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(LN(J));for(let J of W)this.manifestStore.artifacts.removeDir(J)}return{deleted:!0}}}function DW(){return new Date().toISOString()}function UH($,Z){let Q=`${$}.tmp`;ON(Q,`${JSON.stringify(Z,null,2)}
486
- `,"utf8"),TN(Q,$)}class DH{sessionsDirPath;constructor($=qN()){this.sessionsDirPath=$}ensureSessionsDir(){if(!UW(this.sessionsDirPath))zN(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return fH(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return fH(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!UW($))return{version:1,sessions:{}};try{let Z=JSON.parse(AH($,"utf8"));if(Z?.version===1&&Z.sessions)return Z}catch{}return{version:1,sessions:{}}}writeIndex($){UH(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!UW($))return{version:1,nextId:1,requests:[]};try{let Z=JSON.parse(AH($,"utf8"));if(Z?.version===1&&typeof Z.nextId==="number"&&Array.isArray(Z.requests))return Z}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){UH(this.spawnQueuePath(),$)}async upsertSession($){let Z=this.readIndex();Z.sessions[$.sessionId]=$,this.writeIndex(Z)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((Z)=>$.parentSessionId!==void 0?Z.parentSessionId===$.parentSessionId:!0).filter((Z)=>$.status!==void 0?Z.status===$.status:!0).sort((Z,Q)=>Q.startedAt.localeCompare(Z.startedAt)).slice(0,$.limit)}async updateSession($){let Z=this.readIndex(),Q=Z.sessions[$.sessionId];if(!Q)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&Q.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:Q.statusLock};let W=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:Q.statusLock,J={...Q,status:$.status??Q.status,endedAt:$.endedAt!==void 0?$.endedAt:Q.endedAt??null,exitCode:$.exitCode!==void 0?$.exitCode:Q.exitCode??null,prompt:$.prompt!==void 0?$.prompt:Q.prompt??null,metadata:$.metadata!==void 0?$.metadata??null:Q.metadata??null,parentSessionId:$.parentSessionId!==void 0?$.parentSessionId??null:Q.parentSessionId??null,parentAgentId:$.parentAgentId!==void 0?$.parentAgentId??null:Q.parentAgentId??null,agentId:$.agentId!==void 0?$.agentId??null:Q.agentId??null,conversationId:$.conversationId!==void 0?$.conversationId??null:Q.conversationId??null,statusLock:W,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:Q.isSubagent,updatedAt:DW()};if($.setRunning)J.status="running",J.endedAt=null,J.exitCode=null;return Z.sessions[$.sessionId]=J,this.writeIndex(Z),{updated:!0,statusLock:J.statusLock}}async deleteSession($,Z){let Q=this.readIndex();if(!Q.sessions[$])return!1;if(delete Q.sessions[$],Z){for(let J of Object.values(Q.sessions))if(J.parentSessionId===$)delete Q.sessions[J.sessionId]}return this.writeIndex(Q),!0}async enqueueSpawnRequest($){let Z=this.readQueue();Z.requests.push({id:Z.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:DW()}),Z.nextId+=1,this.writeQueue(Z)}async claimSpawnRequest($,Z){let Q=this.readQueue(),W=Q.requests.find((J)=>J.rootSessionId===$&&J.parentAgentId===Z&&!J.consumedAt);if(!W)return;return W.consumedAt=DW(),this.writeQueue(Q),W.task}}class LW extends O1{constructor($,Z={}){super(new DH($),Z)}ensureSessionsDir(){return super.ensureSessionsDir()}}import{existsSync as MN,mkdirSync as RN}from"node:fs";import{resolveSessionDataDir as EN}from"@cline/shared/storage";var _W=`
489
+ ${W}`,$.config.mode)}function T4($,Z){return Zw($,Z==="plan"?"plan":Z==="yolo"?"yolo":"act")}var z3=4;class R1{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 B3($,Z.messagesArtifactUploader,Z.logger),this.teamChildren=new v5($,this.manifestStore,(Q,J,W)=>this.toPersistedMessages(Q,J,W),R1.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,Z,Q){if(!$)return;return Z?w5(Z.messages,Z,Q):E5($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,Z){this.manifestStore.writeSessionManifest($,Z)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let Z=$.startedAt??$0(),Q=$.sessionId.trim(),J=Q.length>0?Q:`${Date.now()}_${Jw(5)}`,W=this.manifestStore.artifacts.sessionMessagesPath(J),X=this.manifestStore.artifacts.sessionCompactionPath(J),Y=this.manifestStore.artifacts.sessionManifestPath(J),j=X4({metadata:$.metadata,prompt:$.prompt}),V={version:1,session_id:J,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:j,messages_path:W};return await this.adapter.upsertSession({sessionId:J,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:V.prompt??null,metadata:s1(V.metadata),hookPath:"",messagesPath:W,updatedAt:$0()}),this.manifestStore.initializeMessagesFile(J,W,Z),this.manifestStore.writeSessionManifest(Y,V),{manifestPath:Y,messagesPath:W,compactionPath:X,manifest:V}}async updateSessionStatus($,Z,Q){let J;if((await LB(()=>this.adapter.getSession($),async(X)=>{return J=V0(Z)?void 0:$0(),this.adapter.updateSession({sessionId:$,status:Z,endedAt:J??null,exitCode:V0(Z)?null:typeof Q==="number"?Q:null,expectedStatusLock:X.statusLock})},z3)).updated){if(Z==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:J}}return{updated:!1}}async updateSession($){for(let Z=0;Z<z3;Z++){let Q=await this.adapter.getSession($.sessionId);if(!Q)return{updated:!1};let J=Q.metadata??void 0,W=$.metadata!==void 0?s1($.metadata)??{}:s1(J)??{},X=u$(typeof J?.title==="string"?J.title:void 0),Y=$.title!==void 0?u$($.title):X??m7($.prompt);if(Y)W.title=Y;else delete W.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(W).length>0?W:null:void 0,title:Y,expectedStatusLock:Q.statusLock})).updated)continue;let{path:B,manifest:H}=this.manifestStore.readManifestFile($.sessionId);if(H){if($.prompt!==void 0)H.prompt=$.prompt??void 0;let G=$.metadata!==void 0?s1($.metadata)??{}:s1(H.metadata)??{};if(Y)G.title=Y;H.metadata=Object.keys(G).length>0?G:void 0,this.manifestStore.writeSessionManifest(B,H)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,Z){return this.teamChildren.appendSubagentHookAudit(Z),Promise.resolve()}persistSessionMessages($,Z,Q){let J=E5(Z);return this.manifestStore.persistSessionMessages($,J,Q)}async readSessionCompactionState($){return await this.manifestStore.readSessionCompactionState($)}async persistSessionCompactionState($,Z){await this.manifestStore.persistSessionCompactionState($,Z)}async deleteSessionCompactionState($){await this.manifestStore.deleteSessionCompactionState($)}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,J,W,X){return this.teamChildren.onTeamTaskEnd($,Z,Q,J,W,X)}onTeamTaskProgress($,Z,Q,J){return this.teamChildren.onTeamTaskProgress($,Z,Q,J)}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(V0($.status)===!1||this.isPidAlive($.pid))return $;let Z=$0(),Q=R1.STALE_REASON;for(let J=0;J<z3;J++){let W=await this.adapter.getSession($.sessionId);if(!W)return;if(V0(W.status)===!1)return W;let X={...W.metadata??{},terminal_marker:Q,terminal_marker_at:Z,terminal_marker_pid:W.pid,terminal_marker_source:R1.STALE_SOURCE},Y=await this.adapter.updateSession({sessionId:W.sessionId,status:"failed",endedAt:Z,exitCode:1,metadata:X,expectedStatusLock:W.statusLock});if(!Y.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(W.sessionId,"failed");let j=DB(W,{status:"failed",endedAt:Z,exitCode:1,metadata:X}),{path:V}=this.manifestStore.readManifestFile(W.sessionId);return this.manifestStore.writeSessionManifest(V,j),this.manifestStore.appendStaleSessionHookLog(Z,W.sessionId,W.pid,Q,R1.STALE_SOURCE),{...W,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((W)=>{let X=s1(W.metadata??void 0),Y=this.manifestStore.readSessionManifest(W.sessionId),j=u$(typeof Y?.metadata?.title==="string"?Y.metadata.title:void 0),V=j?{...X??{},title:j}:X;return{...W,metadata:V}})}async reconcileDeadSessions($=2000){let Z=Math.max(1,Math.floor($)),Q=(await Promise.all(["idle","running","pending"].map((W)=>this.adapter.listSessions({limit:Z,status:W})))).flat(),J=0;for(let W of Q){let X=await this.reconcileDeadRunningSession(W);if(X&&X.status!==W.status)J++}return J}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 J=await this.adapter.listSessions({limit:2000,parentSessionId:Z});await this.adapter.deleteSession(Z,!0),await Promise.allSettled(J.map(async(W)=>{await j3(W.cwd,W.sessionId),D4(W.messagesPath),await this.deleteSessionCompactionStateIfExists(W.sessionId),D4(this.manifestStore.artifacts.sessionManifestPath(W.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(W.sessionId)}))}if(await j3(Q.cwd,Z),D4(Q.messagesPath),await this.deleteSessionCompactionStateIfExists(Z),D4(this.manifestStore.artifacts.sessionManifestPath(Z,!1)),Q.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(Z);else{let J=new Set([this.manifestStore.artifacts.sessionArtifactsDir(Z)]);for(let W of[Q.messagesPath])if(typeof W==="string"&&W.trim().length>0)J.add(Qw(W));for(let W of J)this.manifestStore.artifacts.removeDir(W)}return{deleted:!0}}async deleteSessionCompactionStateIfExists($){try{await this.manifestStore.deleteSessionCompactionState($)}catch{}}}function R3(){return new Date().toISOString()}function kH($,Z){let Q=`${$}.tmp`;Yw(Q,`${JSON.stringify(Z,null,2)}
490
+ `,"utf8"),Xw(Q,$)}class IH{sessionsDirPath;constructor($=jw()){this.sessionsDirPath=$}ensureSessionsDir(){if(!M3(this.sessionsDirPath))Ww(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return hH(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return hH(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!M3($))return{version:1,sessions:{}};try{let Z=JSON.parse(yH($,"utf8"));if(Z?.version===1&&Z.sessions)return Z}catch{}return{version:1,sessions:{}}}writeIndex($){kH(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!M3($))return{version:1,nextId:1,requests:[]};try{let Z=JSON.parse(yH($,"utf8"));if(Z?.version===1&&typeof Z.nextId==="number"&&Array.isArray(Z.requests))return Z}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){kH(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 J=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:Q.statusLock,W={...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:J,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:Q.isSubagent,updatedAt:R3()};if($.setRunning)W.status="running",W.endedAt=null,W.exitCode=null;return Z.sessions[$.sessionId]=W,this.writeIndex(Z),{updated:!0,statusLock:W.statusLock}}async deleteSession($,Z){let Q=this.readIndex();if(!Q.sessions[$])return!1;if(delete Q.sessions[$],Z){for(let W of Object.values(Q.sessions))if(W.parentSessionId===$)delete Q.sessions[W.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:R3()}),Z.nextId+=1,this.writeQueue(Z)}async claimSpawnRequest($,Z){let Q=this.readQueue(),J=Q.requests.find((W)=>W.rootSessionId===$&&W.parentAgentId===Z&&!W.consumedAt);if(!J)return;return J.consumedAt=R3(),this.writeQueue(Q),J.task}}class N3 extends R1{constructor($,Z={}){super(new IH($),Z)}ensureSessionsDir(){return super.ensureSessionsDir()}}import{existsSync as Vw,mkdirSync as Bw}from"node:fs";import{resolveSessionDataDir as Hw}from"@cline/shared/storage";var E3=`
487
491
  session_id AS sessionId,
488
492
  source,
489
493
  pid,
@@ -510,43 +514,43 @@ ${J}`,$.config.mode)}function K4($,Z){return DN($,Z==="plan"?"plan":Z==="yolo"?"
510
514
  metadata_json AS metadata,
511
515
  hook_path AS hookPath,
512
516
  messages_path AS messagesPath,
513
- updated_at AS updatedAt`;function zW($){$.interactive=$.interactive===1,$.enableTools=$.enableTools===1,$.enableSpawn=$.enableSpawn===1,$.enableTeams=$.enableTeams===1,$.isSubagent=$.isSubagent===1;let Z=$.metadata;if(typeof Z==="string"&&Z.trim())try{let Q=JSON.parse(Z);$.metadata=Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:null}catch{$.metadata=null}else $.metadata=null;return $}function TW($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function LH($){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 _H{store;sessionsDirPath;constructor($,Z=EN()){this.store=$;this.sessionsDirPath=Z}ensureSessionsDir(){if(!MN(this.sessionsDirPath))RN(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
517
+ updated_at AS updatedAt`;function w3($){$.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 C3($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function xH($){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 gH{store;sessionsDirPath;constructor($,Z=Hw()){this.store=$;this.sessionsDirPath=Z}ensureSessionsDir(){if(!Vw(this.sessionsDirPath))Bw(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
514
518
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
515
519
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
516
520
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
517
521
  metadata_json, transcript_path, hook_path, messages_path, updated_at
518
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,$.statusLock,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.isSubagent?1:0,$.prompt??null,TW($.metadata),"",$.hookPath??"",$.messagesPath??null,$.updatedAt])}async getSession($){let Z=this.store.queryOne(`SELECT ${_W} FROM sessions WHERE session_id = ?`,[$]);return Z?zW(Z):void 0}async listSessions($){let Z=[],Q=[];if($.parentSessionId)Z.push("parent_session_id = ?"),Q.push($.parentSessionId);if($.status)Z.push("status = ?"),Q.push($.status);let W=Z.length>0?`WHERE ${Z.join(" AND ")}`:"";return this.store.queryAll(`SELECT ${_W}
522
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,$.statusLock,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.isSubagent?1:0,$.prompt??null,C3($.metadata),"",$.hookPath??"",$.messagesPath??null,$.updatedAt])}async getSession($){let Z=this.store.queryOne(`SELECT ${E3} FROM sessions WHERE session_id = ?`,[$]);return Z?w3(Z):void 0}async listSessions($){let Z=[],Q=[];if($.parentSessionId)Z.push("parent_session_id = ?"),Q.push($.parentSessionId);if($.status)Z.push("status = ?"),Q.push($.status);let J=Z.length>0?`WHERE ${Z.join(" AND ")}`:"";return this.store.queryAll(`SELECT ${E3}
519
523
  FROM sessions
520
- ${W}
524
+ ${J}
521
525
  ORDER BY started_at DESC
522
- LIMIT ?`,[...Q,$.limit]).map(zW)}async updateSession($){if($.setRunning){if($.expectedStatusLock===void 0)return{updated:!1,statusLock:0};return{updated:(this.store.run(`UPDATE sessions
526
+ LIMIT ?`,[...Q,$.limit]).map(w3)}async updateSession($){if($.setRunning){if($.expectedStatusLock===void 0)return{updated:!1,statusLock:0};return{updated:(this.store.run(`UPDATE sessions
523
527
  SET status = 'running', ended_at = NULL, exit_code = NULL, updated_at = ?, status_lock = ?,
524
528
  parent_session_id = ?, parent_agent_id = ?, agent_id = ?, conversation_id = ?, is_subagent = 1,
525
529
  prompt = COALESCE(prompt, ?)
526
- WHERE session_id = ? AND status_lock = ?`,[$0(),$.expectedStatusLock+1,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.prompt??null,$.sessionId,$.expectedStatusLock]).changes??0)>0,statusLock:$.expectedStatusLock+1}}let Z=[],Q=[];if($.status!==void 0)Z.push("status = ?"),Q.push($.status);if($.endedAt!==void 0)Z.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)Z.push("exit_code = ?"),Q.push($.exitCode);if($.prompt!==void 0)Z.push("prompt = ?"),Q.push($.prompt??null);if($.metadata!==void 0)Z.push("metadata_json = ?"),Q.push(TW($.metadata));if($.parentSessionId!==void 0)Z.push("parent_session_id = ?"),Q.push($.parentSessionId??null);if($.parentAgentId!==void 0)Z.push("parent_agent_id = ?"),Q.push($.parentAgentId??null);if($.agentId!==void 0)Z.push("agent_id = ?"),Q.push($.agentId??null);if($.conversationId!==void 0)Z.push("conversation_id = ?"),Q.push($.conversationId??null);if(Z.length===0){let Y=await this.getSession($.sessionId);return{updated:!!Y,statusLock:Y?.statusLock??0}}let W=0;if($.expectedStatusLock!==void 0)W=$.expectedStatusLock+1,Z.push("status_lock = ?"),Q.push(W);Z.push("updated_at = ?"),Q.push($0());let J=`UPDATE sessions SET ${Z.join(", ")} WHERE session_id = ?`;if(Q.push($.sessionId),$.expectedStatusLock!==void 0)J+=" AND status_lock = ?",Q.push($.expectedStatusLock);if((this.store.run(J,Q).changes??0)===0)return{updated:!1,statusLock:0};if($.expectedStatusLock===void 0)W=(await this.getSession($.sessionId))?.statusLock??0;return{updated:!0,statusLock:W}}async deleteSession($,Z){let Q=this.store.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(Z)this.store.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}async enqueueSpawnRequest($){this.store.run(`INSERT INTO subagent_spawn_queue (root_session_id, parent_agent_id, task, system_prompt, created_at, consumed_at)
530
+ WHERE session_id = ? AND status_lock = ?`,[$0(),$.expectedStatusLock+1,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.prompt??null,$.sessionId,$.expectedStatusLock]).changes??0)>0,statusLock:$.expectedStatusLock+1}}let Z=[],Q=[];if($.status!==void 0)Z.push("status = ?"),Q.push($.status);if($.endedAt!==void 0)Z.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)Z.push("exit_code = ?"),Q.push($.exitCode);if($.prompt!==void 0)Z.push("prompt = ?"),Q.push($.prompt??null);if($.metadata!==void 0)Z.push("metadata_json = ?"),Q.push(C3($.metadata));if($.parentSessionId!==void 0)Z.push("parent_session_id = ?"),Q.push($.parentSessionId??null);if($.parentAgentId!==void 0)Z.push("parent_agent_id = ?"),Q.push($.parentAgentId??null);if($.agentId!==void 0)Z.push("agent_id = ?"),Q.push($.agentId??null);if($.conversationId!==void 0)Z.push("conversation_id = ?"),Q.push($.conversationId??null);if(Z.length===0){let Y=await this.getSession($.sessionId);return{updated:!!Y,statusLock:Y?.statusLock??0}}let J=0;if($.expectedStatusLock!==void 0)J=$.expectedStatusLock+1,Z.push("status_lock = ?"),Q.push(J);Z.push("updated_at = ?"),Q.push($0());let W=`UPDATE sessions SET ${Z.join(", ")} WHERE session_id = ?`;if(Q.push($.sessionId),$.expectedStatusLock!==void 0)W+=" AND status_lock = ?",Q.push($.expectedStatusLock);if((this.store.run(W,Q).changes??0)===0)return{updated:!1,statusLock:0};if($.expectedStatusLock===void 0)J=(await this.getSession($.sessionId))?.statusLock??0;return{updated:!0,statusLock:J}}async deleteSession($,Z){let Q=this.store.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(Z)this.store.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}async enqueueSpawnRequest($){this.store.run(`INSERT INTO subagent_spawn_queue (root_session_id, parent_agent_id, task, system_prompt, created_at, consumed_at)
527
531
  VALUES (?, ?, ?, ?, ?, NULL)`,[$.rootSessionId,$.parentAgentId,$.task??null,$.systemPrompt??null,$0()])}async claimSpawnRequest($,Z){let Q=this.store.queryOne(`SELECT id, task FROM subagent_spawn_queue
528
532
  WHERE root_session_id = ? AND parent_agent_id = ? AND consumed_at IS NULL
529
- ORDER BY id ASC LIMIT 1`,[$,Z]);if(!Q||typeof Q.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[$0(),Q.id]),Q.task??void 0}}class Q$ extends O1{store;constructor($,Z={}){super(new _H($,Z.sessionArtifactsDir),Z);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
533
+ ORDER BY id ASC LIMIT 1`,[$,Z]);if(!Q||typeof Q.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[$0(),Q.id]),Q.task??void 0}}class Y$ extends R1{store;constructor($,Z={}){super(new gH($,Z.sessionArtifactsDir),Z);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
530
534
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
531
535
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
532
536
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
533
537
  metadata_json, transcript_path, hook_path, messages_path, updated_at
534
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,$0()])}}import{readdirSync as HP}from"node:fs";import{homedir as GP}from"node:os";import{isAbsolute as KP,join as Q3,resolve as W3}from"node:path";import{captureSdkError as i$,createSessionId as FP,isLikelyAuthError as AP,normalizeUserInput as fP}from"@cline/shared";import{setHomeDirIfUnset as UP}from"@cline/shared/storage";G0();import{createHandlerAsync as SN}from"@cline/llms";import{CHARS_PER_TOKEN as $r,estimateTokens as OW}from"@cline/shared";var OH=128000,qH=0.9,v5=0.7,MH=16384,qW=20000,zH=1024,TH=2000,RH=2000,EH=8;function f4($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
535
- ...[truncated ${$.length-Z} chars]`}function NN($){let Z=MW($);if(typeof Z==="string")return Z;return Z.map((Q)=>{switch(Q.type){case"text":return Q.text;case"file":return`<file path="${Q.path}">
538
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,$0()])}}import{readdirSync as nP}from"node:fs";import{homedir as aP}from"node:os";import{isAbsolute as oP,join as GJ,resolve as KJ}from"node:path";import{captureSdkError as G$,createSessionId as sP,isLikelyAuthError as tP,normalizeUserInput as eP}from"@cline/shared";import{setHomeDirIfUnset as $S}from"@cline/shared/storage";A0();import{createHandlerAsync as fw}from"@cline/llms";import{CHARS_PER_TOKEN as Qi,estimateTokens as P3}from"@cline/shared";var cH=128000,uH=0.9,i5=0.7,dH=16384,S3=20000,mH=1024,vH=2000,lH=2000,pH=8;function z4($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
539
+ ...[truncated ${$.length-Z} chars]`}function Gw($){let Z=b3($);if(typeof Z==="string")return Z;return Z.map((Q)=>{switch(Q.type){case"text":return Q.text;case"file":return`<file path="${Q.path}">
536
540
  ${Q.content}
537
541
  </file>`;case"image":return`[image:${Q.mediaType}]`;default:return""}}).join(`
538
- `)}function MW($){if(typeof $==="string")return f4($,TH);return $.map((Z)=>{switch(Z.type){case"text":return{...Z,text:f4(Z.text,TH)};case"file":return{...Z,content:f4(Z.content,RH)};case"image":return Z;default:return Z}})}function CN($){return Object.entries($).map(([Z,Q])=>`${Z}=${JSON.stringify(Q)}`).join(", ")}function NH($){if(typeof $.content==="string")return`[${$.role==="user"?"User":"Bot"}]: ${$.content}`;let Z=[];for(let Q of $.content)switch(Q.type){case"text":Z.push(`[${$.role==="user"?"User":"Bot"}]: ${Q.text}`);break;case"thinking":Z.push(`[Bot thinking]: ${f4(Q.thinking,2000)}`);break;case"redacted_thinking":Z.push("[Bot thinking]: [redacted]");break;case"tool_use":Z.push(`[Bot tool calls]: ${Q.name}(${CN(Q.input)})`);break;case"tool_result":Z.push(`[Tool result]: ${NN(Q.content)}`);break;case"file":Z.push(`[${$.role==="user"?"User":"Bot"} file ${Q.path}]: ${f4(Q.content,RH)}`);break;case"image":Z.push(`[${$.role==="user"?"User":"Bot"} image]: ${Q.mediaType}`);break}return Z.join(`
539
- `)}function CH($){return $.map(NH).join(`
542
+ `)}function b3($){if(typeof $==="string")return z4($,vH);return $.map((Z)=>{switch(Z.type){case"text":return{...Z,text:z4(Z.text,vH)};case"file":return{...Z,content:z4(Z.content,lH)};case"image":return Z;default:return Z}})}function Kw($){return Object.entries($).map(([Z,Q])=>`${Z}=${JSON.stringify(Q)}`).join(", ")}function rH($){if(typeof $.content==="string")return`[${$.role==="user"?"User":"Bot"}]: ${$.content}`;let Z=[];for(let Q of $.content)switch(Q.type){case"text":Z.push(`[${$.role==="user"?"User":"Bot"}]: ${Q.text}`);break;case"thinking":Z.push(`[Bot thinking]: ${z4(Q.thinking,2000)}`);break;case"redacted_thinking":Z.push("[Bot thinking]: [redacted]");break;case"tool_use":Z.push(`[Bot tool calls]: ${Q.name}(${Kw(Q.input)})`);break;case"tool_result":Z.push(`[Tool result]: ${Gw(Q.content)}`);break;case"file":Z.push(`[${$.role==="user"?"User":"Bot"} file ${Q.path}]: ${z4(Q.content,lH)}`);break;case"image":Z.push(`[${$.role==="user"?"User":"Bot"} image]: ${Q.mediaType}`);break}return Z.join(`
543
+ `)}function iH($){return $.map(rH).join(`
540
544
 
541
- `).trim()}function wH(){let $=new WeakMap;return(Z)=>{let Q=Z,W=$.get(Q);if(typeof W==="number")return W;let J;try{J=JSON.stringify(Z)}catch{J=NH(Z)}let X=OW(J.length);return $.set(Q,X),X}}function U4($){return $.metadata?.kind==="compaction_summary"}function RW($){if(!U4($))return;let Z=$.metadata;if(!Z)return;let Q=Z.details;return{kind:"compaction_summary",summary:String(Z.summary??""),details:{readFiles:Array.isArray(Q?.readFiles)?Q.readFiles.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter((W)=>W.length>0):[],modifiedFiles:Array.isArray(Q?.modifiedFiles)?Q.modifiedFiles.filter((W)=>typeof W==="string").map((W)=>W.trim()).filter((W)=>W.length>0):[]},tokensBefore:Number(Z.tokensBefore??0),generatedAt:Number(Z.generatedAt??0)}}function wN($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}function D4($){return $.role==="user"&&!wN($)&&!U4($)}function PH($){for(let Z=0;Z<$.length;Z+=1)if(D4($[Z]))return Z;return-1}function c5($){for(let Z=$.length-1;Z>=0;Z-=1)if(D4($[Z]))return Z;return 0}function SH($){for(let Z=$.length-1;Z>=0;Z-=1)if($[Z].role==="assistant")return Z;return-1}function bH($){for(let Z=$.length-1;Z>=0;Z-=1)if(U4($[Z]))return Z;return-1}function yH($,Z,Q){let W=c5($);if(W<=0)return 0;let J=0,X=$.length;for(let j=$.length-1;j>=0;j-=1)if(J+=Q($[j]),X=j,J>=Z)break;if(X<=0)return 0;let Y=Math.min(X,W);while(Y>0&&!D4($[Y]))Y-=1;return Y}function A4($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((Z)=>A4(Z));if($&&typeof $==="object"){let Z=$,Q=[];for(let W of["path","file_path","target_file","new_file_path","old_file_path"])Q.push(...A4(Z[W]));if(Array.isArray(Z.files)){for(let W of Z.files)if(W&&typeof W==="object")Q.push(...A4(W.path))}if(Array.isArray(Z.file_paths))Q.push(...A4(Z.file_paths));return Q}return[]}function F4($,Z){let Q=new Set($);for(let W of Z){let J=W.trim();if(!J)continue;Q.add(J)}return[...Q].sort((W,J)=>W.localeCompare(J))}function hH($){let Z=[],Q=[];for(let W of $){let J=RW(W);if(J){Z=F4(Z,J.details.readFiles),Q=F4(Q,J.details.modifiedFiles);continue}if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type==="file"){Z=F4(Z,[X.path]);continue}if(X.type!=="tool_use")continue;let Y=A4(X.input);if(X.name==="read_files"){Z=F4(Z,Y);continue}if(X.name==="editor"||X.name==="apply_patch")Q=F4(Q,Y)}}return{readFiles:Z,modifiedFiles:Q}}function PN($){let Z=$.readFiles.length>0?$.readFiles.map((W)=>`- ${W}`).join(`
542
- `):"- none",Q=$.modifiedFiles.length>0?$.modifiedFiles.map((W)=>`- ${W}`).join(`
545
+ `).trim()}function nH(){let $=new WeakMap;return(Z)=>{let Q=Z,J=$.get(Q);if(typeof J==="number")return J;let W;try{W=JSON.stringify(Z)}catch{W=rH(Z)}let X=P3(W.length);return $.set(Q,X),X}}function M4($){return $.metadata?.kind==="compaction_summary"}function y3($){if(!M4($))return;let Z=$.metadata;if(!Z)return;let Q=Z.details;return{kind:"compaction_summary",summary:String(Z.summary??""),details:{readFiles:Array.isArray(Q?.readFiles)?Q.readFiles.filter((J)=>typeof J==="string").map((J)=>J.trim()).filter((J)=>J.length>0):[],modifiedFiles:Array.isArray(Q?.modifiedFiles)?Q.modifiedFiles.filter((J)=>typeof J==="string").map((J)=>J.trim()).filter((J)=>J.length>0):[]},tokensBefore:Number(Z.tokensBefore??0),generatedAt:Number(Z.generatedAt??0)}}function Fw($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}function R4($){return $.role==="user"&&!Fw($)&&!M4($)}function aH($){for(let Z=0;Z<$.length;Z+=1)if(R4($[Z]))return Z;return-1}function n5($){for(let Z=$.length-1;Z>=0;Z-=1)if(R4($[Z]))return Z;return 0}function oH($){for(let Z=$.length-1;Z>=0;Z-=1)if($[Z].role==="assistant")return Z;return-1}function sH($){for(let Z=$.length-1;Z>=0;Z-=1)if(M4($[Z]))return Z;return-1}function tH($,Z,Q){let J=n5($);if(J<=0)return 0;let W=0,X=$.length;for(let j=$.length-1;j>=0;j-=1)if(W+=Q($[j]),X=j,W>=Z)break;if(X<=0)return 0;let Y=Math.min(X,J);while(Y>0&&!R4($[Y]))Y-=1;return Y}function q4($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((Z)=>q4(Z));if($&&typeof $==="object"){let Z=$,Q=[];for(let J of["path","file_path","target_file","new_file_path","old_file_path"])Q.push(...q4(Z[J]));if(Array.isArray(Z.files)){for(let J of Z.files)if(J&&typeof J==="object")Q.push(...q4(J.path))}if(Array.isArray(Z.file_paths))Q.push(...q4(Z.file_paths));return Q}return[]}function O4($,Z){let Q=new Set($);for(let J of Z){let W=J.trim();if(!W)continue;Q.add(W)}return[...Q].sort((J,W)=>J.localeCompare(W))}function eH($){let Z=[],Q=[];for(let J of $){let W=y3(J);if(W){Z=O4(Z,W.details.readFiles),Q=O4(Q,W.details.modifiedFiles);continue}if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type==="file"){Z=O4(Z,[X.path]);continue}if(X.type!=="tool_use")continue;let Y=q4(X.input);if(X.name==="read_files"){Z=O4(Z,Y);continue}if(X.name==="editor"||X.name==="apply_patch")Q=O4(Q,Y)}}return{readFiles:Z,modifiedFiles:Q}}function Aw($){let Z=$.readFiles.length>0?$.readFiles.map((J)=>`- ${J}`).join(`
546
+ `):"- none",Q=$.modifiedFiles.length>0?$.modifiedFiles.map((J)=>`- ${J}`).join(`
543
547
  `):"- none";return`## Files
544
548
  Read:
545
549
  ${Z}
546
550
  Modified:
547
- ${Q}`}function kH($,Z){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
551
+ ${Q}`}function $G($,Z){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
548
552
 
549
- ${PN(Z)}`.trim()}function IH($){let Z=[`Summarize this session for continuation. Be concise and factual.
553
+ ${Aw(Z)}`.trim()}function ZG($){let Z=[`Summarize this session for continuation. Be concise and factual.
550
554
 
551
555
  ## Goal
552
556
  One sentence: what is being built or fixed.
@@ -568,19 +572,19 @@ Edited: ${$.fileOps.modifiedFiles.join(", ")||"none"}`];if($.previousSummary?.tr
568
572
  ${$.previousSummary.trim()}`);return Z.push(`Conversation:
569
573
  ${$.conversationText||"(empty)"}`),Z.join(`
570
574
 
571
- `)}function xH($){let Z=$.summarizer,Q=(J)=>{if(J.providerId==="openai-codex"){let{maxOutputTokens:X,...Y}=J;return{...Y,thinking:!1}}return{...J,maxOutputTokens:J.maxOutputTokens??zH,thinking:!1}};if(!Z)return Q($.activeProviderConfig);let W=Z.providerConfig?.providerId===Z.providerId?Z.providerConfig:void 0;return Q({...W??{},providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey??W?.apiKey,baseUrl:Z.baseUrl??W?.baseUrl,headers:Z.headers??W?.headers,knownModels:Z.knownModels??W?.knownModels,maxOutputTokens:Z.maxOutputTokens??zH})}function gH($){return{role:"user",content:`Context summary:
572
-
573
- ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}async function bN($){let Z=await SN($.providerConfig),Q="";for await(let W of Z.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(W.type==="text"){Q+=W.text;continue}if(W.type==="done"&&!W.success&&W.error)throw Error(W.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Q.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Q.trim()}function yN($){try{return JSON.stringify($).length}catch{return String($).length}}async function mH($){let Z=$.context.messages;if(Z.length<2)return;let Q=yH(Z,$.preserveRecentTokens,$.estimateMessageTokens);if(Q<=0||Q>=Z.length)return;let W=Z.slice(0,Q),J=bH(W),X=J>=0?RW(W[J])?.summary:void 0,Y=J>=0?W.slice(J+1):W;if(Y.length===0)return;let j=hH(W),V=CH(Y),B=IH({previousSummary:X,conversationText:V,fileOps:j});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:W.length,newMessagesToFold:Y.length,preservedMessages:Z.length-Q,previousSummaryChars:X?.length??0,conversationTextChars:V.length,summaryRequestChars:B.length,summaryRequestEstimatedTokens:OW(B.length),newMessagesJsonChars:yN(Y),maxInputTokens:$.context.maxInputTokens,triggerTokens:$.context.triggerTokens});let H=await bN({providerConfig:xH({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),request:B,logger:$.logger});if(!H.trim())return;let G=kH(H,j),K=Z.reduce((L,f)=>L+$.estimateMessageTokens(f),0),F=[gH({summary:G,fileOps:j,tokensBefore:K}),...Z.slice(Q)],A=F.reduce((L,f)=>L+$.estimateMessageTokens(f),0);return $.logger?.debug("Performed agentic compaction",{messagesBefore:Z.length,messagesAfter:F.length,messagesSummarized:Q,messagesPreserved:Z.length-Q,tokensBefore:K,tokensAfter:A,maxInputTokens:$.context.maxInputTokens}),{messages:F}}import{CHARS_PER_TOKEN as hN}from"@cline/shared";function kN($){if(U4($))return;if(typeof $.content==="string"){let Q=$.content.trim();return Q?{...$,content:Q}:void 0}let Z=$.content.filter((Q)=>Q.type!=="text"||Q.text.trim());if(Z.length===0)return;return{...$,content:Z.map((Q)=>Q.type==="text"?{...Q,text:Q.text.trim()}:Q.type==="tool_result"?{...Q,content:MW(Q.content)}:Q)}}function IN($,Z){return $.reduce((Q,W)=>Q+Z(W),0)}function vH($,Z){if($.length<=Z)return $;let Q=`
574
- ...`,W=Math.max(1,Z-Q.length);return`${$.slice(0,W)}${Q}`}function cH($,Z){let Q=Number.isFinite(Z)?Math.max(1,Z):1,W=Math.max(16,Q*hN);if(typeof $.content==="string"){let Y=vH($.content,W).trim();return{...$,content:Y||"..."}}let J=W,X=$.content.map((Y)=>{if(Y.type!=="text"||J<=0)return Y;let j=vH(Y.text,J).trim();return J-=j.length,{...Y,text:j||"..."}});return{...$,content:X}}function xN($,Z){let Q=PH($),W=c5($),J=SH($),X=[],Y=0;for(let j=0;j<$.length;j+=1){let V=kN($[j]);if(!V)continue;let B=Z(V);Y+=B,X.push({index:j,message:V,estimatedTokens:B,toolPairIds:dH(V),isFirstUser:j===Q,isLastUser:j===W,isLastAssistant:j===J})}return{candidates:X,totalTokens:Y}}function uH($,Z,Q,W){let J=$[Z],X=J.estimatedTokens;return J.message=Q,J.estimatedTokens=W(Q),J.toolPairIds=dH(Q),J.estimatedTokens-X}function dH($){if(!Array.isArray($.content))return[];let Z=[];for(let Q of $.content)if(Q.type==="tool_use")Z.push(Q.id);else if(Q.type==="tool_result")Z.push(Q.tool_use_id);return Z}function gN($){let Z=new Map;for(let Q of $)for(let W of Q.toolPairIds){let J=Z.get(W);if(J)J.add(Q);else Z.set(W,new Set([Q]))}return Z}function mN($,Z,Q){let W=new Set,J=[Q],X=0;while(X<J.length){let Y=J[X];if(X+=1,Y===void 0||!$.has(Y)||W.has(Y))continue;W.add(Y);for(let j of Y.toolPairIds)for(let V of Z.get(j)??[])if(!W.has(V))J.push(V)}return W}function vN($,Z){let Q=0;for(let W of $){if(Z.has(W))continue;$[Q]=W,Q+=1}$.length=Q}function u5($,Z,Q,W){let J=new Set($),X=gN($);for(let Y=0;Y<$.length&&W>Q;){if(!Z($[Y])){Y+=1;continue}let j=mN(J,X,$[Y]);if(j.size===0){Y+=1;continue}let V=0;for(let B of j)V+=B.estimatedTokens,J.delete(B);W-=V,vN($,j)}return W}function cN($,Z,Q,W,J){if(Q<=Z)return Q;for(let Y=$.length-1;Y>=0&&Q>Z;Y-=1){let j=$[Y];if(j.isFirstUser)continue;let V=Math.max(EH,j.estimatedTokens-(Q-Z));if(V>=j.estimatedTokens)continue;Q+=uH($,Y,cH(j.message,V),J)}if(Q<=Z)return Q;let X=$.findIndex((Y)=>Y.isFirstUser);if(X>=0){if($[X].estimatedTokens<=W)return Q;while(Q>Z){let j=$[X],V=Math.max(1,j.estimatedTokens-(Q-Z));if(V>=j.estimatedTokens)break;let B=j.estimatedTokens;if(Q+=uH($,X,cH(j.message,V),J),j.estimatedTokens>=B)break}}return Q}function uN($,Z){return JSON.stringify($)!==JSON.stringify(Z)}function dN($){let Z=c5($);if(Z<0||Z===0&&!D4($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,Z),protectedTail:$.slice(Z)}}function lH($){let Z=Math.max(1,Math.min($.context.targetTokens??Math.floor($.context.triggerTokens*v5),$.context.maxInputTokens)),{compactable:Q,protectedTail:W}=dN($.context.messages);if(Q.length===0)return;let J=IN(W,$.estimateMessageTokens),X=Math.max(1,Z-J),Y=xN(Q,$.estimateMessageTokens),{candidates:j}=Y;if(j.length===0)return;let V=Y.totalTokens,B=V;B=u5(j,(F)=>F.message.role==="assistant"&&!F.isLastAssistant,X,B),B=u5(j,(F)=>F.message.role==="user"&&!F.isFirstUser&&!F.isLastUser,X,B),B=u5(j,(F)=>F.message.role==="assistant"&&F.isLastAssistant,X,B),B=u5(j,(F)=>F.message.role==="user"&&F.isLastUser&&!F.isFirstUser,X,B),B=cN(j,X,B,$.context.triggerTokens,$.estimateMessageTokens);let H=[...j.map((F)=>F.message),...W];if(!uN($.context.messages,H))return;let G=V+J,K=B+J;return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:H.length,messagesRemoved:$.context.messages.length-H.length,tokensBefore:G,tokensAfter:K,targetTokens:Z,maxInputTokens:$.context.maxInputTokens}),{messages:H}}var lN=0.5,pN=0.5;function pH($){try{return JSON.stringify($).length}catch{return String($).length}}function L4($){return typeof $==="number"&&Number.isFinite($)&&$>0}function rN($){let Z=[];if(L4($.configMaxInputTokens))Z.push($.configMaxInputTokens);if(L4($.modelMaxInputTokens))Z.push($.modelMaxInputTokens);if(L4($.contextWindow)){Z.push($.contextWindow);let Q=L4($.modelMaxTokens)?$.contextWindow-$.modelMaxTokens:void 0;if(L4(Q)&&Q>=$.contextWindow*lN)Z.push(Q)}return Z.length>0?Math.min(...Z):OH}function iN($){let Z=0,Q=0,W=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let X of J.content){if(X.type!=="tool_result")continue;let Y=pH(X.content);Z+=1,Q+=Y,W=Math.max(W,Y)}}return{toolResultCount:Z,toolResultSerializedChars:Q,maxToolResultSerializedChars:W}}var nN={basic:({context:$,estimateMessageTokens:Z,logger:Q})=>lH({context:$,estimateMessageTokens:Z,logger:Q}),agentic:({context:$,providerConfig:Z,compaction:Q,mode:W,estimateMessageTokens:J,logger:X})=>mH({context:$,providerConfig:Z,summarizer:Q?.summarizer,preserveRecentTokens:W==="manual"?Math.min(Q?.preserveRecentTokens??qW,$.triggerTokens):Q?.preserveRecentTokens??qW,estimateMessageTokens:J,logger:X})};function aN($){if(typeof $.config.reserveTokens==="number"){let Q=Math.max(0,$.config.reserveTokens),W=Math.max(0,$.maxInputTokens-Q);return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio==="number"){let Q=$.config.thresholdRatio,W=$.maxInputTokens*Q;return{shouldCompact:$.inputTokens>W,triggerTokens:W,thresholdRatio:Q}}let Z=Math.max(0,Math.min($.maxInputTokens-MH,$.maxInputTokens*qH));return{shouldCompact:$.inputTokens>Z,triggerTokens:Z,thresholdRatio:$.maxInputTokens>0?Z/$.maxInputTokens:0}}function sN($){let Z=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,Z)),W=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*Q)));return{triggerTokens:W,thresholdRatio:$.maxInputTokens>0?W/$.maxInputTokens:0}}function oN($){let Z=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*pN):Math.floor($.triggerTokens*v5),Q=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(Z,$.maxInputTokens,Q))}function tN($){let Z=0,Q=!1;for(let W of $)if(W.role==="user")Q=!0;else if(W.role==="assistant"&&Q)Z+=1,Q=!1;return Z}function EW($,Z={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let W=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=wH(),X=Q?.strategy??"basic",Y=nN[X],j=Z.mode??"auto",V=Q?.compact?"custom":X;return async(B)=>{let H=B.apiMessages.reduce((M,E)=>M+J(E),0),G=rN({configMaxInputTokens:Q?.maxInputTokens,modelMaxInputTokens:B.model.info?.maxInputTokens,contextWindow:B.model.info?.contextWindow,modelMaxTokens:B.model.info?.maxTokens}),K=aN({inputTokens:H,maxInputTokens:G,config:{maxInputTokens:Q?.maxInputTokens,reserveTokens:Q?.reserveTokens,thresholdRatio:Q?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:j,strategy:X,iteration:B.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:H,maxInputTokens:G,triggerTokens:K.triggerTokens,thresholdRatio:K.thresholdRatio,shouldCompact:K.shouldCompact,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:pH(B.apiMessages),...iN(B.apiMessages)}),j==="auto"&&!K.shouldCompact)return;let F=j==="manual"?sN({inputTokens:H,maxInputTokens:G,autoTriggerTokens:K.triggerTokens,manualTargetRatio:Z.manualTargetRatio}):K,A=j==="auto"?oN({maxInputTokens:G,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:F.triggerTokens,messagePairCount:tN(B.messages)}):void 0,L={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId,iteration:B.iteration,messages:B.messages,model:B.model,maxInputTokens:G,triggerTokens:F.triggerTokens,targetTokens:A,thresholdRatio:F.thresholdRatio,utilizationRatio:G>0?H/G:0},f=j==="manual"?"manual_compaction":"auto_compaction";B.emitStatusNotice?.(j==="manual"?"compacting":"auto-compacting",{kind:f,reason:f,iteration:B.iteration,triggerTokens:F.triggerTokens,maxInputTokens:G});let D=B.messages.length,U=Date.now(),T=Q?.compact?await Q.compact(L):await Y({context:L,providerConfig:{...W,abortSignal:B.abortSignal},compaction:Q,mode:j,estimateMessageTokens:J,logger:$.logger}),q=Date.now()-U,z=$.sessionId??B.conversationId,_={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId??void 0};if(T?.messages){let M=T.messages.reduce((E,P)=>E+J(P),0);$.logger?.log("Context compaction completed",{severity:"info",strategy:X,maxInputTokens:G,inputTokens:H,afterTokens:M,tokensSaved:H-M,utilizationBefore:`${(H/G*100).toFixed(1)}%`,utilizationAfter:`${(M/G*100).toFixed(1)}%`,thresholdTrigger:`${(F.thresholdRatio*100).toFixed(1)}%`,messagesBefore:D,messagesAfter:T.messages.length,messagesRemoved:D-T.messages.length}),HZ($.telemetry,{ulid:z,strategy:V,mode:j,messagesBefore:D,messagesAfter:T.messages.length,messagesRemoved:D-T.messages.length,tokensBefore:H,tokensAfter:M,tokensSaved:H-M,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:q,provider:$.providerId,modelId:$.modelId,..._})}else GZ($.telemetry,{ulid:z,strategy:V,mode:j,reason:"no_result",tokensBefore:H,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:q,provider:$.providerId,modelId:$.modelId,..._});return T}}G0();function _0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function f0($,Z){return{inputTokens:$.inputTokens+Math.max(0,Z.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,Z.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,Z.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,Z.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,Z.totalCost??0)}}function d5($){let Z=_0();for(let Q of $)Z=f0(Z,Q);return Z}function v2($){return typeof $==="number"&&Number.isFinite($)?$:0}function l5($){let Z=_0();for(let Q of $){let W=Q.metrics;if(!W)continue;Z=f0(Z,{inputTokens:v2(W.inputTokens),outputTokens:v2(W.outputTokens),cacheReadTokens:v2(W.cacheReadTokens),cacheWriteTokens:v2(W.cacheWriteTokens),totalCost:v2(W.cost)})}return Z}function eN($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let W=v2(Q.metrics?.inputTokens);return W>0?W:void 0}return}function $C($){if(!$||typeof $!=="object")return;let Z=$,Q=Z.skill??Z.skill_name??Z.skillName;if(typeof Q!=="string")return;let W=Q.trim();return W.length>0?W:void 0}function NW($){if(!$||typeof $!=="object")return{};let Z=$;return{agentId:typeof Z.agentId==="string"?Z.agentId:void 0,conversationId:typeof Z.conversationId==="string"?Z.conversationId:void 0,parentAgentId:typeof Z.parentAgentId==="string"?Z.parentAgentId:void 0}}function q1($){let Z=$.agentId?.trim();if(!Z)return;let Q=$.parentAgentId?.trim()||void 0,W=$.teamRole,J="root";if(W==="teammate")J="team_teammate";else if(W==="lead")J="team_lead";else if(Q)J="subagent";return{agentId:Z,agentKind:J,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Q,createdByAgentId:$.createdByAgentId?.trim()||Q||void 0,isSubagent:Boolean(Q),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:W,teamAgentId:$.teamAgentId?.trim()||void 0}}function ZC($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function QC($){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 CW($,Z,Q){let{sessionId:W,config:J,liveSession:X,emit:Y}=$,j=J.telemetry,V=X?.runtime.teamRuntime,B=Q?.isPrimaryAgentEvent??!0,H=NW(Z),G=q1({agentId:Q?.agentId??H.agentId,conversationId:Q?.conversationId??H.conversationId,parentAgentId:Q?.parentAgentId??H.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=$C(Z.input);if(K)WZ(j,{ulid:W,skillName:K,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:J.providerId,modelId:J.modelId,...G})}if(Z.type==="content_end"&&Z.contentType==="tool"){let K=Z.toolName??"unknown",F=!Z.error;if(Q8(j,{ulid:W,tool:K,autoApproved:void 0,success:F,modelId:J.modelId,provider:J.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))JZ(j,{ulid:W,modelId:J.modelId,provider:J.providerId,errorType:Z.error,...G})}if(Z.type==="notice"&&Z.reason==="api_error")u4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.message,...G});if(Z.type==="error")u4(j,{ulid:W,model:J.modelId,provider:J.providerId,errorMessage:Z.error?.message??"unknown error",...G});if(Z.type==="usage"&&X?.turnUsageBaseline){let K=ZC(Z);if(B){X.turnPrimaryUsage=f0(X.turnPrimaryUsage??_0(),K);let A=f0(X.turnUsageBaseline,X.turnPrimaryUsage);$.usageBySession.set(W,A),Z8(j,{ulid:W,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),ZZ(j,{ulid:W,tokensIn:Z.inputTokens,tokensOut:Z.outputTokens,cacheWriteTokens:Z.cacheWriteTokens,cacheReadTokens:Z.cacheReadTokens,totalCost:Z.cost,model:J.modelId,...G})}else{let A=QC({isPrimaryAgentEvent:B,overrides:Q,eventMetadata:H}),L=X.turnUsageByAgent??new Map;X.turnUsageByAgent=L,L.set(A,f0(L.get(A)??_0(),K))}let F=f0(X.turnPrimaryUsage??_0(),d5(X.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(W,f0(X.turnAggregateUsageBaseline??X.turnUsageBaseline,F))}if(Z.type==="iteration_end"&&B)$.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??(B?"lead":void 0):void 0}}),Y({type:"chunk",payload:{sessionId:W,stream:"agent",chunk:WB(Z),ts:Date.now()}})}function W$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as PC}from"@cline/shared";import{spawn as GC}from"node:child_process";import{appendFileSync as KC,readFileSync as FC}from"node:fs";import{join as AC}from"node:path";import{augmentNodeCommandForDebug as aH,withResolvedClineBuildEnv as hW}from"@cline/shared";import{ensureHookLogDir as iH}from"@cline/shared/storage";function p5($,Z){if(!Z)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:Z}}import{existsSync as WC,readdirSync as JC}from"node:fs";import{basename as XC,extname as YC,join as jC}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as rH,resolveHooksConfigSearchPaths as VC}from"@cline/shared/storage";function wW($){return VC($)}var r5;((H)=>{H.TaskStart="TaskStart";H.TaskResume="TaskResume";H.TaskCancel="TaskCancel";H.TaskComplete="TaskComplete";H.TaskError="TaskError";H.PreToolUse="PreToolUse";H.PostToolUse="PostToolUse";H.UserPromptSubmit="UserPromptSubmit";H.PreCompact="PreCompact";H.SessionShutdown="SessionShutdown"})(r5||={});var PW={["TaskStart"]:"agent_start",["TaskResume"]:"agent_resume",["TaskCancel"]:"agent_abort",["TaskComplete"]:"agent_end",["TaskError"]:"agent_error",["PreToolUse"]:"tool_call",["PostToolUse"]:"tool_result",["UserPromptSubmit"]:"prompt_submit",["PreCompact"]:void 0,["SessionShutdown"]:"session_shutdown"},BC=new Map(Object.values(r5).map(($)=>[$.toLowerCase(),$])),HC=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function SW($){let Z=YC($).toLowerCase();if(!HC.has(Z))return;let Q=XC($,Z).trim().toLowerCase();return BC.get(Q)}function c2($){let Z=[],Q=new Set,W=wW($).filter((J)=>WC(J));for(let J of W)try{for(let X of JC(J,{withFileTypes:!0})){if(!X.isFile())continue;let Y=SW(X.name);if(!Y)continue;let j=jC(J,X.name);if(Q.has(j))continue;Q.add(j),Z.push({fileName:Y,hookEventName:PW[Y],path:j})}}catch{}return Z.sort((J,X)=>J.path.localeCompare(X.path))}function n5($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))Z[Q]=typeof W==="string"?W:JSON.stringify(W);return Z}function i5($,Z,Q){let W=Q instanceof Error?`: ${Q.message}`:"",J=`${Z}${W}`;if($){try{$.log(J,{severity:"warn",...Q!==void 0?{error:Q}:{}})}catch{}return}console.warn(J)}function fC($,Z){if(!Z)return $;if(!$)return{...Z};let Q=[$.context,Z.context].filter((J)=>typeof J==="string"&&J.length>0).join(`
575
- `),W=[...$.appendMessages??[],...Z.appendMessages??[]];return{cancel:$.cancel===!0||Z.cancel===!0?!0:void 0,review:$.review===!0||Z.review===!0?!0:void 0,context:Q||void 0,overrideInput:Z.overrideInput!==void 0?Z.overrideInput:$.overrideInput,systemPrompt:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,appendMessages:W.length>0?W:void 0}}function UC($){if(!$||typeof $!=="object")return;let Z=$,Q=typeof Z.context==="string"?Z.context:typeof Z.contextModification==="string"?Z.contextModification:typeof Z.errorMessage==="string"?Z.errorMessage:void 0;return{cancel:typeof Z.cancel==="boolean"?Z.cancel:void 0,review:typeof Z.review==="boolean"?Z.review:void 0,context:Q,overrideInput:Object.hasOwn(Z,"overrideInput")?Z.overrideInput:void 0}}function bW($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function U0($,Z){let Q=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",W={rootSessionId:Z.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:W,workspaceRoots:Z.workspacePath?[Z.workspacePath]:[],workspaceInfo:Z.workspaceInfo,userId:Q,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function DC($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
576
- `).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse hook stdout JSON"}}}async function LC($,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",B),$.off("close",H)},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),B=()=>j(),H=()=>j();Q.on("error",V),Q.once("finish",B),$.once("close",H);try{Q.end(Z)}catch(G){j(G)}})}async function sH($,Z){if(Z.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await nH($,Z)}catch(Q){let W=TC(Z.command,process.platform,Q);if(!W)throw Q;return await nH($,{...Z,command:W})}}async function nH($,Z){let Q=aH(Z.command,{env:Z.env,debugRole:"hook"}),W=GC(Q[0],Q.slice(1),{cwd:Z.cwd,env:hW(Z.env),stdio:Z.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Z.detached,windowsHide:!0}),J=new Promise((K)=>{W.once("spawn",()=>K())}),X=new Promise((K,F)=>{W.once("error",(A)=>F(A))}),Y=JSON.stringify($);if(await Promise.race([J,X]),await LC(W,Y),Z.detached){W.unref();return}if(!W.stdout||!W.stderr)throw Error("hook command failed to create stdout/stderr");let j="",V="",B=!1,H;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)H=setTimeout(()=>{B=!0,W.kill("SIGKILL")},Z.timeoutMs);W.once("close",(F)=>{if(H)clearTimeout(H);let{parsedJson:A,parseError:L}=DC(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:B})})});return await Promise.race([G,X])}function _C($){try{let Q=FC($,"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 zC($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function TC($,Z=process.platform,Q){if(Z!=="win32"||!zC(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function oH($){if($.length===0)return;let[Z,...Q]=$,W=Z.replace(/\\/g,"/").toLowerCase(),J=W.split("/").at(-1)??W;if(J==="env")return oH(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 OC($){let Z=_C($);if(Z&&Z.length>0)return[...oH(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 aH(["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 qC($){let Z={};for(let Q of c2($)){if(!Q.hookEventName)continue;let W=Q.hookEventName,J=Z[W]??[];J.push(OC(Q.path)),Z[W]=J}return Z}async function MC($){let Z;for(let Q of $.commands){let W=Q.join(" ");try{let J=await sH($.payload,{command:Q,cwd:$.cwd,env:hW(process.env),detached:!1,timeoutMs:$.timeoutMs});if(J?.timedOut){i5($.logger,`hook command timed out: ${W}`);continue}if(J?.parseError){i5($.logger,`hook command returned invalid JSON control output: ${W} (${J.parseError})`);continue}Z=fC(Z,UC(J?.parsedJson))}catch(J){i5($.logger,`hook command failed: ${W}`,J)}}return Z}function l$($){for(let Z of $.commands){let Q=Z.join(" ");sH($.payload,{command:Z,cwd:$.cwd,env:hW(process.env),detached:!0}).catch((W)=>{i5($.logger,`hook command failed: ${Q}`,W)})}}function J$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function yW($,Z){return{...J$($.snapshot),userMessage:Z}}function tH($){return{...J$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function eH($){return{...J$($.snapshot),iteration:$.snapshot.iteration,record:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input,output:$.result.output,error:$.result.isError?String($.result.output):void 0,durationMs:$.durationMs,startedAt:$.startedAt,endedAt:$.endedAt}}}function $G($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function RC($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}function a5($){let Z={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(W)=>{let J=`${JSON.stringify({ts:new Date().toISOString(),...W})}
577
- `,Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??AC(iH(),"hooks.jsonl");iH(Y),KC(Y,J,"utf8")};return{beforeRun:async(W)=>{let J=yW(W,"");Q({...U0(J,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(W)=>{let J=tH(W);Q({...U0(J,Z),hookName:"tool_call",iteration:J.iteration,tool_call:{id:J.call.id,name:J.call.name,input:J.call.input},preToolUse:{toolName:J.call.name,parameters:n5(J.call.input)}});return},afterTool:async(W)=>{let J=eH(W);Q({...U0(J,Z),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:n5(J.record.input),result:typeof J.record.output==="string"?J.record.output:JSON.stringify(J.record.output),success:!J.record.error,executionTimeMs:J.record.durationMs}});return},afterRun:async({snapshot:W,result:J})=>{let X=J$(W);if(J.status==="completed"){Q({...U0(X,Z),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||bW(J.error?.message)){Q({...U0(X,Z),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Q({...U0(X,Z),hookName:"agent_error",iteration:J.iterations,error:{name:J.error.name,message:J.error.message,stack:J.error.stack}})},onEvent:async(W)=>{if(W.type!=="message-added"||W.message.role!=="user")return;let J=yW({snapshot:W.snapshot},$G(W.message.content));Q({...U0(J,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function kW($){let Z=qC($.workspacePath);if(!Object.values(Z).some((G)=>G.length>0))return;let W=async(G,K)=>{let F=Z[K]??[];if(F.length===0)return;l$({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{...U0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{...U0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let K=Z.prompt_submit??[];if(K.length>0)l$({commands:K,cwd:$.cwd,logger:$.logger,payload:{...U0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},X=async(G)=>{let K=Z.tool_call??[];if(K.length===0)return;return MC({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...U0(G,$),hookName:"tool_call",iteration:G.iteration,tool_call:{id:G.call.id,name:G.call.name,input:G.call.input},preToolUse:{toolName:G.call.name,parameters:n5(G.call.input)}}})},Y=async(G)=>{let K=Z.tool_result??[];if(K.length===0)return;l$({commands:K,cwd:$.cwd,logger:$.logger,payload:{...U0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:n5(G.record.input),result:typeof G.record.output==="string"?G.record.output:JSON.stringify(G.record.output),success:!G.record.error,executionTimeMs:G.record.durationMs}}})},j=async(G)=>{let K=Z.agent_end??[];if(K.length===0)return;l$({commands:K,cwd:$.cwd,logger:$.logger,payload:{...U0(G,$),hookName:"agent_end",iteration:G.iteration,turn:G.turn,taskComplete:{taskMetadata:{}}}})},V=async(G)=>{let K=Z.agent_error??[];if(K.length===0)return;l$({commands:K,cwd:$.cwd,logger:$.logger,payload:{...U0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},B=async(G)=>{if(bW(G.reason)){let F=Z.agent_abort??[];if(F.length>0)l$({commands:F,cwd:$.cwd,logger:$.logger,payload:{...U0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=Z.session_shutdown??[];if(K.length===0)return;l$({commands:K,cwd:$.cwd,logger:$.logger,payload:{...U0(G,$),hookName:"session_shutdown",reason:G.reason}})},H={};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)H.beforeRun=async(G)=>{let K=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await W(J$(G.snapshot),K);return};if((Z.prompt_submit?.length??0)>0)H.onEvent=async(G)=>{if(G.type!=="message-added"||G.message.role!=="user")return;await J(yW({snapshot:G.snapshot},$G(G.message.content)))}}if((Z.tool_call?.length??0)>0)H.beforeTool=async(G)=>{let K=await X(tH(G));return RC(K)};if((Z.tool_result?.length??0)>0)H.afterTool=async(G)=>{await Y(eH(G));return};if((Z.agent_end?.length??0)>0)H.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await j({...J$(G),iteration:K.iterations,turn:{outputText:K.outputText,status:K.status}})};if((Z.agent_error?.length??0)>0||(Z.agent_abort?.length??0)>0||(Z.session_shutdown?.length??0)>0){let G=H.afterRun;H.afterRun=async(K)=>{await G?.(K);let{snapshot:F,result:A}=K;if(A.status==="aborted"||bW(A.error?.message)){await B({...J$(F),reason:A.error?.message});return}if(A.error)await V({...J$(F),iteration:A.iterations,error:A.error})}}return H}function s5($){return p5("core.hook_config_files",kW($))}function p$($,Z){let Q=$.map((W)=>W[Z]).filter((W)=>typeof W==="function");if(Q.length===0)return;return async(W)=>{let J;for(let X of Q){let Y=await X(W);if(!Y||typeof Y!=="object")continue;let j=Y;J={...J??{},...j,stop:J?.stop===!0||j.stop===!0?!0:j.stop,options:J?.options||j.options?{...J?.options??{},...j.options??{}}:void 0}}return J}}function _4($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:p$(Z,"beforeRun"),afterRun:p$(Z,"afterRun"),beforeModel:p$(Z,"beforeModel"),afterModel:p$(Z,"afterModel"),beforeTool:p$(Z,"beforeTool"),afterTool:p$(Z,"afterTool"),onEvent:p$(Z,"onEvent")}}import{z as X$}from"zod";var z4=B2;var ZG=X$.object({settings:B2,updatedAt:X$.string().datetime(),tokenSource:X$.enum(["manual","oauth","migration"]).default("manual")}),o5=X$.object({version:X$.literal(1),lastUsedProvider:X$.string().min(1).optional(),providers:X$.record(X$.string(),ZG)});function u2(){return{version:1,providers:{}}}r0();import{upsertWorkspaceInfo as EC,WorkspaceManifestSchema as IW}from"@cline/shared";class t5{manifest;listeners=new Set;constructor($){this.manifest=IW.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await U5($);return this.manifest=EC(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=b$($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=IW.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let W=await this.addWorkspacePath(Z);return this.manifest=IW.parse({...this.manifest,currentWorkspacePath:W.rootPath}),this.emit({type:"workspace_switched",workspace:W}),W}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=b$($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}G0();import{createHash as NC}from"node:crypto";var QG=new Set,WG=new Set;function CC($){return NC("sha256").update($).digest("hex")}function wC($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function JG($){if(!$.telemetry)return;let Z=CC($.rootPath),Q=$.rootCount??1;if(!QG.has(Z))QG.add(Z),o9($.telemetry,{root_count:Q,vcs_types:wC($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!WG.has(Z)){WG.add(Z);let W=Error($.initError.message);W.name=$.initError.errorType||"Error",t9($.telemetry,W,{fallback_to_single_root:!0,workspace_count:Q})}}function SC($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function bC($,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(SC).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 yC($,Z){let Q=typeof $.thinking==="boolean",W=typeof $.reasoningEffort==="string";if(!Q&&!W)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...W?{effort:$.reasoningEffort}:{}}}function XG($,Z){return PC($,Z)}function hC($){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 kC($){let Z={...$.storedHeaders??{},...$.configHeaders??{}},Q=$.accountId?.trim()||IC($.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 IC($){let Z=$?.trim();if(!Z)return;let Q=z0(Z),W=Q?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let J=Q?.organizations?.[0]?.id;if(typeof J==="string"&&J.length>0)return J;let X=Q?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;return}function xC($,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"?kC({sessionId:Z,configHeaders:$.headers,storedHeaders:X?.headers,accountId:X?.auth?.accountId,accessToken:$.apiKey??X?.auth?.accessToken??X?.apiKey}):$.headers??X?.headers,reasoning:yC($,X?.reasoning),modelCatalog:Y},B={...H1(V),...j??{}};if($.knownModels)B.knownModels=$.knownModels;if($.extensionContext)B.extensionContext=$.extensionContext;let G=$.fetch??B.fetch??J;if(G)B.fetch=G;return B}async function YG($){let{input:Z,sessionId:Q,providerSettingsManager:W,defaultTelemetry:J,defaultCapabilities:X,defaultToolPolicies:Y,defaultFetch:j,onPluginEvent:V,onTeamEvent:B,createSubAgentLifecycleCallbacks:H,createSpawnTool:G,localRuntime:K,readSessionMetadata:F,writeSessionMetadata:A}=$,L=W$(Z.config),{modelCatalogDefaults:f,userInstructionService:D,configExtensions:U,onTeamRestored:T,...q}=K??{},z=Object.keys(q).length>0?q:void 0,{workspaceInfo:_,workspaceMetadata:M,durationMs:E,vcsType:P,initError:c}=await mV(L),n=z?.extensionContext,a={...n??{},workspace:{..._,...n?.workspace??{}},session:{...n?.session??{},sessionId:Q},logger:n?.logger??z?.logger,telemetry:n?.telemetry??z?.telemetry??J};JG({telemetry:a.telemetry,rootPath:_.rootPath,workspaceInfo:_,rootCount:1,vcsType:P,durationMs:E,initError:c,featureFlagEnabled:!0});let t=s5({cwd:Z.config.cwd,workspacePath:L,rootSessionId:Q,logger:z?.logger,workspaceInfo:_}),p0=QB(z?.hooks)?void 0:a5({rootSessionId:Q,workspacePath:L,workspaceInfo:_}),K$=_4([z?.hooks,p0]),d;if(XG(U,"plugins"))try{d=await L6({pluginPaths:z?.pluginPaths,workspacePath:L,cwd:Z.config.cwd,onEvent:V,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:_,session:a.session,client:a.client,user:a.user,logger:a.logger,telemetry:a.telemetry,automation:a.automation}),bC(d.failures,d.warnings,z?.logger)}catch(W2){let r9=W2 instanceof Error?W2.message:String(W2);z?.logger?.log?.(`plugin loading failed; continuing without plugins (${r9})`)}let N=b7(t?[t]:void 0,b7(z?.extensions,dZ(d?.extensions))),X0=XG(U,"plugins")?T$(d?.pluginPaths??[]):void 0,Y0={...Z.config,...z??{},sessionId:Q,hooks:K$,extensions:N,extensionContext:a,telemetry:a.telemetry},R0=xC(Y0,Q,W,f,j),Z2=_4([Y0.hooks,Y0.checkpoint?.enabled===!0?eB({cwd:Y0.cwd,sessionId:Q,logger:Y0.logger,createCheckpoint:Y0.checkpoint?.createCheckpoint,initialRunCount:hC(Z.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),Y1={...Y0,providerConfig:R0,workspaceMetadata:M,hooks:Z2},t0=Z.toolPolicies??Y0.toolPolicies??Y,$8=O0(X,Z.capabilities),Q2=$8?.requestToolApproval,I4=$8?.toolExecutors,j1=H?.(Y1),x4=new t5({currentWorkspacePath:_.rootPath,workspaces:{[_.rootPath]:_}});return{effectiveInput:Z,config:Y1,providerConfig:R0,workspaceMetadata:M,workspaceInfo:_,extensions:N,hooks:Z2,toolPolicies:t0,requestToolApproval:Q2,pluginSandboxShutdown:d?.shutdown,runtimeBuilderInput:{config:Y1,hooks:Z2,extensions:N,onTeamEvent:B,createSpawnTool:G,onTeamRestored:T,onSubAgentEvent:j1?.onSubAgentEvent,onSubAgentStart:j1?.onSubAgentStart,onSubAgentEnd:j1?.onSubAgentEnd,userInstructionService:D,pluginSkillDirectories:X0,configExtensions:U,toolExecutors:I4,toolPolicies:t0,workspaceManager:x4,logger:Y1.logger,telemetry:Y1.telemetry,requestToolApproval:Q2}}}import{resolveDocumentsExtensionPath as gC}from"@cline/shared/storage";G0();function jG($,Z,Q,W,J){if(Q)$Z($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});else e9($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});mC($.telemetry,{workspacePath:W})}function mC($,Z){let Q=gC("Hooks"),W=c2(Z.workspacePath),J=new Map;for(let X of W){let Y=X.hookEventName??"unknown",j=J.get(Y)??{global:0,workspace:0};if(X.path===Q||X.path.startsWith(`${Q}/`))j.global+=1;else j.workspace+=1;J.set(Y,j)}for(let[X,Y]of J.entries())BZ($,X,Y.global,Y.workspace)}function VG($,Z){for(let Q of Z.mentions)jZ($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)XZ($,"file",Q.length);for(let Q of Z.ignoredMentions)YZ($,"file","not_found",Q)}import{chmodSync as EG,existsSync as uW,mkdirSync as _w,readFileSync as zw,writeFileSync as Tw}from"node:fs";import{basename as NG,dirname as dW}from"node:path";import{resolveProviderSettingsPath as Ow}from"@cline/shared/storage";import{existsSync as vC,mkdirSync as cC,readFileSync as uC,writeFileSync as dC}from"node:fs";import{mkdir as lC,readFile as pC,writeFile as rC}from"node:fs/promises";import{dirname as xW,join as iC}from"node:path";import*as C0 from"@cline/llms";import{ModelCapabilitySchema as nC,ProviderCapabilitySchema as aC,ProviderClientSchema as sC,ProviderProtocolSchema as oC}from"@cline/shared";import{z as p}from"zod";var tC=p.object({id:p.string().optional(),name:p.string().optional(),maxTokens:p.number().optional(),contextWindow:p.number().optional(),maxInputTokens:p.number().optional(),capabilities:p.array(nC).optional(),supportsVision:p.boolean().optional(),supportsAttachments:p.boolean().optional(),supportsReasoning:p.boolean().optional()}).passthrough(),eC=p.object({name:p.string(),baseUrl:p.string(),defaultModelId:p.string().optional(),protocol:oC.optional(),client:sC.optional(),capabilities:p.array(aC).optional(),modelsSourceUrl:p.string().optional()}).passthrough(),BG=p.object({provider:eC.optional(),models:p.record(p.string(),tC).optional()}).passthrough(),HG=p.object({version:p.literal(1),providers:p.record(p.string(),BG)}),$w=p.object({version:p.literal(1),providers:p.record(p.string(),p.unknown())}),e5=new Set;function GG($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function r$($){return iC(xW($.getFilePath()),"models.json")}function $9(){return{version:1,providers:{}}}function KG($){let Z=$w.safeParse($);if(!Z.success)return $9();let Q={};for(let[W,J]of Object.entries(Z.data.providers)){let X=BG.safeParse(J);if(X.success)Q[W]=X.data}return{version:1,providers:Q}}function gW($){if(!vC($))return $9();try{let Z=uC($,"utf8");return KG(JSON.parse(Z))}catch{}return $9()}async function d2($){try{let Z=await pC($,"utf8");return KG(JSON.parse(Z))}catch{}return $9()}function FG($,Z){cC(xW($),{recursive:!0});let Q=HG.parse(Z);dC($,`${JSON.stringify(Q,null,2)}
578
- `,"utf8")}async function Z9($,Z){await lC(xW($),{recursive:!0});let Q=HG.parse(Z);await rC($,`${JSON.stringify(Q,null,2)}
579
- `,"utf8")}function AG($,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 fG($){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 UG($){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 Zw($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function DG($,Z){return $??Z??"openai-chat"}function LG($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function _G($,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 Qw($,Z){for(let[Q,W]of Object.entries(Z??{})){let J=W.id?.trim()||Q.trim();if(!J)continue;C0.registerModel($,J,_G(J,W))}}function Ww($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function Jw($){return Object.assign({},...C0.resolveProviderModelCatalogKeys($).map((Q)=>C0.getGeneratedModelsForProvider(Q)))}function Xw($){let Z=$.provider.trim();if(!Z||C0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let W=C0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],J=Jw(Z),X=UG($.capabilities),Y=X.length>0?X:void 0,j=$.model?.trim(),V={...J,...W?.models??{}};if(j)V[j]=Ww(j,V[j],Y);let B=Object.keys(V).filter(Boolean),H=j||B[0];if(!H)return;let G=DG($.protocol,W?.provider.protocol),K=LG($.client,G,W?.provider.client);C0.registerProvider({provider:{id:Z,name:W?.provider.name??GG(Z),description:W?.provider.description,protocol:G,client:K,baseUrl:Q,modelsSourceUrl:W?.provider.modelsSourceUrl,defaultModelId:H,capabilities:fG($.capabilities)??W?.provider.capabilities,source:"file"},models:V})}function Q9($){for(let Z of Object.values($.providers))Xw(Z.settings)}function T4($,Z){let Q=Z.models??{};if(!Zw(Z.provider)){Qw($,Q);return}let W=UG(Z.provider.capabilities),J=Object.entries(Q).map(([B,H])=>({id:H.id?.trim()||B.trim(),model:H})).filter(({id:B})=>B.length>0),X=Z.provider.defaultModelId?.trim()||J[0]?.id||"default",Y=DG(Z.provider.protocol,void 0),j=LG(Z.provider.client,Y,void 0),V=Object.fromEntries(J.map(({id:B,model:H})=>[B,{..._G(B,H,W.length>0?W:void 0),status:"active"}]));C0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||GG($),protocol:Y,client:j,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:X,capabilities:fG(Z.provider.capabilities),source:"file"},models:V})}function zG($){let Z=r$($);if(e5.has(Z))return;let Q=gW(Z);for(let[W,J]of Object.entries(Q.providers))T4(W,J);e5.add(Z)}async function TG($){let Z=r$($);if(e5.has(Z))return;let Q=await d2(Z);for(let[W,J]of Object.entries(Q.providers))T4(W,J);e5.add(Z)}import{existsSync as Yw,readFileSync as jw}from"node:fs";import{dirname as Vw,join as mW}from"node:path";import*as l2 from"@cline/llms";import{resolveClineDataDir as Bw}from"@cline/shared/storage";var W9="openai",MG=l2.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,OG=128000;function RG($){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 w($){let Z=$?.trim();return Z?Z:void 0}function Hw($){return $==="credentials"?"iam":$}function qG($){if(!Yw($))return;try{let Z=jw($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function Gw($){let Z=$.dataDir??Bw(),Q=$.globalStatePath??mW(Z,"globalState.json"),W=$.secretsPath??mW(Z,"secrets.json"),J=qG(Q),X=qG(W);if(!J&&!X)return;return{globalState:J??{},secrets:X??{}}}function vW($){if($===W9)return MG;return $}function Kw($,Z,Q,W){let J=Q==="plan"?"planMode":"actMode",X=Z===W?w(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?w(typeof $[j]==="string"?$[j]:void 0):void 0)??X}function Fw($,Z,Q){let W=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,J=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(w).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 Aw($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),W=w(Q.access_token),J=w(Q.refresh_token),X=w(Q.accountId);if(!W&&!J&&!X)return;return{...W?{apiKey:W}:{},auth:{...W?{accessToken:W}:{},...J?{refreshToken:J}:{},...X?{accountId:X}:{}}}}catch{return}}function fw($){let Z=l2.getGeneratedModelsForProvider($),W=l2.getProviderCollectionSync($)?.provider.defaultModelId;if(W&&Z[W])return W;return Object.keys(Z)[0]??void 0}function Uw($,Z,Q,W){let J=vW($),X=w(W==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),Y=Kw(Z,$,W,X)??fw(J),j=Fw(Z,J,W),V=typeof Z.requestTimeoutMs==="number"&&Number.isInteger(Z.requestTimeoutMs)&&Z.requestTimeoutMs>0?Z.requestTimeoutMs:void 0,B={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},H={};if($==="openai-codex")Object.assign(H,Aw(Q));if($==="cline")try{let D=w(Q["cline:clineAccountId"]);if(D)H.auth={...H.auth??{},...RG(D)}}catch{}if($===W9&&Z.openAiHeaders)H.headers=Z.openAiHeaders;if($==="bedrock"){let D=Hw(Z.awsAuthentication),U=D==="profile"||Z.awsUseProfile===!0;H.aws={accessKey:w(Q.awsAccessKey),secretKey:w(Q.awsSecretKey),sessionToken:w(Q.awsSessionToken),region:w(Z.awsRegion),authentication:D,profile:U?w(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:w(Z.awsBedrockEndpoint),customModelBaseId:w(W==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")H.gcp={projectId:w(Z.vertexProjectId),region:w(Z.vertexRegion)};if($===W9&&(Z.azureApiVersion||Z.azureIdentity!==void 0))H.azure={apiVersion:w(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let D=Z.sapAiCoreUseOrchestrationMode??!0;H.sap={clientId:w(Q.sapAiCoreClientId),clientSecret:w(Q.sapAiCoreClientSecret),tokenUrl:w(Z.sapAiCoreTokenUrl),resourceGroup:w(Z.sapAiResourceGroup),deploymentId:D?void 0:w(W==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:D}}if($==="oca"){H.oca={mode:Z.ocaMode};let D=w(Q.ocaRefreshToken);if(D)H.auth={...H.auth??{},refreshToken:D}}if($==="qwen")H.apiLine=Z.qwenApiLine;if($==="moonshot")H.apiLine=Z.moonshotApiLine;if($==="zai")H.apiLine=Z.zaiApiLine;if($==="minimax")H.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=w(B[$]),F=w(G[$]),A={provider:J,...K?{apiKey:K}:{},...Y?{model:Y}:{},...F?{baseUrl:F}:{},...j?{reasoning:j}:{},...V?{timeout:V}:{},...H},L=z4.safeParse(A);if(!L.success)return;return Object.keys(A).filter((D)=>D!=="provider").length>0?L.data:void 0}function Dw($,Z){if($!==MG)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:OG,maxInputTokens:OG,capabilities:["streaming","tools","images"]}}}}function Lw($,Z){let Q=new Set;for(let J of[$.actModeApiProvider,$.planModeApiProvider]){let X=w(J);if(X)Q.add(X)}if(w(Z.apiKey))Q.add("anthropic");if(w(Z.openRouterApiKey))Q.add("openrouter");if(w(Z.openAiApiKey))Q.add(W9);if(w(Z.openAiNativeApiKey))Q.add("openai-native");if(w(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(w(Z.geminiApiKey))Q.add("gemini");if(w(Z.ollamaApiKey))Q.add("ollama");if(w(Z.awsAccessKey)||w(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||w($.awsProfile))Q.add("bedrock");if(w($.vertexProjectId)||w($.vertexRegion))Q.add("vertex");if(w(Z.clineApiKey))Q.add("cline");let W=RG(w(Z["cline:clineAccountId"]));if(W?.accessToken||W?.refreshToken||W?.accountId)Q.add("cline");if(w(Z.ocaApiKey))Q.add("oca");if(w(Z.sapAiCoreClientId)||w(Z.sapAiCoreClientSecret)||w($.sapAiCoreTokenUrl)||w($.sapAiCoreBaseUrl)||w($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function cW($){let Z=$.providerSettingsManager.read(),Q=Gw($);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=Lw(W,J),j=u2();j.providers={...Z.providers},j.lastUsedProvider=Z.lastUsedProvider;let V=new Date().toISOString(),B=0,H=mW(Vw($.providerSettingsManager.getFilePath()),"models.json"),G=gW(H),K=0;for(let L of Y){let f=vW(L);if(j.providers[f])continue;let D=Uw(L,W,J,X);if(!D)continue;j.providers[f]={settings:D,updatedAt:V,tokenSource:"migration"},B+=1;let U=Dw(f,D);if(U&&!G.providers[f])G.providers[f]=U,K+=1}if(B===0&&K===0)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let F=w(X==="plan"?W.planModeApiProvider:W.actModeApiProvider),A=F?vW(F):void 0;if(j.lastUsedProvider=Z.lastUsedProvider??(A&&j.providers[A]?A:Object.keys(j.providers)[0]),$.providerSettingsManager.write(j),K>0)FG(H,G);return{migrated:B>0||K>0,providerCount:Object.keys(j.providers).length,lastUsedProvider:j.lastUsedProvider}}function qw(){return new Date().toISOString()}var Mw="cline",Rw="cline-pass";function Ew($){if(NG($)!=="providers.json")return;let Z=dW($);if(NG(Z)!=="settings")return;return dW(Z)}class Y${filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??Ow(),this.dataDir=$.dataDir??Ew(this.filePath),this.dataDir||!$.filePath)cW({providerSettingsManager:this,dataDir:this.dataDir});if(zG(this),Q9(this.read()),uW(this.filePath))try{EG(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!uW(this.filePath))return u2();try{let $=zw(this.filePath,"utf8"),Z=JSON.parse($),Q=o5.safeParse(Z);if(Q.success)return Q9(Q.data),Q.data}catch{}return u2()}write($){let Z=o5.parse($),Q=dW(this.filePath);if(!uW(Q))_w(Q,{recursive:!0,mode:448});Tw(this.filePath,`${JSON.stringify(Z,null,2)}
580
- `,"utf8");try{EG(this.filePath,384)}catch{}Q9(Z)}saveProviderSettings($,Z={}){let Q=z4.parse($),W=this.read(),J=Q.provider,X=Z.setLastUsed!==!1,Y=W.providers[J],j=Z.tokenSource??Y?.tokenSource??"manual",V={...W,providers:{...W.providers,[J]:{settings:Q,updatedAt:qw(),tokenSource:j}},lastUsedProvider:X?J:W.lastUsedProvider};return this.write(V),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,J=H0(Z)?.storageProviderId;if(!J||J===Z)return Q;let X=$.providers[J]?.settings;if(!X)return Q;return z4.parse({...X.auth?{auth:X.auth}:{},...X.apiKey?{apiKey:X.apiKey}:{},...X.baseUrl?{baseUrl:X.baseUrl}:{},...Q??{},provider:Z})}getProviderSettings($){let Z=this.read();return this.resolveProviderSettings(Z,$)}resolveLastUsedProviderId($,Z){let Q=$.lastUsedProvider;if(Q===Rw&&Z.isClinePassEnabled===!1)return Mw;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 H1(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return H1(Z,$)}async refreshCatalog(){try{await J6({})}catch{}}}G0();g2();import{execFile as Nw}from"node:child_process";import{promisify as Cw}from"node:util";var p2=Cw(Nw);function O4($){let Z=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(Z?.history)?Z.history:[]).filter((W)=>!!W&&typeof W==="object"&&!Array.isArray(W)).flatMap((W)=>{let J=String(W.ref??"").trim(),X=Number(W.createdAt??0),Y=Number(W.runCount??0);if(J.length===0||!Number.isFinite(X)||!Number.isInteger(Y)||Y<1)return[];let j=W.kind==="stash"||W.kind==="commit"?W.kind:void 0;return[{ref:J,createdAt:X,runCount:Y,...j?{kind:j}:{}}]})}function CG($,Z){let Q=O4($).filter((J)=>J.runCount<=Z),W=Q.at(-1);return W?{latest:W,history:Q}:void 0}function J9($,Z){return $.reduce((Q,W)=>{if(W.runCount>Z)return Q;if(!Q||W.runCount>Q.runCount)return W;return Q},void 0)}function wG($,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 ww($,Z){let Q=wG($,Z);return $.slice(0,Q+1)}function PG($,Z){let Q=wG($,Z);return $.slice(0,Q)}function SG($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=J9(O4($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:W,...$.restoreMessages!==!1?{messages:ww($.messages??[],Z)}:{}}}async function bG($,Z){if((await p2("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await p2("git",["-C",$,"cat-file","-e",`${Z.ref}^{commit}`],{windowsHide:!0}),await p2("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await p2("git",["-C",$,"clean","-fd"],{windowsHide:!0}),Z.kind==="commit"){await p2("git",["-C",$,"reset","--hard",Z.ref],{windowsHide:!0});return}await p2("git",["-C",$,"stash","apply",Z.ref],{windowsHide:!0})}class s0 extends Error{code;constructor($,Z){super(Z);this.code=$;this.name="SessionVersioningError"}}function Pw($){let Z=$.sessionId.trim();if(!Z)throw new s0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new s0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new s0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new s0("invalid_restore","checkpointRunCount must be a positive integer");return Z}class r2{async restoreCheckpoint($){let Z=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,W=Pw({sessionId:$.sessionId,restoreMessages:Z,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(W);if(!J)throw new s0("session_not_found",`Session ${W} not found`);let X=Z?await $.readMessages(W):void 0;if(Z&&X?.length===0)throw new s0("session_messages_not_found",`No messages found for session ${W}`);let Y=SG({session:J,messages:X,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:Z});if(Q)await($.applyWorkspaceCheckpoint??bG)(Y.cwd,Y.checkpoint);let j=t1({session:J,messages:X});if(!Z)return{checkpoint:Y.checkpoint,sourceSnapshot:j};let V=CG(J,$.checkpointRunCount),B=$.restore?.omitCheckpointMessageFromSession?PG(X??[],$.checkpointRunCount):Y.messages??[],H={sourceSession:J,sourceMessages:X,sourceSnapshot:j,plan:Y,restoredCheckpointMetadata:V,initialMessages:B,restoreMessages:Z,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new s0("invalid_restore","start is required when restore.messages is true");let G=$.buildStartInput?await $.buildStartInput(H,$.start):$.start,K=await $.startSession(G),F=$.getStartedSessionId?.(K);if(F)await($.retainCheckpointRefs??tB)(Y.cwd,F,V?.history??[]);let A=F&&$.readRestoredSession?await $.readRestoredSession(F):void 0;return{sessionId:F,startResult:K,messages:Y.messages,checkpoint:Y.checkpoint,sourceSnapshot:j,...A?{restoredSnapshot:t1({session:A,messages:B})}:{}}}}import{hasRuntimeConfigExtension as lw}from"@cline/shared";import{nanoid as pw}from"nanoid";r0();import{appendFileSync as Sw,existsSync as i2,mkdirSync as yG,readdirSync as bw,readFileSync as hG,renameSync as yw,writeFileSync as hw}from"node:fs";import{join as lW}from"node:path";import{resolveTeamDataDir as kw}from"@cline/shared/storage";function kG(){return new Date().toISOString()}function pW($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function IG($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class X9{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??kw()}init(){this.ensureTeamDir()}listTeamNames(){if(!i2(this.teamDirPath))return[];return bw(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>i2(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let Z=this.readEnvelope($);return Z?.teamState?IG(Z.teamState):void 0}readHistory($,Z=200){let Q=this.historyPath($);if(!i2(Q))return[];return hG(Q,"utf8").split(`
581
- `).map((W)=>W.trim()).filter(Boolean).map((W)=>{try{return JSON.parse(W)}catch{return}}).filter((W)=>W!==void 0).reverse().slice(0,Z)}loadRuntime($){let Z=this.readEnvelope($);return{state:Z?.teamState?IG(Z.teamState):void 0,teammates:Z?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,Z){this.ensureTeamSubdir($),Sw(this.historyPath($),`${JSON.stringify({ts:kG(),eventType:Z.type,payload:Z})}
582
- `,"utf8")}persistRuntime($,Z,Q){this.ensureTeamSubdir($);let W={version:1,updatedAt:kG(),teamState:Z,teammates:Q},J=this.statePath($),X=`${J}.tmp`;hw(X,`${JSON.stringify(W,null,2)}
583
- `,"utf8"),yw(X,J)}markInProgressRunsInterrupted($,Z){let Q=this.readEnvelope($);if(!Q?.teamState?.runs?.length)return[];let W=Q.teamState.runs.filter((X)=>X.status==="queued"||X.status==="running").map((X)=>X.id);if(W.length===0)return[];let J=new Date;return Q.teamState={...Q.teamState,runs:Q.teamState.runs.map((X)=>X.status==="queued"||X.status==="running"?{...X,status:"interrupted",error:Z,endedAt:J}:X)},this.persistRuntime($,Q.teamState,Q.teammates),W}ensureTeamDir(){if(!i2(this.teamDirPath))yG(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let Z=lW(this.ensureTeamDir(),pW($));if(!i2(Z))yG(Z,{recursive:!0});return Z}statePath($){return lW(this.ensureTeamDir(),pW($),"state.json")}historyPath($){return lW(this.ensureTeamDir(),pW($),"task-history.jsonl")}readEnvelope($){let Z=this.statePath($);if(!i2(Z))return;try{let Q=JSON.parse(hG(Z,"utf8"));if(Q?.version===1&&Q.teamState)return Q}catch{}return}}import{existsSync as Iw,mkdirSync as xw}from"node:fs";import{join as gw}from"node:path";import{safeJsonParse as xG}from"@cline/shared";import{loadSqliteDb as mw,nowIso as rW}from"@cline/shared/db";import{resolveDbDataDir as vw}from"@cline/shared/storage";function cw(){return vw()}function n2($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function uw($){let Z=xG($);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 dw($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class q4{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??cw()}init(){this.getRawDb()}ensureTeamDir(){if(!Iw(this.teamDirPath))xw(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return gw(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=mw(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
575
+ `)}function QG($){let Z=$.summarizer,Q=(W)=>{if(W.providerId==="openai-codex"){let{maxOutputTokens:X,...Y}=W;return{...Y,thinking:!1}}return{...W,maxOutputTokens:W.maxOutputTokens??mH,thinking:!1}};if(!Z)return Q($.activeProviderConfig);let J=Z.providerConfig?.providerId===Z.providerId?Z.providerConfig:void 0;return Q({...J??{},providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey??J?.apiKey,baseUrl:Z.baseUrl??J?.baseUrl,headers:Z.headers??J?.headers,knownModels:Z.knownModels??J?.knownModels,maxOutputTokens:Z.maxOutputTokens??mH})}function JG($){return{role:"user",content:`Context summary:
576
+
577
+ ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}async function Uw($){let Z=await fw($.providerConfig),Q="";for await(let J of Z.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(J.type==="text"){Q+=J.text;continue}if(J.type==="done"&&!J.success&&J.error)throw Error(J.error)}return $.logger?.debug("Generated compaction summary",{outputChars:Q.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),Q.trim()}function Dw($){try{return JSON.stringify($).length}catch{return String($).length}}async function WG($){let Z=$.context.messages;if(Z.length<2)return;let Q=tH(Z,$.preserveRecentTokens,$.estimateMessageTokens);if(Q<=0||Q>=Z.length)return;let J=Z.slice(0,Q),W=sH(J),X=W>=0?y3(J[W])?.summary:void 0,Y=W>=0?J.slice(W+1):J;if(Y.length===0)return;let j=eH(J),V=iH(Y),B=ZG({previousSummary:X,conversationText:V,fileOps:j});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:J.length,newMessagesToFold:Y.length,preservedMessages:Z.length-Q,previousSummaryChars:X?.length??0,conversationTextChars:V.length,summaryRequestChars:B.length,summaryRequestEstimatedTokens:P3(B.length),newMessagesJsonChars:Dw(Y),maxInputTokens:$.context.maxInputTokens,triggerTokens:$.context.triggerTokens});let H=await Uw({providerConfig:QG({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),request:B,logger:$.logger});if(!H.trim())return;let G=$G(H,j),K=Z.reduce((D,U)=>D+$.estimateMessageTokens(U),0),F=[JG({summary:G,fileOps:j,tokensBefore:K}),...Z.slice(Q)],A=F.reduce((D,U)=>D+$.estimateMessageTokens(U),0);return $.logger?.debug("Performed agentic compaction",{messagesBefore:Z.length,messagesAfter:F.length,messagesSummarized:Q,messagesPreserved:Z.length-Q,tokensBefore:K,tokensAfter:A,maxInputTokens:$.context.maxInputTokens}),{messages:F}}import{CHARS_PER_TOKEN as Lw}from"@cline/shared";function _w($){if(M4($))return;if(typeof $.content==="string"){let Q=$.content.trim();return Q?{...$,content:Q}:void 0}let Z=$.content.filter((Q)=>Q.type!=="text"||Q.text.trim());if(Z.length===0)return;return{...$,content:Z.map((Q)=>Q.type==="text"?{...Q,text:Q.text.trim()}:Q.type==="tool_result"?{...Q,content:b3(Q.content)}:Q)}}function Tw($,Z){return $.reduce((Q,J)=>Q+Z(J),0)}function XG($,Z){if($.length<=Z)return $;let Q=`
578
+ ...`,J=Math.max(1,Z-Q.length);return`${$.slice(0,J)}${Q}`}function YG($,Z){let Q=Number.isFinite(Z)?Math.max(1,Z):1,J=Math.max(16,Q*Lw);if(typeof $.content==="string"){let Y=XG($.content,J).trim();return{...$,content:Y||"..."}}let W=J,X=$.content.map((Y)=>{if(Y.type!=="text"||W<=0)return Y;let j=XG(Y.text,W).trim();return W-=j.length,{...Y,text:j||"..."}});return{...$,content:X}}function Ow($,Z){let Q=aH($),J=n5($),W=oH($),X=[],Y=0;for(let j=0;j<$.length;j+=1){let V=_w($[j]);if(!V)continue;let B=Z(V);Y+=B,X.push({index:j,message:V,estimatedTokens:B,toolPairIds:VG(V),isFirstUser:j===Q,isLastUser:j===J,isLastAssistant:j===W})}return{candidates:X,totalTokens:Y}}function jG($,Z,Q,J){let W=$[Z],X=W.estimatedTokens;return W.message=Q,W.estimatedTokens=J(Q),W.toolPairIds=VG(Q),W.estimatedTokens-X}function VG($){if(!Array.isArray($.content))return[];let Z=[];for(let Q of $.content)if(Q.type==="tool_use")Z.push(Q.id);else if(Q.type==="tool_result")Z.push(Q.tool_use_id);return Z}function qw($){let Z=new Map;for(let Q of $)for(let J of Q.toolPairIds){let W=Z.get(J);if(W)W.add(Q);else Z.set(J,new Set([Q]))}return Z}function zw($,Z,Q){let J=new Set,W=[Q],X=0;while(X<W.length){let Y=W[X];if(X+=1,Y===void 0||!$.has(Y)||J.has(Y))continue;J.add(Y);for(let j of Y.toolPairIds)for(let V of Z.get(j)??[])if(!J.has(V))W.push(V)}return J}function Mw($,Z){let Q=0;for(let J of $){if(Z.has(J))continue;$[Q]=J,Q+=1}$.length=Q}function a5($,Z,Q,J){let W=new Set($),X=qw($);for(let Y=0;Y<$.length&&J>Q;){if(!Z($[Y])){Y+=1;continue}let j=zw(W,X,$[Y]);if(j.size===0){Y+=1;continue}let V=0;for(let B of j)V+=B.estimatedTokens,W.delete(B);J-=V,Mw($,j)}return J}function Rw($,Z,Q,J,W){if(Q<=Z)return Q;for(let Y=$.length-1;Y>=0&&Q>Z;Y-=1){let j=$[Y];if(j.isFirstUser)continue;let V=Math.max(pH,j.estimatedTokens-(Q-Z));if(V>=j.estimatedTokens)continue;Q+=jG($,Y,YG(j.message,V),W)}if(Q<=Z)return Q;let X=$.findIndex((Y)=>Y.isFirstUser);if(X>=0){if($[X].estimatedTokens<=J)return Q;while(Q>Z){let j=$[X],V=Math.max(1,j.estimatedTokens-(Q-Z));if(V>=j.estimatedTokens)break;let B=j.estimatedTokens;if(Q+=jG($,X,YG(j.message,V),W),j.estimatedTokens>=B)break}}return Q}function Nw($,Z){return JSON.stringify($)!==JSON.stringify(Z)}function Ew($){let Z=n5($);if(Z<0||Z===0&&!R4($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,Z),protectedTail:$.slice(Z)}}function BG($){let Z=Math.max(1,Math.min($.context.targetTokens??Math.floor($.context.triggerTokens*i5),$.context.maxInputTokens)),{compactable:Q,protectedTail:J}=Ew($.context.messages);if(Q.length===0)return;let W=Tw(J,$.estimateMessageTokens),X=Math.max(1,Z-W),Y=Ow(Q,$.estimateMessageTokens),{candidates:j}=Y;if(j.length===0)return;let V=Y.totalTokens,B=V;B=a5(j,(F)=>F.message.role==="assistant"&&!F.isLastAssistant,X,B),B=a5(j,(F)=>F.message.role==="user"&&!F.isFirstUser&&!F.isLastUser,X,B),B=a5(j,(F)=>F.message.role==="assistant"&&F.isLastAssistant,X,B),B=a5(j,(F)=>F.message.role==="user"&&F.isLastUser&&!F.isFirstUser,X,B),B=Rw(j,X,B,$.context.triggerTokens,$.estimateMessageTokens);let H=[...j.map((F)=>F.message),...J];if(!Nw($.context.messages,H))return;let G=V+W,K=B+W;return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:H.length,messagesRemoved:$.context.messages.length-H.length,tokensBefore:G,tokensAfter:K,targetTokens:Z,maxInputTokens:$.context.maxInputTokens}),{messages:H}}var ww=0.5,Cw=0.5;function HG($){try{return JSON.stringify($).length}catch{return String($).length}}function N4($){return typeof $==="number"&&Number.isFinite($)&&$>0}function Pw($){let Z=[];if(N4($.configMaxInputTokens))Z.push($.configMaxInputTokens);if(N4($.modelMaxInputTokens))Z.push($.modelMaxInputTokens);if(N4($.contextWindow)){Z.push($.contextWindow);let Q=N4($.modelMaxTokens)?$.contextWindow-$.modelMaxTokens:void 0;if(N4(Q)&&Q>=$.contextWindow*ww)Z.push(Q)}return Z.length>0?Math.min(...Z):cH}function Sw($){let Z=0,Q=0,J=0;for(let W of $){if(!Array.isArray(W.content))continue;for(let X of W.content){if(X.type!=="tool_result")continue;let Y=HG(X.content);Z+=1,Q+=Y,J=Math.max(J,Y)}}return{toolResultCount:Z,toolResultSerializedChars:Q,maxToolResultSerializedChars:J}}var bw={basic:({context:$,estimateMessageTokens:Z,logger:Q})=>BG({context:$,estimateMessageTokens:Z,logger:Q}),agentic:({context:$,providerConfig:Z,compaction:Q,mode:J,estimateMessageTokens:W,logger:X})=>WG({context:$,providerConfig:Z,summarizer:Q?.summarizer,preserveRecentTokens:J==="manual"?Math.min(Q?.preserveRecentTokens??S3,$.triggerTokens):Q?.preserveRecentTokens??S3,estimateMessageTokens:W,logger:X})};function yw($){if(typeof $.config.reserveTokens==="number"){let Q=Math.max(0,$.config.reserveTokens),J=Math.max(0,$.maxInputTokens-Q);return{shouldCompact:$.inputTokens>J,triggerTokens:J,thresholdRatio:$.maxInputTokens>0?J/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio==="number"){let Q=$.config.thresholdRatio,J=$.maxInputTokens*Q;return{shouldCompact:$.inputTokens>J,triggerTokens:J,thresholdRatio:Q}}let Z=Math.max(0,Math.min($.maxInputTokens-dH,$.maxInputTokens*uH));return{shouldCompact:$.inputTokens>Z,triggerTokens:Z,thresholdRatio:$.maxInputTokens>0?Z/$.maxInputTokens:0}}function hw($){let Z=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,Z)),J=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*Q)));return{triggerTokens:J,thresholdRatio:$.maxInputTokens>0?J/$.maxInputTokens:0}}function kw($){let Z=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*Cw):Math.floor($.triggerTokens*i5),Q=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(Z,$.maxInputTokens,Q))}function Iw($){let Z=0,Q=!1;for(let J of $)if(J.role==="user")Q=!0;else if(J.role==="assistant"&&Q)Z+=1,Q=!1;return Z}function h3($,Z={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let J=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},W=nH(),X=Q?.strategy??"basic",Y=bw[X],j=Z.mode??"auto",V=Q?.compact?"custom":X;return async(B)=>{let H=B.apiMessages.reduce((M,N)=>M+W(N),0),G=Pw({configMaxInputTokens:Q?.maxInputTokens,modelMaxInputTokens:B.model.info?.maxInputTokens,contextWindow:B.model.info?.contextWindow,modelMaxTokens:B.model.info?.maxTokens}),K=yw({inputTokens:H,maxInputTokens:G,config:{maxInputTokens:Q?.maxInputTokens,reserveTokens:Q?.reserveTokens,thresholdRatio:Q?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:j,strategy:X,iteration:B.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:H,maxInputTokens:G,triggerTokens:K.triggerTokens,thresholdRatio:K.thresholdRatio,shouldCompact:K.shouldCompact,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:HG(B.apiMessages),...Sw(B.apiMessages)}),j==="auto"&&!K.shouldCompact)return;let F=j==="manual"?hw({inputTokens:H,maxInputTokens:G,autoTriggerTokens:K.triggerTokens,manualTargetRatio:Z.manualTargetRatio}):K,A=j==="auto"?kw({maxInputTokens:G,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:F.triggerTokens,messagePairCount:Iw(B.messages)}):void 0,D={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId,iteration:B.iteration,messages:B.messages,model:B.model,maxInputTokens:G,triggerTokens:F.triggerTokens,targetTokens:A,thresholdRatio:F.thresholdRatio,utilizationRatio:G>0?H/G:0},U=j==="manual"?"manual_compaction":"auto_compaction";B.emitStatusNotice?.(j==="manual"?"compacting":"auto-compacting",{kind:U,reason:U,iteration:B.iteration,triggerTokens:F.triggerTokens,maxInputTokens:G});let L=B.messages.length,f=Date.now(),z=Q?.compact?await Q.compact(D):await Y({context:D,providerConfig:{...J,abortSignal:B.abortSignal},compaction:Q,mode:j,estimateMessageTokens:W,logger:$.logger}),O=Date.now()-f,T=$.sessionId??B.conversationId,_={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId??void 0};if(z?.messages){let M=z.messages.reduce((N,m)=>N+W(m),0);$.logger?.log("Context compaction completed",{severity:"info",strategy:X,maxInputTokens:G,inputTokens:H,afterTokens:M,tokensSaved:H-M,utilizationBefore:`${(H/G*100).toFixed(1)}%`,utilizationAfter:`${(M/G*100).toFixed(1)}%`,thresholdTrigger:`${(F.thresholdRatio*100).toFixed(1)}%`,messagesBefore:L,messagesAfter:z.messages.length,messagesRemoved:L-z.messages.length}),UZ($.telemetry,{ulid:T,strategy:V,mode:j,messagesBefore:L,messagesAfter:z.messages.length,messagesRemoved:L-z.messages.length,tokensBefore:H,tokensAfter:M,tokensSaved:H-M,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:O,provider:$.providerId,modelId:$.modelId,..._})}else DZ($.telemetry,{ulid:T,strategy:V,mode:j,reason:"no_result",tokensBefore:H,triggerTokens:F.triggerTokens,maxInputTokens:G,thresholdRatio:F.thresholdRatio,durationMs:O,provider:$.providerId,modelId:$.modelId,..._});return z}}function k3($){return async(Z)=>{let Q=$.getState?.(),J=Q?K4(Q,Z.messages):void 0;if(Q&&J){let X=$.compact?await $.compact({...Z,messages:J,apiMessages:J}):void 0;if(X?.messages){let Y=X.systemPrompt??Q.system_prompt,j=I5({sourceMessages:Z.messages,compactedMessages:X.messages,conversationId:Z.conversationId,systemPrompt:Y});return await $.saveState?.(j),{...X,...Y!==void 0?{systemPrompt:Y}:{}}}return{messages:J,...X?.systemPrompt!==void 0?{systemPrompt:X.systemPrompt}:Q.system_prompt!==void 0?{systemPrompt:Q.system_prompt}:{}}}let W=$.compact?await $.compact(Z):void 0;if(W?.messages){let X=I5({sourceMessages:Z.messages,compactedMessages:W.messages,conversationId:Z.conversationId,systemPrompt:W.systemPrompt});await $.saveState?.(X)}return W}}A0();function z0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function L0($,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 o5($){let Z=z0();for(let Q of $)Z=L0(Z,Q);return Z}function r2($){return typeof $==="number"&&Number.isFinite($)?$:0}function s5($){let Z=z0();for(let Q of $){let J=Q.metrics;if(!J)continue;Z=L0(Z,{inputTokens:r2(J.inputTokens),outputTokens:r2(J.outputTokens),cacheReadTokens:r2(J.cacheReadTokens),cacheWriteTokens:r2(J.cacheWriteTokens),totalCost:r2(J.cost)})}return Z}function xw($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let J=r2(Q.metrics?.inputTokens);return J>0?J:void 0}return}function gw($){if(!$||typeof $!=="object")return;let Z=$,Q=Z.skill??Z.skill_name??Z.skillName;if(typeof Q!=="string")return;let J=Q.trim();return J.length>0?J:void 0}function I3($){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 N1($){let Z=$.agentId?.trim();if(!Z)return;let Q=$.parentAgentId?.trim()||void 0,J=$.teamRole,W="root";if(J==="teammate")W="team_teammate";else if(J==="lead")W="team_lead";else if(Q)W="subagent";return{agentId:Z,agentKind:W,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:J,teamAgentId:$.teamAgentId?.trim()||void 0}}function mw($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function vw($){let Z=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of Z){let J=Q?.trim();if(J)return J}return $.isPrimaryAgentEvent?"root":"unknown"}function x3($,Z,Q){let{sessionId:J,config:W,liveSession:X,emit:Y}=$,j=W.telemetry,V=X?.runtime.teamRuntime,B=Q?.isPrimaryAgentEvent??!0,H=I3(Z),G=N1({agentId:Q?.agentId??H.agentId,conversationId:Q?.conversationId??H.conversationId,parentAgentId:Q?.parentAgentId??H.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=gw(Z.input);if(K)BZ(j,{ulid:J,skillName:K,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:W.providerId,modelId:W.modelId,...G})}if(Z.type==="content_end"&&Z.contentType==="tool"){let K=Z.toolName??"unknown",F=!Z.error;if(V8(j,{ulid:J,tool:K,autoApproved:void 0,success:F,modelId:W.modelId,provider:W.providerId,...G}),!F&&(K==="editor"||K==="apply_patch"))HZ(j,{ulid:J,modelId:W.modelId,provider:W.providerId,errorType:Z.error,...G})}if(Z.type==="notice"&&Z.reason==="api_error")a4(j,{ulid:J,model:W.modelId,provider:W.providerId,errorMessage:Z.message,...G});if(Z.type==="error")a4(j,{ulid:J,model:W.modelId,provider:W.providerId,errorMessage:Z.error?.message??"unknown error",...G});if(Z.type==="usage"&&X?.turnUsageBaseline){let K=mw(Z);if(B){X.turnPrimaryUsage=L0(X.turnPrimaryUsage??z0(),K);let A=L0(X.turnUsageBaseline,X.turnPrimaryUsage);$.usageBySession.set(J,A),j8(j,{ulid:J,provider:W.providerId,model:W.modelId,source:"assistant",mode:W.mode,...G}),jZ(j,{ulid:J,tokensIn:Z.inputTokens,tokensOut:Z.outputTokens,cacheWriteTokens:Z.cacheWriteTokens,cacheReadTokens:Z.cacheReadTokens,totalCost:Z.cost,model:W.modelId,...G})}else{let A=vw({isPrimaryAgentEvent:B,overrides:Q,eventMetadata:H}),D=X.turnUsageByAgent??new Map;X.turnUsageByAgent=D,D.set(A,L0(D.get(A)??z0(),K))}let F=L0(X.turnPrimaryUsage??z0(),o5(X.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(J,L0(X.turnAggregateUsageBaseline??X.turnUsageBaseline,F))}if(Z.type==="iteration_end"&&B)$.persistMessages(J,X?.agent.getMessages()??[],X?.config.systemPrompt);Y({type:"agent_event",payload:{sessionId:J,event:Z,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(B?"lead":void 0):void 0}}),Y({type:"chunk",payload:{sessionId:J,stream:"agent",chunk:fB(Z),ts:Date.now()}})}function j$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as AC}from"@cline/shared";import{spawn as aw}from"node:child_process";import{appendFileSync as ow,readFileSync as sw}from"node:fs";import{join as tw}from"node:path";import{augmentNodeCommandForDebug as AG,withResolvedClineBuildEnv as d3}from"@cline/shared";import{ensureHookLogDir as KG}from"@cline/shared/storage";function t5($,Z){if(!Z)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:Z}}import{existsSync as cw,readdirSync as uw}from"node:fs";import{basename as dw,extname as lw,join as pw}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as GG,resolveHooksConfigSearchPaths as rw}from"@cline/shared/storage";function g3($){return rw($)}var e5;((H)=>{H.TaskStart="TaskStart";H.TaskResume="TaskResume";H.TaskCancel="TaskCancel";H.TaskComplete="TaskComplete";H.TaskError="TaskError";H.PreToolUse="PreToolUse";H.PostToolUse="PostToolUse";H.UserPromptSubmit="UserPromptSubmit";H.PreCompact="PreCompact";H.SessionShutdown="SessionShutdown"})(e5||={});var m3={["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"},iw=new Map(Object.values(e5).map(($)=>[$.toLowerCase(),$])),nw=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function v3($){let Z=lw($).toLowerCase();if(!nw.has(Z))return;let Q=dw($,Z).trim().toLowerCase();return iw.get(Q)}function i2($){let Z=[],Q=new Set,J=g3($).filter((W)=>cw(W));for(let W of J)try{for(let X of uw(W,{withFileTypes:!0})){if(!X.isFile())continue;let Y=v3(X.name);if(!Y)continue;let j=pw(W,X.name);if(Q.has(j))continue;Q.add(j),Z.push({fileName:Y,hookEventName:m3[Y],path:j})}}catch{}return Z.sort((W,X)=>W.path.localeCompare(X.path))}function Z9($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,J]of Object.entries($))Z[Q]=typeof J==="string"?J:JSON.stringify(J);return Z}function $9($,Z,Q){let J=Q instanceof Error?`: ${Q.message}`:"",W=`${Z}${J}`;if($){try{$.log(W,{severity:"warn",...Q!==void 0?{error:Q}:{}})}catch{}return}console.warn(W)}function ew($,Z){if(!Z)return $;if(!$)return{...Z};let Q=[$.context,Z.context].filter((W)=>typeof W==="string"&&W.length>0).join(`
579
+ `),J=[...$.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:J.length>0?J:void 0}}function $C($){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 c3($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function _0($,Z){let Q=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",J={rootSessionId:Z.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:J,workspaceRoots:Z.workspacePath?[Z.workspacePath]:[],workspaceInfo:Z.workspaceInfo,userId:Q,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function ZC($){let Z=$.trim();if(!Z)return{};let J=Z.split(`
580
+ `).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),W=J.length>0?J[J.length-1]:Z;try{return{parsedJson:JSON.parse(W)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse hook stdout JSON"}}}async function QC($,Z){let Q=$.stdin;if(!Q)throw Error("hook command failed to create stdin");await new Promise((J,W)=>{let X=!1,Y=()=>{Q.off("error",V),Q.off("finish",B),$.off("close",H)},j=(G)=>{if(X)return;if(X=!0,Y(),G){let K=G.code;if(K==="EPIPE"||K==="ERR_STREAM_DESTROYED"){J();return}W(G);return}J()},V=(G)=>j(G),B=()=>j(),H=()=>j();Q.on("error",V),Q.once("finish",B),$.once("close",H);try{Q.end(Z)}catch(G){j(G)}})}async function fG($,Z){if(Z.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await FG($,Z)}catch(Q){let J=XC(Z.command,process.platform,Q);if(!J)throw Q;return await FG($,{...Z,command:J})}}async function FG($,Z){let Q=AG(Z.command,{env:Z.env,debugRole:"hook"}),J=aw(Q[0],Q.slice(1),{cwd:Z.cwd,env:d3(Z.env),stdio:Z.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Z.detached,windowsHide:!0}),W=new Promise((K)=>{J.once("spawn",()=>K())}),X=new Promise((K,F)=>{J.once("error",(A)=>F(A))}),Y=JSON.stringify($);if(await Promise.race([W,X]),await QC(J,Y),Z.detached){J.unref();return}if(!J.stdout||!J.stderr)throw Error("hook command failed to create stdout/stderr");let j="",V="",B=!1,H;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)H=setTimeout(()=>{B=!0,J.kill("SIGKILL")},Z.timeoutMs);J.once("close",(F)=>{if(H)clearTimeout(H);let{parsedJson:A,parseError:D}=ZC(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:D,timedOut:B})})});return await Promise.race([G,X])}function JC($){try{let Q=sw($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Q?.startsWith("#!"))return;let J=Q.slice(2).trim();if(!J)return;let W=J.split(/\s+/).filter(Boolean);return W.length>0?W:void 0}catch{return}}function WC($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function XC($,Z=process.platform,Q){if(Z!=="win32"||!WC(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function UG($){if($.length===0)return;let[Z,...Q]=$,J=Z.replace(/\\/g,"/").toLowerCase(),W=J.split("/").at(-1)??J;if(W==="env")return UG(Q);if(W==="bash"||W==="sh"||W==="zsh")return[W,...Q];if(W==="python3"||W==="python")return process.platform==="win32"?["py","-3",...Q]:[W,...Q];return $}function YC($){let Z=JC($);if(Z&&Z.length>0)return[...UG(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 AG(["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 jC($){let Z={};for(let Q of i2($)){if(!Q.hookEventName)continue;let J=Q.hookEventName,W=Z[J]??[];W.push(YC(Q.path)),Z[J]=W}return Z}async function VC($){let Z;for(let Q of $.commands){let J=Q.join(" ");try{let W=await fG($.payload,{command:Q,cwd:$.cwd,env:d3(process.env),detached:!1,timeoutMs:$.timeoutMs});if(W?.timedOut){$9($.logger,`hook command timed out: ${J}`);continue}if(W?.parseError){$9($.logger,`hook command returned invalid JSON control output: ${J} (${W.parseError})`);continue}Z=ew(Z,$C(W?.parsedJson))}catch(W){$9($.logger,`hook command failed: ${J}`,W)}}return Z}function s$($){for(let Z of $.commands){let Q=Z.join(" ");fG($.payload,{command:Z,cwd:$.cwd,env:d3(process.env),detached:!0}).catch((J)=>{$9($.logger,`hook command failed: ${Q}`,J)})}}function V$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function u3($,Z){return{...V$($.snapshot),userMessage:Z}}function DG($){return{...V$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function LG($){return{...V$($.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 _G($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function BC($){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 Q9($){let Z={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(J)=>{let W=`${JSON.stringify({ts:new Date().toISOString(),...J})}
581
+ `,Y=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??tw(KG(),"hooks.jsonl");KG(Y),ow(Y,W,"utf8")};return{beforeRun:async(J)=>{let W=u3(J,"");Q({..._0(W,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(J)=>{let W=DG(J);Q({..._0(W,Z),hookName:"tool_call",iteration:W.iteration,tool_call:{id:W.call.id,name:W.call.name,input:W.call.input},preToolUse:{toolName:W.call.name,parameters:Z9(W.call.input)}});return},afterTool:async(J)=>{let W=LG(J);Q({..._0(W,Z),hookName:"tool_result",iteration:W.iteration,tool_result:W.record,postToolUse:{toolName:W.record.name,parameters:Z9(W.record.input),result:typeof W.record.output==="string"?W.record.output:JSON.stringify(W.record.output),success:!W.record.error,executionTimeMs:W.record.durationMs}});return},afterRun:async({snapshot:J,result:W})=>{let X=V$(J);if(W.status==="completed"){Q({..._0(X,Z),hookName:"agent_end",iteration:W.iterations,turn:{outputText:W.outputText,status:W.status},taskComplete:{taskMetadata:{}}});return}if(W.status==="aborted"||c3(W.error?.message)){Q({..._0(X,Z),hookName:"agent_abort",reason:W.error?.message,taskCancel:{taskMetadata:{}}});return}if(W.error)Q({..._0(X,Z),hookName:"agent_error",iteration:W.iterations,error:{name:W.error.name,message:W.error.message,stack:W.error.stack}})},onEvent:async(J)=>{if(J.type!=="message-added"||J.message.role!=="user")return;let W=u3({snapshot:J.snapshot},_G(J.message.content));Q({..._0(W,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:W.userMessage,attachments:[]}})}}}function l3($){let Z=jC($.workspacePath);if(!Object.values(Z).some((G)=>G.length>0))return;let J=async(G,K)=>{let F=Z[K]??[];if(F.length===0)return;s$({commands:F,cwd:$.cwd,logger:$.logger,payload:K==="agent_resume"?{..._0(G,$),hookName:K,taskResume:{taskMetadata:{},previousState:{}}}:{..._0(G,$),hookName:K,taskStart:{taskMetadata:{}}}})},W=async(G)=>{let K=Z.prompt_submit??[];if(K.length>0)s$({commands:K,cwd:$.cwd,logger:$.logger,payload:{..._0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},X=async(G)=>{let K=Z.tool_call??[];if(K.length===0)return;return VC({commands:K,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{..._0(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:Z9(G.call.input)}}})},Y=async(G)=>{let K=Z.tool_result??[];if(K.length===0)return;s$({commands:K,cwd:$.cwd,logger:$.logger,payload:{..._0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:Z9(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;s$({commands:K,cwd:$.cwd,logger:$.logger,payload:{..._0(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;s$({commands:K,cwd:$.cwd,logger:$.logger,payload:{..._0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},B=async(G)=>{if(c3(G.reason)){let F=Z.agent_abort??[];if(F.length>0)s$({commands:F,cwd:$.cwd,logger:$.logger,payload:{..._0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let K=Z.session_shutdown??[];if(K.length===0)return;s$({commands:K,cwd:$.cwd,logger:$.logger,payload:{..._0(G,$),hookName:"session_shutdown",reason:G.reason}})},H={};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)H.beforeRun=async(G)=>{let K=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await J(V$(G.snapshot),K);return};if((Z.prompt_submit?.length??0)>0)H.onEvent=async(G)=>{if(G.type!=="message-added"||G.message.role!=="user")return;await W(u3({snapshot:G.snapshot},_G(G.message.content)))}}if((Z.tool_call?.length??0)>0)H.beforeTool=async(G)=>{let K=await X(DG(G));return BC(K)};if((Z.tool_result?.length??0)>0)H.afterTool=async(G)=>{await Y(LG(G));return};if((Z.agent_end?.length??0)>0)H.afterRun=async({snapshot:G,result:K})=>{if(K.status!=="completed")return;await j({...V$(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=H.afterRun;H.afterRun=async(K)=>{await G?.(K);let{snapshot:F,result:A}=K;if(A.status==="aborted"||c3(A.error?.message)){await B({...V$(F),reason:A.error?.message});return}if(A.error)await V({...V$(F),iteration:A.iterations,error:A.error})}}return H}function J9($){return t5("core.hook_config_files",l3($))}function t$($,Z){let Q=$.map((J)=>J[Z]).filter((J)=>typeof J==="function");if(Q.length===0)return;return async(J)=>{let W;for(let X of Q){let Y=await X(J);if(!Y||typeof Y!=="object")continue;let j=Y;W={...W??{},...j,stop:W?.stop===!0||j.stop===!0?!0:j.stop,options:W?.options||j.options?{...W?.options??{},...j.options??{}}:void 0}}return W}}function E4($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:t$(Z,"beforeRun"),afterRun:t$(Z,"afterRun"),beforeModel:t$(Z,"beforeModel"),afterModel:t$(Z,"afterModel"),beforeTool:t$(Z,"beforeTool"),afterTool:t$(Z,"afterTool"),onEvent:t$(Z,"onEvent")}}import{z as B$}from"zod";var w4=A2;var TG=B$.object({settings:A2,updatedAt:B$.string().datetime(),tokenSource:B$.enum(["manual","oauth","migration"]).default("manual")}),W9=B$.object({version:B$.literal(1),lastUsedProvider:B$.string().min(1).optional(),providers:B$.record(B$.string(),TG)});function n2(){return{version:1,providers:{}}}o0();import{upsertWorkspaceInfo as HC,WorkspaceManifestSchema as p3}from"@cline/shared";class X9{manifest;listeners=new Set;constructor($){this.manifest=p3.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await z5($);return this.manifest=HC(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=g$($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=p3.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let J=await this.addWorkspacePath(Z);return this.manifest=p3.parse({...this.manifest,currentWorkspacePath:J.rootPath}),this.emit({type:"workspace_switched",workspace:J}),J}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=g$($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}A0();import{createHash as GC}from"node:crypto";var OG=new Set,qG=new Set;function KC($){return GC("sha256").update($).digest("hex")}function FC($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function zG($){if(!$.telemetry)return;let Z=KC($.rootPath),Q=$.rootCount??1;if(!OG.has(Z))OG.add(Z),JZ($.telemetry,{root_count:Q,vcs_types:FC($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!qG.has(Z)){qG.add(Z);let J=Error($.initError.message);J.name=$.initError.errorType||"Error",WZ($.telemetry,J,{fallback_to_single_root:!0,workspace_count:Q})}}function fC($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function UC($,Z,Q){if(Z.length>0)for(let X of Z)Q?.log(X.message,{severity:"warn"});if($.length===0)return;let J=$.slice(0,3).map(fC).join("; "),W=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${J}${W}. 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 DC($,Z){let Q=typeof $.thinking==="boolean",J=typeof $.reasoningEffort==="string";if(!Q&&!J)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...J?{effort:$.reasoningEffort}:{}}}function MG($,Z){return AC($,Z)}function LC($){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 _C($){let Z={...$.storedHeaders??{},...$.configHeaders??{}},Q=$.accountId?.trim()||TC($.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 TC($){let Z=$?.trim();if(!Z)return;let Q=E0(Z),J=Q?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof J==="string"&&J.length>0)return J;let W=Q?.organizations?.[0]?.id;if(typeof W==="string"&&W.length>0)return W;let X=Q?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;return}function OC($,Z,Q,J,W){let X=Q.getProviderSettings($.providerId),Y=J||X?.modelCatalog?{...J??{},...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"?_C({sessionId:Z,configHeaders:$.headers,storedHeaders:X?.headers,accountId:X?.auth?.accountId,accessToken:$.apiKey??X?.auth?.accessToken??X?.apiKey}):$.headers??X?.headers,reasoning:DC($,X?.reasoning),modelCatalog:Y},B={...K1(V),...j??{}};if($.knownModels)B.knownModels=$.knownModels;if($.extensionContext)B.extensionContext=$.extensionContext;let G=$.fetch??B.fetch??W;if(G)B.fetch=G;return B}async function RG($){let{input:Z,sessionId:Q,providerSettingsManager:J,defaultTelemetry:W,defaultCapabilities:X,defaultToolPolicies:Y,defaultFetch:j,onPluginEvent:V,onTeamEvent:B,createSubAgentLifecycleCallbacks:H,createSpawnTool:G,localRuntime:K,readSessionMetadata:F,writeSessionMetadata:A}=$,D=j$(Z.config),{modelCatalogDefaults:U,userInstructionService:L,configExtensions:f,onTeamRestored:z,...O}=K??{},T=Object.keys(O).length>0?O:void 0,{workspaceInfo:_,workspaceMetadata:M,durationMs:N,vcsType:m,initError:E}=await sV(D),d=T?.extensionContext,s={...d??{},workspace:{..._,...d?.workspace??{}},session:{...d?.session??{},sessionId:Q},logger:d?.logger??T?.logger,telemetry:d?.telemetry??T?.telemetry??W};zG({telemetry:s.telemetry,rootPath:_.rootPath,workspaceInfo:_,rootCount:1,vcsType:m,durationMs:N,initError:E,featureFlagEnabled:!0});let j0=J9({cwd:Z.config.cwd,workspacePath:D,rootSessionId:Q,logger:T?.logger,workspaceInfo:_}),j2=AB(T?.hooks)?void 0:Q9({rootSessionId:Q,workspacePath:D,workspaceInfo:_}),D$=E4([T?.hooks,j2]),b0;if(MG(f,"plugins"))try{b0=await R6({pluginPaths:T?.pluginPaths,workspacePath:D,cwd:Z.config.cwd,onEvent:V,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:_,session:s.session,client:s.client,user:s.user,logger:s.logger,telemetry:s.telemetry,automation:s.automation}),UC(b0.failures,b0.warnings,T?.logger)}catch(V2){let t9=V2 instanceof Error?V2.message:String(V2);T?.logger?.log?.(`plugin loading failed; continuing without plugins (${t9})`)}let Q0=g7(j0?[j0]:void 0,g7(T?.extensions,aZ(b0?.extensions))),S1=MG(f,"plugins")?E$(b0?.pluginPaths??[]):void 0,G0={...Z.config,...T??{},sessionId:Q,hooks:D$,extensions:Q0,extensionContext:s,telemetry:s.telemetry},R0=OC(G0,Q,J,U,j),Q1=E4([G0.hooks,G0.checkpoint?.enabled===!0?fH({cwd:G0.cwd,sessionId:Q,logger:G0.logger,createCheckpoint:G0.checkpoint?.createCheckpoint,initialRunCount:LC(Z.initialMessages),readSessionMetadata:F,writeSessionMetadata:A}):void 0]),h={...G0,providerConfig:R0,workspaceMetadata:M,hooks:Q1},F0=Z.toolPolicies??G0.toolPolicies??Y,b=C0(X,Z.capabilities),a=b?.requestToolApproval,N0=b?.toolExecutors,J0=H?.(h),l4=new X9({currentWorkspacePath:_.rootPath,workspaces:{[_.rootPath]:_}});return{effectiveInput:Z,config:h,providerConfig:R0,workspaceMetadata:M,workspaceInfo:_,extensions:Q0,hooks:Q1,toolPolicies:F0,requestToolApproval:a,pluginSandboxShutdown:b0?.shutdown,runtimeBuilderInput:{config:h,hooks:Q1,extensions:Q0,onTeamEvent:B,createSpawnTool:G,onTeamRestored:z,onSubAgentEvent:J0?.onSubAgentEvent,onSubAgentStart:J0?.onSubAgentStart,onSubAgentEnd:J0?.onSubAgentEnd,userInstructionService:L,pluginSkillDirectories:S1,configExtensions:f,toolExecutors:N0,toolPolicies:F0,workspaceManager:l4,logger:h.logger,telemetry:h.telemetry,requestToolApproval:a}}}import{resolveDocumentsExtensionPath as qC}from"@cline/shared/storage";A0();function NG($,Z,Q,J,W){if(Q)YZ($.telemetry,{ulid:Z,apiProvider:$.providerId,...W});else XZ($.telemetry,{ulid:Z,apiProvider:$.providerId,...W});zC($.telemetry,{workspacePath:J})}function zC($,Z){let Q=qC("Hooks"),J=i2(Z.workspacePath),W=new Map;for(let X of J){let Y=X.hookEventName??"unknown",j=W.get(Y)??{global:0,workspace:0};if(X.path===Q||X.path.startsWith(`${Q}/`))j.global+=1;else j.workspace+=1;W.set(Y,j)}for(let[X,Y]of W.entries())fZ($,X,Y.global,Y.workspace)}function EG($,Z){for(let Q of Z.mentions)FZ($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)GZ($,"file",Q.length);for(let Q of Z.ignoredMentions)KZ($,"file","not_found",Q)}import{chmodSync as pG,existsSync as s3,mkdirSync as JP,readFileSync as WP,writeFileSync as XP}from"node:fs";import{basename as rG,dirname as t3}from"node:path";import{resolveProviderSettingsPath as YP}from"@cline/shared/storage";import{existsSync as MC,mkdirSync as RC,readFileSync as NC,writeFileSync as EC}from"node:fs";import{mkdir as wC,readFile as CC,writeFile as PC}from"node:fs/promises";import{dirname as r3,join as SC}from"node:path";import*as k0 from"@cline/llms";import{ModelCapabilitySchema as bC,ProviderCapabilitySchema as yC,ProviderClientSchema as hC,ProviderProtocolSchema as kC}from"@cline/shared";import{z as r}from"zod";var IC=r.object({id:r.string().optional(),name:r.string().optional(),maxTokens:r.number().optional(),contextWindow:r.number().optional(),maxInputTokens:r.number().optional(),capabilities:r.array(bC).optional(),supportsVision:r.boolean().optional(),supportsAttachments:r.boolean().optional(),supportsReasoning:r.boolean().optional()}).passthrough(),xC=r.object({name:r.string(),baseUrl:r.string(),defaultModelId:r.string().optional(),protocol:kC.optional(),client:hC.optional(),capabilities:r.array(yC).optional(),modelsSourceUrl:r.string().optional()}).passthrough(),wG=r.object({provider:xC.optional(),models:r.record(r.string(),IC).optional()}).passthrough(),CG=r.object({version:r.literal(1),providers:r.record(r.string(),wG)}),gC=r.object({version:r.literal(1),providers:r.record(r.string(),r.unknown())}),Y9=new Set;function PG($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function e$($){return SC(r3($.getFilePath()),"models.json")}function j9(){return{version:1,providers:{}}}function SG($){let Z=gC.safeParse($);if(!Z.success)return j9();let Q={};for(let[J,W]of Object.entries(Z.data.providers)){let X=wG.safeParse(W);if(X.success)Q[J]=X.data}return{version:1,providers:Q}}function i3($){if(!MC($))return j9();try{let Z=NC($,"utf8");return SG(JSON.parse(Z))}catch{}return j9()}async function a2($){try{let Z=await CC($,"utf8");return SG(JSON.parse(Z))}catch{}return j9()}function bG($,Z){RC(r3($),{recursive:!0});let Q=CG.parse(Z);EC($,`${JSON.stringify(Q,null,2)}
582
+ `,"utf8")}async function V9($,Z){await wC(r3($),{recursive:!0});let Q=CG.parse(Z);await PC($,`${JSON.stringify(Q,null,2)}
583
+ `,"utf8")}function yG($,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 hG($){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 kG($){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 mC($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function IG($,Z){return $??Z??"openai-chat"}function xG($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function gG($,Z,Q){let J=new Set(Z?.capabilities??Q??[]);if(Z?.supportsVision)J.add("images");if(Z?.supportsAttachments)J.add("files");if(Z?.supportsReasoning)J.add("reasoning");return{id:$,name:Z?.name??$,maxTokens:Z?.maxTokens,contextWindow:Z?.contextWindow,maxInputTokens:Z?.maxInputTokens,capabilities:J.size>0?[...J]:void 0}}function vC($,Z){for(let[Q,J]of Object.entries(Z??{})){let W=J.id?.trim()||Q.trim();if(!W)continue;k0.registerModel($,W,gG(W,J))}}function cC($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function uC($){return Object.assign({},...k0.resolveProviderModelCatalogKeys($).map((Q)=>k0.getGeneratedModelsForProvider(Q)))}function dC($){let Z=$.provider.trim();if(!Z||k0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let J=k0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],W=uC(Z),X=kG($.capabilities),Y=X.length>0?X:void 0,j=$.model?.trim(),V={...W,...J?.models??{}};if(j)V[j]=cC(j,V[j],Y);let B=Object.keys(V).filter(Boolean),H=j||B[0];if(!H)return;let G=IG($.protocol,J?.provider.protocol),K=xG($.client,G,J?.provider.client);k0.registerProvider({provider:{id:Z,name:J?.provider.name??PG(Z),description:J?.provider.description,protocol:G,client:K,baseUrl:Q,modelsSourceUrl:J?.provider.modelsSourceUrl,defaultModelId:H,capabilities:hG($.capabilities)??J?.provider.capabilities,source:"file"},models:V})}function B9($){for(let Z of Object.values($.providers))dC(Z.settings)}function C4($,Z){let Q=Z.models??{};if(!mC(Z.provider)){vC($,Q);return}let J=kG(Z.provider.capabilities),W=Object.entries(Q).map(([B,H])=>({id:H.id?.trim()||B.trim(),model:H})).filter(({id:B})=>B.length>0),X=Z.provider.defaultModelId?.trim()||W[0]?.id||"default",Y=IG(Z.provider.protocol,void 0),j=xG(Z.provider.client,Y,void 0),V=Object.fromEntries(W.map(({id:B,model:H})=>[B,{...gG(B,H,J.length>0?J:void 0),status:"active"}]));k0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||PG($),protocol:Y,client:j,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:X,capabilities:hG(Z.provider.capabilities),source:"file"},models:V})}function mG($){let Z=e$($);if(Y9.has(Z))return;let Q=i3(Z);for(let[J,W]of Object.entries(Q.providers))C4(J,W);Y9.add(Z)}async function vG($){let Z=e$($);if(Y9.has(Z))return;let Q=await a2(Z);for(let[J,W]of Object.entries(Q.providers))C4(J,W);Y9.add(Z)}import{existsSync as lC,readFileSync as pC}from"node:fs";import{dirname as rC,join as n3}from"node:path";import*as o2 from"@cline/llms";import{resolveClineDataDir as iC}from"@cline/shared/storage";var H9="openai",dG=o2.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,cG=128000;function lG($){let Z=$?.trim();if(!Z)return;try{let Q=JSON.parse(Z);if(!Q)return;let J=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:J,accountId:Q.userInfo?.id}}catch{return}}function C($){let Z=$?.trim();return Z?Z:void 0}function nC($){return $==="credentials"?"iam":$}function uG($){if(!lC($))return;try{let Z=pC($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function aC($){let Z=$.dataDir??iC(),Q=$.globalStatePath??n3(Z,"globalState.json"),J=$.secretsPath??n3(Z,"secrets.json"),W=uG(Q),X=uG(J);if(!W&&!X)return;return{globalState:W??{},secrets:X??{}}}function a3($){if($===H9)return dG;return $}function oC($,Z,Q,J){let W=Q==="plan"?"planMode":"actMode",X=Z===J?C(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,j={openrouter:`${W}OpenRouterModelId`,cline:`${W}ClineModelId`,openai:`${W}OpenAiModelId`,ollama:`${W}OllamaModelId`,lmstudio:`${W}LmStudioModelId`,litellm:`${W}LiteLlmModelId`,requesty:`${W}RequestyModelId`,together:`${W}TogetherModelId`,fireworks:`${W}FireworksModelId`,sapaicore:`${W}SapAiCoreModelId`,groq:`${W}GroqModelId`,baseten:`${W}BasetenModelId`,huggingface:`${W}HuggingFaceModelId`,"huawei-cloud-maas":`${W}HuaweiCloudMaasModelId`,oca:`${W}OcaModelId`,aihubmix:`${W}AihubmixModelId`,hicap:`${W}HicapModelId`,nousResearch:`${W}NousResearchModelId`,"vercel-ai-gateway":`${W}VercelAiGatewayModelId`}[Z];return(j?C(typeof $[j]==="string"?$[j]:void 0):void 0)??X}function sC($,Z,Q){let J=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,W=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(C).find(Boolean),X=W==="none"||W==="low"||W==="medium"||W==="high"||W==="xhigh"?W:void 0,Y=typeof J==="number"&&Number.isInteger(J)&&J>0?J:void 0;if(!X&&Y===void 0)return;return{...X?{effort:X}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function tC($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),J=C(Q.access_token),W=C(Q.refresh_token),X=C(Q.accountId);if(!J&&!W&&!X)return;return{...J?{apiKey:J}:{},auth:{...J?{accessToken:J}:{},...W?{refreshToken:W}:{},...X?{accountId:X}:{}}}}catch{return}}function eC($){let Z=o2.getGeneratedModelsForProvider($),J=o2.getProviderCollectionSync($)?.provider.defaultModelId;if(J&&Z[J])return J;return Object.keys(Z)[0]??void 0}function $P($,Z,Q,J){let W=a3($),X=C(J==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),Y=oC(Z,$,J,X)??eC(W),j=sC(Z,W,J),V=typeof Z.requestTimeoutMs==="number"&&Number.isInteger(Z.requestTimeoutMs)&&Z.requestTimeoutMs>0?Z.requestTimeoutMs:void 0,B={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},H={};if($==="openai-codex")Object.assign(H,tC(Q));if($==="cline")try{let L=C(Q["cline:clineAccountId"]);if(L)H.auth={...H.auth??{},...lG(L)}}catch{}if($===H9&&Z.openAiHeaders)H.headers=Z.openAiHeaders;if($==="bedrock"){let L=nC(Z.awsAuthentication),f=L==="profile"||Z.awsUseProfile===!0;H.aws={accessKey:C(Q.awsAccessKey),secretKey:C(Q.awsSecretKey),sessionToken:C(Q.awsSessionToken),region:C(Z.awsRegion),authentication:L,profile:f?C(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:C(Z.awsBedrockEndpoint),customModelBaseId:C(J==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")H.gcp={projectId:C(Z.vertexProjectId),region:C(Z.vertexRegion)};if($===H9&&(Z.azureApiVersion||Z.azureIdentity!==void 0))H.azure={apiVersion:C(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let L=Z.sapAiCoreUseOrchestrationMode??!0;H.sap={clientId:C(Q.sapAiCoreClientId),clientSecret:C(Q.sapAiCoreClientSecret),tokenUrl:C(Z.sapAiCoreTokenUrl),resourceGroup:C(Z.sapAiResourceGroup),deploymentId:L?void 0:C(J==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:L}}if($==="oca"){H.oca={mode:Z.ocaMode};let L=C(Q.ocaRefreshToken);if(L)H.auth={...H.auth??{},refreshToken:L}}if($==="qwen")H.apiLine=Z.qwenApiLine;if($==="moonshot")H.apiLine=Z.moonshotApiLine;if($==="zai")H.apiLine=Z.zaiApiLine;if($==="minimax")H.apiLine=Z.minimaxApiLine;let G={anthropic:Z.anthropicBaseUrl,openai:Z.openAiBaseUrl,ollama:Z.ollamaBaseUrl,lmstudio:Z.lmStudioBaseUrl,litellm:Z.liteLlmBaseUrl,gemini:Z.geminiBaseUrl,requesty:Z.requestyBaseUrl,asksage:Z.asksageApiUrl,dify:Z.difyBaseUrl,oca:Z.ocaBaseUrl,aihubmix:Z.aihubmixBaseUrl,sapaicore:Z.sapAiCoreBaseUrl},K=C(B[$]),F=C(G[$]),A={provider:W,...K?{apiKey:K}:{},...Y?{model:Y}:{},...F?{baseUrl:F}:{},...j?{reasoning:j}:{},...V?{timeout:V}:{},...H},D=w4.safeParse(A);if(!D.success)return;return Object.keys(A).filter((L)=>L!=="provider").length>0?D.data:void 0}function ZP($,Z){if($!==dG)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:cG,maxInputTokens:cG,capabilities:["streaming","tools","images"]}}}}function QP($,Z){let Q=new Set;for(let W of[$.actModeApiProvider,$.planModeApiProvider]){let X=C(W);if(X)Q.add(X)}if(C(Z.apiKey))Q.add("anthropic");if(C(Z.openRouterApiKey))Q.add("openrouter");if(C(Z.openAiApiKey))Q.add(H9);if(C(Z.openAiNativeApiKey))Q.add("openai-native");if(C(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(C(Z.geminiApiKey))Q.add("gemini");if(C(Z.ollamaApiKey))Q.add("ollama");if(C(Z.awsAccessKey)||C(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||C($.awsProfile))Q.add("bedrock");if(C($.vertexProjectId)||C($.vertexRegion))Q.add("vertex");if(C(Z.clineApiKey))Q.add("cline");let J=lG(C(Z["cline:clineAccountId"]));if(J?.accessToken||J?.refreshToken||J?.accountId)Q.add("cline");if(C(Z.ocaApiKey))Q.add("oca");if(C(Z.sapAiCoreClientId)||C(Z.sapAiCoreClientSecret)||C($.sapAiCoreTokenUrl)||C($.sapAiCoreBaseUrl)||C($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function o3($){let Z=$.providerSettingsManager.read(),Q=aC($);if(!Q)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let{globalState:J,secrets:W}=Q,X=J.mode==="plan"?"plan":"act",Y=QP(J,W),j=n2();j.providers={...Z.providers},j.lastUsedProvider=Z.lastUsedProvider;let V=new Date().toISOString(),B=0,H=n3(rC($.providerSettingsManager.getFilePath()),"models.json"),G=i3(H),K=0;for(let D of Y){let U=a3(D);if(j.providers[U])continue;let L=$P(D,J,W,X);if(!L)continue;j.providers[U]={settings:L,updatedAt:V,tokenSource:"migration"},B+=1;let f=ZP(U,L);if(f&&!G.providers[U])G.providers[U]=f,K+=1}if(B===0&&K===0)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let F=C(X==="plan"?J.planModeApiProvider:J.actModeApiProvider),A=F?a3(F):void 0;if(j.lastUsedProvider=Z.lastUsedProvider??(A&&j.providers[A]?A:Object.keys(j.providers)[0]),$.providerSettingsManager.write(j),K>0)bG(H,G);return{migrated:B>0||K>0,providerCount:Object.keys(j.providers).length,lastUsedProvider:j.lastUsedProvider}}function jP(){return new Date().toISOString()}var VP="cline",BP="cline-pass";function HP($){if(rG($)!=="providers.json")return;let Z=t3($);if(rG(Z)!=="settings")return;return t3(Z)}class H${filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??YP(),this.dataDir=$.dataDir??HP(this.filePath),this.dataDir||!$.filePath)o3({providerSettingsManager:this,dataDir:this.dataDir});if(mG(this),B9(this.read()),s3(this.filePath))try{pG(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!s3(this.filePath))return n2();try{let $=WP(this.filePath,"utf8"),Z=JSON.parse($),Q=W9.safeParse(Z);if(Q.success)return B9(Q.data),Q.data}catch{}return n2()}write($){let Z=W9.parse($),Q=t3(this.filePath);if(!s3(Q))JP(Q,{recursive:!0,mode:448});XP(this.filePath,`${JSON.stringify(Z,null,2)}
584
+ `,"utf8");try{pG(this.filePath,384)}catch{}B9(Z)}saveProviderSettings($,Z={}){let Q=w4.parse($),J=this.read(),W=Q.provider,X=Z.setLastUsed!==!1,Y=J.providers[W],j=Z.tokenSource??Y?.tokenSource??"manual",V={...J,providers:{...J.providers,[W]:{settings:Q,updatedAt:jP(),tokenSource:j}},lastUsedProvider:X?W:J.lastUsedProvider};return this.write(V),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,W=K0(Z)?.storageProviderId;if(!W||W===Z)return Q;let X=$.providers[W]?.settings;if(!X)return Q;return w4.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===BP&&Z.isClinePassEnabled===!1)return VP;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 K1(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return K1(Z,$)}async refreshCatalog(){try{await G6({})}catch{}}}A0();l2();import{execFile as GP}from"node:child_process";import{promisify as KP}from"node:util";var s2=KP(GP);function P4($){let Z=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(Z?.history)?Z.history:[]).filter((J)=>!!J&&typeof J==="object"&&!Array.isArray(J)).flatMap((J)=>{let W=String(J.ref??"").trim(),X=Number(J.createdAt??0),Y=Number(J.runCount??0);if(W.length===0||!Number.isFinite(X)||!Number.isInteger(Y)||Y<1)return[];let j=J.kind==="stash"||J.kind==="commit"?J.kind:void 0;return[{ref:W,createdAt:X,runCount:Y,...j?{kind:j}:{}}]})}function iG($,Z){let Q=P4($).filter((W)=>W.runCount<=Z),J=Q.at(-1);return J?{latest:J,history:Q}:void 0}function G9($,Z){return $.reduce((Q,J)=>{if(J.runCount>Z)return Q;if(!Q||J.runCount>Q.runCount)return J;return Q},void 0)}function nG($,Z){let Q=0;for(let J=0;J<$.length;J+=1){let W=$[J];if(W?.role!=="user")continue;if(("metadata"in W&&W.metadata&&typeof W.metadata==="object"?W.metadata:void 0)?.kind==="recovery_notice")continue;if(Q+=1,Q===Z)return J}throw Error(`Could not find user message for checkpoint run ${Z}`)}function FP($,Z){let Q=nG($,Z);return $.slice(0,Q+1)}function aG($,Z){let Q=nG($,Z);return $.slice(0,Q)}function oG($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=G9(P4($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let J=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!J)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:J,...$.restoreMessages!==!1?{messages:FP($.messages??[],Z)}:{}}}async function sG($,Z){if((await s2("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await s2("git",["-C",$,"cat-file","-e",`${Z.ref}^{commit}`],{windowsHide:!0}),await s2("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await s2("git",["-C",$,"clean","-fd"],{windowsHide:!0}),Z.kind==="commit"){await s2("git",["-C",$,"reset","--hard",Z.ref],{windowsHide:!0});return}await s2("git",["-C",$,"stash","apply",Z.ref],{windowsHide:!0})}class $1 extends Error{code;constructor($,Z){super(Z);this.code=$;this.name="SessionVersioningError"}}function AP($){let Z=$.sessionId.trim();if(!Z)throw new $1("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new $1("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new $1("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new $1("invalid_restore","checkpointRunCount must be a positive integer");return Z}class t2{async restoreCheckpoint($){let Z=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,J=AP({sessionId:$.sessionId,restoreMessages:Z,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),W=await $.getSession(J);if(!W)throw new $1("session_not_found",`Session ${J} not found`);let X=Z?await $.readMessages(J):void 0;if(Z&&X?.length===0)throw new $1("session_messages_not_found",`No messages found for session ${J}`);let Y=oG({session:W,messages:X,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:Z});if(Q)await($.applyWorkspaceCheckpoint??sG)(Y.cwd,Y.checkpoint);let j=Q$({session:W,messages:X});if(!Z)return{checkpoint:Y.checkpoint,sourceSnapshot:j};let V=iG(W,$.checkpointRunCount),B=$.restore?.omitCheckpointMessageFromSession?aG(X??[],$.checkpointRunCount):Y.messages??[],H={sourceSession:W,sourceMessages:X,sourceSnapshot:j,plan:Y,restoredCheckpointMetadata:V,initialMessages:B,restoreMessages:Z,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new $1("invalid_restore","start is required when restore.messages is true");let G=$.buildStartInput?await $.buildStartInput(H,$.start):$.start,K=await $.startSession(G),F=$.getStartedSessionId?.(K);if(F)await($.retainCheckpointRefs??AH)(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:Q$({session:A,messages:B})}:{}}}}import{hasRuntimeConfigExtension as wP}from"@cline/shared";import{nanoid as CP}from"nanoid";o0();import{appendFileSync as fP,existsSync as e2,mkdirSync as tG,readdirSync as UP,readFileSync as eG,renameSync as DP,writeFileSync as LP}from"node:fs";import{join as e3}from"node:path";import{resolveTeamDataDir as _P}from"@cline/shared/storage";function $K(){return new Date().toISOString()}function $J($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function ZK($){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 K9{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??_P()}init(){this.ensureTeamDir()}listTeamNames(){if(!e2(this.teamDirPath))return[];return UP(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>e2(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let Z=this.readEnvelope($);return Z?.teamState?ZK(Z.teamState):void 0}readHistory($,Z=200){let Q=this.historyPath($);if(!e2(Q))return[];return eG(Q,"utf8").split(`
585
+ `).map((J)=>J.trim()).filter(Boolean).map((J)=>{try{return JSON.parse(J)}catch{return}}).filter((J)=>J!==void 0).reverse().slice(0,Z)}loadRuntime($){let Z=this.readEnvelope($);return{state:Z?.teamState?ZK(Z.teamState):void 0,teammates:Z?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,Z){this.ensureTeamSubdir($),fP(this.historyPath($),`${JSON.stringify({ts:$K(),eventType:Z.type,payload:Z})}
586
+ `,"utf8")}persistRuntime($,Z,Q){this.ensureTeamSubdir($);let J={version:1,updatedAt:$K(),teamState:Z,teammates:Q},W=this.statePath($),X=`${W}.tmp`;LP(X,`${JSON.stringify(J,null,2)}
587
+ `,"utf8"),DP(X,W)}markInProgressRunsInterrupted($,Z){let Q=this.readEnvelope($);if(!Q?.teamState?.runs?.length)return[];let J=Q.teamState.runs.filter((X)=>X.status==="queued"||X.status==="running").map((X)=>X.id);if(J.length===0)return[];let W=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:W}:X)},this.persistRuntime($,Q.teamState,Q.teammates),J}ensureTeamDir(){if(!e2(this.teamDirPath))tG(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let Z=e3(this.ensureTeamDir(),$J($));if(!e2(Z))tG(Z,{recursive:!0});return Z}statePath($){return e3(this.ensureTeamDir(),$J($),"state.json")}historyPath($){return e3(this.ensureTeamDir(),$J($),"task-history.jsonl")}readEnvelope($){let Z=this.statePath($);if(!e2(Z))return;try{let Q=JSON.parse(eG(Z,"utf8"));if(Q?.version===1&&Q.teamState)return Q}catch{}return}}import{existsSync as TP,mkdirSync as OP}from"node:fs";import{join as qP}from"node:path";import{safeJsonParse as QK}from"@cline/shared";import{loadSqliteDb as zP,nowIso as ZJ}from"@cline/shared/db";import{resolveDbDataDir as MP}from"@cline/shared/storage";function RP(){return MP()}function $8($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function NP($){let Z=QK($);if(!Array.isArray(Z))return[];let Q=[];for(let J of Z){if(!J||typeof J!=="object")continue;let W=J,X=W.agentId,Y=W.rolePrompt;if(typeof X!=="string"||!X.trim())continue;if(typeof Y!=="string"||!Y.trim())continue;let j={agentId:X.trim(),rolePrompt:Y};if(typeof W.modelId==="string"&&W.modelId.trim())j.modelId=W.modelId.trim();if(typeof W.maxIterations==="number"&&Number.isFinite(W.maxIterations))j.maxIterations=Math.max(1,Math.floor(W.maxIterations));Q.push(j)}return Q}function EP($){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 S4{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??RP()}init(){this.getRawDb()}ensureTeamDir(){if(!TP(this.teamDirPath))OP(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return qP(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=zP(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
584
588
  CREATE TABLE IF NOT EXISTS team_store_schema_version (
585
589
  lock INTEGER PRIMARY KEY CHECK (lock = 1),
586
590
  version INTEGER NOT NULL
@@ -664,13 +668,13 @@ ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fi
664
668
  version INTEGER NOT NULL DEFAULT 1,
665
669
  PRIMARY KEY(team_name, fragment_id)
666
670
  );
667
- `)}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}withTransaction($){let Z=this.getRawDb();Z.exec("BEGIN IMMEDIATE;");try{$(),Z.exec("COMMIT;")}catch(Q){try{Z.exec("ROLLBACK;")}catch{}throw Q}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let Z=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[n2($)]);if(!Z)return;let Q=xG(Z.state_json);if(!Q)return;try{return dw(Q)}catch{return}}readHistory($,Z=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[n2($),Z]).flatMap((Q)=>{try{return[{eventType:Q.event_type,payload:JSON.parse(Q.payload_json),ts:Q.ts}]}catch{return[]}})}loadRuntime($){let Z=n2($),Q=this.readState(Z),W=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[Z]),J=W?uw(W.teammates_json):[];return{state:Q,teammates:J,interruptedRunIds:[]}}appendTeamEvent($,Z,Q,W){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
668
- VALUES (?, ?, ?, ?, NULL, ?)`,[n2($),rW(),Z,JSON.stringify(Q),W??null])}persistRuntime($,Z,Q){let W=n2($),J=rW();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
671
+ `)}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 = ?",[$8($)]);if(!Z)return;let Q=QK(Z.state_json);if(!Q)return;try{return EP(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 ?",[$8($),Z]).flatMap((Q)=>{try{return[{eventType:Q.event_type,payload:JSON.parse(Q.payload_json),ts:Q.ts}]}catch{return[]}})}loadRuntime($){let Z=$8($),Q=this.readState(Z),J=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[Z]),W=J?NP(J.teammates_json):[];return{state:Q,teammates:W,interruptedRunIds:[]}}appendTeamEvent($,Z,Q,J){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
672
+ VALUES (?, ?, ?, ?, NULL, ?)`,[$8($),ZJ(),Z,JSON.stringify(Q),J??null])}persistRuntime($,Z,Q){let J=$8($),W=ZJ();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
669
673
  VALUES (?, ?, ?, ?)
670
674
  ON CONFLICT(team_name) DO UPDATE SET
671
675
  state_json = excluded.state_json,
672
676
  teammates_json = excluded.teammates_json,
673
- updated_at = excluded.updated_at`,[W,JSON.stringify(Z),JSON.stringify(Q),J]);for(let X of Z.tasks)this.run(`INSERT INTO team_tasks (team_name, task_id, title, description, status, assignee, depends_on_json, summary, version, updated_at)
677
+ updated_at = excluded.updated_at`,[J,JSON.stringify(Z),JSON.stringify(Q),W]);for(let X of Z.tasks)this.run(`INSERT INTO team_tasks (team_name, task_id, title, description, status, assignee, depends_on_json, summary, version, updated_at)
674
678
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, ?)
675
679
  ON CONFLICT(team_name, task_id) DO UPDATE SET
676
680
  title = excluded.title,
@@ -680,7 +684,7 @@ ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fi
680
684
  depends_on_json = excluded.depends_on_json,
681
685
  summary = excluded.summary,
682
686
  version = team_tasks.version + 1,
683
- updated_at = excluded.updated_at`,[W,X.id,X.title,X.description,X.status,X.assignee??null,JSON.stringify(X.dependsOn??[]),X.summary??null,X.updatedAt.toISOString()]);for(let X of Z.runs??[])this.run(`INSERT INTO team_runs (team_name, run_id, agent_id, task_id, status, message, started_at, ended_at, error, lease_owner, heartbeat_at, version)
687
+ updated_at = excluded.updated_at`,[J,X.id,X.title,X.description,X.status,X.assignee??null,JSON.stringify(X.dependsOn??[]),X.summary??null,X.updatedAt.toISOString()]);for(let X of Z.runs??[])this.run(`INSERT INTO team_runs (team_name, run_id, agent_id, task_id, status, message, started_at, ended_at, error, lease_owner, heartbeat_at, version)
684
688
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1)
685
689
  ON CONFLICT(team_name, run_id) DO UPDATE SET
686
690
  agent_id = excluded.agent_id,
@@ -692,14 +696,14 @@ ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fi
692
696
  error = excluded.error,
693
697
  lease_owner = excluded.lease_owner,
694
698
  heartbeat_at = excluded.heartbeat_at,
695
- version = team_runs.version + 1`,[W,X.id,X.agentId,X.taskId??null,X.status,X.message,X.startedAt?X.startedAt.toISOString():null,X.endedAt?X.endedAt.toISOString():null,X.error??null,X.leaseOwner??null,X.heartbeatAt?X.heartbeatAt.toISOString():null]);for(let X of Z.outcomes??[])this.run(`INSERT INTO team_outcomes (team_name, outcome_id, title, status, schema_json, finalized_at, version)
699
+ version = team_runs.version + 1`,[J,X.id,X.agentId,X.taskId??null,X.status,X.message,X.startedAt?X.startedAt.toISOString():null,X.endedAt?X.endedAt.toISOString():null,X.error??null,X.leaseOwner??null,X.heartbeatAt?X.heartbeatAt.toISOString():null]);for(let X of Z.outcomes??[])this.run(`INSERT INTO team_outcomes (team_name, outcome_id, title, status, schema_json, finalized_at, version)
696
700
  VALUES (?, ?, ?, ?, ?, ?, 1)
697
701
  ON CONFLICT(team_name, outcome_id) DO UPDATE SET
698
702
  title = excluded.title,
699
703
  status = excluded.status,
700
704
  schema_json = excluded.schema_json,
701
705
  finalized_at = excluded.finalized_at,
702
- version = team_outcomes.version + 1`,[W,X.id,X.title,X.status,JSON.stringify({requiredSections:X.requiredSections}),X.finalizedAt?X.finalizedAt.toISOString():null]);for(let X of Z.outcomeFragments??[])this.run(`INSERT INTO team_outcome_fragments (team_name, outcome_id, fragment_id, section, source_agent_id, source_run_id, content, status, reviewed_by, reviewed_at, version)
706
+ version = team_outcomes.version + 1`,[J,X.id,X.title,X.status,JSON.stringify({requiredSections:X.requiredSections}),X.finalizedAt?X.finalizedAt.toISOString():null]);for(let X of Z.outcomeFragments??[])this.run(`INSERT INTO team_outcome_fragments (team_name, outcome_id, fragment_id, section, source_agent_id, source_run_id, content, status, reviewed_by, reviewed_at, version)
703
707
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1)
704
708
  ON CONFLICT(team_name, fragment_id) DO UPDATE SET
705
709
  outcome_id = excluded.outcome_id,
@@ -710,43 +714,43 @@ ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fi
710
714
  status = excluded.status,
711
715
  reviewed_by = excluded.reviewed_by,
712
716
  reviewed_at = excluded.reviewed_at,
713
- version = team_outcome_fragments.version + 1`,[W,X.outcomeId,X.id,X.section,X.sourceAgentId,X.sourceRunId??null,X.content,X.status,X.reviewedBy??null,X.reviewedAt?X.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,Z){let Q=n2($),W=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[Q]);if(W.length===0)return[];let J=rW();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
714
- WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,J,Q]),W.map((X)=>X.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function gG($={}){try{let Z=new q4($);return Z.init(),Z}catch{let Z=new X9({teamDir:$.teamDir});return Z.init(),Z}}function Y9($,Z){return lw($,Z)}function rw($,Z){let Q=Z?.["*"]??{},W=Z?.[$]??{};return{...Q,...W}.enabled!==!1}function iw($,Z){return $.filter((Q)=>rw(Q.name,Z))}function iW($,Z){return k1(iw($,Z))}var nw={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 aw($){let Z=$.trim().toLowerCase();return nw[Z]??Z}function sw($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(aw));if(Z.skills!==void 0)Q.add("skills");return $.filter((W)=>Q.has(W.name))}function mG(){return`team-${pw(5)}`}function j9($,Z,Q,W,J,X,Y,j){let V=e0[u1({mode:Q})],B=_8(Z,W,Q,J??L8);return iW(C8({cwd:$,...V,enableSkills:!!Y,...B,executors:{...Y?{skills:Y}:{},...j??{}}}),X)}function ow($){return j9($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,tw,$.toolExecutors).some((Z)=>Z.name==="skills")}var tw=async()=>"";async function ew($){let Z=Z0();if(!w$({filePath:Z}))return{tools:[]};let Q=new I8({clientFactory:G5({settingsPath:Z})}),W;try{W=await k8(Q,{filePath:Z})}catch(j){await Q.dispose().catch(()=>{});let V=j instanceof Error?j.message:String(j);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let J=W.filter((j)=>j.disabled!==!0),X=await Promise.allSettled(J.map((j)=>F5({serverName:j.name,provider:Q}))),Y=[];for(let[j,V]of X.entries())if(V.status==="fulfilled")Y.push(...V.value);else{let B=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${J[j].name}", skipping: ${B}`)}return{tools:Y,shutdown:async()=>{await Q.dispose()}}}function $P($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function ZP($){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 QP($){let Z=e0[u1({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??Z.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??Z.enableAgentTeams??!0,disableMcpSettingsTools:$.disableMcpSettingsTools===!0,yolo:$.yolo===!0,missionLogIntervalSteps:typeof $.missionLogIntervalSteps==="number"&&Number.isFinite($.missionLogIntervalSteps)?$.missionLogIntervalSteps:3,missionLogIntervalMs:typeof $.missionLogIntervalMs==="number"&&Number.isFinite($.missionLogIntervalMs)?$.missionLogIntervalMs:120000}}class V9{teamRuntimeEntries=new Map;async build($){let{config:Z,hooks:Q,extensions:W,logger:J,telemetry:X,createSpawnTool:Y,onTeamRestored:j,userInstructionService:V,configExtensions:B,toolExecutors:H}=$,G=$.onTeamEvent??(()=>{}),K=QP(Z),F=Z.workspaceRoot??Z.cwd,A=$.toolPolicies??Z.toolPolicies,L=K1(),f=[],D=Z.teamName?.trim()||mG(),U=Z.sessionId?.trim()||D,T=K.enableSpawnAgent?h5({workspaceRoot:F}):{configs:[],errors:[]},q=T.configs.some((x)=>x.skills!==void 0),z=Y9(B,"rules"),_=Y9(B,"skills"),M=_||q,E=Y9(B,"workflows"),P=Y9(B,"plugins"),c=z||_||E,n=!1,a=Boolean(V),t=V,p0;for(let x of T.errors)(J??Z.logger)?.log?.(`[agents] Failed to load agent config at ${x.path}: ${x.error.message}`);if(!t&&(c||q))t=C2({skills:M?{workspacePath:F,includePluginSkills:P,pluginSkillDirectories:P?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(t)await t.start().catch(()=>{});let K$=K.enableTools&&_&&Boolean(t)&&t?.hasConfiguredSkills(Z.skills)===!0&&ow({cwd:Z.cwd,providerId:Z.providerId,mode:K.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:A,toolExecutors:H}),d=t&&c?t.createExtension({includeRules:z,includeSkills:_,includeWorkflows:E,registerSkillsTool:K$,allowedSkillNames:Z.skills}):void 0,X1=d?[...W??Z.extensions??[],d]:W??Z.extensions;if(K.enableTools){if(f.push(...j9(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,H)),!K.disableMcpSettingsTools){let x=await ew(Z.logger);f.push(...x.tools),p0=x.shutdown}}let N,X0=K.enableAgentTeams?gG():void 0,Y0=X0?.loadRuntime(U),R0=Y0?.state,Z2=Y0?.teammates??[],Y1=new Map(Z2.map((x)=>[x.agentId,x])),t0=Z.sessionId||D,$8,Q2=[],I4=!1,j1=R2({providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey??"",baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxTokensPerTurn:Z.maxTokensPerTurn,maxIterations:Z.maxIterations,hooks:Q,extensions:X1,logger:J??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(K.enableSpawnAgent){if(T.configs.length>0)f.push(...iW(I5({configProvider:j1,agents:T.configs,createSubAgentTools:(x)=>K.enableTools?sw(j9(Z.cwd,x.providerId??Z.providerId,K.mode,x.modelId??Z.modelId,Z.toolRoutingRules,A,x.skills!==void 0&&t?.createSkillsExecutor?t.createSkillsExecutor(x.skills):void 0,H),x):[],hookErrorMode:Z.hookErrorMode,toolPolicies:A,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),A))}if(!this.teamRuntimeEntries.has(t0))this.teamRuntimeEntries.set(t0,{delegatedAgentConfigProvider:j1});let x4=()=>{if(!K.enableAgentTeams)return;let x=this.teamRuntimeEntries.get(t0)??{delegatedAgentConfigProvider:j1};if(this.teamRuntimeEntries.set(t0,x),N=x.runtime,!N){if(N=new H4({teamName:D,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:K.missionLogIntervalSteps,missionLogIntervalMs:K.missionLogIntervalMs,onTeamEvent:(Q0)=>{if(G(Q0),N&&X0){if(Q0.type==="teammate_spawned"&&Q0.teammate?.rolePrompt){let V1={agentId:Q0.agentId,rolePrompt:Q0.teammate.rolePrompt,modelId:Q0.teammate.modelId,maxIterations:Q0.teammate.maxIterations};Y1.set(V1.agentId,V1)}if(Q0.type==="teammate_shutdown"&&!ZP(Q0.reason))Y1.delete(Q0.agentId);X0.handleTeamEvent(U,Q0),X0.persistRuntime(U,N.exportState(),Array.from(Y1.values()))}}}),R0)N.hydrateState(R0),I4=!0;x.runtime=N}if(!n){if(!N)return;n=!0;let Q0=Q5({runtime:N,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(R0),restoredTeammates:Z2,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(V1)=>{Q2=V1,$8?.addTools(V1)},createBaseTools:K.enableTools?()=>j9(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,H):void 0,teammateConfigProvider:j1});if(I4)N.recoverActiveRuns("runtime_recovered");if(Q0.restoredFromPersistence)j?.();f.push(...Q0.tools)}return N};if(K.enableSpawnAgent&&Y){let x=Y();f.push({...x,execute:async(Q0,V1)=>{return x4(),x.execute(Q0,V1)}})}if(K.enableAgentTeams)x4();let W2=iW(f,A),r9=W2.some((x)=>x.name==="submit_and_exit"&&x.lifecycle?.completesRun===!0),g4=K.enableAgentTeams?()=>{let x=this.teamRuntimeEntries.get(t0)?.runtime;if(!x)return;let Q0=x.listTasks(),V1=Q0.some((C1)=>C1.status==="in_progress"||C1.status==="pending"),FJ=x.listRuns({}),TA=FJ.some((C1)=>C1.status==="running"||C1.status==="queued");if(V1||TA){let C1=Q0.filter((P0)=>P0.status==="in_progress"||P0.status==="pending").map((P0)=>`${P0.id} (${P0.status}): ${P0.title}`).join(", "),AJ=FJ.filter((P0)=>P0.status==="running"||P0.status==="queued").map((P0)=>`${P0.id} (${P0.status})`).join(", "),i9=[];if(C1)i9.push(`Unfinished tasks: ${C1}`);if(AJ)i9.push(`Active runs: ${AJ}`);return`[SYSTEM] You still have team obligations. ${i9.join(". ")}. Use team_run_task to delegate work, or team_task with action=complete to mark tasks done, or team_await_runs to wait for active runs. Do NOT stop until all tasks are completed.`}return}:void 0,zA=r9?{requireCompletionTool:!0,...g4?{completionGuard:g4}:{}}:g4?{completionGuard:g4}:void 0;return{tools:W2,logger:J??Z.logger,telemetry:X??Z.telemetry,teamRuntime:N,teamRestoredFromPersistence:Boolean(R0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(t0)?.delegatedAgentConfigProvider??j1,extensions:X1,completionPolicy:zA,registerLeadAgent:(x)=>{if($8=x,Q2.length>0)x.addTools(k1(Q2,[...L]))},shutdown:async(x)=>{if($P(N,x),this.teamRuntimeEntries.delete(t0),await p0?.(),!a)t?.stop()}}}}function WP($,Z){let Q=$?.expiresAt,W=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===W}class B9 extends Error{providerId;constructor($){super(`OAuth credentials for provider "${$}" are no longer valid. Re-run authentication for this provider.`);this.name="OAuthReauthRequiredError",this.providerId=$}}class nW{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new Y$,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=H0($.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=H0($);if(!W)return null;let J=this.providerSettingsManager.getProviderSettings(Z);if(!J)return null;let X=wZ($,J);if(!X)return null;let Y=await W.refresh({settings:J,credentials:X,forceRefresh:Q,telemetry:this.telemetry});if(!Y)throw new B9($);let j=X8({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:Y,setLastUsed:!1,save:!1}),V=!WP(J.auth,j.auth);if(V)this.providerSettingsManager.saveProviderSettings(j,{setLastUsed:!1,tokenSource:"oauth"});return{apiKey:W.getApiKey(j)??Y.access,accountId:Y.accountId,refreshed:V}}}import{normalizeUserInput as JP}from"@cline/shared";import{nanoid as XP}from"nanoid";class vG{list($){return $?v0($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((V)=>V.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:v0($),updated:!1};let J=$.pendingPrompts[W];if(!J)return{sessionId:Z.sessionId,prompts:v0($),updated:!1};let X=Z.prompt===void 0?J.prompt:JP(Z.prompt).trim();if(!X)throw Error("prompt cannot be empty");let Y=Z.delivery??J.delivery,j={...J,prompt:X,mode:Z.mode??J.mode,delivery:Y};return $.pendingPrompts.splice(W,1),YP($,j,W,J.delivery),{sessionId:Z.sessionId,prompts:v0($),prompt:H9(j),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),W=$.pendingPrompts.findIndex((X)=>X.id===Q);if(W<0)return{sessionId:Z.sessionId,prompts:v0($),removed:!1};let[J]=$.pendingPrompts.splice(W,1);return{sessionId:Z.sessionId,prompts:v0($),prompt:J?H9(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),B={...V,prompt:Q,mode:W??V.mode,userImages:X??V.userImages,userFiles:Y??V.userFiles};if(J==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...B,delivery:"steer"});else $.pendingPrompts.push(B)}else{let V={id:`pending_${Date.now()}_${XP(5)}`,prompt:Q,mode:W,delivery:J,userImages:X,userFiles:Y};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return v0($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((W)=>W.delivery==="steer");if(Z<0)return{prompts:v0($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:v0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:v0($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),v0($)}clear($){return $.pendingPrompts.length=0,[]}}class aW{deps;service=new vG;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}delete($){let Z=this.deps.getSession($.sessionId);if(!Z||Z.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}enqueue($,Z){let Q=this.deps.getSession($);if(!Q||Q.aborting)return;this.service.enqueue(Q,Z),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let Z=this.deps.getSession($);if(!Z)return;let{entry:Q}=this.service.consumeSteer(Z);if(!Q)return;return this.emitPrompts(Z),this.emitSubmitted(Z,Q),Q}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:v0($)}})}scheduleDrain($,Z){if(Z.pendingPrompts.length===0||Z.aborting||Z.drainingPendingPrompts||!Z.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let Z=this.deps.getSession($);if(!Z)return;if(Z.aborting||Z.drainingPendingPrompts)return;if(!Z.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(Z);if(!Q)return;this.emitPrompts(Z),this.emitSubmitted(Z,Q),Z.drainingPendingPrompts=!0;let W=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{W=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,W&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=H9(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 H9($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function v0($){return $.pendingPrompts.map(H9)}function YP($,Z,Q,W){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(W==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}G0();class oW{deps;constructor($){this.deps=$}dispatchAgentEvent($,Z,Q){let W=this.deps.getSession($),J={sessionId:$,config:Z,liveSession:W,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},X=NW(Q),Y=!!W&&(!X.agentId||X.agentId===sW(W.agent));CW(J,Q,Y?{isPrimaryAgentEvent:!0,agentId:sW(W.agent),conversationId:W.agent.getConversationId(),...W?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(BW(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};CW(W,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let W=q1({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:sW(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(W)f$(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...W})}}if(await HW($,Z,this.deps.invokeBackendOptional),Q)GW(Q,$,Z,this.deps.emit)}async handlePluginEvent($,Z,Q){if(Z.name==="plugin_log"){this.handlePluginLog($,Z.payload);return}if(Z.name==="automation_event"){let V=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!V)return;let B=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!B)return;await V.ingestEvent(B);return}if(Z.name!=="steer_message"&&Z.name!=="queue_message"&&Z.name!=="pending_prompt")return;let W=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0,J=typeof W?.sessionId==="string"&&W.sessionId.trim().length>0?W.sessionId.trim():$,X=typeof W?.prompt==="string"?W.prompt.trim():"";if(!X)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":W?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(J,{prompt:X,delivery:Y})}handlePluginLog($,Z,Q){let W=this.deps.getSession($),J=Q??W?.config.extensionContext?.logger??W?.config.logger;if(!J||!Z||typeof Z!=="object")return;let X=Z,Y=typeof X.message==="string"?X.message:"";if(!Y)return;let j=X.metadata&&typeof X.metadata==="object"?{...X.metadata}:{};if(j.sessionId??=$,typeof X.pluginName==="string"&&X.pluginName)j.pluginName=X.pluginName;if(X.level==="debug"){J.debug(Y,j);return}if(X.level==="error"){if(J.error)J.error(Y,j);else J.log(Y,{...j,severity:"error"});return}J.log(Y,j)}}function sW($){return $.getAgentId()}function tW($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:W$($.config),teamName:$.config.teamName?.trim()||void 0,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,parentSessionId:typeof $.sessionMetadata?.parentSessionId==="string"?$.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof $.sessionMetadata?.parentAgentId==="string"?$.sessionMetadata.parentAgentId:void 0,agentId:typeof $.sessionMetadata?.agentId==="string"?$.sessionMetadata.agentId:void 0,conversationId:typeof $.sessionMetadata?.conversationId==="string"?$.sessionMetadata.conversationId:void 0,isSubagent:typeof $.sessionMetadata?.isSubagent==="boolean"?$.sessionMetadata.isSubagent:!1,prompt:$.pendingPrompt,metadata:$.sessionMetadata,messagesPath:$.artifacts?.messagesPath,updatedAt:$.updatedAt??$.endedAt??$.startedAt}}function eW($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function cG($,Z,...Q){let W=eW($,Z);if(!W)throw Error(`session service method not available: ${Z}`);return Promise.resolve(W.apply($,Q))}async function uG($,Z,...Q){let W=eW($,Z);if(!W)return;await Promise.resolve(W.apply($,Q))}async function dG($,Z,...Q){let W=eW($,Z);if(!W)return;return await Promise.resolve(W.apply($,Q))}r0();G0();function $3($,Z,Q){return{onSubAgentEvent:(W)=>$.onAgentEvent(Q,Z,W),onSubAgentStart:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(W.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let X=q1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId});if(X)f$(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...X});d4(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:W.parentAgentId,agentId:W.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",Q,W)},onSubAgentEnd:(W)=>{let J=$.getSession(Q)?.runtime.teamRuntime,X=$.subAgentStarts.get(W.subAgentId),Y=X?Date.now()-X.startedAt:0,j=W.result?.text?W.result.text.split(`
715
- `).length:0;d4(Z.telemetry,{event:"ended",ulid:Q,durationMs:Y,outputLines:j,errorMessage:W.error?String(W.error):void 0,agentId:W.subAgentId,parentId:W.parentAgentId,...q1({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:W.parentAgentId})}),$.subAgentStarts.delete(W.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,W)}}}function Z3($,Z,Q,W){let J=$3($,Z,Q);return N2({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let Y=Z.enableTools?C8({cwd:Z.cwd,...e0[u1({mode:Z.mode})],executors:W}):[];if(Z.enableSpawnAgent)Y.push(Z3($,Z,Q,W));return k1(Y)},...J})}import{readFile as jP,stat as VP}from"node:fs/promises";var BP=20480000;async function lG($){let Z=await VP($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>BP)throw Error("File is too large to read into context.");let Q=await jP($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var pG=5000;function M4($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function DP($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=M4(Z.inputTokens),W=M4(Z.outputTokens),J=M4(Z.cacheReadTokens),X=M4(Z.cacheWriteTokens),Y=M4(Z.totalCost);if(Q===void 0||W===void 0||J===void 0||X===void 0||Y===void 0)return;return{inputTokens:Q,outputTokens:W,cacheReadTokens:J,cacheWriteTokens:X,totalCost:Y}}function LP($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}class j${runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new $4;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new r2;constructor($){let Z=GP();if(Z)UP(Z);let Q=m0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new V9,this.createAgentInstance=$.createAgent??((W)=>new l1(W)),this.defaultCapabilities=O0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new Y$,this.oauthTokenManager=$.oauthTokenManager??new nW({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new aW({getSession:(W)=>this.sessions.get(W),emit:(W)=>this.emit(W),send:(W)=>this.runTurn(W)}),this.pendingPrompts={list:async(W)=>this.pendingPromptsController.list(W.sessionId),update:async(W)=>this.pendingPromptsController.update(W),delete:async(W)=>this.pendingPromptsController.delete(W)},this.eventBridge=new oW({getSession:(W)=>this.sessions.get(W),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(W)=>this.emit(W),persistMessages:(W,J,X)=>{this.invoke("persistSessionMessages",W,J,X)},enqueuePendingPrompt:(W,J)=>this.pendingPromptsController.enqueue(W,J),invokeBackendOptional:(W,...J)=>this.invokeOptional(W,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.source??T0.CLI,Q=$0(),W=$.config.sessionId?.trim()??"",J=W||FP(),X=await this.applyInitialOAuthCredentials($),Y=X.initialMessages??[],j=Y.length>0?l5(Y):_0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let B=Q3(V,J),H=Q3(B,`${J}.messages.json`),G=Q3(B,`${J}.json`),K=W$($.config),F=N0.parse({version:1,session_id:J,source:Z,pid:process.pid,started_at:Q,status:"running",interactive:$.interactive===!0,provider:X.config.providerId,model:X.config.modelId,cwd:X.config.cwd,workspace_root:K,team_name:X.config.teamName,enable_tools:X.config.enableTools,enable_spawn:X.config.enableSpawnAgent,enable_teams:X.config.enableAgentTeams,prompt:X.prompt?.trim()||void 0,messages_path:H}),A;if(W.length>0&&Y.length>0&&!X.prompt?.trim()){let N=await this.invokeOptionalValue("readSessionManifest",J);if(N)F=N,A={manifestPath:G,messagesPath:N.messages_path||H,manifest:N}}let f=await this.seedAggregateUsageFromArtifacts({initialUsage:j,sessionDir:B,rootMessagesPath:A?.messagesPath??H,manifest:F});this.usageBySession.set(J,j),this.aggregateUsageBySession.set(J,f);let D=O0(this.defaultCapabilities,$.capabilities),U=D?.toolExecutors??this.toolExecutors,T=$.localRuntime,q=T?.extensionContext?.logger??T?.logger,z=T?.extensionContext?.automation,_,M={getSession:(N)=>this.sessions.get(N),subAgentStarts:this.subAgentStarts,onAgentEvent:(N,X0,Y0)=>this.eventBridge.dispatchAgentEvent(N,X0,Y0),invokeBackendOptional:(N,...X0)=>this.invokeOptional(N,...X0)};_=await YG({input:X,localRuntime:$.localRuntime,sessionId:J,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:D,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(N)=>{if(N.name==="plugin_log"){this.eventBridge.handlePluginLog(J,N.payload,q);return}this.eventBridge.handlePluginEvent(J,N,z)},onTeamEvent:(N)=>{this.eventBridge.handleTeamEvent(J,N),_.config.onTeamEvent?.(N)},createSpawnTool:()=>Z3(M,_.config,J,U),createSubAgentLifecycleCallbacks:(N)=>$3(M,N,J),readSessionMetadata:async()=>(await this.getSession(J))?.metadata,writeSessionMetadata:async(N)=>{await this.persistSessionMetadata(J,()=>N)}});let E=await this.runtimeBuilder.build(_.runtimeBuilderInput),P=_.config,c=_.providerConfig;if(E.teamRuntime&&!P.teamName?.trim())P.teamName=E.teamRuntime.getTeamName();let n=[...E.tools,...P.extraTools??[]],a=E.extensions??_.extensions,t={sessionId:J,providerId:c.providerId,modelId:c.modelId,apiKey:c.apiKey,baseUrl:c.baseUrl,headers:c.headers,knownModels:c.knownModels,providerConfig:c,thinking:P.thinking,reasoningEffort:P.reasoningEffort??c.reasoningEffort,maxTokensPerTurn:P.maxTokensPerTurn,systemPrompt:P.systemPrompt,maxIterations:P.maxIterations,execution:P.execution,prepareTurn:EW(P),tools:n,hooks:_.hooks,extensions:a,hookErrorMode:P.hookErrorMode,initialMessages:_.effectiveInput.initialMessages,userFileContentLoader:lG,toolPolicies:_.toolPolicies,requestToolApproval:_.requestToolApproval?async(N)=>{let X0=_.requestToolApproval,Y0=this.sessions.get(J);if(Y0)await this.markTurnPending(Y0);try{if(!X0)return{approved:!1,reason:"Tool approval callback is not configured."};return await X0(N)}finally{let R0=this.sessions.get(J);if(R0?.status==="pending")await this.markTurnRunning(R0)}}:void 0,telemetry:P.telemetry,onConsecutiveMistakeLimitReached:P.onConsecutiveMistakeLimitReached,completionPolicy:E.completionPolicy,consumePendingUserMessage:()=>{let N=this.pendingPromptsController.consumeSteer(J);return N?K4(N.prompt,N.mode??P.mode):void 0},logger:E.logger??P.logger,extensionContext:P.extensionContext,onEvent:(N)=>this.eventBridge.dispatchAgentEvent(J,P,N)};t.hooks={...t.hooks,onEvent:async(N)=>{if(await _.hooks?.onEvent?.(N),N.type!=="assistant-message")return;let X0=this.sessions.get(J);if(!X0)return;let Y0=X0.agent.getMessages();try{await this.invoke("persistSessionMessages",J,Y0,P.systemPrompt)}catch(R0){P.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:J,error:R0}),i$(P.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:R0,severity:"warn",handled:!0,context:{sessionId:J,providerId:P.providerId,modelId:P.modelId}})}}};let p0=this.createAgentInstance(t);if(t.onEvent)p0.subscribeEvents(t.onEvent);E.registerLeadAgent?.(p0);let K$=q1({agentId:p0.getAgentId(),conversationId:p0.getConversationId(),teamId:E.teamRuntime?.getTeamId(),teamName:E.teamRuntime?.getTeamName(),teamRole:E.teamRuntime?"lead":void 0});if(jG(P,J,W.length>0,K,K$),K$)f$(P.telemetry,{ulid:J,modelId:P.modelId,provider:P.providerId,...K$});if(E.teamRuntime)VZ(P.telemetry,{ulid:J,teamId:E.teamRuntime.getTeamId(),teamName:E.teamRuntime.getTeamName(),leadAgentId:p0.getAgentId(),restoredFromPersistence:E.teamRestoredFromPersistence===!0});let d={sessionId:J,config:P,sessionMetadata:X.sessionMetadata,...A?{artifacts:A}:{},source:Z,startedAt:A?.manifest.started_at??Q,updatedAt:A?.manifest.ended_at??A?.manifest.started_at??Q,pendingPrompt:F.prompt,runtime:E,agent:p0,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:_.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(this.sessions.set(J,d),this.emitStatus(J,"running"),Y.length>0&&!A){if(await this.ensureSessionPersisted(d),await this.invoke("persistSessionMessages",d.sessionId,Y,d.config.systemPrompt),!X.prompt?.trim())await this.updateStatus(d,"completed",0)}let X1;try{if(X.prompt?.trim())if(X1=await this.executeTurn(d,{prompt:X.prompt,userImages:X.userImages,userFiles:X.userFiles}),!d.interactive)await this.finalizeSingleRun(d,X1.finishReason);else await this.completeInteractiveTurn(d,X1.finishReason)}catch(N){if(d.interactive&&d.aborting)X1=await this.completeAbortedInteractiveTurn(d);else{i$(d.config.telemetry,{component:"core",operation:"session.start",error:N,severity:"error",handled:!1,context:{sessionId:d.sessionId,providerId:d.config.providerId,modelId:d.config.modelId}});try{await this.failSession(d)}catch(X0){d.config.logger?.error?.("Session failure cleanup threw",{sessionId:d.sessionId,error:X0})}throw N}}return{sessionId:J,manifest:F,manifestPath:G,messagesPath:H,result:X1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let W=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...W?{sessionMetadata:W}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),W=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:W??"immediate"}}),W==="queue"||W==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:W,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,J.finishReason);else await this.completeInteractiveTurn(Z,J.finishReason);if(J.finishReason==="error"||J.finishReason==="aborted")return J;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),J}catch(J){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw i$(Z.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),J}}async getAccumulatedUsage($){let Z=I7(this.usageBySession.get($)),Q=I7(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,this.pendingPromptsController.clearAborted(Q),Q.agent.abort(Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!j0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!j0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return tW(Z);let Q=$.trim();if(!Q)return;let W=await this.getRow(Q);if(W)return t8(W);let J=await this.readManifest(Q);return J?m7(J):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(t8),W=new Set(Q.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(W.has(J.sessionId))continue;Q.unshift(tW(J))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return n1(Q.messagesPath);let W=await this.readManifest(Z);return n1(W?.messages_path)}async dispatchHookEvent($){await jB($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){let Q=this.getSessionOrThrow($);Q.config.modelId=Z,Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:Z}),Q.agent.updateConnection({modelId:Z})}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),W=Q.prompt.trim();if(!W)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=W;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let J=await this.executeAgentTurn($,W,Q.userImages,Q.userFiles);while(KW($,J.finishReason)){let X=await FW($);if(X.length===0)break;let Y=AW($,X);J=await this.executeAgentTurn($,Y)}return J}async completeInteractiveTurn($,Z){if(G4($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),W=_0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:W}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:W,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,W){let J=$.started||$.agent.getMessages().length>0,X=$.persistedMessages??$.agent.getMessages(),Y=this.usageBySession.get($.sessionId)??_0(),j=this.aggregateUsageBySession.get($.sessionId)??Y;$.turnUsageBaseline=Y,$.turnAggregateUsageBaseline=j,$.turnPrimaryUsage=_0(),$.turnUsageByAgent=new Map,QZ($.config.telemetry,$.sessionId,$.config.mode),Z8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(Z,Q,W):()=>$.agent.run(Z,Q,W),B=await this.runWithAuthRetry($,V,X);$.started=!0;let H=T5(B.messages,B,X);$.persistedMessages=H;let G=d5($.turnUsageByAgent?.values()??[]),K=f0(Y,B.usage),F=f0(f0(_0(),B.usage),G),A=f0(j,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(L)=>({...L??{},totalCost:K.totalCost,aggregatedAgentsCost:A.totalCost,usage:K,aggregateUsage:A})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,B),B}catch(V){throw i$($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((W)=>W.name===L0.SUBMIT_AND_EXIT&&W.error===void 0))return;$.submitAndExitObserved=!0,c4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,Z){let Q=W$($.config),W=fP(Z.prompt).trim();if(!W)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let J=await l6(W,Q);VG($.config.telemetry,J);let X=K4(J.prompt,Z.mode??$.config.mode),Y=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),j=this.resolveAbsoluteFilePaths(Q,J.matchedFiles),V=Array.from(new Set([...Y,...j]));return{prompt:X,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=W$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:Z,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,Z){let Q=this.sessions.get($),W=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,J=Z(W?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Q.sessionMetadata=J,Q.artifacts.manifest.metadata=J}async finalizeSingleRun($,Z){if(G4($))return;let Q=Z==="aborted"||$.aborting,W=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":W?"failed":"completed",exitCode:W?1:0,shutdownReason:W?"session_error":"session_complete",endReason:Z})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(Z.status==="completed"&&!$.submitAndExitObserved)c4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});m5($);let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),i$($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,Z.status,Z.exitCode)}catch(J){W("update_status",J)}try{await $.agent.shutdown(Z.shutdownReason)}catch(J){W("agent_shutdown",J)}}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){let Q=[],W=(J,X)=>{Q.push(X),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:X,severity:"warn"}),i$($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(Z)}catch(J){W("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(J){W("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){W("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let W=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!W.updated)return;let J=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(J.status=Z,j0(Z))delete J.ended_at,J.exit_code=null;else J.ended_at=W.endedAt??$0(),J.exit_code=typeof Q==="number"?Q:null;$.artifacts.manifest=J,$.status=Z,$.updatedAt=W.endedAt??$0(),$.endedAt=j0(Z)?null:J.ended_at,$.exitCode=J.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,J),this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(W){if(!J8($.config.providerId)||!AP(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 B9)throw Error(`${W.providerId} requires re-authentication.`);throw W}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new P$($);throw i$(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((W)=>W.trim()).filter((W)=>W.length>0).map((W)=>KP(W)?W:W3($,W));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return q1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let Z=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=f0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let W=W3(Z),J=`${Q}.messages.json`,X;try{X=HP($)}catch{return _0()}let Y=_0();for(let j of X){if(!j.endsWith(".messages.json"))continue;if(j===J)continue;let V=W3($,j);if(V===W)continue;let B=await n1(V);if(B.length===0)continue;Y=f0(Y,l5(B))}return Y}withPersistedAggregateUsageFloor($,Z){let Q=DP(Z.metadata?.aggregateUsage);if(Q)return LP($,Q);let W=Z.metadata?.aggregatedAgentsCost;if(typeof W!=="number"||!Number.isFinite(W)||W<=$.totalCost)return $;return{...$,totalCost:W}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:t1({session:Z,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),pG))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(pG)).find((W)=>W.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return cG(this.sessionService,$,...Z)}invokeOptional($,...Z){return uG(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return dG(this.sessionService,$,...Z)}}function _P($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let Z=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(Z==="local"||Z==="hub"||Z==="remote")return Z;return"auto"}var R4,E4;function zP($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;PB(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function TP($){await $.reconcileDeadSessions?.().catch(()=>{})}function nG($){try{let Z=new Z$;return Z.init(),new Q$(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),iG($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new LW(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function rG($,Z,Q){return new j$({sessionService:Q??$.sessionService??nG($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function OP($){if(R4)return R4;if(E4)return await E4;return E4=(async()=>{return R4=nG($),await TP(R4),R4})().finally(()=>{E4=void 0}),await E4}async function G9($){let Z=m0($.distinctId);$.telemetry?.setDistinctId(Z);let Q=_P($);if(zP(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 w5({endpoint:W,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let W=$.hub?.endpoint?.trim(),J=W||await X4({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!J)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:J,explicitEndpoint:W||void 0}),new u$({url:J,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Q==="auto"){let W=await a7({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(W){$.logger?.log("Using discovered local hub runtime host",{url:W});let J=new u$({url:W,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await J.connect(),J}catch(X){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:X}),iG($.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"}),rG($,Z)}return rG($,Z)}import{execFile as qP}from"node:child_process";import*as sG from"node:fs/promises";import*as a2 from"node:path";import{promisify as MP}from"node:util";var RP=MP(qP),EP=52428800;async function K9($,Z){let{stdout:Q}=await RP("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:EP,encoding:"utf8"});return Q}function aG($){return $.split("\x00").filter(Boolean)}function oG($,Z){let Q=a2.resolve($,Z),W=a2.relative($,Q);if(W.startsWith("..")||a2.isAbsolute(W))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function NP($,Z,Q){try{return await K9($,["show",`${Z}:${Q}`])}catch{return""}}async function CP($,Z){try{return await sG.readFile(oG($,Z),"utf8")}catch{return""}}async function wP($,Z){await K9($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,W]=await Promise.all([K9($,["diff","--name-only","-z",Z.ref,"--"]),K9($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...aG(Q),...aG(W)])].sort((X,Y)=>X.localeCompare(Y))}function tG($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=J9(O4($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let W=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!W)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Q,cwd:W}}async function eG($,Z){let Q=await wP($,Z);return(await Promise.all(Q.map(async(J)=>{let[X,Y]=await Promise.all([NP($,Z.ref,J),CP($,J)]);return{filePath:oG($,J),leftContent:X,rightContent:Y}}))).filter((J)=>J.leftContent!==J.rightContent)}async function J3($){let Z=tG($),Q=await eG(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}import{existsSync as PP,mkdirSync as SP,readFileSync as bP,writeFileSync as yP}from"node:fs";import{dirname as hP}from"node:path";import{FEATURE_FLAGS as $K,FeatureFlagDefaultValue as X3}from"@cline/shared";var kP=3600000,IP=604800000,ZK=1;class N4{provider;telemetry;logger;cacheTtlMs;cacheFilePath;persistentCacheMaxAgeMs;context;cache=new Map;cacheInfo={updateTime:0,userId:null};constructor($){this.provider=$.provider,this.telemetry=$.telemetry,this.logger=$.logger,this.cacheTtlMs=$.cacheTtlMs??kP,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??IP,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:$K.length>0?$K: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||!PP(this.cacheFilePath))return;let $=JSON.parse(bP(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==ZK||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;SP(hP(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:ZK,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};yP(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
716
- `,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let Z=new Map;for(let Q of this.getReturnedFlagKeys($)){let W=this.getFeatureFlag(Q);Z.set(Q,W??!1)}this.cache=Z}getFeatureFlag($){try{let Z=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],W=Z??Q??X3[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==W)this.telemetry?.capture({event:I.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return W}catch(Z){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:Z}),X3[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??X3[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,Z){if(process.env.IS_TEST==="true")this.cache.set($,Z)}async dispose(){await this.provider.dispose()}}class C4{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}g2();class Y3{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,Z,Q,W,J,X,Y,j,V,B){this.clientName=Z,this.runtimeAddress=Q,this.host=$,this.prepare=W,this.capabilities=J,this.logger=X,this.telemetry=Y,this.distinctId=j,this.featureFlags=V,this.settings=SV($),this.pendingPrompts=bV($),this.automation=new mZ(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=B?new a8({workspaceRoot:B.workspaceRoot??process.cwd(),specs:{cronSpecsDir:B.cronSpecsDir??B.cronDir,scope:GX(B.cronScope),workspaceRoot:B.workspaceRoot},runtimeHandlers:KX({host:$,getExtensionContext:()=>Y6({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:B.dbPath,logger:B.logger,pollIntervalMs:B.pollIntervalMs,claimLeaseSeconds:B.claimLeaseSeconds,globalMaxConcurrency:B.globalMaxConcurrency,watcherDebounceMs:B.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((H)=>{if(H.type!=="ended")return;this.disposeSessionBootstrap(H.payload.sessionId)})}static async create($={}){let Z=m0($.distinctId),Q=O0($.capabilities),W={...$,capabilities:Q,distinctId:Z},J=await G9(W),X=HX($.automation),Y=$.featureFlags||new N4({provider:new C4,telemetry:$.telemetry,logger:$.logger,context:{distinctId:Z,clientName:$.clientName}}),j=new Y3(J,$.clientName,J.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,Z,Y,X?{...X,logger:$.logger}:void 0);if(X&&X.autoStart!==!1)await j.automation.start();return j}async disposeSessionBootstrap($){let Z=this.activeSessionBootstraps.get($);if(!Z)return;this.activeSessionBootstraps.delete($),await Promise.resolve(Z.dispose?.())}async start($){let Z=yV($),Q=await this.prepare?.(Z);try{let W=Q?await Q.applyToStartSessionInput(Z):Z,J=await this.host.startSession(V7(W,{defaultCapabilities:this.capabilities,withExtensionContext:(X)=>Y6({automationService:this.automationService,automation:this.automation,context:X,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Q)if(await this.host.getSession(J.sessionId))this.activeSessionBootstraps.set(J.sessionId,Q);else await Promise.resolve(Q.dispose?.());return hV({input:W,sessionId:J.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),J}catch(W){throw await Promise.resolve(Q?.dispose?.()),W}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let Z=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(Z.map((Q)=>this.disposeSessionBootstrap(Q)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await v7(this.host,$);list=async($=200,Z={})=>await this.listHistory({...Z,limit:$});delete=async($)=>{let Z=await this.host.deleteSession($);if(Z)await this.disposeSessionBootstrap($);return Z};update=(...$)=>this.host.updateSession(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let Z=$.start?V7($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>Y6({automationService:this.automationService,automation:this.automation,context:Q,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:$.sessionId,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restore:$.restore,start:Z})}async compareCheckpoint($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=await this.host.getSession(Z);if(!Q)throw Error(`Session ${Z} not found`);return J3({session:Q,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,Z){return this.host.subscribe($,Z)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}import{HookEventNameSchema as WK,HookEventPayloadSchema as JK,parseHookEventPayload as A9,resolveHookSessionContext as dP}from"@cline/shared";import{z as n$}from"zod";import{spawn as xP}from"node:child_process";import{augmentNodeCommandForDebug as gP,withResolvedClineBuildEnv as mP}from"@cline/shared";function vP($){let Z=$.trim();if(!Z)return{};let W=Z.split(`
717
- `).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),J=W.length>0?W[W.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse subprocess stdout JSON"}}}function cP($,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 uP($,Z){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((W,J)=>{let X=(Y)=>{Q.off("error",X);let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y)};Q.once("error",X),Q.end(Z,(Y)=>{if(Q.off("error",X),Y){let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){W();return}J(Y);return}W()})})}async function F9($,Z){let Q=gP(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=xP(Q[0],Q.slice(1),{cwd:Z.cwd,env:mP(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(cP(A,Q))})});if(await uP(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="",B=!1,H;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)H=setTimeout(()=>{B=!0,J.kill("SIGKILL")},Z.timeoutMs);J.once("close",(F)=>{if(H)clearTimeout(H);let{parsedJson:A,parseError:L}=vP(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:L,timedOut:B})})});return await Promise.race([G,Y])}var lP=n$.object({contextModification:n$.string().optional(),cancel:n$.boolean().optional(),review:n$.boolean().optional(),errorMessage:n$.string().optional(),context:n$.string().optional(),overrideInput:n$.unknown().optional()}).passthrough();var pP=["agent","hook"];async function f9($,Z={}){let Q=Z.command??pP;return await F9($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function XK($){return $ instanceof Error?$:Error(String($))}function rP($){if(!$||typeof $!=="object")return;let Z=lP.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 QK($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,W]of Object.entries($))if(typeof W==="string")Z[Q]=W;else Z[Q]=JSON.stringify(W);return Z}function M1($,Z,Q){let W=Q.env??process.env,J=W.CLINE_USER_ID?.trim()||W.USER?.trim()||"unknown",X=Q.cwd||process.cwd();return{clineVersion:W.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:Z.conversationId,sessionContext:dP(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 iP($){return{name:$.name,message:$.message,stack:$.stack}}function nP($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function aP($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function sP($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function oP($){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 tP($){if(!$)return;let Z={};if($.cancel===!0)Z.stop=!0;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}async function a$($,Z){try{let Q=await f9($,{command:Z.command,cwd:Z.cwd,env:Z.env,detached:!0,onSpawn:Z.onSpawn});Z.onDispatch?.({payload:$,result:Q,detached:!0})}catch(Q){Z.onDispatchError?.(XK(Q),$)}}function YK($={}){return{hooks:{beforeRun:async(j)=>{let V=aP(j);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...M1("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await a$(H,$)}else{let H={...M1("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await a$(H,$)}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},B={...M1("tool_call",V,$),hookName:"tool_call",iteration:j.snapshot.iteration,tool_call:{id:j.toolCall.toolCallId,name:j.toolCall.toolName,input:j.input},preToolUse:{toolName:j.toolCall.toolName,parameters:QK(j.input)}};try{let H=await f9(B,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:B,result:H,detached:!1}),H?.timedOut)throw Error("tool_call hook command timed out");if(H?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${H.parseError}`);return tP(rP(H?.parsedJson))}catch(H){$.onDispatchError?.(XK(H),B);return}},afterTool:async(j)=>{let V=oP(j),B={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...M1("tool_result",B,$),hookName:"tool_result",iteration:j.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:QK(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await a$(H,$);return},afterRun:async({snapshot:j,result:V})=>{let B={agentId:j.agentId,conversationId:j.conversationId??j.runId??j.agentId,parentAgentId:j.parentAgentId??null};if(V.status==="completed"){let K={...M1("agent_end",B,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await a$(K,$);return}let H=V.status==="aborted"||nP(V.error?.message)?"agent_abort":"agent_error",G=H==="agent_error"?{...M1(H,B,$),hookName:H,iteration:V.iterations,error:iP(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...M1(H,B,$),hookName:H,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await a$(G,$)},onEvent:async(j)=>{if(j.type!=="message-added"||j.message.role!=="user")return;let V={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},B={...M1("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:sP(j.message.content),attachments:[]}};await a$(B,$)}},shutdown:async({agentId:j,conversationId:V,parentAgentId:B,reason:H})=>{let G={...M1("session_shutdown",{agentId:j,conversationId:V,parentAgentId:B},$),hookName:"session_shutdown",reason:H};await a$(G,$)}}}import{createSessionId as eP}from"@cline/shared";function c0($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function jK($,Z,Q){return{version:$.version,requestId:$.requestId??eP("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class U9{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return c0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return c0($,{schedules:this.schedules.listSchedules({enabled:typeof $.payload?.enabled==="boolean"?$.payload.enabled:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0,tags:Array.isArray($.payload?.tags)?$.payload?.tags:void 0})});case"schedule.get":return c0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return c0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return c0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return c0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return c0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return c0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return c0($,{executions:this.schedules.listScheduleExecutions({scheduleId:typeof $.payload?.scheduleId==="string"?$.payload.scheduleId:void 0,status:typeof $.payload?.status==="string"?$.payload.status:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0})});case"schedule.stats":return c0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return c0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return c0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return jK($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Z){return jK($,"schedule_command_failed",Z instanceof Error?Z.message:String(Z))}}toCreateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:Z}}toUpdateInput($){let Z=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:Z}}}function L9($){return $?new Date($).getTime():void 0}function $S($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function D9($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof Z?.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:L9($.nextRunAt),lastRunAt:L9($.lastRunAt),createdBy:typeof Z?.__hubScheduleCreatedBy==="string"?Z.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:Z?.__hubRuntimeOptions&&typeof Z.__hubRuntimeOptions==="object"&&!Array.isArray(Z.__hubRuntimeOptions)?Z.__hubRuntimeOptions:void 0,metadata:$S($)}}function ZS($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function j3($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:L9($.startedAt),endedAt:L9($.completedAt),status:ZS($.status),errorMessage:$.error}}class _9{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new n8({dbPath:$.dbPath}),this.materializer=new d8({store:this.store}),this.runner=new l8({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,eventPublisher:$.eventPublisher,workspaceRoot:"",logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency})}async start(){if(this.disposed)throw Error("HubScheduleService has been disposed");if(this.started)return;this.started=!0,await this.runner.start()}async stop(){await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,await this.runner.dispose(),this.store.close()}createSchedule($){if(_7($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return D9(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?D9(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>D9(Z))}updateSchedule($,Z){if(Z.cronPattern!==void 0)_7(Z.cronPattern);let Q=this.store.getHubSchedule($);if(!Q)return;let W=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot;if((Z.enabled??Q.enabled)&&!W)throw Error("workspaceRoot is required for enabled schedules");let X=this.store.updateHubSchedule($,{...Z,scheduleId:$});return X?D9(X):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;await this.runner.tick();let Q=this.store.getRun(Z.runId)??Z;return j3(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),j3(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((J)=>{let X=Z??this.store.getSpec(J.specId);if(!X||X.source!=="hub-schedule")return;return j3(J,X.externalId)}).filter((J)=>{if(!J)return!1;return!$.status||J.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,W=0,J=0,X;for(let Y of Z){if(Y.status==="success"||Y.status==="completed")Q+=1;if(!X&&Y.status!=="success"&&Y.status!=="completed")X=Y;if(Y.startedAt&&Y.endedAt)J+=Y.endedAt-Y.startedAt,W+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:W>0?J/W/1000:0,lastFailure:X}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let Z=this.store.getSpec($.specId);if(!Z||Z.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:Z.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:Z.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+Z.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let Z={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(Z).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,W)=>String(Q.nextRunAt).localeCompare(String(W.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:W})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:W}))}}q9();import{resolveClineBuildEnv as MS}from"@cline/shared";function RS($,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 ES="cline-hub-auth.";function NS($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function CS($,Z){let Q=new URL($),W=new URL(Z);return Q.search="",Q.hash="",W.search="",W.hash="",Q.toString()===W.toString()}function HK(){return MS()==="production"?s1():_1()}async function wS($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=HK(),W=await A0(Q.discoveryPath);if(W?.url&&CS($.toString(),W.url))return W.authToken;return}async function PS($={}){let Z=a1($);if(!NS($)){let Q=HK(),W=await A0(Q.discoveryPath);if(W?.url)return W.url}return L1(Z.host,Z.port,Z.pathname)}async function GK($){return await new Promise((Z,Q)=>{(async()=>{let W=new URL($),J=await wS(W);W.hash="";let X=new WebSocket(W.toString(),J?[`${ES}${J}`]:void 0),Y=new Map,j=0;X.addEventListener("open",()=>{Z({send(V){let B=V.requestId??`hub-client-${++j}`;return new Promise((H,G)=>{Y.set(B,{resolve:H,reject:G});let K={kind:"command",envelope:{...V,requestId:B}};X.send(JSON.stringify(K))})},close(){X.close()}})}),X.addEventListener("message",(V)=>{let B=JSON.parse(String(V.data));if(B.kind==="reply"&&B.envelope.requestId){let H=Y.get(B.envelope.requestId);if(H)Y.delete(B.envelope.requestId),H.resolve(B.envelope)}}),X.addEventListener("close",()=>{for(let V of Y.values())V.reject(Error("Hub connection closed"));Y.clear()}),X.addEventListener("error",(V)=>{Q(RS(V,$))})})().catch(Q)})}async function vs($){try{return(await GK($)).close(),!0}catch{return!1}}async function cs($,Z){let Q=await PS($),W=await GK(Q);try{return await W.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{W.close()}}function G3($){return $?JSON.parse(JSON.stringify($)):{}}function M9($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?G3(Z.metadata):void 0;return{sessionId:typeof Z.sessionId==="string"?Z.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function KK($,Z){return $.error?.message??`hub command failed: ${Z}`}function SS($){let Z=G3($);if(typeof Z.error==="string"&&Z.error.trim())return{...Z,error:Z.error.trim()};let Q=Z.result&&typeof Z.result==="object"?Z.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...Z,error:Q.text.trim()};let W=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof W?.message==="string"&&W.message.trim())return{...Z,error:W.message.trim()};return Z}function FK($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function bS($){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 yS($){let Z=G3($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||FK(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||FK(Z)||"",eventType:"schedule.execution.failed",payload:Z};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:Z};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:Z};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:Z};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:Z};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:Z};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:Z};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:Z};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:Z};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:SS($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class hS{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new z1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-session-client",displayName:$.displayName??"hub session client",workspaceRoot:$.workspaceRoot,cwd:$.cwd})}async ensureMetadataApplied(){if(this.metadataApplied||!this.options.metadata){if(!this.options.metadata)await this.client.connect();return}await this.client.connect(),await this.client.command("client.update",{metadata:this.options.metadata}),this.metadataApplied=!0}async connect(){await this.ensureMetadataApplied()}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession($){await this.ensureMetadataApplied();let Z=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),Q=M9(Z.payload);if(!Q?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}}}async sendRuntimeSession($,Z,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:Z.prompt,mode:Z.config.mode,attachments:Z.attachments,delivery:Z.delivery,timeoutSeconds:Z.config.timeoutSeconds},$,Q)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(S$(Q))return;throw Q}return M9(Z.payload)}async readMessages($){let Z=$.trim();if(!Z)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw Error(KK(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(KK(J,"session.restore"));let X=M9(J.payload);if(Q&&!X?.sessionId)throw Error("hub checkpoint restore returned no session id");let Y=Array.isArray(J.payload?.messages)?J.payload.messages:void 0,j=bS(J.payload);return{sessionId:X?.sessionId,startResult:X?.sessionId?{sessionId:X.sessionId,manifestPath:"",messagesPath:X.messagesPath??""}:void 0,...Y?{messages:Y}:{},checkpoint:j}}async listSessions($){await this.ensureMetadataApplied();let Z=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(Z.payload?.sessions)?Z.payload?.sessions:[]).map((W)=>M9({session:W})).filter((W)=>Boolean(W?.sessionId))}async deleteSession($,Z=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:Z})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,Z){let Q=new Set(($.sessionIds??[]).map((J)=>J.trim()).filter(Boolean)),W=this.client.subscribe((J)=>{let X=yS(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 kS{client;constructor($){this.client=new z1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let Z=await this.client.command("session.list",{limit:$});return Array.isArray(Z.payload?.sessions)?Z.payload.sessions:[]}subscribeUI($){return this.client.subscribe((Z)=>{switch(Z.event){case"ui.notify":$.onNotify?.(Z.payload);break;case"ui.show_window":$.onShowWindow?.(Z.payload);break;case"hub.client.registered":$.onClientRegistered?.(Z.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(Z.payload??{});break;case"session.created":$.onSessionCreated?.(Z.payload??{});break;case"session.updated":$.onSessionUpdated?.(Z.payload??{});break;case"session.detached":$.onSessionDetached?.(Z.payload??{});break}})}}import{normalizeProviderId as IS}from"@cline/llms";function xS($){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 gS($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function es($={}){let Z=new j$({sessionService:new Q$(new Z$),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Q){let W=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=await Z.startSession({source:Q.source?.trim()||T0.CLI,interactive:!1,config:{providerId:IS(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:W,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:gS(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:xS(J)}},async abortSession(Q){return await Z.abort(Q,Error("hub schedule abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}import{resolveClineBuildEnv as AF}from"@cline/shared";function mS($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
718
- `).trim()||void 0}var AK=120,K3="...";function F3($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=AK)return Z;let Q=AK-Buffer.byteLength(K3,"utf8");if(Q<=0)return K3;let W="";for(let J of Z){if(Buffer.byteLength(W+J,"utf8")>Q)break;W+=J}return`${W}${K3}`}async function fK($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await n1(Q)].reverse().find((V)=>V.role==="assistant"),X=J?mS(J.content):void 0,Y=$?.workspaceRoot?.trim()||"workspace",j=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():Y;return{title:`Task completed (${Z})`,body:F3(X&&X.length>0?X:j.length>0?j:Y),severity:"info"}}import{captureSdkError as w9,createSessionId as xb}from"@cline/shared";import{createSessionId as dS}from"@cline/shared";import{createSessionId as uS}from"@cline/shared";function vS($){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 cS($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())Z.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())Z.parentAgentId=$.parentAgentId;if($.agentId?.trim())Z.agentId=$.agentId;if($.conversationId?.trim())Z.conversationId=$.conversationId;if($.messagesPath?.trim())Z.messagesPath=$.messagesPath;if($.prompt?.trim())Z.prompt=$.prompt;if($.provider?.trim())Z.provider=$.provider;if($.model?.trim())Z.model=$.model;if($.source?.trim())Z.source=$.source;if(typeof $.pid==="number")Z.pid=$.pid;return Object.keys(Z).length>0?Z:void 0}function R9($,Z,Q,W){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:vS($.status),participants:Z?[...Z.participants.values()]:[],metadata:cS($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...Q?{usage:{...Q}}:{},...W?{aggregateUsage:{...W}}:{}}}function g($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function h($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function E9($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function w0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function o$($,Z,Q){return{version:"v1",event:$,eventId:uS("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function u0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let W=await $.sessionHost.getAccumulatedUsage?.(Z);return R9(Q,$.sessionState.get(Z),W?.usage,W?.aggregateUsage)}async function d0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[W,J]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return t1({session:Q,messages:W,usage:J?.usage,aggregateUsage:J?.aggregateUsage})}function N9($,Z,Q,W,J={}){let X=$.sessionState.get(Z);if(X){if(J.interactive!==void 0)X.interactive=J.interactive;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:W});return X}let Y={createdByClientId:Q,interactive:J.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:W}]])};return $.sessionState.set(Z,Y),Y}async function A3($,Z){let Q=dS("approval_"),W=Z.sessionId;if($.sessionState.get(W)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((X)=>{$.pendingApprovals.set(Q,{sessionId:W,resolve:X}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:Z.sessionId,agentId:Z.agentId,conversationId:Z.conversationId,iteration:Z.iteration,toolCallId:Z.toolCallId,toolName:Z.toolName,inputJson:JSON.stringify(Z.input??null),policy:Z.policy},W))})}function f3($,Z,Q){let W=$.pendingApprovals.get(Z);if(!W)return;return $.pendingApprovals.delete(Z),W.resolve(Q),{sessionId:W.sessionId}}function U3($,Z,Q){let W=0;for(let[J,X]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:J,sessionId:X.sessionId}))continue;$.pendingApprovals.delete(J),X.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:J,approved:!1,cancelled:!0,reason:Q},X.sessionId)),W+=1}return W}async function UK($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return h(Z,"approval_not_found",`Unknown approval: ${Q}`);let J=typeof Z.payload?.reason==="string"?Z.payload.reason:Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)&&typeof Z.payload.payload.reason==="string"?Z.payload.payload.reason:void 0,X=Z.payload?.approved===!0,Y=f3($,Q,{approved:X,reason:J});if(!Y)return h(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:X,reason:J},Y.sessionId)),g(Z,{approvalId:Q,approved:X})}import{createSessionId as rS}from"@cline/shared";function lS($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var DK={debug:10,info:20,warn:30,error:40,silent:50};function pS(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function m($,Z,Q={}){if(DK[$]<DK[pS()])return;let W=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([J,X])=>[J,lS(X)]).filter(([,J])=>J!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${W}`);return}console.log(`[hub] ${W}`)}function D3($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);m("error",$,{error:Q})}async function LK($,Z,Q,W,J,X){let Y=rS("capreq_"),j=performance.now();return m("info","capability.request.start",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J}),await new Promise((V,B)=>{$.pendingCapabilityRequests.set(Y,{sessionId:Z,targetClientId:J,capabilityName:Q,onProgress:X,resolve:(H)=>{if(m(H.ok?"info":"warn","capability.request.end",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J,ok:H.ok,error:H.error,durationMs:Math.round(performance.now()-j)}),!H.ok){B(Error(H.error||`Capability ${Q} was rejected by ${J}.`));return}V(H.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:Y,targetClientId:J,capabilityName:Q,payload:W},Z)),m("info","capability.request.published",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:J})})}function _K($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return h(Z,"capability_not_found",`Unknown capability request: ${Q}`);if((Z.clientId?.trim()||"")!==W.targetClientId)return h(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return h(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return W.onProgress?.(X),g(Z,{requestId:Q})}function V$($,Z,Q){let W=0;for(let[J,X]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:J,...X}))continue;$.pendingCapabilityRequests.delete(J),m("warn","capability.request.cancelled",{requestId:J,sessionId:X.sessionId,capabilityName:X.capabilityName,targetClientId:X.targetClientId,reason:Q}),X.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:X.capabilityName,targetClientId:X.targetClientId,ok:!1,cancelled:!0,error:Q},X.sessionId)),W+=1}return W}async function zK($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",W=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",J=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!W||!J)return h(Z,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{},Y=await $.requestCapability(Q,W,X,J);return g(Z,Y)}catch(X){return h(Z,"capability_request_failed",X instanceof Error?X.message:String(X))}}function TK($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",W=$.pendingCapabilityRequests.get(Q);if(!W)return h(Z,"capability_not_found",`Unknown capability request: ${Q}`);let J=Z.clientId?.trim()||"";if(J!==W.targetClientId)return h(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${W.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==W.sessionId)return h(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${W.sessionId}`);$.pendingCapabilityRequests.delete(Q);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:void 0,Y=typeof Z.payload?.error==="string"?Z.payload.error:void 0,j=Z.payload?.ok===!0;return m(j?"info":"warn","capability.respond",{requestId:Q,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,error:Y}),W.resolve({ok:j,payload:X,error:Y}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:W.capabilityName,targetClientId:W.targetClientId,respondedByClientId:J,ok:j,payload:X,error:Y},W.sessionId)),g(Z,{requestId:Q,ok:j})}import{createSessionId as iS}from"@cline/shared";function OK($,Z){let Q=Z.payload,W=Q?.clientId?.trim()||Z.clientId?.trim()||iS("client_");return $.clients.set(W,{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,actorKind:Q?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:Q?.transport??"native",capabilities:Q?.capabilities??[],metadata:Q?.metadata,workspaceContext:Q?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:W,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),g(Z,{clientId:W})}function qK($,Z){let Q=Z.clientId?.trim(),W=Q?$.clients.get(Q):void 0;if(!Q||!W)return h(Z,"client_not_found","Client is not registered with this hub.");let J=E9(Z.payload?.metadata);if(W.lastSeenAt=Date.now(),J)W.metadata=JSON.parse(JSON.stringify(J));return g(Z)}function MK($,Z,Q){let W=Z.clientId?.trim();if(W)$.clients.delete(W),Q(W),$.publish($.buildEvent("hub.client.disconnected",{clientId:W}));return g(Z)}function RK($,Z){return g(Z,{clients:[...$.clients.values()]})}G0();import{existsSync as CK,mkdirSync as nS,readdirSync as aS,readFileSync as sS,rmSync as oS,writeFileSync as tS}from"node:fs";import{dirname as eS,join as EK}from"node:path";import{CONNECTOR_PLATFORMS as $b,connectorChannelsFromPlatforms as Zb,listConnectorCatalog as wK,shouldIncludeConnectorField as Qb}from"@cline/shared";import{resolveConnectorDataDir as Wb,resolveConnectorSettingsPath as _3}from"@cline/shared/storage";var Jb=1,NK={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},Xb={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 B$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function b4($){return typeof $==="string"?$.trim():void 0}function PK($){if(!CK($))return;try{let Z=JSON.parse(sS($,"utf8"));return B$(Z)?Z:void 0}catch{return}}function z3(){let $=PK(_3()),Z=B$($?.connectors)?$.connectors:{},Q={};for(let[W,J]of Object.entries(Z)){if(!B$(J))continue;let X=b4(J.type),Y=b4(J.configuredAt),j=b4(J.updatedAt);if(!X||!Y||!j)continue;let V=C9(J.values),B=B$(J.security)?{enabled:J.security.enabled===!0,values:C9(J.security.values)}:void 0;Q[W]={type:X,values:V,security:B,configuredAt:Y,updatedAt:j}}return{version:Jb,connectors:Q}}function SK($){let Z=_3();nS(eS(Z),{recursive:!0}),tS(Z,`${JSON.stringify($,null,2)}
719
- `,"utf8")}function C9($){if(!B$($))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 jb($){let Z=EK(Wb(),$);if(!CK(Z))return[];return aS(Z).filter((Q)=>Q.endsWith(".json")&&!Q.endsWith(".threads.json")).map((Q)=>EK(Z,Q))}function Vb($,Z,Q){let W=Z.botUsername??Z.userName??Z.applicationId??Z.phoneNumberId??String(Q);return`${$}:${W}`}function Bb($,Z){let Q=PK(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=Xb[$];if(!X)return;let Y={};for(let j of X.required){let V=NK[j](Q);if(!V||typeof V==="string"&&!V.trim())return;Y[j]=V}for(let j of X.optional){let V=NK[j](Q);if(V!==void 0)Y[j]=V}return{id:Vb($,Y,W),type:$,pid:W,hubUrl:J,...Y}}function Hb(){let $=[];for(let{name:Z}of wK())for(let Q of jb(Z)){let W=Bb(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 $=z3();return Object.entries($.connectors).map(([Z,Q])=>({id:Z,type:Q.type,configuredAt:Q.configuredAt,updatedAt:Q.updatedAt})).sort((Z,Q)=>Z.type.localeCompare(Q.type))}function T3(){return{available:Zb(),active:Hb(),configured:Gb()}}function Kb($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function Fb($,Z){let Q={};for(let J of $.fields)Q[J.flag]=Z[J.flag]??J.initialValue??"";let W={};for(let J of $.fields){if(!Qb(J,Q))continue;Kb(J,Q),W[J.flag]=Q[J.flag]}return W}function Ab($){if(!B$($))throw Error("connector.configure payload must be an object.");let Z=b4($.channel);if(!Z)throw Error("channel is required");let Q=$b.find((K)=>K.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(wK().map((K)=>K.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let J=C9($.values),X=Fb(Q,J),Y=B$($.security)?$.security:{},j=Y.enabled===!0,V=C9(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 B=z3(),H=new Date().toISOString(),G=B.connectors[Z];return B.connectors[Z]={type:Z,values:X,security:j?{enabled:!0,values:V}:{enabled:!1,values:{}},configuredAt:G?.configuredAt??H,updatedAt:H},SK(B),T3()}function fb($){if(!B$($))throw Error("connector.delete_config payload must be an object.");let Z=b4($.channel);if(!Z)throw Error("channel is required");let Q=z3();if(delete Q.connectors[Z],Object.keys(Q.connectors).length>0)SK(Q);else oS(_3(),{force:!0});return T3()}function Ub($){return $==="connector.configure"||$==="connector.delete_config"}function L3($,Z,Q){if(!Ub(Z.command))return;Q8($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function bK($,Z){try{if(Z.command==="connector.channels")return g(Z,T3());if(Z.command==="connector.configure"){let Q=Ab(Z.payload);return L3($,Z,!0),g(Z,Q)}if(Z.command==="connector.delete_config"){let Q=fb(Z.payload);return L3($,Z,!0),g(Z,Q)}return h(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return L3($,Z,!1),h(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var Db=30000;function Lb($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function _b($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function zb($,Z,Q){let W=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return h($,c8,W)}function Tb($){return $?$:void 0}function Ob($){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 qb($,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 H=Math.round(performance.now()-J);m("warn","run.heartbeat",{...Y,elapsedMs:H}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:H,...W?{timeoutMs:W}:{}},Q.sessionId))},Db),V=$.sessionHost.runTurn(Q);V.then((H)=>{if(!X)return;m("warn","run.late_end",{...Y,elapsedMs:Math.round(performance.now()-J),finishReason:H?.finishReason})},(H)=>{if(!X)return;m("error","run.late_error",{...Y,elapsedMs:Math.round(performance.now()-J),error:H})});let B;try{if(!W)return await V;return await Promise.race([V,new Promise((H,G)=>{B=setTimeout(()=>{let K=`Hub run ${Z.command} timed out after ${W}ms.`;X=!0,clearInterval(j),G(Error(K)),m("error","run.timeout",{...Y,elapsedMs:Math.round(performance.now()-J)}),U3($,(F)=>F.sessionId===Q.sessionId,K),V$($,(F)=>F.sessionId===Q.sessionId,K),$.sessionHost.abort(Q.sessionId,K).catch((F)=>{m("error","run.timeout_abort_failed",{...Y,error:F})})},W)})])}finally{if(X=!0,clearInterval(j),B)clearTimeout(B)}}async function yK($,Z){let Q=w0(Z),W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.prompt==="string"?W.prompt:typeof W.input==="string"?W.input:"";if(!J.trim())return h(Z,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let X=W.attachments&&typeof W.attachments==="object"&&!Array.isArray(W.attachments)?W.attachments:void 0,Y=Array.isArray(X?.userFiles)?X.userFiles.filter((H)=>typeof H==="string"):void 0,j=Ob(W);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let V;try{V=await qb($,Z,{sessionId:Q,prompt:J,mode:Tb(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(H){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(S$(H))return zb(Z,Q,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Q)),H}if(V){let H=await d0($,Q),G=_b(V);if($.publish($.buildEvent(Lb(V.finishReason),{reason:V.finishReason,...G?{error:G}:{},result:V,...H?{snapshot:H}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let B=await d0($,Q);return g(Z,V||B?{...V?{result:V}:{},...B?{snapshot:B}:{}}:void 0)}async function hK($,Z){let Q=w0(Z),W=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";U3($,(J)=>J.sessionId===Q,W);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(J){m("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:J})}finally{V$($,(J)=>J.sessionId===Q,W)}return g(Z,{applied:!0})}async function kK($,Z){let Q=A9(Z.payload?.payload);if(!Q)return h(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),g(Z,{applied:!0})}async function IK($,Z){switch(Z.type){case"chunk":return;case"agent_event":await Mb($,Z);return;case"hook":if(Z.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:Z.payload.toolName},Z.payload.sessionId));else if(Z.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:Z.payload.toolName},Z.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:Z.payload.sessionId,summary:Z.payload.summary,lastEvent:Z.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,Z.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:Z.payload.sessionId,prompts:Z.payload.prompts},Z.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:Z.payload.id,prompt:Z.payload.prompt,delivery:Z.payload.delivery,attachmentCount:Z.payload.attachmentCount,userImages:Z.payload.userImages,userFiles:Z.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:Z.payload.sessionId,prompt:Q},Z.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:Z.payload.sessionId,snapshot:Z.payload.snapshot},Z.payload.sessionId));return;case"status":{let[Q,W]=await Promise.all([u0($,Z.payload.sessionId),d0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...W?{snapshot:W}:{}},Z.payload.sessionId));return}case"ended":await Rb($,Z);return;default:return}}async function Mb($,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 Rb($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),W=Q===Z.payload.reason||Q==="run.start.reply";if(W)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[J,X]=await Promise.all([u0($,Z.payload.sessionId),d0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let Y=await fK(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 mK,parseRuntimeConfigExtensions as vK}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as xo,HUB_COMPACTION_CAPABILITY as go,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as mo,HUB_HOOK_CAPABILITY_PREFIX as vo,HUB_MISTAKE_LIMIT_CAPABILITY as co,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as uo,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as lo,isHubToolExecutorName as Eb}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as ao,HUB_COMPACTION_CAPABILITY as so,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as oo,HUB_HOOK_CAPABILITY_PREFIX as to,HUB_MISTAKE_LIMIT_CAPABILITY as eo,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as $t,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Zt}from"@cline/shared";var Nb=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function t$($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function Cb($,Z){let Q=typeof $.name==="string"?$.name.trim():"",W=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",X=t$($.inputSchema);if(!Q||!W||!X||!J||Z.has(J))return;return Z.add(J),{kind:"tool",capabilityName:J,name:Q,description:W,inputSchema:X,...t$($.lifecycle)?{lifecycle:t$($.lifecycle)}:{}}}function q3($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let W of $){if(!W||typeof W!=="object"||Array.isArray(W))continue;let J=W,X=J.kind,Y=typeof J.capabilityName==="string"?J.capabilityName.trim():"";if(!Y||Q.has(Y))continue;if(X==="tool"){let j=Cb(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,...t$(J.config)?{config:t$(J.config)}:{}});continue}if(X==="checkpoint"){Q.add(Y),Z.push({kind:"checkpoint",capabilityName:Y,...t$(J.config)?{config:t$(J.config)}:{}});continue}if(X==="mistakeLimit"){Q.add(Y),Z.push({kind:"mistakeLimit",capabilityName:Y});continue}if(X==="userInstructionService")Q.add(Y),Z.push({kind:"userInstructionService",capabilityName:Y})}return Z}function gK($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function wb($){return Object.hasOwn($,"update")?$.update:$}function y4($){return $.trim().replace(/^\/+/,"").toLowerCase()}function Pb($){let Z=($??[]).map(y4).filter(Boolean);return Z.length>0?new Set(Z):void 0}function Sb($,Z,Q){if(!Q)return!0;let W=y4($),J=y4(Z),X=W.includes(":")?W.split(":").at(-1)??W:W,Y=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(W)||Q.has(J)||Q.has(X)||Q.has(Y)}function O3($,Z){let Q=Pb(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)=>Sb(W.id,W.name,Q))}function xK($,Z){let Q=async(W,J)=>{let X=y4(W),j=O3($,Z).filter((K)=>K.id===X||y4(K.name)===X||K.id.endsWith(`:${X}`)).filter((K)=>!K.disabled);if(j.length!==1)return j.length>1?`Skill "${W}" is ambiguous. Use one of: ${j.map((K)=>K.id).join(", ")}`:`Skill "${W}" not found.`;let V=j[0].skill,B=J?.trim(),H=B?`
717
+ version = team_outcome_fragments.version + 1`,[J,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=$8($),J=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[Q]);if(J.length===0)return[];let W=ZJ();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
718
+ WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,W,Q]),J.map((X)=>X.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function JK($={}){try{let Z=new S4($);return Z.init(),Z}catch{let Z=new K9({teamDir:$.teamDir});return Z.init(),Z}}function F9($,Z){return wP($,Z)}function PP($,Z){let Q=Z?.["*"]??{},J=Z?.[$]??{};return{...Q,...J}.enabled!==!1}function SP($,Z){return $.filter((Q)=>PP(Q.name,Z))}function QJ($,Z){return m1(SP($,Z))}var bP={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 yP($){let Z=$.trim().toLowerCase();return bP[Z]??Z}function hP($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(yP));if(Z.skills!==void 0)Q.add("skills");return $.filter((J)=>Q.has(J.name))}function WK(){return`team-${CP(5)}`}function A9($,Z,Q,J,W,X,Y,j){let V=J1[r1({mode:Q})],B=R8(Z,J,Q,W??M8);return QJ(h8({cwd:$,...V,enableSkills:!!Y,...B,executors:{...Y?{skills:Y}:{},...j??{}}}),X)}function kP($){return A9($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,IP,$.toolExecutors).some((Z)=>Z.name==="skills")}var IP=async()=>"";async function xP($){let Z=Z0();if(!k$({filePath:Z}))return{tools:[]};let Q=new u8({clientFactory:L5({settingsPath:Z})}),J;try{J=await c8(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 W=J.filter((j)=>j.disabled!==!0),X=await Promise.allSettled(W.map((j)=>T5({serverName:j.name,provider:Q}))),Y=[];for(let[j,V]of X.entries())if(V.status==="fulfilled")Y.push(...V.value);else{let B=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${W[j].name}", skipping: ${B}`)}return{tools:Y,shutdown:async()=>{await Q.dispose()}}}function gP($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function mP($){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 vP($){let Z=J1[r1({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 f9{teamRuntimeEntries=new Map;async build($){let{config:Z,hooks:Q,extensions:J,logger:W,telemetry:X,createSpawnTool:Y,onTeamRestored:j,userInstructionService:V,configExtensions:B,toolExecutors:H}=$,G=$.onTeamEvent??(()=>{}),K=vP(Z),F=Z.workspaceRoot??Z.cwd,A=$.toolPolicies??Z.toolPolicies,D=A1(),U=[],L=Z.teamName?.trim()||WK(),f=Z.sessionId?.trim()||L,z=K.enableSpawnAgent?c5({workspaceRoot:F}):{configs:[],errors:[]},O=z.configs.some((v)=>v.skills!==void 0),T=F9(B,"rules"),_=F9(B,"skills"),M=_||O,N=F9(B,"workflows"),m=F9(B,"plugins"),E=T||_||N,d=!1,s=Boolean(V),j0=V,j2;for(let v of z.errors)(W??Z.logger)?.log?.(`[agents] Failed to load agent config at ${v.path}: ${v.error.message}`);if(!j0&&(E||O))j0=h2({skills:M?{workspacePath:F,includePluginSkills:m,pluginSkillDirectories:m?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(j0)await j0.start().catch(()=>{});let D$=K.enableTools&&_&&Boolean(j0)&&j0?.hasConfiguredSkills(Z.skills)===!0&&kP({cwd:Z.cwd,providerId:Z.providerId,mode:K.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:A,toolExecutors:H}),b0=j0&&E?j0.createExtension({includeRules:T,includeSkills:_,includeWorkflows:N,registerSkillsTool:D$,allowedSkillNames:Z.skills}):void 0,L$=b0?[...J??Z.extensions??[],b0]:J??Z.extensions;if(K.enableTools){if(U.push(...A9(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,H)),!K.disableMcpSettingsTools){let v=await xP(Z.logger);U.push(...v.tools),j2=v.shutdown}}let Q0,S1=K.enableAgentTeams?JK():void 0,G0=S1?.loadRuntime(f),R0=G0?.state,Q1=G0?.teammates??[],h=new Map(Q1.map((v)=>[v.agentId,v])),F0=Z.sessionId||L,b,a=[],N0=!1,J0=S2({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,reasoningEffort:Z.reasoningEffort,thinkingBudgetTokens:Z.thinkingBudgetTokens,maxTokensPerTurn:Z.maxTokensPerTurn,maxIterations:Z.maxIterations,hooks:Q,extensions:L$,logger:W??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(K.enableSpawnAgent){if(z.configs.length>0)U.push(...QJ(d5({configProvider:J0,agents:z.configs,createSubAgentTools:(v)=>K.enableTools?hP(A9(Z.cwd,v.providerId??Z.providerId,K.mode,v.modelId??Z.modelId,Z.toolRoutingRules,A,v.skills!==void 0&&j0?.createSkillsExecutor?j0.createSkillsExecutor(v.skills):void 0,H),v):[],hookErrorMode:Z.hookErrorMode,toolPolicies:A,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),A))}if(!this.teamRuntimeEntries.has(F0))this.teamRuntimeEntries.set(F0,{delegatedAgentConfigProvider:J0});let l4=()=>{if(!K.enableAgentTeams)return;let v=this.teamRuntimeEntries.get(F0)??{delegatedAgentConfigProvider:J0};if(this.teamRuntimeEntries.set(F0,v),Q0=v.runtime,!Q0){if(Q0=new L4({teamName:L,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:K.missionLogIntervalSteps,missionLogIntervalMs:K.missionLogIntervalMs,onTeamEvent:(W0)=>{if(G(W0),Q0&&S1){if(W0.type==="teammate_spawned"&&W0.teammate?.rolePrompt){let H1={agentId:W0.agentId,rolePrompt:W0.teammate.rolePrompt,modelId:W0.teammate.modelId,maxIterations:W0.teammate.maxIterations};h.set(H1.agentId,H1)}if(W0.type==="teammate_shutdown"&&!mP(W0.reason))h.delete(W0.agentId);S1.handleTeamEvent(f,W0),S1.persistRuntime(f,Q0.exportState(),Array.from(h.values()))}}}),R0)Q0.hydrateState(R0),N0=!0;v.runtime=Q0}if(!d){if(!Q0)return;d=!0;let W0=B5({runtime:Q0,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(R0),restoredTeammates:Q1,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(H1)=>{a=H1,b?.addTools(H1)},createBaseTools:K.enableTools?()=>A9(Z.cwd,Z.providerId,K.mode,Z.modelId,Z.toolRoutingRules,A,void 0,H):void 0,teammateConfigProvider:J0});if(N0)Q0.recoverActiveRuns("runtime_recovered");if(W0.restoredFromPersistence)j?.();U.push(...W0.tools)}return Q0};if(K.enableSpawnAgent&&Y){let v=Y();U.push({...v,execute:async(W0,H1)=>{return l4(),v.execute(W0,H1)}})}if(K.enableAgentTeams)l4();let V2=QJ(U,A),t9=V2.some((v)=>v.name==="submit_and_exit"&&v.lifecycle?.completesRun===!0),p4=K.enableAgentTeams?()=>{let v=this.teamRuntimeEntries.get(F0)?.runtime;if(!v)return;let W0=v.listTasks(),H1=W0.some((b1)=>b1.status==="in_progress"||b1.status==="pending"),zW=v.listRuns({}),pA=zW.some((b1)=>b1.status==="running"||b1.status==="queued");if(H1||pA){let b1=W0.filter((x0)=>x0.status==="in_progress"||x0.status==="pending").map((x0)=>`${x0.id} (${x0.status}): ${x0.title}`).join(", "),MW=zW.filter((x0)=>x0.status==="running"||x0.status==="queued").map((x0)=>`${x0.id} (${x0.status})`).join(", "),e9=[];if(b1)e9.push(`Unfinished tasks: ${b1}`);if(MW)e9.push(`Active runs: ${MW}`);return`[SYSTEM] You still have team obligations. ${e9.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,lA=t9?{requireCompletionTool:!0,...p4?{completionGuard:p4}:{}}:p4?{completionGuard:p4}:void 0;return{tools:V2,logger:W??Z.logger,telemetry:X??Z.telemetry,teamRuntime:Q0,teamRestoredFromPersistence:Boolean(R0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(F0)?.delegatedAgentConfigProvider??J0,extensions:L$,completionPolicy:lA,registerLeadAgent:(v)=>{if(b=v,a.length>0)v.addTools(m1(a,[...D]))},shutdown:async(v)=>{if(gP(Q0,v),this.teamRuntimeEntries.delete(F0),await j2?.(),!s)j0?.stop()}}}}function cP($,Z){let Q=$?.expiresAt,J=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===J}class U9 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 JJ{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new H$,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=K0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let J=this.refreshInFlight.get(Z);if(J)return J;let W=this.resolveProviderApiKeyInternal($,Z,Q).catch((X)=>{throw X}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,W),W}async resolveProviderApiKeyInternal($,Z,Q){let J=K0($);if(!J)return null;let W=this.providerSettingsManager.getProviderSettings(Z);if(!W)return null;let X=kZ($,W);if(!X)return null;let Y=await J.refresh({settings:W,credentials:X,forceRefresh:Q,telemetry:this.telemetry});if(!Y)throw new U9($);let j=G8({manager:this.providerSettingsManager,providerId:$,settings:W,credentials:Y,setLastUsed:!1,save:!1}),V=!cP(W.auth,j.auth);if(V)this.providerSettingsManager.saveProviderSettings(j,{setLastUsed:!1,tokenSource:"oauth"});return{apiKey:J.getApiKey(j)??Y.access,accountId:Y.accountId,refreshed:V}}}import{normalizeUserInput as uP}from"@cline/shared";import{nanoid as dP}from"nanoid";class XK{list($){return $?i0($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),J=$.pendingPrompts.findIndex((V)=>V.id===Q);if(J<0)return{sessionId:Z.sessionId,prompts:i0($),updated:!1};let W=$.pendingPrompts[J];if(!W)return{sessionId:Z.sessionId,prompts:i0($),updated:!1};let X=Z.prompt===void 0?W.prompt:uP(Z.prompt).trim();if(!X)throw Error("prompt cannot be empty");let Y=Z.delivery??W.delivery,j={...W,prompt:X,mode:Z.mode??W.mode,delivery:Y};return $.pendingPrompts.splice(J,1),lP($,j,J,W.delivery),{sessionId:Z.sessionId,prompts:i0($),prompt:D9(j),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),J=$.pendingPrompts.findIndex((X)=>X.id===Q);if(J<0)return{sessionId:Z.sessionId,prompts:i0($),removed:!1};let[W]=$.pendingPrompts.splice(J,1);return{sessionId:Z.sessionId,prompts:i0($),prompt:W?D9(W):void 0,removed:!0}}enqueue($,Z){let{prompt:Q,mode:J,delivery:W,userImages:X,userFiles:Y}=Z,j=$.pendingPrompts.findIndex((V)=>V.prompt===Q);if(j>=0){let[V]=$.pendingPrompts.splice(j,1),B={...V,prompt:Q,mode:J??V.mode,userImages:X??V.userImages,userFiles:Y??V.userFiles};if(W==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...B,delivery:"steer"});else $.pendingPrompts.push(B)}else{let V={id:`pending_${Date.now()}_${dP(5)}`,prompt:Q,mode:J,delivery:W,userImages:X,userFiles:Y};if(W==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return i0($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((J)=>J.delivery==="steer");if(Z<0)return{prompts:i0($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:i0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:i0($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),i0($)}clear($){return $.pendingPrompts.length=0,[]}}class WJ{deps;service=new XK;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:i0($)}})}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 J=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{J=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,J&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=D9(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 D9($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function i0($){return $.pendingPrompts.map(D9)}function lP($,Z,Q,J){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(J==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}A0();class YJ{deps;constructor($){this.deps=$}dispatchAgentEvent($,Z,Q){let J=this.deps.getSession($),W={sessionId:$,config:Z,liveSession:J,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},X=I3(Q),Y=!!J&&(!X.agentId||X.agentId===XJ(J.agent));x3(W,Q,Y?{isPrimaryAgentEvent:!0,agentId:XJ(J.agent),conversationId:J.agent.getConversationId(),...J?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(D3(Q,Z),Z.type==="agent_event"){let J={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};x3(J,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let J=N1({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:XJ(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(J)O$(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...J})}}if(await L3($,Z,this.deps.invokeBackendOptional),Q)_3(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 B=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!B)return;await V.ingestEvent(B);return}if(Z.name!=="steer_message"&&Z.name!=="queue_message"&&Z.name!=="pending_prompt")return;let J=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0,W=typeof J?.sessionId==="string"&&J.sessionId.trim().length>0?J.sessionId.trim():$,X=typeof J?.prompt==="string"?J.prompt.trim():"";if(!X)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":J?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(W,{prompt:X,delivery:Y})}handlePluginLog($,Z,Q){let J=this.deps.getSession($),W=Q??J?.config.extensionContext?.logger??J?.config.logger;if(!W||!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"){W.debug(Y,j);return}if(X.level==="error"){if(W.error)W.error(Y,j);else W.log(Y,{...j,severity:"error"});return}W.log(Y,j)}}function XJ($){return $.getAgentId()}function jJ($){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:j$($.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 VJ($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function YK($,Z,...Q){let J=VJ($,Z);if(!J)throw Error(`session service method not available: ${Z}`);return Promise.resolve(J.apply($,Q))}async function jK($,Z,...Q){let J=VJ($,Z);if(!J)return;await Promise.resolve(J.apply($,Q))}async function VK($,Z,...Q){let J=VJ($,Z);if(!J)return;return await Promise.resolve(J.apply($,Q))}o0();A0();function BJ($,Z,Q){return{onSubAgentEvent:(J)=>$.onAgentEvent(Q,Z,J),onSubAgentStart:(J)=>{let W=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(J.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let X=N1({agentId:J.subAgentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:J.parentAgentId});if(X)O$(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...X});o4(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:J.parentAgentId,agentId:J.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",Q,J)},onSubAgentEnd:(J)=>{let W=$.getSession(Q)?.runtime.teamRuntime,X=$.subAgentStarts.get(J.subAgentId),Y=X?Date.now()-X.startedAt:0,j=J.result?.text?J.result.text.split(`
719
+ `).length:0;o4(Z.telemetry,{event:"ended",ulid:Q,durationMs:Y,outputLines:j,errorMessage:J.error?String(J.error):void 0,agentId:J.subAgentId,parentId:J.parentAgentId,...N1({agentId:J.subAgentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:J.parentAgentId})}),$.subAgentStarts.delete(J.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,J)}}}function HJ($,Z,Q,J){let W=BJ($,Z,Q);return y2({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?h8({cwd:Z.cwd,...J1[r1({mode:Z.mode})],executors:J}):[];if(Z.enableSpawnAgent)Y.push(HJ($,Z,Q,J));return m1(Y)},...W})}import{readFile as pP,stat as rP}from"node:fs/promises";var iP=20480000;async function BK($){let Z=await rP($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>iP)throw Error("File is too large to read into context.");let Q=await pP($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var HK=5000;function b4($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function ZS($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=b4(Z.inputTokens),J=b4(Z.outputTokens),W=b4(Z.cacheReadTokens),X=b4(Z.cacheWriteTokens),Y=b4(Z.totalCost);if(Q===void 0||J===void 0||W===void 0||X===void 0||Y===void 0)return;return{inputTokens:Q,outputTokens:J,cacheReadTokens:W,cacheWriteTokens:X,totalCost:Y}}function QS($,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)}}function GK($,Z){if(!Z)return!1;if($.source_message_count!==Z.source_message_count)return $.source_message_count<Z.source_message_count;return Date.parse($.updated_at)<Date.parse(Z.updated_at)}class K${runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new Y4;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new t2;constructor($){let Z=aP();if(Z)$S(Z);let Q=r0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new f9,this.createAgentInstance=$.createAgent??((J)=>new n1(J)),this.defaultCapabilities=C0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new H$,this.oauthTokenManager=$.oauthTokenManager??new JJ({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new WJ({getSession:(J)=>this.sessions.get(J),emit:(J)=>this.emit(J),send:(J)=>this.runTurn(J)}),this.pendingPrompts={list:async(J)=>this.pendingPromptsController.list(J.sessionId),update:async(J)=>this.pendingPromptsController.update(J),delete:async(J)=>this.pendingPromptsController.delete(J)},this.eventBridge=new YJ({getSession:(J)=>this.sessions.get(J),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(J)=>this.emit(J),persistMessages:(J,W,X)=>{this.invoke("persistSessionMessages",J,W,X)},enqueuePendingPrompt:(J,W)=>this.pendingPromptsController.enqueue(J,W),invokeBackendOptional:(J,...W)=>this.invokeOptional(J,...W)})}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??w0.CLI,Q=$0(),J=$.config.sessionId?.trim()??"",W=J||sP(),X=await this.applyInitialOAuthCredentials($),Y=X.initialMessages??[],j=Y.length>0?s5(Y):z0(),V=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!V)throw Error("session service method not available: ensureSessionsDir");let B=GJ(V,W),H=GJ(B,`${W}.messages.json`),G=GJ(B,`${W}.json`),K=j$($.config),F=h0.parse({version:1,session_id:W,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:H}),A,D;if(J.length>0&&Y.length>0&&!X.prompt?.trim()){let b=await this.invokeOptionalValue("readSessionManifest",W);if(b)F=b,A={manifestPath:G,messagesPath:b.messages_path||H,compactionPath:b.compaction_path,manifest:b},D=await this.invokeOptionalValue("readSessionCompactionState",W)}let L=await this.seedAggregateUsageFromArtifacts({initialUsage:j,sessionDir:B,rootMessagesPath:A?.messagesPath??H,manifest:F});this.usageBySession.set(W,j),this.aggregateUsageBySession.set(W,L);let f=C0(this.defaultCapabilities,$.capabilities),z=f?.toolExecutors??this.toolExecutors,O=$.localRuntime,T=O?.extensionContext?.logger??O?.logger,_=O?.extensionContext?.automation,M,N={getSession:(b)=>this.sessions.get(b),subAgentStarts:this.subAgentStarts,onAgentEvent:(b,a,N0)=>this.eventBridge.dispatchAgentEvent(b,a,N0),invokeBackendOptional:(b,...a)=>this.invokeOptional(b,...a)};M=await RG({input:X,localRuntime:$.localRuntime,sessionId:W,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:f,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(b)=>{if(b.name==="plugin_log"){this.eventBridge.handlePluginLog(W,b.payload,T);return}this.eventBridge.handlePluginEvent(W,b,_)},onTeamEvent:(b)=>{this.eventBridge.handleTeamEvent(W,b),M.config.onTeamEvent?.(b)},createSpawnTool:()=>HJ(N,M.config,W,z),createSubAgentLifecycleCallbacks:(b)=>BJ(N,b,W),readSessionMetadata:async()=>(await this.getSession(W))?.metadata,writeSessionMetadata:async(b)=>{await this.persistSessionMetadata(W,()=>b)}});let m=await this.runtimeBuilder.build(M.runtimeBuilderInput),E=M.config,d=M.providerConfig;if(m.teamRuntime&&!E.teamName?.trim())E.teamName=m.teamRuntime.getTeamName();let s=[...m.tools,...E.extraTools??[]],j0=m.extensions??M.extensions,j2=X.initialCompactionState,D$,b0=h3(E),L$=j2??D,Q0=b0&&L$?{...L$,conversation_id:L$.conversation_id?.trim()||W}:void 0,S1=b0?k3({compact:b0,getState:()=>D$?.compactionState,saveState:async(b)=>{let a=D$;if(!a)return;let N0={...b,conversation_id:a.sessionId};try{if(!(await this.persistActiveSessionCompactionState(a,N0)).updated)E.logger?.debug?.("Skipped stale session compaction state",{sessionId:a.sessionId,sourceMessageCount:N0.source_message_count})}catch(J0){E.logger?.error?.("Failed to persist session compaction state",{sessionId:a.sessionId,error:J0}),G$(E.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:J0,context:{sessionId:a.sessionId,providerId:E.providerId,modelId:E.modelId}})}}}):void 0,G0={sessionId:W,providerId:d.providerId,modelId:d.modelId,apiKey:d.apiKey,baseUrl:d.baseUrl,headers:d.headers,knownModels:d.knownModels,providerConfig:d,thinking:E.thinking,reasoningEffort:E.reasoningEffort??d.reasoningEffort,thinkingBudgetTokens:E.thinkingBudgetTokens,maxTokensPerTurn:E.maxTokensPerTurn,systemPrompt:E.systemPrompt,maxIterations:E.maxIterations,execution:E.execution,prepareTurn:S1,tools:s,hooks:M.hooks,extensions:j0,hookErrorMode:E.hookErrorMode,initialMessages:M.effectiveInput.initialMessages,userFileContentLoader:BK,toolPolicies:M.toolPolicies,requestToolApproval:M.requestToolApproval?async(b)=>{let a=M.requestToolApproval,N0=this.sessions.get(W);if(N0)await this.markTurnPending(N0);try{if(!a)return{approved:!1,reason:"Tool approval callback is not configured."};return await a(b)}finally{let J0=this.sessions.get(W);if(J0?.status==="pending")await this.markTurnRunning(J0)}}:void 0,telemetry:E.telemetry,onConsecutiveMistakeLimitReached:E.onConsecutiveMistakeLimitReached,completionPolicy:m.completionPolicy,consumePendingUserMessage:()=>{let b=this.pendingPromptsController.consumeSteer(W);return b?T4(b.prompt,b.mode??E.mode):void 0},logger:m.logger??E.logger,extensionContext:E.extensionContext,onEvent:(b)=>this.eventBridge.dispatchAgentEvent(W,E,b)};G0.hooks={...G0.hooks,onEvent:async(b)=>{if(await M.hooks?.onEvent?.(b),b.type!=="assistant-message")return;let a=this.sessions.get(W);if(!a)return;let N0=a.agent.getMessages();try{await this.invoke("persistSessionMessages",W,N0,E.systemPrompt)}catch(J0){E.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:W,error:J0}),G$(E.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:J0,severity:"warn",handled:!0,context:{sessionId:W,providerId:E.providerId,modelId:E.modelId}})}}};let R0=this.createAgentInstance(G0);if(G0.onEvent)R0.subscribeEvents(G0.onEvent);m.registerLeadAgent?.(R0);let Q1=N1({agentId:R0.getAgentId(),conversationId:R0.getConversationId(),teamId:m.teamRuntime?.getTeamId(),teamName:m.teamRuntime?.getTeamName(),teamRole:m.teamRuntime?"lead":void 0});if(NG(E,W,J.length>0,K,Q1),Q1)O$(E.telemetry,{ulid:W,modelId:E.modelId,provider:E.providerId,...Q1});if(m.teamRuntime)AZ(E.telemetry,{ulid:W,teamId:m.teamRuntime.getTeamId(),teamName:m.teamRuntime.getTeamName(),leadAgentId:R0.getAgentId(),restoredFromPersistence:m.teamRestoredFromPersistence===!0});let h={sessionId:W,config:E,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:m,agent:R0,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,compactionState:Q0,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:M.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(D$=h,h.compactionState&&!this.isCompactionStateForSession(h.sessionId,h.compactionState,h))h.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:h.sessionId,conversationId:h.compactionState.conversation_id}),h.compactionState=void 0;if(this.sessions.set(W,h),this.emitStatus(W,"running"),Y.length>0&&!A){if(await this.ensureSessionPersisted(h),await this.invoke("persistSessionMessages",h.sessionId,Y,h.config.systemPrompt),h.compactionState){if(!(await this.persistActiveSessionCompactionState(h,h.compactionState)).updated)h.compactionState=void 0}if(!X.prompt?.trim())await this.updateStatus(h,"completed",0)}let F0;try{if(X.prompt?.trim())if(F0=await this.executeTurn(h,{prompt:X.prompt,userImages:X.userImages,userFiles:X.userFiles}),!h.interactive)await this.finalizeSingleRun(h,F0.finishReason);else await this.completeInteractiveTurn(h,F0.finishReason)}catch(b){if(h.interactive&&h.aborting)F0=await this.completeAbortedInteractiveTurn(h);else{G$(h.config.telemetry,{component:"core",operation:"session.start",error:b,severity:"error",handled:!1,context:{sessionId:h.sessionId,providerId:h.config.providerId,modelId:h.config.modelId}});try{await this.failSession(h)}catch(a){h.config.logger?.error?.("Session failure cleanup threw",{sessionId:h.sessionId,error:a})}throw b}}return{sessionId:W,manifest:F,manifestPath:G,messagesPath:H,result:F0}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let J=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...J?{sessionMetadata:J}:{},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(),J=$.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:J??"immediate"}}),J==="queue"||J==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:J,userImages:$.userImages,userFiles:$.userFiles});return}try{let W=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,W.finishReason);else await this.completeInteractiveTurn(Z,W.finishReason);if(W.finishReason==="error"||W.finishReason==="aborted")return W;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),W}catch(W){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw G$(Z.config.telemetry,{component:"core",operation:"session.submit",error:W,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),W}}async getAccumulatedUsage($){let Z=u7(this.usageBySession.get($)),Q=u7(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&&!V0(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&&!V0(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 jJ(Z);let Q=$.trim();if(!Q)return;let J=await this.getRow(Q);if(J)return W4(J);let W=await this.readManifest(Q);return W?p7(W):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(W4),J=new Set(Q.map((W)=>W.sessionId));for(let W of this.sessions.values()){if(J.has(W.sessionId))continue;Q.unshift(jJ(W))}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 updateSessionCompactionState($,Z){let Q=$.trim();if(!Q)return{updated:!1};let J=this.sessions.get(Q),W=J?void 0:await this.getSession(Q);if(!(J??W))return{updated:!1};if(!await this.canPersistCompactionState(Q,Z,J,W))return{updated:!1};if(J)return await this.persistActiveSessionCompactionState(J,Z);let Y=await this.invokeOptionalValue("readSessionCompactionState",Q);if(GK(Z,Y))return{updated:!1};return await this.invoke("persistSessionCompactionState",Q,Z),{updated:!0}}async readSessionCompactionState($){let Z=$.trim();if(!Z)return;let Q=this.sessions.get(Z);if(Q)for(;;){let J=Q.compactionStateWriteQueue;if(!J)return Q.compactionState;await J.catch(()=>{return})}return await this.invokeOptionalValue("readSessionCompactionState",Z)}isCompactionStateForSession($,Z,Q,J){let W=Z.conversation_id?.trim();if(!W)return!0;if(W===$)return!0;let X=Q?.agent.getConversationId()?.trim()||J?.conversationId?.trim();return X?W===X:!1}async canPersistCompactionState($,Z,Q,J){if(!Z.conversation_id?.trim())return!1;if(!this.isCompactionStateForSession($,Z,Q,J))return!1;let W=Q?.agent.getMessages()??await this.readSessionMessages($);return K4(Z,W)!==void 0}async persistActiveSessionCompactionState($,Z){if(!await this.canPersistCompactionState($.sessionId,Z,$))return{updated:!1};return await this.enqueueCompactionStateWrite($,async()=>{if(GK(Z,$.compactionState))return{updated:!1};return await this.invoke("persistSessionCompactionState",$.sessionId,Z),$.compactionState=Z,{updated:!0}})}async enqueueCompactionStateWrite($,Z){let J=($.compactionStateWriteQueue??Promise.resolve()).catch(()=>{return}).then(Z),W=J.then(()=>{return},()=>{return});$.compactionStateWriteQueue=W;try{return await J}finally{if($.compactionStateWriteQueue===W)$.compactionStateWriteQueue=void 0}}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return t1(Q.messagesPath);let J=await this.readManifest(Z);return t1(J?.messages_path)}async dispatchHookEvent($){await _B($,{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){await this.updateSessionConnection($,{modelId:Z})}async updateSessionConnection($,Z){let Q=P2(Z),J=this.getSessionOrThrow($);if(Q.providerId!==void 0)J.config.providerId=Q.providerId;if(Q.modelId!==void 0)J.config.modelId=Q.modelId;if(Q.apiKey!==void 0)J.config.apiKey=Q.apiKey;if(Q.baseUrl!==void 0)J.config.baseUrl=Q.baseUrl;if(Q.headers!==void 0)J.config.headers=Q.headers;if(Q.providerConfig!==void 0)J.config.providerConfig=Q.providerConfig;if(Object.hasOwn(Q,"reasoningEffort"))J.config.reasoningEffort=Q.reasoningEffort??void 0;if(Object.hasOwn(Q,"thinkingBudgetTokens"))J.config.thinkingBudgetTokens=Q.thinkingBudgetTokens??void 0;if(Object.hasOwn(Q,"thinking")){if(J.config.thinking=Q.thinking??void 0,Q.thinking===!1||Q.thinking===null)J.config.reasoningEffort=void 0,J.config.thinkingBudgetTokens=void 0}let W={...Q.providerId!==void 0?{providerId:Q.providerId}:{},...Q.modelId!==void 0?{modelId:Q.modelId}:{},...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{},...Q.providerConfig!==void 0?{providerConfig:Q.providerConfig}:{},...Object.hasOwn(Q,"reasoningEffort")?{reasoningEffort:Q.reasoningEffort??void 0}:{},...Object.hasOwn(Q,"thinking")?{thinking:Q.thinking??void 0}:{},...Object.hasOwn(Q,"thinkingBudgetTokens")?{thinkingBudgetTokens:Q.thinkingBudgetTokens??void 0}:{}};if(Q.thinking===!1||Q.thinking===null)W.reasoningEffort=void 0,W.thinkingBudgetTokens=void 0;let X={...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{}};J.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults(W),J.agent.updateConnection(Q),J.runtime.teamRuntime?.updateTeammateConnections(X)}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),J=Q.prompt.trim();if(!J)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=J;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let W=await this.executeAgentTurn($,J,Q.userImages,Q.userFiles);while(T3($,W.finishReason)){let X=await O3($);if(X.length===0)break;let Y=q3($,X);W=await this.executeAgentTurn($,Y)}return W}async completeInteractiveTurn($,Z){if(_4($))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(),J=z0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:J}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:J,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,J){let W=$.started||$.agent.getMessages().length>0,X=$.persistedMessages??$.agent.getMessages(),Y=this.usageBySession.get($.sessionId)??z0(),j=this.aggregateUsageBySession.get($.sessionId)??Y;$.turnUsageBaseline=Y,$.turnAggregateUsageBaseline=j,$.turnPrimaryUsage=z0(),$.turnUsageByAgent=new Map,VZ($.config.telemetry,$.sessionId,$.config.mode),j8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=W?()=>$.agent.continue(Z,Q,J):()=>$.agent.run(Z,Q,J),B=await this.runWithAuthRetry($,V,X);$.started=!0;let H=w5(B.messages,B,X);$.persistedMessages=H;let G=o5($.turnUsageByAgent?.values()??[]),K=L0(Y,B.usage),F=L0(L0(z0(),B.usage),G),A=L0(j,F);return this.usageBySession.set($.sessionId,K),this.aggregateUsageBySession.set($.sessionId,A),await this.persistSessionMetadata($.sessionId,(D)=>({...D??{},totalCost:K.totalCost,aggregatedAgentsCost:A.totalCost,usage:K,aggregateUsage:A})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,B),B}catch(V){throw G$($.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((J)=>J.name===q0.SUBMIT_AND_EXIT&&J.error===void 0))return;$.submitAndExitObserved=!0,n4($.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=j$($.config),J=eP(Z.prompt).trim();if(!J)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let W=await s6(J,Q);EG($.config.telemetry,W);let X=T4(W.prompt,Z.mode??$.config.mode),Y=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),j=this.resolveAbsoluteFilePaths(Q,W.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=j$($.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($),J=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,W=Z(J?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:W}))?.updated===!1)return;Q.sessionMetadata=W,Q.artifacts.manifest.metadata=W}async finalizeSingleRun($,Z){if(_4($))return;let Q=Z==="aborted"||$.aborting,J=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":J?"failed":"completed",exitCode:J?1:0,shutdownReason:J?"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)n4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});r5($);let Q=[],J=(W,X)=>{Q.push(X),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:W,error:X,severity:"warn"}),G$($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,Z.status,Z.exitCode)}catch(W){J("update_status",W)}try{await $.agent.shutdown(Z.shutdownReason)}catch(W){J("agent_shutdown",W)}}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(W){J("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){J("plugin_sandbox_shutdown",W)}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=[],J=(W,X)=>{Q.push(X),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:W,error:X,severity:"warn"}),G$($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:X,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(Z)}catch(W){J("agent_shutdown",W)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(W){J("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){J("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let J=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!J.updated)return;let W=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(W.status=Z,V0(Z))delete W.ended_at,W.exit_code=null;else W.ended_at=J.endedAt??$0(),W.exit_code=typeof Q==="number"?Q:null;$.artifacts.manifest=W,$.status=Z,$.updatedAt=J.endedAt??$0(),$.endedAt=V0(Z)?null:W.ended_at,$.exitCode=W.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,W),this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(J){if(!H8($.config.providerId)||!tP(J))throw J;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(J){if(J instanceof U9)throw Error(`${J.providerId} requires re-authentication.`);throw J}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 I$($);throw G$(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((J)=>J.trim()).filter((J)=>J.length>0).map((J)=>oP(J)?J:KJ($,J));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return N1({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=L0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let J=KJ(Z),W=`${Q}.messages.json`,X;try{X=nP($)}catch{return z0()}let Y=z0();for(let j of X){if(!j.endsWith(".messages.json"))continue;if(j===W)continue;let V=KJ($,j);if(V===J)continue;let B=await t1(V);if(B.length===0)continue;Y=L0(Y,s5(B))}return Y}withPersistedAggregateUsageFloor($,Z){let Q=ZS(Z.metadata?.aggregateUsage);if(Q)return QS($,Q);let J=Z.metadata?.aggregatedAgentsCost;if(typeof J!=="number"||!Number.isFinite(J)||J<=$.totalCost)return $;return{...$,totalCost:J}}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:Q$({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($)),HK))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(HK)).find((J)=>J.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return YK(this.sessionService,$,...Z)}invokeOptional($,...Z){return jK(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return VK(this.sessionService,$,...Z)}}function JS($){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 y4,h4;function WS($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;uB(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function XS($){await $.reconcileDeadSessions?.().catch(()=>{})}function AK($){try{let Z=new X$;return Z.init(),new Y$(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),FK($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new N3(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function KK($,Z,Q){return new K$({sessionService:Q??$.sessionService??AK($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function YS($){if(y4)return y4;if(h4)return await h4;return h4=(async()=>{return y4=AK($),await XS(y4),y4})().finally(()=>{h4=void 0}),await h4}async function L9($){let Z=r0($.distinctId);$.telemetry?.setDistinctId(Z);let Q=JS($);if(WS(Q,$),Q==="remote"){let J=$.remote?.endpoint?.trim();if(!J)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:J}),new x5({endpoint:J,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let J=$.hub?.endpoint?.trim(),W=J||await G4({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!W)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:W,explicitEndpoint:J||void 0}),new a$({url:W,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Q==="auto"){let J=await Z3({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(J){$.logger?.log("Using discovered local hub runtime host",{url:J});let W=new a$({url:J,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await W.connect(),W}catch(X){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:X}),FK($.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"}),KK($,Z)}return KK($,Z)}import{existsSync as jS,mkdirSync as VS,readFileSync as BS,writeFileSync as HS}from"node:fs";import{dirname as GS}from"node:path";import{FEATURE_FLAGS as fK,FeatureFlagDefaultValue as FJ}from"@cline/shared";var KS=3600000,FS=604800000,UK=1;class k4{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??KS,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 J=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:Z||null};try{let W=await this.provider.getAllFlagsAndPayloads({flagKeys:fK.length>0?fK:void 0,context:{...this.context,userId:Z}});if(this.cacheInfo.userId!==Z)return;this.cacheInfo.flagsPayload=W,this.rebuildCacheFromSnapshot(W),this.writePersistentCache()}catch(W){if(this.cacheInfo.userId!==Z)return;throw this.cacheInfo=J.updateTime?J:{updateTime:0,userId:null},this.logger?.error?.("Error polling SDK feature flags",{error:W}),W}}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(([,J])=>this.isFeatureFlagPayload(J));if(Z.length===0)return;let Q={};for(let[J,W]of Z)Q[J]=W;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!jS(this.cacheFilePath))return;let $=JSON.parse(BS(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==UK||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;VS(GS(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:UK,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};HS(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
720
+ `,"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 J=this.getFeatureFlag(Q);Z.set(Q,J??!1)}this.cache=Z}getFeatureFlag($){try{let Z=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],J=Z??Q??FJ[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==J)this.telemetry?.capture({event:g.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return J}catch(Z){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:Z}),FJ[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??FJ[$]}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 I4{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}l2();import{execFile as AS}from"node:child_process";import*as LK from"node:fs/promises";import*as Z8 from"node:path";import{promisify as fS}from"node:util";var US=fS(AS),DS=52428800;async function _9($,Z){let{stdout:Q}=await US("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:DS,encoding:"utf8"});return Q}function DK($){return $.split("\x00").filter(Boolean)}function _K($,Z){let Q=Z8.resolve($,Z),J=Z8.relative($,Q);if(J.startsWith("..")||Z8.isAbsolute(J))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function LS($,Z,Q){try{return await _9($,["show",`${Z}:${Q}`])}catch{return""}}async function _S($,Z){try{return await LK.readFile(_K($,Z),"utf8")}catch{return""}}async function TS($,Z){await _9($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,J]=await Promise.all([_9($,["diff","--name-only","-z",Z.ref,"--"]),_9($,["ls-files","--others","--exclude-standard","-z"])]);return[...new Set([...DK(Q),...DK(J)])].sort((X,Y)=>X.localeCompare(Y))}function TK($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=G9(P4($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let J=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!J)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Q,cwd:J}}async function OK($,Z){let Q=await TS($,Z);return(await Promise.all(Q.map(async(W)=>{let[X,Y]=await Promise.all([LS($,Z.ref,W),_S($,W)]);return{filePath:_K($,W),leftContent:X,rightContent:Y}}))).filter((W)=>W.leftContent!==W.rightContent)}async function AJ($){let Z=TK($),Q=await OK(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}class fJ{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,Z,Q,J,W,X,Y,j,V,B){this.clientName=Z,this.runtimeAddress=Q,this.host=$,this.prepare=J,this.capabilities=W,this.logger=X,this.telemetry=Y,this.distinctId=j,this.featureFlags=V,this.settings=dV($),this.pendingPrompts=lV($),this.automation=new pZ(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=B?new Z4({workspaceRoot:B.workspaceRoot??process.cwd(),specs:{cronSpecsDir:B.cronSpecsDir??B.cronDir,scope:OX(B.cronScope),workspaceRoot:B.workspaceRoot},runtimeHandlers:qX({host:$,getExtensionContext:()=>F6({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:B.dbPath,logger:B.logger,pollIntervalMs:B.pollIntervalMs,claimLeaseSeconds:B.claimLeaseSeconds,globalMaxConcurrency:B.globalMaxConcurrency,watcherDebounceMs:B.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((H)=>{if(H.type!=="ended")return;this.disposeSessionBootstrap(H.payload.sessionId)})}static async create($={}){let Z=r0($.distinctId),Q=C0($.capabilities),J={...$,capabilities:Q,distinctId:Z},W=await L9(J),X=TX($.automation),Y=$.featureFlags||new k4({provider:new I4,telemetry:$.telemetry,logger:$.logger,context:{distinctId:Z,clientName:$.clientName}}),j=new fJ(W,$.clientName,W.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=pV($),Q=await this.prepare?.(Z);try{let J=Q?await Q.applyToStartSessionInput(Z):Z,W=await this.host.startSession(A7(J,{defaultCapabilities:this.capabilities,withExtensionContext:(X)=>F6({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(W.sessionId))this.activeSessionBootstraps.set(W.sessionId,Q);else await Promise.resolve(Q.dispose?.());return rV({input:J,sessionId:W.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),W}catch(J){throw await Promise.resolve(Q?.dispose?.()),J}}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 r7(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(...$);updateSessionCompactionState=(...$)=>this.host.updateSessionCompactionState(...$);readSessionCompactionState=(...$)=>this.host.readSessionCompactionState(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let Z=$.start?A7($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>F6({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 AJ({session:Q,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,Z){return this.host.subscribe($,Z)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()};updateSessionConnection=(...$)=>{return this.host.updateSessionConnection?.(...$)??Promise.resolve()}}import{HookEventNameSchema as zK,HookEventPayloadSchema as MK,parseHookEventPayload as O9,resolveHookSessionContext as ES}from"@cline/shared";import{z as $2}from"zod";import{spawn as OS}from"node:child_process";import{augmentNodeCommandForDebug as qS,withResolvedClineBuildEnv as zS}from"@cline/shared";function MS($){let Z=$.trim();if(!Z)return{};let J=Z.split(`
721
+ `).map((X)=>X.trim()).filter(Boolean).filter((X)=>X.startsWith("HOOK_CONTROL\t")).map((X)=>X.slice(13)),W=J.length>0?J[J.length-1]:Z;try{return{parsedJson:JSON.parse(W)}}catch(X){return{parseError:X instanceof Error?X.message:"Failed to parse subprocess stdout JSON"}}}function RS($,Z){let Q=$ instanceof Error?$:Error(String($)),J=Q,W=Z.join(" ");if(J.code==="EACCES")return Error(`Failed to execute hook command "${W}" (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 "${W}": ${Q.message}`)}async function NS($,Z){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((J,W)=>{let X=(Y)=>{Q.off("error",X);let j=Y.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){J();return}W(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"){J();return}W(Y);return}J()})})}async function T9($,Z){let Q=qS(Z.command,{env:Z.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let J=!!Z.detached,W=OS(Q[0],Q.slice(1),{cwd:Z.cwd,env:zS(Z.env),stdio:J?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:J,windowsHide:!0}),X=new Promise((K)=>{W.once("spawn",()=>{try{Z.onSpawn?.({command:Q,pid:W.pid??void 0,detached:J})}catch{}K()})}),Y=new Promise((K,F)=>{W.once("error",(A)=>{F(RS(A,Q))})});if(await NS(W,JSON.stringify($)),J){await Promise.race([X,Y]),W.unref();return}if(!W.stdout||!W.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let j="",V="",B=!1,H;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)H=setTimeout(()=>{B=!0,W.kill("SIGKILL")},Z.timeoutMs);W.once("close",(F)=>{if(H)clearTimeout(H);let{parsedJson:A,parseError:D}=MS(j);K({exitCode:F,stdout:j,stderr:V,parsedJson:A,parseError:D,timedOut:B})})});return await Promise.race([G,Y])}var wS=$2.object({contextModification:$2.string().optional(),cancel:$2.boolean().optional(),review:$2.boolean().optional(),errorMessage:$2.string().optional(),context:$2.string().optional(),overrideInput:$2.unknown().optional()}).passthrough();var CS=["agent","hook"];async function q9($,Z={}){let Q=Z.command??CS;return await T9($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function RK($){return $ instanceof Error?$:Error(String($))}function PS($){if(!$||typeof $!=="object")return;let Z=wS.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 W=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:W,overrideInput:Object.hasOwn(Q,"overrideInput")?Q.overrideInput:void 0}}function qK($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,J]of Object.entries($))if(typeof J==="string")Z[Q]=J;else Z[Q]=JSON.stringify(J);return Z}function E1($,Z,Q){let J=Q.env??process.env,W=J.CLINE_USER_ID?.trim()||J.USER?.trim()||"unknown",X=Q.cwd||process.cwd();return{clineVersion:J.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:Z.conversationId,sessionContext:ES(Q.sessionContext,{hookName:$,conversationId:Z.conversationId,agentId:Z.agentId,parentAgentId:Z.parentAgentId}),workspaceRoots:X?[X]:[],workspaceInfo:Q.workspaceInfo,userId:W,agent_id:Z.agentId,parent_agent_id:Z.parentAgentId}}function SS($){return{name:$.name,message:$.message,stack:$.stack}}function bS($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function yS($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function hS($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function kS($){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 IS($){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 Z2($,Z){try{let Q=await q9($,{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?.(RK(Q),$)}}function NK($={}){return{hooks:{beforeRun:async(j)=>{let V=yS(j);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...E1("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await Z2(H,$)}else{let H={...E1("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await Z2(H,$)}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},B={...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:qK(j.input)}};try{let H=await q9(B,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:B,result:H,detached:!1}),H?.timedOut)throw Error("tool_call hook command timed out");if(H?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${H.parseError}`);return IS(PS(H?.parsedJson))}catch(H){$.onDispatchError?.(RK(H),B);return}},afterTool:async(j)=>{let V=kS(j),B={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},H={...E1("tool_result",B,$),hookName:"tool_result",iteration:j.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:qK(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};await Z2(H,$);return},afterRun:async({snapshot:j,result:V})=>{let B={agentId:j.agentId,conversationId:j.conversationId??j.runId??j.agentId,parentAgentId:j.parentAgentId??null};if(V.status==="completed"){let K={...E1("agent_end",B,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await Z2(K,$);return}let H=V.status==="aborted"||bS(V.error?.message)?"agent_abort":"agent_error",G=H==="agent_error"?{...E1(H,B,$),hookName:H,iteration:V.iterations,error:SS(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...E1(H,B,$),hookName:H,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await Z2(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},B={...E1("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:hS(j.message.content),attachments:[]}};await Z2(B,$)}},shutdown:async({agentId:j,conversationId:V,parentAgentId:B,reason:H})=>{let G={...E1("session_shutdown",{agentId:j,conversationId:V,parentAgentId:B},$),hookName:"session_shutdown",reason:H};await Z2(G,$)}}}import{createSessionId as xS}from"@cline/shared";function n0($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function EK($,Z,Q){return{version:$.version,requestId:$.requestId??xS("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class z9{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return n0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return n0($,{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 n0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return n0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return n0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return n0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return n0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return n0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return n0($,{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 n0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return n0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return n0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return EK($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Z){return EK($,"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 R9($){return $?new Date($).getTime():void 0}function gS($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function M9($){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:R9($.nextRunAt),lastRunAt:R9($.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:gS($)}}function mS($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function UJ($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:R9($.startedAt),endedAt:R9($.completedAt),status:mS($.status),errorMessage:$.error}}class N9{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new $4({dbPath:$.dbPath}),this.materializer=new a8({store:this.store}),this.runner=new o8({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(R7($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return M9(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?M9(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>M9(Z))}updateSchedule($,Z){if(Z.cronPattern!==void 0)R7(Z.cronPattern);let Q=this.store.getHubSchedule($);if(!Q)return;let J=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot;if((Z.enabled??Q.enabled)&&!J)throw Error("workspaceRoot is required for enabled schedules");let X=this.store.updateHubSchedule($,{...Z,scheduleId:$});return X?M9(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 UJ(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),UJ(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((W)=>{let X=Z??this.store.getSpec(W.specId);if(!X||X.source!=="hub-schedule")return;return UJ(W,X.externalId)}).filter((W)=>{if(!W)return!1;return!$.status||W.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,J=0,W=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)W+=Y.endedAt-Y.startedAt,J+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:J>0?W/J/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,J)=>String(Q.nextRunAt).localeCompare(String(J.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:J})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:J}))}}P9();import{resolveClineBuildEnv as Vb}from"@cline/shared";function Bb($,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 Hb="cline-hub-auth.";function Gb($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function Kb($,Z){let Q=new URL($),J=new URL(Z);return Q.search="",Q.hash="",J.search="",J.hash="",Q.toString()===J.toString()}function PK(){return Vb()==="production"?$$():O1()}async function Fb($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=PK(),J=await D0(Q.discoveryPath);if(J?.url&&Kb($.toString(),J.url))return J.authToken;return}async function Ab($={}){let Z=e1($);if(!Gb($)){let Q=PK(),J=await D0(Q.discoveryPath);if(J?.url)return J.url}return T1(Z.host,Z.port,Z.pathname)}async function SK($){return await new Promise((Z,Q)=>{(async()=>{let J=new URL($),W=await Fb(J);J.hash="";let X=new WebSocket(J.toString(),W?[`${Hb}${W}`]:void 0),Y=new Map,j=0;X.addEventListener("open",()=>{Z({send(V){let B=V.requestId??`hub-client-${++j}`;return new Promise((H,G)=>{Y.set(B,{resolve:H,reject:G});let K={kind:"command",envelope:{...V,requestId:B}};X.send(JSON.stringify(K))})},close(){X.close()}})}),X.addEventListener("message",(V)=>{let B=JSON.parse(String(V.data));if(B.kind==="reply"&&B.envelope.requestId){let H=Y.get(B.envelope.requestId);if(H)Y.delete(B.envelope.requestId),H.resolve(B.envelope)}}),X.addEventListener("close",()=>{for(let V of Y.values())V.reject(Error("Hub connection closed"));Y.clear()}),X.addEventListener("error",(V)=>{Q(Bb(V,$))})})().catch(Q)})}async function rs($){try{return(await SK($)).close(),!0}catch{return!1}}async function is($,Z){let Q=await Ab($),J=await SK(Q);try{return await J.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{J.close()}}function TJ($){return $?JSON.parse(JSON.stringify($)):{}}function S9($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?TJ(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 bK($,Z){return $.error?.message??`hub command failed: ${Z}`}function fb($){let Z=TJ($);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 J=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof J?.message==="string"&&J.message.trim())return{...Z,error:J.message.trim()};return Z}function yK($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function Ub($){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 Db($){let Z=TJ($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||yK(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||yK(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:fb($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class Lb{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new q1({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=S9(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(x$(Q))return;throw Q}return S9(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(bK(Q,"session.messages"));let J=Q.payload?.messages;return Array.isArray(J)?J:[]}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 J=$.config,W=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...J?{workspaceRoot:J.workspaceRoot,cwd:J.cwd,sessionConfig:{providerId:J.provider,modelId:J.model,apiKey:J.apiKey,cwd:J.cwd??J.workspaceRoot,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:J.mode??"act",rules:J.rules,maxIterations:J.maxIterations,enableTools:J.enableTools,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},metadata:{source:J.source??"cli",provider:J.provider,model:J.model,enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams,prompt:void 0,interactive:J.interactive!==!1},runtimeOptions:{mode:J.mode,systemPrompt:J.systemPrompt,maxIterations:J.maxIterations,enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams,autoApproveTools:J.autoApproveTools,configExtensions:J.configExtensions},modelSelection:{provider:J.provider,model:J.model,apiKey:J.apiKey},toolPolicies:J.toolPolicies}:{}},Z);if(!W.ok)throw Error(bK(W,"session.restore"));let X=S9(W.payload);if(Q&&!X?.sessionId)throw Error("hub checkpoint restore returned no session id");let Y=Array.isArray(W.payload?.messages)?W.payload.messages:void 0,j=Ub(W.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((J)=>S9({session:J})).filter((J)=>Boolean(J?.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((W)=>W.trim()).filter(Boolean)),J=this.client.subscribe((W)=>{let X=Db(W);if(!X)return;if(Q.size>0&&!Q.has(X.sessionId))return;Z.onEvent?.(X)});return this.ensureMetadataApplied().catch((W)=>{Z.onError?.(W instanceof Error?W:Error(String(W)))}),J}streamTeamProgress($,Z){let Q=this.client.subscribe((J)=>{if(J.event!=="team.progress"||!J.payload)return;Z.onProjection?.(J.payload)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),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 _b{client;constructor($){this.client=new q1({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let Z=await this.client.command("session.list",{limit:$});return Array.isArray(Z.payload?.sessions)?Z.payload.sessions:[]}subscribeUI($){return this.client.subscribe((Z)=>{switch(Z.event){case"ui.notify":$.onNotify?.(Z.payload);break;case"ui.show_window":$.onShowWindow?.(Z.payload);break;case"hub.client.registered":$.onClientRegistered?.(Z.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(Z.payload??{});break;case"session.created":$.onSessionCreated?.(Z.payload??{});break;case"session.updated":$.onSessionUpdated?.(Z.payload??{});break;case"session.detached":$.onSessionDetached?.(Z.payload??{});break}})}}import{normalizeProviderId as Tb}from"@cline/llms";function Ob($){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 qb($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function Xt($={}){let Z=new K$({sessionService:new Y$(new X$),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Q){let J=(Q.cwd?.trim()||Q.workspaceRoot).trim(),W=await Z.startSession({source:Q.source?.trim()||w0.CLI,interactive:!1,config:{providerId:Tb(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:J,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:qb(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:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(Q,J){let W=await Z.runTurn({sessionId:Q,prompt:J.prompt,userImages:J.attachments?.userImages,userFiles:J.attachments?.userFiles?.map((X)=>X.content)});if(!W)throw Error("local hub schedule runtime returned no turn result");return{result:Ob(W)}},async abortSession(Q){return await Z.abort(Q,Error("hub schedule abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}import{resolveClineBuildEnv as gF}from"@cline/shared";function zb($){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(`
722
+ `).trim()||void 0}var hK=120,OJ="...";function qJ($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=hK)return Z;let Q=hK-Buffer.byteLength(OJ,"utf8");if(Q<=0)return OJ;let J="";for(let W of Z){if(Buffer.byteLength(J+W,"utf8")>Q)break;J+=W}return`${J}${OJ}`}async function kK($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,W=[...await t1(Q)].reverse().find((V)=>V.role==="assistant"),X=W?zb(W.content):void 0,Y=$?.workspaceRoot?.trim()||"workspace",j=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():Y;return{title:`Task completed (${Z})`,body:qJ(X&&X.length>0?X:j.length>0?j:Y),severity:"info"}}import{captureSdkError as k9,createSessionId as My}from"@cline/shared";import{createSessionId as Eb}from"@cline/shared";import{createSessionId as Nb}from"@cline/shared";function Mb($){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 Rb($){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 b9($,Z,Q,J){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:Z?.createdByClientId??"hub",status:Mb($.status),participants:Z?[...Z.participants.values()]:[],metadata:Rb($),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}}:{},...J?{aggregateUsage:{...J}}:{}}}function x($,Z){return{version:$.version,requestId:$.requestId,ok:!0,...Z!==void 0?{payload:Z}:{}}}function P($,Z,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Z,message:Q}}}function Q8($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function T0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function J2($,Z,Q){return{version:"v1",event:$,eventId:Nb("hevt_"),sessionId:Q,timestamp:Date.now(),payload:Z}}async function M0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let J=await $.sessionHost.getAccumulatedUsage?.(Z);return b9(Q,$.sessionState.get(Z),J?.usage,J?.aggregateUsage)}async function I0($,Z){let Q=await $.sessionHost.getSession(Z);if(!Q)return;let[J,W]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(Z):[],$.sessionHost.getAccumulatedUsage?.(Z)]);return Q$({session:Q,messages:J,usage:W?.usage,aggregateUsage:W?.aggregateUsage})}function zJ($,Z,Q,J,W={}){let X=$.sessionState.get(Z);if(X){if(W.interactive!==void 0)X.interactive=W.interactive;if(J==="creator"&&!X.createdByClientId)X.createdByClientId=Q;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:J});return X}let Y={createdByClientId:Q,interactive:W.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:J}]])};return $.sessionState.set(Z,Y),Y}function IK($,Z,Q,J,W={}){let X=$.sessionState.get(Z);if(X){if(W.interactive!==void 0)X.interactive=W.interactive;if(!X.participants.has(Q))X.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:J});return X}let Y={interactive:W.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:J}]])};return $.sessionState.set(Z,Y),Y}async function MJ($,Z){let Q=Eb("approval_"),J=Z.sessionId;if($.sessionState.get(J)?.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:J,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},J))})}function RJ($,Z,Q){let J=$.pendingApprovals.get(Z);if(!J)return;return $.pendingApprovals.delete(Z),J.resolve(Q),{sessionId:J.sessionId}}function NJ($,Z,Q){let J=0;for(let[W,X]of[...$.pendingApprovals.entries()]){if(!Z({approvalId:W,sessionId:X.sessionId}))continue;$.pendingApprovals.delete(W),X.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:W,approved:!1,cancelled:!0,reason:Q},X.sessionId)),J+=1}return J}async function xK($,Z){let Q=typeof Z.payload?.approvalId==="string"?Z.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return P(Z,"approval_not_found",`Unknown approval: ${Q}`);let W=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=RJ($,Q,{approved:X,reason:W});if(!Y)return P(Z,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:X,reason:W},Y.sessionId)),x(Z,{approvalId:Q,approved:X})}import{createSessionId as Pb}from"@cline/shared";function wb($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var gK={debug:10,info:20,warn:30,error:40,silent:50};function Cb(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function c($,Z,Q={}){if(gK[$]<gK[Cb()])return;let J=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:Z,...Object.fromEntries(Object.entries(Q).map(([W,X])=>[W,wb(X)]).filter(([,W])=>W!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${J}`);return}console.log(`[hub] ${J}`)}function EJ($,Z){let Q=Z instanceof Error?Z.stack||Z.message:String(Z);c("error",$,{error:Q})}async function mK($,Z,Q,J,W,X){let Y=Pb("capreq_"),j=performance.now();return c("info","capability.request.start",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:W}),await new Promise((V,B)=>{$.pendingCapabilityRequests.set(Y,{sessionId:Z,targetClientId:W,capabilityName:Q,onProgress:X,resolve:(H)=>{if(c(H.ok?"info":"warn","capability.request.end",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:W,ok:H.ok,error:H.error,durationMs:Math.round(performance.now()-j)}),!H.ok){B(Error(H.error||`Capability ${Q} was rejected by ${W}.`));return}V(H.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:Y,targetClientId:W,capabilityName:Q,payload:J},Z)),c("info","capability.request.published",{requestId:Y,sessionId:Z,capabilityName:Q,targetClientId:W})})}function vK($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",J=$.pendingCapabilityRequests.get(Q);if(!J)return P(Z,"capability_not_found",`Unknown capability request: ${Q}`);if((Z.clientId?.trim()||"")!==J.targetClientId)return P(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${J.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==J.sessionId)return P(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${J.sessionId}`);let X=Z.payload?.payload&&typeof Z.payload.payload==="object"&&!Array.isArray(Z.payload.payload)?Z.payload.payload:{};return J.onProgress?.(X),x(Z,{requestId:Q})}function F$($,Z,Q){let J=0;for(let[W,X]of[...$.pendingCapabilityRequests.entries()]){if(!Z({requestId:W,...X}))continue;$.pendingCapabilityRequests.delete(W),c("warn","capability.request.cancelled",{requestId:W,sessionId:X.sessionId,capabilityName:X.capabilityName,targetClientId:X.targetClientId,reason:Q}),X.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:W,capabilityName:X.capabilityName,targetClientId:X.targetClientId,ok:!1,cancelled:!0,error:Q},X.sessionId)),J+=1}return J}async function cK($,Z){let Q=typeof Z.payload?.sessionId==="string"?Z.payload.sessionId.trim():Z.sessionId?.trim()||"",J=typeof Z.payload?.capabilityName==="string"?Z.payload.capabilityName.trim():"",W=typeof Z.payload?.targetClientId==="string"?Z.payload.targetClientId.trim():"";if(!Q||!J||!W)return P(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,J,X,W);return x(Z,Y)}catch(X){return P(Z,"capability_request_failed",X instanceof Error?X.message:String(X))}}function uK($,Z){let Q=typeof Z.payload?.requestId==="string"?Z.payload.requestId.trim():"",J=$.pendingCapabilityRequests.get(Q);if(!J)return P(Z,"capability_not_found",`Unknown capability request: ${Q}`);let W=Z.clientId?.trim()||"";if(W!==J.targetClientId)return P(Z,"capability_wrong_client",`Capability request ${Q} is owned by ${J.targetClientId}`);if(Z.sessionId?.trim()&&Z.sessionId.trim()!==J.sessionId)return P(Z,"capability_wrong_session",`Capability request ${Q} belongs to session ${J.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 c(j?"info":"warn","capability.respond",{requestId:Q,sessionId:J.sessionId,capabilityName:J.capabilityName,targetClientId:J.targetClientId,respondedByClientId:W,ok:j,error:Y}),J.resolve({ok:j,payload:X,error:Y}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:J.capabilityName,targetClientId:J.targetClientId,respondedByClientId:W,ok:j,payload:X,error:Y},J.sessionId)),x(Z,{requestId:Q,ok:j})}import{createSessionId as Sb}from"@cline/shared";function dK($,Z){let Q=Z.payload,J=Q?.clientId?.trim()||Z.clientId?.trim()||Sb("client_");return $.clients.set(J,{clientId:J,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:J,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),x(Z,{clientId:J})}function lK($,Z){let Q=Z.clientId?.trim(),J=Q?$.clients.get(Q):void 0;if(!Q||!J)return P(Z,"client_not_found","Client is not registered with this hub.");let W=Q8(Z.payload?.metadata);if(J.lastSeenAt=Date.now(),W)J.metadata=JSON.parse(JSON.stringify(W));return x(Z)}function pK($,Z,Q){let J=Z.clientId?.trim();if(J)$.clients.delete(J),Q(J),$.publish($.buildEvent("hub.client.disconnected",{clientId:J}));return x(Z)}function rK($,Z){return x(Z,{clients:[...$.clients.values()]})}A0();import{existsSync as aK,mkdirSync as bb,readdirSync as yb,readFileSync as hb,rmSync as kb,writeFileSync as Ib}from"node:fs";import{dirname as xb,join as iK}from"node:path";import{CONNECTOR_PLATFORMS as gb,connectorChannelsFromPlatforms as mb,listConnectorCatalog as oK,shouldIncludeConnectorField as vb}from"@cline/shared";import{resolveConnectorDataDir as cb,resolveConnectorSettingsPath as CJ}from"@cline/shared/storage";var ub=1,nK={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},db={discord:{required:["userName","applicationId"],optional:["startedAt","port","baseUrl"]},telegram:{required:["botUsername"],optional:["startedAt"]},gchat:{required:["userName"],optional:["startedAt","port","baseUrl"]},linear:{required:["userName"],optional:["startedAt","port","baseUrl"]},slack:{required:["userName"],optional:["startedAt","connectionMode","port","baseUrl"]},whatsapp:{required:["userName"],optional:["startedAt","phoneNumberId","port","baseUrl"]}};function A$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function v4($){return typeof $==="string"?$.trim():void 0}function sK($){if(!aK($))return;try{let Z=JSON.parse(hb($,"utf8"));return A$(Z)?Z:void 0}catch{return}}function PJ(){let $=sK(CJ()),Z=A$($?.connectors)?$.connectors:{},Q={};for(let[J,W]of Object.entries(Z)){if(!A$(W))continue;let X=v4(W.type),Y=v4(W.configuredAt),j=v4(W.updatedAt);if(!X||!Y||!j)continue;let V=y9(W.values),B=A$(W.security)?{enabled:W.security.enabled===!0,values:y9(W.security.values)}:void 0;Q[J]={type:X,values:V,security:B,configuredAt:Y,updatedAt:j}}return{version:ub,connectors:Q}}function tK($){let Z=CJ();bb(xb(Z),{recursive:!0}),Ib(Z,`${JSON.stringify($,null,2)}
723
+ `,"utf8")}function y9($){if(!A$($))return{};let Z={};for(let[Q,J]of Object.entries($))if(typeof J==="string")Z[Q]=J.trim();return Z}function lb($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function pb($){let Z=iK(cb(),$);if(!aK(Z))return[];return yb(Z).filter((Q)=>Q.endsWith(".json")&&!Q.endsWith(".threads.json")).map((Q)=>iK(Z,Q))}function rb($,Z,Q){let J=Z.botUsername??Z.userName??Z.applicationId??Z.phoneNumberId??String(Q);return`${$}:${J}`}function ib($,Z){let Q=sK(Z);if(!Q)return;let J=typeof Q.pid==="number"?Q.pid:void 0,W=typeof Q.hubUrl==="string"?Q.hubUrl:typeof Q.rpcAddress==="string"?Q.rpcAddress:void 0;if(!J||!W||!lb(J))return;let X=db[$];if(!X)return;let Y={};for(let j of X.required){let V=nK[j](Q);if(!V||typeof V==="string"&&!V.trim())return;Y[j]=V}for(let j of X.optional){let V=nK[j](Q);if(V!==void 0)Y[j]=V}return{id:rb($,Y,J),type:$,pid:J,hubUrl:W,...Y}}function nb(){let $=[];for(let{name:Z}of oK())for(let Q of pb(Z)){let J=ib(Z,Q);if(J)$.push(J)}return $.sort((Z,Q)=>{if(Z.type!==Q.type)return Z.type.localeCompare(Q.type);let J=Z.botUsername??Z.userName??"",W=Q.botUsername??Q.userName??"";return J.localeCompare(W)})}function ab(){let $=PJ();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 SJ(){return{available:mb(),active:nb(),configured:ab()}}function ob($,Z){if($.required&&!Z[$.flag]?.trim())throw Error(`${$.label} is required`)}function sb($,Z){let Q={};for(let W of $.fields)Q[W.flag]=Z[W.flag]??W.initialValue??"";let J={};for(let W of $.fields){if(!vb(W,Q))continue;ob(W,Q),J[W.flag]=Q[W.flag]}return J}function tb($){if(!A$($))throw Error("connector.configure payload must be an object.");let Z=v4($.channel);if(!Z)throw Error("channel is required");let Q=gb.find((K)=>K.id===Z);if(!Q)throw Error(`unknown connector channel: ${Z}`);if(!new Set(oK().map((K)=>K.name)).has(Q.id))throw Error(`connector channel is not available: ${Z}`);let W=y9($.values),X=sb(Q,W),Y=A$($.security)?$.security:{},j=Y.enabled===!0,V=y9(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 B=PJ(),H=new Date().toISOString(),G=B.connectors[Z];return B.connectors[Z]={type:Z,values:X,security:j?{enabled:!0,values:V}:{enabled:!1,values:{}},configuredAt:G?.configuredAt??H,updatedAt:H},tK(B),SJ()}function eb($){if(!A$($))throw Error("connector.delete_config payload must be an object.");let Z=v4($.channel);if(!Z)throw Error("channel is required");let Q=PJ();if(delete Q.connectors[Z],Object.keys(Q.connectors).length>0)tK(Q);else kb(CJ(),{force:!0});return SJ()}function $y($){return $==="connector.configure"||$==="connector.delete_config"}function wJ($,Z,Q){if(!$y(Z.command))return;V8($.telemetry,{ulid:Z.sessionId??Z.requestId??"hub",tool:Z.command,success:Q})}async function eK($,Z){try{if(Z.command==="connector.channels")return x(Z,SJ());if(Z.command==="connector.configure"){let Q=tb(Z.payload);return wJ($,Z,!0),x(Z,Q)}if(Z.command==="connector.delete_config"){let Q=eb(Z.payload);return wJ($,Z,!0),x(Z,Q)}return P(Z,"unsupported_connector_command",`unsupported connector command: ${Z.command}`)}catch(Q){return wJ($,Z,!1),P(Z,"connector_command_failed",Q instanceof Error?Q.message:String(Q))}}var Zy=30000;function Qy($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function Jy($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function Wy($,Z,Q){let J=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${Z}`;return P($,i8,J)}function Xy($){return $?$:void 0}function Yy($){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 jy($,Z,Q,J){let W=performance.now(),X=!1,Y={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q.sessionId,timeoutMs:J},j=setInterval(()=>{if(X)return;let H=Math.round(performance.now()-W);c("warn","run.heartbeat",{...Y,elapsedMs:H}),$.publish($.buildEvent("run.heartbeat",{requestId:Z.requestId,elapsedMs:H,...J?{timeoutMs:J}:{}},Q.sessionId))},Zy),V=$.sessionHost.runTurn(Q);V.then((H)=>{if(!X)return;c("warn","run.late_end",{...Y,elapsedMs:Math.round(performance.now()-W),finishReason:H?.finishReason})},(H)=>{if(!X)return;c("error","run.late_error",{...Y,elapsedMs:Math.round(performance.now()-W),error:H})});let B;try{if(!J)return await V;return await Promise.race([V,new Promise((H,G)=>{B=setTimeout(()=>{let K=`Hub run ${Z.command} timed out after ${J}ms.`;X=!0,clearInterval(j),G(Error(K)),c("error","run.timeout",{...Y,elapsedMs:Math.round(performance.now()-W)}),NJ($,(F)=>F.sessionId===Q.sessionId,K),F$($,(F)=>F.sessionId===Q.sessionId,K),$.sessionHost.abort(Q.sessionId,K).catch((F)=>{c("error","run.timeout_abort_failed",{...Y,error:F})})},J)})])}finally{if(X=!0,clearInterval(j),B)clearTimeout(B)}}async function $F($,Z){let Q=T0(Z),J=Z.payload&&typeof Z.payload==="object"?Z.payload:{},W=typeof J.prompt==="string"?J.prompt:typeof J.input==="string"?J.input:"";if(!W.trim())return P(Z,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let X=J.attachments&&typeof J.attachments==="object"&&!Array.isArray(J.attachments)?J.attachments:void 0,Y=Array.isArray(X?.userFiles)?X.userFiles.filter((H)=>typeof H==="string"):void 0,j=Yy(J);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let V;try{V=await jy($,Z,{sessionId:Q,prompt:W,mode:Xy(J.mode),delivery:J.delivery==="queue"||J.delivery==="steer"?J.delivery:void 0,userImages:Array.isArray(X?.userImages)?X.userImages:void 0,userFiles:Y,timeoutMs:j},j)}catch(H){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(x$(H))return Wy(Z,Q,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Q)),H}if(V){let H=await I0($,Q),G=Jy(V);if($.publish($.buildEvent(Qy(V.finishReason),{reason:V.finishReason,...G?{error:G}:{},result:V,...H?{snapshot:H}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let B=await I0($,Q);return x(Z,V||B?{...V?{result:V}:{},...B?{snapshot:B}:{}}:void 0)}async function ZF($,Z){let Q=T0(Z),J=typeof Z.payload?.reason==="string"?Z.payload.reason:"Run was aborted before pending approval or capability request was resolved.";NJ($,(W)=>W.sessionId===Q,J);try{await $.sessionHost.abort(Q,Z.payload?.reason)}catch(W){c("warn","run.abort_failed",{command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Q,error:W})}finally{F$($,(W)=>W.sessionId===Q,J)}return x(Z,{applied:!0})}async function QF($,Z){let Q=O9(Z.payload?.payload);if(!Q)return P(Z,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),x(Z,{applied:!0})}async function JF($,Z){switch(Z.type){case"chunk":return;case"agent_event":await Vy($,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,J]=await Promise.all([M0($,Z.payload.sessionId),I0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...J?{snapshot:J}:{}},Z.payload.sessionId));return}case"ended":await By($,Z);return;default:return}}async function Vy($,Z){let{sessionId:Q,event:J}=Z.payload;if(J.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:J.iteration},Q));return}if(J.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:J.iteration,hadToolCalls:J.hadToolCalls,toolCallCount:J.toolCallCount},Q));return}if(J.type==="content_start"){if(J.contentType==="text"&&typeof J.text==="string"&&J.text.length>0){$.publish($.buildEvent("assistant.delta",{text:J.text},Q));return}if(J.contentType==="reasoning"){if(J.redacted&&!J.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof J.reasoning==="string"&&J.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:J.reasoning,redacted:J.redacted===!0},Q));return}if(J.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:J.toolCallId,toolName:J.toolName,input:J.input},Q));return}}if(J.type==="content_end"){switch(J.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:J.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:J.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:J.toolCallId,toolName:J.toolName,output:J.output,error:J.error},Q));break}return}if(J.type==="usage"){let W;try{W=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{W=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:J.inputTokens,outputTokens:J.outputTokens,cacheReadTokens:J.cacheReadTokens??0,cacheWriteTokens:J.cacheWriteTokens??0,totalCost:J.cost??0},totals:{inputTokens:J.totalInputTokens,outputTokens:J.totalOutputTokens,cacheReadTokens:J.totalCacheReadTokens??0,cacheWriteTokens:J.totalCacheWriteTokens??0,totalCost:J.totalCost??0},usage:W?.usage,aggregateUsage:W?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":J.parentAgentId?"subagent":"lead",agentId:J.agentId,conversationId:J.conversationId,parentAgentId:J.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(J.type==="done")$.publish($.buildEvent("agent.done",{reason:J.reason,text:J.text,iterations:J.iterations,usage:J.usage},Q))}async function By($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),J=Q===Z.payload.reason||Q==="run.start.reply";if(J)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[W,X]=await Promise.all([M0($,Z.payload.sessionId),I0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let Y=await kK(W);$.publish($.buildEvent("ui.notify",Y,Z.payload.sessionId))}if(J)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 jF,parseRuntimeConfigExtensions as VF}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as dt,HUB_COMPACTION_CAPABILITY as lt,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as pt,HUB_HOOK_CAPABILITY_PREFIX as rt,HUB_MISTAKE_LIMIT_CAPABILITY as it,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as nt,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as at,isHubToolExecutorName as Hy}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as $e,HUB_COMPACTION_CAPABILITY as Ze,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Qe,HUB_HOOK_CAPABILITY_PREFIX as Je,HUB_MISTAKE_LIMIT_CAPABILITY as We,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Xe,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Ye}from"@cline/shared";var Gy=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function W2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function Ky($,Z){let Q=typeof $.name==="string"?$.name.trim():"",J=typeof $.description==="string"?$.description:"",W=typeof $.capabilityName==="string"?$.capabilityName.trim():"",X=W2($.inputSchema);if(!Q||!J||!X||!W||Z.has(W))return;return Z.add(W),{kind:"tool",capabilityName:W,name:Q,description:J,inputSchema:X,...W2($.lifecycle)?{lifecycle:W2($.lifecycle)}:{}}}function yJ($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let J of $){if(!J||typeof J!=="object"||Array.isArray(J))continue;let W=J,X=W.kind,Y=typeof W.capabilityName==="string"?W.capabilityName.trim():"";if(!Y||Q.has(Y))continue;if(X==="tool"){let j=Ky(W,Q);if(j)Z.push(j);continue}if(X==="toolExecutor"){let j=W.executor;if(!Hy(j))continue;Q.add(Y),Z.push({kind:"toolExecutor",capabilityName:Y,executor:j});continue}if(X==="hook"){let j=typeof W.name==="string"?W.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,...W2(W.config)?{config:W2(W.config)}:{}});continue}if(X==="checkpoint"){Q.add(Y),Z.push({kind:"checkpoint",capabilityName:Y,...W2(W.config)?{config:W2(W.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 XF($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function Fy($){return Object.hasOwn($,"update")?$.update:$}function c4($){return $.trim().replace(/^\/+/,"").toLowerCase()}function Ay($){let Z=($??[]).map(c4).filter(Boolean);return Z.length>0?new Set(Z):void 0}function fy($,Z,Q){if(!Q)return!0;let J=c4($),W=c4(Z),X=J.includes(":")?J.split(":").at(-1)??J:J,Y=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(J)||Q.has(W)||Q.has(X)||Q.has(Y)}function bJ($,Z){let Q=Ay(Z);return $.records.skill.map((J)=>({id:J.id,name:J.item.name,description:"description"in J.item&&typeof J.item.description==="string"?J.item.description:void 0,disabled:J.item.disabled===!0,skill:J.item})).filter((J)=>fy(J.id,J.name,Q))}function WF($,Z){let Q=async(J,W)=>{let X=c4(J),j=bJ($,Z).filter((K)=>K.id===X||c4(K.name)===X||K.id.endsWith(`:${X}`)).filter((K)=>!K.disabled);if(j.length!==1)return j.length>1?`Skill "${J}" is ambiguous. Use one of: ${j.map((K)=>K.id).join(", ")}`:`Skill "${J}" not found.`;let V=j[0].skill,B=W?.trim(),H=B?`
720
724
  <command-args>${B}</command-args>`:"",G=V.description?.trim()?`Description: ${V.description.trim()}
721
725
 
722
726
  `:"";return`<command-name>${V.name}</command-name>${H}
723
727
  <command-instructions>
724
728
  ${G}${V.instructions}
725
- </command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>O3($,Z).map(({skill:W,...J})=>J),enumerable:!0}),Q}function bb($,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 B=J.runtimeCommands.find((H)=>H.name===V);return B?`${B.instructions}${Y.slice(V.length+1)}`:Y},hasConfiguredSkills:(Y)=>O3(J,Y).some((j)=>!j.disabled),createSkillsExecutor:(Y)=>xK(J,Y),createExtension:(Y)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[Y.includeRules?"rules":void 0,Y.registerSkillsTool?"tools":void 0,Y.includeSkills||Y.includeWorkflows?"commands":void 0].filter((j)=>Boolean(j))},setup(j){if(Y.includeRules)j.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>M6(J.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(Y.registerSkillsTool)j.registerTool(z2(xK(J,Y.allowedSkillNames)));for(let V of J.runtimeCommands.filter((B)=>B.kind==="skill"&&Y.includeSkills||B.kind==="workflow"&&Y.includeWorkflows))j.registerCommand({name:V.name,description:V.description,handler:(B)=>{let H=B.trim();return H?`${V.instructions}
729
+ </command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>bJ($,Z).map(({skill:J,...W})=>W),enumerable:!0}),Q}function Uy($,Z,Q,J){let W={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},X=async()=>{let Y=await J($,Q.capabilityName,{},Z);if(Y?.snapshot)W=Y.snapshot};return{start:X,stop:()=>{},refreshType:async()=>{await X()},listRecords:(Y)=>[...W.records[Y]],listRuntimeCommands:()=>[...W.runtimeCommands],resolveRuntimeSlashCommand:(Y)=>{if(!Y.startsWith("/")||Y.length<2)return Y;let V=Y.match(/^\/(\S+)/)?.[1];if(!V)return Y;let B=W.runtimeCommands.find((H)=>H.name===V);return B?`${B.instructions}${Y.slice(V.length+1)}`:Y},hasConfiguredSkills:(Y)=>bJ(W,Y).some((j)=>!j.disabled),createSkillsExecutor:(Y)=>WF(W,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:()=>S6(W.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(Y.registerSkillsTool)j.registerTool(R2(WF(W,Y.allowedSkillNames)));for(let V of W.runtimeCommands.filter((B)=>B.kind==="skill"&&Y.includeSkills||B.kind==="workflow"&&Y.includeWorkflows))j.registerCommand({name:V.name,description:V.description,handler:(B)=>{let H=B.trim();return H?`${V.instructions}
726
730
 
727
- ${H}`:V.instructions}})}})}}function yb($,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:gK(j)},Z))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function hb($,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:gK(Y)},Z,Y.emitUpdate?(V)=>{Y.emitUpdate?.(wb(V))}:void 0))?.result}}))}function kb($,Z,Q,W){let J=new Map(Q.map((Y)=>[Y.name,Y])),X={};for(let Y of Nb){let j=J.get(Y);if(!j)continue;X[Y]=async(V)=>{return(await W($,j.capabilityName,{context:V},Z))?.control}}return Object.keys(X).length>0?X:void 0}function M3($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),W=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),X=$.contributions.find((V)=>V.kind==="checkpoint"),Y=$.contributions.find((V)=>V.kind==="mistakeLimit"),j=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:yb($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...W.length>0?{hooks:kb($.sessionId,$.targetClientId,W,$.requestCapability)}:{},...Q.length>0?{extraTools:hb($.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:bb($.sessionId,$.targetClientId,j,$.requestCapability)}:{}}}}var cK="hubCapabilityOwnerClientId";function uK($,Z){$[cK]=Z}function Ib($){let Z=$?.[cK];return typeof Z==="string"&&Z.trim()?Z.trim():void 0}async function dK($,Z,Q){let W=performance.now(),J={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};m("info","session.create.begin",J);let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{},j=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0,V=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{};if(typeof j?.mode==="string")Y.mode=j.mode;else if(typeof V.mode==="string")Y.mode=V.mode;if(typeof j?.systemPrompt==="string")Y.systemPrompt=j.systemPrompt;else if(typeof V.systemPrompt==="string")Y.systemPrompt=V.systemPrompt;if(j?.checkpoint?.enabled===!0)Y.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)Y.checkpointEnabled=!0;let B=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},H=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():"";if(!H)return m("warn","session.create.invalid",{...J,reason:"missing_workspace_root"}),h(Z,"invalid_session_create","session.create requires workspaceRoot or cwd");let G=Z.clientId?.trim()||"hub-client",K=q3(V.clientContributions);if(m("info","session.create.contributions_parsed",{...J,clientId:G,workspaceRoot:H,cwd:typeof X.cwd==="string"?X.cwd:void 0,contributionCount:K.length}),K.length>0)uK(Y,G);let A=(typeof j?.sessionId==="string"?j.sessionId.trim():"")||mK(),L=vK(V.configExtensions);m("info","session.create.runtime_build.begin",{...J,sessionId:A,configExtensionCount:L?.length??0});let f=M3({sessionId:A,targetClientId:G,contributions:K,sessionConfig:j,requestCapability:$.requestCapability});m("info","session.create.start_session.begin",{...J,sessionId:A,provider:j?.providerId??(typeof B.provider==="string"?B.provider:typeof Y.provider==="string"?Y.provider:"hub"),model:j?.modelId??(typeof B.model==="string"?B.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 B.provider==="string"?B.provider:typeof Y.provider==="string"?Y.provider:"hub"),modelId:j?.modelId??(typeof B.model==="string"?B.model:typeof Y.model==="string"?Y.model:"hub"),apiKey:j?.apiKey??(typeof B.apiKey==="string"?B.apiKey:void 0),cwd:j?.cwd??(typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():H),workspaceRoot:j?.workspaceRoot??H,systemPrompt:j?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:j?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:j?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:j?.enableTools??V.enableTools!==!1,enableSpawnAgent:j?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:j?.enableAgentTeams??V.enableTeams!==!1,checkpoint:j?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:j?.teamName??(typeof Y.teamName==="string"?Y.teamName:void 0)},toolPolicies:X.toolPolicies&&typeof X.toolPolicies==="object"&&!Array.isArray(X.toolPolicies)?JSON.parse(JSON.stringify(X.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});m("info","session.create.start_session.end",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W),hasImmediateResult:!!D.result}),N9($,D.sessionId,G,"creator",{interactive:Y.interactive!==!1}),m("info","session.create.read_records.begin",{...J,sessionId:D.sessionId});let[U,T]=await Promise.all([u0($,D.sessionId),d0($,D.sessionId)]);if(m("info","session.create.read_records.end",{...J,sessionId:D.sessionId,hasSession:!!U,hasSnapshot:!!T,elapsedMs:Math.round(performance.now()-W)}),U)$.publish($.buildEvent("session.created",{session:U,...T?{snapshot:T}:{}},D.sessionId));return m("info","session.create.reply",{...J,sessionId:D.sessionId,elapsedMs:Math.round(performance.now()-W)}),g(Z,{session:U,...T?{snapshot:T}:{}})}async function lK($,Z,Q){let W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof W.sessionId==="string"?W.sessionId.trim():Z.sessionId?.trim()||"",X=W.checkpointRunCount;if(!J)return h(Z,"invalid_restore","session.restore requires a session id");let Y=W.restore&&typeof W.restore==="object"?W.restore:{},j=Y.messages!==!1;if(typeof X!=="number")return h(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0;if(j&&!V)return h(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let B=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{},H=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{};if(typeof V?.mode==="string")H.mode=V.mode;else if(typeof B.mode==="string")H.mode=B.mode;if(typeof V?.systemPrompt==="string")H.systemPrompt=V.systemPrompt;else if(typeof B.systemPrompt==="string")H.systemPrompt=B.systemPrompt;if(V?.checkpoint?.enabled===!0)H.checkpointEnabled=!0;else if(B.checkpointEnabled===!0)H.checkpointEnabled=!0;let G=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},K=Z.clientId?.trim()||"hub-client",F=q3(B.clientContributions);if(F.length>0)uK(H,K);let L=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||mK(),f=vK(B.configExtensions),D=M3({sessionId:L,targetClientId:K,contributions:F,sessionConfig:V,requestCapability:$.requestCapability}),T=await new r2().restoreCheckpoint({sessionId:J,checkpointRunCount:X,restore:{messages:Y.messages,workspace:Y.workspace,omitCheckpointMessageFromSession:Y.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(M)=>$.sessionHost.getSession(M),readMessages:(M)=>$.sessionHost.readSessionMessages(M),buildStartInput:(M)=>{if(M.restoredCheckpointMetadata)H.checkpoint=M.restoredCheckpointMetadata;let E=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():M.sourceSession.workspaceRoot||M.sourceSession.cwd;return{source:typeof H.source==="string"?H.source:void 0,interactive:H.interactive!==!1,sessionMetadata:{...H,restoredFromSessionId:J,restoredCheckpointRunCount:X},initialMessages:M.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:f,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:L,providerId:V?.providerId??(typeof G.provider==="string"?G.provider:M.sourceSession.provider),modelId:V?.modelId??(typeof G.model==="string"?G.model:M.sourceSession.model),apiKey:V?.apiKey??(typeof G.apiKey==="string"?G.apiKey:""),cwd:V?.cwd??M.plan.cwd,workspaceRoot:V?.workspaceRoot??E,systemPrompt:V?.systemPrompt??(typeof B.systemPrompt==="string"?B.systemPrompt:""),mode:V?.mode??(B.mode==="plan"||B.mode==="yolo"?B.mode:"act"),maxIterations:V?.maxIterations??(typeof B.maxIterations==="number"?B.maxIterations:void 0),enableTools:V?.enableTools??B.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??B.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??B.enableTeams!==!1,checkpoint:V?.checkpoint??(B.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof H.teamName==="string"?H.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):B.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(M)=>$.sessionHost.startSession(M),getStartedSessionId:(M)=>M.sessionId,readRestoredSession:(M)=>$.sessionHost.getSession(M)});if(!j)return g(Z,{checkpoint:T.checkpoint});let q=T.startResult;if(!q)return h(Z,"restore_failed","Checkpoint restore did not start a session");N9($,q.sessionId,K,"creator",{interactive:H.interactive!==!1});let[z,_]=await Promise.all([u0($,q.sessionId),d0($,q.sessionId)]);if(z)$.publish($.buildEvent("session.created",{session:z,..._?{snapshot:_}:{}},q.sessionId));return g(Z,{session:z,..._?{snapshot:_}:{},messages:T.messages??[],checkpoint:T.checkpoint})}catch(V){if(V instanceof s0)return h(Z,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return h(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function pK($,Z){let Q=w0(Z);if(!Q)return h(Z,"invalid_session_attach","session.attach requires a session id");N9($,Q,Z.clientId?.trim()||"hub-client","participant");let W=await u0($,Q);if(W)$.publish($.buildEvent("session.attached",{session:W},Q));return W?g(Z,{session:W}):h(Z,"session_not_found",`Unknown session: ${Q}`)}async function rK($,Z){let Q=w0(Z);if(!Q)return h(Z,"invalid_session_detach","session.detach requires a session id");let W=Z.clientId?.trim()||"hub-client",[J]=await Promise.all([u0($,Q)]),X=Ib(J?.metadata)??W,Y=$.sessionState.get(Q);if(Y){if(Y.participants.delete(W),Y.createdByClientId===W)Y.createdByClientId=X;if(Y.participants.size===0)$.sessionState.delete(Q)}V$($,(B)=>B.sessionId===Q&&B.targetClientId===W,`Capability owner client ${W} detached before request was resolved.`);let[j,V]=await Promise.all([u0($,Q),d0($,Q)]);return $.publish($.buildEvent("session.detached",j?{session:j,...V?{snapshot:V}:{},clientId:W}:{clientId:W},Q)),g(Z)}async function iK($,Z){let Q=w0(Z),W=Z.payload?.includeSnapshot===!0,[J,X]=await Promise.all([u0($,Q),W?d0($,Q):Promise.resolve(void 0)]);return J?g(Z,{session:J,...X?{snapshot:X}:{}}):h(Z,"session_not_found",`Unknown session: ${Q}`)}async function nK($,Z){let Q=w0(Z);if(!Q)return h(Z,"invalid_session_id","session.messages requires a session id");if(!await u0($,Q))return h(Z,"session_not_found",`Unknown session: ${Q}`);let J=await $.sessionHost.readSessionMessages(Q);return g(Z,{sessionId:Q,messages:J})}async function aK($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,J=(await $.sessionHost.listSessions(Q)).map((X)=>R9(X,$.sessionState.get(X.sessionId)));return g(Z,{sessions:J})}async function sK($,Z){let Q=w0(Z),W=E9(Z.payload?.metadata),J=await $.sessionHost.updateSession(Q,{metadata:W}),[X,Y]=await Promise.all([u0($,Q),d0($,Q)]);if(X)$.publish($.buildEvent("session.updated",{session:X,...Y?{snapshot:Y}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:J.updated,payload:{updated:J.updated,session:X,...Y?{snapshot:Y}:{}}}}async function oK($,Z){let Q=w0(Z),W=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),g(Z,{deleted:W})}async function tK($,Z){let Q=w0(Z),W=$.sessionHost.pendingPrompts;if(!W)return h(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await W.list({sessionId:Q});return g(Z,{sessionId:Q,prompts:J})}async function eK($,Z){let Q=w0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,X=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,Y=$.sessionHost.pendingPrompts;if(!Y)return h(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await Y.update({sessionId:Q,promptId:W,prompt:J,delivery:X});return g(Z,j)}async function $F($,Z){let Q=w0(Z),W=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return h(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await J.delete({sessionId:Q,promptId:W});return g(Z,X)}function ZF($){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 gb=new Set(["skills","workflows","rules","tools","mcp"]);function R3($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function h4($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="string")throw Error(`settings payload '${Z}' must be a string.`);return Q}function mb($,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 QF($){if($===void 0)return{};if(!R3($))throw Error("settings.list payload must be an object.");return{cwd:h4($,"cwd"),workspaceRoot:h4($,"workspaceRoot"),availabilityContext:R3($.availabilityContext)?$.availabilityContext:void 0}}function vb($){if(!R3($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!gb.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...QF($),type:Z,id:h4($,"id"),path:h4($,"path"),name:h4($,"name"),enabled:mb($,"enabled")}}class P9{options;clients=new Map;listeners=new Map;sessionState=new Map;pendingApprovals=new Map;pendingCapabilityRequests=new Map;suppressNextTerminalEventBySession=new Map;schedules;scheduleCommands;settings;cronService;sessionHost;hubId=xb("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new j$({sessionService:new Q$(new Z$),fetch:$.fetch,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(Z)=>this.publish(Z),buildEvent:o$,requestCapability:(Z,Q,W,J,X)=>LK(this.ctx,Z,Q,W,J,X)},this.schedules=new _9({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let W=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!W)return;this.publish(o$(W,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new U9(this.schedules),this.settings=$.settingsService??new h2,$.cronOptions)this.cronService=new a8({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{IK(this.ctx,Z).catch((Q)=>{D3("session event handling failed",Q),w9(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Q,severity:"error",handled:!0,context:{eventType:Z.type,sessionId:Z.payload.sessionId}})})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}}async stop(){for(let $ of this.pendingApprovals.keys())f3(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(V$(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.sessionHost.dispose("hub_server_stop"),await this.schedules.dispose(),this.cronService)try{await this.cronService.dispose()}catch($){console.error("[hub] cron service stop failed",$)}}async handleCommand($){try{let Z=await this.dispatchCommand($);return this.captureFailedReply($,Z),Z}catch(Z){throw w9(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 OK(this.ctx,$);case"client.update":return qK(this.ctx,$);case"client.unregister":return MK(this.ctx,$,(Z)=>{this.listeners.delete(Z),this.detachClientFromSessions(Z)});case"client.list":return RK(this.ctx,$);case"session.create":return await dK(this.ctx,$,(Z)=>A3(this.ctx,Z));case"session.restore":return await lK(this.ctx,$,(Z)=>A3(this.ctx,Z));case"session.attach":return await pK(this.ctx,$);case"session.detach":return await rK(this.ctx,$);case"session.get":return await iK(this.ctx,$);case"session.messages":return await nK(this.ctx,$);case"session.list":return await aK(this.ctx,$);case"session.update":return await sK(this.ctx,$);case"session.pending_prompts":return await tK(this.ctx,$);case"session.update_pending_prompt":return await eK(this.ctx,$);case"session.remove_pending_prompt":return await $F(this.ctx,$);case"session.delete":return await oK(this.ctx,$);case"session.hook":return await kK(this.ctx,$);case"run.start":case"session.send_input":return await yK(this.ctx,$);case"run.abort":return await hK(this.ctx,$);case"capability.request":return await zK(this.ctx,$);case"approval.respond":return await UK(this.ctx,$);case"capability.respond":return TK(this.ctx,$);case"capability.progress":return _K(this.ctx,$);case"ui.notify":return this.publish(o$("ui.notify",$.payload??{})),g($);case"ui.show_window":return this.publish(o$("ui.show_window",$.payload??{})),g($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"connector.channels":case"connector.configure":case"connector.delete_config":return await bK(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=ZF($.command);if(Q)this.publish(o$(Q,Z.payload))}return Z}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!cb(Z.error.code))return;w9(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(QF($.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(vb($.payload));return this.publish(o$("settings.changed",{types:Z.changedTypes,snapshot:Z.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z.snapshot,changedTypes:Z.changedTypes}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:Z instanceof Error?Z.message:String(Z)}}}}subscribe($,Z,Q){let W=this.listeners.get($)??new Set,J={sessionId:Q?.sessionId,listener:Z};return W.add(J),this.listeners.set($,W),()=>{let X=this.listeners.get($);if(!X)return;if(X.delete(J),X.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries())if(Q.participants.delete($),Q.participants.size===0)this.sessionState.delete(Z);V$(this.ctx,(Z)=>Z.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let Z of this.listeners.values())for(let Q of Z){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(W){D3(`listener threw while publishing ${$.event}`,W),w9(this.options.telemetry,{component:"core",operation:"hub.publish",error:W,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function cb($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as pb}from"node:crypto";import rb from"node:http";import ib from"node:net";import{URL as S3}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as XF,HUB_CAPABILITIES as nb,isHubProtocolCompatible as ab,MAX_CLIENT_HUB_PROTOCOL_VERSION as YF,MIN_CLIENT_HUB_PROTOCOL_VERSION as jF}from"@cline/shared";import{WebSocketServer as sb}from"ws";import{captureSdkError as WF,HUB_COMMAND_SLOW_LOG_MS as ub,resolveHubCommandTimeoutMs as db,safeJsonParse as lb}from"@cline/shared";function E3($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function JF($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}class N3{transport;telemetry;constructor($,Z){this.transport=$;this.telemetry=Z}attach($){let Z=new Map,Q=new Set,W=!1,J=(V)=>{try{$.send(JSON.stringify(V))}catch(B){console.error(`[hub] failed to send websocket frame: ${B instanceof Error?B.stack||B.message:String(B)}`)}},X=(V)=>{J({kind:"event",envelope:V})},Y=async(V)=>{try{let B=JSON.parse(V.data);switch(B.kind){case"command":{let H=performance.now(),G=!1,K=E3(B);m("info","command.start",K);let F=setTimeout(()=>{if(G)return;m("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-H)})},ub),A=this.transport.command(B.envelope);A.then((q)=>{if(!G)return;m(q.ok?"warn":"error","command.late_end",{...K,elapsedMs:Math.round(performance.now()-H),ok:q.ok,errorCode:q.error?.code,errorMessage:q.error?.message})},(q)=>{if(!G)return;m("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-H),error:q})});let L=!1,f,D,U=db(B.envelope.command,B.envelope.timeoutMs);try{D=U===null?await A:await Promise.race([A,new Promise((q)=>{f=setTimeout(()=>{L=!0,WF(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${B.envelope.command} did not complete within ${U}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:U}}),q(JF(B,"hub_command_timeout",`Hub command ${B.envelope.command} did not complete within ${U}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${B.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()-H);if(L)m("error","command.timeout",{...K,durationMs:T,timeoutMs:U});else m(D.ok?"info":"warn","command.end",{...K,durationMs:T,ok:D.ok,errorCode:D.error?.code,errorMessage:D.error?.message});if(B.envelope.command==="client.register"&&D.ok){let z=(B.envelope.payload??{}).clientId?.trim()||B.envelope.clientId?.trim();if(z)Q.add(z)}else if(B.envelope.command==="client.unregister"&&D.ok){let q=B.envelope.clientId?.trim();if(q)Q.delete(q)}J({kind:"reply",envelope:D});break}case"stream.subscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;if(Z.has(H))break;let G=await this.transport.subscribe(B.clientId,X,{sessionId:B.sessionId});Z.set(H,G);break}case"stream.unsubscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;Z.get(H)?.(),Z.delete(H);break}case"reply":case"event":break}}catch(B){let H=typeof V.data==="string"?lb(V.data):void 0;if(!H||H.kind!=="command"){m("error","rejected malformed websocket frame",{error:B});return}m("error","command.error",{...E3(H),error:B}),WF(this.telemetry,{component:"core",operation:"hub.websocket_command",error:B,severity:"error",handled:!0,context:E3(H)}),J({kind:"reply",envelope:JF(H,"command_failed",B instanceof Error?B.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 C3{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}}function ob($){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 tb($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(W)=>{Q({data:ob(W)})});return}$.on("close",Q)},removeEventListener(){}}}function eb($){try{$.write(`HTTP/1.1 400 Bad Request\r
731
+ ${H}`:V.instructions}})}})}}function Dy($,Z,Q,J){let W=Q.map((X)=>[X.executor,async(...Y)=>{let j=Y.at(-1),V=Y.slice(0,-1);return(await J($,X.capabilityName,{executor:X.executor,args:V,context:XF(j)},Z))?.result}]);return W.length>0?Object.fromEntries(W):void 0}function Ly($,Z,Q,J){if(Q.length===0)return;return Q.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema,lifecycle:W.lifecycle,async execute(X,Y){return(await J($,W.capabilityName,{toolName:W.name,input:X,context:XF(Y)},Z,Y.emitUpdate?(V)=>{Y.emitUpdate?.(Fy(V))}:void 0))?.result}}))}function _y($,Z,Q,J){let W=new Map(Q.map((Y)=>[Y.name,Y])),X={};for(let Y of Gy){let j=W.get(Y);if(!j)continue;X[Y]=async(V)=>{return(await J($,j.capabilityName,{context:V},Z))?.control}}return Object.keys(X).length>0?X:void 0}function hJ($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),J=$.contributions.filter((V)=>V.kind==="hook"),W=$.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:Dy($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...J.length>0?{hooks:_y($.sessionId,$.targetClientId,J,$.requestCapability)}:{},...Q.length>0?{extraTools:Ly($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...W?{compaction:{...$.sessionConfig?.compaction??{},...W.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,W.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:Uy($.sessionId,$.targetClientId,j,$.requestCapability)}:{}}}}var YF="hubCapabilityOwnerClientId";function h9($){return typeof $==="string"&&$.trim().length>0?$.trim():void 0}function Ty($){if($==="low"||$==="medium"||$==="high"||$==="xhigh"||$===null)return $;return}function Oy($){let Z=Q8($)??{},Q={},J=h9(Z.providerId);if(J)Q.providerId=J;let W=h9(Z.modelId);if(W)Q.modelId=W;let X=h9(Z.apiKey);if(X!==void 0)Q.apiKey=X;let Y=h9(Z.baseUrl);if(Y!==void 0)Q.baseUrl=Y;if(Z.headers&&typeof Z.headers==="object")Q.headers=Z.headers;if(Z.providerConfig&&typeof Z.providerConfig==="object")Q.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"thinking")){if(typeof Z.thinking==="boolean"||Z.thinking===null)Q.thinking=Z.thinking}if(Object.hasOwn(Z,"reasoningEffort")){let j=Ty(Z.reasoningEffort);if(j!==void 0)Q.reasoningEffort=j}if(Object.hasOwn(Z,"thinkingBudgetTokens")){if(typeof Z.thinkingBudgetTokens==="number"&&Number.isFinite(Z.thinkingBudgetTokens)&&Z.thinkingBudgetTokens>0)Q.thinkingBudgetTokens=Math.trunc(Z.thinkingBudgetTokens);else if(Z.thinkingBudgetTokens===null)Q.thinkingBudgetTokens=null}return P2(Q)}function qy($,Z){return $.sessionState.get(Z)?.createdByClientId}function zy($){if(!$||!(YF in $))return $;let Z={...$};return delete Z[YF],Z}function BF($){let Z=qy($.ctx,$.sessionId);if(!Z)return P($.envelope,"session_wrong_client",`Session ${$.sessionId} has no owner`);if(Z!==$.clientId)return P($.envelope,"session_wrong_client",`Session ${$.sessionId} is owned by ${Z}`);return}async function HF($,Z,Q){let J=performance.now(),W={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};c("info","session.create.begin",W);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:{},B=z1(X.initialCompactionState);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:{},G=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():"";if(!G)return c("warn","session.create.invalid",{...W,reason:"missing_workspace_root"}),P(Z,"invalid_session_create","session.create requires workspaceRoot or cwd");let K=Z.clientId?.trim()||"hub-client",F=yJ(V.clientContributions);c("info","session.create.contributions_parsed",{...W,clientId:K,workspaceRoot:G,cwd:typeof X.cwd==="string"?X.cwd:void 0,contributionCount:F.length});let D=(typeof j?.sessionId==="string"?j.sessionId.trim():"")||jF(),U=VF(V.configExtensions);c("info","session.create.runtime_build.begin",{...W,sessionId:D,configExtensionCount:U?.length??0});let L=hJ({sessionId:D,targetClientId:K,contributions:F,sessionConfig:j,requestCapability:$.requestCapability});c("info","session.create.start_session.begin",{...W,sessionId:D,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 f=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,initialCompactionState:B,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:U,...L.localRuntime},capabilities:{toolExecutors:L.toolExecutors,requestToolApproval:Q},config:{...j??{},sessionId:D,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():G),workspaceRoot:j?.workspaceRoot??G,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});c("info","session.create.start_session.end",{...W,sessionId:f.sessionId,elapsedMs:Math.round(performance.now()-J),hasImmediateResult:!!f.result}),zJ($,f.sessionId,K,"creator",{interactive:Y.interactive!==!1}),c("info","session.create.read_records.begin",{...W,sessionId:f.sessionId});let[z,O]=await Promise.all([M0($,f.sessionId),I0($,f.sessionId)]);if(c("info","session.create.read_records.end",{...W,sessionId:f.sessionId,hasSession:!!z,hasSnapshot:!!O,elapsedMs:Math.round(performance.now()-J)}),z)$.publish($.buildEvent("session.created",{session:z,...O?{snapshot:O}:{}},f.sessionId));return c("info","session.create.reply",{...W,sessionId:f.sessionId,elapsedMs:Math.round(performance.now()-J)}),x(Z,{session:z,...O?{snapshot:O}:{}})}async function GF($,Z,Q){let J=Z.payload&&typeof Z.payload==="object"?Z.payload:{},W=typeof J.sessionId==="string"?J.sessionId.trim():Z.sessionId?.trim()||"",X=J.checkpointRunCount;if(!W)return P(Z,"invalid_restore","session.restore requires a session id");let Y=J.restore&&typeof J.restore==="object"?J.restore:{},j=Y.messages!==!1;if(typeof X!=="number")return P(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=J.sessionConfig&&typeof J.sessionConfig==="object"?JSON.parse(JSON.stringify(J.sessionConfig)):void 0;if(j&&!V)return P(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let B=J.runtimeOptions&&typeof J.runtimeOptions==="object"?J.runtimeOptions:{},H=z1(J.initialCompactionState),G=J.metadata&&typeof J.metadata==="object"?JSON.parse(JSON.stringify(J.metadata)):{};if(typeof V?.mode==="string")G.mode=V.mode;else if(typeof B.mode==="string")G.mode=B.mode;if(typeof V?.systemPrompt==="string")G.systemPrompt=V.systemPrompt;else if(typeof B.systemPrompt==="string")G.systemPrompt=B.systemPrompt;if(V?.checkpoint?.enabled===!0)G.checkpointEnabled=!0;else if(B.checkpointEnabled===!0)G.checkpointEnabled=!0;let K=J.modelSelection&&typeof J.modelSelection==="object"?J.modelSelection:{},F=Z.clientId?.trim()||"hub-client",A=yJ(B.clientContributions),U=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||jF(),L=VF(B.configExtensions),f=hJ({sessionId:U,targetClientId:F,contributions:A,sessionConfig:V,requestCapability:$.requestCapability}),O=await new t2().restoreCheckpoint({sessionId:W,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:(N)=>$.sessionHost.getSession(N),readMessages:(N)=>$.sessionHost.readSessionMessages(N),buildStartInput:(N)=>{if(N.restoredCheckpointMetadata)G.checkpoint=N.restoredCheckpointMetadata;let m=typeof J.workspaceRoot==="string"&&J.workspaceRoot.trim()?J.workspaceRoot.trim():typeof J.cwd==="string"&&J.cwd.trim()?J.cwd.trim():N.sourceSession.workspaceRoot||N.sourceSession.cwd;return{source:typeof G.source==="string"?G.source:void 0,interactive:G.interactive!==!1,sessionMetadata:{...G,restoredFromSessionId:W,restoredCheckpointRunCount:X},initialMessages:N.initialMessages,initialCompactionState:H,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:L,...f.localRuntime},capabilities:{toolExecutors:f.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:U,providerId:V?.providerId??(typeof K.provider==="string"?K.provider:N.sourceSession.provider),modelId:V?.modelId??(typeof K.model==="string"?K.model:N.sourceSession.model),apiKey:V?.apiKey??(typeof K.apiKey==="string"?K.apiKey:""),cwd:V?.cwd??N.plan.cwd,workspaceRoot:V?.workspaceRoot??m,systemPrompt:V?.systemPrompt??(typeof B.systemPrompt==="string"?B.systemPrompt:""),mode:V?.mode??(B.mode==="plan"||B.mode==="yolo"?B.mode:"act"),maxIterations:V?.maxIterations??(typeof B.maxIterations==="number"?B.maxIterations:void 0),enableTools:V?.enableTools??B.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??B.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??B.enableTeams!==!1,checkpoint:V?.checkpoint??(B.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof G.teamName==="string"?G.teamName:void 0)},toolPolicies:J.toolPolicies&&typeof J.toolPolicies==="object"&&!Array.isArray(J.toolPolicies)?JSON.parse(JSON.stringify(J.toolPolicies)):B.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(N)=>$.sessionHost.startSession(N),getStartedSessionId:(N)=>N.sessionId,readRestoredSession:(N)=>$.sessionHost.getSession(N)});if(!j)return x(Z,{checkpoint:O.checkpoint});let T=O.startResult;if(!T)return P(Z,"restore_failed","Checkpoint restore did not start a session");zJ($,T.sessionId,F,"creator",{interactive:G.interactive!==!1});let[_,M]=await Promise.all([M0($,T.sessionId),I0($,T.sessionId)]);if(_)$.publish($.buildEvent("session.created",{session:_,...M?{snapshot:M}:{}},T.sessionId));return x(Z,{session:_,...M?{snapshot:M}:{},messages:O.messages??[],checkpoint:O.checkpoint})}catch(V){if(V instanceof $1)return P(Z,V.code,V.code==="session_not_found"?`Unknown session: ${W}`:V.message);return P(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function KF($,Z){let Q=T0(Z);if(!Q)return P(Z,"invalid_session_attach","session.attach requires a session id");let J=await M0($,Q);if(!J)return P(Z,"session_not_found",`Unknown session: ${Q}`);IK($,Q,Z.clientId?.trim()||"hub-client","participant");let W=await M0($,Q);return $.publish($.buildEvent("session.attached",{session:W??J},Q)),x(Z,{session:W??J})}async function FF($,Z){let Q=T0(Z);if(!Q)return P(Z,"invalid_session_detach","session.detach requires a session id");let J=Z.clientId?.trim()||"hub-client",W=$.sessionState.get(Q);if(W){if(W.participants.delete(J),W.createdByClientId===J)W.createdByClientId=void 0;if(W.participants.size===0)$.sessionState.delete(Q)}F$($,(j)=>j.sessionId===Q&&j.targetClientId===J,`Capability owner client ${J} detached before request was resolved.`);let[X,Y]=await Promise.all([M0($,Q),I0($,Q)]);return $.publish($.buildEvent("session.detached",X?{session:X,...Y?{snapshot:Y}:{},clientId:J}:{clientId:J},Q)),x(Z)}async function AF($,Z){let Q=T0(Z),J=Z.payload?.includeSnapshot===!0,[W,X]=await Promise.all([M0($,Q),J?I0($,Q):Promise.resolve(void 0)]);return W?x(Z,{session:W,...X?{snapshot:X}:{}}):P(Z,"session_not_found",`Unknown session: ${Q}`)}async function fF($,Z){let Q=T0(Z);if(!Q)return P(Z,"invalid_session_id","session.messages requires a session id");if(!await M0($,Q))return P(Z,"session_not_found",`Unknown session: ${Q}`);let W=await $.sessionHost.readSessionMessages(Q);return x(Z,{sessionId:Q,messages:W})}async function UF($,Z){let Q=T0(Z);if(!Q)return P(Z,"invalid_session_id","session.compaction.get requires a session id");if(!await M0($,Q))return P(Z,"session_not_found",`Unknown session: ${Q}`);let W=Z.clientId?.trim()||"hub-client",X=BF({sessionId:Q,ctx:$,clientId:W,envelope:Z});if(X)return X;let Y=await $.sessionHost.readSessionCompactionState(Q);return x(Z,{sessionId:Q,state:Y})}async function DF($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,W=(await $.sessionHost.listSessions(Q)).map((X)=>b9(X,$.sessionState.get(X.sessionId)));return x(Z,{sessions:W})}async function LF($,Z){let Q=T0(Z),J=zy(Q8(Z.payload?.metadata)),W=await $.sessionHost.updateSession(Q,{metadata:J}),[X,Y]=await Promise.all([M0($,Q),I0($,Q)]);if(X)$.publish($.buildEvent("session.updated",{session:X,...Y?{snapshot:Y}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:W.updated,payload:{updated:W.updated,session:X,...Y?{snapshot:Y}:{}}}}async function _F($,Z){let Q=T0(Z);if(!Q)return P(Z,"invalid_session_update_connection","session.update_connection requires a session id");let J=$.sessionHost.updateSessionConnection;if(!J)return P(Z,"unsupported_session_update_connection","runtime host does not support session connection updates");let W=Q8(Z.payload),X=Oy(W?.updates);return await J.call($.sessionHost,Q,X),x(Z,{sessionId:Q,updated:!0})}async function TF($,Z){let Q=T0(Z);if(!Q)return P(Z,"invalid_session_id","session.compaction.update requires a session id");let J=Z.clientId?.trim()||"hub-client",W=await M0($,Q);if(!W)return P(Z,"session_not_found",`Unknown session: ${Q}`);let X=BF({sessionId:Q,ctx:$,clientId:J,envelope:Z});if(X)return X;let Y=Z.payload&&typeof Z.payload==="object"?Z.payload:{},j=z1(Y.state);if(!j)return P(Z,"invalid_compaction_state","session.compaction.update requires a valid compaction state");let V=await $.sessionHost.updateSessionCompactionState(Q,j),[B,H]=V.updated?await Promise.all([M0($,Q),I0($,Q)]):[W,void 0];if(V.updated)$.publish($.buildEvent("session.updated",{session:B??W,...H?{snapshot:H}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:!0,payload:{updated:V.updated,session:B??W,...H?{snapshot:H}:{}}}}async function OF($,Z){let Q=T0(Z),J=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),x(Z,{deleted:J})}async function qF($,Z){let Q=T0(Z),J=$.sessionHost.pendingPrompts;if(!J)return P(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await J.list({sessionId:Q});return x(Z,{sessionId:Q,prompts:W})}async function zF($,Z){let Q=T0(Z),J=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",W=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 P(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await Y.update({sessionId:Q,promptId:J,prompt:W,delivery:X});return x(Z,j)}async function MF($,Z){let Q=T0(Z),J=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",W=$.sessionHost.pendingPrompts;if(!W)return P(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await W.delete({sessionId:Q,promptId:J});return x(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 Ry=new Set(["skills","workflows","rules","tools","mcp"]);function kJ($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function u4($,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 Ny($,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 NF($){if($===void 0)return{};if(!kJ($))throw Error("settings.list payload must be an object.");return{cwd:u4($,"cwd"),workspaceRoot:u4($,"workspaceRoot"),availabilityContext:kJ($.availabilityContext)?$.availabilityContext:void 0}}function Ey($){if(!kJ($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!Ry.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...NF($),type:Z,id:u4($,"id"),path:u4($,"path"),name:u4($,"name"),enabled:Ny($,"enabled")}}class I9{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=My("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new K$({sessionService:new Y$(new X$),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:J2,requestCapability:(Z,Q,J,W,X)=>mK(this.ctx,Z,Q,J,W,X)},this.schedules=new N9({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let J=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!J)return;this.publish(J2(J,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new z9(this.schedules),this.settings=$.settingsService??new v2,$.cronOptions)this.cronService=new Z4({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{JF(this.ctx,Z).catch((Q)=>{EJ("session event handling failed",Q),k9(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())RJ(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(F$(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 k9(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 dK(this.ctx,$);case"client.update":return lK(this.ctx,$);case"client.unregister":return pK(this.ctx,$,(Z)=>{this.listeners.delete(Z),this.detachClientFromSessions(Z)});case"client.list":return rK(this.ctx,$);case"session.create":return await HF(this.ctx,$,(Z)=>MJ(this.ctx,Z));case"session.restore":return await GF(this.ctx,$,(Z)=>MJ(this.ctx,Z));case"session.attach":return await KF(this.ctx,$);case"session.detach":return await FF(this.ctx,$);case"session.get":return await AF(this.ctx,$);case"session.messages":return await fF(this.ctx,$);case"session.compaction.get":return await UF(this.ctx,$);case"session.list":return await DF(this.ctx,$);case"session.update":return await LF(this.ctx,$);case"session.update_connection":return await _F(this.ctx,$);case"session.compaction.update":return await TF(this.ctx,$);case"session.pending_prompts":return await qF(this.ctx,$);case"session.update_pending_prompt":return await zF(this.ctx,$);case"session.remove_pending_prompt":return await MF(this.ctx,$);case"session.delete":return await OF(this.ctx,$);case"session.hook":return await QF(this.ctx,$);case"run.start":case"session.send_input":return await $F(this.ctx,$);case"run.abort":return await ZF(this.ctx,$);case"capability.request":return await cK(this.ctx,$);case"approval.respond":return await xK(this.ctx,$);case"capability.respond":return uK(this.ctx,$);case"capability.progress":return vK(this.ctx,$);case"ui.notify":return this.publish(J2("ui.notify",$.payload??{})),x($);case"ui.show_window":return this.publish(J2("ui.show_window",$.payload??{})),x($);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 eK(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(J2(Q,Z.payload))}return Z}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!wy(Z.error.code))return;k9(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(NF($.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(Ey($.payload));return this.publish(J2("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 J=this.listeners.get($)??new Set,W={sessionId:Q?.sessionId,listener:Z};return J.add(W),this.listeners.set($,J),()=>{let X=this.listeners.get($);if(!X)return;if(X.delete(W),X.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries()){if(Q.participants.delete($),Q.createdByClientId===$)Q.createdByClientId=void 0;if(Q.participants.size===0)this.sessionState.delete(Z)}F$(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(J){EJ(`listener threw while publishing ${$.event}`,J),k9(this.options.telemetry,{component:"core",operation:"hub.publish",error:J,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function wy($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as by}from"node:crypto";import yy from"node:http";import hy from"node:net";import{URL as cJ}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as CF,HUB_CAPABILITIES as ky,isHubProtocolCompatible as Iy,MAX_CLIENT_HUB_PROTOCOL_VERSION as PF,MIN_CLIENT_HUB_PROTOCOL_VERSION as SF}from"@cline/shared";import{WebSocketServer as xy}from"ws";import{captureSdkError as EF,HUB_COMMAND_SLOW_LOG_MS as Cy,resolveHubCommandTimeoutMs as Py,safeJsonParse as Sy}from"@cline/shared";function IJ($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function wF($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}class xJ{transport;telemetry;constructor($,Z){this.transport=$;this.telemetry=Z}attach($){let Z=new Map,Q=new Set,J=!1,W=(V)=>{try{$.send(JSON.stringify(V))}catch(B){console.error(`[hub] failed to send websocket frame: ${B instanceof Error?B.stack||B.message:String(B)}`)}},X=(V)=>{W({kind:"event",envelope:V})},Y=async(V)=>{try{let B=JSON.parse(V.data);switch(B.kind){case"command":{let H=performance.now(),G=!1,K=IJ(B);c("info","command.start",K);let F=setTimeout(()=>{if(G)return;c("warn","command.slow",{...K,elapsedMs:Math.round(performance.now()-H)})},Cy),A=this.transport.command(B.envelope);A.then((O)=>{if(!G)return;c(O.ok?"warn":"error","command.late_end",{...K,elapsedMs:Math.round(performance.now()-H),ok:O.ok,errorCode:O.error?.code,errorMessage:O.error?.message})},(O)=>{if(!G)return;c("error","command.late_error",{...K,elapsedMs:Math.round(performance.now()-H),error:O})});let D=!1,U,L,f=Py(B.envelope.command,B.envelope.timeoutMs);try{L=f===null?await A:await Promise.race([A,new Promise((O)=>{U=setTimeout(()=>{D=!0,EF(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${B.envelope.command} did not complete within ${f}ms.`),severity:"error",handled:!0,context:{...K,timeoutMs:f}}),O(wF(B,"hub_command_timeout",`Hub command ${B.envelope.command} did not complete within ${f}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${B.envelope.requestId}.`))},f)})])}catch(O){if(clearTimeout(F),U)clearTimeout(U);throw O}if(G=D,clearTimeout(F),U)clearTimeout(U);let z=Math.round(performance.now()-H);if(D)c("error","command.timeout",{...K,durationMs:z,timeoutMs:f});else c(L.ok?"info":"warn","command.end",{...K,durationMs:z,ok:L.ok,errorCode:L.error?.code,errorMessage:L.error?.message});if(B.envelope.command==="client.register"&&L.ok){let T=(B.envelope.payload??{}).clientId?.trim()||B.envelope.clientId?.trim();if(T)Q.add(T)}else if(B.envelope.command==="client.unregister"&&L.ok){let O=B.envelope.clientId?.trim();if(O)Q.delete(O)}W({kind:"reply",envelope:L});break}case"stream.subscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;if(Z.has(H))break;let G=await this.transport.subscribe(B.clientId,X,{sessionId:B.sessionId});Z.set(H,G);break}case"stream.unsubscribe":{let H=`${B.clientId}:${B.sessionId??"*"}`;Z.get(H)?.(),Z.delete(H);break}case"reply":case"event":break}}catch(B){let H=typeof V.data==="string"?Sy(V.data):void 0;if(!H||H.kind!=="command"){c("error","rejected malformed websocket frame",{error:B});return}c("error","command.error",{...IJ(H),error:B}),EF(this.telemetry,{component:"core",operation:"hub.websocket_command",error:B,severity:"error",handled:!0,context:IJ(H)}),W({kind:"reply",envelope:wF(H,"command_failed",B instanceof Error?B.message:"Unknown hub error")})}},j=()=>{if(J)return;J=!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 gJ{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}}function gy($){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 my($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(J)=>{Q({data:gy(J)})});return}$.on("close",Q)},removeEventListener(){}}}function vy($){try{$.write(`HTTP/1.1 400 Bad Request\r
728
732
  Connection: close\r
729
733
  Content-Length: 0\r
730
734
  \r
731
- `),$.end()}catch{$.destroy()}}function $y($){try{$.write(`HTTP/1.1 401 Unauthorized\r
735
+ `),$.end()}catch{$.destroy()}}function cy($){try{$.write(`HTTP/1.1 401 Unauthorized\r
732
736
  Connection: close\r
733
737
  Content-Length: 0\r
734
738
  \r
735
- `),$.end()}catch{$.destroy()}}function w3($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),W=Buffer.from(Z,"utf8");return Q.length===W.length&&pb(Q,W)}function VF($,Z){let Q=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,W=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",J=`Failed to start hub server on ${Z.host}:${Z.port}${Z.pathname}: ${W}`,X=Error(Q?`${J} (${Q})`:J);if(Q)$.code=Q,X.code=Q;if($ instanceof Error&&$.stack)X.stack=`${X.name}: ${X.message}
736
- Caused by: ${$.stack}`;return X}async function Zy($){return await new Promise((Z,Q)=>{let W=ib.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 Qy($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var P3=new Map,BF="cline-hub-auth.",Wy=30000;function b3($){return Array.isArray($)?$.join(","):$??""}function HF($){return $===32||$===9}function GF($){let Z=b3($).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 Jy($){for(let Z of b3($).split(",")){let Q=Z.trim();if(Q.startsWith(BF))return Q.slice(BF.length).trim()||null}return null}function KF($){let Z=$.trim().toLowerCase();return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"||Z==="[::1]"}function Xy($){let Z=b3($).trim();if(!Z)return!1;try{return KF(new S3(Z).hostname)}catch{return!1}}async function y3($){let Z=$.owner??x$(),Q=$.host??"127.0.0.1",W=$.pathname??"/hub",J=$.port??q5(),X=J===0?await Zy(Q):J,Y=X,j=L1(Q,X,W),V=zB(),B=_B(),H=new P9($);await H.start();let G=new N3(new C3(H),$.telemetry),K=new Set,F=new Date().toISOString(),A={protocolVersion:XF,minClientProtocolVersion:jF,maxClientProtocolVersion:YF,capabilities:nb,coreVersion:Q4.version,buildId:V,pid:process.pid,startedAt:F},L=new Set,f,D,U=async()=>{if(D)return D;return D=(async()=>{if(f)clearInterval(f),f=void 0;for(let _ of L)_.terminate?.();L.clear();for(let _ of K)_();if(K.clear(),await new Promise((_,M)=>{q.close((E)=>{if(E){M(E);return}_()})}),await new Promise((_,M)=>{T.close((E)=>{if(E){M(E);return}_()})}),await H.stop(),(await A0(Z.discoveryPath))?.url===j)await a0(Z.discoveryPath)})(),D},T=rb.createServer((z,_)=>{if((z.url??"/")==="/health"){let E=JSON.stringify({ok:!0,protocolVersion:A.protocolVersion,minClientProtocolVersion:A.minClientProtocolVersion,maxClientProtocolVersion:A.maxClientProtocolVersion,coreVersion:A.coreVersion,host:Q,port:Y,url:j});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(E);return}if((z.url??"/")==="/status"){if(!w3(GF(z.headers.authorization),B)){_.statusCode=401,_.end("Unauthorized");return}let E=JSON.stringify({hubId:H.getHubId(),...A,authToken:B,host:Q,port:Y,url:j,updatedAt:new Date().toISOString()});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(E);return}if((z.url??"/")==="/version"){_.statusCode=200,_.setHeader("content-type","application/json"),_.end(JSON.stringify(A));return}if(new S3(z.url??"/",`http://${Q}:${Y}`).pathname==="/shutdown"&&z.method==="POST"){if(!w3(GF(z.headers.authorization),B)){_.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 sb({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)}}},Wy),T.on("upgrade",(z,_,M)=>{if(new S3(z.url??"/",`http://${Q}:${Y}`).pathname!==W){_.destroy();return}if(!(w3(Jy(z.headers["sec-websocket-protocol"]),B)||KF(Q)&&Xy(z.headers.origin))){$y(_);return}try{q.handleUpgrade(z,_,M,(c)=>{let n=c;n.isAlive=!0,n.on("pong",()=>{n.isAlive=!0}),L.add(n);let a=G.attach(tb(c));K.add(a),c.once("close",()=>{L.delete(n),a(),K.delete(a)})})}catch{eb(_)}});try{await new Promise((z,_)=>{T.once("error",(M)=>{_(VF(M,{host:Q,port:X,pathname:W}))}),T.listen(X,Q,()=>{let M=T.address();if(!M||typeof M==="string"){_(VF(Error("Failed to resolve hub port"),{host:Q,port:X,pathname:W}));return}Y=M.port,j=L1(Q,Y,W),z()})})}catch(z){if(f)clearInterval(f),f=void 0;throw await H.stop().catch(()=>{return}),z}return await TB(Z.discoveryPath,{hubId:H.getHubId(),protocolVersion:XF,minClientProtocolVersion:jF,maxClientProtocolVersion:YF,capabilities:[...A.capabilities],coreVersion:Q4.version,buildId:V,authToken:B,host:Q,port:Y,url:j,pid:process.pid,startedAt:F,updatedAt:F}),{host:Q,port:Y,url:j,authToken:B,close:U}}async function FF($){let Z=$.owner??x$(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=$.host??"127.0.0.1",J=$.port??q5(),X=$.pathname??"/hub",Y=L1(W,J,X),j=Z.discoveryPath,V=(H)=>{if(!Q)k2(H.url,H.authToken);return H},B=P3.get(j);if(B){let H=await B;if(H.url===Y)return V({server:H,url:H.url,authToken:H.authToken,action:"reuse"})}return await OB(Z.discoveryPath,async()=>{let H=await A0(Z.discoveryPath);if(H?.url&&(H.url===Y||$.allowPortFallback===!0)){let F=await g$(H.url,{authToken:H.authToken});if(F?.url&&ab(F).compatible&&await o1(F.url,{authToken:H.authToken}))return V({url:F.url,authToken:H.authToken,action:"reuse"})}if(H?.url)await a0(Z.discoveryPath);let K=async(F)=>{let A=y3({...F,owner:Z});P3.set(j,A);try{let L=await A;return V({server:L,url:L.url,authToken:L.authToken,action:"started"})}catch(L){throw P3.delete(j),L}};try{return await K($)}catch(F){if(!$.allowPortFallback||!Qy(F))throw F;return await K({...$,port:0})}})}function fF(){return AF()==="production"?s1():_1()}function Yy($){return AF()!=="production"&&!$}async function Xe($){let Z=a1({host:$.host,port:$.port,pathname:$.pathname});return await y3({...$,...Z,owner:fF()})}async function Ye($){let Z=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=a1({host:$.host,port:$.port,pathname:$.pathname});return await FF({...$,...Q,allowPortFallback:$.allowPortFallback??Yy(Z),owner:fF()})}S9();import{buildRemoteConfigSessionBlobUploadMetadata as DF,clearRemoteConfigSessionBlobUpload as jy,createClineTelemetryServiceConfig as Vy,createSessionId as By,createRemoteConfigSessionMessagesArtifactUploader as Hy,prepareRemoteConfigRuntime as Gy,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as LF,readRemoteConfigSessionBlobUploadMetadata as Ky,registerRemoteConfigSessionBlobUpload as _F}from"@cline/shared";function Fy($,Z){let Q=$.telemetry||Z.telemetryService?{...Z.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return s$(Vy(Q)).telemetry}function Ay(){let $=Hy();return{async uploadMessagesFile(Z){await $.uploadMessagesFile(Z)}}}async function fy($){let Z=await Gy($),Q=Fy(Z,$),W=[Z.pluginDefinition],J=Z.claims?.subject,X=DF(Z.bundle?.remoteConfig,J),Y;return{prepared:Z,extensions:W,telemetry:Q,applyToStartSessionInput(j){let V=j.config.extensions??[],B=j.config.telemetry,H=X?j.config.sessionId?.trim()||By():j.config.sessionId;if(H&&X)Y=H;let G=H&&X?_F(H,Z.bundle?.remoteConfig,J):void 0,K=G?{...j.sessionMetadata??{},[LF]:G}:j.sessionMetadata;return{...j,...K?{sessionMetadata:K}:{},config:{...j.config,...H?{sessionId:H}:{},extensions:[...V,...W],telemetry:Q??B}}},async dispose(){if(Y)jy(Y)}}}import{mkdir as Uy,readFile as Dy,unlink as Ly,writeFile as _y}from"node:fs/promises";import{join as zF}from"node:path";function zy($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function Ty($){return new Promise((Z)=>setTimeout(Z,$))}async function h3($){try{await Ly($)}catch{}}async function Oy($,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 Uy(Q,{recursive:!0});let J=zy(`${$.toolCallId}`),X=zF(Q,`${W}.request.${J}.json`),Y=zF(Q,`${W}.decision.${J}.json`),j=Z.nowIso??(()=>new Date().toISOString());await _y(X,`${JSON.stringify({requestId:J,sessionId:W,createdAt:j(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
737
- `,"utf8");let V=Z.timeoutMs??300000,B=Z.pollIntervalMs??200,H=Date.now();while(Date.now()-H<V){try{let G=await Dy(Y,"utf8"),K=JSON.parse(G),F={approved:K.approved===!0,reason:typeof K.reason==="string"?K.reason:void 0};return await Promise.all([h3(Y),h3(X)]),F}catch{}await Ty(B)}return await h3(X),{approved:!1,reason:"Tool approval request timed out"}}r0();function qy($){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 My($){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 Ry($){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 Ey($){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 Ny($){if($.length===0)return{warnings:[]};let Z={},Q=[];for(let W of $){let[J,X]=Ry(W);if(Z[J]=X,Ey(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 OF($){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=qy(J),{headers:Y,warnings:j}=Ny(Q);if(X==="stdio"){if(Q.length>0)throw Error("Stdio MCP installs do not support request headers.");let[B,...H]=W;if(!B?.trim())throw Error("Stdio MCP install requires a command after the server name, for example: cline mcp install fs --yes -- npx -y @modelcontextprotocol/server-filesystem /tmp");return{name:Z,transport:{type:X,command:B,args:H.length>0?H: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 My(V),{name:Z,transport:Y?{type:X,url:V,headers:Y}:{type:X,url:V},warnings:j}}function k3($){let[Z,...Q]=$;if(!Z)throw Error("Marketplace MCP install args must start with a server name.");return{name:Z,...TF({parseTransport:!0,targetArgs:Q})}}function Cy($,Z,Q){U1(Q,(W)=>{let J=W.mcpServers,X=J&&typeof J==="object"&&!Array.isArray(J)?{...J}:{};X[$]={transport:Z},W.mcpServers=X})}function wy($){let{name:Z,transport:Q,warnings:W}=OF($);return Cy(Z,Q,$.settingsPath??Z0()),{name:Z,status:"installed",transport:Q,warnings:W}}import{spawn as jh}from"node:child_process";import{existsSync as PF,rmSync as Vh}from"node:fs";import{homedir as Bh,platform as Hh}from"node:os";import{dirname as Gh,join as wF}from"node:path";import{resolveClineDir as Kh,resolveMcpSettingsPath as Fh}from"@cline/shared/storage";r0();import{existsSync as o2,readdirSync as my,readFileSync as vy,rmdirSync as cy,rmSync as uy,statSync as dy}from"node:fs";import{basename as l0,dirname as H$,extname as ly,isAbsolute as py,join as R1,relative as ry,resolve as s2,sep as c3}from"node:path";import{discoverPluginModulePaths as iy,resolvePluginConfigSearchPaths as ny}from"@cline/shared/storage";import{existsSync as Py,mkdirSync as Sy,readFileSync as by,writeFileSync as yy}from"node:fs";import{dirname as MF,isAbsolute as hy,relative as ky,resolve as qF}from"node:path";function e$($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function b9($,Z){let Q=ky(qF($),qF(Z));return Q===""||!Q.startsWith("..")&&!hy(Q)}function I3($){if(!Py($))return{mcpServers:{}};try{let Z=JSON.parse(by($,"utf8"));if(e$(Z))return Z}catch(Z){throw Error(`Invalid MCP settings at "${$}": ${Z instanceof Error?Z.message:String(Z)}`)}throw Error(`Invalid MCP settings at "${$}": expected an object`)}function x3($){if(e$($.mcpServers))return{...$.mcpServers};return{}}function g3($,Z,Q){Sy(MF($),{recursive:!0}),yy($,`${JSON.stringify({...Z,mcpServers:Q},null,2)}
738
- `,"utf8")}function RF($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))]}}function h9($){if(!e$($))return;let Z=$.metadata;return e$(Z)?Z:void 0}function y9($,Z){let Q=h9($);if(!Q||Q.source!=="plugin")return!1;let W=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,J=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&W===Z.pluginName){if(!Z.pluginPath||J===Z.pluginPath)return!0}if(J&&Z.pluginPath&&(J===Z.pluginPath||b9(Z.pluginPath,J)||b9(J,Z.pluginPath)))return!0;if(W&&Z.pluginNames?.some((X)=>X===W))return!0;if(J&&Z.pluginPaths?.some((X)=>J===X||b9(X,J)||b9(J,X)))return!0;return!1}function Iy($){let Z=e$($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:MF($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function xy($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await F2({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],W=[],J=(Z.failures??[]).map((X)=>({pluginPath:X.pluginPath,pluginName:X.pluginName,message:X.message}));for(let X of Z.extensions??[]){let Y=X.__clinePluginPath;if(!Y)continue;if(!X.setup){Q.push({pluginName:X.name,pluginPath:Y});continue}let j=[],V={registerTool:(B)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(B)=>{if(!X.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');j.push(B)}};try{await X.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(B){J.push({pluginPath:Y,pluginName:X.name,message:B instanceof Error?B.message:String(B)});continue}Q.push({pluginName:X.name,pluginPath:Y});for(let B of j)W.push({pluginName:X.name,pluginPath:Y,server:{...B,metadata:{...B.metadata??{},source:"plugin",pluginName:X.name,pluginPath:Y}}})}return{plugins:Q,servers:W,failures:J}}finally{await Z.shutdown().catch(()=>{})}}async function m3($){let Z=$.settingsPath??Z0(),Q={mutations:[],failures:[]},W;try{W=await xy($)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Q}Q.failures.push(...W.failures);let J;try{J=I3(Z)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Q}let X=x3(J),Y=new Map,j=new Map;for(let B of W.plugins)Y.set(B.pluginPath,new Set),j.set(B.pluginPath,B.pluginName);let V=W7(W.servers.map((B)=>({server:B.server,owner:B,ownerLabel:B.pluginName})));for(let B of V){let H=B.owner;if(!Y.has(H.pluginPath))Y.set(H.pluginPath,new Set);if(B.name)Y.get(H.pluginPath)?.add(B.name);if(!B.registration){Q.mutations.push({name:B.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:B.loadError??"invalid MCP server registration"});continue}let G=X[B.registration.name];if(G!==void 0){if(!y9(G,{pluginName:H.pluginName,pluginPath:H.pluginPath})){Q.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}X[B.registration.name]=Iy({registration:B.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:e$(G)?G:void 0}),Q.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:G===void 0?"created":"updated"})}for(let[B,H]of Object.entries(X)){let G=h9(H),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=Y.get(K);if(F&&y9(H,{pluginPath:K})&&!F.has(B))delete X[B],Q.mutations.push({name:B,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((B)=>B.action!=="skipped"))try{g3(Z,J,X)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)})}return Q}function gy($){let Z=$.settingsPath??Z0(),Q;try{Q=I3(Z)}catch{return[]}let W=x3(Q),J=RF($),X=[];for(let[Y,j]of Object.entries(W)){if(!e$(j)||!y9(j,J))continue;let V=h9(j);W[Y]={...j,disabled:!0},X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(X.length>0)g3(Z,Q,W);return X}function v3($){let Z=$.settingsPath??Z0(),Q;try{Q=I3(Z)}catch{return[]}let W=x3(Q),J=RF($),X=[];for(let[Y,j]of Object.entries(W)){if(!y9(j,J))continue;let V=h9(j);delete W[Y],X.push({name:Y,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(X.length>0)g3(Z,Q,W);return X}var r3="_installed",ay="package",sy=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function u3($){return $.trim().toLowerCase()}function o0($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function oy($){return $.replace(/-[0-9a-f]{12}$/i,"")}function d3($){let Z=ly($);return Z?$.slice(0,-Z.length):$}function l3($){if(!o2($))return;try{let Z=JSON.parse(vy($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function i3($,Z){let Q=ry(Z,$);return Q===""||!Q.startsWith("..")&&!py(Q)}function EF($){let Q=s2($).split(c3),W=Q.lastIndexOf(r3);if(W<0)return;let J=Q[W+1];if(!J)return;let X=sy.get(J)??1,Y=W+2+X;if(Q.length<Y)return;let j=Q.slice(0,Y).join(c3)||c3;return o2(j)?j:void 0}function k9($){try{return my($,{withFileTypes:!0})}catch{return[]}}function ty($){let Z=R1($,r3);if(!o2(Z))return[];let Q=[];for(let W of k9(Z)){if(!W.isDirectory())continue;let J=R1(Z,W.name);if(W.name==="git"){for(let X of k9(J)){if(!X.isDirectory())continue;let Y=R1(J,X.name);for(let j of k9(Y))if(j.isDirectory())Q.push(R1(Y,j.name))}continue}for(let X of k9(J))if(X.isDirectory())Q.push(R1(J,X.name))}return Q.sort((W,J)=>W.localeCompare(J))}function NF($){try{return iy($)}catch{return[]}}function p3($){let Z=NF($),Q=new Set;o0(Q,l0($)),o0(Q,oy(l0($))),o0(Q,l3(R1($,"package.json"))),o0(Q,l3(R1($,ay,"package.json")));for(let W of Z)o0(Q,l0(W)),o0(Q,d3(l0(W)));return{installPath:$,entryPaths:Z,names:[...Q].sort((W,J)=>W.localeCompare(J)),installed:!0}}function ey($,Z){let Q=s2($),W=Z.find((Y)=>i3(Q,Y));if(!W)return;let J=H$(Q);while(J!==W&&J!==H$(J)){if(o2(R1(J,"package.json")))return J;J=H$(J)}let X=l0(Q);if((X==="index.ts"||X==="index.js")&&H$(Q)!==W)return H$(Q);return Q}function CF($,Z){let Q=ey($,Z);if(!Q)return;let W=new Set;return o0(W,l0($)),o0(W,d3(l0($))),o0(W,l0(Q)),o0(W,d3(l0(Q))),o0(W,l3(R1(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...W].sort((J,X)=>J.localeCompare(X)),installed:!1}}function $h($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return ny(Z).filter((Q)=>o2(Q))}function Zh($){let Z=new Map;for(let Q of $){for(let W of ty(Q))Z.set(W,p3(W));for(let W of NF(Q)){let J=EF(W);if(J){if(!Z.has(J))Z.set(J,p3(J));continue}let X=CF(W,$);if(X)Z.set(X.installPath,X)}}return[...Z.values()].sort((Q,W)=>Q.installPath.localeCompare(W.installPath))}function Qh($,Z){let Q=u3(Z);if(!Q)return!1;if(u3($.installPath)===Q)return!0;return $.names.some((W)=>u3(W)===Q)}function Wh($,Z,Q){let W=s2($);for(let X of Z){if(i3(W,X.installPath))return X;if(X.entryPaths.some((Y)=>s2(Y)===W))return X}let J=EF(W);if(J)return p3(J);if(o2(W))return CF(W,Q);return}function Jh($){let Z=D0(),Q=Z.disabledPlugins;if(!Q?.length)return;let W=Q.filter((J)=>{let X=s2(J);if(i3(X,$.installPath))return!1;return!$.entryPaths.some((Y)=>s2(Y)===X)});if(W.length===Q.length)return;G1({...Z,disabledPlugins:W})}function Xh($){let Z=H$($);while(Z!==H$(Z)&&l0(Z)!==r3){try{cy(Z)}catch{return}Z=H$(Z)}}function Yh($){return`${$.names[0]??l0($.installPath)} at ${$.installPath}`}async function n3($){let Z=$h($),Q=Zh(Z),W=$.path?.trim(),J=$.name?.trim(),X;if(W){if(X=Wh(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)=>Qh(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(Yh).join(", ")}`);X=j[0]}let Y=dy(X.installPath,{throwIfNoEntry:!1});if(!Y)throw Error(`Plugin install path does not exist: ${X.installPath}`);if(v3({pluginPaths:[X.installPath,...X.entryPaths],pluginNames:X.names}),uy(X.installPath,{recursive:Y.isDirectory(),force:!0}),Jh(X),X.installed)Xh(X.installPath);return{name:J||X.names[0]||l0(X.installPath),installPath:X.installPath,removedPaths:[X.installPath],entryPaths:X.entryPaths}}var a3=120000,k4=12000,Ah=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,fh=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,Uh=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,Dh=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function s3($){return $.install?.args??[]}function Lh(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||Bh()}function _h($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function zh($){return _h($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function SF($){return $.split(/\r?\n/).map((Z)=>{if(!Ah.test(Z))return Z;return Z.replace(fh,"$1[redacted]").replace(Uh,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(Dh,"$1 [redacted]").replace(/((?:^|[^\w])(?:api\s+key|access\s+token|refresh\s+token|auth(?:orization)?\s+token|secret|password|credential)\s+(?:is\s+)?)(\S+)/gi,"$1[redacted]")}).join(`
739
- `).slice(-k4)}function Th($){let Z=SF([$.stdout,$.stderr].filter(Boolean).join(`
740
- `)).trim();return Z.length>0?Z:void 0}function Oh($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function qh($,Z){return[$,...Z].map((Q)=>Oh(SF(Q).trim())).join(" ")}var Mh=async($,Z)=>new Promise((Q,W)=>{let J=!1,X=!1,Y=jh($,Z,{env:process.env,shell:Hh()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),j="",V="",B=setTimeout(()=>{if(!J)Y.kill("SIGKILL")},a3+5000),H=setTimeout(()=>{X=!0,V+=`
741
- Timed out after ${a3/1000}s.`,Y.kill("SIGTERM")},a3);B.unref?.(),H.unref?.(),Y.stdout?.on("data",(G)=>{if(j+=String(G),j.length>k4*2)j=j.slice(-k4)}),Y.stderr?.on("data",(G)=>{if(V+=String(G),V.length>k4*2)V=V.slice(-k4)}),Y.once("error",(G)=>{clearTimeout(H),clearTimeout(B),W(G)}),Y.once("close",(G,K)=>{J=!0,clearTimeout(H),clearTimeout(B),Q({exitCode:X?124:G??(K==="SIGINT"?130:1),stdout:j,stderr:V})})});function Rh($){return`${$.type}:${$.id}`}function o3($){let Z=s3($);if(Z.length===0)throw Error("Marketplace install args are required.");return k3(Z).name}function bF($,Z={}){let Q=o3($),W=Z.mcpSettingsPath??Fh(),J=U1(W,(X)=>{let Y=X.mcpServers&&typeof X.mcpServers==="object"&&!Array.isArray(X.mcpServers)?X.mcpServers:{},j=Object.hasOwn(Y,Q);if(j)delete Y[Q];return X.mcpServers=Y,j});return{name:Q,deleted:J}}function t3($){let Z=new Set,Q=(J)=>{let X=zh(J??"");if(X&&X!=="skill")Z.add(X)};Q($.id),Q($.name);let W=s3($);for(let J=0;J<W.length;J++){let X=W[J];if((X==="--skill"||X==="-s")&&W[J+1]){Q(W[J+1]),J++;continue}let Y=X.split("@").at(1);if(Y)Q(Y)}return[...Z]}function e3($){return[wF(Kh(),"skills",$,"SKILL.md"),wF(Lh(),".agents","skills",$,"SKILL.md")].filter((Z,Q,W)=>W.indexOf(Z)===Q)}function $J($){if($.type!=="skill")return;return t3($).find((Z)=>e3(Z).some((Q)=>PF(Q)))}function yF($){return $J($)!==void 0}function Eh($){let Z=[];if($.type!=="skill")return Z;for(let Q of t3($))for(let W of e3(Q)){if(!PF(W))continue;let J=Gh(W);Vh(J,{recursive:!0,force:!0}),Z.push(J)}return Z}async function hF($,Z={}){let Q=$J($);if(!Q)return{id:$.id,type:"skill",status:"uninstalled",message:`${$.name??$.id} is not installed.`};let W="npx",J=["-y","skills@latest","remove",Q,"-g","-y"],X=qh(W,J),Y=Z.spawnCommand??Mh,j;try{j=await Y(W,J)}catch(H){throw Error(`Failed to start ${$.name??$.id} uninstall command:
739
+ `),$.end()}catch{$.destroy()}}function mJ($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),J=Buffer.from(Z,"utf8");return Q.length===J.length&&by(Q,J)}function bF($,Z){let Q=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,J=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",W=`Failed to start hub server on ${Z.host}:${Z.port}${Z.pathname}: ${J}`,X=Error(Q?`${W} (${Q})`:W);if(Q)$.code=Q,X.code=Q;if($ instanceof Error&&$.stack)X.stack=`${X.name}: ${X.message}
740
+ Caused by: ${$.stack}`;return X}async function uy($){return await new Promise((Z,Q)=>{let J=hy.createServer();J.once("error",Q),J.listen(0,$,()=>{let W=J.address();if(!W||typeof W==="string"){J.close(()=>Q(Error("Failed to resolve free port")));return}let X=W.port;J.close((Y)=>{if(Y){Q(Y);return}Z(X)})})})}function dy($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var vJ=new Map,yF="cline-hub-auth.",ly=30000;function uJ($){return Array.isArray($)?$.join(","):$??""}function hF($){return $===32||$===9}function kF($){let Z=uJ($).trim(),Q="bearer";if(Z.length<=6||Z.slice(0,6).toLowerCase()!=="bearer"||!hF(Z.charCodeAt(6)))return null;let J=7;while(J<Z.length&&hF(Z.charCodeAt(J)))J+=1;return Z.slice(J).trim()||null}function py($){for(let Z of uJ($).split(",")){let Q=Z.trim();if(Q.startsWith(yF))return Q.slice(yF.length).trim()||null}return null}function IF($){let Z=$.trim().toLowerCase();return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"||Z==="[::1]"}function ry($){let Z=uJ($).trim();if(!Z)return!1;try{return IF(new cJ(Z).hostname)}catch{return!1}}async function dJ($){let Z=$.owner??d$(),Q=$.host??"127.0.0.1",J=$.pathname??"/hub",W=$.port??P5(),X=W===0?await uy(Q):W,Y=X,j=T1(Q,X,J),V=bB(),B=SB(),H=new I9($);await H.start();let G=new xJ(new gJ(H),$.telemetry),K=new Set,F=new Date().toISOString(),A={protocolVersion:CF,minClientProtocolVersion:SF,maxClientProtocolVersion:PF,capabilities:ky,coreVersion:V4.version,buildId:V,pid:process.pid,startedAt:F},D=new Set,U,L,f=async()=>{if(L)return L;return L=(async()=>{if(U)clearInterval(U),U=void 0;for(let _ of D)_.terminate?.();D.clear();for(let _ of K)_();if(K.clear(),await new Promise((_,M)=>{O.close((N)=>{if(N){M(N);return}_()})}),await new Promise((_,M)=>{z.close((N)=>{if(N){M(N);return}_()})}),await H.stop(),(await D0(Z.discoveryPath))?.url===j)await e0(Z.discoveryPath)})(),L},z=yy.createServer((T,_)=>{if((T.url??"/")==="/health"){let N=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(N);return}if((T.url??"/")==="/status"){if(!mJ(kF(T.headers.authorization),B)){_.statusCode=401,_.end("Unauthorized");return}let N=JSON.stringify({hubId:H.getHubId(),...A,authToken:B,host:Q,port:Y,url:j,updatedAt:new Date().toISOString()});_.statusCode=200,_.setHeader("content-type","application/json"),_.end(N);return}if((T.url??"/")==="/version"){_.statusCode=200,_.setHeader("content-type","application/json"),_.end(JSON.stringify(A));return}if(new cJ(T.url??"/",`http://${Q}:${Y}`).pathname==="/shutdown"&&T.method==="POST"){if(!mJ(kF(T.headers.authorization),B)){_.statusCode=401,_.end("Unauthorized");return}_.statusCode=202,_.setHeader("content-type","application/json"),_.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{f()});return}_.statusCode=404,_.end("Not found")}),O=new xy({noServer:!0});U=setInterval(()=>{for(let T of D){if(T.isAlive===!1){try{T.terminate?.()}catch{}D.delete(T);continue}T.isAlive=!1;try{T.ping?.()}catch{try{T.terminate?.()}catch{}D.delete(T)}}},ly),z.on("upgrade",(T,_,M)=>{if(new cJ(T.url??"/",`http://${Q}:${Y}`).pathname!==J){_.destroy();return}if(!(mJ(py(T.headers["sec-websocket-protocol"]),B)||IF(Q)&&ry(T.headers.origin))){cy(_);return}try{O.handleUpgrade(T,_,M,(E)=>{let d=E;d.isAlive=!0,d.on("pong",()=>{d.isAlive=!0}),D.add(d);let s=G.attach(my(E));K.add(s),E.once("close",()=>{D.delete(d),s(),K.delete(s)})})}catch{vy(_)}});try{await new Promise((T,_)=>{z.once("error",(M)=>{_(bF(M,{host:Q,port:X,pathname:J}))}),z.listen(X,Q,()=>{let M=z.address();if(!M||typeof M==="string"){_(bF(Error("Failed to resolve hub port"),{host:Q,port:X,pathname:J}));return}Y=M.port,j=T1(Q,Y,J),T()})})}catch(T){if(U)clearInterval(U),U=void 0;throw await H.stop().catch(()=>{return}),T}return await yB(Z.discoveryPath,{hubId:H.getHubId(),protocolVersion:CF,minClientProtocolVersion:SF,maxClientProtocolVersion:PF,capabilities:[...A.capabilities],coreVersion:V4.version,buildId:V,authToken:B,host:Q,port:Y,url:j,pid:process.pid,startedAt:F,updatedAt:F}),{host:Q,port:Y,url:j,authToken:B,close:f}}async function xF($){let Z=$.owner??d$(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=$.host??"127.0.0.1",W=$.port??P5(),X=$.pathname??"/hub",Y=T1(J,W,X),j=Z.discoveryPath,V=(H)=>{if(!Q)c2(H.url,H.authToken);return H},B=vJ.get(j);if(B){let H=await B;if(H.url===Y)return V({server:H,url:H.url,authToken:H.authToken,action:"reuse"})}return await hB(Z.discoveryPath,async()=>{let H=await D0(Z.discoveryPath);if(H?.url&&(H.url===Y||$.allowPortFallback===!0)){let F=await l$(H.url,{authToken:H.authToken});if(F?.url&&Iy(F).compatible&&await Z$(F.url,{authToken:H.authToken}))return V({url:F.url,authToken:H.authToken,action:"reuse"})}if(H?.url)await e0(Z.discoveryPath);let K=async(F)=>{let A=dJ({...F,owner:Z});vJ.set(j,A);try{let D=await A;return V({server:D,url:D.url,authToken:D.authToken,action:"started"})}catch(D){throw vJ.delete(j),D}};try{return await K($)}catch(F){if(!$.allowPortFallback||!dy(F))throw F;return await K({...$,port:0})}})}function mF(){return gF()==="production"?$$():O1()}function iy($){return gF()!=="production"&&!$}async function K00($){let Z=e1({host:$.host,port:$.port,pathname:$.pathname});return await dJ({...$,...Z,owner:mF()})}async function F00($){let Z=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=e1({host:$.host,port:$.port,pathname:$.pathname});return await xF({...$,...Q,allowPortFallback:$.allowPortFallback??iy(Z),owner:mF()})}x9();import{buildRemoteConfigSessionBlobUploadMetadata as cF,clearRemoteConfigSessionBlobUpload as ny,createClineTelemetryServiceConfig as ay,createSessionId as oy,createRemoteConfigSessionMessagesArtifactUploader as sy,prepareRemoteConfigRuntime as ty,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as uF,readRemoteConfigSessionBlobUploadMetadata as ey,registerRemoteConfigSessionBlobUpload as dF}from"@cline/shared";function $h($,Z){let Q=$.telemetry||Z.telemetryService?{...Z.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return Q2(ay(Q)).telemetry}function Zh(){let $=sy();return{async uploadMessagesFile(Z){await $.uploadMessagesFile(Z)}}}async function Qh($){let Z=await ty($),Q=$h(Z,$),J=[Z.pluginDefinition],W=Z.claims?.subject,X=cF(Z.bundle?.remoteConfig,W),Y;return{prepared:Z,extensions:J,telemetry:Q,applyToStartSessionInput(j){let V=j.config.extensions??[],B=j.config.telemetry,H=X?j.config.sessionId?.trim()||oy():j.config.sessionId;if(H&&X)Y=H;let G=H&&X?dF(H,Z.bundle?.remoteConfig,W):void 0,K=G?{...j.sessionMetadata??{},[uF]:G}:j.sessionMetadata;return{...j,...K?{sessionMetadata:K}:{},config:{...j.config,...H?{sessionId:H}:{},extensions:[...V,...J],telemetry:Q??B}}},async dispose(){if(Y)ny(Y)}}}import{mkdir as Jh,readFile as Wh,unlink as Xh,writeFile as Yh}from"node:fs/promises";import{join as lF}from"node:path";function jh($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function Vh($){return new Promise((Z)=>setTimeout(Z,$))}async function lJ($){try{await Xh($)}catch{}}async function Bh($,Z={}){let Q=Z.approvalDir?.trim(),J=Z.sessionId?.trim();if(!Q||!J)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await Jh(Q,{recursive:!0});let W=jh(`${$.toolCallId}`),X=lF(Q,`${J}.request.${W}.json`),Y=lF(Q,`${J}.decision.${W}.json`),j=Z.nowIso??(()=>new Date().toISOString());await Yh(X,`${JSON.stringify({requestId:W,sessionId:J,createdAt:j(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
741
+ `,"utf8");let V=Z.timeoutMs??300000,B=Z.pollIntervalMs??200,H=Date.now();while(Date.now()-H<V){try{let G=await Wh(Y,"utf8"),K=JSON.parse(G),F={approved:K.approved===!0,reason:typeof K.reason==="string"?K.reason:void 0};return await Promise.all([lJ(Y),lJ(X)]),F}catch{}await Vh(B)}return await lJ(X),{approved:!1,reason:"Tool approval request timed out"}}o0();function Hh($){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 Gh($){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 Kh($){let Z=$.indexOf(":");if(Z<=0)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);let Q=$.slice(0,Z).trim(),J=$.slice(Z+1).trim();if(!Q||!J)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,J]}function Fh($){let Z=$.indexOf("<");return Z>=0&&$.indexOf(">",Z+1)>Z+1}function pF($){let Z=[...$.headers??[]],Q=[],J=$.transport,W=$.targetArgs??[];for(let X=0;X<W.length;X++){let Y=W[X];if($.parseTransport&&Y==="--transport"){let j=W[X+1];if(!j)throw Error("--transport requires a value");J=j,X++;continue}if($.parseTransport&&Y?.startsWith("--transport=")){J=Y.slice(12);continue}if(Y==="--header"){let j=W[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:J}}function Ah($){if($.length===0)return{warnings:[]};let Z={},Q=[];for(let J of $){let[W,X]=Kh(J);if(Z[W]=X,Fh(X))Q.push(`Header "${W}" looks like it contains a placeholder. Update it in MCP settings before using this server.`)}return{headers:Z,warnings:Q}}function rF($){let Z=$.name.trim();if(!Z)throw Error("MCP server name is required");let{headers:Q,targetArgs:J,transport:W}=pF({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),X=Hh(W),{headers:Y,warnings:j}=Ah(Q);if(X==="stdio"){if(Q.length>0)throw Error("Stdio MCP installs do not support request headers.");let[B,...H]=J;if(!B?.trim())throw Error("Stdio MCP install requires a command after the server name, for example: cline mcp install fs --yes -- npx -y @modelcontextprotocol/server-filesystem /tmp");return{name:Z,transport:{type:X,command:B,args:H.length>0?H:void 0},warnings:j}}if(J.length!==1)throw Error("Remote MCP install requires exactly one URL argument after the server name.");let V=J[0]?.trim()??"";return Gh(V),{name:Z,transport:Y?{type:X,url:V,headers:Y}:{type:X,url:V},warnings:j}}function pJ($){let[Z,...Q]=$;if(!Z)throw Error("Marketplace MCP install args must start with a server name.");return{name:Z,...pF({parseTransport:!0,targetArgs:Q})}}function fh($,Z,Q){L1(Q,(J)=>{let W=J.mcpServers,X=W&&typeof W==="object"&&!Array.isArray(W)?{...W}:{};X[$]={transport:Z},J.mcpServers=X})}function Uh($){let{name:Z,transport:Q,warnings:J}=rF($);return fh(Z,Q,$.settingsPath??Z0()),{name:Z,status:"installed",transport:Q,warnings:J}}import{spawn as nh}from"node:child_process";import{existsSync as $A,rmSync as ah}from"node:fs";import{homedir as oh,platform as sh}from"node:os";import{dirname as th,join as eF}from"node:path";import{resolveClineDir as eh,resolveMcpSettingsPath as $k}from"@cline/shared/storage";o0();import{existsSync as W8,readdirSync as Nh,readFileSync as Eh,rmdirSync as wh,rmSync as Ch,statSync as Ph}from"node:fs";import{basename as a0,dirname as f$,extname as Sh,isAbsolute as bh,join as w1,relative as yh,resolve as J8,sep as sJ}from"node:path";import{discoverPluginModulePaths as hh,resolvePluginConfigSearchPaths as kh}from"@cline/shared/storage";import{existsSync as Dh,mkdirSync as Lh,readFileSync as _h,writeFileSync as Th}from"node:fs";import{dirname as nF,isAbsolute as Oh,relative as qh,resolve as iF}from"node:path";function X2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function g9($,Z){let Q=qh(iF($),iF(Z));return Q===""||!Q.startsWith("..")&&!Oh(Q)}function rJ($){if(!Dh($))return{mcpServers:{}};try{let Z=JSON.parse(_h($,"utf8"));if(X2(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 iJ($){if(X2($.mcpServers))return{...$.mcpServers};return{}}function nJ($,Z,Q){Lh(nF($),{recursive:!0}),Th($,`${JSON.stringify({...Z,mcpServers:Q},null,2)}
742
+ `,"utf8")}function aF($){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 v9($){if(!X2($))return;let Z=$.metadata;return X2(Z)?Z:void 0}function m9($,Z){let Q=v9($);if(!Q||Q.source!=="plugin")return!1;let J=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,W=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&J===Z.pluginName){if(!Z.pluginPath||W===Z.pluginPath)return!0}if(W&&Z.pluginPath&&(W===Z.pluginPath||g9(Z.pluginPath,W)||g9(W,Z.pluginPath)))return!0;if(J&&Z.pluginNames?.some((X)=>X===J))return!0;if(W&&Z.pluginPaths?.some((X)=>W===X||g9(X,W)||g9(W,X)))return!0;return!1}function zh($){let Z=X2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:nF($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function Mh($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await L2({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],J=[],W=(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:(B)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(B)=>{if(!X.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');j.push(B)}};try{await X.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(B){W.push({pluginPath:Y,pluginName:X.name,message:B instanceof Error?B.message:String(B)});continue}Q.push({pluginName:X.name,pluginPath:Y});for(let B of j)J.push({pluginName:X.name,pluginPath:Y,server:{...B,metadata:{...B.metadata??{},source:"plugin",pluginName:X.name,pluginPath:Y}}})}return{plugins:Q,servers:J,failures:W}}finally{await Z.shutdown().catch(()=>{})}}async function aJ($){let Z=$.settingsPath??Z0(),Q={mutations:[],failures:[]},J;try{J=await Mh($)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Q}Q.failures.push(...J.failures);let W;try{W=rJ(Z)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)});return Q}let X=iJ(W),Y=new Map,j=new Map;for(let B of J.plugins)Y.set(B.pluginPath,new Set),j.set(B.pluginPath,B.pluginName);let V=B7(J.servers.map((B)=>({server:B.server,owner:B,ownerLabel:B.pluginName})));for(let B of V){let H=B.owner;if(!Y.has(H.pluginPath))Y.set(H.pluginPath,new Set);if(B.name)Y.get(H.pluginPath)?.add(B.name);if(!B.registration){Q.mutations.push({name:B.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:B.loadError??"invalid MCP server registration"});continue}let G=X[B.registration.name];if(G!==void 0){if(!m9(G,{pluginName:H.pluginName,pluginPath:H.pluginPath})){Q.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}X[B.registration.name]=zh({registration:B.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:X2(G)?G:void 0}),Q.mutations.push({name:B.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:G===void 0?"created":"updated"})}for(let[B,H]of Object.entries(X)){let G=v9(H),K=typeof G?.pluginPath==="string"?G.pluginPath:"",F=Y.get(K);if(F&&m9(H,{pluginPath:K})&&!F.has(B))delete X[B],Q.mutations.push({name:B,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((B)=>B.action!=="skipped"))try{nJ(Z,W,X)}catch(B){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:B instanceof Error?B.message:String(B)})}return Q}function Rh($){let Z=$.settingsPath??Z0(),Q;try{Q=rJ(Z)}catch{return[]}let J=iJ(Q),W=aF($),X=[];for(let[Y,j]of Object.entries(J)){if(!X2(j)||!m9(j,W))continue;let V=v9(j);J[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)nJ(Z,Q,J);return X}function oJ($){let Z=$.settingsPath??Z0(),Q;try{Q=rJ(Z)}catch{return[]}let J=iJ(Q),W=aF($),X=[];for(let[Y,j]of Object.entries(J)){if(!m9(j,W))continue;let V=v9(j);delete J[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)nJ(Z,Q,J);return X}var QW="_installed",Ih="package",xh=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function tJ($){return $.trim().toLowerCase()}function Z1($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function gh($){return $.replace(/-[0-9a-f]{12}$/i,"")}function eJ($){let Z=Sh($);return Z?$.slice(0,-Z.length):$}function $W($){if(!W8($))return;try{let Z=JSON.parse(Eh($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function JW($,Z){let Q=yh(Z,$);return Q===""||!Q.startsWith("..")&&!bh(Q)}function oF($){let Q=J8($).split(sJ),J=Q.lastIndexOf(QW);if(J<0)return;let W=Q[J+1];if(!W)return;let X=xh.get(W)??1,Y=J+2+X;if(Q.length<Y)return;let j=Q.slice(0,Y).join(sJ)||sJ;return W8(j)?j:void 0}function c9($){try{return Nh($,{withFileTypes:!0})}catch{return[]}}function mh($){let Z=w1($,QW);if(!W8(Z))return[];let Q=[];for(let J of c9(Z)){if(!J.isDirectory())continue;let W=w1(Z,J.name);if(J.name==="git"){for(let X of c9(W)){if(!X.isDirectory())continue;let Y=w1(W,X.name);for(let j of c9(Y))if(j.isDirectory())Q.push(w1(Y,j.name))}continue}for(let X of c9(W))if(X.isDirectory())Q.push(w1(W,X.name))}return Q.sort((J,W)=>J.localeCompare(W))}function sF($){try{return hh($)}catch{return[]}}function ZW($){let Z=sF($),Q=new Set;Z1(Q,a0($)),Z1(Q,gh(a0($))),Z1(Q,$W(w1($,"package.json"))),Z1(Q,$W(w1($,Ih,"package.json")));for(let J of Z)Z1(Q,a0(J)),Z1(Q,eJ(a0(J)));return{installPath:$,entryPaths:Z,names:[...Q].sort((J,W)=>J.localeCompare(W)),installed:!0}}function vh($,Z){let Q=J8($),J=Z.find((Y)=>JW(Q,Y));if(!J)return;let W=f$(Q);while(W!==J&&W!==f$(W)){if(W8(w1(W,"package.json")))return W;W=f$(W)}let X=a0(Q);if((X==="index.ts"||X==="index.js")&&f$(Q)!==J)return f$(Q);return Q}function tF($,Z){let Q=vh($,Z);if(!Q)return;let J=new Set;return Z1(J,a0($)),Z1(J,eJ(a0($))),Z1(J,a0(Q)),Z1(J,eJ(a0(Q))),Z1(J,$W(w1(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...J].sort((W,X)=>W.localeCompare(X)),installed:!1}}function ch($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return kh(Z).filter((Q)=>W8(Q))}function uh($){let Z=new Map;for(let Q of $){for(let J of mh(Q))Z.set(J,ZW(J));for(let J of sF(Q)){let W=oF(J);if(W){if(!Z.has(W))Z.set(W,ZW(W));continue}let X=tF(J,$);if(X)Z.set(X.installPath,X)}}return[...Z.values()].sort((Q,J)=>Q.installPath.localeCompare(J.installPath))}function dh($,Z){let Q=tJ(Z);if(!Q)return!1;if(tJ($.installPath)===Q)return!0;return $.names.some((J)=>tJ(J)===Q)}function lh($,Z,Q){let J=J8($);for(let X of Z){if(JW(J,X.installPath))return X;if(X.entryPaths.some((Y)=>J8(Y)===J))return X}let W=oF(J);if(W)return ZW(W);if(W8(J))return tF(J,Q);return}function ph($){let Z=O0(),Q=Z.disabledPlugins;if(!Q?.length)return;let J=Q.filter((W)=>{let X=J8(W);if(JW(X,$.installPath))return!1;return!$.entryPaths.some((Y)=>J8(Y)===X)});if(J.length===Q.length)return;F1({...Z,disabledPlugins:J})}function rh($){let Z=f$($);while(Z!==f$(Z)&&a0(Z)!==QW){try{wh(Z)}catch{return}Z=f$(Z)}}function ih($){return`${$.names[0]??a0($.installPath)} at ${$.installPath}`}async function WW($){let Z=ch($),Q=uh(Z),J=$.path?.trim(),W=$.name?.trim(),X;if(J){if(X=lh(J,Q,Z),!X)throw Error(`No plugin found at ${J}`)}else{if(!W)throw Error("plugin uninstall requires a plugin name");let j=Q.filter((V)=>dh(V,W));if(j.length===0)throw Error(`No plugin found matching "${W}"`);if(j.length>1)throw Error(`Multiple plugins match "${W}": ${j.map(ih).join(", ")}`);X=j[0]}let Y=Ph(X.installPath,{throwIfNoEntry:!1});if(!Y)throw Error(`Plugin install path does not exist: ${X.installPath}`);if(oJ({pluginPaths:[X.installPath,...X.entryPaths],pluginNames:X.names}),Ch(X.installPath,{recursive:Y.isDirectory(),force:!0}),ph(X),X.installed)rh(X.installPath);return{name:W||X.names[0]||a0(X.installPath),installPath:X.installPath,removedPaths:[X.installPath],entryPaths:X.entryPaths}}var XW=120000,d4=12000,Zk=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,Qk=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,Jk=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,Wk=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function YW($){return $.install?.args??[]}function Xk(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||oh()}function Yk($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function jk($){return Yk($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function ZA($){return $.split(/\r?\n/).map((Z)=>{if(!Zk.test(Z))return Z;return Z.replace(Qk,"$1[redacted]").replace(Jk,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(Wk,"$1 [redacted]").replace(/((?:^|[^\w])(?:api\s+key|access\s+token|refresh\s+token|auth(?:orization)?\s+token|secret|password|credential)\s+(?:is\s+)?)(\S+)/gi,"$1[redacted]")}).join(`
743
+ `).slice(-d4)}function Vk($){let Z=ZA([$.stdout,$.stderr].filter(Boolean).join(`
744
+ `)).trim();return Z.length>0?Z:void 0}function Bk($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function Hk($,Z){return[$,...Z].map((Q)=>Bk(ZA(Q).trim())).join(" ")}var Gk=async($,Z)=>new Promise((Q,J)=>{let W=!1,X=!1,Y=nh($,Z,{env:process.env,shell:sh()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),j="",V="",B=setTimeout(()=>{if(!W)Y.kill("SIGKILL")},XW+5000),H=setTimeout(()=>{X=!0,V+=`
745
+ Timed out after ${XW/1000}s.`,Y.kill("SIGTERM")},XW);B.unref?.(),H.unref?.(),Y.stdout?.on("data",(G)=>{if(j+=String(G),j.length>d4*2)j=j.slice(-d4)}),Y.stderr?.on("data",(G)=>{if(V+=String(G),V.length>d4*2)V=V.slice(-d4)}),Y.once("error",(G)=>{clearTimeout(H),clearTimeout(B),J(G)}),Y.once("close",(G,K)=>{W=!0,clearTimeout(H),clearTimeout(B),Q({exitCode:X?124:G??(K==="SIGINT"?130:1),stdout:j,stderr:V})})});function Kk($){return`${$.type}:${$.id}`}function jW($){let Z=YW($);if(Z.length===0)throw Error("Marketplace install args are required.");return pJ(Z).name}function QA($,Z={}){let Q=jW($),J=Z.mcpSettingsPath??$k(),W=L1(J,(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:W}}function VW($){let Z=new Set,Q=(W)=>{let X=jk(W??"");if(X&&X!=="skill")Z.add(X)};Q($.id),Q($.name);let J=YW($);for(let W=0;W<J.length;W++){let X=J[W];if((X==="--skill"||X==="-s")&&J[W+1]){Q(J[W+1]),W++;continue}let Y=X.split("@").at(1);if(Y)Q(Y)}return[...Z]}function BW($){return[eF(eh(),"skills",$,"SKILL.md"),eF(Xk(),".agents","skills",$,"SKILL.md")].filter((Z,Q,J)=>J.indexOf(Z)===Q)}function HW($){if($.type!=="skill")return;return VW($).find((Z)=>BW(Z).some((Q)=>$A(Q)))}function JA($){return HW($)!==void 0}function Fk($){let Z=[];if($.type!=="skill")return Z;for(let Q of VW($))for(let J of BW(Q)){if(!$A(J))continue;let W=th(J);ah(W,{recursive:!0,force:!0}),Z.push(W)}return Z}async function WA($,Z={}){let Q=HW($);if(!Q)return{id:$.id,type:"skill",status:"uninstalled",message:`${$.name??$.id} is not installed.`};let J="npx",W=["-y","skills@latest","remove",Q,"-g","-y"],X=Hk(J,W),Y=Z.spawnCommand??Gk,j;try{j=await Y(J,W)}catch(H){throw Error(`Failed to start ${$.name??$.id} uninstall command:
742
746
  ${X}
743
- ${H instanceof Error?H.message:String(H)}`)}let V=Th(j);if(j.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${j.exitCode}.
747
+ ${H instanceof Error?H.message:String(H)}`)}let V=Vk(j);if(j.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${j.exitCode}.
744
748
  Command:
745
749
  ${X}${V?`
746
750
 
747
- ${V}`:""}`);let B=Eh($);if(yF($))throw Error(`Skill uninstall completed, but ${$.name??$.id} is still present in Cline's global skills directories.`);return{id:$.id,type:"skill",status:"uninstalled",message:`Uninstalled ${$.name??$.id}.`,output:[V,...B.map((H)=>`Removed: ${H}`)].filter(Boolean).join(`
748
- `)||void 0}}async function kF($,Z={}){let[Q]=s3($),W=Q?.trim()||$.id;if(!W)throw Error("Plugin marketplace uninstalls require a plugin name.");let J=await n3({name:W,workspaceRoot:Z.workspaceRoot});return{id:$.id,type:"plugin",status:"uninstalled",message:`Uninstalled ${$.name??J.name??$.id}.`,output:[`Path: ${J.installPath}`,...J.removedPaths.map((X)=>`Removed: ${X}`)].join(`
749
- `)}}async function Nh($,Z={}){if($.type==="mcp"){let Q=o3($);if(Z.deleteMcpServer)await Z.deleteMcpServer(Q);else bF($,Z);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Q??$.id}.`}}if($.type==="skill")return hF($,Z);if($.type==="plugin")return kF($,Z);throw Error(`Unsupported marketplace entry type: ${$.type}`)}import{spawn as Ch}from"node:child_process";import{createHash as wh}from"node:crypto";import{existsSync as J1,mkdirSync as WJ,readdirSync as Ph,readFileSync as Sh,renameSync as I9,rmSync as m9,statSync as JJ}from"node:fs";import{cp as QJ,mkdir as dF,writeFile as v9}from"node:fs/promises";import{homedir as IF}from"node:os";import{basename as N1,dirname as xF,extname as bh,join as r,relative as lF,resolve as G$,sep as yh}from"node:path";import{isPluginModulePath as g9,resolveClineDir as hh,resolvePluginModuleEntries as kh}from"@cline/shared/storage";var t2="_installed",c9="package",Ih="https://github.com/cline/plugins.git",gF=30000,x9=10485760,mF="@cline/",xh=["dependencies","devDependencies","optionalDependencies","peerDependencies"],gh={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function u9($){if($==="~")return IF();if($.startsWith("~/"))return r(IF(),$.slice(2));return $}function pF($){return $.split(yh).join("/")}function $2($){return wh("sha256").update($).digest("hex").slice(0,12)}function mh($){let Z=0;while(Z<$.length&&$[Z]==="-")Z++;let Q=$.length;while(Q>Z&&$[Q-1]==="-")Q--;return $.slice(Z,Q)}function E1($){let Z="",Q=!1,W=$.startsWith("@")?$.slice(1):$;for(let X of W.slice(0,256)){if(X>="a"&&X<="z"||X>="A"&&X<="Z"||X>="0"&&X<="9"||X==="."||X==="_"||X==="-")Z+=X,Q=X==="-";else if(!Q)Z+="-",Q=!0;if(Z.length>=80)break}return mh(Z)||"plugin"}function rF($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function vh($){return $?.trim()||Ih}function vF($){let Q=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Q?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Q[1]}}function ch($){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 uh($){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 dh($){try{return decodeURIComponent($)}catch{return $}}function lh($){return N1(dh($))||"plugin"}function ph($){let Z=$.split("/").filter(Boolean);return Z.length>=5&&(Z[2]==="blob"||Z[2]==="raw")}function cF($){if(!/^https?:\/\//i.test($))return null;let Z;try{Z=new URL($)}catch{return null}let Q=Z.hostname.toLowerCase(),W=lh(Z.pathname),J=g9(W),X=(Q==="github.com"||Q==="www.github.com")&&ph(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 uF($,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}=uh(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 B=V.replace(/\.git$/,"").replace(/^\/+/,"");if(!j||!B||B.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:B}}function iF($,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}=vF(Y);return{type:"npm",spec:Y,name:j}}if(Z==="git"){let Y=uF(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=cF(Q);if(!Y)throw Error(`Invalid remote plugin source: ${$}`);return Y}if(Q.startsWith("npm:")){let Y=Q.slice(4).trim(),{name:j}=vF(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=cF(Q);if(J)return J;let X=uF(Q);if(X)return X;if(rF(Q))return{type:"official",slug:Q};if(ch(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 rh($){return $?r($,".cline","plugins"):r(hh(),"plugins")}function ih($,Z,Q){if(Z.type==="npm")return r($,t2,"npm",`${E1(Z.name)}-${$2(Q)}`);if(Z.type==="git")return r($,t2,"git",E1(Z.host),`${E1(Z.path)}-${$2(Q)}`);if(Z.type==="remote")return r($,t2,"remote",`${E1(Z.filename)}-${$2(Q)}`);if(Z.type==="official")return r($,t2,"official",`${E1(Z.slug)}-${$2(Q)}`);return r($,t2,"local",`${E1(N1(u9(Z.path)))}-${$2(Q)}`)}function nh($,Z,Q){if($.type==="npm")return`npm:${$.spec}`;if($.type==="git")return`git:${$.repo}${$.ref?`#${$.ref}`:""}`;if($.type==="remote")return`remote:${$.url}`;if($.type==="official")return`official:${Q}#plugins/${$.slug}`;return`local:${G$(Z,u9($.path))}`}function ah($,Z){if($.type==="npm")return $.name;if($.type==="git")return E1(N1($.path));if($.type==="remote")return E1(N1($.filename,bh($.filename)));if($.type==="official")return $.slug;return E1(N1(G$(Z,u9($.path))))}async function e2($,Z,Q={}){await new Promise((W,J)=>{let X=Ch($,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 nF($){let Z=r($,"package.json");if(!J1(Z))return null;try{return JSON.parse(Sh(Z,"utf8"))}catch{return null}}function sh($){let Z=$?.cline?.plugins;if(!Array.isArray(Z))return[];return Z.flatMap((Q)=>{if(typeof Q==="string")return[Q];return Q.paths??[]})}async function oh($){let Z=r($,"package.json"),Q=nF($);if(!Q)return;let W=!1;for(let J of xh){let X=Q[J];if(!X||typeof X!=="object")continue;for(let Y of Object.keys(X)){if(!Y.startsWith(mF))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(mF))continue;delete Q.peerDependenciesMeta[J],W=!0}if(Object.keys(Q.peerDependenciesMeta).length===0)delete Q.peerDependenciesMeta}if(!W)return;await v9(Z,`${JSON.stringify(Q,null,2)}
750
- `,"utf8")}function th($,Z){let Q=r($,"node_modules","@cline");if(!J1(Q))return;for(let W of sF(Q)){if(`@cline/${W.name}`===Z)continue;m9(r(Q,W.name),{recursive:!0,force:!0})}}function aF($){let Z=sh(nF($)).map((X)=>G$($,X)).filter((X)=>J1(X)&&JJ(X).isFile()&&g9(X));if(Z.length>0)return Z;let Q=kh($);if(Q?.length)return Q;let W=[],J=[$];while(J.length>0){let X=J.pop();if(!X)continue;for(let Y of sF(X)){let j=r(X,Y.name);if(Y.name==="node_modules"||Y.name===".git")continue;if(Y.isDirectory()){J.push(j);continue}if(Y.isFile()&&!Y.name.startsWith(".")&&g9(j))W.push(j)}}return W.sort((X,Y)=>X.localeCompare(Y))}function sF($){try{return Ph($,{withFileTypes:!0})}catch{return[]}}function eh($,Z){let Q=aF(Z);if(Q.length===0)throw Error(`No plugin entry files found in ${Z}`);return Q.map((W)=>`./${pF(lF($,W))}`)}async function $k($,Z,Q){let W=eh($,Z);return await v9(r($,"package.json"),JSON.stringify({...gh,name:Q,cline:{plugins:[{paths:W}]}},null,2),"utf8"),W}async function Zk($,Z,Q){let W=r(Z,c9);return await dF(W,{recursive:!0}),await v9(r(W,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await e2(Q,["install",$.spec,"--prefix",W,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),th(W,$.name),r(W,"node_modules",$.name)}async function XJ($,Z){if(!J1(r($,"package.json")))return;await oh($),await e2(Z,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function Qk($,Z,Q){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let W=r(Z,c9),J=["clone","--filter=blob:none"];if($.ref)J.push("--branch",$.ref);J.push("--",$.repo,W);try{await e2("git",J)}catch(X){if(!$.ref)throw X;await e2("git",["clone","--filter=blob:none","--",$.repo,W]),await e2("git",["checkout","--detach",$.ref],{cwd:W})}return await XJ(W,Q),W}async function Wk($,Z,Q,W){let J=r(Z,"repo");await e2("git",["clone","--filter=blob:none","--depth","1","--",W,J]);let X=r(J,"plugins",$.slug);if(!J1(X)||!JJ(X).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${W}`);let Y=r(Z,c9);return await QJ(X,Y,{recursive:!0,filter:(j)=>{let V=N1(j);return V!==".git"&&V!=="node_modules"}}),m9(J,{recursive:!0,force:!0}),await XJ(Y,Q),Y}function ZJ($){return Error(`Remote plugin file from ${$} exceeds the ${x9} byte limit`)}function Jk($){let Z=$.headers.get("content-length");if(!Z)return;let Q=Number(Z);if(!Number.isFinite(Q)||Q<0)return;return Q}async function Xk($,Z){let Q=Jk($);if(Q!==void 0&&Q>x9)throw ZJ(Z);if(!$.body){let Y=Buffer.from(await $.text(),"utf8");if(Y.byteLength>x9)throw ZJ(Z);return Y}let W=$.body.getReader(),J=[],X=0;try{while(!0){let{done:Y,value:j}=await W.read();if(Y)break;let V=Buffer.from(j);if(X+=V.byteLength,X>x9)throw await W.cancel().catch(()=>{return}),ZJ(Z);J.push(V)}return Buffer.concat(J,X)}finally{W.releaseLock()}}async function Yk($,Z){let Q=new AbortController,W=setTimeout(()=>{Q.abort()},gF);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 Xk(J,$.url);return WJ(Z,{recursive:!0}),await v9(r(Z,$.filename),X),Z}catch(J){if(J instanceof Error&&J.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${gF}ms`);throw J}finally{clearTimeout(W)}}async function jk($,Z,Q,W){let J=G$(Q,u9($.path));if(!J1(J))throw Error(`Plugin source path does not exist: ${J}`);let X=JJ(J);if(X.isFile()){if(!g9(J))throw Error(`Plugin file must be .js or .ts: ${J}`);WJ(Z,{recursive:!0});let j=r(Z,N1(J));return await QJ(J,j),Z}if(!X.isDirectory())throw Error(`Plugin source must be a file or directory: ${J}`);let Y=r(Z,c9);return await QJ(J,Y,{recursive:!0,filter:(j)=>{let V=N1(j);return V!==".git"&&V!=="node_modules"}}),await XJ(Y,W),Y}function Vk($,Z){if(J1($)&&!Z)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function Bk($,Z,Q){if(WJ(xF(Z),{recursive:!0}),!J1(Z)){I9($,Z);return}if(!Q)throw Error(`Plugin is already installed at ${Z}. Use --force to replace it.`);let W=r(xF(Z),`.replace-${N1(Z)}-${Date.now()}-${process.pid}-${$2(`${Z}:${Math.random()}`)}`);I9(Z,W);try{I9($,Z)}catch(J){if(!J1(Z)&&J1(W))I9(W,Z);throw J}try{m9(W,{recursive:!0,force:!0})}catch{}}function Hk($){let Z=$.transport;if(Z.type==="stdio")return!1;return Z.headers!==void 0&&Object.keys(Z.headers).length>0}function Gk($){let Z=$.oauth?.tokens?.access_token;return typeof Z==="string"&&Z.trim().length>0}function Kk($){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 oF($){let Z=new Set($.pluginPaths.map((J)=>G$(J)));if(Z.size===0)return[];let Q;try{Q=$1({filePath:$.settingsPath??Z0()})}catch{return[]}let W=[];for(let J of Q){let X=Kk(J);if(!X||!Z.has(G$(X.pluginPath)))continue;let Y=J.transport.type;if(Y==="stdio")continue;if(Hk(J)||Gk(J))continue;W.push({name:J.name,pluginName:X.pluginName,pluginPath:X.pluginPath,transportType:Y,lastError:J.oauth?.lastError})}return W.sort((J,X)=>J.name.localeCompare(X.name))}async function Fk($){let Z=$.source.trim(),Q=iF(Z,$.sourceType),W=$.cwd?.trim(),J=W?G$(W):process.cwd(),X=rh(W?J:void 0),Y=vh($.officialPluginsRepo),j=nh(Q,J,Y),V=ih(X,Q,j),B=ah(Q,J),H=r(X,t2,".tmp"),G=r(H,`${Date.now()}-${process.pid}-${$2(`${Z}:${Math.random()}`)}`),K=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;Vk(V,F),await dF(H,{recursive:!0});let A;try{if(Q.type==="npm")A=await Zk(Q,G,K);else if(Q.type==="git")A=await Qk(Q,G,K);else if(Q.type==="official")A=await Wk(Q,G,K,Y);else if(Q.type==="remote")A=await Yk(Q,G);else A=await jk(Q,G,J,K);let L=(Q.type==="local"||Q.type==="remote")&&A===G?aF(G).map((U)=>`./${pF(lF(G,U))}`):await $k(G,A,B);if(L.length===0)throw Error(`No plugin entry files found for ${Z}`);Bk(G,V,F);let f={source:Z,installPath:V,entryPaths:L.map((U)=>G$(V,U)),mcpSyncFailures:[],mcpOAuthCandidates:[]},D=await m3({pluginPaths:f.entryPaths,cwd:J,workspacePath:J});return f.mcpSyncFailures=D.failures,f.mcpOAuthCandidates=oF({pluginPaths:f.entryPaths}),f}catch(L){throw m9(G,{recursive:!0,force:!0}),L}}import*as M0 from"@cline/llms";var eF="cline-pass";function Ak($){return $.apiKey??$.auth?.apiKey}function fk($){return($.auth?.accessToken?.trim()??"").length>0}function $A($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function Uk($){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 Dk($){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 ZA($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>AG(Z,Q))}async function Lk($,Z){let Q=await M0.getModelsForProvider($),W=$===eF;if(!Z&&!W)return Q;let J=await kZ($,{loadLatestOnInit:W,loadPrivateOnAuth:!0,failOnError:!1},Z);if($==="litellm"&&J?.knownModels)return J.knownModels;if(W&&J?.knownModels)return J.knownModels;return J?.knownModels?{...Q,...J.knownModels}:Q}function YJ($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function _k($){if(!$?.length)return;return[...new Set($)]}function zk($,Z){return _k([...$??[],...Z??[]])}function Tk($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function Ok($){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 qk($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(Ok)}var d9={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},tF={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function Mk($){if(!$)return[d9];if($.source!=="system")return $.baseUrl?[d9,tF]:[d9];let Z=[];if($.env?.length)Z.push(d9);if($.baseUrl)Z.push(tF);return Z}function Rk($,Z){return Z.split(".").reduce((Q,W)=>{if(!Q||typeof Q!=="object")return;return Q[W]},$)}function Ek($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function Nk($,Z,Q){if(!$?.length)return;let W={};for(let J of $){let Y=Ek(J.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:Rk(Z,J.path))??J.defaultValue;if(Y!==void 0)W[J.path]=Y}return W}function QA($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function jJ($,Z){let Q=Z?.includes("vision")??!1,W=Z?.includes("reasoning")??!1;return Object.fromEntries($.map((J)=>[J,{id:J,name:J,supportsVision:Q,supportsAttachments:Q,supportsReasoning:W}]))}async function WA($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await o4($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function JA($,Z){let Q=$.read(),W=!1;if(Q.providers[Z])delete Q.providers[Z],W=!0;if(Q.lastUsedProvider===Z)delete Q.lastUsedProvider,W=!0;if(W)$.write(Q);M0.unregisterProvider(Z)}async function Ck($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=Z.baseUrl.trim(),J=Z.apiKey?.trim()??"";if(!W&&!J){let A=r$($);if((await d2(A)).providers[Q]){let f=await YA($,{providerId:Q});return{providerId:Q,settingsPath:f.settingsPath,modelsPath:f.modelsPath,modelsCount:0}}return JA($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(M0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let X=Z.name.trim();if(!X)throw Error("name is required");if(!W)throw Error("baseUrl is required");let Y=YJ(Z.models),j=Z.modelsSourceUrl?.trim(),V=await WA({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 B=Z.defaultModelId?.trim()&&V.includes(Z.defaultModelId.trim())?Z.defaultModelId.trim():V[0],H=Z.capabilities?.length?[...new Set(Z.capabilities)]:void 0,G=QA(Z.headers);$.saveProviderSettings({provider:Q,apiKey:J||void 0,baseUrl:W,headers:G,timeout:Z.timeoutMs,model:B,protocol:Z.protocol,client:Z.client},{setLastUsed:!1});let K=r$($),F=await d2(K);return F.providers[Q]={provider:{name:X,baseUrl:W,defaultModelId:B,protocol:Z.protocol,client:Z.client,capabilities:H,modelsSourceUrl:j},models:jJ(V,H)},await Z9(K,F),T4(Q,F.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function XA($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=r$($),J=await d2(W),X=J.providers[Q];if(!X){let q=$.getProviderSettings(Q);if(!q)throw Error(`provider "${Q}" does not exist`);let z=Z.modelsSourceUrl?.trim(),_=YJ(Z.models)[0]??q.model?.trim();if(!_&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);X={provider:{name:Z.name?.trim()||$A(Q),baseUrl:Z.baseUrl?.trim()??q.baseUrl?.trim()??"",defaultModelId:_,protocol:q.protocol,client:q.client,capabilities:q.capabilities},models:_?jJ([_],q.capabilities):{}}}if(!X.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let Y=Z.name?.trim()??X.provider.name.trim();if(!Y)throw Error("name is required");let j=Z.baseUrl?.trim()??X.provider.baseUrl.trim();if(!j)throw Error("baseUrl is required");let V=Z.capabilities===void 0?X.provider.capabilities:Z.capabilities===null?void 0:[...new Set(Z.capabilities)],B=Z.protocol===void 0?X.provider.protocol:Z.protocol??void 0,H=Z.client===void 0?X.provider.client:Z.client??void 0,G=YJ(Z.models),K=Z.modelsSourceUrl===void 0?X.provider.modelsSourceUrl:Z.modelsSourceUrl?.trim()||void 0,F=Z.models!==void 0||Z.modelsSourceUrl!==void 0&&!!K,A=Object.keys(X.models??{}).map((q)=>q.trim()).filter(Boolean),L=await WA({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(B)T.protocol=B;else delete T.protocol;if(H)T.client=H;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=QA(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:B,client:H,capabilities:V,modelsSourceUrl:K},models:jJ(L,V)},await Z9(W,J),T4(Q,J.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W,modelsCount:L.length}}async function YA($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let W=r$($),J=await d2(W);if(!J.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete J.providers[Q],await Z9(W,J),M0.unregisterProvider(Q),JA($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:W}}async function wk($,Z={}){let Q=$.read(),W=M0.getProviderIds(),J=await Promise.all(W.map(async(Y)=>{let[j,V]=await Promise.all([M0.getProvider(Y),M0.getModelsForProvider(Y)]),B=ZA(V),H=Q.providers[Y]?.settings,G=j?.name??$A(Y),K=zk(j?.capabilities,H?.capabilities),F=qk(j?.metadata)??Mk(j);return{provider:{id:Y,name:G,models:B.length,color:Dk(Y),letter:Uk(G),enabled:Boolean(H),apiKey:H?Ak(H):void 0,oauthAccessTokenPresent:H?fk(H):void 0,baseUrl:H?.baseUrl??j?.baseUrl,defaultModelId:j?.defaultModelId,protocol:H?.protocol??j?.protocol,client:H?.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:Nk(F,H,j),modelList:B},rank:Tk(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!==eF);return{providers:X,settingsPath:$.getFilePath()}}async function Pk($,Z){let Q=$.trim(),W=await Lk(Q,Z),J=ZA(W);return{providerId:Q,models:J}}function l9($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function jA($,Z){if(!l9(Z))return l9($)?{...$}:void 0;let Q=l9($)?{...$}:{};for(let[W,J]of Object.entries(Z)){if(J==null||J===""){delete Q[W];continue}if(l9(J)){let X=jA(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 Sk($,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=jA(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 bk($,Z){let Q=Z.trim(),W=$.getProviderSettings(Q),X=M0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,Y=W?.baseUrl?.trim()||X?.baseUrl?.trim(),j=t4(Y,X?.baseUrl,X?.modelsSourceUrl);if(!W||!X||!Y||!j)return{providerId:Q,refreshed:!1};let V=await XA($,{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 yk($){let Z=$.trim().toLowerCase(),Q=H0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function hk($,Z,Q,W){let J=H0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let X=m4({onPrompt:async(Y)=>Y.defaultValue??"",openUrl:Q,onOpenUrlError:({error:Y})=>{throw Y instanceof Error?Y:Error(String(Y))}});return J.login({settings:Z,callbacks:X,telemetry:W})}function kk($,Z,Q,W,J){return X8({manager:$,providerId:Z,settings:Q,credentials:W,setLastUsed:J?.setLastUsed})}async function Ik($,Z,Q,W){let J=m4({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return CZ($,Z,{callbacks:J,telemetry:W})}function xk($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}import*as p9 from"@cline/llms";var gk=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],mk={"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 vk($,Z){let Q={};for(let W of gk){let J=$[W],X=Z[W];if(J||X)Q[W]={...J,...X}}return Q}function ck($){let Z=mk[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:vk($.fields,Z.fields)}}var uk=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function dk($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return uk.has($)}function lk($){let Z=p9.normalizeProviderId($);if(J8(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=p9.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:Z,authMethod:"local",fields:{}};let W=Q?.provider.baseUrl,J={apiKey:{}};if(dk(Z,Q))J.baseUrl={defaultValue:W};return ck({providerId:Z,authMethod:"api-key",fields:J})}S9();G0();q9();import{appendFileSync as pk,existsSync as VJ,mkdirSync as rk,readFileSync as ik,renameSync as nk,unlinkSync as ak,writeFileSync as sk}from"node:fs";import{join as BJ}from"node:path";import{resolveTeamDataDir as ok}from"@cline/shared/storage";function tk($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class VA{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=tk($.teamName),Q=$.baseDir?.trim()||ok();this.dirPath=BJ(Q,Z),this.statePath=BJ(this.dirPath,"state.json"),this.taskHistoryPath=BJ(this.dirPath,"task-history.jsonl")}loadState(){if(!VJ(this.statePath))return;try{let $=ik(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 LH(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`;sk(Q,`${JSON.stringify(Z,null,2)}
751
- `,"utf8"),nk(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(),pk(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:Z})}
752
- `,"utf8")}ensureDir(){if(!VJ(this.dirPath))rk(this.dirPath,{recursive:!0})}hasPersistableState($){let Z=$.exportState();if(this.teammateSpecs.size>0)return!0;if(Z.members.some((Q)=>Q.role==="teammate"))return!0;return Z.tasks.length>0||Z.mailbox.length>0||Z.missionLog.length>0}clearPersistedState(){if(VJ(this.statePath))ak(this.statePath)}}import{z as S}from"zod";var BA=S.object({workspaceRoot:S.string().min(1),cwd:S.string().optional(),provider:S.string().min(1),model:S.string().min(1),mode:S.enum(["act","plan"]).default("act"),apiKey:S.string(),systemPrompt:S.string().optional(),rules:S.string().optional(),maxIterations:S.number().int().positive().optional(),enableTools:S.boolean(),enableSpawn:S.boolean().optional(),enableTeams:S.boolean().optional(),autoApproveTools:S.boolean().optional(),missionStepInterval:S.number().int().positive().optional(),missionTimeIntervalMs:S.number().int().positive().optional()}),HA=S.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),GA=S.enum(["user","assistant","tool","system","status","error"]),KA=S.object({id:S.string().min(1),sessionId:S.string().nullable(),role:GA,content:S.string(),createdAt:S.number().int().nonnegative(),meta:S.object({stream:S.enum(["stdout","stderr"]).optional(),toolName:S.string().optional(),iteration:S.number().int().nonnegative().optional(),agentId:S.string().optional(),conversationId:S.string().optional(),hookEventName:S.string().optional(),inputTokens:S.number().int().nonnegative().optional(),outputTokens:S.number().int().nonnegative().optional(),checkpoint:S.object({ref:S.string(),createdAt:S.number().int().nonnegative(),runCount:S.number().int().positive(),kind:S.enum(["stash","commit"]).optional()}).optional()}).optional()}),FA=S.object({toolCalls:S.number().int().nonnegative(),tokensIn:S.number().int().nonnegative(),tokensOut:S.number().int().nonnegative()}),ek=S.object({sessionId:S.string().nullable(),status:HA,config:BA,messages:S.array(KA),rawTranscript:S.string(),error:S.string().nullable(),summary:FA});var $I=FB;import{Agent as R$0,createAgentRuntime as E$0}from"@cline/agents";import{getClineEnvironmentConfig as ZI}from"@cline/shared";var QI=5000,AA={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 WI($){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 HJ($){if(!$||typeof $!=="object")return null;let Z=$;if(typeof Z.id!=="string"||Z.id.length===0)return null;return{id:Z.id,name:typeof Z.name==="string"&&Z.name.length>0?Z.name:Z.id,description:typeof Z.description==="string"?Z.description:"",tags:Array.isArray(Z.tags)?Z.tags.filter((Q)=>typeof Q==="string"):[]}}function JI($){if(!$||typeof $!=="object")return null;let Z=$,Q=Array.isArray(Z.recommended)?Z.recommended:[],W=Array.isArray(Z.free)?Z.free:[],J=Array.isArray(Z.clinePass)?Z.clinePass:[],X=Q.map(HJ).filter((V)=>V!==null),Y=W.map(HJ).filter((V)=>V!==null),j=J.map(HJ).filter((V)=>V!==null);if(X.length===0&&Y.length===0&&j.length===0)return null;return{recommended:X,free:Y,clinePass:j}}function XI($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=ZI().apiBaseUrl;try{return($.providerSettingsManager??new Y$).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function YI($,Z,Q){let W=new AbortController,J=setTimeout(()=>W.abort(),Q);try{return await $(Z,{signal:W.signal})}finally{clearTimeout(J)}}async function jI($={}){try{let Z=XI($),Q=$.fetchImpl??fetch,W=await YI(Q,`${Z}/api/v1/ai/cline/recommended-models`,$.timeoutMs??QI);if(!W.ok)throw Error(`HTTP ${W.status}`);let J=await W.json(),X=JI(J);if(X)return X}catch{}return WI(AA)}import{readFile as VI}from"node:fs/promises";import BI from"node:path";function HI($){return $}async function GI($){let Z=BI.resolve($),Q=await VI(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 KI(W,Z)}function KI($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let W=$.providers;if(!Array.isArray(W))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!W.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}import{BUILT_IN_PROVIDER_IDS as DA,createHandler as fI,createHandlerAsync as UI,getProviderCollection as DI,hasProvider as LA,registerAsyncHandler as LI,registerHandler as _I,registerModel as zI,registerProvider as _A}from"@cline/llms";function fA($){return $?{...$}:{}}function FI($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function AI($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function UA($){let Z=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:Z,defaultModel:$.collection.provider.defaultModelId,modelCount:Z.length}}class GJ{providers=new Map;register($){AI($.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??{},...fA($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:FI($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...fA($.settings)}})}registerModel($,Z){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([Z]),defaultModel:Z,defaults:{}});return}Q.models.add(Z)}createHandlerConfig($){let Z=this.require($.providerId),Q=$.modelId??Z.defaultModel;if(!Z.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...Z.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,Z){return this.providers.get($)?.models.has(Z)??!1}require($){let Z=this.providers.get($);if(!Z)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return Z}}class KJ{configuredProviders=new GJ;constructor($){this.applyConfig($)}createHandler($){return fI(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return UI(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(_A($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)_I($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)LI($.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.`);_A({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($){zI($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...DA]}async getBuiltInProviders(){return(await Promise.all(DA.map((Z)=>DI(Z)))).filter((Z)=>Z!==void 0).map((Z)=>UA({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=LA(Z.id),W=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,J=typeof W==="string"&&LA(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 TI($){return new KJ($)}V3();async function c00(){return Promise.resolve().then(() => (S9(),UF))}export{TB as writeHubDiscovery,G1 as writeGlobalSettings,OB as withHubStartupLock,o1 as verifyHubConnection,U1 as updateMcpSettingsFileSync,Y5 as updateMcpSettingsFile,eQ as updateMcpServerOAuthStateAsync,h8 as updateMcpServerOAuthState,XA as updateLocalProvider,n3 as uninstallPlugin,hF as uninstallMarketplaceSkill,kF as uninstallMarketplacePlugin,bF as uninstallMarketplaceMcpServerFromSettings,Nh as uninstallMarketplaceEntry,F3 as truncateNotificationBody,U8 as truncateCommandOutput,cZ as toggleDisabledTool,g5 as toTeamProgressLifecycleEvent,H1 as toProviderConfig,gM as toHubStatusUrl,qB as toHubHealthUrl,SW as toHookConfigFileName,m3 as syncPluginMcpServersToSettings,l5 as summarizeUsageFromMessages,rR as stopLocalHubServerGracefully,B1 as startLocalOAuthServer,y3 as startHubWebSocketServer,Xe as startHubServer,aA as startClineDeviceAuth,j7 as splitCoreSessionConfig,R5 as spawnDetachedHubServerWithRetry,qR as spawnDetachedHubServer,IU as setTelemetryOptOutGlobally,b8 as setMcpServerDisabled,LX as setDisabledTools,dU as setDisabledPlugin,vU as setCompactionStrategyGlobally,gU as setAutoUpdateEnabledGlobally,cs as sendHubCommand,X8 as saveProviderOAuthCredentials,Sk as saveLocalProviderSettings,kk as saveLocalProviderOAuthCredentials,s8 as sanitizeSessionToken,BX as safeParseSettings,FU as safeCreateProviderConfig,F9 as runSubprocessEvent,f9 as runHook,yj as reviveTeamStateDates,vB as restartLocalHubIfIdleAfterStartupTimeout,xd as resolveWorkspaceHubOwnerContext,LQ as resolveWorkflowsConfigSearchPaths,UQ as resolveSkillsConfigSearchPaths,_1 as resolveSharedHubOwnerContext,OP as resolveSessionBackend,DQ as resolveRulesConfigSearchPaths,kZ as resolveProviderConfig,Pf as resolveProviderApiKeyFromSettings,s1 as resolveProductionHubOwnerContext,T$ as resolvePluginSkillDirectoriesFromPaths,WQ as resolvePluginConfigSearchPaths,$1 as resolveMcpServerRegistrations,o3 as resolveMarketplaceMcpServerName,xk as resolveLocalClineAuthToken,PS as resolveHubUrl,x$ as resolveHubOwnerContext,a1 as resolveHubEndpointOptions,zB as resolveHubBuildId,wW as resolveHooksConfigSearchPaths,K1 as resolveDisabledToolNames,H6 as resolveDisabledPluginPaths,Z0 as resolveDefaultMcpSettingsPath,q5 as resolveDefaultHubPort,aM as resolveDefaultHubPathname,nM as resolveDefaultHubHost,xj as resolveCoreSelectedToolIds,m0 as resolveCoreDistinctId,a7 as resolveCompatibleLocalHubUrl,Nd as resolveClineDir,W4 as resolveClineDataDir,L6 as resolveAndLoadAgentPlugins,z$ as resolveAgentPluginPaths,l7 as requestHubShutdown,Oy as requestDesktopToolApproval,v3 as removePluginMcpServersFromSettings,k2 as rememberRecoverableLocalHubUrl,_F as registerRemoteConfigSessionBlobUpload,k8 as registerMcpServersFromSettingsFile,D10 as registerDisposable,bk as refreshProviderModelsFromSource,bJ as refreshOpenAICodexToken,vJ as refreshOcaToken,PJ as refreshClineToken,O4 as readSessionCheckpointHistory,Ky as readRemoteConfigSessionBlobUploadMetadata,A0 as readHubDiscovery,D0 as readGlobalSettings,mU as readCompactionStrategyGlobally,GF as readBearerToken,g$ as probeHubServer,vs as probeHubConnection,hY as prewarmFileIndex,PB as prewarmDetachedHubServer,fy as prepareRemoteConfigCoreIntegration,fQ as parseWorkflowConfigFromMarkdown,U10 as parseUserCommandEnvelope,FQ as parseSkillConfigFromMarkdown,VX as parseSettings,AQ as parseRuleConfigFromMarkdown,iF as parsePluginSource,k3 as parseMcpInstallArgs,A9 as parseHookEventPayload,WW as parseConfiguredAgentConfig,b$ as normalizeWorkspacePath,f10 as normalizeUserInput,A10 as normalizeSdkError,O0 as normalizeRuntimeCapabilities,X6 as normalizeProviderId,yk as normalizeOAuthProvider,I2 as normalizeHubWebSocketUrl,F10 as noopBasicLogger,cW as migrateLegacyProviderSettings,R6 as mergeRulesForSystemPrompt,_4 as mergeAgentHooks,Rh as marketplaceEntryKey,w7 as makeTeamTaskSubSessionId,L5 as makeSubSessionId,_Z as loginOpenAICodex,RZ as loginOcaOAuth,hk as loginLocalProvider,DZ as loginClineOAuth,CZ as loginAndSaveProviderOAuthCredentials,Ik as loginAndSaveLocalProviderOAuthCredentials,c00 as loadOpenTelemetryAdapter,S8 as loadMcpSettingsFile,GI as loadLlmsConfigFromFile,h5 as loadConfiguredAgentConfigs,H8 as loadAgentPluginsFromPathsWithDiagnostics,yX as loadAgentPluginsFromPaths,oZ as loadAgentPluginFromPath,qM as listSessionHistoryFromBackend,qV as listPluginToolsWithDiagnostics,X7 as listPluginTools,$7 as listMcpServerOAuthStatuses,wk as listLocalProviders,c2 as listHookConfigFiles,cU as isToolDisabledGlobally,vZ as isTelemetryOptedOutGlobally,S$ as isSessionNotFoundError,tX as isRuleEnabled,uU as isPluginDisabledGlobally,rF as isOfficialPluginSlug,J8 as isOAuthProvider,yF as isMarketplaceSkillInstalled,Xy as isLocalHubOrigin,KF as isLocalHubHostName,mR as isHubReconnectableTransportError,gB as isHubCommandTimeoutError,Pd as isDiscoveryFilePresent,e00 as isClineOrgIndividualInferenceSubscriptionMessage,t00 as isClineOrgIndividualInferenceSubscriptionError,o00 as isClineNotSubscribedMessage,s00 as isClineNotSubscribedError,DJ as isClineAccountActionRequest,BU as isBuiltInProviderId,xU as isAutoUpdateEnabledGlobally,Fk as installPlugin,wy as installMcpServer,b1 as identifyAccount,w$ as hasMcpSettingsFile,zZ as getValidOpenAICodexCredentials,EZ as getValidOcaCredentials,LZ as getValidClineCredentials,wZ as getProviderOAuthCredentialsFromSettings,lk as getProviderConfigFields,oJ as getProviderConfig,wf as getProviderAuthStorageId,H0 as getProviderAuthHandler,s4 as getPersistedProviderApiKey,y8 as getMcpServerOAuthState,t3 as getMarketplaceSkillCandidates,Pk as getLocalProviderModels,J6 as getLiveModelsCatalog,e3 as getGlobalMarketplaceSkillPaths,M$ as getFileIndex,eN as getCurrentContextSize,pQ as getCoreHeadlessToolNames,Ij as getCoreDefaultEnabledToolIds,N8 as getCoreBuiltinToolCatalog,gj as getCoreAcpToolNames,a00 as getClinePassSubscriptionUrl,i00 as getClineOrgIndividualInferenceSubscriptionMessage,n00 as getClineNotSubscribedMessage,Z10 as getClineDefaultSystemPrompt,K7 as generateWorkspaceInfoWithDiagnostics,U5 as generateWorkspaceInfo,M6 as formatRulesForSystemPrompt,Sf as formatProviderOAuthApiKey,K10 as formatDisplayUserInput,$J as findInstalledGlobalMarketplaceSkillName,J9 as findCheckpointForRun,dZ as filterExtensionToolRegistrations,k1 as filterDisabledTools,uZ as filterDisabledPluginPaths,jI as fetchClineRecommendedModels,LJ as executeClineAccountAction,FF as ensureHubWebSocketServer,Ye as ensureHubServer,nd as ensureDetachedHubServer,TG as ensureCustomProvidersLoaded,X4 as ensureCompatibleLocalHubUrl,l6 as enrichPromptWithMentions,B10 as emptyWorkspaceManifest,u2 as emptyStoredProviderSettings,JQ as discoverPluginModulePaths,gy as disablePluginMcpServersInSettings,P7 as deriveSubsessionStatus,YA as deleteLocalProvider,HI as defineLlmsConfig,TQ as createWorkflowsConfigDefinition,C2 as createUserInstructionConfigService,mY as createToolPoliciesWithPreset,V10 as createTool,mG as createTeamName,YK as createSubprocessHooks,N2 as createSpawnAgentTool,_Q as createSkillsConfigDefinition,MQ as createShellTool,D8 as createShellExecutor,G9 as createSessionHost,G9 as createRuntimeHost,zQ as createRulesConfigDefinition,Ay as createRemoteConfigSessionMessagesArtifactUploader,KU as createProviderConfig,T9 as createOpenTelemetryTelemetryService,m4 as createOAuthClientCallbacks,F5 as createMcpTools,es as createLocalHubScheduleRuntimeHandlers,TI as createLlmsSdk,_0 as createInitialAccumulatedUsage,wd as createInMemoryHubOwnerContext,L1 as createHubServerUrl,_B as createHubAuthToken,kW as createHookConfigFileHooks,s5 as createHookConfigFileExtension,a5 as createHookAuditHooks,J7 as createDisabledMcpToolPolicy,zV as createDisabledMcpToolPolicies,R2 as createDelegatedAgentConfigProvider,E2 as createDelegatedAgent,vY as createDefaultToolsWithPreset,T2 as createDefaultTools,wQ as createDefaultShellExecutor,G5 as createDefaultMcpServerClientFactory,n6 as createDefaultExecutors,v8 as createCoreSettingsService,t1 as createCoreSessionSnapshot,j10 as createContributionRegistry,EW as createContextCompactionPrepareTurn,s$ as createConfiguredTelemetryService,O9 as createConfiguredTelemetryHandle,I5 as createConfiguredAgentTools,Y10 as createClineTelemetryServiceMetadata,X10 as createClineTelemetryServiceConfig,tG as createCheckpointComparePlan,C8 as createBuiltinTools,E8 as createAgentTeamsTools,E$0 as createAgentRuntime,p5 as createAgentHooksExtension,GK as connectToHub,sA as completeClineDeviceAuth,J3 as compareCheckpointToWorkspace,oF as collectPluginMcpOAuthCandidates,YU as clearPrivateModelsCatalogCache,XU as clearLiveModelsCatalogCache,a0 as clearHubDiscovery,hA as captureWorkspacePathResolved,o9 as captureWorkspaceInitialized,t9 as captureWorkspaceInitError,Q8 as captureToolUsage,ZZ as captureTokenUsage,$Z as captureTaskRestarted,e9 as captureTaskCreated,c4 as captureTaskCompleted,d4 as captureSubagentExecution,WZ as captureSkillUsed,J10 as captureSdkError,kA as captureProviderConfigured,u4 as captureProviderApiError,QZ as captureModeSwitch,XZ as captureMentionUsed,jZ as captureMentionSearchResults,YZ as captureMentionFailed,BZ as captureHookDiscovery,yA as captureExtensionActivated,JZ as captureDiffEditFailure,Z8 as captureConversationTurnEvent,GZ as captureCompactionSkipped,HZ as captureCompactionExecuted,P1 as captureAuthSucceeded,w1 as captureAuthStarted,A$ as captureAuthLoggedOut,S1 as captureAuthFailed,CA as captureAgentUnexpectedReasoningTokens,VZ as captureAgentTeamCreated,f$ as captureAgentCreated,F7 as buildWorkspaceMetadata,x5 as buildTeamProgressSummary,Q10 as buildSdkErrorProperties,DF as buildRemoteConfigSessionBlobUploadMetadata,OF as buildMcpInstallTransport,M8 as buildDelegatedAgentConfig,XW as buildConfiguredAgentToolName,YW as buildConfiguredAgentToolDescriptors,eG as buildCheckpointWorkspaceDiff,Q5 as bootstrapAgentTeams,VV as authorizeMcpServerOAuth,Ck as addLocalProvider,f0 as accumulateUsageTotals,BQ as WORKFLOWS_CONFIG_DIRECTORY_NAME,j8 as UnifiedConfigFileWatcher,e0 as ToolPresets,P4 as TelemetryService,z9 as TelemetryLoggerSink,Z5 as TEAM_TOOL_NAMES,K6 as SubprocessSandbox,f8 as StructuredCommandInputSchema,o5 as StoredProviderSettingsSchema,ZG as StoredProviderSettingsEntrySchema,q4 as SqliteTeamStore,Z$ as SqliteSessionStore,r2 as SessionVersioningService,s0 as SessionVersioningError,T0 as SessionSource,P$ as SessionNotFoundError,XX as SapSettingsSchema,VQ as SKILLS_CONFIG_DIRECTORY_NAME,gZ as SESSION_STATUSES,c8 as SESSION_NOT_FOUND_ERROR_CODE,L10 as SDK_ERROR_TELEMETRY_EVENT,s9 as RpcClineAccountService,w5 as RemoteRuntimeHost,ZX as ReasoningSettingsSchema,pX as RULES_CONFIG_DIRECTORY_NAME,LF as REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY,B2 as ProviderSettingsSchema,Y$ as ProviderSettingsManager,tJ as ProviderProtocolSchema,xZ as ProviderIdSchema,eJ as ProviderClientSchema,S4 as OpenTelemetryProvider,YX as OcaSettingsSchema,hZ as OPENAI_COMPATIBLE_PROVIDERS,z1 as NodeHubClient,C4 as NoOpFeatureFlagsProvider,C3 as NativeHubTransportAdapter,jX as ModelCatalogSettingsSchema,J5 as McpSettingsUpdateSkippedError,w2 as McpSettingsMutatorPurityError,P2 as McpSettingsLockTimeoutError,q$ as MAX_COMMAND_OUTPUT_CHARS,j$ as LocalRuntimeHost,d00 as Llms,t5 as InMemoryWorkspaceManager,I8 as InMemoryMcpManager,kS as HubUIClient,g0 as HubTransportError,hS as HubSessionClient,P9 as HubServerTransport,_9 as HubScheduleService,U9 as HubScheduleCommandService,u$ as HubRuntimeHost,E5 as HubCommandError,JK as HookEventPayloadSchema,WK as HookEventNameSchema,r5 as HookConfigFileName,PW as HOOK_CONFIG_FILE_EVENT_MAP,rH as HOOKS_CONFIG_DIRECTORY_NAME,B6 as GlobalSettingsSchema,WX as GcpSettingsSchema,VA as FileTeamPersistenceStore,N4 as FeatureFlagsService,G10 as FeatureFlagDefaultValue,H10 as FEATURE_FLAGS,AA as FALLBACK_CLINE_RECOMMENDED_MODELS,L0 as DefaultToolNames,V9 as DefaultRuntimeBuilder,KJ as DefaultLlmsSdk,nJ as DEFAULT_MODELS_CATALOG_URL,rM as DEFAULT_HUB_PORT,iM as DEFAULT_HUB_PATHNAME,pM as DEFAULT_HUB_HOST,h2 as CoreSettingsService,Q$ as CoreSessionService,W10 as ContributionRegistry,r00 as ClineOrgIndividualInferenceSubscriptionError,p00 as ClineNotSubscribedError,Y3 as ClineCore,a9 as ClineAccountService,ek as ChatViewStateSchema,FA as ChatSummarySchema,HA as ChatSessionStatusSchema,BA as ChatSessionConfigSchema,KA as ChatMessageSchema,GA as ChatMessageRoleSchema,I as CORE_TELEMETRY_EVENTS,$I as CORE_BUILD_VERSION,N3 as BrowserWebSocketHubAdapter,VU as BUILT_IN_PROVIDER_IDS,IZ as BUILT_IN_PROVIDER,JX as AzureSettingsSchema,QX as AwsSettingsSchema,$X as AuthSettingsSchema,H4 as AgentTeamsRuntime,VW as AgentTeam,R$0 as Agent,U2 as ALL_DEFAULT_TOOL_NAMES};
751
+ ${V}`:""}`);let B=Fk($);if(JA($))throw Error(`Skill uninstall completed, but ${$.name??$.id} is still present in Cline's global skills directories.`);return{id:$.id,type:"skill",status:"uninstalled",message:`Uninstalled ${$.name??$.id}.`,output:[V,...B.map((H)=>`Removed: ${H}`)].filter(Boolean).join(`
752
+ `)||void 0}}async function XA($,Z={}){let[Q]=YW($),J=Q?.trim()||$.id;if(!J)throw Error("Plugin marketplace uninstalls require a plugin name.");let W=await WW({name:J,workspaceRoot:Z.workspaceRoot});return{id:$.id,type:"plugin",status:"uninstalled",message:`Uninstalled ${$.name??W.name??$.id}.`,output:[`Path: ${W.installPath}`,...W.removedPaths.map((X)=>`Removed: ${X}`)].join(`
753
+ `)}}async function Ak($,Z={}){if($.type==="mcp"){let Q=jW($);if(Z.deleteMcpServer)await Z.deleteMcpServer(Q);else QA($,Z);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Q??$.id}.`}}if($.type==="skill")return WA($,Z);if($.type==="plugin")return XA($,Z);throw Error(`Unsupported marketplace entry type: ${$.type}`)}import{spawn as fk}from"node:child_process";import{createHash as Uk}from"node:crypto";import{existsSync as B1,mkdirSync as FW,readdirSync as Dk,readFileSync as Lk,renameSync as u9,rmSync as p9,statSync as AW}from"node:fs";import{cp as KW,mkdir as FA,writeFile as r9}from"node:fs/promises";import{homedir as YA}from"node:os";import{basename as P1,dirname as jA,extname as _k,join as i,relative as AA,resolve as U$,sep as Tk}from"node:path";import{isPluginModulePath as l9,resolveClineDir as Ok,resolvePluginModuleEntries as qk}from"@cline/shared/storage";var X8="_installed",i9="package",zk="https://github.com/cline/plugins.git",VA=30000,d9=10485760,BA="@cline/",Mk=["dependencies","devDependencies","optionalDependencies","peerDependencies"],Rk={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function n9($){if($==="~")return YA();if($.startsWith("~/"))return i(YA(),$.slice(2));return $}function fA($){return $.split(Tk).join("/")}function Y2($){return Uk("sha256").update($).digest("hex").slice(0,12)}function Nk($){let Z=0;while(Z<$.length&&$[Z]==="-")Z++;let Q=$.length;while(Q>Z&&$[Q-1]==="-")Q--;return $.slice(Z,Q)}function C1($){let Z="",Q=!1,J=$.startsWith("@")?$.slice(1):$;for(let X of J.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 Nk(Z)||"plugin"}function UA($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function Ek($){return $?.trim()||zk}function HA($){let Q=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Q?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Q[1]}}function wk($){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 Ck($){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 J=$.slice(0,Q),W=$.slice(Q+1),X=W.indexOf("@");if(X<0)return{repo:$};return{repo:`${J}/${W.slice(0,X)}`,ref:W.slice(X+1)||void 0}}function Pk($){try{return decodeURIComponent($)}catch{return $}}function Sk($){return P1(Pk($))||"plugin"}function bk($){let Z=$.split("/").filter(Boolean);return Z.length>=5&&(Z[2]==="blob"||Z[2]==="raw")}function GA($){if(!/^https?:\/\//i.test($))return null;let Z;try{Z=new URL($)}catch{return null}let Q=Z.hostname.toLowerCase(),J=Sk(Z.pathname),W=l9(J),X=(Q==="github.com"||Q==="www.github.com")&&bk(Z.pathname);if(Z.protocol!=="https:"){if(X||Q==="raw.githubusercontent.com"||W)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(!W)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:J}}if(Q==="raw.githubusercontent.com"){if(!W)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:Z.toString(),filename:J}}if(!W)return null;return{type:"remote",url:Z.toString(),filename:J}}function KA($,Z={}){let Q=$.trim(),J=Q.startsWith("git:")&&!Q.startsWith("git://"),W=J?Q.slice(4).trim():Q;if(!Z.force&&!J&&!/^(https?|ssh|git):\/\//i.test(W))return null;let{repo:X,ref:Y}=Ck(W),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 B=V.replace(/\.git$/,"").replace(/^\/+/,"");if(!j||!B||B.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:B}}function DA($,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}=HA(Y);return{type:"npm",spec:Y,name:j}}if(Z==="git"){let Y=KA(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=GA(Q);if(!Y)throw Error(`Invalid remote plugin source: ${$}`);return Y}if(Q.startsWith("npm:")){let Y=Q.slice(4).trim(),{name:j}=HA(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 W=GA(Q);if(W)return W;let X=KA(Q);if(X)return X;if(UA(Q))return{type:"official",slug:Q};if(wk(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 yk($){return $?i($,".cline","plugins"):i(Ok(),"plugins")}function hk($,Z,Q){if(Z.type==="npm")return i($,X8,"npm",`${C1(Z.name)}-${Y2(Q)}`);if(Z.type==="git")return i($,X8,"git",C1(Z.host),`${C1(Z.path)}-${Y2(Q)}`);if(Z.type==="remote")return i($,X8,"remote",`${C1(Z.filename)}-${Y2(Q)}`);if(Z.type==="official")return i($,X8,"official",`${C1(Z.slug)}-${Y2(Q)}`);return i($,X8,"local",`${C1(P1(n9(Z.path)))}-${Y2(Q)}`)}function kk($,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:${U$(Z,n9($.path))}`}function Ik($,Z){if($.type==="npm")return $.name;if($.type==="git")return C1(P1($.path));if($.type==="remote")return C1(P1($.filename,_k($.filename)));if($.type==="official")return $.slug;return C1(P1(U$(Z,n9($.path))))}async function Y8($,Z,Q={}){await new Promise((J,W)=>{let X=fk($,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",W),X.on("close",(j)=>{if(j===0){J();return}let V=Y.trim();W(Error(`${$} ${Z.join(" ")} failed with exit code ${j}${V?`: ${V}`:""}`))})})}function LA($){let Z=i($,"package.json");if(!B1(Z))return null;try{return JSON.parse(Lk(Z,"utf8"))}catch{return null}}function xk($){let Z=$?.cline?.plugins;if(!Array.isArray(Z))return[];return Z.flatMap((Q)=>{if(typeof Q==="string")return[Q];return Q.paths??[]})}async function gk($){let Z=i($,"package.json"),Q=LA($);if(!Q)return;let J=!1;for(let W of Mk){let X=Q[W];if(!X||typeof X!=="object")continue;for(let Y of Object.keys(X)){if(!Y.startsWith(BA))continue;delete X[Y],delete Q.peerDependenciesMeta?.[Y],J=!0}if(Object.keys(X).length===0)delete Q[W]}if(Q.peerDependenciesMeta){for(let W of Object.keys(Q.peerDependenciesMeta)){if(!W.startsWith(BA))continue;delete Q.peerDependenciesMeta[W],J=!0}if(Object.keys(Q.peerDependenciesMeta).length===0)delete Q.peerDependenciesMeta}if(!J)return;await r9(Z,`${JSON.stringify(Q,null,2)}
754
+ `,"utf8")}function mk($,Z){let Q=i($,"node_modules","@cline");if(!B1(Q))return;for(let J of TA(Q)){if(`@cline/${J.name}`===Z)continue;p9(i(Q,J.name),{recursive:!0,force:!0})}}function _A($){let Z=xk(LA($)).map((X)=>U$($,X)).filter((X)=>B1(X)&&AW(X).isFile()&&l9(X));if(Z.length>0)return Z;let Q=qk($);if(Q?.length)return Q;let J=[],W=[$];while(W.length>0){let X=W.pop();if(!X)continue;for(let Y of TA(X)){let j=i(X,Y.name);if(Y.name==="node_modules"||Y.name===".git")continue;if(Y.isDirectory()){W.push(j);continue}if(Y.isFile()&&!Y.name.startsWith(".")&&l9(j))J.push(j)}}return J.sort((X,Y)=>X.localeCompare(Y))}function TA($){try{return Dk($,{withFileTypes:!0})}catch{return[]}}function vk($,Z){let Q=_A(Z);if(Q.length===0)throw Error(`No plugin entry files found in ${Z}`);return Q.map((J)=>`./${fA(AA($,J))}`)}async function ck($,Z,Q){let J=vk($,Z);return await r9(i($,"package.json"),JSON.stringify({...Rk,name:Q,cline:{plugins:[{paths:J}]}},null,2),"utf8"),J}async function uk($,Z,Q){let J=i(Z,i9);return await FA(J,{recursive:!0}),await r9(i(J,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await Y8(Q,["install",$.spec,"--prefix",J,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),mk(J,$.name),i(J,"node_modules",$.name)}async function fW($,Z){if(!B1(i($,"package.json")))return;await gk($),await Y8(Z,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function dk($,Z,Q){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let J=i(Z,i9),W=["clone","--filter=blob:none"];if($.ref)W.push("--branch",$.ref);W.push("--",$.repo,J);try{await Y8("git",W)}catch(X){if(!$.ref)throw X;await Y8("git",["clone","--filter=blob:none","--",$.repo,J]),await Y8("git",["checkout","--detach",$.ref],{cwd:J})}return await fW(J,Q),J}async function lk($,Z,Q,J){let W=i(Z,"repo");await Y8("git",["clone","--filter=blob:none","--depth","1","--",J,W]);let X=i(W,"plugins",$.slug);if(!B1(X)||!AW(X).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${J}`);let Y=i(Z,i9);return await KW(X,Y,{recursive:!0,filter:(j)=>{let V=P1(j);return V!==".git"&&V!=="node_modules"}}),p9(W,{recursive:!0,force:!0}),await fW(Y,Q),Y}function GW($){return Error(`Remote plugin file from ${$} exceeds the ${d9} byte limit`)}function pk($){let Z=$.headers.get("content-length");if(!Z)return;let Q=Number(Z);if(!Number.isFinite(Q)||Q<0)return;return Q}async function rk($,Z){let Q=pk($);if(Q!==void 0&&Q>d9)throw GW(Z);if(!$.body){let Y=Buffer.from(await $.text(),"utf8");if(Y.byteLength>d9)throw GW(Z);return Y}let J=$.body.getReader(),W=[],X=0;try{while(!0){let{done:Y,value:j}=await J.read();if(Y)break;let V=Buffer.from(j);if(X+=V.byteLength,X>d9)throw await J.cancel().catch(()=>{return}),GW(Z);W.push(V)}return Buffer.concat(W,X)}finally{J.releaseLock()}}async function ik($,Z){let Q=new AbortController,J=setTimeout(()=>{Q.abort()},VA);try{let W=await fetch($.url,{signal:Q.signal});if(!W.ok){let Y=W.statusText?` ${W.statusText}`:"";throw Error(`Failed to download plugin file from ${$.url}: ${W.status}${Y}`)}let X=await rk(W,$.url);return FW(Z,{recursive:!0}),await r9(i(Z,$.filename),X),Z}catch(W){if(W instanceof Error&&W.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${VA}ms`);throw W}finally{clearTimeout(J)}}async function nk($,Z,Q,J){let W=U$(Q,n9($.path));if(!B1(W))throw Error(`Plugin source path does not exist: ${W}`);let X=AW(W);if(X.isFile()){if(!l9(W))throw Error(`Plugin file must be .js or .ts: ${W}`);FW(Z,{recursive:!0});let j=i(Z,P1(W));return await KW(W,j),Z}if(!X.isDirectory())throw Error(`Plugin source must be a file or directory: ${W}`);let Y=i(Z,i9);return await KW(W,Y,{recursive:!0,filter:(j)=>{let V=P1(j);return V!==".git"&&V!=="node_modules"}}),await fW(Y,J),Y}function ak($,Z){if(B1($)&&!Z)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function ok($,Z,Q){if(FW(jA(Z),{recursive:!0}),!B1(Z)){u9($,Z);return}if(!Q)throw Error(`Plugin is already installed at ${Z}. Use --force to replace it.`);let J=i(jA(Z),`.replace-${P1(Z)}-${Date.now()}-${process.pid}-${Y2(`${Z}:${Math.random()}`)}`);u9(Z,J);try{u9($,Z)}catch(W){if(!B1(Z)&&B1(J))u9(J,Z);throw W}try{p9(J,{recursive:!0,force:!0})}catch{}}function sk($){let Z=$.transport;if(Z.type==="stdio")return!1;return Z.headers!==void 0&&Object.keys(Z.headers).length>0}function tk($){let Z=$.oauth?.tokens?.access_token;return typeof Z==="string"&&Z.trim().length>0}function ek($){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 OA($){let Z=new Set($.pluginPaths.map((W)=>U$(W)));if(Z.size===0)return[];let Q;try{Q=W1({filePath:$.settingsPath??Z0()})}catch{return[]}let J=[];for(let W of Q){let X=ek(W);if(!X||!Z.has(U$(X.pluginPath)))continue;let Y=W.transport.type;if(Y==="stdio")continue;if(sk(W)||tk(W))continue;J.push({name:W.name,pluginName:X.pluginName,pluginPath:X.pluginPath,transportType:Y,lastError:W.oauth?.lastError})}return J.sort((W,X)=>W.name.localeCompare(X.name))}async function $I($){let Z=$.source.trim(),Q=DA(Z,$.sourceType),J=$.cwd?.trim(),W=J?U$(J):process.cwd(),X=yk(J?W:void 0),Y=Ek($.officialPluginsRepo),j=kk(Q,W,Y),V=hk(X,Q,j),B=Ik(Q,W),H=i(X,X8,".tmp"),G=i(H,`${Date.now()}-${process.pid}-${Y2(`${Z}:${Math.random()}`)}`),K=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),F=$.force===!0;ak(V,F),await FA(H,{recursive:!0});let A;try{if(Q.type==="npm")A=await uk(Q,G,K);else if(Q.type==="git")A=await dk(Q,G,K);else if(Q.type==="official")A=await lk(Q,G,K,Y);else if(Q.type==="remote")A=await ik(Q,G);else A=await nk(Q,G,W,K);let D=(Q.type==="local"||Q.type==="remote")&&A===G?_A(G).map((f)=>`./${fA(AA(G,f))}`):await ck(G,A,B);if(D.length===0)throw Error(`No plugin entry files found for ${Z}`);ok(G,V,F);let U={source:Z,installPath:V,entryPaths:D.map((f)=>U$(V,f)),mcpSyncFailures:[],mcpOAuthCandidates:[]},L=await aJ({pluginPaths:U.entryPaths,cwd:W,workspacePath:W});return U.mcpSyncFailures=L.failures,U.mcpOAuthCandidates=OA({pluginPaths:U.entryPaths}),U}catch(D){throw p9(G,{recursive:!0,force:!0}),D}}import*as S0 from"@cline/llms";var zA="cline-pass";function ZI($){return $.apiKey??$.auth?.apiKey}function QI($){return($.auth?.accessToken?.trim()??"").length>0}function MA($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function JI($){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 WI($){let Z=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let J of $)Q=Q*31+J.charCodeAt(0)>>>0;return Z[Q%Z.length]}function RA($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>yG(Z,Q))}async function XI($,Z){let Q=await S0.getModelsForProvider($),J=$===zA;if(!Z&&!J)return Q;let W=await cZ($,{loadLatestOnInit:J,loadPrivateOnAuth:!0,failOnError:!1},Z);if($==="litellm"&&W?.knownModels)return W.knownModels;if(J&&W?.knownModels)return W.knownModels;return W?.knownModels?{...Q,...W.knownModels}:Q}function UW($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function YI($){if(!$?.length)return;return[...new Set($)]}function jI($,Z){return YI([...$??[],...Z??[]])}function VI($){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 HI($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(BI)}var a9={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},qA={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function GI($){if(!$)return[a9];if($.source!=="system")return $.baseUrl?[a9,qA]:[a9];let Z=[];if($.env?.length)Z.push(a9);if($.baseUrl)Z.push(qA);return Z}function KI($,Z){return Z.split(".").reduce((Q,J)=>{if(!Q||typeof Q!=="object")return;return Q[J]},$)}function FI($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function AI($,Z,Q){if(!$?.length)return;let J={};for(let W of $){let Y=FI(W.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:KI(Z,W.path))??W.defaultValue;if(Y!==void 0)J[W.path]=Y}return J}function NA($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function DW($,Z){let Q=Z?.includes("vision")??!1,J=Z?.includes("reasoning")??!1;return Object.fromEntries($.map((W)=>[W,{id:W,name:W,supportsVision:Q,supportsAttachments:Q,supportsReasoning:J}]))}async function EA($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await W6($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function wA($,Z){let Q=$.read(),J=!1;if(Q.providers[Z])delete Q.providers[Z],J=!0;if(Q.lastUsedProvider===Z)delete Q.lastUsedProvider,J=!0;if(J)$.write(Q);S0.unregisterProvider(Z)}async function fI($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let J=Z.baseUrl.trim(),W=Z.apiKey?.trim()??"";if(!J&&!W){let A=e$($);if((await a2(A)).providers[Q]){let U=await PA($,{providerId:Q});return{providerId:Q,settingsPath:U.settingsPath,modelsPath:U.modelsPath,modelsCount:0}}return wA($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:0}}if(S0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let X=Z.name.trim();if(!X)throw Error("name is required");if(!J)throw Error("baseUrl is required");let Y=UW(Z.models),j=Z.modelsSourceUrl?.trim(),V=await EA({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 B=Z.defaultModelId?.trim()&&V.includes(Z.defaultModelId.trim())?Z.defaultModelId.trim():V[0],H=Z.capabilities?.length?[...new Set(Z.capabilities)]:void 0,G=NA(Z.headers);$.saveProviderSettings({provider:Q,apiKey:W||void 0,baseUrl:J,headers:G,timeout:Z.timeoutMs,model:B,protocol:Z.protocol,client:Z.client},{setLastUsed:!1});let K=e$($),F=await a2(K);return F.providers[Q]={provider:{name:X,baseUrl:J,defaultModelId:B,protocol:Z.protocol,client:Z.client,capabilities:H,modelsSourceUrl:j},models:DW(V,H)},await V9(K,F),C4(Q,F.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:V.length}}async function CA($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let J=e$($),W=await a2(J),X=W.providers[Q];if(!X){let O=$.getProviderSettings(Q);if(!O)throw Error(`provider "${Q}" does not exist`);let T=Z.modelsSourceUrl?.trim(),_=UW(Z.models)[0]??O.model?.trim();if(!_&&!T)throw Error(`provider "${Q}" cannot be updated because no model is configured`);X={provider:{name:Z.name?.trim()||MA(Q),baseUrl:Z.baseUrl?.trim()??O.baseUrl?.trim()??"",defaultModelId:_,protocol:O.protocol,client:O.client,capabilities:O.capabilities},models:_?DW([_],O.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)],B=Z.protocol===void 0?X.provider.protocol:Z.protocol??void 0,H=Z.client===void 0?X.provider.client:Z.client??void 0,G=UW(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((O)=>O.trim()).filter(Boolean),D=await EA({providerId:Q,explicitModels:G,modelsSourceUrl:K,fallbackModelIds:A,shouldRecompute:F});if(D.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let U=Z.defaultModelId===void 0?X.provider.defaultModelId?.trim():Z.defaultModelId?.trim(),L=U&&D.includes(U)?U:D[0],z={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:j,model:L};if(B)z.protocol=B;else delete z.protocol;if(H)z.client=H;else delete z.client;if(Z.apiKey!==void 0){let O=Z.apiKey?.trim()??"";if(O)z.apiKey=O;else delete z.apiKey}if(Z.headers!==void 0){let O=NA(Z.headers);if(O)z.headers=O;else delete z.headers}if(Z.timeoutMs!==void 0)if(typeof Z.timeoutMs==="number")z.timeout=Z.timeoutMs;else delete z.timeout;return $.saveProviderSettings(z,{setLastUsed:!1}),W.providers[Q]={provider:{name:Y,baseUrl:j,defaultModelId:L,protocol:B,client:H,capabilities:V,modelsSourceUrl:K},models:DW(D,V)},await V9(J,W),C4(Q,W.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:J,modelsCount:D.length}}async function PA($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let J=e$($),W=await a2(J);if(!W.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete W.providers[Q],await V9(J,W),S0.unregisterProvider(Q),wA($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:J}}function UI($,Z,Q={}){let J=Z.trim();if(!J)throw Error("providerId is required");let W=$.read().providers[J]?.settings;return $.saveProviderSettings({...W??{},provider:J},{setLastUsed:!1,tokenSource:Q.tokenSource}),{providerId:J,enabled:!0,settingsPath:$.getFilePath()}}async function DI($,Z={}){let Q=$.read(),J=S0.getProviderIds(),W=await Promise.all(J.map(async(Y)=>{let[j,V]=await Promise.all([S0.getProvider(Y),S0.getModelsForProvider(Y)]),B=RA(V),H=Q.providers[Y]?.settings,G=$.getProviderSettings(Y),K=j?.name??MA(Y),F=jI(j?.capabilities,G?.capabilities),A=HI(j?.metadata)??GI(j);return{provider:{id:Y,name:K,models:B.length,color:WI(Y),letter:JI(K),enabled:Boolean(H),apiKey:G?ZI(G):void 0,oauthAccessTokenPresent:G?QI(G):void 0,baseUrl:G?.baseUrl??j?.baseUrl,defaultModelId:j?.defaultModelId,protocol:G?.protocol??j?.protocol,client:G?.client??j?.client,capabilities:F,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:A,configValues:AI(A,G,j),modelList:B},rank:VI(j?.metadata)}}));W.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=W.map((Y)=>Y.provider);if(Z.isClinePassEnabled!==!0)X=X.filter((Y)=>Y.id!==zA);return{providers:X,settingsPath:$.getFilePath()}}async function LI($,Z){let Q=$.trim(),J=await XI(Q,Z),W=RA(J);return{providerId:Q,models:W}}function o9($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function SA($,Z){if(!o9(Z))return o9($)?{...$}:void 0;let Q=o9($)?{...$}:{};for(let[J,W]of Object.entries(Z)){if(W==null||W===""){delete Q[J];continue}if(o9(W)){let X=SA(Q[J],W);if(X&&Object.keys(X).length>0)Q[J]=X;else delete Q[J];continue}Q[J]=W}return Object.keys(Q).length>0?Q:void 0}function _I($,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 W={...$.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 W[X];else W[X]=Z[X];for(let X of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(Z,X))W[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=SA(W[X],Z[X]);if(Y)W[X]=Y;else delete W[X]}return $.saveProviderSettings(W,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function TI($,Z){let Q=Z.trim(),J=$.getProviderSettings(Q),X=S0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,Y=J?.baseUrl?.trim()||X?.baseUrl?.trim(),j=X6(Y,X?.baseUrl,X?.modelsSourceUrl);if(!J||!X||!Y||!j)return{providerId:Q,refreshed:!1};let V=await CA($,{providerId:Q,name:X.name,baseUrl:Y,apiKey:J.apiKey,headers:J.headers??null,timeoutMs:J.timeout??null,modelsSourceUrl:j,protocol:J.protocol??X.protocol??null,client:J.client??X.client??null,capabilities:J.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:V.modelsCount}}function OI($){let Z=$.trim().toLowerCase(),Q=K0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function qI($,Z,Q,J){let W=K0($);if(!W)throw Error(`provider "${$}" does not support OAuth login`);let X=r4({onPrompt:async(Y)=>Y.defaultValue??"",openUrl:Q,onOpenUrlError:({error:Y})=>{throw Y instanceof Error?Y:Error(String(Y))}});return W.login({settings:Z,callbacks:X,telemetry:J})}function zI($,Z,Q,J,W){return G8({manager:$,providerId:Z,settings:Q,credentials:J,setLastUsed:W?.setLastUsed})}async function MI($,Z,Q,J){let W=r4({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return hZ($,Z,{callbacks:W,telemetry:J})}function RI($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}import*as s9 from"@cline/llms";var NI=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],EI={"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 wI($,Z){let Q={};for(let J of NI){let W=$[J],X=Z[J];if(W||X)Q[J]={...W,...X}}return Q}function CI($){let Z=EI[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:wI($.fields,Z.fields)}}var PI=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function SI($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return PI.has($)}function bI($){let Z=s9.normalizeProviderId($);if(H8(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=s9.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:Z,authMethod:"local",fields:{}};let J=Q?.provider.baseUrl,W={apiKey:{}};if(SI(Z,Q))W.baseUrl={defaultValue:J};return CI({providerId:Z,authMethod:"api-key",fields:W})}x9();A0();P9();import{appendFileSync as yI,existsSync as LW,mkdirSync as hI,readFileSync as kI,renameSync as II,unlinkSync as xI,writeFileSync as gI}from"node:fs";import{join as _W}from"node:path";import{resolveTeamDataDir as mI}from"@cline/shared/storage";function vI($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class bA{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=vI($.teamName),Q=$.baseDir?.trim()||mI();this.dirPath=_W(Q,Z),this.statePath=_W(this.dirPath,"state.json"),this.taskHistoryPath=_W(this.dirPath,"task-history.jsonl")}loadState(){if(!LW(this.statePath))return;try{let $=kI(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 xH(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`;gI(Q,`${JSON.stringify(Z,null,2)}
755
+ `,"utf8"),II(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(),yI(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:Z})}
756
+ `,"utf8")}ensureDir(){if(!LW(this.dirPath))hI(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(LW(this.statePath))xI(this.statePath)}}import{z as S}from"zod";var yA=S.object({workspaceRoot:S.string().min(1),cwd:S.string().optional(),provider:S.string().min(1),model:S.string().min(1),mode:S.enum(["act","plan"]).default("act"),apiKey:S.string(),systemPrompt:S.string().optional(),rules:S.string().optional(),maxIterations:S.number().int().positive().optional(),enableTools:S.boolean(),enableSpawn:S.boolean().optional(),enableTeams:S.boolean().optional(),autoApproveTools:S.boolean().optional(),missionStepInterval:S.number().int().positive().optional(),missionTimeIntervalMs:S.number().int().positive().optional()}),hA=S.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),kA=S.enum(["user","assistant","tool","system","status","error"]),IA=S.object({id:S.string().min(1),sessionId:S.string().nullable(),role:kA,content:S.string(),createdAt:S.number().int().nonnegative(),meta:S.object({stream:S.enum(["stdout","stderr"]).optional(),toolName:S.string().optional(),iteration:S.number().int().nonnegative().optional(),agentId:S.string().optional(),conversationId:S.string().optional(),hookEventName:S.string().optional(),inputTokens:S.number().int().nonnegative().optional(),outputTokens:S.number().int().nonnegative().optional(),checkpoint:S.object({ref:S.string(),createdAt:S.number().int().nonnegative(),runCount:S.number().int().positive(),kind:S.enum(["stash","commit"]).optional()}).optional()}).optional()}),xA=S.object({toolCalls:S.number().int().nonnegative(),tokensIn:S.number().int().nonnegative(),tokensOut:S.number().int().nonnegative()}),cI=S.object({sessionId:S.string().nullable(),status:hA,config:yA,messages:S.array(IA),rawTranscript:S.string(),error:S.string().nullable(),summary:xA});var uI=RB;import{Agent as b20,createAgentRuntime as y20}from"@cline/agents";import{getClineEnvironmentConfig as dI}from"@cline/shared";var lI=5000,gA={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 pI($){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 TW($){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 rI($){if(!$||typeof $!=="object")return null;let Z=$,Q=Array.isArray(Z.recommended)?Z.recommended:[],J=Array.isArray(Z.free)?Z.free:[],W=Array.isArray(Z.clinePass)?Z.clinePass:[],X=Q.map(TW).filter((V)=>V!==null),Y=J.map(TW).filter((V)=>V!==null),j=W.map(TW).filter((V)=>V!==null);if(X.length===0&&Y.length===0&&j.length===0)return null;return{recommended:X,free:Y,clinePass:j}}function iI($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=dI().apiBaseUrl;try{return($.providerSettingsManager??new H$).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function nI($,Z,Q){let J=new AbortController,W=setTimeout(()=>J.abort(),Q);try{return await $(Z,{signal:J.signal})}finally{clearTimeout(W)}}async function aI($={}){try{let Z=iI($),Q=$.fetchImpl??fetch,J=await nI(Q,`${Z}/api/v1/ai/cline/recommended-models`,$.timeoutMs??lI);if(!J.ok)throw Error(`HTTP ${J.status}`);let W=await J.json(),X=rI(W);if(X)return X}catch{}return pI(gA)}import{readFile as oI}from"node:fs/promises";import sI from"node:path";function tI($){return $}async function eI($){let Z=sI.resolve($),Q=await oI(Z,"utf8"),J;try{J=JSON.parse(Q)}catch(W){let X=W instanceof Error?W.message:String(W);throw Error(`Failed to parse JSON config at "${Z}": ${X}`)}return $x(J,Z)}function $x($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let J=$.providers;if(!Array.isArray(J))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!J.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}import{BUILT_IN_PROVIDER_IDS as cA,createHandler as Jx,createHandlerAsync as Wx,getProviderCollection as Xx,hasProvider as uA,registerAsyncHandler as Yx,registerHandler as jx,registerModel as Vx,registerProvider as dA}from"@cline/llms";function mA($){return $?{...$}:{}}function Zx($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function Qx($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function vA($){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 OW{providers=new Map;register($){Qx($.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??{},...mA($.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,...mA($.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 qW{configuredProviders=new OW;constructor($){this.applyConfig($)}createHandler($){return Jx(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return Wx(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(dA($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)jx($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)Yx($.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.`);dA({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($){Vx($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...cA]}async getBuiltInProviders(){return(await Promise.all(cA.map((Z)=>Xx(Z)))).filter((Z)=>Z!==void 0).map((Z)=>vA({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=uA(Z.id),J=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,W=typeof J==="string"&&uA(J);if(!Q&&!W)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function Bx($){return new qW($)}DJ();async function n10(){return Promise.resolve().then(() => (x9(),vF))}export{yB as writeHubDiscovery,F1 as writeGlobalSettings,hB as withHubStartupLock,Z$ as verifyHubConnection,L1 as updateMcpSettingsFileSync,F5 as updateMcpSettingsFile,X7 as updateMcpServerOAuthStateAsync,v8 as updateMcpServerOAuthState,CA as updateLocalProvider,WW as uninstallPlugin,WA as uninstallMarketplaceSkill,XA as uninstallMarketplacePlugin,QA as uninstallMarketplaceMcpServerFromSettings,Ak as uninstallMarketplaceEntry,qJ as truncateNotificationBody,q8 as truncateCommandOutput,iZ as toggleDisabledTool,p5 as toTeamProgressLifecycleEvent,K1 as toProviderConfig,HR as toHubStatusUrl,kB as toHubHealthUrl,v3 as toHookConfigFileName,aJ as syncPluginMcpServersToSettings,s5 as summarizeUsageFromMessages,LN as stopLocalHubServerGracefully,G1 as startLocalOAuthServer,dJ as startHubWebSocketServer,K00 as startHubServer,_f as startClineDeviceAuth,F7 as splitCoreSessionConfig,b5 as spawnDetachedHubServerWithRetry,aR as spawnDetachedHubServer,YD as setTelemetryOptOutGlobally,g8 as setMcpServerDisabled,wX as setDisabledTools,FD as setDisabledPlugin,HD as setCompactionStrategyGlobally,VD as setAutoUpdateEnabledGlobally,is as sendHubCommand,G8 as saveProviderOAuthCredentials,_I as saveLocalProviderSettings,zI as saveLocalProviderOAuthCredentials,Q4 as sanitizeSessionToken,_X as safeParseSettings,xU as safeCreateProviderConfig,T9 as runSubprocessEvent,q9 as runHook,pj as reviveTeamStateDates,tB as restartLocalHubIfIdleAfterStartupTimeout,El as resolveWorkspaceHubOwnerContext,MQ as resolveWorkflowsConfigSearchPaths,qQ as resolveSkillsConfigSearchPaths,O1 as resolveSharedHubOwnerContext,YS as resolveSessionBackend,zQ as resolveRulesConfigSearchPaths,cZ as resolveProviderConfig,ZU as resolveProviderApiKeyFromSettings,$$ as resolveProductionHubOwnerContext,E$ as resolvePluginSkillDirectoriesFromPaths,BQ as resolvePluginConfigSearchPaths,W1 as resolveMcpServerRegistrations,jW as resolveMarketplaceMcpServerName,RI as resolveLocalClineAuthToken,Ab as resolveHubUrl,d$ as resolveHubOwnerContext,e1 as resolveHubEndpointOptions,bB as resolveHubBuildId,g3 as resolveHooksConfigSearchPaths,A1 as resolveDisabledToolNames,D6 as resolveDisabledPluginPaths,Z0 as resolveDefaultMcpSettingsPath,P5 as resolveDefaultHubPort,OR as resolveDefaultHubPathname,TR as resolveDefaultHubHost,aj as resolveCoreSelectedToolIds,r0 as resolveCoreDistinctId,Z3 as resolveCompatibleLocalHubUrl,Dl as resolveClineDir,B4 as resolveClineDataDir,R6 as resolveAndLoadAgentPlugins,N$ as resolveAgentPluginPaths,o7 as requestHubShutdown,Bh as requestDesktopToolApproval,oJ as removePluginMcpServersFromSettings,c2 as rememberRecoverableLocalHubUrl,dF as registerRemoteConfigSessionBlobUpload,c8 as registerMcpServersFromSettingsFile,M$0 as registerDisposable,TI as refreshProviderModelsFromSource,uW as refreshOpenAICodexToken,oW as refreshOcaToken,vW as refreshClineToken,P4 as readSessionCheckpointHistory,ey as readRemoteConfigSessionBlobUploadMetadata,D0 as readHubDiscovery,O0 as readGlobalSettings,BD as readCompactionStrategyGlobally,kF as readBearerToken,K4 as projectSessionCompactionState,l$ as probeHubServer,rs as probeHubConnection,rY as prewarmFileIndex,uB as prewarmDetachedHubServer,Qh as prepareRemoteConfigCoreIntegration,OQ as parseWorkflowConfigFromMarkdown,z$0 as parseUserCommandEnvelope,_Q as parseSkillConfigFromMarkdown,LX as parseSettings,z1 as parseSessionCompactionState,TQ as parseRuleConfigFromMarkdown,DA as parsePluginSource,pJ as parseMcpInstallArgs,O9 as parseHookEventPayload,G3 as parseConfiguredAgentConfig,g$ as normalizeWorkspacePath,q$0 as normalizeUserInput,O$0 as normalizeSdkError,C0 as normalizeRuntimeCapabilities,K6 as normalizeProviderId,OI as normalizeOAuthProvider,u2 as normalizeHubWebSocketUrl,T$0 as noopBasicLogger,o3 as migrateLegacyProviderSettings,b6 as mergeRulesForSystemPrompt,E4 as mergeAgentHooks,Kk as marketplaceEntryKey,UI as markLocalProviderEnabled,k7 as makeTeamTaskSubSessionId,R5 as makeSubSessionId,RZ as loginOpenAICodex,SZ as loginOcaOAuth,qI as loginLocalProvider,zZ as loginClineOAuth,hZ as loginAndSaveProviderOAuthCredentials,MI as loginAndSaveLocalProviderOAuthCredentials,n10 as loadOpenTelemetryAdapter,x8 as loadMcpSettingsFile,eI as loadLlmsConfigFromFile,c5 as loadConfiguredAgentConfigs,U8 as loadAgentPluginsFromPathsWithDiagnostics,dX as loadAgentPluginsFromPaths,JQ as loadAgentPluginFromPath,aM as listSessionHistoryFromBackend,kV as listPluginToolsWithDiagnostics,G7 as listPluginTools,Y7 as listMcpServerOAuthStatuses,DI as listLocalProviders,i2 as listHookConfigFiles,GD as isToolDisabledGlobally,rZ as isTelemetryOptedOutGlobally,x$ as isSessionNotFoundError,VY as isRuleEnabled,KD as isPluginDisabledGlobally,UA as isOfficialPluginSlug,H8 as isOAuthProvider,JA as isMarketplaceSkillInstalled,ry as isLocalHubOrigin,IF as isLocalHubHostName,GN as isHubReconnectableTransportError,oB as isHubCommandTimeoutError,Tl as isDiscoveryFilePresent,Y$0 as isClineOrgIndividualInferenceSubscriptionMessage,X$0 as isClineOrgIndividualInferenceSubscriptionError,W$0 as isClineNotSubscribedMessage,J$0 as isClineNotSubscribedError,EW as isClineAccountActionRequest,yU as isBuiltInProviderId,jD as isAutoUpdateEnabledGlobally,$I as installPlugin,Uh as installMcpServer,I1 as identifyAccount,k$ as hasMcpSettingsFile,NZ as getValidOpenAICodexCredentials,bZ as getValidOcaCredentials,MZ as getValidClineCredentials,kZ as getProviderOAuthCredentialsFromSettings,bI as getProviderConfigFields,jX as getProviderConfig,$U as getProviderAuthStorageId,K0 as getProviderAuthHandler,J6 as getPersistedProviderApiKey,m8 as getMcpServerOAuthState,VW as getMarketplaceSkillCandidates,LI as getLocalProviderModels,G6 as getLiveModelsCatalog,BW as getGlobalMarketplaceSkillPaths,P$ as getFileIndex,xw as getCurrentContextSize,sQ as getCoreHeadlessToolNames,nj as getCoreDefaultEnabledToolIds,y8 as getCoreBuiltinToolCatalog,oj as getCoreAcpToolNames,Q$0 as getClinePassSubscriptionUrl,$$0 as getClineOrgIndividualInferenceSubscriptionMessage,Z$0 as getClineNotSubscribedMessage,V$0 as getClineDefaultSystemPrompt,L7 as generateWorkspaceInfoWithDiagnostics,z5 as generateWorkspaceInfo,S6 as formatRulesForSystemPrompt,QU as formatProviderOAuthApiKey,_$0 as formatDisplayUserInput,HW as findInstalledGlobalMarketplaceSkillName,G9 as findCheckpointForRun,aZ as filterExtensionToolRegistrations,m1 as filterDisabledTools,nZ as filterDisabledPluginPaths,aI as fetchClineRecommendedModels,wW as executeClineAccountAction,xF as ensureHubWebSocketServer,F00 as ensureHubServer,gl as ensureDetachedHubServer,vG as ensureCustomProvidersLoaded,G4 as ensureCompatibleLocalHubUrl,s6 as enrichPromptWithMentions,U$0 as emptyWorkspaceManifest,n2 as emptyStoredProviderSettings,HQ as discoverPluginModulePaths,Rh as disablePluginMcpServersInSettings,I7 as deriveSubsessionStatus,PA as deleteLocalProvider,tI as defineLlmsConfig,EQ as createWorkflowsConfigDefinition,h2 as createUserInstructionConfigService,sY as createToolPoliciesWithPreset,f$0 as createTool,WK as createTeamName,NK as createSubprocessHooks,y2 as createSpawnAgentTool,RQ as createSkillsConfigDefinition,PQ as createShellTool,z8 as createShellExecutor,L9 as createSessionHost,I5 as createSessionCompactionState,L9 as createRuntimeHost,NQ as createRulesConfigDefinition,Zh as createRemoteConfigSessionMessagesArtifactUploader,IU as createProviderConfig,w9 as createOpenTelemetryTelemetryService,r4 as createOAuthClientCallbacks,T5 as createMcpTools,Xt as createLocalHubScheduleRuntimeHandlers,Bx as createLlmsSdk,z0 as createInitialAccumulatedUsage,_l as createInMemoryHubOwnerContext,T1 as createHubServerUrl,SB as createHubAuthToken,l3 as createHookConfigFileHooks,J9 as createHookConfigFileExtension,Q9 as createHookAuditHooks,H7 as createDisabledMcpToolPolicy,bV as createDisabledMcpToolPolicies,S2 as createDelegatedAgentConfigProvider,b2 as createDelegatedAgent,tY as createDefaultToolsWithPreset,N2 as createDefaultTools,kQ as createDefaultShellExecutor,L5 as createDefaultMcpServerClientFactory,Z5 as createDefaultExecutors,r8 as createCoreSettingsService,Q$ as createCoreSessionSnapshot,A$0 as createContributionRegistry,h3 as createContextCompactionPrepareTurn,Q2 as createConfiguredTelemetryService,C9 as createConfiguredTelemetryHandle,d5 as createConfiguredAgentTools,k3 as createCompactionStateAwarePrepareTurn,F$0 as createClineTelemetryServiceMetadata,K$0 as createClineTelemetryServiceConfig,TK as createCheckpointComparePlan,h8 as createBuiltinTools,b8 as createAgentTeamsTools,y20 as createAgentRuntime,t5 as createAgentHooksExtension,SK as connectToHub,Tf as completeClineDeviceAuth,AJ as compareCheckpointToWorkspace,OA as collectPluginMcpOAuthCandidates,PU as clearPrivateModelsCatalogCache,CU as clearLiveModelsCatalogCache,e0 as clearHubDiscovery,Wf as captureWorkspacePathResolved,JZ as captureWorkspaceInitialized,WZ as captureWorkspaceInitError,V8 as captureToolUsage,jZ as captureTokenUsage,YZ as captureTaskRestarted,XZ as captureTaskCreated,n4 as captureTaskCompleted,o4 as captureSubagentExecution,BZ as captureSkillUsed,G$0 as captureSdkError,Xf as captureProviderConfigured,a4 as captureProviderApiError,VZ as captureModeSwitch,GZ as captureMentionUsed,FZ as captureMentionSearchResults,KZ as captureMentionFailed,fZ as captureHookDiscovery,Jf as captureExtensionActivated,HZ as captureDiffEditFailure,j8 as captureConversationTurnEvent,DZ as captureCompactionSkipped,UZ as captureCompactionExecuted,h1 as captureAuthSucceeded,y1 as captureAuthStarted,T$ as captureAuthLoggedOut,k1 as captureAuthFailed,tA as captureAgentUnexpectedReasoningTokens,AZ as captureAgentTeamCreated,O$ as captureAgentCreated,_7 as buildWorkspaceMetadata,l5 as buildTeamProgressSummary,B$0 as buildSdkErrorProperties,cF as buildRemoteConfigSessionBlobUploadMetadata,rF as buildMcpInstallTransport,P8 as buildDelegatedAgentConfig,F3 as buildConfiguredAgentToolName,A3 as buildConfiguredAgentToolDescriptors,OK as buildCheckpointWorkspaceDiff,B5 as bootstrapAgentTeams,TV as authorizeMcpServerOAuth,fI as addLocalProvider,L0 as accumulateUsageTotals,fQ as WORKFLOWS_CONFIG_DIRECTORY_NAME,F8 as UnifiedConfigFileWatcher,J1 as ToolPresets,g4 as TelemetryService,E9 as TelemetryLoggerSink,V5 as TEAM_TOOL_NAMES,_6 as SubprocessSandbox,O8 as StructuredCommandInputSchema,W9 as StoredProviderSettingsSchema,TG as StoredProviderSettingsEntrySchema,S4 as SqliteTeamStore,X$ as SqliteSessionStore,t2 as SessionVersioningService,$1 as SessionVersioningError,w0 as SessionSource,I$ as SessionNotFoundError,fX as SapSettingsSchema,AQ as SKILLS_CONFIG_DIRECTORY_NAME,lZ as SESSION_STATUSES,i8 as SESSION_NOT_FOUND_ERROR_CODE,R$0 as SDK_ERROR_TELEMETRY_EVENT,QZ as RpcClineAccountService,x5 as RemoteRuntimeHost,GX as ReasoningSettingsSchema,ZY as RULES_CONFIG_DIRECTORY_NAME,uF as REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY,A2 as ProviderSettingsSchema,H$ as ProviderSettingsManager,VX as ProviderProtocolSchema,dZ as ProviderIdSchema,BX as ProviderClientSchema,m4 as OpenTelemetryProvider,UX as OcaSettingsSchema,vZ as OPENAI_COMPATIBLE_PROVIDERS,q1 as NodeHubClient,I4 as NoOpFeatureFlagsProvider,gJ as NativeHubTransportAdapter,DX as ModelCatalogSettingsSchema,G5 as McpSettingsUpdateSkippedError,k2 as McpSettingsMutatorPurityError,I2 as McpSettingsLockTimeoutError,C$ as MAX_COMMAND_OUTPUT_CHARS,K$ as LocalRuntimeHost,o10 as Llms,X9 as InMemoryWorkspaceManager,u8 as InMemoryMcpManager,_b as HubUIClient,p0 as HubTransportError,Lb as HubSessionClient,I9 as HubServerTransport,N9 as HubScheduleService,z9 as HubScheduleCommandService,a$ as HubRuntimeHost,y5 as HubCommandError,MK as HookEventPayloadSchema,zK as HookEventNameSchema,e5 as HookConfigFileName,m3 as HOOK_CONFIG_FILE_EVENT_MAP,GG as HOOKS_CONFIG_DIRECTORY_NAME,U6 as GlobalSettingsSchema,FX as GcpSettingsSchema,bA as FileTeamPersistenceStore,k4 as FeatureFlagsService,L$0 as FeatureFlagDefaultValue,D$0 as FEATURE_FLAGS,gA as FALLBACK_CLINE_RECOMMENDED_MODELS,q0 as DefaultToolNames,f9 as DefaultRuntimeBuilder,qW as DefaultLlmsSdk,WX as DEFAULT_MODELS_CATALOG_URL,LR as DEFAULT_HUB_PORT,_R as DEFAULT_HUB_PATHNAME,DR as DEFAULT_HUB_HOST,v2 as CoreSettingsService,Y$ as CoreSessionService,H$0 as ContributionRegistry,e10 as ClineOrgIndividualInferenceSubscriptionError,t10 as ClineNotSubscribedError,fJ as ClineCore,ZZ as ClineAccountService,cI as ChatViewStateSchema,xA as ChatSummarySchema,hA as ChatSessionStatusSchema,yA as ChatSessionConfigSchema,IA as ChatMessageSchema,kA as ChatMessageRoleSchema,g as CORE_TELEMETRY_EVENTS,uI as CORE_BUILD_VERSION,xJ as BrowserWebSocketHubAdapter,bU as BUILT_IN_PROVIDER_IDS,uZ as BUILT_IN_PROVIDER,AX as AzureSettingsSchema,KX as AwsSettingsSchema,HX as AuthSettingsSchema,L4 as AgentTeamsRuntime,U3 as AgentTeam,b20 as Agent,O2 as ALL_DEFAULT_TOOL_NAMES};