@cline/core 0.0.50 → 0.0.51-nightly.1782011943

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  import{createRequire as RF}from"node:module";var{defineProperty:WZ,getOwnPropertyNames:FF}=Object;var dj=Object.prototype.hasOwnProperty;function lj($){return this[$]}var q=($,J,Q)=>{var Z=FF(J);for(let W of Z)if(!dj.call($,W)&&W!=="default")WZ($,W,{get:lj.bind(J,W),enumerable:!0});if(Q){for(let W of Z)if(!dj.call(Q,W)&&W!=="default")WZ(Q,W,{get:lj.bind(J,W),enumerable:!0});return Q}};var DF=($)=>$;function UF($,J){this[$]=DF.bind(null,J)}var w=($,J)=>{for(var Q in J)WZ($,Q,{get:J[Q],enumerable:!0,configurable:!0,set:UF.bind(J,Q)})};var h$=($,J)=>()=>($&&(J=$($=0)),J);var pj=RF(import.meta.url);import{SDK_ERROR_TELEMETRY_EVENT as LF}from"@cline/shared";function i($,J,Q){$?.capture({event:J,properties:Q})}function IJ($){if(!$)return;return $.substring(0,zF)}function _F($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function OF($){return typeof $==="string"?$:$.message}function rj($,J){return $.some((Q)=>J.has(Q.trim().toLowerCase()))}function ij($){i($,x.CLIENT.EXTENSION_ACTIVATED)}function xJ($,J){let Q=[...J.vcs_types],Z={root_count:J.root_count,vcs_types:Q,is_multi_root:J.root_count>1,has_git:rj(Q,new Set(["git"])),has_mercurial:rj(Q,new Set(["mercurial","hg"]))};if(J.init_duration_ms!==void 0)Z.init_duration_ms=J.init_duration_ms;if(J.feature_flag_enabled!==void 0)Z.feature_flag_enabled=J.feature_flag_enabled;if(J.is_remote_workspace!==void 0)Z.is_remote_workspace=J.is_remote_workspace;i($,x.WORKSPACE.INITIALIZED,Z)}function gJ($,J,Q){i($,x.WORKSPACE.INIT_ERROR,{error_type:_F(J),error_message:IJ(OF(J)),fallback_to_single_root:Q.fallback_to_single_root,workspace_count:Q.workspace_count??0})}function nj($,J){i($,x.WORKSPACE.PATH_RESOLVED,{...J})}function P1($,J){i($,x.USER.AUTH_STARTED,{provider:J})}function N1($,J){i($,x.USER.AUTH_SUCCEEDED,{provider:J})}function w1($,J,Q){i($,x.USER.AUTH_FAILED,{provider:J,errorMessage:IJ(Q)})}function e1($,J,Q){i($,x.USER.AUTH_LOGGED_OUT,{provider:J,reason:Q})}function aj($,J){i($,x.USER.PROVIDER_CONFIGURED,{provider:J})}function sj($,J){$?.captureRequired(x.USER.TELEMETRY_OPT_OUT,J)}function S1($,J){let Q=J.id?.trim();if(Q)$?.setDistinctId(Q);$?.updateCommonProperties({account_id:J.id,account_email:J.email,provider:J.provider,organization_id:J.organizationId,organization_name:J.organizationName,member_id:J.memberId})}function mJ($,J){i($,x.TASK.CREATED,J)}function vJ($,J){i($,x.TASK.RESTARTED,J)}function H4($,J){i($,x.TASK.COMPLETED,J)}function g2($,J){i($,x.TASK.CONVERSATION_TURN,{...J,timestamp:new Date().toISOString()})}function cJ($,J){i($,x.TASK.TOKEN_USAGE,J)}function uJ($,J,Q){i($,x.TASK.MODE_SWITCH,{ulid:J,mode:Q})}function dJ($,J){i($,x.TASK.TOOL_USED,J)}function lJ($,J){i($,x.TASK.SKILL_USED,J)}function pJ($,J){i($,x.TASK.DIFF_EDIT_FAILED,J)}function B4($,J){i($,x.TASK.PROVIDER_API_ERROR,{...J,errorMessage:IJ(J.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function oj($,J){i($,x.SDK.TOOL_TIMEOUT,TF(J))}function TF($){let J={};for(let[Q,Z]of Object.entries($))if(Z!==void 0)J[Q]=Z;return J}function rJ($,J,Q){i($,x.TASK.MENTION_USED,{mentionType:J,contentLength:Q,timestamp:new Date().toISOString()})}function iJ($,J,Q,Z){i($,x.TASK.MENTION_FAILED,{mentionType:J,errorType:Q,errorMessage:IJ(Z),timestamp:new Date().toISOString()})}function nJ($,J,Q,Z,W){i($,x.TASK.MENTION_SEARCH_RESULTS,{queryLength:J.length,resultCount:Q,searchType:Z,isEmpty:W,timestamp:new Date().toISOString()})}function $$($,J){i($,x.TASK.AGENT_CREATED,{...J,timestamp:new Date().toISOString()})}function aJ($,J){i($,x.TASK.AGENT_TEAM_CREATED,{...J,timestamp:new Date().toISOString()})}function A4($,J){i($,J.event==="ended"?x.TASK.SUBAGENT_COMPLETED:x.TASK.SUBAGENT_STARTED,{...J,timestamp:new Date().toISOString()})}function sJ($,J,Q,Z){i($,x.HOOKS.DISCOVERY_COMPLETED,{hookName:J,globalCount:Q,workspaceCount:Z,totalCount:Q+Z,timestamp:new Date().toISOString()})}function oJ($,J){i($,x.TASK.COMPACTION_EXECUTED,{...J,timestamp:new Date().toISOString()})}function tJ($,J){i($,x.TASK.COMPACTION_SKIPPED,{...J,timestamp:new Date().toISOString()})}var zF=500,x;var O0=h$(()=>{x={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},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:LF,TOOL_TIMEOUT:"sdk.tool_timeout"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as xU,readFileSync as gU,statSync as mU,writeFileSync as vU}from"node:fs";import{dirname as cU}from"node:path";import{resolveGlobalSettingsPath as Ef}from"@cline/shared/storage";import{z as e2}from"zod";function z5(){return p4.parse({})}function uU(){_5=void 0}function dU($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function lU($){let J;try{J=gU($,"utf8")}catch{return z5()}try{let Q=p4.safeParse(JSON.parse(J));return Q.success?Q.data:z5()}catch{return z5()}}function pU(){let $=Ef(),J=mU($,{throwIfNoEntry:!1}),Q=J?.mtimeMs??0,Z=J?.size??0,W=_5;if(W&&W.path===$&&W.mtimeMs===Q&&W.size===Z)return W;let j=dU(J?lU($):z5());return _5={path:$,mtimeMs:Q,size:Z,value:j},_5}function M0(){return pU().value}function k1($,J={}){let Q=Ef(),Z=M0();xU(cU(Q),{recursive:!0});let W=p4.parse($);if(!Z.telemetryOptOut&&W.telemetryOptOut)sj(J.telemetry);vU(Q,`${JSON.stringify(W,null,2)}
2
2
  `,"utf8"),uU()}function O5(){return M0().telemetryOptOut}function bf($,J={}){k1({...M0(),telemetryOptOut:$},J)}function hf(){return M0().autoUpdateEnabled}function kf($,J={}){k1({...M0(),autoUpdateEnabled:$},J)}function B1($){return new Set($??M0().disabledTools??[])}function r4($){return new Set($??M0().disabledPlugins??[])}function If($){return B1().has($)}function T5($){let J=M0(),Q=new Set(J.disabledTools??[]),Z=Q.has($);if(Z)Q.delete($);else Q.add($);return k1({...J,disabledTools:[...Q]}),!Z}function uZ($,J){let Q=[...new Set($.map((j)=>j.trim()).filter(Boolean))];if(Q.length===0)return;let Z=M0(),W=B1(Z.disabledTools);for(let j of Q)if(J)W.add(j);else W.delete(j);k1({...Z,disabledTools:[...W]})}function xf($,J){return uZ([$],J),J}function gf($){return r4().has($)}function mf($,J){let Q=$.trim();if(!Q)return;let Z=M0(),W=r4(Z.disabledPlugins);if(J)W.add(Q);else W.delete(Q);k1({...Z,disabledPlugins:[...W]})}function M5($,J){let Q=r4(J);if(Q.size===0)return[...$];return $.filter((Z)=>!Q.has(Z))}function I1($,J){let Q=B1(J);if(Q.size===0)return[...$];return $.filter((Z)=>!Q.has(Z.name))}function q5($,J){if(!$||$.length===0)return $;let Q=B1(J);if(Q.size===0)return $;return $.map((Z)=>{if(!Z.setup)return Z;return{...Z,setup:(W,j)=>Z.setup?.({...W,registerTool:(X)=>{if(!Q.has(X.name))W.registerTool(X)}},j)}})}var yf,p4,_5;var W1=h$(()=>{O0();yf=e2.preprocess(($)=>Array.isArray($)?$.filter((J)=>typeof J==="string").map((J)=>J.trim()).filter(Boolean):void 0,e2.array(e2.string()).optional()).transform(($)=>{if(!$)return;let J=[...new Set($)].sort((Q,Z)=>Q.localeCompare(Z));return J.length>0?J:void 0}),p4=e2.object({telemetryOptOut:e2.boolean().default(!1).catch(!1),autoUpdateEnabled:e2.boolean().default(!0).catch(!0),disabledTools:yf.optional(),disabledPlugins:yf.optional()}).strip().transform(($)=>{let J={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.disabledTools?.length)J.disabledTools=$.disabledTools;if($.disabledPlugins?.length)J.disabledPlugins=$.disabledPlugins;return J})});var XY={};w(XY,{normalizeUserMessage:()=>cR,buildInitialUserContent:()=>vR});async function vR($,J,Q,Z){let W=uR(J),j=await lR(Q,Z);if(W.length===0&&!j)return $;let X=[{type:"text",text:$},...W];if(j)X.push(...j);return X}function cR($){if($==null)return"";if(typeof $==="string")return $;let J=$.content;if(typeof J==="string")return J;if(!Array.isArray(J))return"";let Q=[];for(let Z of J)if(Z&&typeof Z==="object"&&Z.type==="text"){let W=Z.text;if(typeof W==="string")Q.push(W)}return Q.join(`
3
- `)}function uR($){if(!$||$.length===0)return[];let J=[];for(let Q of $){let Z=dR(Q);if(Z)J.push(Z)}return J}function dR($){let J=$.trim();if(!J)return;let Q=J.match(/^data:([^;,]+);base64,(.+)$/);if(Q){let Z=Q[1],W=Q[2];if(!Z||!W)return;return{type:"image",mediaType:Z,data:W}}return{type:"image",mediaType:"image/png",data:J}}async function lR($,J){if(!$||$.length===0)return;let Q=J??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),Z=await Promise.all($.map(async(W)=>{let j=W.replace(/\\/g,"/");try{let X=await Q(W);return{type:"file",path:j,content:X}}catch(X){let f=X instanceof Error?X.message:String(X);return{type:"file",path:j,content:`Error fetching content: ${f}`}}}));if(Z.length===0)return;return Z}var NH={};w(NH,{updateMcpServerOAuthState:()=>H2,setMcpServerDisabled:()=>Y2,resolveMcpServerRegistrations:()=>A1,resolveDefaultMcpSettingsPath:()=>K0,registerMcpServersFromSettingsFile:()=>B2,normalizeMcpServerOAuthState:()=>S8,loadMcpSettingsFile:()=>f2,listMcpServerOAuthStatuses:()=>u6,hasMcpSettingsFile:()=>c1,getMcpServerOAuthState:()=>V2});import{existsSync as uO,mkdirSync as _H,readFileSync as tW,writeFileSync as OH}from"node:fs";import{dirname as TH}from"node:path";import{resolveMcpSettingsPath as dO}from"@cline/shared/storage";import{z as y}from"zod";function oW($){if(!$)return;if($==="http")return"streamableHttp";return $}function K0(){return dO()}function $T($){let J=tW($,"utf8"),Q;try{Q=JSON.parse(J)}catch(Z){let W=Z instanceof Error?Z.message:String(Z);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 PH($,J){if(!Object.hasOwn($,J))return;let Q=$[J];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function JT($,J,Q){Object.defineProperty($,J,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function f2($={}){let J=$.filePath??K0(),Q=tW(J,"utf8"),Z;try{Z=JSON.parse(Q)}catch(j){let X=j instanceof Error?j.message:String(j);throw Error(`Failed to parse MCP settings JSON at "${J}": ${X}`)}let W=eO.safeParse(Z);if(!W.success){let j=W.error.issues.map((X)=>{let f=X.path.join(".");return f?`${f}: ${X.message}`:X.message}).join("; ");throw Error(`Invalid MCP settings at "${J}": ${j}`)}return W.data}function QT($){let J=tW($,"utf8"),Q;try{Q=JSON.parse(J)}catch(j){let X=j instanceof Error?j.message:String(j);throw Error(`Failed to parse MCP settings JSON at "${$}": ${X}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object`);let Z=Q,W=Z.mcpServers;if(!W||typeof W!=="object"||Array.isArray(W))throw Error(`Invalid MCP settings at "${$}": mcpServers must be an object`);return Z}function S8($){if(!$)return;let J={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(J).length>0?J:void 0}function ZT($){if($===void 0)return;let J=eW.safeParse($);if(!J.success)return;return S8(J.data)}function c1($={}){let J=$.filePath??K0();return uO(J)}function A1($={}){let J=f2($);return Object.entries(J.mcpServers).map(([Q,Z])=>({name:Q,transport:Z.transport,disabled:Z.disabled,metadata:Z.metadata,oauth:Z.oauth}))}function Y2($){let J=$.filePath??K0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");let Z=$T(J),W=Z.mcpServers;if(!W||typeof W!=="object"||Array.isArray(W))throw Error(`Invalid MCP settings at "${J}": mcpServers must be an object.`);let j={...W},X=PH(j,Q);if(!X)throw Error(`Unknown MCP server: ${Q}`);let f={...X};if($.disabled)f.disabled=!0;else delete f.disabled;JT(j,Q,f),_H(TH(J),{recursive:!0}),OH(J,`${JSON.stringify({...Z,mcpServers:j},null,2)}
3
+ `)}function uR($){if(!$||$.length===0)return[];let J=[];for(let Q of $){let Z=dR(Q);if(Z)J.push(Z)}return J}function dR($){let J=$.trim();if(!J)return;let Q=J.match(/^data:([^;,]+);base64,(.+)$/);if(Q){let Z=Q[1],W=Q[2];if(!Z||!W)return;return{type:"image",mediaType:Z,data:W}}return{type:"image",mediaType:"image/png",data:J}}async function lR($,J){if(!$||$.length===0)return;let Q=J??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),Z=await Promise.all($.map(async(W)=>{let j=W.replace(/\\/g,"/");try{let X=await Q(W);return{type:"file",path:j,content:X}}catch(X){let f=X instanceof Error?X.message:String(X);return{type:"file",path:j,content:`Error fetching content: ${f}`}}}));if(Z.length===0)return;return Z}var NH={};w(NH,{updateMcpServerOAuthState:()=>H2,setMcpServerDisabled:()=>Y2,resolveMcpServerRegistrations:()=>A1,resolveDefaultMcpSettingsPath:()=>K0,registerMcpServersFromSettingsFile:()=>B2,normalizeMcpServerOAuthState:()=>S8,loadMcpSettingsFile:()=>f2,listMcpServerOAuthStatuses:()=>u6,hasMcpSettingsFile:()=>c1,getMcpServerOAuthState:()=>V2});import{existsSync as uO,mkdirSync as _H,readFileSync as t7,writeFileSync as OH}from"node:fs";import{dirname as TH}from"node:path";import{resolveMcpSettingsPath as dO}from"@cline/shared/storage";import{z as y}from"zod";function o7($){if(!$)return;if($==="http")return"streamableHttp";return $}function K0(){return dO()}function $T($){let J=t7($,"utf8"),Q;try{Q=JSON.parse(J)}catch(Z){let W=Z instanceof Error?Z.message:String(Z);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 PH($,J){if(!Object.hasOwn($,J))return;let Q=$[J];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function JT($,J,Q){Object.defineProperty($,J,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function f2($={}){let J=$.filePath??K0(),Q=t7(J,"utf8"),Z;try{Z=JSON.parse(Q)}catch(j){let X=j instanceof Error?j.message:String(j);throw Error(`Failed to parse MCP settings JSON at "${J}": ${X}`)}let W=eO.safeParse(Z);if(!W.success){let j=W.error.issues.map((X)=>{let f=X.path.join(".");return f?`${f}: ${X.message}`:X.message}).join("; ");throw Error(`Invalid MCP settings at "${J}": ${j}`)}return W.data}function QT($){let J=t7($,"utf8"),Q;try{Q=JSON.parse(J)}catch(j){let X=j instanceof Error?j.message:String(j);throw Error(`Failed to parse MCP settings JSON at "${$}": ${X}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object`);let Z=Q,W=Z.mcpServers;if(!W||typeof W!=="object"||Array.isArray(W))throw Error(`Invalid MCP settings at "${$}": mcpServers must be an object`);return Z}function S8($){if(!$)return;let J={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(J).length>0?J:void 0}function ZT($){if($===void 0)return;let J=e7.safeParse($);if(!J.success)return;return S8(J.data)}function c1($={}){let J=$.filePath??K0();return uO(J)}function A1($={}){let J=f2($);return Object.entries(J.mcpServers).map(([Q,Z])=>({name:Q,transport:Z.transport,disabled:Z.disabled,metadata:Z.metadata,oauth:Z.oauth}))}function Y2($){let J=$.filePath??K0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");let Z=$T(J),W=Z.mcpServers;if(!W||typeof W!=="object"||Array.isArray(W))throw Error(`Invalid MCP settings at "${J}": mcpServers must be an object.`);let j={...W},X=PH(j,Q);if(!X)throw Error(`Unknown MCP server: ${Q}`);let f={...X};if($.disabled)f.disabled=!0;else delete f.disabled;JT(j,Q,f),_H(TH(J),{recursive:!0}),OH(J,`${JSON.stringify({...Z,mcpServers:j},null,2)}
4
4
  `)}function V2($,J={}){let Q=f2(J);if(!Object.hasOwn(Q.mcpServers,$))return;return S8(Q.mcpServers[$]?.oauth)}function H2($,J,Q={}){let Z=Q.filePath??K0(),W=QT(Z),j=W.mcpServers,X=PH(j,$);if(!X)throw Error(`Unknown MCP server: ${$}`);let f=ZT(X.oauth)??{},Y=S8(J(f));if(Y)X.oauth=Y;else delete X.oauth;return _H(TH(Z),{recursive:!0}),OH(Z,`${JSON.stringify(W,null,2)}
5
- `,"utf8"),Y??{}}function u6($={}){return A1($).map((Q)=>{let Z=Q.transport.type!=="stdio",W=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:Z,oauthConfigured:Z&&typeof W==="string"&&W.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,Z)=>Q.serverName.localeCompare(Z.serverName))}async function B2($,J={}){let Q=A1(J);for(let Z of Q)await $.registerServer(Z);return Q}var c6,MH,eW,lO,pO,rO,iO,nO,aO,qH,sO,oO,tO,eO;var yQ=h$(()=>{c6=y.record(y.string(),y.string()),MH=y.record(y.string(),y.unknown()),eW=y.object({clientInformation:y.record(y.string(),y.unknown()).optional(),tokens:y.record(y.string(),y.unknown()).optional(),codeVerifier:y.string().optional(),discoveryState:y.record(y.string(),y.unknown()).optional(),redirectUrl:y.string().url().optional(),lastError:y.string().optional(),lastAuthenticatedAt:y.number().int().positive().optional()}).strip(),lO=y.object({type:y.literal("stdio"),command:y.string().min(1),args:y.array(y.string()).optional(),cwd:y.string().min(1).optional(),env:c6.optional()}),pO=y.object({type:y.literal("sse"),url:y.string().url(),headers:c6.optional()}),rO=y.object({type:y.literal("streamableHttp"),url:y.string().url(),headers:c6.optional()}),iO=y.discriminatedUnion("type",[lO,pO,rO]),nO=y.object({transport:iO,disabled:y.boolean().optional(),metadata:MH.optional(),oauth:eW.optional()}),aO=y.enum(["stdio","sse","http","streamableHttp"]).optional(),qH=y.object({type:y.enum(["stdio","sse","streamableHttp"]).optional(),transportType:aO,disabled:y.boolean().optional(),metadata:MH.optional(),oauth:eW.optional()});sO=qH.extend({command:y.string().min(1),args:y.array(y.string()).optional(),cwd:y.string().min(1).optional(),env:c6.optional()}).superRefine(($,J)=>{let Q=$.type??oW($.transportType);if(Q&&Q!=="stdio")J.addIssue({code:y.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})),oO=qH.extend({url:y.string().url(),headers:c6.optional()}).superRefine(($,J)=>{let Q=$.type??oW($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")J.addIssue({code:y.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??oW($.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}}),tO=y.union([nO,sO,oO]),eO=y.object({mcpServers:y.record(y.string(),tO)}).passthrough()});import{existsSync as VN,mkdirSync as HN,readFileSync as BN,writeFileSync as AN}from"node:fs";import{resolve as KN}from"node:path";import{resolveSessionDataDir as GN}from"@cline/shared/storage";import{nanoid as FN}from"nanoid";import*as DN from"node-machine-id";function b0($){let J=$?.trim();if(J)return J;let Q=LN();if(Q)return Q;return zN()}function RN(){let $=DN;return $.machineIdSync??$.default?.machineIdSync}function LN(){try{let $=RN();if(!$)return;return $().trim()||void 0}catch{return}}function zN(){let $=GN(),J=KN($,UN);try{if(VN(J)){let Z=BN(J,"utf8").trim();if(Z.length>0)return Z}}catch{}let Q=`cl-${FN()}`;try{HN($,{recursive:!0}),AN(J,Q,"utf8")}catch{}return Q}var UN="machine-id";var m8=()=>{};class RJ{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($,J){if(!this.isEnabled())return;this.emitLog($,J,!1)}emitRequired($,J){this.emitLog($,J,!0)}recordCounter($,J,Q,Z,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let j=this.counters.get($);if(!j)j=this.meter.createCounter($,Z?{description:Z}:void 0),this.counters.set($,j);j.add(J,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,J,Q,Z,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let j=this.histograms.get($);if(!j)j=this.meter.createHistogram($,Z?{description:Z}:void 0),this.histograms.set($,j);j.record(J,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,J,Q,Z,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let j=this.buildAttributes(Q),X=JSON.stringify(j),f=this.gaugeValues.get($);if(J===null){if(f){if(f.delete(X),f.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let Y=f;if(!Y)Y=new Map,this.gaugeValues.set($,Y);if(!this.gauges.has($)){let V=this.meter.createObservableGauge($,Z?{description:Z}:void 0);V.addCallback((H)=>{for(let B of this.snapshotGaugeSeries($))H.observe(B.value,this.flattenProperties(B.attributes))}),this.gauges.set($,V)}Y.set(X,{value:J,attributes:j})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,J,Q){if(!this.logger)return;let Z=this.flattenProperties(this.buildAttributes(J,Q));this.logger.emit({severityText:"INFO",body:$,attributes:Z})}buildAttributes($,J=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...J?{_required:!0}:{}}}snapshotGaugeSeries($){let J=this.gaugeValues.get($);if(!J)return[];return Array.from(J.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,J="",Q=new WeakSet,Z=0){if(!$)return{};let W={},j=100,X=10;for(let[f,Y]of Object.entries($)){if(f==="__proto__"||f==="constructor"||f==="prototype")continue;let V=J?`${J}.${f}`:f;if(Y===null||Y===void 0){W[V]=String(Y);continue}if(Array.isArray(Y)){let H=Y.length>j?Y.slice(0,j):Y;try{W[V]=JSON.stringify(H)}catch{W[V]="[UnserializableArray]"}if(Y.length>j)W[`${V}_truncated`]=!0,W[`${V}_original_length`]=Y.length;continue}if(typeof Y==="object"){if(Y instanceof Date){W[V]=Y.toISOString();continue}if(Y instanceof Error){W[V]=Y.message;continue}if(Q.has(Y)){W[V]="[Circular]";continue}if(Z>=X){W[V]="[MaxDepthExceeded]";continue}Q.add(Y),Object.assign(W,this.flattenProperties(Y,V,Q,Z+1));continue}if(Iw(Y)){W[V]=Y;continue}try{W[V]=JSON.stringify(Y)}catch{W[V]=String(Y)}}return W}}function Iw($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class LJ{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,J){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:J})}emitRequired($,J){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:J})}recordCounter($,J,Q,Z,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:J,attributes:Q,description:Z,required:W===!0})}recordHistogram($,J,Q,Z,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:J,attributes:Q,description:Z,required:W===!0})}recordGauge($,J,Q,Z,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:J,attributes:Q,description:Z,required:W===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class t8{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new LJ({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 J=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,J)}captureRequired($,J){let Q=this.buildAttributes(J);for(let Z of this.adapters)Z.emitRequired($,Q)}recordCounter($,J,Q,Z,W=!1){let j=this.buildAttributes(Q);for(let X of this.adapters)X.recordCounter($,J,j,Z,W)}recordHistogram($,J,Q,Z,W=!1){let j=this.buildAttributes(Q);for(let X of this.adapters)X.recordHistogram($,J,j,Z,W)}recordGauge($,J,Q,Z,W=!1){let j=this.buildAttributes(Q);for(let X of this.adapters)X.recordGauge($,J,j,Z,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 H3=()=>{};import{metrics as xw,trace as gw}from"@opentelemetry/api";import{logs as mw}from"@opentelemetry/api-logs";import{OTLPLogExporter as vw}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as cw}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as uw}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as dw}from"@opentelemetry/resources";import{BatchLogRecordProcessor as lw,ConsoleLogRecordExporter as pw,LoggerProvider as rw}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as iw,MeterProvider as nw,PeriodicExportingMetricReader as iA}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as aw,ConsoleSpanExporter as sw,SimpleSpanProcessor as ow}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as tw}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as ew,ATTR_SERVICE_VERSION as $S}from"@opentelemetry/semantic-conventions";class nA{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($,J){this.resolveProperties(J)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class e8{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let J=dw({[ew]:$.serviceName??"cline",...$.serviceVersion?{[$S]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(J),this.loggerProvider=this.createLoggerProvider(J),this.tracerProvider=this.createTracerProvider(J),this.meterProvider)xw.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)mw.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",J){return gw.getTracer($,J??this.options.serviceVersion)}createAdapter($){return new RJ({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let J=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new t8({...$,adapters:[J],distinctId:b0($.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 J=B3(this.options.metricsExporter);if(J.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),Z=Math.min(30000,Math.floor(Q*0.8)),W=J.map((j)=>ZS(j,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:Z})).filter((j)=>j!==null);if(W.length===0)return null;return new nw({resource:$,readers:W})}createTracerProvider($){let J=B3(this.options.tracesExporter);if(J.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,Z=this.options.otlpTracesHeaders??this.options.otlpHeaders,W=[];for(let j of J){let X=QS(j,{endpoint:Q,headers:Z,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(X)W.push(X)}if(W.length===0)return null;return new tw({resource:$,spanProcessors:W})}createLoggerProvider($){let J=B3(this.options.logsExporter);if(J.length===0)return null;let Q=J.map((Z)=>{let W=JS(Z,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!W)return null;return new lw(W,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((Z)=>Z!==null);if(Q.length===0)return null;return new rw({resource:$,processors:Q})}}function zJ($){let J=new e8($),Q=J.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:J,telemetry:Q}}function s1($){if(O5())return{telemetry:new nA($)};if($.enabled!==!0)return{telemetry:new t8({...$,distinctId:b0($.distinctId)})};return zJ($)}function $4($){let{telemetry:J,provider:Q}=s1($);return{telemetry:J,provider:Q,flush:async()=>{let j=Q;if(j&&typeof j.forceFlush==="function")try{await j.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([J.dispose(),Q?.dispose()])}}}function B3($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function JS($,J){if($==="console")return new pw;if(!J.endpoint)return null;let Q=A3(J.endpoint,"/v1/logs");return new vw({url:Q,headers:J.headers})}function QS($,J){if($==="console")return new ow(new sw);if(!J.endpoint)return null;let Q=A3(J.endpoint,"/v1/traces");return new aw(new uw({url:Q,headers:J.headers}))}function ZS($,J){if($==="console")return new iA({exporter:new iw,exportIntervalMillis:J.interval,exportTimeoutMillis:J.timeout});if(!J.endpoint)return null;let Q=A3(J.endpoint,"/v1/metrics");return new iA({exporter:new cw({url:Q,headers:J.headers}),exportIntervalMillis:J.interval,exportTimeoutMillis:J.timeout})}function A3($,J){let Q=new URL($),Z=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=Z.endsWith(J)?Z:`${Z}${J}`,Q.toString()}var G9=h$(()=>{W1();m8();H3()});var JG={};w(JG,{resolveCoreDistinctId:()=>b0,createOpenTelemetryTelemetryService:()=>zJ,createConfiguredTelemetryService:()=>s1,createConfiguredTelemetryHandle:()=>$4,OpenTelemetryProvider:()=>e8,OpenTelemetryAdapter:()=>RJ});var M9=h$(()=>{m8();G9()});import{AgentRuntimeAbortError as eb}from"@cline/agents";import{initVcr as $h,resolveClineBuildEnv as Jh}from"@cline/shared";import{normalizeProviderId as sb}from"@cline/llms";var WF={};w(WF,{LocalRuntimeHost:()=>z1});import{readdirSync as cb}from"node:fs";import{homedir as ub}from"node:os";import{isAbsolute as db,join as mj,resolve as vj}from"node:path";import{captureSdkError as h2,createSessionId as lb,isLikelyAuthError as pb,normalizeUserInput as rb}from"@cline/shared";import{setHomeDirIfUnset as ib}from"@cline/shared/storage";var PX={};w(PX,{saveProviderOAuthCredentials:()=>x$,resolveProviderApiKeyFromSettings:()=>DZ,loginAndSaveProviderOAuthCredentials:()=>z4,isOAuthProvider:()=>I$,getProviderOAuthCredentialsFromSettings:()=>_4,getProviderAuthStorageId:()=>FZ,getProviderAuthHandler:()=>Z0,getPersistedProviderApiKey:()=>l2,formatProviderOAuthApiKey:()=>UZ});import{getClineEnvironmentConfig as MX}from"@cline/shared";O0();var fX={};w(fX,{startClineDeviceAuth:()=>HZ,refreshClineToken:()=>Q5,loginClineOAuth:()=>K4,getValidClineCredentials:()=>G4,completeClineDeviceAuth:()=>BZ});import{getClineEnvironmentConfig as jZ}from"@cline/shared";var tj={};w(tj,{startLocalOAuthServer:()=>J1});function MF(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function J1($){let J=await import("node:http"),Q=$.host??"127.0.0.1",Z=$.timeoutMs??300000,W=$.successHtml??qF,j=MF(),X=!1,f=null,Y=null,V=null,H=(K)=>{if(X)return;X=!0,j.resolve(K)},B=()=>{if(f)clearTimeout(f),f=null;let K=V;if(V=null,Y)Y.close(),Y=null;if(K!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:K})).catch(()=>{})},A=async()=>{return f=setTimeout(()=>{B(),H(null)},Z),j.promise};for(let K of $.ports){let G=J.createServer((D,U)=>{try{let F=new URL(D.url||"",`http://${Q}:${K}`);if(F.pathname!==$.callbackPath){U.statusCode=404,U.end("Not found");return}let O={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(O.error){U.statusCode=400,U.end(`Authentication failed: ${O.error}`),B(),H(O);return}if(!O.code){U.statusCode=400,U.end("Missing authorization code");return}if($.expectedState&&O.state!==$.expectedState){U.statusCode=400,U.end("State mismatch");return}U.statusCode=200,U.setHeader("Content-Type","text/html; charset=utf-8"),U.end(W),B(),H(O)}catch{U.statusCode=500,U.end("Internal error")}}),R=await new Promise((D)=>{let U=(F)=>{G.off("error",U),D({bound:!1,error:F})};G.once("error",U),G.listen(K,Q,()=>{G.off("error",U),Y=G,D({bound:!0})})});if(R.error){if(R.error.code==="EADDRINUSE")continue;throw B(),R.error}if(R.bound){V=K;let D=`http://${Q}:${K}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:K,callbackUrl:D})).catch(()=>{});return{callbackUrl:D,waitForCallback:A,cancelWait:()=>{B(),H(null)},close:()=>{B(),H(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var qF=`<!DOCTYPE html>
5
+ `,"utf8"),Y??{}}function u6($={}){return A1($).map((Q)=>{let Z=Q.transport.type!=="stdio",W=Q.oauth?.tokens?.access_token;return{serverName:Q.name,oauthSupported:Z,oauthConfigured:Z&&typeof W==="string"&&W.trim().length>0,lastError:Q.oauth?.lastError,lastAuthenticatedAt:Q.oauth?.lastAuthenticatedAt}}).sort((Q,Z)=>Q.serverName.localeCompare(Z.serverName))}async function B2($,J={}){let Q=A1(J);for(let Z of Q)await $.registerServer(Z);return Q}var c6,MH,e7,lO,pO,rO,iO,nO,aO,qH,sO,oO,tO,eO;var y9=h$(()=>{c6=y.record(y.string(),y.string()),MH=y.record(y.string(),y.unknown()),e7=y.object({clientInformation:y.record(y.string(),y.unknown()).optional(),tokens:y.record(y.string(),y.unknown()).optional(),codeVerifier:y.string().optional(),discoveryState:y.record(y.string(),y.unknown()).optional(),redirectUrl:y.string().url().optional(),lastError:y.string().optional(),lastAuthenticatedAt:y.number().int().positive().optional()}).strip(),lO=y.object({type:y.literal("stdio"),command:y.string().min(1),args:y.array(y.string()).optional(),cwd:y.string().min(1).optional(),env:c6.optional()}),pO=y.object({type:y.literal("sse"),url:y.string().url(),headers:c6.optional()}),rO=y.object({type:y.literal("streamableHttp"),url:y.string().url(),headers:c6.optional()}),iO=y.discriminatedUnion("type",[lO,pO,rO]),nO=y.object({transport:iO,disabled:y.boolean().optional(),metadata:MH.optional(),oauth:e7.optional()}),aO=y.enum(["stdio","sse","http","streamableHttp"]).optional(),qH=y.object({type:y.enum(["stdio","sse","streamableHttp"]).optional(),transportType:aO,disabled:y.boolean().optional(),metadata:MH.optional(),oauth:e7.optional()});sO=qH.extend({command:y.string().min(1),args:y.array(y.string()).optional(),cwd:y.string().min(1).optional(),env:c6.optional()}).superRefine(($,J)=>{let Q=$.type??o7($.transportType);if(Q&&Q!=="stdio")J.addIssue({code:y.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})),oO=qH.extend({url:y.string().url(),headers:c6.optional()}).superRefine(($,J)=>{let Q=$.type??o7($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")J.addIssue({code:y.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??o7($.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}}),tO=y.union([nO,sO,oO]),eO=y.object({mcpServers:y.record(y.string(),tO)}).passthrough()});import{existsSync as VN,mkdirSync as HN,readFileSync as BN,writeFileSync as AN}from"node:fs";import{resolve as KN}from"node:path";import{resolveSessionDataDir as GN}from"@cline/shared/storage";import{nanoid as FN}from"nanoid";import*as DN from"node-machine-id";function b0($){let J=$?.trim();if(J)return J;let Q=LN();if(Q)return Q;return zN()}function RN(){let $=DN;return $.machineIdSync??$.default?.machineIdSync}function LN(){try{let $=RN();if(!$)return;return $().trim()||void 0}catch{return}}function zN(){let $=GN(),J=KN($,UN);try{if(VN(J)){let Z=BN(J,"utf8").trim();if(Z.length>0)return Z}}catch{}let Q=`cl-${FN()}`;try{HN($,{recursive:!0}),AN(J,Q,"utf8")}catch{}return Q}var UN="machine-id";var m8=()=>{};class RJ{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($,J){if(!this.isEnabled())return;this.emitLog($,J,!1)}emitRequired($,J){this.emitLog($,J,!0)}recordCounter($,J,Q,Z,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let j=this.counters.get($);if(!j)j=this.meter.createCounter($,Z?{description:Z}:void 0),this.counters.set($,j);j.add(J,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,J,Q,Z,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let j=this.histograms.get($);if(!j)j=this.meter.createHistogram($,Z?{description:Z}:void 0),this.histograms.set($,j);j.record(J,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,J,Q,Z,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let j=this.buildAttributes(Q),X=JSON.stringify(j),f=this.gaugeValues.get($);if(J===null){if(f){if(f.delete(X),f.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let Y=f;if(!Y)Y=new Map,this.gaugeValues.set($,Y);if(!this.gauges.has($)){let V=this.meter.createObservableGauge($,Z?{description:Z}:void 0);V.addCallback((H)=>{for(let B of this.snapshotGaugeSeries($))H.observe(B.value,this.flattenProperties(B.attributes))}),this.gauges.set($,V)}Y.set(X,{value:J,attributes:j})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog($,J,Q){if(!this.logger)return;let Z=this.flattenProperties(this.buildAttributes(J,Q));this.logger.emit({severityText:"INFO",body:$,attributes:Z})}buildAttributes($,J=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...J?{_required:!0}:{}}}snapshotGaugeSeries($){let J=this.gaugeValues.get($);if(!J)return[];return Array.from(J.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,J="",Q=new WeakSet,Z=0){if(!$)return{};let W={},j=100,X=10;for(let[f,Y]of Object.entries($)){if(f==="__proto__"||f==="constructor"||f==="prototype")continue;let V=J?`${J}.${f}`:f;if(Y===null||Y===void 0){W[V]=String(Y);continue}if(Array.isArray(Y)){let H=Y.length>j?Y.slice(0,j):Y;try{W[V]=JSON.stringify(H)}catch{W[V]="[UnserializableArray]"}if(Y.length>j)W[`${V}_truncated`]=!0,W[`${V}_original_length`]=Y.length;continue}if(typeof Y==="object"){if(Y instanceof Date){W[V]=Y.toISOString();continue}if(Y instanceof Error){W[V]=Y.message;continue}if(Q.has(Y)){W[V]="[Circular]";continue}if(Z>=X){W[V]="[MaxDepthExceeded]";continue}Q.add(Y),Object.assign(W,this.flattenProperties(Y,V,Q,Z+1));continue}if(Iw(Y)){W[V]=Y;continue}try{W[V]=JSON.stringify(Y)}catch{W[V]=String(Y)}}return W}}function Iw($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class LJ{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,J){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:J})}emitRequired($,J){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:J})}recordCounter($,J,Q,Z,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:J,attributes:Q,description:Z,required:W===!0})}recordHistogram($,J,Q,Z,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:J,attributes:Q,description:Z,required:W===!0})}recordGauge($,J,Q,Z,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:J,attributes:Q,description:Z,required:W===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class t8{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new LJ({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 J=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,J)}captureRequired($,J){let Q=this.buildAttributes(J);for(let Z of this.adapters)Z.emitRequired($,Q)}recordCounter($,J,Q,Z,W=!1){let j=this.buildAttributes(Q);for(let X of this.adapters)X.recordCounter($,J,j,Z,W)}recordHistogram($,J,Q,Z,W=!1){let j=this.buildAttributes(Q);for(let X of this.adapters)X.recordHistogram($,J,j,Z,W)}recordGauge($,J,Q,Z,W=!1){let j=this.buildAttributes(Q);for(let X of this.adapters)X.recordGauge($,J,j,Z,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 H3=()=>{};import{metrics as xw,trace as gw}from"@opentelemetry/api";import{logs as mw}from"@opentelemetry/api-logs";import{OTLPLogExporter as vw}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as cw}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as uw}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as dw}from"@opentelemetry/resources";import{BatchLogRecordProcessor as lw,ConsoleLogRecordExporter as pw,LoggerProvider as rw}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as iw,MeterProvider as nw,PeriodicExportingMetricReader as iA}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as aw,ConsoleSpanExporter as sw,SimpleSpanProcessor as ow}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as tw}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as ew,ATTR_SERVICE_VERSION as $S}from"@opentelemetry/semantic-conventions";class nA{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($,J){this.resolveProperties(J)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class e8{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let J=dw({[ew]:$.serviceName??"cline",...$.serviceVersion?{[$S]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(J),this.loggerProvider=this.createLoggerProvider(J),this.tracerProvider=this.createTracerProvider(J),this.meterProvider)xw.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)mw.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",J){return gw.getTracer($,J??this.options.serviceVersion)}createAdapter($){return new RJ({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let J=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new t8({...$,adapters:[J],distinctId:b0($.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 J=B3(this.options.metricsExporter);if(J.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),Z=Math.min(30000,Math.floor(Q*0.8)),W=J.map((j)=>ZS(j,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:Z})).filter((j)=>j!==null);if(W.length===0)return null;return new nw({resource:$,readers:W})}createTracerProvider($){let J=B3(this.options.tracesExporter);if(J.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,Z=this.options.otlpTracesHeaders??this.options.otlpHeaders,W=[];for(let j of J){let X=QS(j,{endpoint:Q,headers:Z,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(X)W.push(X)}if(W.length===0)return null;return new tw({resource:$,spanProcessors:W})}createLoggerProvider($){let J=B3(this.options.logsExporter);if(J.length===0)return null;let Q=J.map((Z)=>{let W=JS(Z,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!W)return null;return new lw(W,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((Z)=>Z!==null);if(Q.length===0)return null;return new rw({resource:$,processors:Q})}}function zJ($){let J=new e8($),Q=J.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:J,telemetry:Q}}function s1($){if(O5())return{telemetry:new nA($)};if($.enabled!==!0)return{telemetry:new t8({...$,distinctId:b0($.distinctId)})};return zJ($)}function $4($){let{telemetry:J,provider:Q}=s1($);return{telemetry:J,provider:Q,flush:async()=>{let j=Q;if(j&&typeof j.forceFlush==="function")try{await j.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([J.dispose(),Q?.dispose()])}}}function B3($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function JS($,J){if($==="console")return new pw;if(!J.endpoint)return null;let Q=A3(J.endpoint,"/v1/logs");return new vw({url:Q,headers:J.headers})}function QS($,J){if($==="console")return new ow(new sw);if(!J.endpoint)return null;let Q=A3(J.endpoint,"/v1/traces");return new aw(new uw({url:Q,headers:J.headers}))}function ZS($,J){if($==="console")return new iA({exporter:new iw,exportIntervalMillis:J.interval,exportTimeoutMillis:J.timeout});if(!J.endpoint)return null;let Q=A3(J.endpoint,"/v1/metrics");return new iA({exporter:new cw({url:Q,headers:J.headers}),exportIntervalMillis:J.interval,exportTimeoutMillis:J.timeout})}function A3($,J){let Q=new URL($),Z=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=Z.endsWith(J)?Z:`${Z}${J}`,Q.toString()}var GQ=h$(()=>{W1();m8();H3()});var JG={};w(JG,{resolveCoreDistinctId:()=>b0,createOpenTelemetryTelemetryService:()=>zJ,createConfiguredTelemetryService:()=>s1,createConfiguredTelemetryHandle:()=>$4,OpenTelemetryProvider:()=>e8,OpenTelemetryAdapter:()=>RJ});var MQ=h$(()=>{m8();GQ()});import{AgentRuntimeAbortError as eb}from"@cline/agents";import{initVcr as $h,resolveClineBuildEnv as Jh}from"@cline/shared";import{normalizeProviderId as sb}from"@cline/llms";var WF={};w(WF,{LocalRuntimeHost:()=>z1});import{readdirSync as cb}from"node:fs";import{homedir as ub}from"node:os";import{isAbsolute as db,join as mj,resolve as vj}from"node:path";import{captureSdkError as h2,createSessionId as lb,isLikelyAuthError as pb,normalizeUserInput as rb}from"@cline/shared";import{setHomeDirIfUnset as ib}from"@cline/shared/storage";var PX={};w(PX,{saveProviderOAuthCredentials:()=>x$,resolveProviderApiKeyFromSettings:()=>DZ,loginAndSaveProviderOAuthCredentials:()=>z4,isOAuthProvider:()=>I$,getProviderOAuthCredentialsFromSettings:()=>_4,getProviderAuthStorageId:()=>FZ,getProviderAuthHandler:()=>W0,getPersistedProviderApiKey:()=>l2,formatProviderOAuthApiKey:()=>UZ});import{getClineEnvironmentConfig as MX}from"@cline/shared";O0();var fX={};w(fX,{startClineDeviceAuth:()=>HZ,refreshClineToken:()=>Q5,loginClineOAuth:()=>K4,getValidClineCredentials:()=>G4,completeClineDeviceAuth:()=>BZ});import{getClineEnvironmentConfig as jZ}from"@cline/shared";var tj={};w(tj,{startLocalOAuthServer:()=>J1});function MF(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function J1($){let J=await import("node:http"),Q=$.host??"127.0.0.1",Z=$.timeoutMs??300000,W=$.successHtml??qF,j=MF(),X=!1,f=null,Y=null,V=null,H=(K)=>{if(X)return;X=!0,j.resolve(K)},B=()=>{if(f)clearTimeout(f),f=null;let K=V;if(V=null,Y)Y.close(),Y=null;if(K!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:K})).catch(()=>{})},A=async()=>{return f=setTimeout(()=>{B(),H(null)},Z),j.promise};for(let K of $.ports){let G=J.createServer((D,U)=>{try{let F=new URL(D.url||"",`http://${Q}:${K}`);if(F.pathname!==$.callbackPath){U.statusCode=404,U.end("Not found");return}let O={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(O.error){U.statusCode=400,U.end(`Authentication failed: ${O.error}`),B(),H(O);return}if(!O.code){U.statusCode=400,U.end("Missing authorization code");return}if($.expectedState&&O.state!==$.expectedState){U.statusCode=400,U.end("State mismatch");return}U.statusCode=200,U.setHeader("Content-Type","text/html; charset=utf-8"),U.end(W),B(),H(O)}catch{U.statusCode=500,U.end("Internal error")}}),R=await new Promise((D)=>{let U=(F)=>{G.off("error",U),D({bound:!1,error:F})};G.once("error",U),G.listen(K,Q,()=>{G.off("error",U),Y=G,D({bound:!0})})});if(R.error){if(R.error.code==="EADDRINUSE")continue;throw B(),R.error}if(R.bound){V=K;let D=`http://${Q}:${K}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:K,callbackUrl:D})).catch(()=>{});return{callbackUrl:D,waitForCallback:A,cancelWait:()=>{B(),H(null)},close:()=>{B(),H(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var qF=`<!DOCTYPE html>
6
6
  <html lang="en">
7
7
  <head>
8
8
  <meta charset="utf-8">
@@ -43,7 +43,7 @@ import{createRequire as RF}from"node:module";var{defineProperty:WZ,getOwnPropert
43
43
  </div>
44
44
  <script>setTimeout(() => window.close(), 3000);</script>
45
45
  </body>
46
- </html>`;function ej($){let J="";for(let Q=0;Q<$.length;Q+=1)J+=String.fromCharCode($[Q]??0);return btoa(J).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function PF($){let Q=new TextEncoder().encode($),Z=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(Z)}function NF($=32){let J=new Uint8Array($);return crypto.getRandomValues(J),ej(J)}async function eJ(){let $=NF(),J=ej(await PF($));return{verifier:$,challenge:J}}function $5($){return $.endsWith("/")?$.slice(0,-1):$}function k$($,J){return new URL(J,`${$5($)}/`).toString()}function m2($,J={}){let Q=$.trim();if(!Q)return{};try{let Z=new URL(Q);return{code:Z.searchParams.get("code")??void 0,state:Z.searchParams.get("state")??void 0,provider:J.includeProvider?Z.searchParams.get("provider")??void 0:void 0}}catch{}if(J.allowHashCodeState&&Q.includes("#")){let[Z,W]=Q.split("#",2);return{code:Z||void 0,state:W||void 0}}if(Q.includes("code=")){let Z=new URLSearchParams(Q);return{code:Z.get("code")??void 0,state:Z.get("state")??void 0,provider:J.includeProvider?Z.get("provider")??void 0:void 0}}return{code:Q}}function wF($){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 T0($){if(!$)return null;try{let J=$.split(".");if(J.length!==3)return null;let Q=J[1];if(!Q)return null;let Z=Q.replace(/-/g,"+").replace(/_/g,"/"),W=Z.padEnd(Z.length+(4-Z.length%4)%4,"="),j=wF(W);if(!j)return null;return JSON.parse(j)}catch{return null}}function v2($){try{let J=JSON.parse($),Q=J.error,Z=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,W=typeof J.error_description==="string"?J.error_description:typeof J.message==="string"?J.message:Q&&typeof Q==="object"&&typeof Q.message==="string"?Q.message:void 0;return{code:Z,message:W}}catch{return{}}}function c2($,J){return Date.now()>=$.expires-J}async function u2($){if(!$.onManualCodeInput){let j=await $.waitForCallback();return{code:j?.code,state:j?.state,provider:j?.provider,error:j?.error}}let J,Q,Z=$.onManualCodeInput().then((j)=>{J=j,$.cancelWait()}).catch((j)=>{Q=j instanceof Error?j:Error(String(j)),$.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(J)return m2(J,$.parseOptions);if(await Z,Q)throw Q;if(J)return m2(J,$.parseOptions);return{}}var J5={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},ZX={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},XZ="https://api.workos.com",SF="/auth",$X=Array.from({length:11},($,J)=>48801+J),CF=300000,yF=30000,d2=30000,EF=300,bF=5;class J$ extends Error{status;errorCode;constructor($,J){super($);this.name="ClineOAuthTokenError",this.status=J?.status,this.errorCode=J?.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 hF($){let J=Date.parse($);if(Number.isNaN(J))throw Error(`Invalid expiresAt value: ${$}`);return J}function fZ($,J,Q={}){let Z=$.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:hF($.expiresAt),accountId:Z??void 0,email:$.userInfo.email||Q.email,metadata:{provider:J,tokenType:$.tokenType,userInfo:$.userInfo}}}async function YZ($){if(!$)return{};return typeof $==="function"?await $():$}function JX($,J){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return J;return Math.floor($)}async function QX($){await new Promise((J)=>setTimeout(J,$))}function VZ($,J){if(!$.success||!$.data?.accessToken)throw Error(J);return $.data}async function WX($,J){let Q=await fetch(k$(XZ,ZX.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(J?.requestTimeoutMs??d2)}),Z=await Q.json().catch(()=>({}));if(!Q.ok)throw new J$(`Device authorization failed: ${Q.status}${Z.error_description?` - ${Z.error_description}`:""}`,{status:Q.status,errorCode:Z.error});if(!Z.device_code||!Z.user_code||!Z.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:Z.device_code,userCode:Z.user_code,verificationUri:Z.verification_uri,verificationUriComplete:Z.verification_uri_complete,expiresInSeconds:JX(Z.expires_in,EF),pollIntervalSeconds:JX(Z.interval,bF)}}async function jX($){let J=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=J){let Z=await fetch(k$($.workosApiBaseUrl,ZX.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 Z.json().catch(()=>({}));if(Z.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 QX(Q*1000);break}case"slow_down":{Q+=1,await QX(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new J$(W.error_description||"WorkOS authorization failed",{status:Z.status,errorCode:W.error});default:throw new J$(`WorkOS token polling failed: ${Z.status}${W.error_description?` - ${W.error_description}`:""}`,{status:Z.status,errorCode:W.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function XX($,J,Q){let Z={accessToken:$.accessToken,refreshToken:$.refreshToken},W=await fetch(k$(J.apiBaseUrl,J5.register),{method:"POST",headers:{"Content-Type":"application/json",...await YZ(J.headers)},body:JSON.stringify(Z),signal:AbortSignal.timeout(J.requestTimeoutMs??d2)});if(!W.ok){let X=await W.text().catch(()=>""),f=v2(X);throw new J$(`Token registration failed: ${W.status}${f.message?` - ${f.message}`:""}`,{status:W.status,errorCode:f.code})}let j=await W.json();return fZ(VZ(j,"Invalid token exchange response"),Q??J.provider)}async function kF($,J,Q,Z){let W={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:J,provider:Z??Q.provider},j=await fetch(k$(Q.apiBaseUrl,J5.token),{method:"POST",headers:{"Content-Type":"application/json",...await YZ(Q.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Q.requestTimeoutMs??d2)});if(!j.ok){let f=await j.text().catch(()=>""),Y=v2(f);throw new J$(`Token exchange failed: ${j.status}${Y.message?` - ${Y.message}`:""}`,{status:j.status,errorCode:Y.code})}let X=await j.json();return fZ(VZ(X,"Invalid token exchange response"),Z??Q.provider)}async function K4($){P1($.telemetry,$.provider??"cline");let J=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:$X,Z=$.callbackPath??SF,W=J?null:await J1({ports:Q,callbackPath:Z,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=W?.callbackUrl||`http://127.0.0.1:${Q[0]??$X[0]}${Z}`;try{let X;if(J){let f=jZ().workOsClientId,Y=await WX(f,$);$.callbacks.onAuth({url:Y.verificationUriComplete??Y.verificationUri,instructions:`Enter this code in your browser: ${Y.userCode}`});let V=await jX({clientId:f,deviceCode:Y.deviceCode,expiresInSeconds:Y.expiresInSeconds,initialPollIntervalSeconds:Y.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??d2,workosApiBaseUrl:XZ,onProgress:$.callbacks.onProgress});X=await XX(V,$,$.provider)}else{let f=new URL(k$($.apiBaseUrl,J5.authorize));f.searchParams.set("client_type","extension"),f.searchParams.set("callback_url",j),f.searchParams.set("redirect_uri",j),$.callbacks.onAuth({url:f.toString(),instructions:"Continue the authentication process in your browser."});let Y,V=$.provider,H=await u2({waitForCallback:W?.waitForCallback??(async()=>null),cancelWait:W?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(H.error)throw Error(`OAuth error: ${H.error}`);if(Y=H.code,V=H.provider??V,!Y){let B=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),A=m2(B,{includeProvider:!0});Y=A.code,V=A.provider??V}if(!Y)throw Error("Missing authorization code");X=await kF(Y,j,$,V)}return N1($.telemetry,$.provider??"cline"),S1($.telemetry,{id:X.accountId,email:X.email,provider:$.provider??"cline"}),X}catch(X){throw w1($.telemetry,$.provider??"cline",X instanceof Error?X.message:String(X)),X}finally{W?.close()}}async function HZ($){return await WX(jZ().workOsClientId,$)}async function BZ($){let J=$.provider??"cline";P1($.telemetry,J);try{let Q=await jX({clientId:jZ().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??d2,workosApiBaseUrl:XZ}),Z=await XX(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return N1($.telemetry,J),S1($.telemetry,{id:Z.accountId,email:Z.email,provider:J}),Z}catch(Q){throw w1($.telemetry,J,Q instanceof Error?Q.message:String(Q)),Q}}async function Q5($,J){let Q=await fetch(k$(J.apiBaseUrl,J5.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await YZ(J.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(J.requestTimeoutMs??d2)});if(!Q.ok){let j=await Q.text().catch(()=>""),X=v2(j);throw new J$(`Token refresh failed: ${Q.status}${X.message?` - ${X.message}`:""}`,{status:Q.status,errorCode:X.code})}let Z=await Q.json(),W=$.metadata?.provider??J.provider;return fZ(VZ(Z,"Invalid token refresh response"),W,$)}async function G4($,J,Q){if(!$)return null;let Z=Q?.refreshBufferMs??CF,W=Q?.retryableTokenGraceMs??yF;if(Q?.forceRefresh!==!0&&!c2($,Z))return $;try{return await Q5($,J)}catch(X){if(X instanceof J$&&X.isLikelyInvalidGrant())return e1(J.telemetry,J.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}O0();var VX={};w(VX,{refreshOpenAICodexToken:()=>W5,loginOpenAICodex:()=>F4,getValidOpenAICodexCredentials:()=>D4,OPENAI_CODEX_OAUTH_CONFIG:()=>$0});import{nanoid as IF}from"nanoid";var $0={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 Z5 extends Error{status;errorCode;constructor($,J){super($);this.name="OpenAICodexOAuthTokenError",this.status=J?.status,this.errorCode=J?.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 xF($,J,Q=$0.redirectUri){let Z=await fetch($0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:$0.clientId,code:$,code_verifier:J,redirect_uri:Q}),signal:AbortSignal.timeout($0.httpTimeoutMs)});if(!Z.ok)return{type:"failed"};let W=await Z.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 gF($){try{let J=await fetch($0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:$0.clientId}),signal:AbortSignal.timeout($0.httpTimeoutMs)});if(!J.ok){let Z=await J.text().catch(()=>""),W=v2(Z);throw new Z5(`Token refresh failed: ${J.status}${W.message?` - ${W.message}`:""}`,{status:J.status,errorCode:W.code})}let Q=await J.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(J){if(J instanceof Z5)throw J;return{type:"failed"}}}async function mF($="pi"){let{verifier:J,challenge:Q}=await eJ(),Z=IF(32),W=new URL($0.authorizationEndpoint);return W.searchParams.set("response_type","code"),W.searchParams.set("client_id",$0.clientId),W.searchParams.set("redirect_uri",$0.redirectUri),W.searchParams.set("scope",$0.scopes),W.searchParams.set("code_challenge",Q),W.searchParams.set("code_challenge_method","S256"),W.searchParams.set("state",Z),W.searchParams.set("id_token_add_organizations","true"),W.searchParams.set("codex_cli_simplified_flow","true"),W.searchParams.set("originator",$),{verifier:J,state:Z,url:W.toString()}}function vF(){try{let $=new URL($0.redirectUri),J=$.port.length>0?Number.parseInt($.port,10):$0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(J)?J:$0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:$0.callbackPort,callbackPath:"/auth/callback",redirectUri:$0.redirectUri}}}function cF($,J){let Q=J?T0(J):T0($),Z=Q?Q:T0($),j=Z?.[$0.jwtClaimPath]?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;let X=Z?.organizations;if(Array.isArray(X)&&X.length>0){let Y=X[0];if(typeof Y?.id==="string"&&Y.id.length>0)return Y.id}let f=Z?.chatgpt_account_id;if(typeof f==="string"&&f.length>0)return f;return null}function YX($,J){let Q=cF($.access,$.idToken)??J?.accountId;if(!Q)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||J?.refresh||"",expires:$.expires,accountId:Q,email:$.email??J?.email,metadata:{...J?.metadata??{},provider:"openai-codex"}}}async function F4($){P1($.telemetry,"openai-codex");let J=vF(),{verifier:Q,state:Z,url:W}=await mF($.originator),j=await J1({host:J.host,ports:[J.port],callbackPath:J.callbackPath,expectedState:Z});$.onAuth({url:W,instructions:"Continue the authentication process in your browser."});let X;try{let f=await u2({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(f.state&&f.state!==Z)throw Error("State mismatch");if(X=f.code,!X){let H=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),B=m2(H,{allowHashCodeState:!0});if(B.state&&B.state!==Z)throw Error("State mismatch");X=B.code}if(!X)throw Error("Missing authorization code");let Y=await xF(X,Q,J.redirectUri);if(Y.type!=="success")throw Error("Token exchange failed");let V=YX(Y);return N1($.telemetry,"openai-codex"),S1($.telemetry,{id:V.accountId,email:V.email,provider:"openai-codex"}),V}catch(f){throw w1($.telemetry,"openai-codex",f instanceof Error?f.message:String(f)),f}finally{j.close()}}async function W5($,J){let Q=await gF($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let Z=YX(Q,J);if(!Z.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return Z}async function D4($,J){if(!$)return null;let Q=J?.refreshBufferMs??$0.refreshBufferMs,Z=J?.retryableTokenGraceMs??$0.retryableTokenGraceMs;if(J?.forceRefresh!==!0&&!c2($,Q))return $;try{return await W5($.refresh,$)}catch(j){if(j instanceof Z5&&j.isLikelyInvalidGrant())return e1(J?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>Z)return $;return null}}O0();var TX={};w(TX,{refreshOcaToken:()=>Y5,loginOcaOAuth:()=>R4,getValidOcaCredentials:()=>L4,OCI_HEADER_OPC_REQUEST_ID:()=>uF,DEFAULT_INTERNAL_OCA_BASE_URL:()=>j5,DEFAULT_INTERNAL_IDCS_URL:()=>AX,DEFAULT_INTERNAL_IDCS_SCOPES:()=>KX,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>BX,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>X5,DEFAULT_EXTERNAL_IDCS_URL:()=>FX,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>DX,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>GX});import{nanoid as HX}from"nanoid";class AZ{ttlMs;maxEntries;entries=new Map;constructor($,J){this.ttlMs=$;this.maxEntries=J}get($,J=Date.now()){this.pruneExpired(J);let Q=this.entries.get($);if(!Q)return;return this.entries.delete($),this.entries.set($,Q),Q.value}set($,J,Q=Date.now(),Z=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:J,expiresAt:Q+Z})}pruneExpired($){for(let[J,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(J)}}var BX="a8331954c0cf48ba99b5dd223a14c6ea",AX="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",KX="openid offline_access",j5="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",GX="c1aba3deed5740659981a752714eba33",FX="https://login-ext.identity.oraclecloud.com",DX="openid offline_access",X5="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",uF="opc-request-id",dF="/auth/oca",lF=Array.from({length:11},($,J)=>48801+J),pF=300000,rF=30000,UX=30000,iF=600000;class f5 extends Error{status;errorCode;constructor($,J){super($);this.name="OcaOAuthTokenError",this.status=J?.status,this.errorCode=J?.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 Q$={internal:{clientId:BX,idcsUrl:AX,scopes:KX,baseUrl:j5},external:{clientId:GX,idcsUrl:FX,scopes:DX,baseUrl:X5}},U4=new Map,nF=86400000,aF=300000,sF=32,KZ=new AZ(nF,sF);function RX($){if(typeof $==="function")return $();return $??"internal"}function LX($){return{internal:{clientId:$?.internal?.clientId??Q$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??Q$.internal.idcsUrl,scopes:$?.internal?.scopes??Q$.internal.scopes,baseUrl:$?.internal?.baseUrl??Q$.internal.baseUrl},external:{clientId:$?.external?.clientId??Q$.external.clientId,idcsUrl:$?.external?.idcsUrl??Q$.external.idcsUrl,scopes:$?.external?.scopes??Q$.external.scopes,baseUrl:$?.external?.baseUrl??Q$.external.baseUrl}}}function oF($=Date.now()){let J=$-iF;for(let[Q,Z]of U4.entries())if(Z.createdAt<J)U4.delete(Q)}function tF($,J,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let W=T0(J)?.exp;if(typeof W==="number"&&W>0)return W*1000;let X=T0(Q)?.exp;if(typeof X==="number"&&X>0)return X*1000;return Date.now()+3600000}function zX($,J,Q){let Z=$.access_token;if(!Z)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 j=T0($.id_token),X=T0(Z),f=j?.sub??X?.sub,Y=j?.email??X?.email;return{access:Z,refresh:W,expires:tF($,Z,$.id_token),accountId:f??Q?.accountId,email:Y??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:J,subject:f,idToken:$.id_token}}}async function _X($,J){let Q=$5($),Z=KZ.get(Q);if(Z)return Z;let W=`${Q}/.well-known/openid-configuration`,j=await fetch(W,{method:"GET",signal:AbortSignal.timeout(J)});if(!j.ok){let Y=`${Q}/oauth2/v1/token`;return KZ.set(Q,Y,Date.now(),aF),Y}let f=(await j.json()).token_endpoint||`${Q}/oauth2/v1/token`;return KZ.set(Q,f),f}function OX($){return{code:$.error,message:$.error_description}}async function eF($){let J=U4.get($.state);if(!J)throw Error("No PKCE verifier found for this state");U4.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,Z=await _X(Q.idcsUrl,$.requestTimeoutMs),W=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:J.redirectUri,client_id:Q.clientId,code_verifier:J.verifier}),j=await fetch(Z,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:W,signal:AbortSignal.timeout($.requestTimeoutMs)}),X=await j.json();if(!j.ok){let Y=OX(X);throw new f5(`Token exchange failed: ${j.status}${Y.message?` - ${Y.message}`:""}`,{status:j.status,errorCode:Y.code})}let f=T0(X.id_token);if(!X.id_token||!f)throw Error("No ID token received from OCA");if(f.nonce!==J.nonce)throw Error("OIDC nonce verification failed");return zX(X,$.mode)}function $D($){let J=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${$5(J.idcsUrl)}/oauth2/v1/authorize`);return Q.searchParams.set("client_id",J.clientId),Q.searchParams.set("response_type","code"),Q.searchParams.set("scope",J.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 R4($){P1($.telemetry,"oca");let J=LX($.config),Q=RX($.mode),Z=$.callbackPorts?.length?$.callbackPorts:lF,W=$.callbackPath??dF,j=$.requestTimeoutMs??UX,X=await J1({ports:Z,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),f=X.callbackUrl;if(!f)throw Error("Unable to bind local OAuth callback server");let Y=HX(16),V=HX(16),{verifier:H,challenge:B}=await eJ();oF(),U4.set(Y,{verifier:H,nonce:V,mode:Q,redirectUri:f,createdAt:Date.now()});let A=$D({callbackUrl:f,mode:Q,state:Y,nonce:V,challenge:B,config:J});$.callbacks.onAuth({url:A,instructions:"Continue the authentication process in your browser."});try{let K=await u2({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),G=K.code,R=K.state;if(K.error)throw Error(`OAuth error: ${K.error}`);if(!G){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!R||R!==Y)throw Error("State mismatch");let D=await eF({code:G,state:R,mode:Q,config:J,requestTimeoutMs:j});return N1($.telemetry,"oca"),S1($.telemetry,{id:D.accountId,email:D.email,provider:"oca"}),D}catch(K){throw w1($.telemetry,"oca",K instanceof Error?K.message:String(K)),K}finally{X.close()}}async function Y5($,J={}){let Q=LX(J.config),Z=J.requestTimeoutMs??UX,W=$.metadata?.mode,j=W==="internal"||W==="external"?W:RX(J.mode),X=j==="external"?Q.external:Q.internal,f=await _X(X.idcsUrl,Z),Y=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:X.clientId}),V=await fetch(f,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:Y,signal:AbortSignal.timeout(Z)}),H=await V.json();if(!V.ok){let B=OX(H);throw new f5(`Token refresh failed: ${V.status}${B.message?` - ${B.message}`:""}`,{status:V.status,errorCode:B.code})}return zX(H,j,$)}async function L4($,J,Q){if(!$)return null;let Z=J?.refreshBufferMs??Q?.refreshBufferMs??pF,W=J?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??rF;if(J?.forceRefresh!==!0&&!c2($,Z))return $;try{return await Y5($,Q)}catch(X){if(X instanceof f5&&X.isLikelyInvalidGrant())return e1(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}var V5="workos:";function JD($){let J=$.trim();return J.toLowerCase().startsWith(V5)?J:`${V5}${J}`}function QD($){let J=$.trim();return J.toLowerCase().startsWith(V5)?J.slice(V5.length):J}function ZD($){let Q=T0($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function WD($,J){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let Z=ZD(J);if(Z)return Z;return Date.now()-1}function jD($,J){let Q=$.auth?.accessToken?.trim(),Z=$.auth?.refreshToken?.trim();if(!Q||!Z)return null;let W=J?.normalizeAccessToken?.(Q)??Q;if(!W)return null;return{access:W,refresh:Z,expires:WD($,W),accountId:$.auth?.accountId}}function XD($){let J=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:J,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},Z={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(Z,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return Z}function GZ($){let J=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:J,getApiKey(Q){let Z=Q?.auth?.accessToken?.trim();if(Z)return $.formatAccessToken?.(Z)??Z;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return XD({...Q,storageProviderId:J,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function qX($){return GZ({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:JD,normalizeStoredAccessToken:QD,login:({settings:J,callbacks:Q,telemetry:Z})=>K4({apiBaseUrl:J?.baseUrl?.trim()||MX().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:Z}),refresh:({settings:J,credentials:Q,forceRefresh:Z,telemetry:W})=>G4(Q,{apiBaseUrl:J.baseUrl?.trim()||MX().apiBaseUrl,telemetry:W},{forceRefresh:Z})})}var fD=[qX({providerId:"cline"}),qX({providerId:"cline-pass",storageProviderId:"cline"}),GZ({providerId:"oca",login:({settings:$,callbacks:J,telemetry:Q})=>R4({mode:$?.oca?.mode,callbacks:J,telemetry:Q}),refresh:({settings:$,credentials:J,forceRefresh:Q,telemetry:Z})=>L4(J,{forceRefresh:Q,telemetry:Z},{mode:$.oca?.mode,telemetry:Z})}),GZ({providerId:"openai-codex",login:({callbacks:$,telemetry:J})=>F4({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:J}),refresh:({credentials:$,forceRefresh:J,telemetry:Q})=>D4($,{forceRefresh:J,telemetry:Q})})],YD=new Map(fD.map(($)=>[$.providerId,$]));function Z0($){return YD.get($.trim().toLowerCase())}function I$($){return Z0($)!==void 0}function FZ($){return Z0($)?.storageProviderId}function DZ($,J){let Q=Z0(J),Z=Q?.storageProviderId??J,W=$.getProviderSettings(Z);return Q?.getApiKey(W)??l2(J,W)}async function z4($,J,Q){let Z=Z0(J);if(!Z)throw Error(`Provider "${J}" does not support OAuth login`);let W=$.getProviderSettings(Z.storageProviderId),j=await Z.login({settings:W,callbacks:Q.callbacks,telemetry:Q.telemetry});return Z.saveCredentials({manager:$,settings:W,credentials:j})}function _4($,J){let Q=Z0($);if(!Q)return null;return jD(J,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function x$($){let J=Z0($.providerId);if(!J)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return J.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function l2($,J){let Q=Z0($);if(Q)return Q.getApiKey(J);return J?.auth?.accessToken?.trim()||J?.apiKey?.trim()||J?.auth?.apiKey?.trim()||void 0}function UZ($,J){let Q=Z0($);if(!Q)return J.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:J.access}})??J.access}O0();var tX={};w(tX,{createContextCompactionPrepareTurn:()=>N4});import{createHandlerAsync as KD}from"@cline/llms";import{estimateTokens as RZ}from"@cline/shared";var SX=200000,LZ=0.9,CX=16384,zZ=20000,NX=1024,wX=2000,yX=2000,EX=8;function Z$($,J){if($.length<=J)return $;return`${$.slice(0,J)}
46
+ </html>`;function ej($){let J="";for(let Q=0;Q<$.length;Q+=1)J+=String.fromCharCode($[Q]??0);return btoa(J).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function PF($){let Q=new TextEncoder().encode($),Z=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(Z)}function NF($=32){let J=new Uint8Array($);return crypto.getRandomValues(J),ej(J)}async function eJ(){let $=NF(),J=ej(await PF($));return{verifier:$,challenge:J}}function $5($){return $.endsWith("/")?$.slice(0,-1):$}function k$($,J){return new URL(J,`${$5($)}/`).toString()}function m2($,J={}){let Q=$.trim();if(!Q)return{};try{let Z=new URL(Q);return{code:Z.searchParams.get("code")??void 0,state:Z.searchParams.get("state")??void 0,provider:J.includeProvider?Z.searchParams.get("provider")??void 0:void 0}}catch{}if(J.allowHashCodeState&&Q.includes("#")){let[Z,W]=Q.split("#",2);return{code:Z||void 0,state:W||void 0}}if(Q.includes("code=")){let Z=new URLSearchParams(Q);return{code:Z.get("code")??void 0,state:Z.get("state")??void 0,provider:J.includeProvider?Z.get("provider")??void 0:void 0}}return{code:Q}}function wF($){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 T0($){if(!$)return null;try{let J=$.split(".");if(J.length!==3)return null;let Q=J[1];if(!Q)return null;let Z=Q.replace(/-/g,"+").replace(/_/g,"/"),W=Z.padEnd(Z.length+(4-Z.length%4)%4,"="),j=wF(W);if(!j)return null;return JSON.parse(j)}catch{return null}}function v2($){try{let J=JSON.parse($),Q=J.error,Z=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,W=typeof J.error_description==="string"?J.error_description:typeof J.message==="string"?J.message:Q&&typeof Q==="object"&&typeof Q.message==="string"?Q.message:void 0;return{code:Z,message:W}}catch{return{}}}function c2($,J){return Date.now()>=$.expires-J}async function u2($){if(!$.onManualCodeInput){let j=await $.waitForCallback();return{code:j?.code,state:j?.state,provider:j?.provider,error:j?.error}}let J,Q,Z=$.onManualCodeInput().then((j)=>{J=j,$.cancelWait()}).catch((j)=>{Q=j instanceof Error?j:Error(String(j)),$.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(J)return m2(J,$.parseOptions);if(await Z,Q)throw Q;if(J)return m2(J,$.parseOptions);return{}}var J5={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},ZX={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},XZ="https://api.workos.com",SF="/auth",$X=Array.from({length:11},($,J)=>48801+J),CF=300000,yF=30000,d2=30000,EF=300,bF=5;class J$ extends Error{status;errorCode;constructor($,J){super($);this.name="ClineOAuthTokenError",this.status=J?.status,this.errorCode=J?.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 hF($){let J=Date.parse($);if(Number.isNaN(J))throw Error(`Invalid expiresAt value: ${$}`);return J}function fZ($,J,Q={}){let Z=$.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:hF($.expiresAt),accountId:Z??void 0,email:$.userInfo.email||Q.email,metadata:{provider:J,tokenType:$.tokenType,userInfo:$.userInfo}}}async function YZ($){if(!$)return{};return typeof $==="function"?await $():$}function JX($,J){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return J;return Math.floor($)}async function QX($){await new Promise((J)=>setTimeout(J,$))}function VZ($,J){if(!$.success||!$.data?.accessToken)throw Error(J);return $.data}async function WX($,J){let Q=await fetch(k$(XZ,ZX.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(J?.requestTimeoutMs??d2)}),Z=await Q.json().catch(()=>({}));if(!Q.ok)throw new J$(`Device authorization failed: ${Q.status}${Z.error_description?` - ${Z.error_description}`:""}`,{status:Q.status,errorCode:Z.error});if(!Z.device_code||!Z.user_code||!Z.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:Z.device_code,userCode:Z.user_code,verificationUri:Z.verification_uri,verificationUriComplete:Z.verification_uri_complete,expiresInSeconds:JX(Z.expires_in,EF),pollIntervalSeconds:JX(Z.interval,bF)}}async function jX($){let J=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=J){let Z=await fetch(k$($.workosApiBaseUrl,ZX.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 Z.json().catch(()=>({}));if(Z.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 QX(Q*1000);break}case"slow_down":{Q+=1,await QX(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new J$(W.error_description||"WorkOS authorization failed",{status:Z.status,errorCode:W.error});default:throw new J$(`WorkOS token polling failed: ${Z.status}${W.error_description?` - ${W.error_description}`:""}`,{status:Z.status,errorCode:W.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function XX($,J,Q){let Z={accessToken:$.accessToken,refreshToken:$.refreshToken},W=await fetch(k$(J.apiBaseUrl,J5.register),{method:"POST",headers:{"Content-Type":"application/json",...await YZ(J.headers)},body:JSON.stringify(Z),signal:AbortSignal.timeout(J.requestTimeoutMs??d2)});if(!W.ok){let X=await W.text().catch(()=>""),f=v2(X);throw new J$(`Token registration failed: ${W.status}${f.message?` - ${f.message}`:""}`,{status:W.status,errorCode:f.code})}let j=await W.json();return fZ(VZ(j,"Invalid token exchange response"),Q??J.provider)}async function kF($,J,Q,Z){let W={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:J,provider:Z??Q.provider},j=await fetch(k$(Q.apiBaseUrl,J5.token),{method:"POST",headers:{"Content-Type":"application/json",...await YZ(Q.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(Q.requestTimeoutMs??d2)});if(!j.ok){let f=await j.text().catch(()=>""),Y=v2(f);throw new J$(`Token exchange failed: ${j.status}${Y.message?` - ${Y.message}`:""}`,{status:j.status,errorCode:Y.code})}let X=await j.json();return fZ(VZ(X,"Invalid token exchange response"),Z??Q.provider)}async function K4($){P1($.telemetry,$.provider??"cline");let J=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:$X,Z=$.callbackPath??SF,W=J?null:await J1({ports:Q,callbackPath:Z,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),j=W?.callbackUrl||`http://127.0.0.1:${Q[0]??$X[0]}${Z}`;try{let X;if(J){let f=jZ().workOsClientId,Y=await WX(f,$);$.callbacks.onAuth({url:Y.verificationUriComplete??Y.verificationUri,instructions:`Enter this code in your browser: ${Y.userCode}`});let V=await jX({clientId:f,deviceCode:Y.deviceCode,expiresInSeconds:Y.expiresInSeconds,initialPollIntervalSeconds:Y.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??d2,workosApiBaseUrl:XZ,onProgress:$.callbacks.onProgress});X=await XX(V,$,$.provider)}else{let f=new URL(k$($.apiBaseUrl,J5.authorize));f.searchParams.set("client_type","extension"),f.searchParams.set("callback_url",j),f.searchParams.set("redirect_uri",j),$.callbacks.onAuth({url:f.toString(),instructions:"Continue the authentication process in your browser."});let Y,V=$.provider,H=await u2({waitForCallback:W?.waitForCallback??(async()=>null),cancelWait:W?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(H.error)throw Error(`OAuth error: ${H.error}`);if(Y=H.code,V=H.provider??V,!Y){let B=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),A=m2(B,{includeProvider:!0});Y=A.code,V=A.provider??V}if(!Y)throw Error("Missing authorization code");X=await kF(Y,j,$,V)}return N1($.telemetry,$.provider??"cline"),S1($.telemetry,{id:X.accountId,email:X.email,provider:$.provider??"cline"}),X}catch(X){throw w1($.telemetry,$.provider??"cline",X instanceof Error?X.message:String(X)),X}finally{W?.close()}}async function HZ($){return await WX(jZ().workOsClientId,$)}async function BZ($){let J=$.provider??"cline";P1($.telemetry,J);try{let Q=await jX({clientId:jZ().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??d2,workosApiBaseUrl:XZ}),Z=await XX(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return N1($.telemetry,J),S1($.telemetry,{id:Z.accountId,email:Z.email,provider:J}),Z}catch(Q){throw w1($.telemetry,J,Q instanceof Error?Q.message:String(Q)),Q}}async function Q5($,J){let Q=await fetch(k$(J.apiBaseUrl,J5.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await YZ(J.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(J.requestTimeoutMs??d2)});if(!Q.ok){let j=await Q.text().catch(()=>""),X=v2(j);throw new J$(`Token refresh failed: ${Q.status}${X.message?` - ${X.message}`:""}`,{status:Q.status,errorCode:X.code})}let Z=await Q.json(),W=$.metadata?.provider??J.provider;return fZ(VZ(Z,"Invalid token refresh response"),W,$)}async function G4($,J,Q){if(!$)return null;let Z=Q?.refreshBufferMs??CF,W=Q?.retryableTokenGraceMs??yF;if(Q?.forceRefresh!==!0&&!c2($,Z))return $;try{return await Q5($,J)}catch(X){if(X instanceof J$&&X.isLikelyInvalidGrant())return e1(J.telemetry,J.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}O0();var VX={};w(VX,{refreshOpenAICodexToken:()=>W5,loginOpenAICodex:()=>F4,getValidOpenAICodexCredentials:()=>D4,OPENAI_CODEX_OAUTH_CONFIG:()=>J0});import{nanoid as IF}from"nanoid";var J0={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 Z5 extends Error{status;errorCode;constructor($,J){super($);this.name="OpenAICodexOAuthTokenError",this.status=J?.status,this.errorCode=J?.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 xF($,J,Q=J0.redirectUri){let Z=await fetch(J0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:J0.clientId,code:$,code_verifier:J,redirect_uri:Q}),signal:AbortSignal.timeout(J0.httpTimeoutMs)});if(!Z.ok)return{type:"failed"};let W=await Z.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 gF($){try{let J=await fetch(J0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:J0.clientId}),signal:AbortSignal.timeout(J0.httpTimeoutMs)});if(!J.ok){let Z=await J.text().catch(()=>""),W=v2(Z);throw new Z5(`Token refresh failed: ${J.status}${W.message?` - ${W.message}`:""}`,{status:J.status,errorCode:W.code})}let Q=await J.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(J){if(J instanceof Z5)throw J;return{type:"failed"}}}async function mF($="pi"){let{verifier:J,challenge:Q}=await eJ(),Z=IF(32),W=new URL(J0.authorizationEndpoint);return W.searchParams.set("response_type","code"),W.searchParams.set("client_id",J0.clientId),W.searchParams.set("redirect_uri",J0.redirectUri),W.searchParams.set("scope",J0.scopes),W.searchParams.set("code_challenge",Q),W.searchParams.set("code_challenge_method","S256"),W.searchParams.set("state",Z),W.searchParams.set("id_token_add_organizations","true"),W.searchParams.set("codex_cli_simplified_flow","true"),W.searchParams.set("originator",$),{verifier:J,state:Z,url:W.toString()}}function vF(){try{let $=new URL(J0.redirectUri),J=$.port.length>0?Number.parseInt($.port,10):J0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(J)?J:J0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:J0.callbackPort,callbackPath:"/auth/callback",redirectUri:J0.redirectUri}}}function cF($,J){let Q=J?T0(J):T0($),Z=Q?Q:T0($),j=Z?.[J0.jwtClaimPath]?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;let X=Z?.organizations;if(Array.isArray(X)&&X.length>0){let Y=X[0];if(typeof Y?.id==="string"&&Y.id.length>0)return Y.id}let f=Z?.chatgpt_account_id;if(typeof f==="string"&&f.length>0)return f;return null}function YX($,J){let Q=cF($.access,$.idToken)??J?.accountId;if(!Q)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||J?.refresh||"",expires:$.expires,accountId:Q,email:$.email??J?.email,metadata:{...J?.metadata??{},provider:"openai-codex"}}}async function F4($){P1($.telemetry,"openai-codex");let J=vF(),{verifier:Q,state:Z,url:W}=await mF($.originator),j=await J1({host:J.host,ports:[J.port],callbackPath:J.callbackPath,expectedState:Z});$.onAuth({url:W,instructions:"Continue the authentication process in your browser."});let X;try{let f=await u2({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(f.state&&f.state!==Z)throw Error("State mismatch");if(X=f.code,!X){let H=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),B=m2(H,{allowHashCodeState:!0});if(B.state&&B.state!==Z)throw Error("State mismatch");X=B.code}if(!X)throw Error("Missing authorization code");let Y=await xF(X,Q,J.redirectUri);if(Y.type!=="success")throw Error("Token exchange failed");let V=YX(Y);return N1($.telemetry,"openai-codex"),S1($.telemetry,{id:V.accountId,email:V.email,provider:"openai-codex"}),V}catch(f){throw w1($.telemetry,"openai-codex",f instanceof Error?f.message:String(f)),f}finally{j.close()}}async function W5($,J){let Q=await gF($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let Z=YX(Q,J);if(!Z.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return Z}async function D4($,J){if(!$)return null;let Q=J?.refreshBufferMs??J0.refreshBufferMs,Z=J?.retryableTokenGraceMs??J0.retryableTokenGraceMs;if(J?.forceRefresh!==!0&&!c2($,Q))return $;try{return await W5($.refresh,$)}catch(j){if(j instanceof Z5&&j.isLikelyInvalidGrant())return e1(J?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>Z)return $;return null}}O0();var TX={};w(TX,{refreshOcaToken:()=>Y5,loginOcaOAuth:()=>R4,getValidOcaCredentials:()=>L4,OCI_HEADER_OPC_REQUEST_ID:()=>uF,DEFAULT_INTERNAL_OCA_BASE_URL:()=>j5,DEFAULT_INTERNAL_IDCS_URL:()=>AX,DEFAULT_INTERNAL_IDCS_SCOPES:()=>KX,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>BX,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>X5,DEFAULT_EXTERNAL_IDCS_URL:()=>FX,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>DX,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>GX});import{nanoid as HX}from"nanoid";class AZ{ttlMs;maxEntries;entries=new Map;constructor($,J){this.ttlMs=$;this.maxEntries=J}get($,J=Date.now()){this.pruneExpired(J);let Q=this.entries.get($);if(!Q)return;return this.entries.delete($),this.entries.set($,Q),Q.value}set($,J,Q=Date.now(),Z=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:J,expiresAt:Q+Z})}pruneExpired($){for(let[J,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(J)}}var BX="a8331954c0cf48ba99b5dd223a14c6ea",AX="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",KX="openid offline_access",j5="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",GX="c1aba3deed5740659981a752714eba33",FX="https://login-ext.identity.oraclecloud.com",DX="openid offline_access",X5="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",uF="opc-request-id",dF="/auth/oca",lF=Array.from({length:11},($,J)=>48801+J),pF=300000,rF=30000,UX=30000,iF=600000;class f5 extends Error{status;errorCode;constructor($,J){super($);this.name="OcaOAuthTokenError",this.status=J?.status,this.errorCode=J?.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 Q$={internal:{clientId:BX,idcsUrl:AX,scopes:KX,baseUrl:j5},external:{clientId:GX,idcsUrl:FX,scopes:DX,baseUrl:X5}},U4=new Map,nF=86400000,aF=300000,sF=32,KZ=new AZ(nF,sF);function RX($){if(typeof $==="function")return $();return $??"internal"}function LX($){return{internal:{clientId:$?.internal?.clientId??Q$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??Q$.internal.idcsUrl,scopes:$?.internal?.scopes??Q$.internal.scopes,baseUrl:$?.internal?.baseUrl??Q$.internal.baseUrl},external:{clientId:$?.external?.clientId??Q$.external.clientId,idcsUrl:$?.external?.idcsUrl??Q$.external.idcsUrl,scopes:$?.external?.scopes??Q$.external.scopes,baseUrl:$?.external?.baseUrl??Q$.external.baseUrl}}}function oF($=Date.now()){let J=$-iF;for(let[Q,Z]of U4.entries())if(Z.createdAt<J)U4.delete(Q)}function tF($,J,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let W=T0(J)?.exp;if(typeof W==="number"&&W>0)return W*1000;let X=T0(Q)?.exp;if(typeof X==="number"&&X>0)return X*1000;return Date.now()+3600000}function zX($,J,Q){let Z=$.access_token;if(!Z)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 j=T0($.id_token),X=T0(Z),f=j?.sub??X?.sub,Y=j?.email??X?.email;return{access:Z,refresh:W,expires:tF($,Z,$.id_token),accountId:f??Q?.accountId,email:Y??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:J,subject:f,idToken:$.id_token}}}async function _X($,J){let Q=$5($),Z=KZ.get(Q);if(Z)return Z;let W=`${Q}/.well-known/openid-configuration`,j=await fetch(W,{method:"GET",signal:AbortSignal.timeout(J)});if(!j.ok){let Y=`${Q}/oauth2/v1/token`;return KZ.set(Q,Y,Date.now(),aF),Y}let f=(await j.json()).token_endpoint||`${Q}/oauth2/v1/token`;return KZ.set(Q,f),f}function OX($){return{code:$.error,message:$.error_description}}async function eF($){let J=U4.get($.state);if(!J)throw Error("No PKCE verifier found for this state");U4.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,Z=await _X(Q.idcsUrl,$.requestTimeoutMs),W=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:J.redirectUri,client_id:Q.clientId,code_verifier:J.verifier}),j=await fetch(Z,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:W,signal:AbortSignal.timeout($.requestTimeoutMs)}),X=await j.json();if(!j.ok){let Y=OX(X);throw new f5(`Token exchange failed: ${j.status}${Y.message?` - ${Y.message}`:""}`,{status:j.status,errorCode:Y.code})}let f=T0(X.id_token);if(!X.id_token||!f)throw Error("No ID token received from OCA");if(f.nonce!==J.nonce)throw Error("OIDC nonce verification failed");return zX(X,$.mode)}function $D($){let J=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${$5(J.idcsUrl)}/oauth2/v1/authorize`);return Q.searchParams.set("client_id",J.clientId),Q.searchParams.set("response_type","code"),Q.searchParams.set("scope",J.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 R4($){P1($.telemetry,"oca");let J=LX($.config),Q=RX($.mode),Z=$.callbackPorts?.length?$.callbackPorts:lF,W=$.callbackPath??dF,j=$.requestTimeoutMs??UX,X=await J1({ports:Z,callbackPath:W,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),f=X.callbackUrl;if(!f)throw Error("Unable to bind local OAuth callback server");let Y=HX(16),V=HX(16),{verifier:H,challenge:B}=await eJ();oF(),U4.set(Y,{verifier:H,nonce:V,mode:Q,redirectUri:f,createdAt:Date.now()});let A=$D({callbackUrl:f,mode:Q,state:Y,nonce:V,challenge:B,config:J});$.callbacks.onAuth({url:A,instructions:"Continue the authentication process in your browser."});try{let K=await u2({waitForCallback:X.waitForCallback,cancelWait:X.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),G=K.code,R=K.state;if(K.error)throw Error(`OAuth error: ${K.error}`);if(!G){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!R||R!==Y)throw Error("State mismatch");let D=await eF({code:G,state:R,mode:Q,config:J,requestTimeoutMs:j});return N1($.telemetry,"oca"),S1($.telemetry,{id:D.accountId,email:D.email,provider:"oca"}),D}catch(K){throw w1($.telemetry,"oca",K instanceof Error?K.message:String(K)),K}finally{X.close()}}async function Y5($,J={}){let Q=LX(J.config),Z=J.requestTimeoutMs??UX,W=$.metadata?.mode,j=W==="internal"||W==="external"?W:RX(J.mode),X=j==="external"?Q.external:Q.internal,f=await _X(X.idcsUrl,Z),Y=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:X.clientId}),V=await fetch(f,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:Y,signal:AbortSignal.timeout(Z)}),H=await V.json();if(!V.ok){let B=OX(H);throw new f5(`Token refresh failed: ${V.status}${B.message?` - ${B.message}`:""}`,{status:V.status,errorCode:B.code})}return zX(H,j,$)}async function L4($,J,Q){if(!$)return null;let Z=J?.refreshBufferMs??Q?.refreshBufferMs??pF,W=J?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??rF;if(J?.forceRefresh!==!0&&!c2($,Z))return $;try{return await Y5($,Q)}catch(X){if(X instanceof f5&&X.isLikelyInvalidGrant())return e1(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>W)return $;return null}}var V5="workos:";function JD($){let J=$.trim();return J.toLowerCase().startsWith(V5)?J:`${V5}${J}`}function QD($){let J=$.trim();return J.toLowerCase().startsWith(V5)?J.slice(V5.length):J}function ZD($){let Q=T0($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function WD($,J){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let Z=ZD(J);if(Z)return Z;return Date.now()-1}function jD($,J){let Q=$.auth?.accessToken?.trim(),Z=$.auth?.refreshToken?.trim();if(!Q||!Z)return null;let W=J?.normalizeAccessToken?.(Q)??Q;if(!W)return null;return{access:W,refresh:Z,expires:WD($,W),accountId:$.auth?.accountId}}function XD($){let J=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:J,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},Z={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(Z,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return Z}function GZ($){let J=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:J,getApiKey(Q){let Z=Q?.auth?.accessToken?.trim();if(Z)return $.formatAccessToken?.(Z)??Z;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return XD({...Q,storageProviderId:J,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function qX($){return GZ({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:JD,normalizeStoredAccessToken:QD,login:({settings:J,callbacks:Q,telemetry:Z})=>K4({apiBaseUrl:J?.baseUrl?.trim()||MX().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:Z}),refresh:({settings:J,credentials:Q,forceRefresh:Z,telemetry:W})=>G4(Q,{apiBaseUrl:J.baseUrl?.trim()||MX().apiBaseUrl,telemetry:W},{forceRefresh:Z})})}var fD=[qX({providerId:"cline"}),qX({providerId:"cline-pass",storageProviderId:"cline"}),GZ({providerId:"oca",login:({settings:$,callbacks:J,telemetry:Q})=>R4({mode:$?.oca?.mode,callbacks:J,telemetry:Q}),refresh:({settings:$,credentials:J,forceRefresh:Q,telemetry:Z})=>L4(J,{forceRefresh:Q,telemetry:Z},{mode:$.oca?.mode,telemetry:Z})}),GZ({providerId:"openai-codex",login:({callbacks:$,telemetry:J})=>F4({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:J}),refresh:({credentials:$,forceRefresh:J,telemetry:Q})=>D4($,{forceRefresh:J,telemetry:Q})})],YD=new Map(fD.map(($)=>[$.providerId,$]));function W0($){return YD.get($.trim().toLowerCase())}function I$($){return W0($)!==void 0}function FZ($){return W0($)?.storageProviderId}function DZ($,J){let Q=W0(J),Z=Q?.storageProviderId??J,W=$.getProviderSettings(Z);return Q?.getApiKey(W)??l2(J,W)}async function z4($,J,Q){let Z=W0(J);if(!Z)throw Error(`Provider "${J}" does not support OAuth login`);let W=$.getProviderSettings(Z.storageProviderId),j=await Z.login({settings:W,callbacks:Q.callbacks,telemetry:Q.telemetry});return Z.saveCredentials({manager:$,settings:W,credentials:j})}function _4($,J){let Q=W0($);if(!Q)return null;return jD(J,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function x$($){let J=W0($.providerId);if(!J)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return J.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function l2($,J){let Q=W0($);if(Q)return Q.getApiKey(J);return J?.auth?.accessToken?.trim()||J?.apiKey?.trim()||J?.auth?.apiKey?.trim()||void 0}function UZ($,J){let Q=W0($);if(!Q)return J.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:J.access}})??J.access}O0();var tX={};w(tX,{createContextCompactionPrepareTurn:()=>N4});import{createHandlerAsync as KD}from"@cline/llms";import{estimateTokens as RZ}from"@cline/shared";var SX=200000,LZ=0.9,CX=16384,zZ=20000,NX=1024,wX=2000,yX=2000,EX=8;function Z$($,J){if($.length<=J)return $;return`${$.slice(0,J)}
47
47
  ...[truncated ${$.length-J} chars]`}function VD($){let J=_Z($);if(typeof J==="string")return J;return J.map((Q)=>{switch(Q.type){case"text":return Q.text;case"file":return`<file path="${Q.path}">
48
48
  ${Q.content}
49
49
  </file>`;case"image":return`[image:${Q.mediaType}]`;default:return""}}).join(`
@@ -88,8 +88,8 @@ IMPORTANT: You must run the specific failing test(s) mentioned in the issue or t
88
88
  [... output truncated: ${Q} chars total. Refine the command (grep, head, tail) to view the elided middle ...]
89
89
  `+$.slice(-W)}function bD($,J,Q,Z,W){return new Promise((j,X)=>{let f=process.platform==="win32",Y=Bf($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!f,windowsHide:!0}),V=Y.pid,H=Af(Z),B=Af(Z),A=!1,K=!1,G=(T)=>{if(K)return;K=!0,T()},R=()=>{if(!V)return;if(f){Bf("taskkill",["/pid",String(V),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-V,"SIGKILL")}catch{Y.kill("SIGKILL")}},D=(T)=>{A=!0,R(),G(()=>X(T))},U=setTimeout(()=>D(new m$(`Command timed out after ${Q}ms`,Q)),Q),F=()=>D(Error("Command was aborted"));if(J.signal)J.signal.addEventListener("abort",F);let O=()=>{clearTimeout(U),J.signal?.removeEventListener("abort",F)};Y.stdout?.on("data",(T)=>{H.append(T)}),Y.stderr?.on("data",(T)=>{B.append(T)}),Y.on("close",(T)=>{if(O(),A)return;let z=H.snapshot(),L=B.snapshot();if(T!==0){let P=T??1,S=W?z.text+(L.text?`
90
90
  [stderr]
91
- ${L.text}`:""):z.text,b=z.dropped||W&&L.dropped,u=W?z.totalChars+L.totalChars:z.totalChars;if(b||S.length>Z)S=Kf(S,Z,u);let o=S.length>0?`[Command exited with code ${P}]
92
- ${S}`:`[Command exited with code ${P}]`;G(()=>X(new g4(P,o)))}else{let P=W?z.text+(L.text?`
91
+ ${L.text}`:""):z.text,b=z.dropped||W&&L.dropped,u=W?z.totalChars+L.totalChars:z.totalChars;if(b||S.length>Z)S=Kf(S,Z,u);let t=S.length>0?`[Command exited with code ${P}]
92
+ ${S}`:`[Command exited with code ${P}]`;G(()=>X(new g4(P,t)))}else{let P=W?z.text+(L.text?`
93
93
  [stderr]
94
94
  ${L.text}`:""):z.text;if(z.dropped||W&&L.dropped||P.length>Z){let b=W?z.totalChars+L.totalChars:z.totalChars;P=Kf(P,Z,b)}G(()=>j(P))}}),Y.on("error",(T)=>{O(),G(()=>X(Error(`Failed to execute command: ${T.message}`)))})})}function m4($={}){let{shell:J=yD(process.platform),timeoutMs:Q=30000,env:Z={},combineOutput:W=!0}=$,j=$.maxOutputChars??$.maxOutputBytes??x4;return(X,f,Y)=>{let V=typeof X!=="string";return bD({executable:V?X.command:J,args:V?X.args??[]:ED(J,X),cwd:f,env:Z},Y,Q,j,W)}}function Gf($,J){let Q=$.metadata?.[J];return typeof Q==="string"?Q:void 0}function Ff($,J){oj($f($.metadata),{tool_name:"run_commands",effective_timeout_ms:J.effectiveTimeoutMs,timeout_source:J.timeoutSource,command_count:J.commandCount,duration_ms:J.durationMs,ulid:$.sessionId,mode:Gf($,"mode"),source:Gf($,"source"),session_id:$.sessionId,agent_id:$.agentId,conversation_id:$.conversationId,run_id:$.runId,iteration:$.iteration,tool_call_id:$.toolCallId})}function hD($){let J=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return J?.[1]??J?.[2]??J?.[3]}function kD($){let J=[];for(let Q=0;Q<$.length;Q+=1){let Z=$[Q],W=hD(Z);if(!W){J.push(Z);continue}let j=$.findIndex((f,Y)=>Y>Q&&f.trim()===W);if(j===-1){J.push(Z);continue}let X=[Z];while(Q<j){Q+=1;let f=$[Q];X.push(f)}J.push(X.join(`
95
95
  `))}return J}function SZ($,J={}){let Q=J.fileReadTimeoutMs??1e4;return y1({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 ${r2} lines / ~${Math.round(K5/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:H1(S4),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(Z,W)=>{let j=E1(Qf,Z),X;if(typeof j==="string")X=[{path:j}];else if(Array.isArray(j))X=j.map((f)=>typeof f==="string"?{path:f}:f);else if("files"in j)X=(Array.isArray(j.files)?j.files:[j.files]).map((Y)=>typeof Y==="string"?{path:Y}:Y);else if("file_paths"in j)X=(Array.isArray(j.file_paths)?j.file_paths:[j.file_paths]).map((Y)=>({path:Y}));else if("paths"in j)X=(Array.isArray(j.paths)?j.paths:[j.paths]).map((Y)=>typeof Y==="string"?{path:Y}:Y);else X=[j];return Promise.all(X.map(async(f)=>{let Y=Vf(f);if(Y)return{query:A5(f),result:"",error:`Invalid file range: ${Y}`,success:!1};try{let V=await V1($(f,W),Q,`File read timed out after ${Q}ms`);return{query:A5(f),result:V,success:!0}}catch(V){let H=X$(V);return{query:A5(f),result:"",error:`Error reading file: ${H}`,success:!1}}}))}})}function CZ($,J={}){let Q=J.searchTimeoutMs??30000,Z=J.cwd??process.cwd();return y1({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(i2/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:H1(C4),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(W,j)=>{let X=E1(Zf,W),f=Array.isArray(X)?X:typeof X==="object"?Array.isArray(X.queries)?X.queries:[X.queries]:[X];return Promise.all(f.map(async(Y)=>{try{let V=await V1($(Y,Z,j),Q,`Search timed out after ${Q}ms`);return{query:Y,result:V,success:!0}}catch(V){let H=X$(V);return{query:Y,result:"",error:`Search failed: ${H}`,success:!1}}}))}})}function yZ($,J={}){let Q=J.bashTimeoutMs??30000,Z=J.bashTimeoutMs===void 0?"default_setting":"configured_setting",W=J.cwd??process.cwd();return y1({name:"run_commands",description:`Run shell commands from the root of the workspace. Use for listing files, checking git status, running builds, executing tests, etc. 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(x4/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:H1(p2),timeoutMs:Q*2,retryable:!1,maxRetries:0,execute:async(j,X)=>{let f=E1(Wf,j),Y;if(typeof f==="string")Y=[f];else if(Array.isArray(f))Y=f;else if("commands"in f)Y=Array.isArray(f.commands)?f.commands:[f.commands];else if("command"in f)Y=[f.command];else Y=[f.cmd];return Y=kD(Y),Promise.all(Y.map(async(V)=>{let H=Date.now(),B=NZ(V);try{let A=await V1($(V,W,X),Q,`Command timed out after ${Q}ms`);return{query:B,result:A,success:!0}}catch(A){if(A instanceof m$)Ff(X,{effectiveTimeoutMs:A.timeoutMs,timeoutSource:Z,commandCount:Y.length,durationMs:Date.now()-H});if(A instanceof g4)return{query:B,result:A.output,error:A.message,success:!1};let K=X$(A);return{query:B,result:"",error:`Command failed: ${K}`,success:!1}}}))}})}function EZ($,J={}){let Q=J.bashTimeoutMs??30000,Z=J.bashTimeoutMs===void 0?"default_setting":"configured_setting",W=J.cwd??process.cwd();return y1({name:"run_commands",description:`Run shell commands from the root of the workspace in Windows environment. Use for listing files, checking git status, running builds, executing tests, etc. Output beyond ~${Math.round(x4/1000)}k characters is middle-truncated (start and end preserved); filter output when you need specific sections. Prefer structured { command, args } entries for portability; plain string commands should be properly shell-escaped. 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.`,inputSchema:H1(MZ),timeoutMs:Q*2,retryable:!1,maxRetries:0,execute:async(j,X)=>{let f=Hf(j);return Promise.all(f.map(async(Y)=>{let V=Date.now(),H=NZ(Y);try{let B=await V1($(Y,W,X),Q,`Command timed out after ${Q}ms`);return{query:H,result:B,success:!0}}catch(B){if(B instanceof m$)Ff(X,{effectiveTimeoutMs:B.timeoutMs,timeoutSource:Z,commandCount:f.length,durationMs:Date.now()-V});if(B instanceof g4)return{query:H,result:B.output,error:B.message,success:!1};let A=X$(B);return{query:H,result:"",error:`Command failed: ${A}`,success:!1}}}))}})}function bZ($,J={}){let Q=J.webFetchTimeoutMs??30000;return y1({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:H1(y4),timeoutMs:Q*2,retryable:!0,maxRetries:2,execute:async(Z,W)=>{let j=E1(y4,Z);return Promise.all(j.requests.map(async(X)=>{try{let f=await V1($(X.url,X.prompt,W),Q,`Web fetch timed out after ${Q}ms`);return{query:X.url,result:f,success:!0}}catch(f){let Y=X$(f);return{query:X.url,result:"",error:`Error fetching web content: ${Y}`,success:!1}}}))}})}var ID=`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:
@@ -128,10 +128,10 @@ Example:
128
128
  </div>
129
129
  );
130
130
  }
131
- *** End Patch`;function hZ($,J={}){let Q=J.applyPatchTimeoutMs??30000,Z=J.cwd??process.cwd();return y1({name:"apply_patch",description:ID,inputSchema:H1(b4),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(W,j)=>{let X=E1(ff,W),f=typeof X==="string"?X:X.input;try{return{query:"apply_patch",result:await V1($({input:f},Z,j),Q,`apply_patch timed out after ${Q}ms`),success:!0}}catch(Y){return{query:"apply_patch",result:"",error:`apply_patch failed: ${X$(Y)}`,success:!1}}}})}function kZ($,J={}){let Q=J.editorTimeoutMs??30000,Z=J.cwd??process.cwd();return y1({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:H1(E4),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(W,j)=>{let X=E1(E4,W),f=X.insert_line==null?"edit":"insert",Y=Yf(X);if(Y)return{query:`${f}:${X.path}`,result:"",error:Y,success:!1};try{let V=await V1($(X,Z,j),Q,`Editor operation timed out after ${Q}ms`);return{query:`${f}:${X.path}`,result:V,success:!0}}catch(V){let H=X$(V);return{query:`${f}:${X.path}`,result:"",error:`Editor operation failed: ${H}`,success:!1}}}})}function v$($,J={}){let Q=J.skillsTimeoutMs??15000,Z='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=y1({name:"skills",description:Z,inputSchema:H1(h4),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(j,X)=>{let f=E1(h4,j);return V1($(f.skill,f.args||void 0,X),Q,`Skills operation timed out after ${Q}ms`)}});return Object.defineProperty(W,"description",{get(){let j=$.configuredSkills?.filter((X)=>!X.disabled).map((X)=>X.name);if(j&&j.length>0)return`${Z} Available skills: ${j.join(", ")}.`;return Z},enumerable:!0,configurable:!0}),W}function IZ($){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:H1(k4),retryable:!1,maxRetries:0,execute:async(J,Q)=>{let Z=E1(k4,J);return $(Z.question,Z.options,Q)}}}function xZ($,J={}){let Q=J.submitTimeoutMs??15000;return y1({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:H1(I4),lifecycle:{completesRun:!0},timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=E1(I4,Z);return V1($(j.summary,j.verified,W),Q,`submit_and_exit timed out after ${Q}ms`)}})}function f$($){let{executors:J,enableReadFiles:Q=!0,enableSearch:Z=!0,enableBash:W=!0,enableWebFetch:j=!0,enableApplyPatch:X=!1,enableEditor:f=!0,enableSkills:Y=!0,enableAskQuestion:V=!0,enableSubmitAndExit:H=!1,...B}=$,A=[];if(Q&&J.readFile)A.push(SZ(J.readFile,B));if(Z&&J.search)A.push(CZ(J.search,B));if(W&&J.bash)if(process.platform==="win32")A.push(EZ(J.bash,B));else A.push(yZ(J.bash,B));if(j&&J.webFetch)A.push(bZ(J.webFetch,B));if(f&&J.editor)A.push(kZ(J.editor,B));else if(X&&J.applyPatch)A.push(hZ(J.applyPatch,B));if(Y&&J.skills)A.push(v$(J.skills,B));let K=H?J.submit:void 0;if(V&&J.askQuestion&&!K)A.push(IZ(J.askQuestion));if(K)A.push(xZ(K,B));return A}import*as m0 from"node:fs/promises";import*as v0 from"node:path";var d={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},Uf=["%%bash","apply_patch","EOF","```"];class W0 extends Error{constructor($){super($);this.name="DiffError"}}function g0($){let J={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(Q)=>J[Q]??Q).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class gZ{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor($,J){this.lines=$;this.currentFiles=J}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(d.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(d.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(d.UPDATE)){this.parseUpdate($.substring(d.UPDATE.length).trim());return}if($?.startsWith(d.DELETE)){this.parseDelete($.substring(d.DELETE.length).trim());return}if($?.startsWith(d.ADD)){this.parseAdd($.substring(d.ADD.length).trim());return}throw new W0(`Unknown line while parsing: ${$}`)}checkDuplicate($,J){if($ in this.patch.actions)throw new W0(`Duplicate ${J} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let J=this.lines[this.index]?.startsWith(d.MOVE)?(this.lines[this.index++]??"").substring(d.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new W0(`Update File Error: Missing File: ${$}`);let Q=this.currentFiles[$]??"",Z=this.parseUpdateFile(Q,$);Z.movePath=J,this.patch.actions[$]=Z,this.currentPath=void 0}parseUpdateFile($,J){let Q={type:"update",chunks:[]},Z=$.split(`
132
- `),W=0,j=[d.END,d.UPDATE,d.DELETE,d.ADD,d.END_FILE];while(!j.some((X)=>this.lines[this.index]?.startsWith(X.trim()))){let X=this.lines[this.index],f=X?.startsWith("@@ ")?X.substring(3):void 0;if(f!==void 0||(X==="@@"?X:void 0)!==void 0)this.index++;else if(W!==0)throw new W0(`Invalid Line:
131
+ *** End Patch`;function hZ($,J={}){let Q=J.applyPatchTimeoutMs??30000,Z=J.cwd??process.cwd();return y1({name:"apply_patch",description:ID,inputSchema:H1(b4),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(W,j)=>{let X=E1(ff,W),f=typeof X==="string"?X:X.input;try{return{query:"apply_patch",result:await V1($({input:f},Z,j),Q,`apply_patch timed out after ${Q}ms`),success:!0}}catch(Y){return{query:"apply_patch",result:"",error:`apply_patch failed: ${X$(Y)}`,success:!1}}}})}function kZ($,J={}){let Q=J.editorTimeoutMs??30000,Z=J.cwd??process.cwd();return y1({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:H1(E4),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(W,j)=>{let X=E1(E4,W),f=X.insert_line==null?"edit":"insert",Y=Yf(X);if(Y)return{query:`${f}:${X.path}`,result:"",error:Y,success:!1};try{let V=await V1($(X,Z,j),Q,`Editor operation timed out after ${Q}ms`);return{query:`${f}:${X.path}`,result:V,success:!0}}catch(V){let H=X$(V);return{query:`${f}:${X.path}`,result:"",error:`Editor operation failed: ${H}`,success:!1}}}})}function v$($,J={}){let Q=J.skillsTimeoutMs??15000,Z='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=y1({name:"skills",description:Z,inputSchema:H1(h4),timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(j,X)=>{let f=E1(h4,j);return V1($(f.skill,f.args||void 0,X),Q,`Skills operation timed out after ${Q}ms`)}});return Object.defineProperty(W,"description",{get(){let j=$.configuredSkills?.filter((X)=>!X.disabled).map((X)=>X.name);if(j&&j.length>0)return`${Z} Available skills: ${j.join(", ")}.`;return Z},enumerable:!0,configurable:!0}),W}function IZ($){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:H1(k4),retryable:!1,maxRetries:0,execute:async(J,Q)=>{let Z=E1(k4,J);return $(Z.question,Z.options,Q)}}}function xZ($,J={}){let Q=J.submitTimeoutMs??15000;return y1({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:H1(I4),lifecycle:{completesRun:!0},timeoutMs:Q,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=E1(I4,Z);return V1($(j.summary,j.verified,W),Q,`submit_and_exit timed out after ${Q}ms`)}})}function f$($){let{executors:J,enableReadFiles:Q=!0,enableSearch:Z=!0,enableBash:W=!0,enableWebFetch:j=!0,enableApplyPatch:X=!1,enableEditor:f=!0,enableSkills:Y=!0,enableAskQuestion:V=!0,enableSubmitAndExit:H=!1,...B}=$,A=[];if(Q&&J.readFile)A.push(SZ(J.readFile,B));if(Z&&J.search)A.push(CZ(J.search,B));if(W&&J.bash)if(process.platform==="win32")A.push(EZ(J.bash,B));else A.push(yZ(J.bash,B));if(j&&J.webFetch)A.push(bZ(J.webFetch,B));if(f&&J.editor)A.push(kZ(J.editor,B));else if(X&&J.applyPatch)A.push(hZ(J.applyPatch,B));if(Y&&J.skills)A.push(v$(J.skills,B));let K=H?J.submit:void 0;if(V&&J.askQuestion&&!K)A.push(IZ(J.askQuestion));if(K)A.push(xZ(K,B));return A}import*as m0 from"node:fs/promises";import*as v0 from"node:path";var d={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},Uf=["%%bash","apply_patch","EOF","```"];class j0 extends Error{constructor($){super($);this.name="DiffError"}}function g0($){let J={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(Q)=>J[Q]??Q).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class gZ{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor($,J){this.lines=$;this.currentFiles=J}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(d.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(d.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(d.UPDATE)){this.parseUpdate($.substring(d.UPDATE.length).trim());return}if($?.startsWith(d.DELETE)){this.parseDelete($.substring(d.DELETE.length).trim());return}if($?.startsWith(d.ADD)){this.parseAdd($.substring(d.ADD.length).trim());return}throw new j0(`Unknown line while parsing: ${$}`)}checkDuplicate($,J){if($ in this.patch.actions)throw new j0(`Duplicate ${J} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let J=this.lines[this.index]?.startsWith(d.MOVE)?(this.lines[this.index++]??"").substring(d.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new j0(`Update File Error: Missing File: ${$}`);let Q=this.currentFiles[$]??"",Z=this.parseUpdateFile(Q,$);Z.movePath=J,this.patch.actions[$]=Z,this.currentPath=void 0}parseUpdateFile($,J){let Q={type:"update",chunks:[]},Z=$.split(`
132
+ `),W=0,j=[d.END,d.UPDATE,d.DELETE,d.ADD,d.END_FILE];while(!j.some((X)=>this.lines[this.index]?.startsWith(X.trim()))){let X=this.lines[this.index],f=X?.startsWith("@@ ")?X.substring(3):void 0;if(f!==void 0||(X==="@@"?X:void 0)!==void 0)this.index++;else if(W!==0)throw new j0(`Invalid Line:
133
133
  ${this.lines[this.index]}`);if(f?.trim()){let D=g0(f.trim());for(let U=W;U<Z.length;U++){let F=Z[U];if(F&&(g0(F)===D||g0(F.trim())===D)){if(W=U+1,g0(F.trim())===D&&g0(F)!==D)this.fuzz++;break}}}let[V,H,B,A]=mD(this.lines,this.index),[K,G,R]=gD(Z,V,W,A);if(K===-1){let D=V.join(`
134
- `);this.addWarning({path:this.currentPath||J,chunkIndex:Q.chunks.length,message:`Could not find matching context (similarity: ${R.toFixed(2)}). Chunk skipped.`,context:D.length>200?`${D.substring(0,200)}...`:D}),this.index=B}else{this.fuzz+=G;for(let D of H)D.origIndex+=K,Q.chunks.push(D);W=K+V.length,this.index=B}}return Q}parseDelete($){if(this.checkDuplicate($,"delete"),!($ in this.currentFiles))throw new W0(`Delete File Error: Missing File: ${$}`);this.patch.actions[$]={type:"delete",chunks:[]},this.index++}parseAdd($){if(this.checkDuplicate($,"add"),$ in this.currentFiles)throw new W0(`Add File Error: File already exists: ${$}`);this.index++;let J=[],Q=[d.END,d.UPDATE,d.DELETE,d.ADD];while(this.hasMoreLines()&&!Q.some((Z)=>this.lines[this.index]?.startsWith(Z.trim()))){let Z=this.lines[this.index++];if(Z===void 0)break;if(!Z.startsWith("+"))throw new W0(`Invalid Add File line (missing '+'): ${Z}`);J.push(Z.substring(1))}this.patch.actions[$]={type:"add",newFile:J.join(`
134
+ `);this.addWarning({path:this.currentPath||J,chunkIndex:Q.chunks.length,message:`Could not find matching context (similarity: ${R.toFixed(2)}). Chunk skipped.`,context:D.length>200?`${D.substring(0,200)}...`:D}),this.index=B}else{this.fuzz+=G;for(let D of H)D.origIndex+=K,Q.chunks.push(D);W=K+V.length,this.index=B}}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 J=[],Q=[d.END,d.UPDATE,d.DELETE,d.ADD];while(this.hasMoreLines()&&!Q.some((Z)=>this.lines[this.index]?.startsWith(Z.trim()))){let Z=this.lines[this.index++];if(Z===void 0)break;if(!Z.startsWith("+"))throw new j0(`Invalid Add File line (missing '+'): ${Z}`);J.push(Z.substring(1))}this.patch.actions[$]={type:"add",newFile:J.join(`
135
135
  `),chunks:[]}}}function Df($,J){let Q=$.length>J.length?$:J,Z=$.length>J.length?J:$;if(Q.length===0)return 1;let W=xD(Z,Q);return(Q.length-W)/Q.length}function xD($,J){let Q=J.length+1,Z=$.length+1,W=Array(Q*Z).fill(0),j=(f,Y)=>W[f*Z+Y]??0,X=(f,Y,V)=>{W[f*Z+Y]=V};for(let f=0;f<=J.length;f++)X(f,0,f);for(let f=0;f<=$.length;f++)X(0,f,f);for(let f=1;f<=J.length;f++)for(let Y=1;Y<=$.length;Y++)if(J[f-1]===$[Y-1])X(f,Y,j(f-1,Y-1));else X(f,Y,1+Math.min(j(f-1,Y-1),j(f,Y-1),j(f-1,Y)));return j(J.length,$.length)}function gD($,J,Q,Z){if(J.length===0)return[Q,0,1];let W=0,j=(X)=>{let f=g0(J.join(`
136
136
  `));for(let V=X;V<$.length;V++){let H=g0($.slice(V,V+J.length).join(`
137
137
  `));if(H===f)return[V,0,1];let B=Df(H,f);if(B>W)W=B}for(let V=X;V<$.length;V++){let H=g0($.slice(V,V+J.length).map((A)=>A.trimEnd()).join(`
@@ -139,13 +139,13 @@ ${this.lines[this.index]}`);if(f?.trim()){let D=g0(f.trim());for(let U=W;U<Z.len
139
139
  `));if(H===B)return[V,1,1]}for(let V=X;V<$.length;V++){let H=g0($.slice(V,V+J.length).map((A)=>A.trim()).join(`
140
140
  `)),B=g0(J.map((A)=>A.trim()).join(`
141
141
  `));if(H===B)return[V,100,1]}let Y=0.66;for(let V=X;V<$.length;V++){let H=g0($.slice(V,V+J.length).join(`
142
- `)),B=Df(H,f);if(B>=Y)return[V,1000,B];if(B>W)W=B}return[-1,0,W]};if(Z){let[X,f,Y]=j($.length-J.length);if(X!==-1)return[X,f,Y];return[X,f,Y]=j(Q),[X,f+1e4,Y]}return j(Q)}function mD($,J){let Q=J,Z=[],W=[],j=[],X=[],f="keep",Y=["@@",d.END,d.UPDATE,d.DELETE,d.ADD,d.END_FILE];while(Q<$.length){let V=$[Q];if(!V||Y.some((A)=>V.startsWith(A.trim())))break;if(V==="***")break;if(V.startsWith("***"))throw new W0(`Invalid line: ${V}`);Q++;let H=f,B=V;if(B[0]==="+")f="add";else if(B[0]==="-")f="delete";else if(B[0]===" ")f="keep";else f="keep",B=` ${B}`;if(B=B.slice(1),f==="keep"&&H!==f){if(j.length||W.length)X.push({origIndex:Z.length-W.length,delLines:W,insLines:j});W=[],j=[]}if(f==="delete")W.push(B),Z.push(B);else if(f==="add")j.push(B);else Z.push(B)}if(j.length||W.length)X.push({origIndex:Z.length-W.length,delLines:W,insLines:j});if(Q<$.length&&$[Q]===d.END_FILE)return Q++,[Z,X,Q,!0];return[Z,X,Q,!1]}function mZ($,J,Q){let Z=v0.isAbsolute(J),W=Z?v0.normalize(J):v0.resolve($,J);if(!Q||Z)return W;let j=v0.relative($,W);if(j.startsWith("..")||v0.isAbsolute(j))throw new W0(`Path must stay within cwd: ${J}`);return W}function vD($){return $.split(`
143
- `).map((J)=>J.replace(/\r$/,""))}function Rf($){if($.trim()==="")return!1;return Uf.some((J)=>$.startsWith(J))}function cD($){let J=0,Q=$.length;while(J<Q&&Rf($[J]??""))J++;while(Q>J&&Rf($[Q-1]??""))Q--;return $.slice(J,Q)}function uD($){let J=vD($),Q=J.findIndex((X)=>X.startsWith(d.BEGIN)),Z=-1;for(let X=J.length-1;X>=0;X--)if(J[X]?.startsWith(d.END)){Z=X;break}if(Q!==-1||Z!==-1){if(Q===-1||Z===-1||Z<Q)throw new W0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:J.slice(Q,Z+1)}}let W=cD(J);while(W.length>0&&W[0]==="")W.shift();while(W.length>0&&W[W.length-1]==="")W.pop();return{lines:[d.BEGIN,...W,d.END]}}function dD($,J){let Q=new Set;for(let Z of $)for(let W of J)if(Z.startsWith(W)){Q.add(Z.substring(W.length).trim());break}return[...Q]}function lD($,J,Q){if(J.length===0)return $;let Z=$.split(`
144
- `),W=[],j=0;for(let X of J){if(X.origIndex>Z.length)throw new W0(`${Q}: chunk.origIndex ${X.origIndex} > lines.length ${Z.length}`);if(j>X.origIndex)throw new W0(`${Q}: currentIndex ${j} > chunk.origIndex ${X.origIndex}`);W.push(...Z.slice(j,X.origIndex)),W.push(...X.insLines),j=X.origIndex+X.delLines.length}return W.push(...Z.slice(j)),W.join(`
145
- `)}async function pD($,J,Q,Z){let W=dD($,[d.UPDATE,d.DELETE]),j={};for(let X of W){let f=mZ(J,X,Z),Y;try{Y=await m0.readFile(f,Q)}catch{throw new W0(`File not found: ${X}`)}j[X]=Y.replace(/\r\n/g,`
146
- `)}return j}function rD($,J){let Q={};for(let[Z,W]of Object.entries($.actions))switch(W.type){case"delete":Q[Z]={type:"delete",oldContent:J[Z]};break;case"add":if(W.newFile===void 0)throw new W0("ADD action without file content");Q[Z]={type:"add",newContent:W.newFile};break;case"update":Q[Z]={type:"update",oldContent:J[Z],newContent:lD(J[Z]??"",W.chunks,Z),movePath:W.movePath};break}return Q}function iD($){let J=[`Patch could not be applied because ${$.length} hunk${$.length===1?"":"s"} did not match the current file content.`];for(let Q of $){let Z=Q.chunkIndex===void 0?"unknown":String(Q.chunkIndex+1);if(J.push(`${Q.path}: hunk ${Z}: ${Q.message}`),Q.context)J.push(`Context:
142
+ `)),B=Df(H,f);if(B>=Y)return[V,1000,B];if(B>W)W=B}return[-1,0,W]};if(Z){let[X,f,Y]=j($.length-J.length);if(X!==-1)return[X,f,Y];return[X,f,Y]=j(Q),[X,f+1e4,Y]}return j(Q)}function mD($,J){let Q=J,Z=[],W=[],j=[],X=[],f="keep",Y=["@@",d.END,d.UPDATE,d.DELETE,d.ADD,d.END_FILE];while(Q<$.length){let V=$[Q];if(!V||Y.some((A)=>V.startsWith(A.trim())))break;if(V==="***")break;if(V.startsWith("***"))throw new j0(`Invalid line: ${V}`);Q++;let H=f,B=V;if(B[0]==="+")f="add";else if(B[0]==="-")f="delete";else if(B[0]===" ")f="keep";else f="keep",B=` ${B}`;if(B=B.slice(1),f==="keep"&&H!==f){if(j.length||W.length)X.push({origIndex:Z.length-W.length,delLines:W,insLines:j});W=[],j=[]}if(f==="delete")W.push(B),Z.push(B);else if(f==="add")j.push(B);else Z.push(B)}if(j.length||W.length)X.push({origIndex:Z.length-W.length,delLines:W,insLines:j});if(Q<$.length&&$[Q]===d.END_FILE)return Q++,[Z,X,Q,!0];return[Z,X,Q,!1]}function mZ($,J,Q){let Z=v0.isAbsolute(J),W=Z?v0.normalize(J):v0.resolve($,J);if(!Q||Z)return W;let j=v0.relative($,W);if(j.startsWith("..")||v0.isAbsolute(j))throw new j0(`Path must stay within cwd: ${J}`);return W}function vD($){return $.split(`
143
+ `).map((J)=>J.replace(/\r$/,""))}function Rf($){if($.trim()==="")return!1;return Uf.some((J)=>$.startsWith(J))}function cD($){let J=0,Q=$.length;while(J<Q&&Rf($[J]??""))J++;while(Q>J&&Rf($[Q-1]??""))Q--;return $.slice(J,Q)}function uD($){let J=vD($),Q=J.findIndex((X)=>X.startsWith(d.BEGIN)),Z=-1;for(let X=J.length-1;X>=0;X--)if(J[X]?.startsWith(d.END)){Z=X;break}if(Q!==-1||Z!==-1){if(Q===-1||Z===-1||Z<Q)throw new j0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:J.slice(Q,Z+1)}}let W=cD(J);while(W.length>0&&W[0]==="")W.shift();while(W.length>0&&W[W.length-1]==="")W.pop();return{lines:[d.BEGIN,...W,d.END]}}function dD($,J){let Q=new Set;for(let Z of $)for(let W of J)if(Z.startsWith(W)){Q.add(Z.substring(W.length).trim());break}return[...Q]}function lD($,J,Q){if(J.length===0)return $;let Z=$.split(`
144
+ `),W=[],j=0;for(let X of J){if(X.origIndex>Z.length)throw new j0(`${Q}: chunk.origIndex ${X.origIndex} > lines.length ${Z.length}`);if(j>X.origIndex)throw new j0(`${Q}: currentIndex ${j} > chunk.origIndex ${X.origIndex}`);W.push(...Z.slice(j,X.origIndex)),W.push(...X.insLines),j=X.origIndex+X.delLines.length}return W.push(...Z.slice(j)),W.join(`
145
+ `)}async function pD($,J,Q,Z){let W=dD($,[d.UPDATE,d.DELETE]),j={};for(let X of W){let f=mZ(J,X,Z),Y;try{Y=await m0.readFile(f,Q)}catch{throw new j0(`File not found: ${X}`)}j[X]=Y.replace(/\r\n/g,`
146
+ `)}return j}function rD($,J){let Q={};for(let[Z,W]of Object.entries($.actions))switch(W.type){case"delete":Q[Z]={type:"delete",oldContent:J[Z]};break;case"add":if(W.newFile===void 0)throw new j0("ADD action without file content");Q[Z]={type:"add",newContent:W.newFile};break;case"update":Q[Z]={type:"update",oldContent:J[Z],newContent:lD(J[Z]??"",W.chunks,Z),movePath:W.movePath};break}return Q}function iD($){let J=[`Patch could not be applied because ${$.length} hunk${$.length===1?"":"s"} did not match the current file content.`];for(let Q of $){let Z=Q.chunkIndex===void 0?"unknown":String(Q.chunkIndex+1);if(J.push(`${Q.path}: hunk ${Z}: ${Q.message}`),Q.context)J.push(`Context:
147
147
  ${Q.context}`)}return J.join(`
148
- `)}async function nD($,J,Q,Z){let W=[];for(let[j,X]of Object.entries($)){let f=mZ(J,j,Z);switch(X.type){case"delete":await m0.rm(f,{force:!0}),W.push(`${j}: [deleted]`);break;case"add":if(X.newContent===void 0)throw new W0(`Cannot create ${j} with no content`);await m0.mkdir(v0.dirname(f),{recursive:!0}),await m0.writeFile(f,X.newContent,{encoding:Q}),W.push(j);break;case"update":{if(X.newContent===void 0)throw new W0(`UPDATE change for ${j} has no new content`);if(X.movePath){let Y=mZ(J,X.movePath,Z);await m0.mkdir(v0.dirname(Y),{recursive:!0}),await m0.writeFile(Y,X.newContent,{encoding:Q}),await m0.rm(f,{force:!0}),W.push(`${j} -> ${X.movePath}`)}else await m0.writeFile(f,X.newContent,{encoding:Q}),W.push(j);break}}}return W}function v4($={}){let{encoding:J="utf-8",restrictToCwd:Q=!0}=$;return async(Z,W,j)=>{let X=uD(Z.input),f=await pD(X.lines,W,J,Q),Y=new gZ(X.lines,f),{patch:V,fuzz:H}=Y.parse();if(V.warnings&&V.warnings.length>0)throw new W0(iD(V.warnings));let B=rD(V,f),A=await nD(B,W,J,Q),K=["Successfully applied patch to the following files:"];for(let G of A)K.push(G);if(H>0)K.push(`Note: Patch applied with fuzz factor ${H}`);return K.join(`
148
+ `)}async function nD($,J,Q,Z){let W=[];for(let[j,X]of Object.entries($)){let f=mZ(J,j,Z);switch(X.type){case"delete":await m0.rm(f,{force:!0}),W.push(`${j}: [deleted]`);break;case"add":if(X.newContent===void 0)throw new j0(`Cannot create ${j} with no content`);await m0.mkdir(v0.dirname(f),{recursive:!0}),await m0.writeFile(f,X.newContent,{encoding:Q}),W.push(j);break;case"update":{if(X.newContent===void 0)throw new j0(`UPDATE change for ${j} has no new content`);if(X.movePath){let Y=mZ(J,X.movePath,Z);await m0.mkdir(v0.dirname(Y),{recursive:!0}),await m0.writeFile(Y,X.newContent,{encoding:Q}),await m0.rm(f,{force:!0}),W.push(`${j} -> ${X.movePath}`)}else await m0.writeFile(f,X.newContent,{encoding:Q}),W.push(j);break}}}return W}function v4($={}){let{encoding:J="utf-8",restrictToCwd:Q=!0}=$;return async(Z,W,j)=>{let X=uD(Z.input),f=await pD(X.lines,W,J,Q),Y=new gZ(X.lines,f),{patch:V,fuzz:H}=Y.parse();if(V.warnings&&V.warnings.length>0)throw new j0(iD(V.warnings));let B=rD(V,f),A=await nD(B,W,J,Q),K=["Successfully applied patch to the following files:"];for(let G of A)K.push(G);if(H>0)K.push(`Note: Patch applied with fuzz factor ${H}`);return K.join(`
149
149
  `)}}import*as Z1 from"node:fs/promises";import*as Q1 from"node:path";function aD($,J,Q){let Z=Q1.isAbsolute(J),W=Z?Q1.normalize(J):Q1.resolve($,J);if(!Q)return W;if(Z)return W;let j=Q1.relative($,W);if(j.startsWith("..")||Q1.isAbsolute(j))throw Error(`Path must stay within cwd: ${J}`);return W}function sD($,J){if(J.length===0)return 0;return $.split(J).length-1}function oD($,J,Q){let Z=$.split(`
150
150
  `),W=J.split(`
151
151
  `),j=Math.max(Z.length,W.length),X=["```diff"],f=0;for(let Y=0;Y<j;Y++){if(f>=Q){X.push("... diff truncated ...");break}let V=Z[Y],H=W[Y];if(V===H)continue;let B=Y+1;if(V!==void 0)X.push(`-${B}: ${V}`),f++;if(H!==void 0&&f<Q)X.push(`+${B}: ${H}`),f++}return X.push("```"),X.join(`
@@ -153,13 +153,13 @@ ${Q.context}`)}return J.join(`
153
153
  ${Y}`}async function JU($,J,Q,Z){let j=(await Z1.readFile($,Z)).split(`
154
154
  `),X=j.length+1;if(J<1||J>X)throw Error(`Invalid insert_line: ${J}. insert_line must be a positive one-based boundary line in the range 1-${X}. Use ${X} to append at EOF.`);let f=J-1;return j.splice(f,0,...Q.split(`
155
155
  `)),await Z1.writeFile($,j.join(`
156
- `),{encoding:Z}),`Inserted content at line ${J} in ${$}.`}function c4($={}){let{encoding:J="utf-8",restrictToCwd:Q=!0,maxDiffLines:Z=200}=$;return async(W,j,X)=>{let f=aD(j,W.path,Q);if(W.insert_line!=null)return JU(f,W.insert_line,W.new_text,J);if(!await eD(f))return tD(f,W.new_text,J);if(W.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return $U(f,W.old_text,W.new_text,J,Z)}}import{createReadStream as QU}from"node:fs";import*as G5 from"node:fs/promises";import*as Y$ from"node:path";import{createInterface as ZU}from"node:readline";import{resolveExistingFilePath as WU}from"@cline/shared/storage";var jU=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),XU={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},Lf=1e8,fU=50000;function zf($){let{reason:J}=$;if(J instanceof Error)return J;if(J!==void 0)return Error(String(J));return Error("File read was aborted")}async function YU($,J,Q,Z,W,j){if(j?.aborted)throw zf(j);let X=Math.max(Z??1,1),f=W??Number.POSITIVE_INFINITY,Y=Number.isFinite(f),V=Y?f:X+fU-1,H=[],B=0,A=0,K=!1,G=!1,R=Number.isFinite(f)?Math.min(f,X+r2-1):X+r2-1,D=Q?String(R).length+3:0,U=QU($,{encoding:J}),F=ZU({input:U,crlfDelay:Number.POSITIVE_INFINITY}),O=j?()=>U.destroy(zf(j)):void 0;if(j&&O)j.addEventListener("abort",O,{once:!0});try{for await(let b of F){if(A+=1,A>f){A=f;break}if(!Y&&K&&A>=V){G=!0;break}if(A<X||K)continue;if(H.length>=r2){K=!0;continue}let u=b;if(u.length>wZ)u=`${u.slice(0,wZ)} [line truncated]`;let o=B+u.length+D+1;if(o>K5&&H.length>0){K=!0;continue}H.push({lineNumber:A,text:u}),B=o}}finally{if(j&&O)j.removeEventListener("abort",O);F.close(),U.destroy()}let T=String(H[H.length-1]?.lineNumber??A).length,z=H.map(({lineNumber:b,text:u})=>Q?`${String(b).padStart(T," ")} | ${u}`:u).join(`
156
+ `),{encoding:Z}),`Inserted content at line ${J} in ${$}.`}function c4($={}){let{encoding:J="utf-8",restrictToCwd:Q=!0,maxDiffLines:Z=200}=$;return async(W,j,X)=>{let f=aD(j,W.path,Q);if(W.insert_line!=null)return JU(f,W.insert_line,W.new_text,J);if(!await eD(f))return tD(f,W.new_text,J);if(W.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return $U(f,W.old_text,W.new_text,J,Z)}}import{createReadStream as QU}from"node:fs";import*as G5 from"node:fs/promises";import*as Y$ from"node:path";import{createInterface as ZU}from"node:readline";import{resolveExistingFilePath as WU}from"@cline/shared/storage";var jU=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),XU={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},Lf=1e8,fU=50000;function zf($){let{reason:J}=$;if(J instanceof Error)return J;if(J!==void 0)return Error(String(J));return Error("File read was aborted")}async function YU($,J,Q,Z,W,j){if(j?.aborted)throw zf(j);let X=Math.max(Z??1,1),f=W??Number.POSITIVE_INFINITY,Y=Number.isFinite(f),V=Y?f:X+fU-1,H=[],B=0,A=0,K=!1,G=!1,R=Number.isFinite(f)?Math.min(f,X+r2-1):X+r2-1,D=Q?String(R).length+3:0,U=QU($,{encoding:J}),F=ZU({input:U,crlfDelay:Number.POSITIVE_INFINITY}),O=j?()=>U.destroy(zf(j)):void 0;if(j&&O)j.addEventListener("abort",O,{once:!0});try{for await(let b of F){if(A+=1,A>f){A=f;break}if(!Y&&K&&A>=V){G=!0;break}if(A<X||K)continue;if(H.length>=r2){K=!0;continue}let u=b;if(u.length>wZ)u=`${u.slice(0,wZ)} [line truncated]`;let t=B+u.length+D+1;if(t>K5&&H.length>0){K=!0;continue}H.push({lineNumber:A,text:u}),B=t}}finally{if(j&&O)j.removeEventListener("abort",O);F.close(),U.destroy()}let T=String(H[H.length-1]?.lineNumber??A).length,z=H.map(({lineNumber:b,text:u})=>Q?`${String(b).padStart(T," ")} | ${u}`:u).join(`
157
157
  `),L=H[H.length-1]?.lineNumber;if(L===void 0)return z;let P=Math.min(f,A);if(L>=P)return z;let S=G?`${A}+ lines`:P;return`${z}
158
158
 
159
159
  [Showing lines ${X}-${L} of ${S}. Use start_line/end_line to read other sections.]`}function u4($={}){let{maxFileSizeBytes:J,encoding:Q,includeLineNumbers:Z}={...XU,...$};return async(W,j)=>{let{path:X,start_line:f,end_line:Y}=W,V=Y$.isAbsolute(X)?Y$.normalize(X):Y$.resolve(process.cwd(),X),H=WU(V)??V,B=Y$.extname(H).toLowerCase(),A=jU.get(B),K=await G5.stat(H);if(!K.isFile())throw Error(`Path is not a file: ${H}`);if(A){if(K.size>J)throw Error(`Image file too large: ${K.size} bytes (max: ${J} bytes).`);if(j.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let G=await G5.readFile(H);return[{type:"text",text:"Successfully read image"},{type:"image",data:G.toString("base64"),mediaType:A}]}if(K.size>Lf)throw Error(`Text file too large to stream safely: ${K.size} bytes (max: ${Lf} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return YU(H,Q,Z,f,Y,j.signal)}}import{spawn as wf}from"node:child_process";import*as Sf from"node:fs/promises";import*as U5 from"node:path";var Pf={};w(Pf,{prewarmFileIndex:()=>D5,getFileIndex:()=>b1,enrichPromptWithMentions:()=>a2});import{spawn as VU}from"node:child_process";import{readdir as HU}from"node:fs/promises";import cZ from"node:path";import{isMainThread as Tf,parentPort as _f,Worker as BU}from"node:worker_threads";var AU=15000,KU=600000,GU=1000,FU=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function Of($){let J=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return J==="EACCES"||J==="EPERM"||J==="ENOENT"}var n2=new Map;function DU(){if(!Tf)return!1;return!0}function UU($){if(n2.size<=1)return;for(let[J,Q]of n2.entries()){if(Q.pending)continue;if($-Q.lastAccessedAt>KU)n2.delete(J)}}function RU($,J){return cZ.relative($,J).split(cZ.sep).join("/")}async function LU($){let Q=(await new Promise((Z,W)=>{let j=VU("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"],windowsHide:!0}),X="",f="";j.stdout.on("data",(Y)=>{X+=Y.toString()}),j.stderr.on("data",(Y)=>{f+=Y.toString()}),j.on("error",W),j.on("close",(Y)=>{if(Y===0){Z(X);return}W(Error(f||`rg exited with code ${Y}`))})})).split(/\r?\n/).map((Z)=>Z.trim()).filter((Z)=>Z.length>0).map((Z)=>Z.replace(/\\/g,"/"));return new Set(Q)}async function Mf($,J,Q){let Z;try{Z=await HU(J,{withFileTypes:!0})}catch(W){if(Of(W))return;throw W}for(let W of Z){let j=cZ.join(J,W.name);if(W.isDirectory()){if(FU.has(W.name))continue;try{await Mf($,j,Q)}catch(X){if(Of(X))continue;throw X}continue}if(W.isFile())Q.add(RU($,j))}}async function zU($){let J=new Set;return await Mf($,$,J),J}async function F5($){try{return await LU($)}catch{return zU($)}}function _U(){if(Tf||!_f)return;let $=_f;$.on("message",(J)=>{if(J.type!=="index")return;F5(J.cwd).then((Q)=>{let Z={type:"indexResult",requestId:J.requestId,files:Array.from(Q)};$.postMessage(Z)}).catch((Q)=>{let Z={type:"indexResult",requestId:J.requestId,error:Q instanceof Error?Q.message:"Failed to build file index"};$.postMessage(Z)})})}class qf{worker=new BU(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",($)=>{if($.type!=="indexResult")return;let J=this.pending.get($.requestId);if(!J)return;if(this.pending.delete($.requestId),$.error){J.reject(Error($.error));return}J.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 J=++this.nextRequestId,Q=new Promise((W,j)=>{let X=setTimeout(()=>{this.pending.delete(J),W(null)},GU);X.unref(),this.pending.set(J,{resolve:(f)=>{clearTimeout(X),W(f)},reject:(f)=>{clearTimeout(X),j(f)}})}),Z={type:"index",requestId:J,cwd:$};return this.worker.postMessage(Z),Q}flushPending($){for(let[J,Q]of this.pending.entries())Q.reject($),this.pending.delete(J)}}_U();var vZ;function OU(){if(!DU())return null;if(vZ===void 0)vZ=new qf;return vZ}async function TU($){let J=OU();if(!J)return F5($);try{let Q=await J.requestIndex($);if(Q===null)return F5($);return new Set(Q)}catch{return F5($)}}async function b1($,J={}){let Q=J.ttlMs??AU,Z=Date.now();UU(Z);let W=n2.get($);if(W&&Q>0&&Z-W.lastBuiltAt<=Q&&W.files.size>0)return W.lastAccessedAt=Z,W.files;if(W?.pending)return W.lastAccessedAt=Z,W.pending;let j=TU($).then((X)=>{return n2.set($,{files:X,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),X});return n2.set($,{files:W?.files??new Set,lastBuiltAt:W?.lastBuiltAt??0,lastAccessedAt:Z,pending:j}),j}async function D5($,J={}){await b1($,{...J,ttlMs:0})}import{stat as MU}from"node:fs/promises";import c$ from"node:path";var qU=/[),.:;!?`'"]+$/,PU=/^[(`'"]+/;function NU($){let J=$.matchAll(/(^|[\s])@([^\s]+)/g),Q=[];for(let Z of J){let W=(Z[2]??"").trim();if(W.length===0)continue;let j=W.replace(PU,"").replace(qU,"");if(j.length===0||j.includes("@"))continue;Q.push(j)}return Array.from(new Set(Q))}function wU($,J){let Q=$.replace(/\\/g,"/"),Z=c$.isAbsolute(Q)?c$.resolve(Q):c$.resolve(J,Q),W=c$.relative(J,Z);if(W.startsWith("..")||c$.isAbsolute(W))return;return W.split(c$.sep).join("/")}async function a2($,J,Q={}){let Z=NU($);if(Z.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:W,maxFileBytes:j,maxTotalBytes:X}=Q,f=await b1(J,{ttlMs:Q.ttlMs}),Y=[],V=[],H=[],B=0;for(let A of Z){if(W&&H.length>=W){V.push(A);continue}let K=wU(A,J);if(!K||!f.has(K)){V.push(A);continue}if(!j||!X){Y.push(K);continue}let G=c$.join(J,K);try{if(!(await MU(G)).isFile()){V.push(A);continue}let D=B+j;if(D>X){V.push(A);continue}B=D,Y.push(K)}catch{V.push(A)}}return{prompt:$,mentions:Z,matchedFiles:Y,ignoredMentions:V}}var SU=["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"],CU=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],u$=null;function yU(){if(u$!==null)return Promise.resolve(u$);return new Promise(($)=>{let J=wf("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});J.on("close",(Q)=>{u$=Q===0,$(u$)}),J.on("error",()=>{u$=!1,$(!1)}),setTimeout(()=>{if(!J.killed)J.kill("SIGTERM");if(u$===null)u$=!1,$(!1)},1000)})}function EU($,J,Q,Z,W=5000,j){return new Promise((X)=>{let f=wf("rg",["--json",`--context=${Z}`,"--max-count=1","-i",$],{cwd:J,stdio:["ignore","pipe","pipe"],windowsHide:!0}),Y="",V=!1,H=()=>{if(!f.killed)f.kill("SIGTERM")},B=setTimeout(()=>{if(!V)V=!0,H(),X(null)},W),A=(K)=>{if(!V)V=!0,clearTimeout(B),H(),X(K)};if(j?.aborted){H(),X(null);return}j?.addEventListener("abort",()=>{A(null)}),f.stdout.on("data",(K)=>{Y+=K.toString()}),f.stderr.on("data",()=>{}),f.on("close",(K)=>{if(K===0||K===1){try{let G=[],R=Y.split(`
160
160
  `).filter((D)=>D.trim());for(let D of R){if(G.length>=Q)break;let U=JSON.parse(D);if(U.type==="match"){let F=U.data,O=[];if(U.data.submatches&&U.data.submatches.length>0){let T=U.data.submatches[0];G.push({file:F.path.text,line:F.line_number,column:(T?.start??0)+1,match:T?.match?.text??"",context:O})}}else if(U.type==="context"&&G.length>0){let F=G[G.length-1],O=U.data.line_number===F.line?">":" ";F.context.push(`${O} ${U.data.line_number}: ${U.data.lines?.text??U.data.line?.text??""}`)}}A(G.length>0?G:null)}catch{A(null)}return}A(null)}),f.on("error",()=>{A(null)})})}function bU($,J,Q,Z){let W=$.split("/"),j=W[W.length-1]??"";if(W.length-1>Z)return!1;for(let Y=0;Y<W.length-1;Y++)if(J.has(W[Y]??""))return!1;let f=U5.posix.extname(j).slice(1).toLowerCase();return Q.has(f)||!f&&!j.startsWith(".")}function d4($={}){let{includeExtensions:J=SU,excludeDirs:Q=CU,maxResults:Z=100,contextLines:W=2,maxDepth:j=20}=$,X=new Set(Q),f=new Set(J.map((Y)=>Y.toLowerCase()));return async(Y,V,H)=>{if(H.signal?.aborted)throw Error("Search operation aborted");let B=await yU(),A=null;if(B)A=await EU(Y,V,Z,W,5000,H.signal);if(A){let F=[`Found ${A.length} result${A.length===1?"":"s"} for pattern: ${Y}`,""];for(let O of A)F.push(`${O.file}:${O.line}:${O.column}`),F.push(...O.context),F.push("");if(A.length>=Z)F.push(`(Showing first ${Z} results. Refine your search for more specific results.)`);return Nf(F.join(`
161
161
  `))}let K;try{K=new RegExp(Y,"gim")}catch(F){throw Error(`Invalid regex pattern: ${Y}. ${F instanceof Error?F.message:""}`)}let G=[],R=0,D=await b1(V);for(let F of D){if(H.signal?.aborted)throw Error("Search operation aborted");if(!bU(F,X,f,j))continue;if(G.length>=Z)break;R++;let O=U5.join(V,F);try{let z=(await Sf.readFile(O,"utf-8")).split(`
162
- `);for(let L=0;L<z.length;L++){let P=z[L];K.lastIndex=0;let S=K.exec(P);while(S!==null){if(G.length>=Z)break;let b=Math.max(0,L-W),u=Math.min(z.length-1,L+W),o=[];for(let J0=b;J0<=u;J0++){let t=J0===L?">":" ";o.push(`${t} ${J0+1}: ${z[J0]}`)}if(G.push({file:F,line:L+1,column:S.index+1,match:S[0],context:o}),S.index===K.lastIndex)K.lastIndex++;S=K.exec(P)}}}catch{}}if(G.length===0)return`No results found for pattern: ${Y}
162
+ `);for(let L=0;L<z.length;L++){let P=z[L];K.lastIndex=0;let S=K.exec(P);while(S!==null){if(G.length>=Z)break;let b=Math.max(0,L-W),u=Math.min(z.length-1,L+W),t=[];for(let Q0=b;Q0<=u;Q0++){let e=Q0===L?">":" ";t.push(`${e} ${Q0+1}: ${z[Q0]}`)}if(G.push({file:F,line:L+1,column:S.index+1,match:S[0],context:t}),S.index===K.lastIndex)K.lastIndex++;S=K.exec(P)}}}catch{}}if(G.length===0)return`No results found for pattern: ${Y}
163
163
  Searched ${R} files.`;let U=[`Found ${G.length} result${G.length===1?"":"s"} for pattern: ${Y}`,`Searched ${R} files.`,""];for(let F of G)U.push(`${F.file}:${F.line}:${F.column}`),U.push(...F.context),U.push("");if(G.length>=Z)U.push(`(Showing first ${Z} results. Refine your search for more specific results.)`);return Nf(U.join(`
164
164
  `))}}function Nf($){if($.length<=i2)return $;let J=Math.ceil(i2/2),Q=Math.max(1,i2-J);return`${$.slice(0,J)}
165
165
  [... search output truncated: ${$.length} chars total. Narrow the pattern or scope to view the elided matches ...]
@@ -189,19 +189,19 @@ Searched ${R} files.`;let U=[`Found ${G.length} result${G.length===1?"":"s"} for
189
189
 
190
190
  ...[assistant text truncated: omitted ${$} chars due to repeated tool-call markup]...
191
191
 
192
- `;function QY($=process.env){return{maxToolResultChars:JY($[sf.maxToolResultChars]),maxTotalTextBytes:JY($[sf.maxTotalTextBytes])}}class pZ{indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;constructor($={}){this.maxToolResultChars=i4($.maxToolResultChars,GR),this.maxFileContentChars=i4($.maxFileContentChars,FR),this.maxTotalTextBytes=i4($.maxTotalTextBytes,DR),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=i4($.maxAssistantTextChars,UR),this.maxAssistantToolMarkupChars=i4($.maxAssistantToolMarkupChars,RR)}buildForApi($){this.reindex($);let Q=this.addMissingToolResults($).map((W)=>{if(!Array.isArray(W.content)){if(W.role==="user"&&typeof W.content==="string"){let f=nf(W.content);if(f!==W.content)return{...W,content:f}}if(W.role==="assistant"&&typeof W.content==="string"){let f=this.truncateAssistantText(W.content);if(f!==W.content)return{...W,content:f}}return W}let j=!1,X=W.content.map((f)=>{let Y=this.transformBlock(f,W.role);if(Y!==f)j=!0;return Y});return j?{...W,content:X}:W}),Z=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(Z)}transformBlock($,J){if(J==="user"&&$.type==="text"&&typeof $.text==="string"){let W=nf($.text);if(W!==$.text)return{...$,text:W};return $}if(J==="assistant"&&$.type==="text"&&typeof $.text==="string"){let W=this.truncateAssistantText($.text);return W===$.text?$:{...$,text:W}}if($.type==="file"){let W=J8($.content,this.maxFileContentChars,tf);return W===$.content?$:{...$,content:W}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),Z=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let W=this.getReadLocators($);if(W.length>0){let j=W.filter((X)=>this.isOutdatedReadLocator(X,$.tool_use_id));if(j.length>0)Z=this.replaceOutdatedReadContent(Z,j)}}return Z=this.truncateToolResultContent(Z),Z===$.content?$:{...$,content:Z}}reindex($){let J=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!J)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let Z=$[Q];if(!Array.isArray(Z.content))continue;for(let W=0;W<Z.content.length;W++){let j=Z.content[W];if(j.type==="file")this.latestFullContentOwnerByPathCache.set(j.path,`file:${Q}:${W}`);else if(j.type==="tool_use"){let X=j.name.toLowerCase();if(this.toolNameByIdCache.set(j.id,X),this.isReadTool(X)){let f=this.extractLocatorsFromReadToolInput(j.input);if(f.length>0)this.readLocatorsByToolUseIdCache.set(j.id,f)}}else if(j.type==="tool_result"){let X=this.resolveToolName(j);if(!this.isReadTool(X)||j.is_error===!0)continue;let f=this.getReadLocators(j);for(let Y of f)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(Y),j.tool_use_id),this.isFullFileRead(Y))this.latestFullContentOwnerByPathCache.set(Y.path,j.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}addMissingToolResults($){let J=this.collectToolResultIds($),Q=[],Z=new Map,W=!1,j=()=>{if(Z.size===0)return;X(this.createMissingToolResultMessage(Z)),Z.clear(),W=!0},X=(f)=>{let Y=Q.at(-1);if(this.shouldMergeUserAfterToolResults(Y,f)){Q[Q.length-1]={...Y,content:[...Y.content,...this.contentBlocksForUserMerge(f.content)]},W=!0;return}Q.push(f)};for(let f of $){if(this.isToolResultOnlyMessage(f)){if(X(this.appendMissingToolResults(f,Z)),Z.size>0)Z.clear(),W=!0;continue}if(Array.isArray(f.content)){let Y=f.content.filter((H)=>H.type==="tool_result"),V=f.content.filter((H)=>H.type!=="tool_result");if(Y.length>0){let H=this.appendMissingToolResults({...f,role:"user",content:Y},Z);if(X(H),Z.size>0)Z.clear();W=!0}if(V.length>0||Y.length===0){if(Y.length===0)j();let H=Y.length>0?{...f,content:V}:f;if(X(H),H.role==="assistant")this.trackMissingToolCalls(H,J,Z)}continue}j(),X(f)}return j(),W?Q:$}appendMissingToolResults($,J){if(J.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(J)]}}shouldMergeUserAfterToolResults($,J){return $?.role==="user"&&J.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(J.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let J=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let Z of Q.content)if(Z.type==="tool_result")J.add(Z.tool_use_id)}return J}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((J)=>J.type==="tool_result")}trackMissingToolCalls($,J,Q){if(!Array.isArray($.content))return;for(let Z of $.content){if(Z.type!=="tool_use"||J.has(Z.id))continue;Q.set(Z.id,Z.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([J,Q])=>({type:"tool_result",tool_use_id:J,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${of} Tool: ${$}.`:of}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 J=$,Q=this.readResultLocatorCache.get(J);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(J,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let J=$,Q=[],Z=this.extractLocatorFromReadRequest(J);if(Z)Q.push(Z);if(Array.isArray(J.files))for(let W of J.files){let j=this.extractLocatorFromReadRequest(W);if(j)Q.push(j)}if(Array.isArray(J.file_paths)){for(let W of J.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($);for(let J of $){if(J.type!=="text")continue;let Q=this.tryParseReadLocators(J.text);if(Q.length>0)return Q}return[]}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let Z of $){let W=this.extractLocatorFromResultEntry(Z);if(W)Q.push(W)}return this.dedupeReadLocators(Q)}let J=this.extractLocatorFromResultEntry($);return J?[J]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let J=$,Q=this.extractPath(J);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(J.start_line),endLine:this.extractLineNumber(J.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let J=$,Q=this.extractPath(J);if(Q)return{path:Q,startLine:this.extractLineNumber(J.start_line),endLine:this.extractLineNumber(J.end_line)};if(typeof J.query==="string"&&J.query.length>0)return this.parseReadQuery(J.query);return}extractPath($){let J=[$.path,$.file_path,$.filePath];for(let Q of J)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let J=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!J)return{path:$,startLine:null,endLine:null};return{path:J[1],startLine:Number(J[2]),endLine:J[3]==="EOF"?null:Number(J[3])}}dedupeReadLocators($){let J=new Map;for(let Q of $)J.set(this.toReadLocatorKey(Q),Q);return Array.from(J.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,J){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==J)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==J}replaceOutdatedReadContent($,J){let Q=new Set(J.map((j)=>this.toReadLocatorKey(j))),Z=new Set(J.map((j)=>j.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??d$;let W=0;for(let j of $)if(j.type==="text")W+=this.countOutdatedImageEntries(j.text,Q);return $.map((j)=>{if(j.type==="file"){if(!Z.has(j.path))return j;return{...j,content:d$}}if(j.type==="image"){if(W===0)return j;return W-=1,{type:"text",text:d$}}if(j.type!=="text")return j;let X=this.replaceOutdatedInString(j.text,Q);if(X===null)return{...j,text:d$};return X===j.text?j:{...j,text:X}})}countOutdatedImageEntries($,J){let Q;try{Q=JSON.parse($)}catch{return 0}let Z=Array.isArray(Q)?Q:[Q],W=0;for(let j of Z){if(!j||typeof j!=="object")continue;let X=j,f=this.extractLocatorFromResultEntry(X);if(!f)continue;if(!J.has(this.toReadLocatorKey(f)))continue;if(X.result==="Successfully read image"||X.content==="Successfully read image")W+=1}return W}replaceOutdatedInString($,J){let Q;try{Q=JSON.parse($)}catch{return null}let Z=Array.isArray(Q)?Q.map((W)=>this.replaceOutdatedReadEntry(W,J)):this.replaceOutdatedReadEntry(Q,J);return JSON.stringify(Z)}replaceOutdatedReadEntry($,J){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!J.has(this.toReadLocatorKey(Q)))return $;let Z={...$};if(typeof Z.result==="string")Z.result=d$;else if(typeof Z.content==="string")Z.content=d$;else Z.result=d$;return Z}isReadTool($){return!!$&&zR.has($)}resolveToolName($){let J=this.toolNameByIdCache.get($.tool_use_id);if(J!==void 0)return J;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((J)=>{if(J.type==="file"){let Q=this.truncateMiddle(J.content);return Q===J.content?J:{...J,content:Q}}if(J.type==="text"){let Q=this.truncateMiddle(J.text);return Q===J.text?J:{...J,text:Q}}if(n4(J))return this.truncateNestedStrings(J);return J})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let J=!1,Q=$.map((Z)=>{let W=this.truncateNestedStrings(Z);if(W!==Z)J=!0;return W});return J?Q:$}if($!==null&&typeof $==="object"){if(rZ($))return $;let J=!1,Q={};for(let[Z,W]of Object.entries($)){let j=this.truncateNestedStrings(W);if(j!==W)J=!0;Q[Z]=j}return J?Q:$}return $}truncateMiddle($){return J8($,this.maxToolResultChars,tf)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return J8($,this.maxAssistantToolMarkupChars,OR);return J8($,this.maxAssistantTextChars,_R)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let J=0;for(let Q of $.matchAll(TR))if(J+=1,J>=LR)return!0;return!1}truncateToTotalTextBudget($){let J=this.countMessageTextBytes($);if(J<=this.maxTotalTextBytes)return $;let Q=$.map((W)=>{if(!Array.isArray(W.content))return{...W};return{...W,content:W.content.map((j)=>qR(j))}}),Z=this.collectTruncationCandidates(Q);for(let W of Z){if(J<=this.maxTotalTextBytes)break;let j=W.byteLength;if(j<=W.minBytes)continue;let X=J-this.maxTotalTextBytes,f=Math.max(W.minBytes,j-X),Y=MR(W.get(),f,W.makeMarker);W.set(Y),J-=j-Y0(Y)}return Q}countMessageTextBytes($){let J=0;for(let Q of $){if(typeof Q.content==="string"){J+=Y0(Q.content);continue}for(let Z of Q.content)if(Z.type==="text")J+=Y0(Z.text);else if(Z.type==="thinking")J+=Y0(Z.thinking);else if(Z.type==="file")J+=Y0(Z.content);else if(Z.type==="tool_use")J+=w5(Z.input);else if(Z.type==="tool_result"){if(typeof Z.content==="string")J+=Y0(Z.content);else for(let W of Z.content)if(W.type==="text")J+=Y0(W.text);else if(W.type==="file")J+=Y0(W.content);else if(n4(W))J+=w5(W)}}return J}collectTruncationCandidates($){let J=[],Q=[];for(let Z of $){if(Z.role==="assistant"&&typeof Z.content==="string"){J.push({byteLength:Y0(Z.content),minBytes:af,makeMarker:ef,get:()=>Z.content,set:(W)=>{Z.content=W}});continue}if(!Array.isArray(Z.content))continue;for(let W of Z.content){if(W.type==="tool_use"){S5(W.input,Q);continue}if(Z.role==="assistant"&&W.type==="text"){J.push({byteLength:Y0(W.text),minBytes:af,makeMarker:ef,get:()=>W.text,set:(j)=>{W.text=j}});continue}if(W.type!=="tool_result")continue;if(typeof W.content==="string"){J.push({byteLength:Y0(W.content),minBytes:a4,makeMarker:s4,get:()=>W.content,set:(j)=>{W.content=j}});continue}for(let j of W.content)if(j.type==="text")J.push({byteLength:Y0(j.text),minBytes:a4,makeMarker:s4,get:()=>j.text,set:(X)=>{j.text=X}});else if(j.type==="file")J.push({byteLength:Y0(j.content),minBytes:a4,makeMarker:s4,get:()=>j.content,set:(X)=>{j.content=X}});else if(n4(j))S5(j,J)}}return J.sort((Z,W)=>W.byteLength-Z.byteLength),Q.sort((Z,W)=>W.byteLength-Z.byteLength),[...J,...Q]}applyMediaBudget($){let J=this.resolveMediaBudget();if(J.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&J.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&J.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=BR(),Z=!1,W=$.map((j)=>{if(!Array.isArray(j.content))return j;let X=!1,f=j.content.map((Y)=>{let V=this.applyMediaBudgetToBlock(Y,J,Q);if(V!==Y)X=!0;return V});if(!X)return j;return Z=!0,{...j,content:f}});return Z?W:$}resolveMediaBudget(){return AR(this.mediaBudget)}applyMediaBudgetToBlock($,J,Q){if(lZ($))return this.limitImageContent($,J,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let Z=!1,W=$.content.map((j)=>{let X=this.applyMediaBudgetToToolResultEntry(j,J,Q);if(X!==j)Z=!0;return X});return Z?{...$,content:W}:$}applyMediaBudgetToToolResultEntry($,J,Q){if(lZ($))return this.limitImageContent($,J,Q);if(n4($))return this.limitNestedMedia($,J,Q);return $}limitNestedMedia($,J,Q){if(lZ($)){let Z=this.limitImageContent($,J,Q);return Z.type==="text"?Z.text:Z}if(Array.isArray($)){let Z=!1,W=$.map((j)=>{let X=this.limitNestedMedia(j,J,Q);if(X!==j)Z=!0;return X});return Z?W:$}if($!==null&&typeof $==="object"){let Z=!1,W={};for(let[j,X]of Object.entries($)){let f=this.limitNestedMedia(X,J,Q);if(f!==X)Z=!0;W[j]=f}return Z?W:$}return $}limitImageContent($,J,Q){if(!ZY($))return{type:"text",text:rf};let Z=KR($.mediaType,$.data,{maxImageEncodedBytes:J.maxImageEncodedBytes,maxImageDecodedBytes:J.maxImageDecodedBytes,maxTotalMediaBytes:J.maxTotalMediaBytes},Q);if(!Z.ok)return{type:"text",text:rf};return{...$,data:Z.base64,mediaType:Z.mediaType}}}var $Y=String.raw`[\|\uFF5C]`,TR=new RegExp(String.raw`<\s*(?:${$Y}\s*)?DSML\s*(?:${$Y}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function Y0($){return Buffer.byteLength($,"utf8")}function JY($){if($===void 0)return;let J=Number.parseInt($,10);return Number.isFinite(J)&&J>0?J:void 0}function i4($,J){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):J}function J8($,J,Q){if($.length<=J)return $;let Z=Q($.length-J),W=Math.max(0,Math.floor((J-Z.length)/2)),j=Math.max(0,$.length-W*2),X=Q(j),f=Math.max(0,Math.floor((J-X.length)/2)),Y=$.slice(0,f),V=f>0?$.slice(-f):"";return`${Y}${X}${V}`}function MR($,J,Q){if(Y0($)<=J)return $;let Z=0,W=$.length,j=J8($,0,Q);while(Z<=W){let X=Z+W>>>1,f=J8($,X,Q);if(Y0(f)<=J)j=f,Z=X+1;else W=X-1}return j}function qR($){if($.type==="tool_use")return{...$,input:C5($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((J)=>n4(J)?C5(J):{...J})}}function n4($){if($===null||typeof $!=="object")return!1;let J=$.type;return J!=="text"&&J!=="image"&&J!=="file"}function lZ($){return $!==null&&typeof $==="object"&&$.type==="image"}function ZY($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function rZ($){return ZY($)}function w5($){if(typeof $==="string")return Y0($);if(Array.isArray($)){let J=0;for(let Q of $)J+=w5(Q);return J}if($!==null&&typeof $==="object"){if(rZ($))return 0;let J=0;for(let Q of Object.values($))J+=w5(Q);return J}return 0}function S5($,J){if(Array.isArray($)){$.forEach((Q,Z)=>{if(typeof Q==="string")J.push({byteLength:Y0(Q),minBytes:a4,makeMarker:s4,get:()=>$[Z],set:(W)=>{$[Z]=W}});else S5(Q,J)});return}if($!==null&&typeof $==="object"){if(rZ($))return;let Q=$;for(let Z of Object.keys(Q)){let W=Q[Z];if(typeof W==="string")J.push({byteLength:Y0(W),minBytes:a4,makeMarker:s4,get:()=>Q[Z],set:(j)=>{Q[Z]=j}});else S5(W,J)}}}function C5($){if(Array.isArray($))return $.map(C5);if($!==null&&typeof $==="object"){let J={};for(let[Q,Z]of Object.entries($))J[Q]=C5(Z);return J}return $}function iZ(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class nZ{messages=[];conversationId=iZ();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=iZ(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=iZ(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function WY($){let{agentConfig:J}=$,Q=PR(J),Z=NR(J),W=$.hooks,j=wR(J.maxParallelToolCalls);return{sessionId:$.sessionId??J.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??J.systemPrompt,messageModelInfo:Z,model:$.model,modelOptions:Q,tools:$.tools,hooks:W,prepareTurn:$.prepareTurn,consumePendingUserMessage:J.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??J.logger,telemetry:$.telemetry??J.telemetry,initialMessages:$.initialMessages,completionPolicy:J.completionPolicy,maxIterations:J.maxIterations,toolExecution:j,toolPolicies:J.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:J.requestToolApproval}}function PR($){let J={};if($.thinking!==void 0)J.thinking=$.thinking;if($.reasoningEffort!==void 0)J.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)J.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)J.maxTokensPerTurn=$.maxTokensPerTurn;if($.apiTimeoutMs!==void 0)J.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(J).length>0?J:void 0}function NR($){let J=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:J}}function wR($){if($===void 0)return;return $>=2?"parallel":"sequential"}function SR(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function CR($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function aZ($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(aZ);let J={};for(let Q of Object.keys($).sort())J[Q]=aZ($[Q]);return J}function yR($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(aZ($))}catch{return String($)}}function ER($,J,Q,Z){if(J===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=J,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===Z.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=Z.hardThreshold}}var jY={softThreshold:3,hardThreshold:5};class sZ{config;state=SR();constructor($){this.config={softThreshold:$?.softThreshold??jY.softThreshold,hardThreshold:$?.hardThreshold??jY.hardThreshold}}inspect($){let J=yR($.input),Q=ER(this.state,$.name,J,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(){CR(this.state)}}class oZ{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let J=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&J?J:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let Z=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(Z),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}),!J||Q<J)return{action:"continue"};let W=await hR({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:J,reason:$.reason,details:$.details},this.options.onLimitReached);if(W.action==="continue"){let j=W.guidance?.trim();if(j)this.options.appendRecoveryNotice(j,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:j}}return{action:"stop",reason:W.reason?.trim()||void 0,message:bR({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:J,reason:$.reason,details:$.details,stopReason:W.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function bR($){let J=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)J.push(`Error: ${Q}`);let Z=$.stopReason?.trim();if(Z)J.push(`Decision: ${Z}`);return J.push("Session state was preserved. Send a new prompt to resume from the latest state."),J.join(" ")}async function hR($,J){if(!J)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await J($)}catch(Q){return{action:"stop",reason:Q instanceof Error?Q.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function kR($){let J=$.content.filter((Q)=>Q.type==="text");if(J.length===0)return;return J.map((Q)=>Q.text).join("")}function IR($){let J=$.content.filter((Q)=>Q.type==="reasoning");if(J.length===0)return;return{reasoning:J.map((Q)=>Q.text).join(""),redacted:J.some((Q)=>Q.redacted===!0)}}function xR($){return $.content.find((J)=>J.type==="tool-result")}function gR($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function mR($){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 tZ{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 J=[],Q=kR($);if(Q!==void 0)J.push({type:"content_end",contentType:"text",text:Q});let Z=IR($);if(Z!==void 0)J.push({type:"content_end",contentType:"reasoning",reasoning:Z.reasoning});return J}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 J=this.toolStartedAt.get($.toolCall.toolCallId),Q=J===void 0?void 0:Date.now()-J;this.toolStartedAt.delete($.toolCall.toolCallId);let Z=xR($.message),W=Z?.output,j=mR(Z);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:W,error:j,durationMs:Q}]}translateUsage($){let J=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,Z=$.cacheReadTokens-this.lastUsage.cacheReadTokens,W=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,j=this.lastUsage.totalCost??0,f=($.totalCost??0)-j;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,J),outputTokens:Math.max(0,Q),cacheReadTokens:Z===0?void 0:Math.max(0,Z),cacheWriteTokens:W===0?void 0:Math.max(0,W),cost:f===0?void 0:f,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let J={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:gR($.status),text:$.outputText,iterations:$.iterations,usage:J}]}}function iR($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function nR($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function aR($,J){let Q=$.trim(),Z=J.map((W)=>W.trim()).filter(Boolean).join(`
192
+ `;function QY($=process.env){return{maxToolResultChars:JY($[sf.maxToolResultChars]),maxTotalTextBytes:JY($[sf.maxTotalTextBytes])}}class pZ{indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;constructor($={}){this.maxToolResultChars=i4($.maxToolResultChars,GR),this.maxFileContentChars=i4($.maxFileContentChars,FR),this.maxTotalTextBytes=i4($.maxTotalTextBytes,DR),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=i4($.maxAssistantTextChars,UR),this.maxAssistantToolMarkupChars=i4($.maxAssistantToolMarkupChars,RR)}buildForApi($){this.reindex($);let Q=this.addMissingToolResults($).map((W)=>{if(!Array.isArray(W.content)){if(W.role==="user"&&typeof W.content==="string"){let f=nf(W.content);if(f!==W.content)return{...W,content:f}}if(W.role==="assistant"&&typeof W.content==="string"){let f=this.truncateAssistantText(W.content);if(f!==W.content)return{...W,content:f}}return W}let j=!1,X=W.content.map((f)=>{let Y=this.transformBlock(f,W.role);if(Y!==f)j=!0;return Y});return j?{...W,content:X}:W}),Z=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(Z)}transformBlock($,J){if(J==="user"&&$.type==="text"&&typeof $.text==="string"){let W=nf($.text);if(W!==$.text)return{...$,text:W};return $}if(J==="assistant"&&$.type==="text"&&typeof $.text==="string"){let W=this.truncateAssistantText($.text);return W===$.text?$:{...$,text:W}}if($.type==="file"){let W=J8($.content,this.maxFileContentChars,tf);return W===$.content?$:{...$,content:W}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),Z=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let W=this.getReadLocators($);if(W.length>0){let j=W.filter((X)=>this.isOutdatedReadLocator(X,$.tool_use_id));if(j.length>0)Z=this.replaceOutdatedReadContent(Z,j)}}return Z=this.truncateToolResultContent(Z),Z===$.content?$:{...$,content:Z}}reindex($){let J=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!J)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let Z=$[Q];if(!Array.isArray(Z.content))continue;for(let W=0;W<Z.content.length;W++){let j=Z.content[W];if(j.type==="file")this.latestFullContentOwnerByPathCache.set(j.path,`file:${Q}:${W}`);else if(j.type==="tool_use"){let X=j.name.toLowerCase();if(this.toolNameByIdCache.set(j.id,X),this.isReadTool(X)){let f=this.extractLocatorsFromReadToolInput(j.input);if(f.length>0)this.readLocatorsByToolUseIdCache.set(j.id,f)}}else if(j.type==="tool_result"){let X=this.resolveToolName(j);if(!this.isReadTool(X)||j.is_error===!0)continue;let f=this.getReadLocators(j);for(let Y of f)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(Y),j.tool_use_id),this.isFullFileRead(Y))this.latestFullContentOwnerByPathCache.set(Y.path,j.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}addMissingToolResults($){let J=this.collectToolResultIds($),Q=[],Z=new Map,W=!1,j=()=>{if(Z.size===0)return;X(this.createMissingToolResultMessage(Z)),Z.clear(),W=!0},X=(f)=>{let Y=Q.at(-1);if(this.shouldMergeUserAfterToolResults(Y,f)){Q[Q.length-1]={...Y,content:[...Y.content,...this.contentBlocksForUserMerge(f.content)]},W=!0;return}Q.push(f)};for(let f of $){if(this.isToolResultOnlyMessage(f)){if(X(this.appendMissingToolResults(f,Z)),Z.size>0)Z.clear(),W=!0;continue}if(Array.isArray(f.content)){let Y=f.content.filter((H)=>H.type==="tool_result"),V=f.content.filter((H)=>H.type!=="tool_result");if(Y.length>0){let H=this.appendMissingToolResults({...f,role:"user",content:Y},Z);if(X(H),Z.size>0)Z.clear();W=!0}if(V.length>0||Y.length===0){if(Y.length===0)j();let H=Y.length>0?{...f,content:V}:f;if(X(H),H.role==="assistant")this.trackMissingToolCalls(H,J,Z)}continue}j(),X(f)}return j(),W?Q:$}appendMissingToolResults($,J){if(J.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(J)]}}shouldMergeUserAfterToolResults($,J){return $?.role==="user"&&J.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(J.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let J=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let Z of Q.content)if(Z.type==="tool_result")J.add(Z.tool_use_id)}return J}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((J)=>J.type==="tool_result")}trackMissingToolCalls($,J,Q){if(!Array.isArray($.content))return;for(let Z of $.content){if(Z.type!=="tool_use"||J.has(Z.id))continue;Q.set(Z.id,Z.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([J,Q])=>({type:"tool_result",tool_use_id:J,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${of} Tool: ${$}.`:of}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 J=$,Q=this.readResultLocatorCache.get(J);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(J,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let J=$,Q=[],Z=this.extractLocatorFromReadRequest(J);if(Z)Q.push(Z);if(Array.isArray(J.files))for(let W of J.files){let j=this.extractLocatorFromReadRequest(W);if(j)Q.push(j)}if(Array.isArray(J.file_paths)){for(let W of J.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($);for(let J of $){if(J.type!=="text")continue;let Q=this.tryParseReadLocators(J.text);if(Q.length>0)return Q}return[]}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let Z of $){let W=this.extractLocatorFromResultEntry(Z);if(W)Q.push(W)}return this.dedupeReadLocators(Q)}let J=this.extractLocatorFromResultEntry($);return J?[J]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let J=$,Q=this.extractPath(J);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(J.start_line),endLine:this.extractLineNumber(J.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let J=$,Q=this.extractPath(J);if(Q)return{path:Q,startLine:this.extractLineNumber(J.start_line),endLine:this.extractLineNumber(J.end_line)};if(typeof J.query==="string"&&J.query.length>0)return this.parseReadQuery(J.query);return}extractPath($){let J=[$.path,$.file_path,$.filePath];for(let Q of J)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let J=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!J)return{path:$,startLine:null,endLine:null};return{path:J[1],startLine:Number(J[2]),endLine:J[3]==="EOF"?null:Number(J[3])}}dedupeReadLocators($){let J=new Map;for(let Q of $)J.set(this.toReadLocatorKey(Q),Q);return Array.from(J.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,J){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==J)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==J}replaceOutdatedReadContent($,J){let Q=new Set(J.map((j)=>this.toReadLocatorKey(j))),Z=new Set(J.map((j)=>j.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??d$;let W=0;for(let j of $)if(j.type==="text")W+=this.countOutdatedImageEntries(j.text,Q);return $.map((j)=>{if(j.type==="file"){if(!Z.has(j.path))return j;return{...j,content:d$}}if(j.type==="image"){if(W===0)return j;return W-=1,{type:"text",text:d$}}if(j.type!=="text")return j;let X=this.replaceOutdatedInString(j.text,Q);if(X===null)return{...j,text:d$};return X===j.text?j:{...j,text:X}})}countOutdatedImageEntries($,J){let Q;try{Q=JSON.parse($)}catch{return 0}let Z=Array.isArray(Q)?Q:[Q],W=0;for(let j of Z){if(!j||typeof j!=="object")continue;let X=j,f=this.extractLocatorFromResultEntry(X);if(!f)continue;if(!J.has(this.toReadLocatorKey(f)))continue;if(X.result==="Successfully read image"||X.content==="Successfully read image")W+=1}return W}replaceOutdatedInString($,J){let Q;try{Q=JSON.parse($)}catch{return null}let Z=Array.isArray(Q)?Q.map((W)=>this.replaceOutdatedReadEntry(W,J)):this.replaceOutdatedReadEntry(Q,J);return JSON.stringify(Z)}replaceOutdatedReadEntry($,J){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!J.has(this.toReadLocatorKey(Q)))return $;let Z={...$};if(typeof Z.result==="string")Z.result=d$;else if(typeof Z.content==="string")Z.content=d$;else Z.result=d$;return Z}isReadTool($){return!!$&&zR.has($)}resolveToolName($){let J=this.toolNameByIdCache.get($.tool_use_id);if(J!==void 0)return J;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((J)=>{if(J.type==="file"){let Q=this.truncateMiddle(J.content);return Q===J.content?J:{...J,content:Q}}if(J.type==="text"){let Q=this.truncateMiddle(J.text);return Q===J.text?J:{...J,text:Q}}if(n4(J))return this.truncateNestedStrings(J);return J})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let J=!1,Q=$.map((Z)=>{let W=this.truncateNestedStrings(Z);if(W!==Z)J=!0;return W});return J?Q:$}if($!==null&&typeof $==="object"){if(rZ($))return $;let J=!1,Q={};for(let[Z,W]of Object.entries($)){let j=this.truncateNestedStrings(W);if(j!==W)J=!0;Q[Z]=j}return J?Q:$}return $}truncateMiddle($){return J8($,this.maxToolResultChars,tf)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return J8($,this.maxAssistantToolMarkupChars,OR);return J8($,this.maxAssistantTextChars,_R)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let J=0;for(let Q of $.matchAll(TR))if(J+=1,J>=LR)return!0;return!1}truncateToTotalTextBudget($){let J=this.countMessageTextBytes($);if(J<=this.maxTotalTextBytes)return $;let Q=$.map((W)=>{if(!Array.isArray(W.content))return{...W};return{...W,content:W.content.map((j)=>qR(j))}}),Z=this.collectTruncationCandidates(Q);for(let W of Z){if(J<=this.maxTotalTextBytes)break;let j=W.byteLength;if(j<=W.minBytes)continue;let X=J-this.maxTotalTextBytes,f=Math.max(W.minBytes,j-X),Y=MR(W.get(),f,W.makeMarker);W.set(Y),J-=j-V0(Y)}return Q}countMessageTextBytes($){let J=0;for(let Q of $){if(typeof Q.content==="string"){J+=V0(Q.content);continue}for(let Z of Q.content)if(Z.type==="text")J+=V0(Z.text);else if(Z.type==="thinking")J+=V0(Z.thinking);else if(Z.type==="file")J+=V0(Z.content);else if(Z.type==="tool_use")J+=w5(Z.input);else if(Z.type==="tool_result"){if(typeof Z.content==="string")J+=V0(Z.content);else for(let W of Z.content)if(W.type==="text")J+=V0(W.text);else if(W.type==="file")J+=V0(W.content);else if(n4(W))J+=w5(W)}}return J}collectTruncationCandidates($){let J=[],Q=[];for(let Z of $){if(Z.role==="assistant"&&typeof Z.content==="string"){J.push({byteLength:V0(Z.content),minBytes:af,makeMarker:ef,get:()=>Z.content,set:(W)=>{Z.content=W}});continue}if(!Array.isArray(Z.content))continue;for(let W of Z.content){if(W.type==="tool_use"){S5(W.input,Q);continue}if(Z.role==="assistant"&&W.type==="text"){J.push({byteLength:V0(W.text),minBytes:af,makeMarker:ef,get:()=>W.text,set:(j)=>{W.text=j}});continue}if(W.type!=="tool_result")continue;if(typeof W.content==="string"){J.push({byteLength:V0(W.content),minBytes:a4,makeMarker:s4,get:()=>W.content,set:(j)=>{W.content=j}});continue}for(let j of W.content)if(j.type==="text")J.push({byteLength:V0(j.text),minBytes:a4,makeMarker:s4,get:()=>j.text,set:(X)=>{j.text=X}});else if(j.type==="file")J.push({byteLength:V0(j.content),minBytes:a4,makeMarker:s4,get:()=>j.content,set:(X)=>{j.content=X}});else if(n4(j))S5(j,J)}}return J.sort((Z,W)=>W.byteLength-Z.byteLength),Q.sort((Z,W)=>W.byteLength-Z.byteLength),[...J,...Q]}applyMediaBudget($){let J=this.resolveMediaBudget();if(J.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&J.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&J.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=BR(),Z=!1,W=$.map((j)=>{if(!Array.isArray(j.content))return j;let X=!1,f=j.content.map((Y)=>{let V=this.applyMediaBudgetToBlock(Y,J,Q);if(V!==Y)X=!0;return V});if(!X)return j;return Z=!0,{...j,content:f}});return Z?W:$}resolveMediaBudget(){return AR(this.mediaBudget)}applyMediaBudgetToBlock($,J,Q){if(lZ($))return this.limitImageContent($,J,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let Z=!1,W=$.content.map((j)=>{let X=this.applyMediaBudgetToToolResultEntry(j,J,Q);if(X!==j)Z=!0;return X});return Z?{...$,content:W}:$}applyMediaBudgetToToolResultEntry($,J,Q){if(lZ($))return this.limitImageContent($,J,Q);if(n4($))return this.limitNestedMedia($,J,Q);return $}limitNestedMedia($,J,Q){if(lZ($)){let Z=this.limitImageContent($,J,Q);return Z.type==="text"?Z.text:Z}if(Array.isArray($)){let Z=!1,W=$.map((j)=>{let X=this.limitNestedMedia(j,J,Q);if(X!==j)Z=!0;return X});return Z?W:$}if($!==null&&typeof $==="object"){let Z=!1,W={};for(let[j,X]of Object.entries($)){let f=this.limitNestedMedia(X,J,Q);if(f!==X)Z=!0;W[j]=f}return Z?W:$}return $}limitImageContent($,J,Q){if(!ZY($))return{type:"text",text:rf};let Z=KR($.mediaType,$.data,{maxImageEncodedBytes:J.maxImageEncodedBytes,maxImageDecodedBytes:J.maxImageDecodedBytes,maxTotalMediaBytes:J.maxTotalMediaBytes},Q);if(!Z.ok)return{type:"text",text:rf};return{...$,data:Z.base64,mediaType:Z.mediaType}}}var $Y=String.raw`[\|\uFF5C]`,TR=new RegExp(String.raw`<\s*(?:${$Y}\s*)?DSML\s*(?:${$Y}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function V0($){return Buffer.byteLength($,"utf8")}function JY($){if($===void 0)return;let J=Number.parseInt($,10);return Number.isFinite(J)&&J>0?J:void 0}function i4($,J){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):J}function J8($,J,Q){if($.length<=J)return $;let Z=Q($.length-J),W=Math.max(0,Math.floor((J-Z.length)/2)),j=Math.max(0,$.length-W*2),X=Q(j),f=Math.max(0,Math.floor((J-X.length)/2)),Y=$.slice(0,f),V=f>0?$.slice(-f):"";return`${Y}${X}${V}`}function MR($,J,Q){if(V0($)<=J)return $;let Z=0,W=$.length,j=J8($,0,Q);while(Z<=W){let X=Z+W>>>1,f=J8($,X,Q);if(V0(f)<=J)j=f,Z=X+1;else W=X-1}return j}function qR($){if($.type==="tool_use")return{...$,input:C5($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((J)=>n4(J)?C5(J):{...J})}}function n4($){if($===null||typeof $!=="object")return!1;let J=$.type;return J!=="text"&&J!=="image"&&J!=="file"}function lZ($){return $!==null&&typeof $==="object"&&$.type==="image"}function ZY($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function rZ($){return ZY($)}function w5($){if(typeof $==="string")return V0($);if(Array.isArray($)){let J=0;for(let Q of $)J+=w5(Q);return J}if($!==null&&typeof $==="object"){if(rZ($))return 0;let J=0;for(let Q of Object.values($))J+=w5(Q);return J}return 0}function S5($,J){if(Array.isArray($)){$.forEach((Q,Z)=>{if(typeof Q==="string")J.push({byteLength:V0(Q),minBytes:a4,makeMarker:s4,get:()=>$[Z],set:(W)=>{$[Z]=W}});else S5(Q,J)});return}if($!==null&&typeof $==="object"){if(rZ($))return;let Q=$;for(let Z of Object.keys(Q)){let W=Q[Z];if(typeof W==="string")J.push({byteLength:V0(W),minBytes:a4,makeMarker:s4,get:()=>Q[Z],set:(j)=>{Q[Z]=j}});else S5(W,J)}}}function C5($){if(Array.isArray($))return $.map(C5);if($!==null&&typeof $==="object"){let J={};for(let[Q,Z]of Object.entries($))J[Q]=C5(Z);return J}return $}function iZ(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class nZ{messages=[];conversationId=iZ();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=iZ(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=iZ(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function WY($){let{agentConfig:J}=$,Q=PR(J),Z=NR(J),W=$.hooks,j=wR(J.maxParallelToolCalls);return{sessionId:$.sessionId??J.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??J.systemPrompt,messageModelInfo:Z,model:$.model,modelOptions:Q,tools:$.tools,hooks:W,prepareTurn:$.prepareTurn,consumePendingUserMessage:J.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??J.logger,telemetry:$.telemetry??J.telemetry,initialMessages:$.initialMessages,completionPolicy:J.completionPolicy,maxIterations:J.maxIterations,toolExecution:j,toolPolicies:J.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:J.requestToolApproval}}function PR($){let J={};if($.thinking!==void 0)J.thinking=$.thinking;if($.reasoningEffort!==void 0)J.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)J.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)J.maxTokensPerTurn=$.maxTokensPerTurn;if($.apiTimeoutMs!==void 0)J.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(J).length>0?J:void 0}function NR($){let J=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:J}}function wR($){if($===void 0)return;return $>=2?"parallel":"sequential"}function SR(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function CR($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function aZ($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(aZ);let J={};for(let Q of Object.keys($).sort())J[Q]=aZ($[Q]);return J}function yR($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(aZ($))}catch{return String($)}}function ER($,J,Q,Z){if(J===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=J,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===Z.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=Z.hardThreshold}}var jY={softThreshold:3,hardThreshold:5};class sZ{config;state=SR();constructor($){this.config={softThreshold:$?.softThreshold??jY.softThreshold,hardThreshold:$?.hardThreshold??jY.hardThreshold}}inspect($){let J=yR($.input),Q=ER(this.state,$.name,J,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(){CR(this.state)}}class oZ{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let J=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&J?J:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let Z=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(Z),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}),!J||Q<J)return{action:"continue"};let W=await hR({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:J,reason:$.reason,details:$.details},this.options.onLimitReached);if(W.action==="continue"){let j=W.guidance?.trim();if(j)this.options.appendRecoveryNotice(j,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:j}}return{action:"stop",reason:W.reason?.trim()||void 0,message:bR({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:J,reason:$.reason,details:$.details,stopReason:W.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function bR($){let J=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)J.push(`Error: ${Q}`);let Z=$.stopReason?.trim();if(Z)J.push(`Decision: ${Z}`);return J.push("Session state was preserved. Send a new prompt to resume from the latest state."),J.join(" ")}async function hR($,J){if(!J)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await J($)}catch(Q){return{action:"stop",reason:Q instanceof Error?Q.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function kR($){let J=$.content.filter((Q)=>Q.type==="text");if(J.length===0)return;return J.map((Q)=>Q.text).join("")}function IR($){let J=$.content.filter((Q)=>Q.type==="reasoning");if(J.length===0)return;return{reasoning:J.map((Q)=>Q.text).join(""),redacted:J.some((Q)=>Q.redacted===!0)}}function xR($){return $.content.find((J)=>J.type==="tool-result")}function gR($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function mR($){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 tZ{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 J=[],Q=kR($);if(Q!==void 0)J.push({type:"content_end",contentType:"text",text:Q});let Z=IR($);if(Z!==void 0)J.push({type:"content_end",contentType:"reasoning",reasoning:Z.reasoning});return J}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 J=this.toolStartedAt.get($.toolCall.toolCallId),Q=J===void 0?void 0:Date.now()-J;this.toolStartedAt.delete($.toolCall.toolCallId);let Z=xR($.message),W=Z?.output,j=mR(Z);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:W,error:j,durationMs:Q}]}translateUsage($){let J=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,Z=$.cacheReadTokens-this.lastUsage.cacheReadTokens,W=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,j=this.lastUsage.totalCost??0,f=($.totalCost??0)-j;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,J),outputTokens:Math.max(0,Q),cacheReadTokens:Z===0?void 0:Math.max(0,Z),cacheWriteTokens:W===0?void 0:Math.max(0,W),cost:f===0?void 0:f,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let J={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:gR($.status),text:$.outputText,iterations:$.iterations,usage:J}]}}function iR($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function nR($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function aR($,J){let Q=$.trim(),Z=J.map((W)=>W.trim()).filter(Boolean).join(`
193
193
 
194
194
  `);if(Q&&Z)return`${Q}
195
195
 
196
196
  ${Z}`;return Q||Z}function sR($,J){let Q=J?.["*"]??{},Z=J?.[$]??{};return{...Q,...Z}.enabled!==!1}function oR($,J){return $.filter((Q)=>sR(Q.name,J))}function tR($,J){return I1(oR($,J))}function eR($){let J=$.filter((Q)=>Q!==void 0);if(J.length===0)return{};return{beforeRun:async(Q)=>{for(let Z of J){let W=await Z.beforeRun?.(Q);if(W?.stop)return W}return},afterRun:async(Q)=>{for(let Z of J)await Z.afterRun?.(Q)},beforeModel:async(Q)=>{let Z=Q.request,W;for(let j of J){let X=await j.beforeModel?.({...Q,request:Z});if(!X)continue;if(X.stop)return X;W={...W,...X,options:fY(W?.options,X.options)},Z={...Z,...X.messages?{messages:X.messages}:{},...X.tools?{tools:X.tools}:{},...X.options?{options:fY(Z.options,X.options)}:{}}}return W},afterModel:async(Q)=>{for(let Z of J){let W=await Z.afterModel?.(Q);if(W?.stop)return W}return},beforeTool:async(Q)=>{let Z=Q.input,W;for(let j of J){let X=await j.beforeTool?.({...Q,input:Z});if(!X)continue;if(X.stop||X.skip)return X;if(W={...W,...X},Object.hasOwn(X,"input"))Z=X.input}return W},afterTool:async(Q)=>{let Z=Q.result,W;for(let j of J){let X=await j.afterTool?.({...Q,result:Z});if(!X)continue;if(X.stop)return X;if(W={...W,...X},X.result)Z=X.result}return W},onEvent:async(Q)=>{for(let Z of J)await Z.onEvent?.(Q)}}}class V${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 tZ;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($,J={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=J.logger??$.logger,this.telemetry=J.telemetry??$.telemetry,this.createAgentRuntimeImpl=J.createAgentRuntimeImpl??pR,this.conversation=new nZ($.initialMessages),this.messageBuilder=new pZ(QY()),this.contributionRegistry=rR({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 oZ({maxConsecutiveMistakes:Q,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(j)=>this.emitLegacyEvent(j),log:(j,X,f)=>$L(this.logger,j,X,f),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(j,X)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:j}]})}});let Z=$.execution?.loopDetection;this.loopDetectionDisabled=Z===!1;let W=Z===!1||Z===void 0?void 0:Z;this.loopTracker=new sZ(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 J=new Set(this.config.tools.map((Z)=>Z.name)),Q=[...this.config.tools];for(let Z of $)if(!J.has(Z.name))Q.push(Z),J.add(Z.name);this.config={...this.config,tools:Q}}updateConnection($){let J={...this.config};if($.providerId!==void 0)J.providerId=$.providerId;if($.modelId!==void 0)J.modelId=$.modelId;if($.apiKey!==void 0)J.apiKey=$.apiKey;if($.baseUrl!==void 0)J.baseUrl=$.baseUrl;if($.headers!==void 0)J.headers=$.headers;if($.providerConfig!==void 0)J.providerConfig=$.providerConfig;if($.reasoningEffort!==void 0)J.reasoningEffort=$.reasoningEffort;if($.thinking!==void 0)J.thinking=$.thinking;if($.thinkingBudgetTokens!==void 0)J.thinkingBudgetTokens=$.thinkingBudgetTokens;this.config=J}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let J=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=J,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(J)}async shutdown($,J){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($,J,Q){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:J,userFiles:Q,isContinue:!1})}continue($,J,Q){return this.executeRun({userMessage:$,userImages:J,userFiles:Q,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let J of this.contributionRegistry.getRegisteredRules()){let Q=await nR(J);if(Q)$.push(Q)}return aR(this.config.systemPrompt,$)}executeRun($){let J;return J=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===J)this.activeRunPromise=null}),this.activeRunPromise=J,J}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 J=new Date,Q=$.userMessage;if(Q!==void 0){let F=await QL(Q,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:F})}let Z=await this.composeSystemPrompt(),W=pf(this.config,this.logger,this.telemetry),j=new Map;for(let F of this.contributionRegistry.getRegisteredTools())j.set(F.name,F);let X=tR([...j.values()],this.config.toolPolicies),f=new Map;for(let F of X)f.set(F.name,F);for(let F of this.config.tools)f.set(F.name,F);let Y=this.conversation.getConversationId(),V=YY(this.config),H=Array.from(f.values()),B=P5(this.conversation.getMessages()),A=WY({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:Y,parentAgentId:this.parentAgentId,model:W,logger:this.logger,telemetry:this.telemetry,tools:H,toolContextMetadata:{modelSupportsImages:V?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata,[eX]:this.telemetry},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(V,H),initialMessages:B,systemPrompt:Z}),K=this.createAgentRuntimeImpl(A);if(this.activeRuntime=K,this.abortRequested)K.abort(this.abortReason);let G=K.subscribe((F)=>{this.handleRuntimeEvent(F)}),R,D;try{if($.isContinue)R=await K.continue(void 0);else R=await K.run("")}catch(F){D=F instanceof Error?F:Error(String(F))}finally{G();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(R&&R.messages.length>0){let F=$8(R.messages);this.conversation.replaceMessages(F)}let U=new Date;try{return this.buildLegacyResult({runResult:R,thrownError:D,startedAt:J,endedAt:U})}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 $=eR([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((J)=>J.hooks)]);return{...$,beforeModel:async(J)=>{let Q=await $.beforeModel?.(J);if(Q?.stop)return Q;let Z=Q?.messages??J.request.messages,W=await this.prepareMessagesForModelRequest(Z);return{...Q,messages:W}}}}createRuntimePrepareTurn($,J){let Q=this.config.prepareTurn;if(!Q)return;return async(Z)=>{let W=$8(Z.messages),j=await this.prepareProviderMessagesForApi(W),X=await Q({agentId:Z.agentId,conversationId:Z.conversationId??this.conversation.getConversationId(),parentAgentId:Z.parentAgentId??null,iteration:Z.iteration,messages:W,apiMessages:j,abortSignal:Z.signal??new AbortController().signal,systemPrompt:Z.systemPrompt??"",tools:J,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:Z.emitStatusNotice});if(!X)return;return{...X.messages?{messages:P5(X.messages)}:{},...X.systemPrompt!==void 0?{systemPrompt:X.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let J=await this.prepareProviderMessagesForApi(N5($));return P5(J)}async prepareProviderMessagesForApi($){let J=$,Q=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let Z of Q)J=await Z.build(J);return this.messageBuilder.buildForApi(J)}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 J=this.toolStartedAt.get($.toolCall.toolCallId),Q=new Date,Z=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let W=$.message.content.find((Y)=>Y.type==="tool-result"),j=W?.type==="tool-result"&&W.isError===!0,X=j?iR(W?.type==="tool-result"?W.output:void 0):void 0,f={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:Z,output:W?.type==="tool-result"?W.output:void 0,error:X,durationMs:J===void 0?0:Q.getTime()-J.getTime(),startedAt:J??Q,endedAt:Q};if(this.currentRunToolCalls.push(f),j){if(this.currentTurnFailedTools+=1,X)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${X}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let J=this.currentTurnFailedTools,Q=this.currentTurnSuccessfulTools;if(J>0&&Q===0){let Z=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${J} tool call(s) failed${Z?`: ${Z}`:""}`})}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 J of this.eventAdapter.translate($))this.emitLegacyEvent(J)}syncConversationFromRuntimeMessage($,J){if($.length>0){this.conversation.replaceMessages($8($));return}if(J.length===0)return;let Q=new Set(this.conversation.getMessages().map((W)=>W.id).filter((W)=>typeof W==="string")),Z=$8(J).filter((W)=>!W.id||!Q.has(W.id));if(Z.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...Z])}emitLegacyEvent($){for(let J of this.listeners)try{J($)}catch(Q){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:Q})}}inspectLoopForToolCall($,J,Q){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let Z=this.loopTracker.inspect({name:$,input:J});if(Z.kind==="ok")return;if(Z.kind==="soft"){if(Z.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:Z.message}]});return}this.enqueueMistakeRecord({iteration:Q,reason:"tool_execution_failed",forceAtLimit:!0,details:Z.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 J=await this.mistakeTracker.record($);if(J.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:J.message}]}),this.activeRuntime?.abort(J.reason??J.message)})}buildLegacyResult($){let{runResult:J,thrownError:Q,startedAt:Z,endedAt:W}=$,j=W.getTime()-Z.getTime(),X=Q?"error":JL(J),f=J?.outputText||(J?.status==="failed"?J.error?.message:void 0)||"",Y=J?{inputTokens:J.usage.inputTokens,outputTokens:J.usage.outputTokens,cacheReadTokens:J.usage.cacheReadTokens>0?J.usage.cacheReadTokens:void 0,cacheWriteTokens:J.usage.cacheWriteTokens>0?J.usage.cacheWriteTokens:void 0,totalCost:J.usage.totalCost}:this.currentRunUsage,V=J?$8(J.messages):this.conversation.getMessages(),H=YY(this.config);if(Q)throw Q;return{text:f,usage:Y,messages:V,toolCalls:this.currentRunToolCalls,iterations:J?.iterations??0,finishReason:X,model:{id:this.config.modelId,provider:this.config.providerId,info:H},startedAt:Z,endedAt:W,durationMs:j}}}function $L($,J,Q,Z){if(!$)return;if(J==="debug"){$.debug(Q,Z);return}if(J==="error"&&$.error){$.error(Q,Z);return}let W=J==="warn"?"warn":J==="error"?"error":"info";$.log(Q,{...Z,severity:W})}function JL($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function QL($,J,Q,Z){let{buildInitialUserContent:W}=await Promise.resolve().then(() => XY);return W($,J,Q,Z)}function YY($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let J=dZ($);if(J?.[$.modelId])return J[$.modelId];return}import{buildClineSystemPrompt as VY}from"@cline/shared";function HY($,J){let Q=$.trim();if(J.providerId.toLowerCase()!=="cline")return Q;return VY({ide:J.clineIdeName?.trim()||"Terminal",workspaceRoot:J.cwd?.trim()||"/",providerId:J.providerId,rules:`# Team Teammate Role
197
- ${Q}`,platform:J.clinePlatform,metadata:J.workspaceMetadata})}function BY($,J){let Q=$.trim();if(J.providerId.toLowerCase()!=="cline")return Q;return VY({ide:J.clineIdeName||"Terminal",workspaceRoot:J.cwd?.trim()||"/",providerId:J.providerId,overridePrompt:Q,metadata:J.workspaceMetadata,platform:J.clinePlatform})}function H$($){let J={...$};return{getRuntimeConfig:()=>J,getConnectionConfig:()=>({providerId:J.providerId,modelId:J.modelId,apiKey:J.apiKey,baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking}),updateConnectionDefaults:(Q)=>{J={...J,...Q}}}}function l$($){let J=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?HY($.prompt,J):BY($.prompt,J);return{...$.configProvider.getConnectionConfig(),systemPrompt:Q,tools:$.tools,maxIterations:$.maxIterations??J.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:J.hooks,extensions:J.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:J.logger,role:$.role}}function B$($){let J=l$($),Q=new V$(J);if(J.onEvent)Q.subscribeEvents(J.onEvent);return Q}var jL=eZ.object({systemPrompt:eZ.string().describe("System prompt defining the sub-agent's behavior"),task:eZ.string().describe("Task for the sub-agent to complete")});function A$($){return ZL({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:WL(jL),execute:async(J,Q)=>{let Z=$.createSubAgentTools?await $.createSubAgentTools(J,Q):$.subAgentTools??[],W=B$({kind:"subagent",prompt:J.systemPrompt,configProvider:$.configProvider,tools:Z,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),j=W.getAgentId(),X=W.getConversationId(),f=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:j,conversationId:X,parentAgentId:f,input:J})}catch{}try{let Y=await W.run(J.task),V={text:Y.text,iterations:Y.iterations,finishReason:Y.finishReason,usage:{inputTokens:Y.usage.inputTokens,outputTokens:Y.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:j,conversationId:X,parentAgentId:f,input:J,result:V,agentResult:Y})}catch{}return V}catch(Y){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:j,conversationId:X,parentAgentId:f,input:J,error:Y instanceof Error?Y:Error(String(Y))})}catch{}throw Y}},timeoutMs:300000,retryable:!1})}import{createTool as V0,TEAM_AWAIT_TIMEOUT_MS as XL,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as fL,TEAM_RUN_TEXT_PREVIEW_LIMIT as YL,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as VL,TeamAttachOutcomeFragmentInputSchema as AY,TeamAwaitRunsInputSchema as KY,TeamBroadcastInputSchema as GY,TeamBroadcastToolResultSchema as HL,TeamCancelRunInputSchema as FY,TeamCancelRunToolResultSchema as BL,TeamCleanupInputSchema as DY,TeamCleanupToolResultSchema as AL,TeamCreateOutcomeInputSchema as UY,TeamCreateOutcomeToolResultSchema as KL,TeamFinalizeOutcomeInputSchema as RY,TeamFinalizeOutcomeToolResultSchema as GL,TeamListOutcomesInputSchema as LY,TeamListRunsInputSchema as zY,TeamMailboxMessageToolResultSchema as FL,TeamMissionLogInputSchema as _Y,TeamMissionLogToolResultSchema as DL,TeamOutcomeFragmentToolResultSchema as OY,TeamOutcomeToolResultSchema as UL,TeamReadMailboxInputSchema as TY,TeamReviewOutcomeFragmentInputSchema as MY,TeamRunTaskInputSchema as qY,TeamRunTaskToolResultSchema as $W,TeamRunToolSummarySchema as JW,TeamSendMessageInputSchema as PY,TeamSendMessageToolResultSchema as RL,TeamShutdownTeammateInputSchema as NY,TeamSimpleAgentStatusToolResultSchema as wY,TeamSpawnTeammateInputSchema as SY,TeamStatusInputSchema as CY,TeamStatusToolResultSchema as LL,TeamTaskInputSchema as yY,TeamTaskToolResultSchema as t4,validateWithZod as k,zodToJsonSchema as H0}from"@cline/shared";function EY($,J){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=J)return Q;return`${Q.slice(0,Math.max(0,J-3)).trimEnd()}...`}function p$($,J){if($===void 0)throw Error(`Missing required field: ${J}`);return $}function zL($){let J=$.result;if(!J)return;return{textPreview:EY(J.text,YL),iterations:J.iterations,finishReason:J.finishReason,durationMs:J.durationMs,usage:{inputTokens:J.usage.inputTokens,outputTokens:J.usage.outputTokens,cacheReadTokens:J.usage.cacheReadTokens,cacheWriteTokens:J.usage.cacheWriteTokens,totalCost:J.usage.totalCost}}}function y5($){return $?.toISOString()}function QW($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:EY($.message,fL),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:y5($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:y5($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:y5($.heartbeatAt),lastProgressAt:y5($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:zL($)}}function _L($){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 Q8=["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 bY($){let J=[];if($.createBaseTools)J.push(...$.createBaseTools());J.push(...r$({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:l$({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:J,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function Z8($){let J=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,Z=r$({runtime:$.runtime,requesterId:J,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),W=[];for(let j of $.restoredTeammates??[]){if($.runtime.isTeammateActive(j.agentId))continue;bY({runtime:$.runtime,requesterId:J,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:j}),W.push(j.agentId)}return{tools:Z,restoredFromPersistence:Q,restoredTeammates:W}}function r$($){let J=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,Z=$.includeManagementTools??!0,W=[];if(Q)W.push(V0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:H0(SY),execute:async(X)=>{let f=k(SY,X);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!J)throw Error("Spawning teammates is disabled in this context.");let Y={agentId:f.agentId,rolePrompt:f.rolePrompt};if(bY({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:Y}),!Z)$.onLeadToolsUnlocked?.(r$({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return k(wY,{agentId:f.agentId,status:"spawned"})}}));if(!Z)return W;W.push(V0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:H0(NY),execute:async(X)=>{let f=k(NY,X);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(f.agentId,f.reason),k(wY,{agentId:f.agentId,status:"stopped"})}})),W.push(V0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:H0(CY),execute:async(X)=>{return k(CY,X),k(LL,$.runtime.getSnapshot())}})),W.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:H0(yY),execute:async(X)=>{let f=k(yY,X);switch(f.action){case"create":{let Y=new Set(VL.create??[]),V=Object.entries(X).filter(([B,A])=>Y.has(B)&&A!=null).map(([B])=>B),H=$.runtime.createTask({title:p$(f.title,"title"),description:p$(f.description,"description"),dependsOn:f.dependsOn,assignee:f.assignee,createdBy:$.requesterId});return k(t4,{action:"create",taskId:H.id,status:H.status,...V.length>0?{ignoredFields:V,note:`Ignored fields for action=create: ${V.join(", ")}`}:{}})}case"list":return k(t4,{action:"list",tasks:$.runtime.listTaskItems({status:f.status,assignee:f.assignee})});case"claim":{let Y=$.runtime.claimTask(p$(f.taskId,"taskId"),$.requesterId);return k(t4,{action:"claim",taskId:Y.id,status:Y.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 Y=$.runtime.completeTask(p$(f.taskId,"taskId"),$.requesterId,p$(f.summary,"summary"));return k(t4,{action:"complete",taskId:Y.id,status:Y.status})}case"block":{let Y=$.runtime.blockTask(p$(f.taskId,"taskId"),$.requesterId,p$(f.reason,"reason"));return k(t4,{action:"block",taskId:Y.id,status:Y.status})}}}}));let j=new Map;return W.push(V0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:H0(qY),execute:async(X)=>{let f=k(qY,X);if(f.runMode==="async"){let H=$.runtime.startTeammateRun(f.agentId,f.task,{taskId:f.taskId||void 0,fromAgentId:$.requesterId,continueConversation:f.continueConversation||void 0});return k($W,{agentId:f.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${f.agentId} and queued as ${H.id}.`,runId:H.id})}let Y=j.get(f.agentId);if(Y){let H=await Y;return k($W,{...H,status:"joined",deduped:!0,message:`Task for ${f.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let V=$.runtime.routeToTeammate(f.agentId,f.task,{taskId:f.taskId||void 0,fromAgentId:$.requesterId,continueConversation:f.continueConversation||void 0}).then((H)=>k($W,{agentId:f.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${f.agentId} and completed in sync mode.`,text:H.text,iterations:H.iterations})).finally(()=>{j.delete(f.agentId)});return j.set(f.agentId,V),await V}})),W.push(V0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:H0(FY),execute:async(X)=>{let f=k(FY,X),Y=$.runtime.cancelRun(f.runId,f.reason);return k(BL,{runId:Y.id,status:Y.status})}})),W.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:H0(zY),execute:async(X)=>k(JW.array(),$.runtime.listRuns(k(zY,X)).map(QW))})),W.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:H0(KY),timeoutMs:XL,execute:async(X)=>{let f=k(KY,X);if(f.runId){let H=await $.runtime.awaitRun(f.runId);return _L(H),k(JW,QW(H))}let Y=await $.runtime.awaitAllRuns(),V=Y.filter((H)=>["failed","cancelled","interrupted"].includes(H.status));if(V.length>0){let H=V.map((B)=>`${B.id}:${B.status}${B.error?`(${B.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${H}`)}return k(JW.array(),Y.map(QW))}})),W.push(V0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:H0(PY),execute:async(X)=>{let f=k(PY,X),Y=$.runtime.sendMessage($.requesterId,f.toAgentId,f.subject,f.body,f.taskId??void 0);return k(RL,{id:Y.id,toAgentId:Y.toAgentId})}})),W.push(V0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:H0(GY),execute:async(X)=>{let f=k(GY,X),Y=$.runtime.broadcast($.requesterId,f.subject,f.body,{taskId:f.taskId??void 0});return k(HL,{delivered:Y.length})}})),W.push(V0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:H0(TY),execute:async(X)=>{let f=k(TY,X);return k(FL.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:f.unreadOnly,markRead:!0}))}})),W.push(V0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:H0(_Y),execute:async(X)=>{let f=k(_Y,X),Y=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:f.taskId||void 0,kind:f.kind,summary:f.summary,evidence:f.evidence?.length?f.evidence:void 0,nextAction:f.nextAction||void 0});return k(DL,{id:Y.id})}})),W.push(V0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:H0(DY),execute:async(X)=>{if(k(DY,X),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),k(AL,{status:"cleaned"})}})),W.push(V0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:H0(UY),execute:async(X)=>{let f=k(UY,X),Y=$.runtime.createOutcome({title:f.title,requiredSections:f.requiredSections,createdBy:$.requesterId});return k(KL,{outcomeId:Y.id,status:Y.status,requiredSections:Y.requiredSections})}})),W.push(V0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:H0(AY),execute:async(X)=>{let f=k(AY,X),Y=$.runtime.attachOutcomeFragment({outcomeId:f.outcomeId,section:f.section,sourceAgentId:$.requesterId,sourceRunId:f.sourceRunId||void 0,content:f.content});return k(OY,{fragmentId:Y.id,status:Y.status})}})),W.push(V0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:H0(MY),execute:async(X)=>{let f=k(MY,X),Y=$.runtime.reviewOutcomeFragment({fragmentId:f.fragmentId,reviewedBy:$.requesterId,approved:f.approved});return k(OY,{fragmentId:Y.id,status:Y.status})}})),W.push(V0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:H0(RY),execute:async(X)=>{let f=k(RY,X),Y=$.runtime.finalizeOutcome(f.outcomeId);return k(GL,{outcomeId:Y.id,status:Y.status})}})),W.push(V0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:H0(LY),execute:async(X)=>{return k(LY,X),k(UL.array(),$.runtime.listOutcomes())}})),W}function E5($){return{...$,tasks:$.tasks.map((J)=>({...J,createdAt:new Date(J.createdAt),updatedAt:new Date(J.updatedAt)})),mailbox:$.mailbox.map((J)=>({...J,sentAt:new Date(J.sentAt),readAt:J.readAt?new Date(J.readAt):void 0})),missionLog:$.missionLog.map((J)=>({...J,ts:new Date(J.ts)})),runs:($.runs??[]).map((J)=>({...J,startedAt:new Date(J.startedAt),endedAt:J.endedAt?new Date(J.endedAt):void 0,nextAttemptAt:J.nextAttemptAt?new Date(J.nextAttemptAt):void 0,heartbeatAt:J.heartbeatAt?new Date(J.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),finalizedAt:J.finalizedAt?new Date(J.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),reviewedAt:J.reviewedAt?new Date(J.reviewedAt):void 0}))}}function hY($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var OL=[{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:A$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...Q8]}],TL={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function ML($){return $==="plan"||$==="yolo"?$:"act"}function IY($){let J=ML($.mode),Q=c0[h1({mode:J})],Z=t2($.providerId??"",$.modelId??"",J,o2);return{mode:J,flags:{...Q,...Z,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function kY($,J){if(J.disabledToolIds?.has($))return!1;let{flags:Q}=IY(J);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let Z=TL[$];return Z?Q[Z]===!0:!1}function qL($,J){if($.id==="editor"){let{flags:Q}=IY(J),Z=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:kY($.id,J),headlessToolNames:[Z?"apply_patch":"editor"]}}return{...$,defaultEnabled:kY($.id,J)}}function i$($={}){return OL.map((J)=>qL(J,$))}function b5($={}){return i$($).filter((J)=>J.defaultEnabled).map((J)=>J.id)}function h5($){if(!$.enabled)return new Set;let J=i$($.availabilityContext),Q=new Set(J.map((Z)=>Z.id));if(!$.allowlist||$.allowlist.length===0)return new Set(J.filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id));for(let Z of $.allowlist)if(!Q.has(Z))throw Error(`Unknown tool "${Z}". Available tools: ${J.map((W)=>W.id).join(", ")}`);return new Set($.allowlist)}function e4($,J={}){return i$(J).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function k5($,J={}){return e4($,J)}function n$($={}){let{executorOptions:J={},executors:Q,...Z}=$,W={...s2(J),...Q??{}};return f$({...Z,executors:W})}import{mkdirSync as yL,writeFileSync as EL}from"node:fs";import{dirname as bL}from"node:path";import{normalizeUserInput as hL}from"@cline/shared";import{nanoid as kL}from"nanoid";var gY={};w(gY,{sanitizeSessionToken:()=>a$,parseTeamTaskSubSessionId:()=>j8,parseSubSessionId:()=>J6,makeTeamTaskSubSessionId:()=>$6,makeSubSessionId:()=>W8,deriveSubsessionStatus:()=>Q6});import{nanoid as wL}from"nanoid";function a$($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function W8($,J){let Q=a$($),Z=a$(J),W=`${Q}__${Z}`;return W.length>180?W.slice(0,180):W}function $6($,J){let Q=a$($),Z=a$(J);return`${Q}__teamtask__${Z}__${wL(6)}`}function j8($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let Z=$.slice(0,Q),W=$.slice(Q+12),j=W.lastIndexOf("__");if(j<=0)return null;let X=W.slice(0,j),f=W.slice(j+2);if(!Z||!X||!f)return null;return{rootSessionId:Z,agentId:X,teamTaskId:f}}function J6($){if(j8($))return null;let J="__",Q=$.indexOf(J);if(Q<=0)return null;let Z=$.slice(0,Q),W=$.slice(Q+J.length);if(!Z||!W)return null;return{rootSessionId:Z,agentId:W}}function Q6($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let J=String($.reason??"").toLowerCase();if(J.includes("cancel")||J.includes("abort")||J.includes("interrupt"))return"cancelled";if(J.includes("fail")||J.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as a}from"zod";var cY={};w(cY,{isTerminalSessionStatus:()=>vY,isNonTerminalSessionStatus:()=>j0,SessionSource:()=>U0,SESSION_STATUSES:()=>Z6,NON_TERMINAL_SESSION_STATUSES:()=>mY});import{SESSION_STATUS_VALUES as SL}from"@cline/shared";var Z6=SL,mY=["idle","running","pending"];function vY($){return!mY.includes($)}function j0($){return!vY($)}var U0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var CL=a.enum(Z6),S0=a.object({version:a.literal(1),session_id:a.string().min(1),source:a.string().min(1),pid:a.number().int(),started_at:a.string().min(1),ended_at:a.string().min(1).optional(),exit_code:a.number().int().nullable().optional(),status:CL,interactive:a.boolean(),provider:a.string().min(1),model:a.string().min(1),cwd:a.string().min(1),workspace_root:a.string().min(1),team_name:a.string().min(1).optional(),enable_tools:a.boolean(),enable_spawn:a.boolean(),enable_teams:a.boolean(),prompt:a.string().optional(),metadata:a.record(a.string(),a.unknown()).optional(),messages_path:a.string().min(1).optional()});function uY($){if(!$)return!1;return Object.values($).some((J)=>typeof J==="function")}function WW($,J){let Q=[...$??[],...J??[]];if(Q.length===0)return;let Z=[],W=new Set;for(let j of Q){if(W.has(j.name))continue;W.add(j.name),Z.push(j)}return Z}function dY($){return JSON.stringify($,(J,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function x1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function ZW($,J){let Q={...$};Q.id=x1(Q.id)??kL();let Z=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,W={id:x1(Z?.id)??x1(Q.modelId)??x1(J?.id),provider:x1(Z?.provider)??x1(Q.providerId)??x1(J?.provider),family:x1(Z?.family)??x1(J?.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 I5($){return $.map((J)=>ZW(J))}function x5($,J,Q=[]){let Z=$.map((Y,V)=>{let H=Q[V],A=H?.role===Y.role&&JSON.stringify(H.content)===JSON.stringify(Y.content)?{...H,...Y}:{...Y};return ZW(A)}),W=Q.length,j=[];for(let Y=W;Y<Z.length;Y+=1)if(Z[Y]?.role==="assistant")j.push(Y);if(j.length===0){let Y=[...Z].reverse().findIndex((V)=>V.role==="assistant");if(Y===-1)return Z;j.push(Z.length-1-Y)}let X=j[j.length-1],f=j.some((Y)=>Z[Y]?.metrics);for(let Y of j){let V=Z[Y],H=V.metrics;if(!H&&Y===X&&!f){let B=J.usage;H={inputTokens:B.inputTokens,outputTokens:B.outputTokens,cacheReadTokens:B.cacheReadTokens??0,cacheWriteTokens:B.cacheWriteTokens??0,cost:B.totalCost}}Z[Y]={...ZW(V,{id:J.model.id,provider:J.model.provider,family:J.model.info?.family}),...H?{metrics:H}:{},ts:V.ts??J.endedAt.getTime()}}return Z}function W6($){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 IL=120;function s$($){let J=$?.trim();return J?J.slice(0,IL):void 0}function jW($){let J=hL($??"").trim();if(!J)return;return s$(J.split(`
198
- `)[0]?.trim())}function K$($){if(!$)return;let J={...$},Q=s$(typeof J.title==="string"?J.title:void 0);if(Q)J.title=Q;else delete J.title;return Object.keys(J).length>0?J:void 0}function j6($){let J=K$($.metadata)??{},Q=$.title!==void 0?s$($.title):jW($.prompt);if(Q)J.title=Q;return Object.keys(J).length>0?J:void 0}function XW($){let J=j8($);if(J)return{agent:"teammate",sessionId:J.rootSessionId,taskType:"team"};let Q=J6($);if(Q)return{agent:"subagent",sessionId:Q.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function fW($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:I5($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function lY($,J,Q){yL(bL($),{recursive:!0}),EL($,`${JSON.stringify(fW({updatedAt:J,context:Q,messages:[]}),null,2)}
199
- `,"utf8")}function pY($,J){return S0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:J?.endedAt??$.endedAt??void 0,exit_code:J?.exitCode??$.exitCode??void 0,status:J?.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:J?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function rY($,J,Q){let Z=0;while(!0){let W=await $();if(W===void 0)return{updated:!1};let j=await J(W);if(typeof j==="object"&&j!==null&&"updated"in j&&j.updated===!1){if(Z+=1,Z>=Q)return j;continue}return j}}O0();var iY={};w(iY,{summarizeUsageFromMessages:()=>f8,sumUsageTotals:()=>X6,getCurrentContextSize:()=>YW,createInitialAccumulatedUsage:()=>D0,accumulateUsageTotals:()=>B0});function D0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function B0($,J){return{inputTokens:$.inputTokens+Math.max(0,J.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,J.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,J.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,J.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,J.totalCost??0)}}function X6($){let J=D0();for(let Q of $)J=B0(J,Q);return J}function X8($){return typeof $==="number"&&Number.isFinite($)?$:0}function f8($){let J=D0();for(let Q of $){let Z=Q.metrics;if(!Z)continue;J=B0(J,{inputTokens:X8(Z.inputTokens),outputTokens:X8(Z.outputTokens),cacheReadTokens:X8(Z.cacheReadTokens),cacheWriteTokens:X8(Z.cacheWriteTokens),totalCost:X8(Z.cost)})}return J}function YW($){for(let J=$.length-1;J>=0;J-=1){let Q=$[J];if(Q?.role!=="assistant")continue;let Z=X8(Q.metrics?.inputTokens);return Z>0?Z:void 0}return}function xL($){if(!$||typeof $!=="object")return;let J=$,Q=J.skill??J.skill_name??J.skillName;if(typeof Q!=="string")return;let Z=Q.trim();return Z.length>0?Z:void 0}function VW($){if(!$||typeof $!=="object")return{};let J=$;return{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}}function g1($){let J=$.agentId?.trim();if(!J)return;let Q=$.parentAgentId?.trim()||void 0,Z=$.teamRole,W="root";if(Z==="teammate")W="team_teammate";else if(Z==="lead")W="team_lead";else if(Q)W="subagent";return{agentId:J,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:Z,teamAgentId:$.teamAgentId?.trim()||void 0}}function gL($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function mL($){let J=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of J){let Z=Q?.trim();if(Z)return Z}return $.isPrimaryAgentEvent?"root":"unknown"}function HW($,J,Q){let{sessionId:Z,config:W,liveSession:j,emit:X}=$,f=W.telemetry,Y=j?.runtime.teamRuntime,V=Q?.isPrimaryAgentEvent??!0,H=VW(J),B=g1({agentId:Q?.agentId??H.agentId,conversationId:Q?.conversationId??H.conversationId,parentAgentId:Q?.parentAgentId??H.parentAgentId,createdByAgentId:Q?.createdByAgentId,teamId:Q?.teamId??Y?.getTeamId(),teamName:Q?.teamName??Y?.getTeamName(),teamRole:Q?.teamRole,teamAgentId:Q?.teamAgentId});if(J.type==="content_start"&&J.contentType==="tool"&&J.toolName==="skills"){let A=xL(J.input);if(A)lJ(f,{ulid:Z,skillName:A,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:W.providerId,modelId:W.modelId,...B})}if(J.type==="content_end"&&J.contentType==="tool"){let A=J.toolName??"unknown",K=!J.error;if(dJ(f,{ulid:Z,tool:A,autoApproved:void 0,success:K,modelId:W.modelId,provider:W.providerId,...B}),!K&&(A==="editor"||A==="apply_patch"))pJ(f,{ulid:Z,modelId:W.modelId,provider:W.providerId,errorType:J.error,...B})}if(J.type==="notice"&&J.reason==="api_error")B4(f,{ulid:Z,model:W.modelId,provider:W.providerId,errorMessage:J.message,...B});if(J.type==="error")B4(f,{ulid:Z,model:W.modelId,provider:W.providerId,errorMessage:J.error?.message??"unknown error",...B});if(J.type==="usage"&&j?.turnUsageBaseline){let A=gL(J);if(V){j.turnPrimaryUsage=B0(j.turnPrimaryUsage??D0(),A);let G=B0(j.turnUsageBaseline,j.turnPrimaryUsage);$.usageBySession.set(Z,G),g2(f,{ulid:Z,provider:W.providerId,model:W.modelId,source:"assistant",mode:W.mode,...B}),cJ(f,{ulid:Z,tokensIn:J.inputTokens,tokensOut:J.outputTokens,cacheWriteTokens:J.cacheWriteTokens,cacheReadTokens:J.cacheReadTokens,totalCost:J.cost,model:W.modelId,...B})}else{let G=mL({isPrimaryAgentEvent:V,overrides:Q,eventMetadata:H}),R=j.turnUsageByAgent??new Map;j.turnUsageByAgent=R,R.set(G,B0(R.get(G)??D0(),A))}let K=B0(j.turnPrimaryUsage??D0(),X6(j.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(Z,B0(j.turnAggregateUsageBaseline??j.turnUsageBaseline,K))}if(J.type==="iteration_end"&&V)$.persistMessages(Z,j?.agent.getMessages()??[],j?.config.systemPrompt);X({type:"agent_event",payload:{sessionId:Z,event:J,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(V?"lead":void 0):void 0}}),X({type:"chunk",payload:{sessionId:Z,stream:"agent",chunk:dY(J),ts:Date.now()}})}function G$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as n_}from"@cline/shared";W1();import{existsSync as d5,readFileSync as Pz,statSync as Nz}from"node:fs";import{basename as wz,dirname as c5,join as l5,resolve as u5}from"node:path";import{discoverPluginModulePaths as Sz,resolveConfiguredPluginModulePaths as GV,resolvePluginConfigSearchPaths as Cz,SKILLS_CONFIG_DIRECTORY_NAME as yz}from"@cline/shared/storage";import{resolve as jz}from"node:path";import{normalizePluginManifest as Xz}from"@cline/shared";import{existsSync as R0,readFileSync as V8}from"node:fs";import{builtinModules as vL,createRequire as GW}from"node:module";import{dirname as F$,extname as Y6,isAbsolute as cL,resolve as p}from"node:path";import{fileURLToPath as aY}from"node:url";import{PLUGIN_FILE_EXTENSIONS as uL}from"@cline/shared";var sY=F$(aY(import.meta.url)),dL=GW(import.meta.url),lL=p(sY,"..","..","..","..",".."),BW=iL(lL),pL=["@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"],FW=new Set(vL.flatMap(($)=>[$,$.replace(/^node:/,"")])),f6=new Set(uL),rL=["development","node","import","require","default"];function iL($){let J={},Q={"@cline/sdk":p($,"packages/sdk/src/index.ts"),"@cline/agents":p($,"packages/agents/src/index.ts"),"@cline/core":p($,"packages/core/src/index.ts"),"@cline/llms":p($,"packages/llms/src/index.ts"),"@cline/shared":p($,"packages/shared/src/index.ts"),"@cline/shared/storage":p($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":p($,"packages/shared/src/db/index.ts")};for(let[Z,W]of Object.entries(Q))if(R0(W))J[Z]=W;for(let Z of["agents","core","llms","shared"]){let W=p($,"packages",Z),j=p(W,"package.json");if(!R0(j))continue;try{let X=JSON.parse(V8(j,"utf8"));if(typeof X.name!=="string"||!X.exports)continue;if(typeof X.exports==="string"){let f=p(W,X.exports);if(R0(f))J[X.name]=f;continue}if(typeof X.exports!=="object")continue;for(let[f,Y]of Object.entries(X.exports)){let V=nL(W,Y);if(!V)continue;let H=f==="."?X.name:`${X.name}/${f.replace(/^\.\//,"")}`;J[H]=V}}catch{}}return J}function nL($,J){let Q=DW(J);if(!Q)return null;let Z=oY($,Q);for(let W of Z)if(R0(W))return W;return null}function DW($,J=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(J.has($))return null;J.add($);let Q=$;for(let Z of rL){let W=DW(Q[Z],J);if(W)return W}return null}function oY($,J){let Q=J.replace(/^\.\//,""),Z=[p($,J)];if(Q.startsWith("dist/")){let W=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[p($,`${W}.ts`),p($,`${W}.tsx`),p($,`${W}.mts`),p($,`${W}.cts`),...Z]}return Z}function aL($){return Object.fromEntries(Object.entries($).sort(([J],[Q])=>Q.length-J.length))}function g5($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function Y8($){if($.startsWith("@")){let[J,Q]=$.split("/",3);return Q?`${J}/${Q}`:$}return $.split("/",1)[0]??$}function sL($){let J=Y8($);if($===J)return".";return`.${$.slice(J.length)}`}function tY($){return Y8($).startsWith("@cline/")}function AW($,J){let Q=Y8(J),Z=F$($);while(!0){let W=p(Z,"node_modules",Q);if(R0(W)||R0(p(W,"package.json")))return!0;let j=p(Z,"..");if(j===Z)return!1;Z=j}}function nY($){return KW($)!==null}function KW($){try{return dL.resolve($)}catch{}return oL($)}function oL($){let J=Y8($),Q=eY(J);if(!Q)return null;let Z=p(Q,"package.json");try{let W=JSON.parse(V8(Z,"utf8")),j=sL($),X=j==="."&&typeof W.exports==="string"?W.exports:W.exports&&typeof W.exports==="object"&&Object.hasOwn(W.exports,j)?W.exports[j]:void 0,f=DW(X)??(j==="."&&typeof W.main==="string"?W.main:null);if(!f)return null;let Y=p(Q,f),V=[Y,...oY(Q,f).filter((H)=>H!==Y)];for(let H of V)if(R0(H))return H;return null}catch{return null}}function tL(){let $=[sY],J=process.env.CLINE_WRAPPER_PATH?.trim();if(J)$.push(F$(F$(J)));let Q=process.execPath?.trim();if(Q)$.push(F$(Q));return[...new Set($.map((Z)=>p(Z)))]}function eL($,J){let Q=$;while(!0){let Z=p(Q,"package.json");if(R0(Z))try{if(JSON.parse(V8(Z,"utf8")).name===J)return Q}catch{}let W=p(Q,"node_modules",J,"package.json");if(R0(W))return F$(W);let j=p(Q,"..");if(j===Q)return null;Q=j}}function eY($){for(let J of tL()){let Q=eL(J,$);if(Q)return Q}return null}function $z($){let Q=F$($);for(let Z=0;Z<4;Z++){let W=p(Q,"package.json");if(R0(W))try{let X=JSON.parse(V8(W,"utf8"));return X!=null&&typeof X==="object"&&"cline"in X}catch{return!1}let j=p(Q,"..");if(j===Q)return!1;Q=j}return!1}function $V($,J){let Q=J.startsWith("file:")?aY(J):cL(J)?J:p(F$($),J);if(R0(Q)&&f6.has(Y6(Q)))return Q;for(let Z of f6){let W=`${Q}${Z}`;if(R0(W))return W}for(let Z of f6){let W=p(Q,`index${Z}`);if(R0(W))return W}return null}function JV($){let J=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 Z of Q)for(let W of $.matchAll(Z)){let j=W[1];if(j)J.add(j)}return[...J]}function Jz($){return Y6($)!==".ts"}function QV($,J,Q=new Set){if(Q.has($)||!R0($))return;if(Q.add($),!f6.has(Y6($)))return;let Z=V8($,"utf8"),W=Jz($);for(let j of JV(Z)){if(j.startsWith("node:")||FW.has(j))continue;if(g5(j)){if(!W)continue;if(Object.hasOwn(BW,j)||Object.hasOwn(BW,Y8(j))||AW($,j)||tY(j)&&nY(j)||J&&nY(j))continue;throw Error(`Cannot find module '${Y8(j)}'`)}let X=$V($,j);if(X)QV(X,J,Q)}}function ZV($,J=new Set,Q=new Set){if(J.has($)||!R0($))return Q;if(J.add($),!f6.has(Y6($)))return Q;let Z=V8($,"utf8");for(let W of JV(Z)){if(Q.add(W),g5(W))continue;let j=$V($,W);if(j)ZV(j,J,Q)}return Q}function Qz($,J){let Q=GW($),Z={},W=ZV($),j=new Set(pL);for(let[X,f]of Object.entries(BW)){try{Q.resolve(X);continue}catch{}Z[X]=f}for(let X of W)if(g5(X)&&(tY(X)||J))j.add(X);for(let X of j){if(Object.hasOwn(Z,X)||AW($,X))continue;let f=KW(X);if(f)Z[X]=f}if(!J)return Z;for(let X of W){if(!g5(X)||Object.hasOwn(Z,X)||AW($,X)||X.startsWith("node:")||FW.has(X))continue;let f=KW(X);if(f)Z[X]=f}return Z}function Zz($){let J=Y6($);return J===".ts"||J===".tsx"||J===".mts"||J===".cts"}var o$;function Wz(){if(o$!==void 0)return o$;let $=eY("jiti");if(!$)return o$=null,null;let J=p($,"dist","babel.cjs");if(!R0(J))return o$=null,null;try{let Z=GW(J)(J);o$=typeof Z==="function"?Z:null}catch{o$=null}return o$}async function WV($,J={}){let Q=!$z($);QV($,Q);let Z=Qz($,Q),W=aL(Z),j=await import("jiti"),X=typeof j==="function"?j:typeof j.default==="function"?j.default:void 0;if(!X)throw Error("Unable to load jiti");let f=Object.entries(W).filter(([,B])=>Zz(B)).map(([B])=>B),Y=Wz(),V=Y?(B)=>Y({...B,interopDefault:!0}):void 0;return await X($,{alias:W,cache:J.useCache,requireCache:J.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...FW],transformModules:f,tryNative:!1,...V?{transform:V}:{}}).import($,{})}function jV($,J){if(!$)return!0;if($.providerIds?.length){if(!J?.providerId||!$.providerIds.includes(J.providerId))return!1}if($.modelIds?.length){if(!J?.modelId||!$.modelIds.includes(J.modelId))return!1}return!0}function XV($){return typeof $==="object"&&$!==null}function UW($){return Array.isArray($)&&$.every((J)=>typeof J==="string")}function fz($,J){if(!XV($.manifest))throw Error(`Invalid plugin module at ${J}: missing required "manifest"`);if(!UW($.manifest.capabilities))throw Error(`Invalid plugin module at ${J}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${J}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!UW($.manifest.providerIds))throw Error(`Invalid plugin module at ${J}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!UW($.manifest.modelIds))throw Error(`Invalid plugin module at ${J}: manifest.modelIds must be a string array when provided`)}function Yz($,J){if(!XV($))throw Error(`Invalid plugin module at ${J}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${J}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${J}: missing required "manifest"`);fz($,J)}async function V6($,J={}){let Q=jz(J.cwd??process.cwd(),$),Z=await WV(Q,{useCache:J.useCache}),W=J.exportName??"plugin",j=Z.default??Z[W];Yz(j,Q);let X=j,f=X.setup,Y=f?(V,H)=>{let B={...J.session,...H.session},A={...H,session:Object.keys(B).length>0?B:void 0,client:J.client??H.client,user:J.user??H.user,workspaceInfo:J.workspaceInfo??H.workspaceInfo,automation:J.automation??H.automation,logger:J.logger??H.logger,telemetry:J.telemetry??H.telemetry};return f(V,A)}:void 0;return{...X,manifest:Xz(X.manifest),setup:Y}}async function m5($,J={}){return(await t$($,J)).plugins}async function t$($,J={}){let Q=[],Z=[],W=new Map,j=0;for(let f of $)try{let Y=await V6(f,J);if(!jV(Y.manifest,J))continue;let V=W.get(Y.name);if(V)Z.push({type:"duplicate_plugin_override",pluginName:Y.name,pluginPath:f,overriddenPluginPath:V.pluginPath,message:`Plugin "${Y.name}" from ${f} overrides ${V.pluginPath}`});W.set(Y.name,{plugin:Y,pluginPath:f,order:j++})}catch(Y){let V=Y instanceof Error?Y.message:String(Y);Q.push({pluginPath:f,phase:"load",message:V,stack:Y instanceof Error?Y.stack:void 0})}let X=[...W.values()].sort((f,Y)=>f.order-Y.order);return{plugins:X.map((f)=>f.plugin),pluginPaths:X.map((f)=>f.pluginPath),failures:Q,warnings:Z}}import{existsSync as _W}from"node:fs";import{createRequire as KV}from"node:module";import{dirname as v5,join as B8}from"node:path";import{fileURLToPath as Kz}from"node:url";var BV={};w(BV,{resolveSubprocessRuntimeExecutable:()=>RW,buildSubprocessSandboxCommand:()=>HV,SubprocessSandbox:()=>H8,CLINE_JS_RUNTIME_PATH_ENV:()=>VV});import{spawn as Vz}from"node:child_process";import{basename as Hz}from"node:path";import{augmentNodeCommandForDebug as Bz,withResolvedClineBuildEnv as Az}from"@cline/shared";function fV($){if($ instanceof Error)return $;return Error(String($))}var VV="CLINE_JS_RUNTIME_PATH";function YV($){let J=$?.trim();if(!J)return!1;let Q=Hz(J).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function RW($={}){let J=$.env??process.env,Q=$.runtimeExecutable?.trim()||J[VV]?.trim();if(Q)return Q;let Z=$.execPath?.trim()||process.execPath;if(YV(Z))return Z;for(let W of[J.BUN_EXEC_PATH,J.npm_node_execpath,J.NODE]){let j=W?.trim();if(j&&YV(j))return j}return"node"}function HV($,J={}){let Q=RW({env:J.env,execPath:J.execPath,runtimeExecutable:J.runtimeExecutable});return Bz([Q,...$],{env:J.env,execArgv:J.execArgv,debugRole:J.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class H8{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let J=this.pending.get($);if(!J)return;if(this.pending.delete($),J.timeout)clearTimeout(J.timeout);return J}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],J=HV($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=Vz(J[0]??RW(this.options),J.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:Az(process.env),windowsHide:!0});this.process=Q;let Z="",W=(j)=>{let X=Z+j;Z=X.length>4000?X.slice(-4000):X};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(j)=>{W(j)}),Q.on("message",(j)=>{this.onMessage(j)}),Q.on("error",(j)=>{this.failPending(Error(`${this.processLabel} process error: ${fV(j).message}`))}),Q.on("exit",(j,X)=>{this.process=null;let f=Z.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(j)}, signal=${String(X)})${f?`: ${f}`:""}`))})}async call($,J,Q={}){this.start();let Z=this.process;if(!Z||Z.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let W=`req_${++this.requestCounter}`,j={type:"call",id:W,method:$,args:J};return await new Promise((X,f)=>{let Y={resolve:(V)=>X(V),reject:f};if((Q.timeoutMs??0)>0)Y.timeout=setTimeout(()=>{this.clearPendingRequest(W),this.shutdown().catch(()=>{}),f(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(W,Y),Z.send(j,(V)=>{if(!V)return;let H=this.clearPendingRequest(W);if(!H)return;H.reject(Error(`${this.processLabel} failed to send call "${$}": ${fV(V).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((J)=>{let Q=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}J()},300);$.once("exit",()=>{clearTimeout(Q),J()});try{$.kill("SIGTERM")}catch{clearTimeout(Q),J()}}),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 J=this.clearPendingRequest($.id);if(!J)return;if($.ok){J.resolve($.result);return}J.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[J,Q]of this.pending.entries()){if(this.pending.delete(J),Q.timeout)clearTimeout(Q.timeout);Q.reject($)}}}function Gz($){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 H6($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function Fz(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function Dz(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=KV($).resolve(`${Fz()}/package.json`),Z=B8(v5(Q),"extensions","plugin-sandbox-bootstrap.js");return _W(Z)?Z:void 0}catch{return}}function Uz(){let $=process.execPath?.trim();if(!$)return;let J=B8(v5(v5($)),"extensions","plugin-sandbox-bootstrap.js");return _W(J)?J:void 0}function Rz(){let $=v5(Kz(import.meta.url)),J=KV(import.meta.url),Q=[B8($,"plugin-sandbox-bootstrap.js"),B8($,"extensions","plugin-sandbox-bootstrap.js"),B8($,"agents","plugin-sandbox-bootstrap.js"),Dz(),Uz()];for(let j of Q.filter((X)=>typeof X==="string"))if(_W(j))return{file:j};let Z=B8($,"plugin-sandbox-bootstrap.ts"),W="jiti";try{W=J.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(W)});`,`const jiti = createJiti(${JSON.stringify(Z)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(Z)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
200
- `)}}var LW=Rz();function zW($,J,Q){if(typeof $==="number"&&$>0)return $;if(Q){let Z=process.env[Q];if(Z){let W=Number(Z);if(Number.isInteger(W)&&W>0)return W}}return J}async function A8($){let J=new H8({name:"plugin-sandbox",..."file"in LW?{bootstrapFile:LW.file}:{bootstrapScript:LW.script},onEvent:$.onEvent}),Q=zW($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),Z=zW($.hookTimeoutMs,3000),W=zW($.contributionTimeoutMs,60000),j={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},X,f=()=>{return X??=J.call("initialize",j,{timeoutMs:Q}).finally(()=>{X=void 0}),X},Y;try{Y=await J.call("initialize",j,{timeoutMs:Q})}catch(B){throw await J.shutdown().catch(()=>{}),B}let V=Y.plugins.map(Gz);return{extensions:V.map((B)=>{let A={name:B.name,__clinePluginPath:B.pluginPath,manifest:B.manifest,setup:(K)=>{Lz(K,J,B,W,f),zz(K,J,B,W,f),_z(K,J,B,W,f),Tz(K,J,B,W,f),Oz(K,B)}};return A.hooks=qz(J,B,Z,f),A}),failures:Y.failures,pluginPaths:V.map((B)=>B.pluginPath),shutdown:async()=>{await J.shutdown()},warnings:Y.warnings}}function Lz($,J,Q,Z,W){for(let j of Q.contributions?.tools??[]){let X={name:j.name,description:j.description??"",inputSchema:j.inputSchema??{type:"object",properties:{}},timeoutMs:j.timeoutMs,retryable:j.retryable,execute:async(f,Y)=>{try{return await J.call("executeTool",{pluginId:Q.pluginId,contributionId:j.id,input:f,context:Y},{timeoutMs:Z})}catch(V){if(!H6(V))throw V;return await W(),await J.call("executeTool",{pluginId:Q.pluginId,contributionId:j.id,input:f,context:Y},{timeoutMs:Z})}}};$.registerTool(X)}}function zz($,J,Q,Z,W){for(let j of Q.contributions?.commands??[])$.registerCommand({name:j.name,description:j.description,handler:async(X)=>{try{return await J.call("executeCommand",{pluginId:Q.pluginId,contributionId:j.id,input:X},{timeoutMs:Z})}catch(f){if(!H6(f))throw f;return await W(),await J.call("executeCommand",{pluginId:Q.pluginId,contributionId:j.id,input:X},{timeoutMs:Z})}}})}function _z($,J,Q,Z,W){for(let j of Q.contributions?.rules??[])$.registerRule({id:j.ruleId,source:j.source,content:j.hasContentHandler===!0?async()=>{try{return await J.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:j.id},{timeoutMs:Z})}catch(X){if(!H6(X))throw X;return await W(),await J.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:j.id},{timeoutMs:Z})}}:j.content??""})}function Oz($,J){for(let Q of J.contributions?.providers??[])$.registerProvider({name:Q.name,description:Q.description,metadata:Q.metadata});for(let Q of J.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 J.contributions?.mcpServers??[])$.registerMcpServer(Q)}function Tz($,J,Q,Z,W){for(let j of Q.contributions?.messageBuilders??[])$.registerMessageBuilder({name:j.name,async build(X){try{let f=await J.call("buildMessages",{pluginId:Q.pluginId,contributionId:j.id,messages:X},{timeoutMs:Z});return AV(f)?f:X}catch(f){if(!H6(f))throw f;await W();let Y=await J.call("buildMessages",{pluginId:Q.pluginId,contributionId:j.id,messages:X},{timeoutMs:Z});return AV(Y)?Y:X}}})}function AV($){return Array.isArray($)&&$.every((J)=>typeof J==="object"&&J!==null&&("role"in J)&&("content"in J))}function Mz($,J,Q,Z,W){return async(j)=>{try{return await $.call("invokeHook",{pluginId:J,hookName:Q,payload:j},{timeoutMs:Z})}catch(X){if(!H6(X))throw X;return await W(),await $.call("invokeHook",{pluginId:J,hookName:Q,payload:j},{timeoutMs:Z})}}}function qz($,J,Q,Z){let W={};for(let j of J.hooks??[])W[j]=Mz($,J.pluginId,j,Q,Z);return Object.keys(W).length>0?W:void 0}var TW="package.json",Ez="package";function B6($){return Cz($)}function A6($){return Sz($)}function bz($){try{return d5($)&&Nz($).isDirectory()}catch{return!1}}function MW($){let J=[],Q=new Set;for(let Z of $){let W=u5(Z);if(Q.has(W))continue;Q.add(W),J.push(W)}return J}function FV($){let J=MW($);return M5(J)}function DV($){return B6($).flatMap((J)=>A6(J)).filter((J)=>d5(J))}function hz($,J){let Q=[];for(let Z of $)try{Q.push(...GV([Z],J))}catch{}return Q}function OW($){return typeof $==="object"&&$!==null}function kz($){try{let J=JSON.parse(Pz(l5($,TW),"utf8"));if(!OW(J)||!OW(J.cline))return[];let Q=J.cline.plugins;if(!Array.isArray(Q))return[];let Z=[];for(let W of Q){if(typeof W==="string"){Z.push(W);continue}if(!OW(W)||!Array.isArray(W.paths))continue;for(let j of W.paths)if(typeof j==="string")Z.push(j)}return Z}catch{return[]}}function UV($,J){let Q=u5(J);return kz($).some((Z)=>u5($,Z)===Q)}function Iz($,J){return wz($)===Ez&&d5(l5(c5($),TW))&&UV(c5($),J)}function xz($){let J=u5($),Q=[],Z=c5(J);while(!0){if(Iz(Z,J)){Q.push(Z);break}if(d5(l5(Z,TW))){if(UV(Z,J))Q.push(Z);break}let W=c5(Z);if(W===Z)break;Z=W}return MW(Q)}function e$($={}){let J=$.cwd??process.cwd(),Q=DV($.workspacePath),Z=GV($.pluginPaths??[],J);return FV([...Z,...Q])}function gz($={}){let J=$.cwd??process.cwd(),Q=DV($.workspacePath),Z=hz($.pluginPaths??[],J);return FV([...Z,...Q])}function $2($){let J=[];for(let Q of $)for(let Z of xz(Q)){let W=l5(Z,yz);if(bz(W))J.push(W)}return MW(J)}function RV($={}){return $2(gz($))}async function K8($={}){let J=e$($);if(J.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let Z=await t$(J,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:Z.plugins,failures:Z.failures,pluginPaths:Z.pluginPaths,warnings:Z.warnings}}let Q=await A8({pluginPaths:J,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:Q.extensions??[],shutdown:Q.shutdown,failures:Q.failures,pluginPaths:Q.pluginPaths,warnings:Q.warnings}}import{execFile as mz}from"node:child_process";import{promisify as vz}from"node:util";var cz=vz(mz);function qW($,J){$?.log(J,{severity:"warn"})}function uz($){let J=$?.checkpoint;if(!J||typeof J!=="object"||Array.isArray(J))return;let Q=J;if(!Q.latest||!Array.isArray(Q.history))return;let Z=Q.latest,W=Q.history.filter((j)=>!!j&&typeof j==="object"&&typeof j.ref==="string"&&typeof j.createdAt==="number"&&typeof j.runCount==="number");if(typeof Z.ref!=="string"||typeof Z.createdAt!=="number"||typeof Z.runCount!=="number")return;return{latest:Z,history:W}}async function J2($,J){let Q=await cz("git",["-C",$,...J],{windowsHide:!0});return{stdout:Q.stdout.trim(),stderr:Q.stderr.trim()}}async function PW($,J){if(!$)return;let Q=`refs/cline/checkpoints/${J}/`;try{let{stdout:Z}=await J2($,["for-each-ref","--format=%(refname)",Q]),W=Z.trim().split(`
201
- `).filter(Boolean);await Promise.allSettled(W.map((j)=>J2($,["update-ref","-d",j])))}catch{}}async function LV($,J,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((Z)=>J2($,["update-ref",`refs/cline/checkpoints/${J}/${Z.runCount}`,Z.ref])))}function dz($,J){let Q=$.findIndex((Z)=>Z.runCount===J.runCount);if(Q<0)return[...$,J];return $.map((Z,W)=>W===Q?J:Z)}function zV($){let J=$.initialRunCount??0,Q,Z=async()=>{if(Q!==void 0)return Q;try{Q=(await J2($.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:J});if(!await Z())return;let j=async(V)=>{try{let B=(await J2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!B)return;return{ref:B,createdAt:Date.now(),runCount:J,kind:"commit"}}catch(H){qW($.logger,`${V}: ${H instanceof Error?H.message:String(H)}`);return}},X=`cline checkpoint session=${$.sessionId} run=${J}`,f="";try{f=(await J2($.cwd,["stash","create",X])).stdout.trim()}catch(V){return qW($.logger,`Checkpoint snapshot failed: ${V instanceof Error?V.message:String(V)}`),j("Checkpoint HEAD fallback failed")}if(!f)return j("Checkpoint HEAD fallback failed");let Y=`refs/cline/checkpoints/${$.sessionId}/${J}`;try{await J2($.cwd,["update-ref",Y,f])}catch(V){qW($.logger,`Checkpoint store failed: ${V instanceof Error?V.message:String(V)}`);return}return{ref:f,createdAt:Date.now(),runCount:J,kind:"stash"}};return{beforeRun:async({snapshot:j})=>{if(j.parentAgentId!=null)return;J+=1;return},beforeModel:async({snapshot:j})=>{if(j.parentAgentId!=null||j.iteration!==1||J<1)return;let X=await W();if(!X)return;let f=await $.readSessionMetadata(),Y=uz(f);if(Y?.latest.ref===X.ref)return;let V=dz(Y?.history??[],X);await $.writeSessionMetadata({...f??{},checkpoint:{latest:X,history:V}});return}}}import{spawn as tz}from"node:child_process";import{appendFileSync as ez,readFileSync as $_}from"node:fs";import{join as J_}from"node:path";import{augmentNodeCommandForDebug as TV,withResolvedClineBuildEnv as SW}from"@cline/shared";import{ensureHookLogDir as _V}from"@cline/shared/storage";function G8($,J){if(!J)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:J}}import{existsSync as lz,readdirSync as pz}from"node:fs";import{basename as rz,extname as iz,join as nz}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as p5,resolveHooksConfigSearchPaths as az}from"@cline/shared/storage";function K6($){return az($)}var F8;((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"})(F8||={});var G6={["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"},sz=new Map(Object.values(F8).map(($)=>[$.toLowerCase(),$])),oz=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function F6($){let J=iz($).toLowerCase();if(!oz.has(J))return;let Q=rz($,J).trim().toLowerCase();return sz.get(Q)}function D$($){let J=[],Q=new Set,Z=K6($).filter((W)=>lz(W));for(let W of Z)try{for(let j of pz(W,{withFileTypes:!0})){if(!j.isFile())continue;let X=F6(j.name);if(!X)continue;let f=nz(W,j.name);if(Q.has(f))continue;Q.add(f),J.push({fileName:X,hookEventName:G6[X],path:f})}}catch{}return J.sort((W,j)=>W.path.localeCompare(j.path))}function i5($){if(!$||typeof $!=="object")return{};let J={};for(let[Q,Z]of Object.entries($))J[Q]=typeof Z==="string"?Z:JSON.stringify(Z);return J}function r5($,J,Q){let Z=Q instanceof Error?`: ${Q.message}`:"",W=`${J}${Z}`;if($){try{$.log(W,{severity:"warn",...Q!==void 0?{error:Q}:{}})}catch{}return}console.warn(W)}function Q_($,J){if(!J)return $;if(!$)return{...J};let Q=[$.context,J.context].filter((W)=>typeof W==="string"&&W.length>0).join(`
202
- `),Z=[...$.appendMessages??[],...J.appendMessages??[]];return{cancel:$.cancel===!0||J.cancel===!0?!0:void 0,review:$.review===!0||J.review===!0?!0:void 0,context:Q||void 0,overrideInput:J.overrideInput!==void 0?J.overrideInput:$.overrideInput,systemPrompt:J.systemPrompt!==void 0?J.systemPrompt:$.systemPrompt,appendMessages:Z.length>0?Z:void 0}}function Z_($){if(!$||typeof $!=="object")return;let J=$,Q=typeof J.context==="string"?J.context:typeof J.contextModification==="string"?J.contextModification:typeof J.errorMessage==="string"?J.errorMessage:void 0;return{cancel:typeof J.cancel==="boolean"?J.cancel:void 0,review:typeof J.review==="boolean"?J.review:void 0,context:Q,overrideInput:Object.hasOwn(J,"overrideInput")?J.overrideInput:void 0}}function NW($){let J=String($??"").toLowerCase();return J.includes("cancel")||J.includes("abort")||J.includes("interrupt")}function L0($,J){let Q=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",Z={rootSessionId:J.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:Z,workspaceRoots:J.workspacePath?[J.workspacePath]:[],workspaceInfo:J.workspaceInfo,userId:Q,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function W_($){let J=$.trim();if(!J)return{};let Z=J.split(`
203
- `).map((j)=>j.trim()).filter(Boolean).filter((j)=>j.startsWith("HOOK_CONTROL\t")).map((j)=>j.slice(13)),W=Z.length>0?Z[Z.length-1]:J;try{return{parsedJson:JSON.parse(W)}}catch(j){return{parseError:j instanceof Error?j.message:"Failed to parse hook stdout JSON"}}}async function j_($,J){let Q=$.stdin;if(!Q)throw Error("hook command failed to create stdin");await new Promise((Z,W)=>{let j=!1,X=()=>{Q.off("error",Y),Q.off("finish",V),$.off("close",H)},f=(B)=>{if(j)return;if(j=!0,X(),B){let A=B.code;if(A==="EPIPE"||A==="ERR_STREAM_DESTROYED"){Z();return}W(B);return}Z()},Y=(B)=>f(B),V=()=>f(),H=()=>f();Q.on("error",Y),Q.once("finish",V),$.once("close",H);try{Q.end(J)}catch(B){f(B)}})}async function MV($,J){if(J.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await OV($,J)}catch(Q){let Z=Y_(J.command,process.platform,Q);if(!Z)throw Q;return await OV($,{...J,command:Z})}}async function OV($,J){let Q=TV(J.command,{env:J.env,debugRole:"hook"}),Z=tz(Q[0],Q.slice(1),{cwd:J.cwd,env:SW(J.env),stdio:J.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:J.detached,windowsHide:!0}),W=new Promise((A)=>{Z.once("spawn",()=>A())}),j=new Promise((A,K)=>{Z.once("error",(G)=>K(G))}),X=JSON.stringify($);if(await Promise.race([W,j]),await j_(Z,X),J.detached){Z.unref();return}if(!Z.stdout||!Z.stderr)throw Error("hook command failed to create stdout/stderr");let f="",Y="",V=!1,H;Z.stdout.on("data",(A)=>{f+=A.toString()}),Z.stderr.on("data",(A)=>{Y+=A.toString()});let B=new Promise((A)=>{if((J.timeoutMs??0)>0)H=setTimeout(()=>{V=!0,Z.kill("SIGKILL")},J.timeoutMs);Z.once("close",(K)=>{if(H)clearTimeout(H);let{parsedJson:G,parseError:R}=W_(f);A({exitCode:K,stdout:f,stderr:Y,parsedJson:G,parseError:R,timedOut:V})})});return await Promise.race([B,j])}function X_($){try{let Q=$_($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Q?.startsWith("#!"))return;let Z=Q.slice(2).trim();if(!Z)return;let W=Z.split(/\s+/).filter(Boolean);return W.length>0?W:void 0}catch{return}}function f_($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function Y_($,J=process.platform,Q){if(J!=="win32"||!f_(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function qV($){if($.length===0)return;let[J,...Q]=$,Z=J.replace(/\\/g,"/").toLowerCase(),W=Z.split("/").at(-1)??Z;if(W==="env")return qV(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 V_($){let J=X_($);if(J&&J.length>0)return[...qV(J)??J,$];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 TV(["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 H_($){let J={};for(let Q of D$($)){if(!Q.hookEventName)continue;let Z=Q.hookEventName,W=J[Z]??[];W.push(V_(Q.path)),J[Z]=W}return J}async function B_($){let J;for(let Q of $.commands){let Z=Q.join(" ");try{let W=await MV($.payload,{command:Q,cwd:$.cwd,env:SW(process.env),detached:!1,timeoutMs:$.timeoutMs});if(W?.timedOut){r5($.logger,`hook command timed out: ${Z}`);continue}if(W?.parseError){r5($.logger,`hook command returned invalid JSON control output: ${Z} (${W.parseError})`);continue}J=Q_(J,Z_(W?.parsedJson))}catch(W){r5($.logger,`hook command failed: ${Z}`,W)}}return J}function Q2($){for(let J of $.commands){let Q=J.join(" ");MV($.payload,{command:J,cwd:$.cwd,env:SW(process.env),detached:!0}).catch((Z)=>{r5($.logger,`hook command failed: ${Q}`,Z)})}}function U$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function wW($,J){return{...U$($.snapshot),userMessage:J}}function PV($){return{...U$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function NV($){return{...U$($.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 wV($){return $.filter((J)=>J.type==="text"&&typeof J.text==="string").map((J)=>J.text).join("")}function A_($){if(!$)return;let J={};if($.cancel===!0)J.stop=!0;if($.overrideInput!==void 0)J.input=$.overrideInput;return Object.keys(J).length>0?J:void 0}function D8($){let J={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(Z)=>{let W=`${JSON.stringify({ts:new Date().toISOString(),...Z})}
204
- `,X=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??J_(_V(),"hooks.jsonl");_V(X),ez(X,W,"utf8")};return{beforeRun:async(Z)=>{let W=wW(Z,"");Q({...L0(W,J),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Z)=>{let W=PV(Z);Q({...L0(W,J),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:i5(W.call.input)}});return},afterTool:async(Z)=>{let W=NV(Z);Q({...L0(W,J),hookName:"tool_result",iteration:W.iteration,tool_result:W.record,postToolUse:{toolName:W.record.name,parameters:i5(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:Z,result:W})=>{let j=U$(Z);if(W.status==="completed"){Q({...L0(j,J),hookName:"agent_end",iteration:W.iterations,turn:{outputText:W.outputText,status:W.status},taskComplete:{taskMetadata:{}}});return}if(W.status==="aborted"||NW(W.error?.message)){Q({...L0(j,J),hookName:"agent_abort",reason:W.error?.message,taskCancel:{taskMetadata:{}}});return}if(W.error)Q({...L0(j,J),hookName:"agent_error",iteration:W.iterations,error:{name:W.error.name,message:W.error.message,stack:W.error.stack}})},onEvent:async(Z)=>{if(Z.type!=="message-added"||Z.message.role!=="user")return;let W=wW({snapshot:Z.snapshot},wV(Z.message.content));Q({...L0(W,J),hookName:"prompt_submit",userPromptSubmit:{prompt:W.userMessage,attachments:[]}})}}}function D6($){let J=H_($.workspacePath);if(!Object.values(J).some((B)=>B.length>0))return;let Z=async(B,A)=>{let K=J[A]??[];if(K.length===0)return;Q2({commands:K,cwd:$.cwd,logger:$.logger,payload:A==="agent_resume"?{...L0(B,$),hookName:A,taskResume:{taskMetadata:{},previousState:{}}}:{...L0(B,$),hookName:A,taskStart:{taskMetadata:{}}}})},W=async(B)=>{let A=J.prompt_submit??[];if(A.length>0)Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"prompt_submit",userPromptSubmit:{prompt:B.userMessage,attachments:[]}}})},j=async(B)=>{let A=J.tool_call??[];if(A.length===0)return;return B_({commands:A,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...L0(B,$),hookName:"tool_call",iteration:B.iteration,tool_call:{id:B.call.id,name:B.call.name,input:B.call.input},preToolUse:{toolName:B.call.name,parameters:i5(B.call.input)}}})},X=async(B)=>{let A=J.tool_result??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"tool_result",iteration:B.iteration,tool_result:B.record,postToolUse:{toolName:B.record.name,parameters:i5(B.record.input),result:typeof B.record.output==="string"?B.record.output:JSON.stringify(B.record.output),success:!B.record.error,executionTimeMs:B.record.durationMs}}})},f=async(B)=>{let A=J.agent_end??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"agent_end",iteration:B.iteration,turn:B.turn,taskComplete:{taskMetadata:{}}}})},Y=async(B)=>{let A=J.agent_error??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"agent_error",iteration:B.iteration,error:{name:B.error.name,message:B.error.message,stack:B.error.stack}}})},V=async(B)=>{if(NW(B.reason)){let K=J.agent_abort??[];if(K.length>0)Q2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"agent_abort",reason:B.reason,taskCancel:{taskMetadata:{}}}})}let A=J.session_shutdown??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"session_shutdown",reason:B.reason}})},H={};if((J.agent_start?.length??0)>0||(J.agent_resume?.length??0)>0||(J.prompt_submit?.length??0)>0){if((J.agent_start?.length??0)>0||(J.agent_resume?.length??0)>0)H.beforeRun=async(B)=>{let A=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await Z(U$(B.snapshot),A);return};if((J.prompt_submit?.length??0)>0)H.onEvent=async(B)=>{if(B.type!=="message-added"||B.message.role!=="user")return;await W(wW({snapshot:B.snapshot},wV(B.message.content)))}}if((J.tool_call?.length??0)>0)H.beforeTool=async(B)=>{let A=await j(PV(B));return A_(A)};if((J.tool_result?.length??0)>0)H.afterTool=async(B)=>{await X(NV(B));return};if((J.agent_end?.length??0)>0)H.afterRun=async({snapshot:B,result:A})=>{if(A.status!=="completed")return;await f({...U$(B),iteration:A.iterations,turn:{outputText:A.outputText,status:A.status}})};if((J.agent_error?.length??0)>0||(J.agent_abort?.length??0)>0||(J.session_shutdown?.length??0)>0){let B=H.afterRun;H.afterRun=async(A)=>{await B?.(A);let{snapshot:K,result:G}=A;if(G.status==="aborted"||NW(G.error?.message)){await V({...U$(K),reason:G.error?.message});return}if(G.error)await Y({...U$(K),iteration:G.iterations,error:G.error})}}return H}function U8($){return G8("core.hook_config_files",D6($))}function Z2($,J){let Q=$.map((Z)=>Z[J]).filter((Z)=>typeof Z==="function");if(Q.length===0)return;return async(Z)=>{let W;for(let j of Q){let X=await j(Z);if(!X||typeof X!=="object")continue;let f=X;W={...W??{},...f,stop:W?.stop===!0||f.stop===!0?!0:f.stop,options:W?.options||f.options?{...W?.options??{},...f.options??{}}:void 0}}return W}}function W2($){let J=$.filter((Q)=>Q!==void 0);if(J.length===0)return;return{beforeRun:Z2(J,"beforeRun"),afterRun:Z2(J,"afterRun"),beforeModel:Z2(J,"beforeModel"),afterModel:Z2(J,"afterModel"),beforeTool:Z2(J,"beforeTool"),afterTool:Z2(J,"afterTool"),onEvent:Z2(J,"onEvent")}}var SV={};w(SV,{normalizeRuntimeCapabilities:()=>z0});function z0(...$){let J,Q;for(let W of $){if(!W)continue;if(W.toolExecutors)J={...J??{},...W.toolExecutors};if(W.requestToolApproval)Q=W.requestToolApproval}let Z=J&&Object.keys(J).length>0;if(!Z&&!Q)return;return{...Z?{toolExecutors:J}:{},...Q?{requestToolApproval:Q}:{}}}var gV={};w(gV,{toProviderConfig:()=>d0,emptyStoredProviderSettings:()=>z$,StoredProviderSettingsSchema:()=>_8,StoredProviderSettingsEntrySchema:()=>DQ,ProviderSettingsSchemaTyped:()=>z8});import{z as L$}from"zod";var xV={};w(xV,{toProviderConfig:()=>d0,safeParseSettings:()=>FQ,safeCreateProviderConfig:()=>mW,parseSettings:()=>GQ,normalizeProviderId:()=>L8,isBuiltInProviderId:()=>xW,createProviderConfig:()=>gW,SapSettingsSchema:()=>BQ,ReasoningSettingsSchema:()=>fQ,ProviderSettingsSchema:()=>R$,ProviderProtocolSchema:()=>WQ,ProviderIdSchema:()=>_6,ProviderClientSchema:()=>jQ,OcaSettingsSchema:()=>AQ,ModelCatalogSettingsSchema:()=>KQ,GcpSettingsSchema:()=>VQ,BUILT_IN_PROVIDER_IDS:()=>IW,BUILT_IN_PROVIDER:()=>z6,AzureSettingsSchema:()=>HQ,AwsSettingsSchema:()=>YQ,AuthSettingsSchema:()=>XQ});import*as u0 from"@cline/llms";import{z as N}from"zod";var IV={};w(IV,{resolveProviderConfig:()=>L6,getProviderConfig:()=>ZQ,getLiveModelsCatalog:()=>R8,clearPublicModelsCatalogCache:()=>b_,clearPrivateModelsCatalogCache:()=>kW,clearLiveModelsCatalogCache:()=>hW,OPENAI_COMPATIBLE_PROVIDERS:()=>R6,DEFAULT_MODELS_CATALOG_URL:()=>e5});import*as A0 from"@cline/llms";function CW($){if(!Array.isArray($))return[];return $.map((J)=>{if(typeof J==="string")return J.trim();if(J&&typeof J==="object"){let Q=J;for(let Z of[Q.id,Q.name,Q.model])if(typeof Z==="string"&&Z.trim())return Z.trim()}return""}).filter((J)=>J.length>0)}function K_($,J){let Q=CW($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let Z=$,W=CW(Z.data??Z.models);if(W.length>0)return W;if(Z.models&&typeof Z.models==="object"&&!Array.isArray(Z.models)){let X=Object.keys(Z.models).filter((f)=>f.trim().length>0);if(X.length>0)return X}let j=Z.providers?.[J];if(j&&typeof j==="object"){let f=CW(j.models??j);if(f.length>0)return f}return[]}async function n5($,J){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return K_(await Q.json(),J)}function CV($){return $.replace(/\/+$/,"")}function a5($,J,Q){let Z=Q?.trim();if(!Z)return;let W=$?.trim();if(!W||!J?.trim())return Z;try{let j=new URL(Z),X=new URL(J),f=new URL(W);if(j.origin!==X.origin)return Z;let Y=CV(X.pathname),V=CV(f.pathname);if(Y&&j.pathname.startsWith(`${Y}/`)){let H=j.pathname.slice(Y.length);f.pathname=`${V}${H}`}else f.pathname=j.pathname;return f.search=j.search,f.hash=j.hash,f.toString()}catch{return Z}}function G_($){return Object.fromEntries(Object.entries($).map(([J,Q])=>[J,{...Q}]))}function F_($){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 D_=Object.values(A0.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:G_($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),EV=Object.fromEntries(D_.map(($)=>[$.id,$]));function U_($){return EV[$]}function R_(){return Object.fromEntries(Object.entries(EV).filter(([,$])=>F_($)))}function bV($=[]){let J=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return J.length>0?J:void 0}var e5="https://models.dev/api.json",L_=600000,hV=300000,z_=5000,t5=new Map,U6=new Map,yW=new Map,s5=new Map;async function __(){return A0.getGeneratedProviderModels()}async function O_($,J={},Q={},Z={},W={},j={}){let X=await __(),f=A0.resolveProviderModelCatalogKeys($),Y=Object.assign({},...f.map((B)=>X[B]??{})),V=Boolean(A0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),H=Object.keys(W).length>0;if(V&&H)return A0.sortModelsByReleaseDate({...W,...j});if($==="openai-codex")return A0.sortModelsByReleaseDate({...J,...A0.filterOpenAICodexModels(Q),...W,...j});return A0.sortModelsByReleaseDate({...Y,...J,...Q,...Z,...W,...j})}function T_($,J){let Q=A0.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((Z)=>J[Z]??{}))}function $Q($){let J=$?.trim();return J&&J.length>0?J:""}function bW($){let J=$.apiKey?.trim()||$.accessToken?.trim();return J&&J.length>0?J:void 0}function M_($){let J=2166136261;for(let Q=0;Q<$.length;Q+=1)J^=$.charCodeAt(Q),J+=(J<<1)+(J<<4)+(J<<7)+(J<<8)+(J<<24);return(J>>>0).toString(16)}function q_($,J){return`${$}:${$Q(J.baseUrl)}:${M_(bW(J)??"")}`}async function JQ($,J,Q=z_){let Z=new AbortController,W=setTimeout(()=>Z.abort(),Q);try{return await fetch($,{...J,signal:Z.signal})}finally{clearTimeout(W)}}function j2($,J,Q){if(Q&&!$.includes(J))$.push(J)}function QQ($,J){let Q=["streaming","tools"];return j2(Q,"images",Boolean(J.supportsImages)),j2(Q,"prompt-cache",Boolean(J.supportsPromptCache)),j2(Q,"reasoning",Boolean(J.supportsReasoning)),{id:$,name:J.name??$,contextWindow:J.contextWindow,maxInputTokens:J.maxInputTokens,maxTokens:J.maxTokens,capabilities:Q,releaseDate:J.releaseDate,status:"active"}}async function P_($,J){let Q=await JQ("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${J}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let W=(await Q.json())?.data??[],j={};for(let X of W){let f=X.id?.trim();if(!f)continue;if(f.includes("whisper")||f.includes("tts")||f.includes("embedding"))continue;let Y=X.supported_features??[];j[f]=QQ(f,{name:f,contextWindow:X.context_length,maxInputTokens:X.context_length,maxTokens:X.max_completion_tokens,supportsReasoning:Y.includes("reasoning")||Y.includes("reasoning_effort"),supportsImages:!1})}return j}function yV($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let J=Number($);return Number.isFinite(J)?J:void 0}return}async function N_($,J){let Q=await JQ("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":J}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let W=(await Q.json())?.data??[],j={};for(let X of W){let f=X.id?.trim();if(!f)continue;j[f]=QQ(f,{name:f,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return j}async function w_($,J){let Z=`${($Q($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,W=await JQ(Z,{method:"GET",headers:{Authorization:`Bearer ${J}`,accept:"application/json"}});if(!W.ok)throw Error(`Poolside model refresh failed: HTTP ${W.status}`);let X=(await W.json())?.data??[],f={};for(let Y of X){let V=Y.id?.trim();if(!V)continue;let H=Y.supported_features??[],B=Y.supported_sampling_parameters??[],A=Y.input_modalities??[],K=["streaming"];j2(K,"tools",H.includes("tools")),j2(K,"reasoning",H.includes("reasoning")),j2(K,"temperature",B.includes("temperature")),j2(K,"images",A.includes("image"));let G={input:yV(Y.pricing?.prompt),output:yV(Y.pricing?.completion)};f[V]={id:V,name:Y.name??V,description:Y.description,contextWindow:Y.context_length,maxInputTokens:Y.context_length,maxTokens:Y.max_completion_tokens,capabilities:K,pricing:G.input!==void 0||G.output!==void 0?G:void 0,status:"active"}}return f}function S_($){let J=$Q($);if(!J)return"http://localhost:4000";return J.endsWith("/v1")?J.slice(0,-3):J}async function C_($,J){let Z=`${S_($.baseUrl)}/v1/model/info`,W=async(V)=>JQ(Z,{method:"GET",headers:{accept:"application/json",...V}}),j=await W({"x-litellm-api-key":J});if(!j.ok)j=await W({Authorization:`Bearer ${J}`});if(!j.ok)throw Error(`LiteLLM model refresh failed: HTTP ${j.status}`);let f=(await j.json())?.data??[],Y={};for(let V of f){let H=V.model_name?.trim(),A=V.litellm_params?.model?.trim()||H;if(!A)continue;let K=V.model_info,G=QQ(A,{name:H??A,maxTokens:K?.max_output_tokens??K?.max_tokens,maxInputTokens:K?.max_input_tokens??K?.max_tokens,supportsImages:K?.supports_vision,supportsPromptCache:K?.supports_prompt_caching,supportsReasoning:K?.supports_reasoning});if(Y[A]=G,H)Y[H]={...G,id:H,name:H}}return Y}var kV={baseten:P_,hicap:N_,litellm:C_,poolside:w_},EW=new Map,o5=new Map;function y_($,J){return`${$}:${$Q(J.baseUrl)}`}async function E_($,J,Q){let Z=A0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],W=a5(Q.baseUrl,Z?.provider.baseUrl,Z?.provider.modelsSourceUrl);if(!W)return{};let j=J?.cacheTtlMs??hV,X=y_($,Q),f=Date.now(),Y=EW.get(X);if(Y&&Y.expiresAt>f)return Y.data;let V=o5.get(X);if(V)return V;let H=n5(W,$).then((B)=>{let A=Object.fromEntries(B.map((K)=>[K,QQ(K,{name:K})]));return EW.set(X,{data:A,expiresAt:f+j}),A}).finally(()=>{o5.delete(X)});return o5.set(X,H),H}function b_(){EW.clear(),o5.clear()}async function h_($,J){let Q=bW(J);if(!Q)return{};let Z=kV[$];if(!Z)return{};return Z(J,Q)}function k_($,J,Q){if(!Q)return!1;if(!kV[$])return!1;if(J?.loadPrivateOnAuth===!1)return!1;return Boolean(bW(Q))}async function I_($,J,Q){let Z=J?.cacheTtlMs??hV,W=q_($,Q),j=Date.now(),X=yW.get(W);if(X&&X.expiresAt>j)return X.data;let f=s5.get(W);if(f)return f;let Y=h_($,Q).then((V)=>{return yW.set(W,{data:V,expiresAt:j+Z}),V}).finally(()=>{s5.delete(W)});return s5.set(W,Y),Y}async function x_($){return A0.fetchModelsDevProviderModels($,globalThis.fetch)}async function R8($={}){let J=$.url??e5,Q=$.cacheTtlMs??L_,Z=Date.now(),W=t5.get(J);if(W&&W.expiresAt>Z)return W.data;let j=U6.get(J);if(j)return j;let X=x_(J).then((f)=>{return t5.set(J,{data:f,expiresAt:Z+Q}),f}).finally(()=>{U6.delete(J)});return U6.set(J,X),X}function hW($){if($){t5.delete($),U6.delete($);return}t5.clear(),U6.clear()}function kW(){yW.clear(),s5.clear()}function g_($){return Object.fromEntries(Object.entries($).map(([J,Q])=>[J,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:bV(Q.capabilities)}]))}var R6=g_(R_());function ZQ($){let J=U_($);if(!J)return;return{baseUrl:J.baseUrl||void 0,modelId:J.modelId,knownModels:J.knownModels,capabilities:bV(J.capabilities)}}async function L6($,J,Q){let Z=ZQ($);if(!Z)return;try{let W=J?.loadLatestOnInit?await R8(J):void 0,j=W?T_($,W):{},X=Q&&k_($,J,Q)?await I_($,J,Q):{},Y=Boolean(A0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:Z.modelId,baseUrl:Z.baseUrl}:Q,V=Y?await E_($,J,Y).catch(()=>({})):{},H=await O_($,Z.knownModels,j,X,V,Q?.knownModels);return{...Z,knownModels:H}}catch(W){if(J?.failOnError)throw W;return Z}}var z6=u0.BUILT_IN_PROVIDER,IW=u0.BUILT_IN_PROVIDER_IDS,xW=u0.isBuiltInProviderId,L8=u0.normalizeProviderId,_6=N.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),WQ=N.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),jQ=N.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),XQ=N.object({apiKey:N.string().optional(),accessToken:N.string().optional(),refreshToken:N.string().optional(),expiresAt:N.number().int().positive().optional(),accountId:N.string().optional()}),m_=N.enum(["none","low","medium","high","xhigh"]),fQ=N.object({enabled:N.boolean().optional(),effort:m_.optional(),budgetTokens:N.number().int().positive().optional()}),YQ=N.object({accessKey:N.string().optional(),secretKey:N.string().optional(),sessionToken:N.string().optional(),region:N.string().optional(),profile:N.string().optional(),authentication:N.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:N.boolean().optional(),useCrossRegionInference:N.boolean().optional(),useGlobalInference:N.boolean().optional(),endpoint:N.string().url().optional(),customModelBaseId:N.string().optional()}),VQ=N.object({projectId:N.string().optional(),region:N.string().optional()}),HQ=N.object({apiVersion:N.string().optional(),useIdentity:N.boolean().optional()}),BQ=N.object({clientId:N.string().optional(),clientSecret:N.string().optional(),tokenUrl:N.string().url().optional(),resourceGroup:N.string().optional(),deploymentId:N.string().optional(),useOrchestrationMode:N.boolean().optional(),api:N.enum(["orchestration","foundation-models"]).optional(),defaultSettings:N.record(N.string(),N.unknown()).optional()}),AQ=N.object({mode:N.enum(["internal","external"]).optional(),usePromptCache:N.boolean().optional()}),KQ=N.object({loadLatestOnInit:N.boolean().optional(),loadPrivateOnAuth:N.boolean().optional(),url:N.string().url().optional(),cacheTtlMs:N.number().int().positive().optional(),failOnError:N.boolean().optional()}),R$=N.object({provider:_6,apiKey:N.string().optional(),auth:XQ.optional(),model:N.string().optional(),protocol:WQ.optional(),client:jQ.optional(),routingProviderId:_6.optional(),maxTokens:N.number().int().positive().optional(),contextWindow:N.number().int().positive().optional(),baseUrl:N.string().url().optional(),headers:N.record(N.string(),N.string()).optional(),timeout:N.number().int().positive().optional(),reasoning:fQ.optional(),aws:YQ.optional(),gcp:VQ.optional(),azure:HQ.optional(),sap:BQ.optional(),oca:AQ.optional(),region:N.string().optional(),apiLine:N.enum(["china","international"]).optional(),capabilities:N.array(N.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:KQ.optional()});function GQ($){return R$.parse($)}function FQ($){return R$.safeParse($)}function v_($){return $.protocol==="openai-responses"||$.client==="openai"}function d0($,J={}){let Q=$.provider,Z=L8(Q),W=J.includeKnownModels!==!1,j=$.reasoning?.effort||"none",X=j==="none"?void 0:j,f=R6[Z],Y=Object.assign({},...u0.resolveProviderModelCatalogKeys(Z).map((R)=>u0.getGeneratedModelsForProvider(R))),V=Object.keys(Y)[0],H=l2(Z,$),B=$.baseUrl??(Z==="oca"?$.oca?.mode==="internal"?j5:X5:f?.baseUrl),A=$.routingProviderId??(v_($)&&Z!==z6.OPENAI_NATIVE?z6.OPENAI_NATIVE:void 0),K=W?f?.knownModels??(Object.keys(Y).length>0?Y:void 0):void 0,G={providerId:Q,clientType:$.client,routingProviderId:A,modelId:$.model??f?.modelId??V??"default",...W?{knownModels:K}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:B,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:X,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??f?.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(G).filter(([R,D])=>D!==void 0))}function gW($){let J=GQ($);return d0(J)}function mW($){let J=FQ($);if(J.success)return{success:!0,config:d0(J.data)};return{success:!1,error:J.error}}var z8=R$;var DQ=L$.object({settings:R$,updatedAt:L$.string().datetime(),tokenSource:L$.enum(["manual","oauth","migration"]).default("manual")}),_8=L$.object({version:L$.literal(1),lastUsedProvider:L$.string().min(1).optional(),providers:L$.record(L$.string(),DQ)});function z$(){return{version:1,providers:{}}}W1();var uV={};w(uV,{InMemoryWorkspaceManager:()=>T8});import{upsertWorkspaceInfo as l_,WorkspaceManifestSchema as cW}from"@cline/shared";var cV={};w(cV,{normalizeWorkspacePath:()=>m1,generateWorkspaceInfoWithDiagnostics:()=>O6,generateWorkspaceInfo:()=>O8,buildWorkspaceMetadataWithInfo:()=>vW,buildWorkspaceMetadata:()=>T6});import{basename as c_,resolve as u_}from"node:path";import{performance as mV}from"node:perf_hooks";import{processWorkspaceInfo as vV}from"@cline/shared";import d_ from"simple-git";function m1($){return u_($)}async function O8($){return(await O6($)).info}function UQ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function O6($){let J=m1($),Q={rootPath:J,hint:c_(J)},Z;try{let W=d_({baseDir:J});if(!await W.checkIsRepo())return{info:Q,vcsType:"none"};try{let X=await W.getRemotes(!0);if(X.length>0){let f=X.map((Y)=>{let V=Y.refs.fetch||Y.refs.push;return`${Y.name}: ${V}`});Q.associatedRemoteUrls=f}}catch(X){Z??=UQ(X)}try{let X=(await W.revparse(["HEAD"])).trim();if(X.length>0)Q.latestGitCommitHash=X}catch(X){Z??=UQ(X)}try{let X=(await W.branch()).current.trim();if(X.length>0)Q.latestGitBranchName=X}catch(X){Z??=UQ(X)}return{info:Q,vcsType:"git",error:Z}}catch(W){return{info:Q,vcsType:"none",error:UQ(W)}}}async function T6($){let J=await O8($);return vV(J)}async function vW($){let J=mV.now(),Q=await O6($),Z=mV.now()-J,W=Q.info;return{workspaceInfo:W,workspaceMetadata:vV(W),durationMs:Z,vcsType:Q.vcsType,initError:Q.error}}class T8{manifest;listeners=new Set;constructor($){this.manifest=cW.parse($??{workspaces:{}})}async addWorkspacePath($){let J=await O8($);return this.manifest=l_(this.manifest,J),this.emit({type:"workspace_added",workspace:J}),J}async switchWorkspace($){let J=m1($),Q=this.manifest.workspaces[J];if(Q)return this.manifest=cW.parse({...this.manifest,currentWorkspacePath:J}),this.emit({type:"workspace_switched",workspace:Q}),Q;let Z=await this.addWorkspacePath(J);return this.manifest=cW.parse({...this.manifest,currentWorkspacePath:Z.rootPath}),this.emit({type:"workspace_switched",workspace:Z}),Z}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let J=m1($);return this.manifest.workspaces[J]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let J of this.listeners)J($)}}O0();import{createHash as p_}from"node:crypto";var dV=new Set,lV=new Set;function r_($){return p_("sha256").update($).digest("hex")}function i_($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function pV($){if(!$.telemetry)return;let J=r_($.rootPath),Q=$.rootCount??1;if(!dV.has(J))dV.add(J),xJ($.telemetry,{root_count:Q,vcs_types:i_($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!lV.has(J)){lV.add(J);let Z=Error($.initError.message);Z.name=$.initError.errorType||"Error",gJ($.telemetry,Z,{fallback_to_single_root:!0,workspace_count:Q})}}function a_($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function s_($,J,Q){if(J.length>0)for(let j of J)Q?.log(j.message,{severity:"warn"});if($.length===0)return;let Z=$.slice(0,3).map(a_).join("; "),W=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${Z}${W}. Use --verbose for more details.`,{severity:"warn"});for(let j of $)Q?.log(`Plugin initialization failed (${j.phase}) for ${j.pluginPath}`,{severity:"warn",stack:j.stack,pluginPath:j.pluginPath,pluginName:j.pluginName})}function o_($,J){let Q=typeof $.thinking==="boolean",Z=typeof $.reasoningEffort==="string";if(!Q&&!Z)return J;return{...J??{},...Q?{enabled:$.thinking}:{},...Z?{effort:$.reasoningEffort}:{}}}function rV($,J){return n_($,J)}function t_($){let J=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;J+=1}return J}function e_($){let J={...$.storedHeaders??{},...$.configHeaders??{}},Q=$.accountId?.trim()||$O($.accessToken);if(J.originator="cline",J.session_id=$.sessionId,J["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,Q)J["ChatGPT-Account-Id"]=Q;return J}function $O($){let J=$?.trim();if(!J)return;let Q=T0(J),Z=Q?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof Z==="string"&&Z.length>0)return Z;let W=Q?.organizations?.[0]?.id;if(typeof W==="string"&&W.length>0)return W;let j=Q?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return}function JO($,J,Q,Z,W){let j=Q.getProviderSettings($.providerId),X=Z||j?.modelCatalog?{...Z??{},...j?.modelCatalog??{}}:void 0,f=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,Y={...j??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??j?.apiKey,baseUrl:$.baseUrl??j?.baseUrl,headers:$.providerId==="openai-codex"?e_({sessionId:J,configHeaders:$.headers,storedHeaders:j?.headers,accountId:j?.auth?.accountId,accessToken:$.apiKey??j?.auth?.accessToken??j?.apiKey}):$.headers??j?.headers,reasoning:o_($,j?.reasoning),modelCatalog:X},V={...d0(Y),...f??{}};if($.knownModels)V.knownModels=$.knownModels;if($.extensionContext)V.extensionContext=$.extensionContext;let B=$.fetch??V.fetch??W;if(B)V.fetch=B;return V}async function iV($){let{input:J,sessionId:Q,providerSettingsManager:Z,defaultTelemetry:W,defaultCapabilities:j,defaultToolPolicies:X,defaultFetch:f,onPluginEvent:Y,onTeamEvent:V,createSubAgentLifecycleCallbacks:H,createSpawnTool:B,localRuntime:A,readSessionMetadata:K,writeSessionMetadata:G}=$,R=G$(J.config),{modelCatalogDefaults:D,userInstructionService:U,configExtensions:F,onTeamRestored:O,...T}=A??{},z=Object.keys(T).length>0?T:void 0,{workspaceInfo:L,workspaceMetadata:P,durationMs:S,vcsType:b,initError:u}=await vW(R),o=z?.extensionContext,J0={...o??{},workspace:{...L,...o?.workspace??{}},session:{...o?.session??{},sessionId:Q},logger:o?.logger??z?.logger,telemetry:o?.telemetry??z?.telemetry??W};pV({telemetry:J0.telemetry,rootPath:L.rootPath,workspaceInfo:L,rootCount:1,vcsType:b,durationMs:S,initError:u,featureFlagEnabled:!0});let t=U8({cwd:J.config.cwd,workspacePath:R,rootSessionId:Q,logger:z?.logger,workspaceInfo:L}),$1=uY(z?.hooks)?void 0:D8({rootSessionId:Q,workspacePath:R,workspaceInfo:L}),b$=W2([z?.hooks,$1]),r;if(rV(F,"plugins"))try{r=await K8({pluginPaths:z?.pluginPaths,workspacePath:R,cwd:J.config.cwd,onEvent:Y,providerId:J.config.providerId,modelId:J.config.modelId,workspaceInfo:L,session:J0.session,client:J0.client,user:J0.user,logger:J0.logger,telemetry:J0.telemetry,automation:J0.automation}),s_(r.failures,r.warnings,z?.logger)}catch(x2){let QZ=x2 instanceof Error?x2.message:String(x2);z?.logger?.log?.(`plugin loading failed; continuing without plugins (${QZ})`)}let C=WW(t?[t]:void 0,WW(z?.extensions,q5(r?.extensions))),X0=rV(F,"plugins")?$2(r?.pluginPaths??[]):void 0,f0={...J.config,...z??{},sessionId:Q,hooks:b$,extensions:C,extensionContext:J0,telemetry:J0.telemetry},w0=JO(f0,Q,Z,D,f),k2=W2([f0.hooks,f0.checkpoint?.enabled===!0?zV({cwd:f0.cwd,sessionId:Q,logger:f0.logger,createCheckpoint:f0.checkpoint?.createCheckpoint,initialRunCount:t_(J.initialMessages),readSessionMetadata:K,writeSessionMetadata:G}):void 0]),T1={...f0,providerConfig:w0,workspaceMetadata:P,hooks:k2},Y1=J.toolPolicies??f0.toolPolicies??X,V4=z0(j,J.capabilities),I2=V4?.requestToolApproval,bJ=V4?.toolExecutors,M1=H?.(T1),hJ=new T8({currentWorkspacePath:L.rootPath,workspaces:{[L.rootPath]:L}});return{effectiveInput:J,config:T1,providerConfig:w0,workspaceMetadata:P,workspaceInfo:L,extensions:C,hooks:k2,toolPolicies:Y1,requestToolApproval:I2,pluginSandboxShutdown:r?.shutdown,runtimeBuilderInput:{config:T1,hooks:k2,extensions:C,onTeamEvent:V,createSpawnTool:B,onTeamRestored:O,onSubAgentEvent:M1?.onSubAgentEvent,onSubAgentStart:M1?.onSubAgentStart,onSubAgentEnd:M1?.onSubAgentEnd,userInstructionService:U,pluginSkillDirectories:X0,configExtensions:F,toolExecutors:bJ,toolPolicies:Y1,workspaceManager:hJ,logger:T1.logger,telemetry:T1.telemetry,requestToolApproval:I2}}}import{existsSync as LQ,mkdirSync as QO,readdirSync as ZO,rmdirSync as WO,rmSync as jO,unlinkSync as XO}from"node:fs";import{dirname as nV,join as RQ}from"node:path";function e(){return new Date().toISOString()}function M6($){if(!$||!LQ($))return;try{XO($)}catch{}}function fO($){let J=j8($);if(J)return{rootSessionId:J.rootSessionId,fileStem:`${J.agentId}__${J.teamTaskId}`};let Q=J6($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class uW{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return RQ(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let J=this.sessionArtifactsDir($);if(!LQ(J))QO(J,{recursive:!0});return J}sessionMessagesPath($){return RQ(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,J=!1){let Q=J?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return RQ(Q,`${$}.json`)}removeSessionDirIfEmpty($){let J=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(J.startsWith(Q)&&J!==Q){if(!LQ(J)){J=nV(J);continue}try{if(ZO(J).length>0)break;WO(J)}catch{break}J=nV(J)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!LQ($))return;try{jO($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,J,Q){let{rootSessionId:Z,fileStem:W}=fO($),j=this.sessionArtifactsDir(Z);return{messagesPath:RQ(j,`${W}.messages.json`)}}}import{resolveDocumentsExtensionPath as YO}from"@cline/shared/storage";O0();function aV($,J,Q,Z,W){if(Q)vJ($.telemetry,{ulid:J,apiProvider:$.providerId,...W});else mJ($.telemetry,{ulid:J,apiProvider:$.providerId,...W});VO($.telemetry,{workspacePath:Z})}function VO($,J){let Q=YO("Hooks"),Z=D$(J.workspacePath),W=new Map;for(let j of Z){let X=j.hookEventName??"unknown",f=W.get(X)??{global:0,workspace:0};if(j.path===Q||j.path.startsWith(`${Q}/`))f.global+=1;else f.workspace+=1;W.set(X,f)}for(let[j,X]of W.entries())sJ($,j,X.global,X.workspace)}function sV($,J){for(let Q of J.mentions)nJ($,Q,J.matchedFiles.includes(Q)?1:0,"file",!J.matchedFiles.includes(Q));for(let Q of J.matchedFiles)rJ($,"file",Q.length);for(let Q of J.ignoredMentions)iJ($,"file","not_found",Q)}var ZF={};w(ZF,{ProviderSettingsManager:()=>_1});import{chmodSync as jF,existsSync as Sj,mkdirSync as Pb,readFileSync as Nb,writeFileSync as wb}from"node:fs";import{basename as XF,dirname as Cj}from"node:path";import{resolveProviderSettingsPath as Sb}from"@cline/shared/storage";var M={};w(M,{writeHubDiscovery:()=>aQ,writeGlobalSettings:()=>k1,withHubStartupLock:()=>sQ,verifyHubConnection:()=>G1,updateMcpServerOAuthState:()=>H2,updateLocalProvider:()=>u9,uninstallPlugin:()=>Jj,truncateNotificationBody:()=>_J,toggleDisabledTool:()=>T5,toTeamProgressLifecycleEvent:()=>d8,toProviderConfig:()=>d0,toHubStatusUrl:()=>S7,toHubHealthUrl:()=>oQ,toHookConfigFileName:()=>F6,syncPluginMcpServersToSettings:()=>r3,summarizeUsageFromMessages:()=>f8,stopLocalHubServerGracefully:()=>c7,startLocalOAuthServer:()=>J1,startHubWebSocketServer:()=>C2,startHubServer:()=>tK,startClineDeviceAuth:()=>HZ,splitCoreSessionConfig:()=>r6,spawnDetachedHubServerWithRetry:()=>k8,spawnDetachedHubServer:()=>k7,setTelemetryOptOutGlobally:()=>bf,setMcpServerDisabled:()=>Y2,setDisabledTools:()=>uZ,setDisabledPlugin:()=>mf,setAutoUpdateEnabledGlobally:()=>kf,sendHubCommand:()=>oA,saveProviderOAuthCredentials:()=>x$,saveLocalProviderSettings:()=>Vj,saveLocalProviderOAuthCredentials:()=>Kj,sanitizeSessionToken:()=>a$,safeParseSettings:()=>FQ,safeCreateProviderConfig:()=>mW,runSubprocessEvent:()=>i8,runHook:()=>a8,reviveTeamStateDates:()=>E5,restartLocalHubIfIdleAfterStartupTimeout:()=>Q9,resolveWorkspaceHubOwnerContext:()=>IB,resolveWorkflowsConfigSearchPaths:()=>k6,resolveSkillsConfigSearchPaths:()=>b6,resolveSharedHubOwnerContext:()=>E0,resolveSessionBackend:()=>f3,resolveRulesConfigSearchPaths:()=>h6,resolveProviderConfig:()=>L6,resolveProviderApiKeyFromSettings:()=>DZ,resolveProductionHubOwnerContext:()=>n0,resolvePluginSkillDirectoriesFromPaths:()=>$2,resolvePluginConfigSearchPaths:()=>B6,resolveMcpServerRegistrations:()=>A1,resolveLocalClineAuthToken:()=>Fj,resolveHubUrl:()=>K3,resolveHubOwnerContext:()=>l1,resolveHubEndpointOptions:()=>i0,resolveHubBuildId:()=>nQ,resolveHooksConfigSearchPaths:()=>K6,resolveDisabledToolNames:()=>B1,resolveDisabledPluginPaths:()=>r4,resolveDefaultMcpSettingsPath:()=>K0,resolveDefaultHubPort:()=>h8,resolveDefaultHubPathname:()=>h7,resolveDefaultHubHost:()=>b7,resolveCoreSelectedToolIds:()=>h5,resolveCoreDistinctId:()=>b0,resolveCompatibleLocalHubUrl:()=>XJ,resolveClineDir:()=>EB,resolveClineDataDir:()=>R2,resolveAndLoadAgentPlugins:()=>K8,resolveAgentPluginPaths:()=>e$,requestHubShutdown:()=>jJ,requestDesktopToolApproval:()=>u3,removePluginMcpServersFromSettings:()=>wJ,rememberRecoverableLocalHubUrl:()=>P$,registerRemoteConfigSessionBlobUpload:()=>N9,registerMcpServersFromSettingsFile:()=>B2,registerDisposable:()=>Ob,refreshProviderModelsFromSource:()=>Hj,refreshOpenAICodexToken:()=>W5,refreshOcaToken:()=>Y5,refreshClineToken:()=>Q5,readSessionCheckpointHistory:()=>OJ,readRemoteConfigSessionBlobUploadMetadata:()=>b3,readHubDiscovery:()=>G0,readGlobalSettings:()=>M0,readBearerToken:()=>_9,probeHubServer:()=>p1,probeHubConnection:()=>sA,prewarmFileIndex:()=>D5,prewarmDetachedHubServer:()=>eQ,prepareRemoteConfigCoreIntegration:()=>k3,parseWorkflowConfigFromMarkdown:()=>E6,parseUserCommandEnvelope:()=>_b,parseSkillConfigFromMarkdown:()=>C6,parseSettings:()=>GQ,parseRuleConfigFromMarkdown:()=>y6,parseHookEventPayload:()=>n8,parseConfiguredAgentConfig:()=>HJ,normalizeWorkspacePath:()=>m1,normalizeUserInput:()=>zb,normalizeSdkError:()=>Lb,normalizeRuntimeCapabilities:()=>z0,normalizeProviderId:()=>L8,normalizeOAuthProvider:()=>Bj,normalizeHubWebSocketUrl:()=>N$,noopBasicLogger:()=>Rb,migrateLegacyProviderSettings:()=>CJ,mergeRulesForSystemPrompt:()=>w8,mergeAgentHooks:()=>W2,makeTeamTaskSubSessionId:()=>$6,makeSubSessionId:()=>W8,loginOpenAICodex:()=>F4,loginOcaOAuth:()=>R4,loginLocalProvider:()=>Aj,loginClineOAuth:()=>K4,loginAndSaveProviderOAuthCredentials:()=>z4,loginAndSaveLocalProviderOAuthCredentials:()=>Gj,loadOpenTelemetryAdapter:()=>eE,loadMcpSettingsFile:()=>f2,loadLlmsConfigFromFile:()=>Pj,loadConfiguredAgentConfigs:()=>v8,loadAgentPluginsFromPathsWithDiagnostics:()=>t$,loadAgentPluginsFromPaths:()=>m5,loadAgentPluginFromPath:()=>V6,listSessionHistoryFromBackend:()=>q7,listPluginToolsWithDiagnostics:()=>mQ,listPluginTools:()=>l6,listMcpServerOAuthStatuses:()=>u6,listLocalProviders:()=>fj,listHookConfigFiles:()=>D$,isToolDisabledGlobally:()=>If,isTelemetryOptedOutGlobally:()=>O5,isSessionNotFoundError:()=>d1,isRuleEnabled:()=>SQ,isPluginDisabledGlobally:()=>gf,isOAuthProvider:()=>I$,isHubReconnectableTransportError:()=>m7,isHubCommandTimeoutError:()=>J9,isDiscoveryFilePresent:()=>hB,isClineNotSubscribedMessage:()=>jb,isClineNotSubscribedError:()=>Wb,isClineAccountActionRequest:()=>zQ,isBuiltInProviderId:()=>xW,isAutoUpdateEnabledGlobally:()=>hf,identifyAccount:()=>S1,hasMcpSettingsFile:()=>c1,getValidOpenAICodexCredentials:()=>D4,getValidOcaCredentials:()=>L4,getValidClineCredentials:()=>G4,getProviderOAuthCredentialsFromSettings:()=>_4,getProviderConfigFields:()=>Dj,getProviderConfig:()=>ZQ,getProviderAuthStorageId:()=>FZ,getProviderAuthHandler:()=>Z0,getPersistedProviderApiKey:()=>l2,getMcpServerOAuthState:()=>V2,getLocalProviderModels:()=>Yj,getLiveModelsCatalog:()=>R8,getFileIndex:()=>b1,getCurrentContextSize:()=>YW,getCoreHeadlessToolNames:()=>e4,getCoreDefaultEnabledToolIds:()=>b5,getCoreBuiltinToolCatalog:()=>i$,getCoreAcpToolNames:()=>k5,getClinePassSubscriptionUrl:()=>Zb,getClineNotSubscribedMessage:()=>Qb,getClineDefaultSystemPrompt:()=>Xb,generateWorkspaceInfoWithDiagnostics:()=>O6,generateWorkspaceInfo:()=>O8,formatRulesForSystemPrompt:()=>N8,formatProviderOAuthApiKey:()=>UZ,formatDisplayUserInput:()=>Ub,filterExtensionToolRegistrations:()=>q5,filterDisabledTools:()=>I1,filterDisabledPluginPaths:()=>M5,fetchClineRecommendedModels:()=>Mj,executeClineAccountAction:()=>_Q,ensureHubWebSocketServer:()=>O9,ensureHubServer:()=>eK,ensureDetachedHubServer:()=>uB,ensureCustomProvidersLoaded:()=>m9,ensureCompatibleLocalHubUrl:()=>_2,enrichPromptWithMentions:()=>a2,emptyWorkspaceManifest:()=>Gb,emptyStoredProviderSettings:()=>z$,discoverPluginModulePaths:()=>A6,disablePluginMcpServersInSettings:()=>i3,deriveSubsessionStatus:()=>Q6,deleteLocalProvider:()=>d9,defineLlmsConfig:()=>qj,createWorkflowsConfigDefinition:()=>g6,createUserInstructionConfigService:()=>_$,createToolPoliciesWithPreset:()=>R5,createTool:()=>Kb,createTeamName:()=>C9,createSubprocessHooks:()=>B9,createSpawnAgentTool:()=>A$,createSkillsConfigDefinition:()=>I6,createSessionHost:()=>r8,createRuntimeHost:()=>r8,createRulesConfigDefinition:()=>x6,createRemoteConfigSessionMessagesArtifactUploader:()=>h3,createProviderConfig:()=>gW,createOpenTelemetryTelemetryService:()=>zJ,createOAuthClientCallbacks:()=>M8,createMcpTools:()=>E8,createLocalHubScheduleRuntimeHandlers:()=>T9,createLlmsSdk:()=>wj,createInitialAccumulatedUsage:()=>D0,createInMemoryHubOwnerContext:()=>bB,createHubServerUrl:()=>j1,createHubAuthToken:()=>iQ,createHookConfigFileHooks:()=>D6,createHookConfigFileExtension:()=>U8,createHookAuditHooks:()=>D8,createDisabledMcpToolPolicy:()=>d6,createDisabledMcpToolPolicies:()=>gQ,createDelegatedAgentConfigProvider:()=>H$,createDelegatedAgent:()=>B$,createDefaultToolsWithPreset:()=>L5,createDefaultTools:()=>f$,createDefaultMcpServerClientFactory:()=>C8,createDefaultExecutors:()=>s2,createCoreSettingsService:()=>K2,createCoreSessionSnapshot:()=>F1,createContributionRegistry:()=>Ab,createContextCompactionPrepareTurn:()=>N4,createConfiguredTelemetryService:()=>s1,createConfiguredTelemetryHandle:()=>$4,createConfiguredAgentTools:()=>c8,createClineTelemetryServiceMetadata:()=>Bb,createClineTelemetryServiceConfig:()=>Hb,createBuiltinTools:()=>n$,createAgentTeamsTools:()=>r$,createAgentRuntime:()=>qb,createAgentHooksExtension:()=>G8,connectToHub:()=>F9,completeClineDeviceAuth:()=>BZ,clearPrivateModelsCatalogCache:()=>kW,clearLiveModelsCatalogCache:()=>hW,clearHubDiscovery:()=>y0,captureWorkspacePathResolved:()=>nj,captureWorkspaceInitialized:()=>xJ,captureWorkspaceInitError:()=>gJ,captureToolUsage:()=>dJ,captureTokenUsage:()=>cJ,captureTaskRestarted:()=>vJ,captureTaskCreated:()=>mJ,captureTaskCompleted:()=>H4,captureSubagentExecution:()=>A4,captureSkillUsed:()=>lJ,captureSdkError:()=>Vb,captureProviderConfigured:()=>aj,captureProviderApiError:()=>B4,captureModeSwitch:()=>uJ,captureMentionUsed:()=>rJ,captureMentionSearchResults:()=>nJ,captureMentionFailed:()=>iJ,captureHookDiscovery:()=>sJ,captureExtensionActivated:()=>ij,captureDiffEditFailure:()=>pJ,captureConversationTurnEvent:()=>g2,captureCompactionSkipped:()=>tJ,captureCompactionExecuted:()=>oJ,captureAuthSucceeded:()=>N1,captureAuthStarted:()=>P1,captureAuthLoggedOut:()=>e1,captureAuthFailed:()=>w1,captureAgentTeamCreated:()=>aJ,captureAgentCreated:()=>$$,buildWorkspaceMetadata:()=>T6,buildTeamProgressSummary:()=>u8,buildSdkErrorProperties:()=>fb,buildRemoteConfigSessionBlobUploadMetadata:()=>q9,buildDelegatedAgentConfig:()=>l$,buildConfiguredAgentToolName:()=>BJ,buildConfiguredAgentToolDescriptors:()=>AJ,bootstrapAgentTeams:()=>Z8,authorizeMcpServerOAuth:()=>hQ,addLocalProvider:()=>Xj,accumulateUsageTotals:()=>B0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>S6,UnifiedConfigFileWatcher:()=>X2,ToolPresets:()=>c0,TelemetryService:()=>t8,TelemetryLoggerSink:()=>LJ,TEAM_TOOL_NAMES:()=>Q8,SubprocessSandbox:()=>H8,StoredProviderSettingsSchema:()=>_8,StoredProviderSettingsEntrySchema:()=>DQ,SqliteTeamStore:()=>y2,SqliteSessionStore:()=>U1,SessionVersioningService:()=>y$,SessionVersioningError:()=>k0,SessionSource:()=>U0,SessionNotFoundError:()=>u1,SapSettingsSchema:()=>BQ,SKILLS_CONFIG_DIRECTORY_NAME:()=>w6,SESSION_STATUSES:()=>Z6,SESSION_NOT_FOUND_ERROR_CODE:()=>G2,SDK_ERROR_TELEMETRY_EVENT:()=>Tb,RpcClineAccountService:()=>P6,RemoteRuntimeHost:()=>g8,ReasoningSettingsSchema:()=>fQ,RULES_CONFIG_DIRECTORY_NAME:()=>wQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>P9,ProviderSettingsSchema:()=>R$,ProviderSettingsManager:()=>_1,ProviderProtocolSchema:()=>WQ,ProviderIdSchema:()=>_6,ProviderClientSchema:()=>jQ,OpenTelemetryProvider:()=>e8,OcaSettingsSchema:()=>AQ,OPENAI_COMPATIBLE_PROVIDERS:()=>R6,NodeHubClient:()=>X1,NoOpFeatureFlagsProvider:()=>q2,NativeHubTransportAdapter:()=>PJ,ModelCatalogSettingsSchema:()=>KQ,LocalRuntimeHost:()=>z1,Llms:()=>$b,InMemoryWorkspaceManager:()=>T8,InMemoryMcpManager:()=>A2,HubUIClient:()=>D3,HubTransportError:()=>q0,HubSessionClient:()=>F3,HubServerTransport:()=>Q4,HubScheduleService:()=>o8,HubScheduleCommandService:()=>s8,HubRuntimeHost:()=>r1,HubCommandError:()=>I8,HookEventPayloadSchema:()=>H9,HookEventNameSchema:()=>V9,HookConfigFileName:()=>F8,HOOK_CONFIG_FILE_EVENT_MAP:()=>G6,HOOKS_CONFIG_DIRECTORY_NAME:()=>p5,GlobalSettingsSchema:()=>p4,GcpSettingsSchema:()=>VQ,FileTeamPersistenceStore:()=>i9,FeatureFlagsService:()=>M2,FeatureFlagDefaultValue:()=>Db,FEATURE_FLAGS:()=>Fb,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>e9,DefaultToolNames:()=>F0,DefaultRuntimeBuilder:()=>j4,DefaultLlmsSdk:()=>yJ,DEFAULT_MODELS_CATALOG_URL:()=>e5,DEFAULT_HUB_PORT:()=>y7,DEFAULT_HUB_PATHNAME:()=>E7,DEFAULT_HUB_HOST:()=>C7,CoreSettingsService:()=>O$,CoreSessionService:()=>L1,ContributionRegistry:()=>Yb,ClineNotSubscribedError:()=>Jb,ClineCore:()=>UJ,ClineAccountService:()=>q6,ChatViewStateSchema:()=>Oj,ChatSummarySchema:()=>t9,ChatSessionStatusSchema:()=>a9,ChatSessionConfigSchema:()=>n9,ChatMessageSchema:()=>o9,ChatMessageRoleSchema:()=>s9,CORE_TELEMETRY_EVENTS:()=>x,CORE_BUILD_VERSION:()=>Tj,BrowserWebSocketHubAdapter:()=>qJ,BUILT_IN_PROVIDER_IDS:()=>IW,BUILT_IN_PROVIDER:()=>z6,AzureSettingsSchema:()=>HQ,AwsSettingsSchema:()=>YQ,AuthSettingsSchema:()=>XQ,AgentTeamsRuntime:()=>T2,AgentTeam:()=>p8,Agent:()=>Mb,ALL_DEFAULT_TOOL_NAMES:()=>W$});q(M,Qa);import*as $b from"@cline/llms";import{ClineNotSubscribedError as Jb,getClineNotSubscribedMessage as Qb,getClinePassSubscriptionUrl as Zb,isClineNotSubscribedError as Wb,isClineNotSubscribedMessage as jb}from"@cline/llms";import{buildClineSystemPrompt as Xb,buildSdkErrorProperties as fb,ContributionRegistry as Yb,captureSdkError as Vb,createClineTelemetryServiceConfig as Hb,createClineTelemetryServiceMetadata as Bb,createContributionRegistry as Ab,createTool as Kb,emptyWorkspaceManifest as Gb,FEATURE_FLAGS as Fb,FeatureFlagDefaultValue as Db,formatDisplayUserInput as Ub,noopBasicLogger as Rb,normalizeSdkError as Lb,normalizeUserInput as zb,parseUserCommandEnvelope as _b,registerDisposable as Ob,SDK_ERROR_TELEMETRY_EVENT as Tb}from"@cline/shared";import"@cline/shared/storage";var tV={};w(tV,{isClineAccountActionRequest:()=>zQ,executeClineAccountAction:()=>_Q,RpcClineAccountService:()=>P6,ClineAccountService:()=>q6});function HO($){if(typeof $!=="object"||$===null||!("error"in $))return;let J=$.error;return typeof J==="string"&&J.trim()?J:void 0}function oV($,J,Q){let Z=HO(Q);if(Z)return Z;let W=J.trim();if(W){let j=W.length>200?`${W.slice(0,200)}...`:W;return`Cline account request failed with status ${$}: ${j}`}return`Cline account request failed with status ${$}`}class q6{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let J=$.apiBaseUrl.trim();if(!J)throw Error("apiBaseUrl is required");this.apiBaseUrl=J,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 J=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(J)}/balance`)}async fetchUsageTransactions($){let J=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(J)}/usages`)).items??[]}async fetchPaymentTransactions($){let J=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(J)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchOrganization($){let J=$.trim();if(!J)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(J)}`)}async fetchOrganizationBalance($){let J=$.trim();if(!J)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(J)}/balance`)}async fetchOrganizationUsageTransactions($){let J=$.organizationId.trim();if(!J)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(J,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(J)}/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 J=$?.trim();if(J)return J;let Z=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(Z)return Z;let W=await this.fetchMe();if(!W.id?.trim())throw Error("Unable to resolve current user id");return W.id}async resolveOrganizationMemberId($,J){let Q=J?.trim();if(Q)return Q;let W=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(W)return W;let X=(await this.fetchUserOrganizations()).find((f)=>f.organizationId===$)?.memberId;if(!X?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return X}async request($,J){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let Z=this.getHeadersFn?await this.getHeadersFn():{},W=new AbortController,j=setTimeout(()=>W.abort(),this.requestTimeoutMs);try{let X=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:J?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...Z??{}},body:J?.body!==void 0?JSON.stringify(J.body):void 0,signal:W.signal});if(X.status===204||J?.expectNoContent){if(!X.ok)throw Error(`Cline account request failed with status ${X.status}`);return}let f=await X.text(),Y;if(f.trim())try{Y=JSON.parse(f)}catch{if(!X.ok)throw Error(oV(X.status,f,void 0));throw Error("Cline account response was not valid JSON")}if(!X.ok)throw Error(oV(X.status,f,Y));if(typeof Y==="object"&&Y!==null){let V=Y;if(typeof V.success==="boolean"){if(!V.success)throw Error(V.error||"Cline account request failed");if(V.data!==void 0)return V.data}}if(Y===void 0||Y===null)throw Error("Cline account response payload was empty");return Y}finally{clearTimeout(j)}}}function zQ($){return $.action==="clineAccount"}async function _Q($,J){switch($.operation){case"fetchMe":return J.fetchMe();case"fetchBalance":return J.fetchBalance($.userId);case"fetchUsageTransactions":return J.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return J.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return J.fetchUserOrganizations();case"fetchOrganizationBalance":return J.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return J.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await J.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return J.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class P6{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 J=$.trim();if(!J)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:J})}async fetchOrganizationUsageTransactions($){let J=$.organizationId.trim();if(!J)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:J,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var eV={};w(eV,{createOAuthClientCallbacks:()=>M8});function M8($){return{onAuth:({url:J,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(J)).catch((Z)=>{$.onOpenUrlError?.({url:J,error:Z})})}catch(Z){$.onOpenUrlError?.({url:J,error:Z})}$.onOutput?.(J)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var cA={};w(cA,{ClineCore:()=>UJ});function $H($){if($===!0)return{};if(!$)return;return $}function JH($){if($==="user")return"global";return $}class dW{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let J=this.getService().ingestEvent($);return{event:J.event,duplicate:J.duplicate,matchedSpecIds:J.matchedSpecs.map((Q)=>Q.specId),queuedRuns:J.queuedRuns,suppressions:J.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function QH($){let{host:J}=$;return{async startSession(Q){let Z=(Q.cwd?.trim()||Q.workspaceRoot).trim(),W=await J.startSession({source:Q.source?.trim()||U0.CLI,interactive:!1,config:{providerId:L8(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:Z,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:KO(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,Z){let W=await J.runTurn({sessionId:Q,prompt:Z.prompt,userImages:Z.attachments?.userImages,userFiles:Z.attachments?.userFiles?.map((j)=>j.content),delivery:Z.delivery});if(!W)throw Error("ClineCore automation runtime returned no result");return{result:AO(W)}},async abortSession(Q){return await J.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await J.stopSession(Q),{applied:!0}}}}function OQ($){let J=BO($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),Z=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),W=$.context?.logger??$.logger,j=$.context?.telemetry??$.telemetry;if(!J&&!Q&&!Z&&!W&&!j)return $.context;return{...$.context??{},...Q?{client:Q}:{},...Z?{user:Z}:{},...W?{logger:W}:{},...j?{telemetry:j}:{},...J?{automation:J}:{}}}function BO($,J){if(!$)return;return{ingestEvent:(Q)=>{J.ingestEvent(Q)}}}function AO($){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((J)=>({name:J.name,input:J.input,output:J.output,error:J.error,durationMs:J.durationMs}))}}function KO($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var rH={};w(rH,{createCoreSettingsService:()=>K2,CoreSettingsService:()=>O$});import{existsSync as vQ}from"node:fs";import{basename as dH,isAbsolute as vT,relative as cT}from"node:path";var UH={};w(UH,{resolveWorkflowsConfigSearchPaths:()=>k6,resolveSkillsConfigSearchPaths:()=>b6,resolveRulesConfigSearchPaths:()=>h6,parseWorkflowConfigFromMarkdown:()=>E6,parseSkillConfigFromMarkdown:()=>C6,parseRuleConfigFromMarkdown:()=>y6,createWorkflowsConfigDefinition:()=>g6,createUserInstructionConfigService:()=>_$,createSkillsConfigDefinition:()=>I6,createRulesConfigDefinition:()=>x6,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>S6,UnifiedConfigFileWatcher:()=>X2,SKILLS_CONFIG_DIRECTORY_NAME:()=>w6,RULES_CONFIG_DIRECTORY_NAME:()=>wQ});import{createHash as GO}from"node:crypto";import{watch as FO}from"node:fs";import{readdir as DO,readFile as UO}from"node:fs/promises";import{join as RO}from"node:path";function LO($){return GO("sha1").update($).digest("hex")}function jH($){return Boolean($&&typeof $==="object"&&"code"in $)}function ZH($){return jH($)&&$.code==="ENOENT"}function WH($){return jH($)&&($.code==="EACCES"||$.code==="EPERM")}class X2{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($,J){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=J?.debounceMs??75,this.emitParseErrors=J?.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 Z of Q.directories){let W=this.baseTypesByDirectory.get(Z);if(W)W.add(Q.type);else this.baseTypesByDirectory.set(Z,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 J=this.definitionsByType.get($);if(!J)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(J)})}getSnapshot($){let J=this.recordsByType.get($);return new Map([...J?.entries()??[]].map(([Q,Z])=>[Q,{...Z}]))}getAllSnapshots(){let $=new Map;for(let[J,Q]of this.recordsByType.entries())$.set(J,new Map([...Q.entries()].map(([Z,W])=>[Z,{...W}])));return $}emit($){for(let J of this.listeners)J($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[J,Q]of this.watchersByDirectory.entries()){if($.has(J))continue;Q.close(),this.watchersByDirectory.delete(J)}this.watchedTypesByDirectory=$;for(let J of $.keys()){if(this.watchersByDirectory.has(J))continue;try{let Q=FO(J,()=>{let Z=this.watchedTypesByDirectory.get(J);if(!Z)return;for(let W of Z)this.pendingTypes.add(W);this.scheduleFlush()});this.watchersByDirectory.set(J,Q),Q.on("error",(Z)=>{let W=this.watchedTypesByDirectory.get(J);if(!W)return;for(let j of W)this.emit({kind:"error",type:j,error:Z,filePath:J})})}catch(Q){if(!ZH(Q)&&!WH(Q)){let Z=$.get(J);if(!Z)continue;for(let W of Z)this.emit({kind:"error",type:W,error:Q,filePath:J})}}}}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 J of $){let Q=this.definitionsByType.get(J);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:J,discoveredDirectories:Q}=await this.loadDefinition($),Z=this.recordsByType.get($.type)??new Map;for(let[W,j]of Z.entries()){if(J.has(W))continue;this.emit({kind:"remove",type:$.type,id:W,filePath:j.filePath})}for(let[W,j]of J.entries()){let X=Z.get(W);if(X&&X.filePath===j.filePath&&X.fingerprint===j.fingerprint)continue;this.emit({kind:"upsert",record:{type:j.type,id:W,item:j.item,filePath:j.filePath}})}if(this.recordsByType.set($.type,J),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let J=new Map,Q=new Set;for(let Z of $.directories){Q.add(Z);let W=$.discoverFiles?await $.discoverFiles(Z):await this.readDirectoryFileCandidates(Z);for(let j of W){let{fileName:X,filePath:f}=j;if(Q.add(j.directoryPath),$.includeFile&&!$.includeFile(X,f))continue;try{let Y=await UO(f,"utf8"),V={type:$.type,directoryPath:j.directoryPath,fileName:X,filePath:f,content:Y},H=$.parseFile(V),B=$.resolveId(H,V).trim();if(!B)continue;J.set(B,{type:$.type,id:B,item:H,filePath:f,fingerprint:LO(Y)})}catch(Y){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:Y,filePath:f})}}}return{records:J,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[J,Q]of this.baseTypesByDirectory.entries())$.set(J,new Set(Q));for(let[J,Q]of this.discoveredDirectoriesByType.entries())for(let Z of Q){let W=$.get(Z);if(W)W.add(J);else $.set(Z,new Set([J]))}return $}async readDirectoryFileCandidates($){try{return(await DO($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:RO($,Q.name)})).sort((Q,Z)=>Q.fileName.localeCompare(Z.fileName))}catch(J){if(ZH(J)||WH(J))return[];throw J}}}import{readdir as pW,readFile as zO,stat as lW}from"node:fs/promises";import{basename as v1,dirname as _O,extname as MQ,join as C0,resolve as N6}from"node:path";import{AGENTS_RULES_FILE_NAME as XH,RULES_CONFIG_DIRECTORY_NAME as wQ,resolveGlobalAgentsRulesPath as OO,resolveRulesConfigSearchPaths as TO,resolveSkillsConfigSearchPaths as MO,resolveWorkflowsConfigSearchPaths as qO,SKILLS_CONFIG_DIRECTORY_NAME as w6,WORKFLOWS_CONFIG_DIRECTORY_NAME as S6}from"@cline/shared/storage";import PO from"yaml";var TQ="SKILL.md",NO="managed.json",wO=new Set([".md",".markdown",".txt"]);function rW($){return $.trim().toLowerCase()}function q8($){let J=$;return J?.code==="ENOENT"||J?.code==="EACCES"||J?.code==="EPERM"||J?.code==="ELOOP"}function qQ($){return wO.has(MQ($).toLowerCase())}function fH($){let J=[],Q=new Set;for(let Z of $){let W=N6(Z);if(Q.has(W))continue;Q.add(W),J.push(Z)}return J}function SO($){let J=[...$?.directories??b6($?.workspacePath)];if($?.pluginSkillDirectories)J.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)J.push(...RV({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return fH(J)}async function iW($){try{let J=await pW($,{withFileTypes:!0}),Q=[];for(let Z of J){if(!Z.isDirectory())continue;let W=C0($,Z.name),j=C0(W,NO);try{let X=await zO(j,"utf8"),f=JSON.parse(X);if(f&&typeof f==="object")Q.push(W)}catch(X){if(q8(X))continue;if(X?.name==="SyntaxError")continue;throw X}}return Q.sort((Z,W)=>Z.localeCompare(W))}catch(J){if(q8(J))return[];throw J}}function nW($){let J=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(J);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,Z,W]=Q;try{let j=PO.parse(Z);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:W,hadFrontmatter:!0}}catch(j){let X=j instanceof Error?j.message:String(j);return{data:{},body:$,hadFrontmatter:!0,parseError:X}}}function PQ($,J,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${J}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${J}' must be a string.`);let Z=$.trim();if(!Z&&Q)throw Error(`Frontmatter field '${J}' cannot be empty.`);return Z||void 0}function P8($,J){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${J}' must be a boolean.`);return $}function CO($,J){if(v1($.filePath).toLowerCase()!==XH.toLowerCase())return v1($.filePath,MQ($.filePath));if(J&&N6($.filePath)===N6(J,XH))return"Workspace AGENTS.md";if(N6($.filePath)===N6(OO()))return"Global AGENTS.md";return v1($.filePath,MQ($.filePath))}function C6($,J){let{data:Q,body:Z,parseError:W}=nW($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let j=Z.trim();if(!j)throw Error("Missing instructions body in skill file.");let f=PQ(Q.name,"name",!1)??J.trim();if(!f)throw Error("Missing skill name.");return{name:f,description:PQ(Q.description,"description",!1),disabled:P8(Q.disabled,"disabled")??(P8(Q.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Q}}function y6($,J){let{data:Q,body:Z,parseError:W}=nW($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let j=Z.trim();if(!j)throw Error("Missing instructions body in rule file.");let X=PQ(Q.name,"name",!1)??J.trim();if(!X)throw Error("Missing rule name.");return{name:X,disabled:P8(Q.disabled,"disabled")??(P8(Q.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Q}}function E6($,J){let{data:Q,body:Z,parseError:W}=nW($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let j=Z.trim();if(!j)throw Error("Missing instructions body in workflow file.");let X=PQ(Q.name,"name",!1)??J.trim();if(!X)throw Error("Missing workflow name.");return{name:X,disabled:P8(Q.disabled,"disabled")??(P8(Q.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Q}}function b6($){return MO($)}function h6($){return TO($)}function k6($){return qO($)}async function YH($){if(v1($)===".cline"){let J=await iW($);return(await Promise.all(J.map((Z)=>YH(C0(Z,w6))))).flat()}try{let J=await pW($,{withFileTypes:!0}),Q=[];for(let Z of J){if(Z.isFile()&&Z.name===TQ){Q.push({directoryPath:$,fileName:Z.name,filePath:C0($,Z.name)});continue}let W=C0($,Z.name);if(Z.isDirectory()||Z.isSymbolicLink()&&await lW(W).then((X)=>X.isDirectory()).catch((X)=>{if(q8(X))return!1;throw X}))Q.push({directoryPath:W,fileName:TQ,filePath:C0(W,TQ)})}return Q}catch(J){if(q8(J))return[];throw J}}async function NQ($){if(v1($)===".cline"){let J=await iW($);return(await Promise.all(J.map((Z)=>NQ(C0(Z,"rules.md"))))).flat()}try{if((await lW($)).isFile())return[{directoryPath:_O($),fileName:v1($),filePath:$}]}catch(J){if(!q8(J))throw J}try{let Q=(await pW($,{withFileTypes:!0})).filter((W)=>W.isFile()&&qQ(W.name)).map((W)=>({directoryPath:$,fileName:W.name,filePath:C0($,W.name)})),Z=C0($,"AGENTS.md");try{if((await lW(Z)).isFile()){if(!Q.some((X)=>X.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:Z})}}catch{}return Q}catch(J){if(q8(J))return[];throw J}}async function yO($){if(v1($)===".cline"){let J=await iW($);return(await Promise.all(J.map((Z)=>NQ(C0(Z,S6))))).flat()}return NQ($)}function I6($){let J=SO($),Q=$?.workspacePath?C0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?fH([...J,Q]):J,discoverFiles:YH,includeFile:(Z)=>Z===TQ,parseFile:(Z)=>C6(Z.content,v1(Z.directoryPath)),resolveId:(Z)=>rW(Z.name)}}function x6($){let J=$?.directories??h6($?.workspacePath),Q=$?.workspacePath?C0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...J,Q]:J,discoverFiles:NQ,includeFile:(Z,W)=>Z===".clinerules"||qQ(Z)||qQ(W),parseFile:(Z)=>y6(Z.content,CO(Z,$?.workspacePath)),resolveId:(Z)=>rW(Z.name)}}function g6($){let J=$?.directories??k6($?.workspacePath),Q=$?.workspacePath?C0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...J,Q]:J,discoverFiles:yO,includeFile:(Z)=>qQ(Z),parseFile:(Z)=>E6(Z.content,v1(Z.filePath,MQ(Z.filePath))),resolveId:(Z)=>rW(Z.name)}}function VH($){let J=[I6($?.skills),x6($?.rules),g6($?.workflows)];return new X2(J,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as HH}from"@cline/shared";function EO($,J){if($.description?.trim())return HH($.description,".");if(J==="workflow")return;return HH($.instructions,".")}function bO($){return $.disabled!==!0}function BH($,J){return[...$.getSnapshot(J).entries()].map(([Q,Z])=>({id:Q,record:Z})).filter(({record:Q})=>bO(Q.item)).map(({id:Q,record:Z})=>({id:Q,name:Z.item.name,instructions:Z.item.instructions,description:EO(Z.item,J),kind:J})).sort((Q,Z)=>Q.name.localeCompare(Z.name))}function m6($){let J=new Map;for(let Q of[...BH($,"workflow"),...BH($,"skill")])if(!J.has(Q.name))J.set(Q.name,Q);return[...J.values()].sort((Q,Z)=>Q.name.localeCompare(Z.name))}function AH($,J){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let Z=Q[1];if(!Z)return $;let W=Z.length+1,j=$.slice(W),X=m6(J).find((f)=>f.name===Z);return X?`${X.instructions}${j}`:$}var GH={};w(GH,{mergeRulesForSystemPrompt:()=>w8,loadRulesForSystemPromptFromWatcher:()=>aW,listEnabledRulesFromWatcher:()=>KH,isRuleEnabled:()=>SQ,formatRulesForSystemPrompt:()=>N8});function SQ($){return $.disabled!==!0}function N8($){if($.length===0)return"";return`
197
+ ${Q}`,platform:J.clinePlatform,metadata:J.workspaceMetadata})}function BY($,J){let Q=$.trim();if(J.providerId.toLowerCase()!=="cline")return Q;return VY({ide:J.clineIdeName||"Terminal",workspaceRoot:J.cwd?.trim()||"/",providerId:J.providerId,overridePrompt:Q,metadata:J.workspaceMetadata,platform:J.clinePlatform})}function H$($){let J={...$};return{getRuntimeConfig:()=>J,getConnectionConfig:()=>({providerId:J.providerId,modelId:J.modelId,apiKey:J.apiKey,baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking}),updateConnectionDefaults:(Q)=>{J={...J,...Q}}}}function l$($){let J=$.configProvider.getRuntimeConfig(),Q=$.kind==="teammate"?HY($.prompt,J):BY($.prompt,J);return{...$.configProvider.getConnectionConfig(),systemPrompt:Q,tools:$.tools,maxIterations:$.maxIterations??J.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:J.hooks,extensions:J.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:J.logger,role:$.role}}function B$($){let J=l$($),Q=new V$(J);if(J.onEvent)Q.subscribeEvents(J.onEvent);return Q}var jL=eZ.object({systemPrompt:eZ.string().describe("System prompt defining the sub-agent's behavior"),task:eZ.string().describe("Task for the sub-agent to complete")});function A$($){return ZL({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:WL(jL),execute:async(J,Q)=>{let Z=$.createSubAgentTools?await $.createSubAgentTools(J,Q):$.subAgentTools??[],W=B$({kind:"subagent",prompt:J.systemPrompt,configProvider:$.configProvider,tools:Z,maxIterations:$.defaultMaxIterations,parentAgentId:Q.agentId,abortSignal:Q.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),j=W.getAgentId(),X=W.getConversationId(),f=Q.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:j,conversationId:X,parentAgentId:f,input:J})}catch{}try{let Y=await W.run(J.task),V={text:Y.text,iterations:Y.iterations,finishReason:Y.finishReason,usage:{inputTokens:Y.usage.inputTokens,outputTokens:Y.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:j,conversationId:X,parentAgentId:f,input:J,result:V,agentResult:Y})}catch{}return V}catch(Y){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:j,conversationId:X,parentAgentId:f,input:J,error:Y instanceof Error?Y:Error(String(Y))})}catch{}throw Y}},timeoutMs:300000,retryable:!1})}import{createTool as H0,TEAM_AWAIT_TIMEOUT_MS as XL,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as fL,TEAM_RUN_TEXT_PREVIEW_LIMIT as YL,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as VL,TeamAttachOutcomeFragmentInputSchema as AY,TeamAwaitRunsInputSchema as KY,TeamBroadcastInputSchema as GY,TeamBroadcastToolResultSchema as HL,TeamCancelRunInputSchema as FY,TeamCancelRunToolResultSchema as BL,TeamCleanupInputSchema as DY,TeamCleanupToolResultSchema as AL,TeamCreateOutcomeInputSchema as UY,TeamCreateOutcomeToolResultSchema as KL,TeamFinalizeOutcomeInputSchema as RY,TeamFinalizeOutcomeToolResultSchema as GL,TeamListOutcomesInputSchema as LY,TeamListRunsInputSchema as zY,TeamMailboxMessageToolResultSchema as FL,TeamMissionLogInputSchema as _Y,TeamMissionLogToolResultSchema as DL,TeamOutcomeFragmentToolResultSchema as OY,TeamOutcomeToolResultSchema as UL,TeamReadMailboxInputSchema as TY,TeamReviewOutcomeFragmentInputSchema as MY,TeamRunTaskInputSchema as qY,TeamRunTaskToolResultSchema as $7,TeamRunToolSummarySchema as J7,TeamSendMessageInputSchema as PY,TeamSendMessageToolResultSchema as RL,TeamShutdownTeammateInputSchema as NY,TeamSimpleAgentStatusToolResultSchema as wY,TeamSpawnTeammateInputSchema as SY,TeamStatusInputSchema as CY,TeamStatusToolResultSchema as LL,TeamTaskInputSchema as yY,TeamTaskToolResultSchema as t4,validateWithZod as k,zodToJsonSchema as B0}from"@cline/shared";function EY($,J){let Q=$.replace(/\s+/g," ").trim();if(Q.length<=J)return Q;return`${Q.slice(0,Math.max(0,J-3)).trimEnd()}...`}function p$($,J){if($===void 0)throw Error(`Missing required field: ${J}`);return $}function zL($){let J=$.result;if(!J)return;return{textPreview:EY(J.text,YL),iterations:J.iterations,finishReason:J.finishReason,durationMs:J.durationMs,usage:{inputTokens:J.usage.inputTokens,outputTokens:J.usage.outputTokens,cacheReadTokens:J.usage.cacheReadTokens,cacheWriteTokens:J.usage.cacheWriteTokens,totalCost:J.usage.totalCost}}}function y5($){return $?.toISOString()}function Q7($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:EY($.message,fL),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:y5($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:y5($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:y5($.heartbeatAt),lastProgressAt:y5($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:zL($)}}function _L($){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 Q8=["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 bY($){let J=[];if($.createBaseTools)J.push(...$.createBaseTools());J.push(...r$({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:l$({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:J,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function Z8($){let J=$.leadAgentId??"lead",Q=$.restoredFromPersistence===!0,Z=r$({runtime:$.runtime,requesterId:J,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),W=[];for(let j of $.restoredTeammates??[]){if($.runtime.isTeammateActive(j.agentId))continue;bY({runtime:$.runtime,requesterId:J,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:j}),W.push(j.agentId)}return{tools:Z,restoredFromPersistence:Q,restoredTeammates:W}}function r$($){let J=$.allowSpawn??!0,Q=$.includeSpawnTool??!0,Z=$.includeManagementTools??!0,W=[];if(Q)W.push(H0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:B0(SY),execute:async(X)=>{let f=k(SY,X);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!J)throw Error("Spawning teammates is disabled in this context.");let Y={agentId:f.agentId,rolePrompt:f.rolePrompt};if(bY({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:Y}),!Z)$.onLeadToolsUnlocked?.(r$({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return k(wY,{agentId:f.agentId,status:"spawned"})}}));if(!Z)return W;W.push(H0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:B0(NY),execute:async(X)=>{let f=k(NY,X);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(f.agentId,f.reason),k(wY,{agentId:f.agentId,status:"stopped"})}})),W.push(H0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:B0(CY),execute:async(X)=>{return k(CY,X),k(LL,$.runtime.getSnapshot())}})),W.push(H0({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(yY),execute:async(X)=>{let f=k(yY,X);switch(f.action){case"create":{let Y=new Set(VL.create??[]),V=Object.entries(X).filter(([B,A])=>Y.has(B)&&A!=null).map(([B])=>B),H=$.runtime.createTask({title:p$(f.title,"title"),description:p$(f.description,"description"),dependsOn:f.dependsOn,assignee:f.assignee,createdBy:$.requesterId});return k(t4,{action:"create",taskId:H.id,status:H.status,...V.length>0?{ignoredFields:V,note:`Ignored fields for action=create: ${V.join(", ")}`}:{}})}case"list":return k(t4,{action:"list",tasks:$.runtime.listTaskItems({status:f.status,assignee:f.assignee})});case"claim":{let Y=$.runtime.claimTask(p$(f.taskId,"taskId"),$.requesterId);return k(t4,{action:"claim",taskId:Y.id,status:Y.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 Y=$.runtime.completeTask(p$(f.taskId,"taskId"),$.requesterId,p$(f.summary,"summary"));return k(t4,{action:"complete",taskId:Y.id,status:Y.status})}case"block":{let Y=$.runtime.blockTask(p$(f.taskId,"taskId"),$.requesterId,p$(f.reason,"reason"));return k(t4,{action:"block",taskId:Y.id,status:Y.status})}}}}));let j=new Map;return W.push(H0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:B0(qY),execute:async(X)=>{let f=k(qY,X);if(f.runMode==="async"){let H=$.runtime.startTeammateRun(f.agentId,f.task,{taskId:f.taskId||void 0,fromAgentId:$.requesterId,continueConversation:f.continueConversation||void 0});return k($7,{agentId:f.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${f.agentId} and queued as ${H.id}.`,runId:H.id})}let Y=j.get(f.agentId);if(Y){let H=await Y;return k($7,{...H,status:"joined",deduped:!0,message:`Task for ${f.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let V=$.runtime.routeToTeammate(f.agentId,f.task,{taskId:f.taskId||void 0,fromAgentId:$.requesterId,continueConversation:f.continueConversation||void 0}).then((H)=>k($7,{agentId:f.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${f.agentId} and completed in sync mode.`,text:H.text,iterations:H.iterations})).finally(()=>{j.delete(f.agentId)});return j.set(f.agentId,V),await V}})),W.push(H0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:B0(FY),execute:async(X)=>{let f=k(FY,X),Y=$.runtime.cancelRun(f.runId,f.reason);return k(BL,{runId:Y.id,status:Y.status})}})),W.push(H0({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(zY),execute:async(X)=>k(J7.array(),$.runtime.listRuns(k(zY,X)).map(Q7))})),W.push(H0({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(KY),timeoutMs:XL,execute:async(X)=>{let f=k(KY,X);if(f.runId){let H=await $.runtime.awaitRun(f.runId);return _L(H),k(J7,Q7(H))}let Y=await $.runtime.awaitAllRuns(),V=Y.filter((H)=>["failed","cancelled","interrupted"].includes(H.status));if(V.length>0){let H=V.map((B)=>`${B.id}:${B.status}${B.error?`(${B.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${H}`)}return k(J7.array(),Y.map(Q7))}})),W.push(H0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:B0(PY),execute:async(X)=>{let f=k(PY,X),Y=$.runtime.sendMessage($.requesterId,f.toAgentId,f.subject,f.body,f.taskId??void 0);return k(RL,{id:Y.id,toAgentId:Y.toAgentId})}})),W.push(H0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:B0(GY),execute:async(X)=>{let f=k(GY,X),Y=$.runtime.broadcast($.requesterId,f.subject,f.body,{taskId:f.taskId??void 0});return k(HL,{delivered:Y.length})}})),W.push(H0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:B0(TY),execute:async(X)=>{let f=k(TY,X);return k(FL.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:f.unreadOnly,markRead:!0}))}})),W.push(H0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:B0(_Y),execute:async(X)=>{let f=k(_Y,X),Y=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:f.taskId||void 0,kind:f.kind,summary:f.summary,evidence:f.evidence?.length?f.evidence:void 0,nextAction:f.nextAction||void 0});return k(DL,{id:Y.id})}})),W.push(H0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:B0(DY),execute:async(X)=>{if(k(DY,X),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),k(AL,{status:"cleaned"})}})),W.push(H0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:B0(UY),execute:async(X)=>{let f=k(UY,X),Y=$.runtime.createOutcome({title:f.title,requiredSections:f.requiredSections,createdBy:$.requesterId});return k(KL,{outcomeId:Y.id,status:Y.status,requiredSections:Y.requiredSections})}})),W.push(H0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:B0(AY),execute:async(X)=>{let f=k(AY,X),Y=$.runtime.attachOutcomeFragment({outcomeId:f.outcomeId,section:f.section,sourceAgentId:$.requesterId,sourceRunId:f.sourceRunId||void 0,content:f.content});return k(OY,{fragmentId:Y.id,status:Y.status})}})),W.push(H0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:B0(MY),execute:async(X)=>{let f=k(MY,X),Y=$.runtime.reviewOutcomeFragment({fragmentId:f.fragmentId,reviewedBy:$.requesterId,approved:f.approved});return k(OY,{fragmentId:Y.id,status:Y.status})}})),W.push(H0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:B0(RY),execute:async(X)=>{let f=k(RY,X),Y=$.runtime.finalizeOutcome(f.outcomeId);return k(GL,{outcomeId:Y.id,status:Y.status})}})),W.push(H0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:B0(LY),execute:async(X)=>{return k(LY,X),k(UL.array(),$.runtime.listOutcomes())}})),W}function E5($){return{...$,tasks:$.tasks.map((J)=>({...J,createdAt:new Date(J.createdAt),updatedAt:new Date(J.updatedAt)})),mailbox:$.mailbox.map((J)=>({...J,sentAt:new Date(J.sentAt),readAt:J.readAt?new Date(J.readAt):void 0})),missionLog:$.missionLog.map((J)=>({...J,ts:new Date(J.ts)})),runs:($.runs??[]).map((J)=>({...J,startedAt:new Date(J.startedAt),endedAt:J.endedAt?new Date(J.endedAt):void 0,nextAttemptAt:J.nextAttemptAt?new Date(J.nextAttemptAt):void 0,heartbeatAt:J.heartbeatAt?new Date(J.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),finalizedAt:J.finalizedAt?new Date(J.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),reviewedAt:J.reviewedAt?new Date(J.reviewedAt):void 0}))}}function hY($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var OL=[{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:A$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...Q8]}],TL={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function ML($){return $==="plan"||$==="yolo"?$:"act"}function IY($){let J=ML($.mode),Q=c0[h1({mode:J})],Z=t2($.providerId??"",$.modelId??"",J,o2);return{mode:J,flags:{...Q,...Z,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function kY($,J){if(J.disabledToolIds?.has($))return!1;let{flags:Q}=IY(J);if($==="spawn_agent")return Q.enableSpawnAgent===!0;if($==="teams")return Q.enableAgentTeams===!0;if($==="editor")return Q.enableEditor===!0||Q.enableApplyPatch===!0;let Z=TL[$];return Z?Q[Z]===!0:!1}function qL($,J){if($.id==="editor"){let{flags:Q}=IY(J),Z=Q.enableApplyPatch===!0&&Q.enableEditor!==!0;return{...$,defaultEnabled:kY($.id,J),headlessToolNames:[Z?"apply_patch":"editor"]}}return{...$,defaultEnabled:kY($.id,J)}}function i$($={}){return OL.map((J)=>qL(J,$))}function b5($={}){return i$($).filter((J)=>J.defaultEnabled).map((J)=>J.id)}function h5($){if(!$.enabled)return new Set;let J=i$($.availabilityContext),Q=new Set(J.map((Z)=>Z.id));if(!$.allowlist||$.allowlist.length===0)return new Set(J.filter((Z)=>Z.defaultEnabled).map((Z)=>Z.id));for(let Z of $.allowlist)if(!Q.has(Z))throw Error(`Unknown tool "${Z}". Available tools: ${J.map((W)=>W.id).join(", ")}`);return new Set($.allowlist)}function e4($,J={}){return i$(J).filter((Q)=>$.has(Q.id)).flatMap((Q)=>Q.headlessToolNames)}function k5($,J={}){return e4($,J)}function n$($={}){let{executorOptions:J={},executors:Q,...Z}=$,W={...s2(J),...Q??{}};return f$({...Z,executors:W})}import{mkdirSync as yL,writeFileSync as EL}from"node:fs";import{dirname as bL}from"node:path";import{normalizeUserInput as hL}from"@cline/shared";import{nanoid as kL}from"nanoid";var gY={};w(gY,{sanitizeSessionToken:()=>a$,parseTeamTaskSubSessionId:()=>j8,parseSubSessionId:()=>J6,makeTeamTaskSubSessionId:()=>$6,makeSubSessionId:()=>W8,deriveSubsessionStatus:()=>Q6});import{nanoid as wL}from"nanoid";function a$($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function W8($,J){let Q=a$($),Z=a$(J),W=`${Q}__${Z}`;return W.length>180?W.slice(0,180):W}function $6($,J){let Q=a$($),Z=a$(J);return`${Q}__teamtask__${Z}__${wL(6)}`}function j8($){let Q=$.indexOf("__teamtask__");if(Q<=0)return null;let Z=$.slice(0,Q),W=$.slice(Q+12),j=W.lastIndexOf("__");if(j<=0)return null;let X=W.slice(0,j),f=W.slice(j+2);if(!Z||!X||!f)return null;return{rootSessionId:Z,agentId:X,teamTaskId:f}}function J6($){if(j8($))return null;let J="__",Q=$.indexOf(J);if(Q<=0)return null;let Z=$.slice(0,Q),W=$.slice(Q+J.length);if(!Z||!W)return null;return{rootSessionId:Z,agentId:W}}function Q6($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let J=String($.reason??"").toLowerCase();if(J.includes("cancel")||J.includes("abort")||J.includes("interrupt"))return"cancelled";if(J.includes("fail")||J.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as s}from"zod";var cY={};w(cY,{isTerminalSessionStatus:()=>vY,isNonTerminalSessionStatus:()=>X0,SessionSource:()=>U0,SESSION_STATUSES:()=>Z6,NON_TERMINAL_SESSION_STATUSES:()=>mY});import{SESSION_STATUS_VALUES as SL}from"@cline/shared";var Z6=SL,mY=["idle","running","pending"];function vY($){return!mY.includes($)}function X0($){return!vY($)}var U0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var CL=s.enum(Z6),S0=s.object({version:s.literal(1),session_id:s.string().min(1),source:s.string().min(1),pid:s.number().int(),started_at:s.string().min(1),ended_at:s.string().min(1).optional(),exit_code:s.number().int().nullable().optional(),status:CL,interactive:s.boolean(),provider:s.string().min(1),model:s.string().min(1),cwd:s.string().min(1),workspace_root:s.string().min(1),team_name:s.string().min(1).optional(),enable_tools:s.boolean(),enable_spawn:s.boolean(),enable_teams:s.boolean(),prompt:s.string().optional(),metadata:s.record(s.string(),s.unknown()).optional(),messages_path:s.string().min(1).optional()});function uY($){if(!$)return!1;return Object.values($).some((J)=>typeof J==="function")}function W7($,J){let Q=[...$??[],...J??[]];if(Q.length===0)return;let Z=[],W=new Set;for(let j of Q){if(W.has(j.name))continue;W.add(j.name),Z.push(j)}return Z}function dY($){return JSON.stringify($,(J,Q)=>{if(Q instanceof Error)return{name:Q.name,message:Q.message,stack:Q.stack};return Q})}function x1($){return typeof $==="string"&&$.trim()?$.trim():void 0}function Z7($,J){let Q={...$};Q.id=x1(Q.id)??kL();let Z=Q.modelInfo&&typeof Q.modelInfo==="object"?{...Q.modelInfo}:void 0,W={id:x1(Z?.id)??x1(Q.modelId)??x1(J?.id),provider:x1(Z?.provider)??x1(Q.providerId)??x1(J?.provider),family:x1(Z?.family)??x1(J?.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 I5($){return $.map((J)=>Z7(J))}function x5($,J,Q=[]){let Z=$.map((Y,V)=>{let H=Q[V],A=H?.role===Y.role&&JSON.stringify(H.content)===JSON.stringify(Y.content)?{...H,...Y}:{...Y};return Z7(A)}),W=Q.length,j=[];for(let Y=W;Y<Z.length;Y+=1)if(Z[Y]?.role==="assistant")j.push(Y);if(j.length===0){let Y=[...Z].reverse().findIndex((V)=>V.role==="assistant");if(Y===-1)return Z;j.push(Z.length-1-Y)}let X=j[j.length-1],f=j.some((Y)=>Z[Y]?.metrics);for(let Y of j){let V=Z[Y],H=V.metrics;if(!H&&Y===X&&!f){let B=J.usage;H={inputTokens:B.inputTokens,outputTokens:B.outputTokens,cacheReadTokens:B.cacheReadTokens??0,cacheWriteTokens:B.cacheWriteTokens??0,cost:B.totalCost}}Z[Y]={...Z7(V,{id:J.model.id,provider:J.model.provider,family:J.model.info?.family}),...H?{metrics:H}:{},ts:V.ts??J.endedAt.getTime()}}return Z}function W6($){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 IL=120;function s$($){let J=$?.trim();return J?J.slice(0,IL):void 0}function j7($){let J=hL($??"").trim();if(!J)return;return s$(J.split(`
198
+ `)[0]?.trim())}function K$($){if(!$)return;let J={...$},Q=s$(typeof J.title==="string"?J.title:void 0);if(Q)J.title=Q;else delete J.title;return Object.keys(J).length>0?J:void 0}function j6($){let J=K$($.metadata)??{},Q=$.title!==void 0?s$($.title):j7($.prompt);if(Q)J.title=Q;return Object.keys(J).length>0?J:void 0}function X7($){let J=j8($);if(J)return{agent:"teammate",sessionId:J.rootSessionId,taskType:"team"};let Q=J6($);if(Q)return{agent:"subagent",sessionId:Q.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function f7($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:I5($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function lY($,J,Q){yL(bL($),{recursive:!0}),EL($,`${JSON.stringify(f7({updatedAt:J,context:Q,messages:[]}),null,2)}
199
+ `,"utf8")}function pY($,J){return S0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:J?.endedAt??$.endedAt??void 0,exit_code:J?.exitCode??$.exitCode??void 0,status:J?.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:J?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function rY($,J,Q){let Z=0;while(!0){let W=await $();if(W===void 0)return{updated:!1};let j=await J(W);if(typeof j==="object"&&j!==null&&"updated"in j&&j.updated===!1){if(Z+=1,Z>=Q)return j;continue}return j}}O0();var iY={};w(iY,{summarizeUsageFromMessages:()=>f8,sumUsageTotals:()=>X6,getCurrentContextSize:()=>Y7,createInitialAccumulatedUsage:()=>D0,accumulateUsageTotals:()=>A0});function D0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function A0($,J){return{inputTokens:$.inputTokens+Math.max(0,J.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,J.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,J.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,J.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,J.totalCost??0)}}function X6($){let J=D0();for(let Q of $)J=A0(J,Q);return J}function X8($){return typeof $==="number"&&Number.isFinite($)?$:0}function f8($){let J=D0();for(let Q of $){let Z=Q.metrics;if(!Z)continue;J=A0(J,{inputTokens:X8(Z.inputTokens),outputTokens:X8(Z.outputTokens),cacheReadTokens:X8(Z.cacheReadTokens),cacheWriteTokens:X8(Z.cacheWriteTokens),totalCost:X8(Z.cost)})}return J}function Y7($){for(let J=$.length-1;J>=0;J-=1){let Q=$[J];if(Q?.role!=="assistant")continue;let Z=X8(Q.metrics?.inputTokens);return Z>0?Z:void 0}return}function xL($){if(!$||typeof $!=="object")return;let J=$,Q=J.skill??J.skill_name??J.skillName;if(typeof Q!=="string")return;let Z=Q.trim();return Z.length>0?Z:void 0}function V7($){if(!$||typeof $!=="object")return{};let J=$;return{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}}function g1($){let J=$.agentId?.trim();if(!J)return;let Q=$.parentAgentId?.trim()||void 0,Z=$.teamRole,W="root";if(Z==="teammate")W="team_teammate";else if(Z==="lead")W="team_lead";else if(Q)W="subagent";return{agentId:J,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:Z,teamAgentId:$.teamAgentId?.trim()||void 0}}function gL($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function mL($){let J=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of J){let Z=Q?.trim();if(Z)return Z}return $.isPrimaryAgentEvent?"root":"unknown"}function H7($,J,Q){let{sessionId:Z,config:W,liveSession:j,emit:X}=$,f=W.telemetry,Y=j?.runtime.teamRuntime,V=Q?.isPrimaryAgentEvent??!0,H=V7(J),B=g1({agentId:Q?.agentId??H.agentId,conversationId:Q?.conversationId??H.conversationId,parentAgentId:Q?.parentAgentId??H.parentAgentId,createdByAgentId:Q?.createdByAgentId,teamId:Q?.teamId??Y?.getTeamId(),teamName:Q?.teamName??Y?.getTeamName(),teamRole:Q?.teamRole,teamAgentId:Q?.teamAgentId});if(J.type==="content_start"&&J.contentType==="tool"&&J.toolName==="skills"){let A=xL(J.input);if(A)lJ(f,{ulid:Z,skillName:A,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:W.providerId,modelId:W.modelId,...B})}if(J.type==="content_end"&&J.contentType==="tool"){let A=J.toolName??"unknown",K=!J.error;if(dJ(f,{ulid:Z,tool:A,autoApproved:void 0,success:K,modelId:W.modelId,provider:W.providerId,...B}),!K&&(A==="editor"||A==="apply_patch"))pJ(f,{ulid:Z,modelId:W.modelId,provider:W.providerId,errorType:J.error,...B})}if(J.type==="notice"&&J.reason==="api_error")B4(f,{ulid:Z,model:W.modelId,provider:W.providerId,errorMessage:J.message,...B});if(J.type==="error")B4(f,{ulid:Z,model:W.modelId,provider:W.providerId,errorMessage:J.error?.message??"unknown error",...B});if(J.type==="usage"&&j?.turnUsageBaseline){let A=gL(J);if(V){j.turnPrimaryUsage=A0(j.turnPrimaryUsage??D0(),A);let G=A0(j.turnUsageBaseline,j.turnPrimaryUsage);$.usageBySession.set(Z,G),g2(f,{ulid:Z,provider:W.providerId,model:W.modelId,source:"assistant",mode:W.mode,...B}),cJ(f,{ulid:Z,tokensIn:J.inputTokens,tokensOut:J.outputTokens,cacheWriteTokens:J.cacheWriteTokens,cacheReadTokens:J.cacheReadTokens,totalCost:J.cost,model:W.modelId,...B})}else{let G=mL({isPrimaryAgentEvent:V,overrides:Q,eventMetadata:H}),R=j.turnUsageByAgent??new Map;j.turnUsageByAgent=R,R.set(G,A0(R.get(G)??D0(),A))}let K=A0(j.turnPrimaryUsage??D0(),X6(j.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(Z,A0(j.turnAggregateUsageBaseline??j.turnUsageBaseline,K))}if(J.type==="iteration_end"&&V)$.persistMessages(Z,j?.agent.getMessages()??[],j?.config.systemPrompt);X({type:"agent_event",payload:{sessionId:Z,event:J,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(V?"lead":void 0):void 0}}),X({type:"chunk",payload:{sessionId:Z,stream:"agent",chunk:dY(J),ts:Date.now()}})}function G$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as n_}from"@cline/shared";W1();import{existsSync as d5,readFileSync as Pz,statSync as Nz}from"node:fs";import{basename as wz,dirname as c5,join as l5,resolve as u5}from"node:path";import{discoverPluginModulePaths as Sz,resolveConfiguredPluginModulePaths as GV,resolvePluginConfigSearchPaths as Cz,SKILLS_CONFIG_DIRECTORY_NAME as yz}from"@cline/shared/storage";import{resolve as jz}from"node:path";import{normalizePluginManifest as Xz}from"@cline/shared";import{existsSync as R0,readFileSync as V8}from"node:fs";import{builtinModules as vL,createRequire as G7}from"node:module";import{dirname as F$,extname as Y6,isAbsolute as cL,resolve as p}from"node:path";import{fileURLToPath as aY}from"node:url";import{PLUGIN_FILE_EXTENSIONS as uL}from"@cline/shared";var sY=F$(aY(import.meta.url)),dL=G7(import.meta.url),lL=p(sY,"..","..","..","..",".."),B7=iL(lL),pL=["@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"],F7=new Set(vL.flatMap(($)=>[$,$.replace(/^node:/,"")])),f6=new Set(uL),rL=["development","node","import","require","default"];function iL($){let J={},Q={"@cline/sdk":p($,"packages/sdk/src/index.ts"),"@cline/agents":p($,"packages/agents/src/index.ts"),"@cline/core":p($,"packages/core/src/index.ts"),"@cline/llms":p($,"packages/llms/src/index.ts"),"@cline/shared":p($,"packages/shared/src/index.ts"),"@cline/shared/storage":p($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":p($,"packages/shared/src/db/index.ts")};for(let[Z,W]of Object.entries(Q))if(R0(W))J[Z]=W;for(let Z of["agents","core","llms","shared"]){let W=p($,"packages",Z),j=p(W,"package.json");if(!R0(j))continue;try{let X=JSON.parse(V8(j,"utf8"));if(typeof X.name!=="string"||!X.exports)continue;if(typeof X.exports==="string"){let f=p(W,X.exports);if(R0(f))J[X.name]=f;continue}if(typeof X.exports!=="object")continue;for(let[f,Y]of Object.entries(X.exports)){let V=nL(W,Y);if(!V)continue;let H=f==="."?X.name:`${X.name}/${f.replace(/^\.\//,"")}`;J[H]=V}}catch{}}return J}function nL($,J){let Q=D7(J);if(!Q)return null;let Z=oY($,Q);for(let W of Z)if(R0(W))return W;return null}function D7($,J=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(J.has($))return null;J.add($);let Q=$;for(let Z of rL){let W=D7(Q[Z],J);if(W)return W}return null}function oY($,J){let Q=J.replace(/^\.\//,""),Z=[p($,J)];if(Q.startsWith("dist/")){let W=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[p($,`${W}.ts`),p($,`${W}.tsx`),p($,`${W}.mts`),p($,`${W}.cts`),...Z]}return Z}function aL($){return Object.fromEntries(Object.entries($).sort(([J],[Q])=>Q.length-J.length))}function g5($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function Y8($){if($.startsWith("@")){let[J,Q]=$.split("/",3);return Q?`${J}/${Q}`:$}return $.split("/",1)[0]??$}function sL($){let J=Y8($);if($===J)return".";return`.${$.slice(J.length)}`}function tY($){return Y8($).startsWith("@cline/")}function A7($,J){let Q=Y8(J),Z=F$($);while(!0){let W=p(Z,"node_modules",Q);if(R0(W)||R0(p(W,"package.json")))return!0;let j=p(Z,"..");if(j===Z)return!1;Z=j}}function nY($){return K7($)!==null}function K7($){try{return dL.resolve($)}catch{}return oL($)}function oL($){let J=Y8($),Q=eY(J);if(!Q)return null;let Z=p(Q,"package.json");try{let W=JSON.parse(V8(Z,"utf8")),j=sL($),X=j==="."&&typeof W.exports==="string"?W.exports:W.exports&&typeof W.exports==="object"&&Object.hasOwn(W.exports,j)?W.exports[j]:void 0,f=D7(X)??(j==="."&&typeof W.main==="string"?W.main:null);if(!f)return null;let Y=p(Q,f),V=[Y,...oY(Q,f).filter((H)=>H!==Y)];for(let H of V)if(R0(H))return H;return null}catch{return null}}function tL(){let $=[sY],J=process.env.CLINE_WRAPPER_PATH?.trim();if(J)$.push(F$(F$(J)));let Q=process.execPath?.trim();if(Q)$.push(F$(Q));return[...new Set($.map((Z)=>p(Z)))]}function eL($,J){let Q=$;while(!0){let Z=p(Q,"package.json");if(R0(Z))try{if(JSON.parse(V8(Z,"utf8")).name===J)return Q}catch{}let W=p(Q,"node_modules",J,"package.json");if(R0(W))return F$(W);let j=p(Q,"..");if(j===Q)return null;Q=j}}function eY($){for(let J of tL()){let Q=eL(J,$);if(Q)return Q}return null}function $z($){let Q=F$($);for(let Z=0;Z<4;Z++){let W=p(Q,"package.json");if(R0(W))try{let X=JSON.parse(V8(W,"utf8"));return X!=null&&typeof X==="object"&&"cline"in X}catch{return!1}let j=p(Q,"..");if(j===Q)return!1;Q=j}return!1}function $V($,J){let Q=J.startsWith("file:")?aY(J):cL(J)?J:p(F$($),J);if(R0(Q)&&f6.has(Y6(Q)))return Q;for(let Z of f6){let W=`${Q}${Z}`;if(R0(W))return W}for(let Z of f6){let W=p(Q,`index${Z}`);if(R0(W))return W}return null}function JV($){let J=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 Z of Q)for(let W of $.matchAll(Z)){let j=W[1];if(j)J.add(j)}return[...J]}function Jz($){return Y6($)!==".ts"}function QV($,J,Q=new Set){if(Q.has($)||!R0($))return;if(Q.add($),!f6.has(Y6($)))return;let Z=V8($,"utf8"),W=Jz($);for(let j of JV(Z)){if(j.startsWith("node:")||F7.has(j))continue;if(g5(j)){if(!W)continue;if(Object.hasOwn(B7,j)||Object.hasOwn(B7,Y8(j))||A7($,j)||tY(j)&&nY(j)||J&&nY(j))continue;throw Error(`Cannot find module '${Y8(j)}'`)}let X=$V($,j);if(X)QV(X,J,Q)}}function ZV($,J=new Set,Q=new Set){if(J.has($)||!R0($))return Q;if(J.add($),!f6.has(Y6($)))return Q;let Z=V8($,"utf8");for(let W of JV(Z)){if(Q.add(W),g5(W))continue;let j=$V($,W);if(j)ZV(j,J,Q)}return Q}function Qz($,J){let Q=G7($),Z={},W=ZV($),j=new Set(pL);for(let[X,f]of Object.entries(B7)){try{Q.resolve(X);continue}catch{}Z[X]=f}for(let X of W)if(g5(X)&&(tY(X)||J))j.add(X);for(let X of j){if(Object.hasOwn(Z,X)||A7($,X))continue;let f=K7(X);if(f)Z[X]=f}if(!J)return Z;for(let X of W){if(!g5(X)||Object.hasOwn(Z,X)||A7($,X)||X.startsWith("node:")||F7.has(X))continue;let f=K7(X);if(f)Z[X]=f}return Z}function Zz($){let J=Y6($);return J===".ts"||J===".tsx"||J===".mts"||J===".cts"}var o$;function Wz(){if(o$!==void 0)return o$;let $=eY("jiti");if(!$)return o$=null,null;let J=p($,"dist","babel.cjs");if(!R0(J))return o$=null,null;try{let Z=G7(J)(J);o$=typeof Z==="function"?Z:null}catch{o$=null}return o$}async function WV($,J={}){let Q=!$z($);QV($,Q);let Z=Qz($,Q),W=aL(Z),j=await import("jiti"),X=typeof j==="function"?j:typeof j.default==="function"?j.default:void 0;if(!X)throw Error("Unable to load jiti");let f=Object.entries(W).filter(([,B])=>Zz(B)).map(([B])=>B),Y=Wz(),V=Y?(B)=>Y({...B,interopDefault:!0}):void 0;return await X($,{alias:W,cache:J.useCache,requireCache:J.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...F7],transformModules:f,tryNative:!1,...V?{transform:V}:{}}).import($,{})}function jV($,J){if(!$)return!0;if($.providerIds?.length){if(!J?.providerId||!$.providerIds.includes(J.providerId))return!1}if($.modelIds?.length){if(!J?.modelId||!$.modelIds.includes(J.modelId))return!1}return!0}function XV($){return typeof $==="object"&&$!==null}function U7($){return Array.isArray($)&&$.every((J)=>typeof J==="string")}function fz($,J){if(!XV($.manifest))throw Error(`Invalid plugin module at ${J}: missing required "manifest"`);if(!U7($.manifest.capabilities))throw Error(`Invalid plugin module at ${J}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${J}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!U7($.manifest.providerIds))throw Error(`Invalid plugin module at ${J}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!U7($.manifest.modelIds))throw Error(`Invalid plugin module at ${J}: manifest.modelIds must be a string array when provided`)}function Yz($,J){if(!XV($))throw Error(`Invalid plugin module at ${J}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${J}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${J}: missing required "manifest"`);fz($,J)}async function V6($,J={}){let Q=jz(J.cwd??process.cwd(),$),Z=await WV(Q,{useCache:J.useCache}),W=J.exportName??"plugin",j=Z.default??Z[W];Yz(j,Q);let X=j,f=X.setup,Y=f?(V,H)=>{let B={...J.session,...H.session},A={...H,session:Object.keys(B).length>0?B:void 0,client:J.client??H.client,user:J.user??H.user,workspaceInfo:J.workspaceInfo??H.workspaceInfo,automation:J.automation??H.automation,logger:J.logger??H.logger,telemetry:J.telemetry??H.telemetry};return f(V,A)}:void 0;return{...X,manifest:Xz(X.manifest),setup:Y}}async function m5($,J={}){return(await t$($,J)).plugins}async function t$($,J={}){let Q=[],Z=[],W=new Map,j=0;for(let f of $)try{let Y=await V6(f,J);if(!jV(Y.manifest,J))continue;let V=W.get(Y.name);if(V)Z.push({type:"duplicate_plugin_override",pluginName:Y.name,pluginPath:f,overriddenPluginPath:V.pluginPath,message:`Plugin "${Y.name}" from ${f} overrides ${V.pluginPath}`});W.set(Y.name,{plugin:Y,pluginPath:f,order:j++})}catch(Y){let V=Y instanceof Error?Y.message:String(Y);Q.push({pluginPath:f,phase:"load",message:V,stack:Y instanceof Error?Y.stack:void 0})}let X=[...W.values()].sort((f,Y)=>f.order-Y.order);return{plugins:X.map((f)=>f.plugin),pluginPaths:X.map((f)=>f.pluginPath),failures:Q,warnings:Z}}import{existsSync as _7}from"node:fs";import{createRequire as KV}from"node:module";import{dirname as v5,join as B8}from"node:path";import{fileURLToPath as Kz}from"node:url";var BV={};w(BV,{resolveSubprocessRuntimeExecutable:()=>R7,buildSubprocessSandboxCommand:()=>HV,SubprocessSandbox:()=>H8,CLINE_JS_RUNTIME_PATH_ENV:()=>VV});import{spawn as Vz}from"node:child_process";import{basename as Hz}from"node:path";import{augmentNodeCommandForDebug as Bz,withResolvedClineBuildEnv as Az}from"@cline/shared";function fV($){if($ instanceof Error)return $;return Error(String($))}var VV="CLINE_JS_RUNTIME_PATH";function YV($){let J=$?.trim();if(!J)return!1;let Q=Hz(J).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function R7($={}){let J=$.env??process.env,Q=$.runtimeExecutable?.trim()||J[VV]?.trim();if(Q)return Q;let Z=$.execPath?.trim()||process.execPath;if(YV(Z))return Z;for(let W of[J.BUN_EXEC_PATH,J.npm_node_execpath,J.NODE]){let j=W?.trim();if(j&&YV(j))return j}return"node"}function HV($,J={}){let Q=R7({env:J.env,execPath:J.execPath,runtimeExecutable:J.runtimeExecutable});return Bz([Q,...$],{env:J.env,execArgv:J.execArgv,debugRole:J.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class H8{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let J=this.pending.get($);if(!J)return;if(this.pending.delete($),J.timeout)clearTimeout(J.timeout);return J}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],J=HV($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),Q=Vz(J[0]??R7(this.options),J.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:Az(process.env),windowsHide:!0});this.process=Q;let Z="",W=(j)=>{let X=Z+j;Z=X.length>4000?X.slice(-4000):X};Q.stderr?.setEncoding("utf8"),Q.stderr?.on("data",(j)=>{W(j)}),Q.on("message",(j)=>{this.onMessage(j)}),Q.on("error",(j)=>{this.failPending(Error(`${this.processLabel} process error: ${fV(j).message}`))}),Q.on("exit",(j,X)=>{this.process=null;let f=Z.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(j)}, signal=${String(X)})${f?`: ${f}`:""}`))})}async call($,J,Q={}){this.start();let Z=this.process;if(!Z||Z.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let W=`req_${++this.requestCounter}`,j={type:"call",id:W,method:$,args:J};return await new Promise((X,f)=>{let Y={resolve:(V)=>X(V),reject:f};if((Q.timeoutMs??0)>0)Y.timeout=setTimeout(()=>{this.clearPendingRequest(W),this.shutdown().catch(()=>{}),f(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(W,Y),Z.send(j,(V)=>{if(!V)return;let H=this.clearPendingRequest(W);if(!H)return;H.reject(Error(`${this.processLabel} failed to send call "${$}": ${fV(V).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((J)=>{let Q=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}J()},300);$.once("exit",()=>{clearTimeout(Q),J()});try{$.kill("SIGTERM")}catch{clearTimeout(Q),J()}}),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 J=this.clearPendingRequest($.id);if(!J)return;if($.ok){J.resolve($.result);return}J.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[J,Q]of this.pending.entries()){if(this.pending.delete(J),Q.timeout)clearTimeout(Q.timeout);Q.reject($)}}}function Gz($){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 H6($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function Fz(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function Dz(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=KV($).resolve(`${Fz()}/package.json`),Z=B8(v5(Q),"extensions","plugin-sandbox-bootstrap.js");return _7(Z)?Z:void 0}catch{return}}function Uz(){let $=process.execPath?.trim();if(!$)return;let J=B8(v5(v5($)),"extensions","plugin-sandbox-bootstrap.js");return _7(J)?J:void 0}function Rz(){let $=v5(Kz(import.meta.url)),J=KV(import.meta.url),Q=[B8($,"plugin-sandbox-bootstrap.js"),B8($,"extensions","plugin-sandbox-bootstrap.js"),B8($,"agents","plugin-sandbox-bootstrap.js"),Dz(),Uz()];for(let j of Q.filter((X)=>typeof X==="string"))if(_7(j))return{file:j};let Z=B8($,"plugin-sandbox-bootstrap.ts"),W="jiti";try{W=J.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(W)});`,`const jiti = createJiti(${JSON.stringify(Z)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(Z)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
200
+ `)}}var L7=Rz();function z7($,J,Q){if(typeof $==="number"&&$>0)return $;if(Q){let Z=process.env[Q];if(Z){let W=Number(Z);if(Number.isInteger(W)&&W>0)return W}}return J}async function A8($){let J=new H8({name:"plugin-sandbox",..."file"in L7?{bootstrapFile:L7.file}:{bootstrapScript:L7.script},onEvent:$.onEvent}),Q=z7($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),Z=z7($.hookTimeoutMs,3000),W=z7($.contributionTimeoutMs,60000),j={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},X,f=()=>{return X??=J.call("initialize",j,{timeoutMs:Q}).finally(()=>{X=void 0}),X},Y;try{Y=await J.call("initialize",j,{timeoutMs:Q})}catch(B){throw await J.shutdown().catch(()=>{}),B}let V=Y.plugins.map(Gz);return{extensions:V.map((B)=>{let A={name:B.name,__clinePluginPath:B.pluginPath,manifest:B.manifest,setup:(K)=>{Lz(K,J,B,W,f),zz(K,J,B,W,f),_z(K,J,B,W,f),Tz(K,J,B,W,f),Oz(K,B)}};return A.hooks=qz(J,B,Z,f),A}),failures:Y.failures,pluginPaths:V.map((B)=>B.pluginPath),shutdown:async()=>{await J.shutdown()},warnings:Y.warnings}}function Lz($,J,Q,Z,W){for(let j of Q.contributions?.tools??[]){let X={name:j.name,description:j.description??"",inputSchema:j.inputSchema??{type:"object",properties:{}},timeoutMs:j.timeoutMs,retryable:j.retryable,execute:async(f,Y)=>{try{return await J.call("executeTool",{pluginId:Q.pluginId,contributionId:j.id,input:f,context:Y},{timeoutMs:Z})}catch(V){if(!H6(V))throw V;return await W(),await J.call("executeTool",{pluginId:Q.pluginId,contributionId:j.id,input:f,context:Y},{timeoutMs:Z})}}};$.registerTool(X)}}function zz($,J,Q,Z,W){for(let j of Q.contributions?.commands??[])$.registerCommand({name:j.name,description:j.description,handler:async(X)=>{try{return await J.call("executeCommand",{pluginId:Q.pluginId,contributionId:j.id,input:X},{timeoutMs:Z})}catch(f){if(!H6(f))throw f;return await W(),await J.call("executeCommand",{pluginId:Q.pluginId,contributionId:j.id,input:X},{timeoutMs:Z})}}})}function _z($,J,Q,Z,W){for(let j of Q.contributions?.rules??[])$.registerRule({id:j.ruleId,source:j.source,content:j.hasContentHandler===!0?async()=>{try{return await J.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:j.id},{timeoutMs:Z})}catch(X){if(!H6(X))throw X;return await W(),await J.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:j.id},{timeoutMs:Z})}}:j.content??""})}function Oz($,J){for(let Q of J.contributions?.providers??[])$.registerProvider({name:Q.name,description:Q.description,metadata:Q.metadata});for(let Q of J.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 J.contributions?.mcpServers??[])$.registerMcpServer(Q)}function Tz($,J,Q,Z,W){for(let j of Q.contributions?.messageBuilders??[])$.registerMessageBuilder({name:j.name,async build(X){try{let f=await J.call("buildMessages",{pluginId:Q.pluginId,contributionId:j.id,messages:X},{timeoutMs:Z});return AV(f)?f:X}catch(f){if(!H6(f))throw f;await W();let Y=await J.call("buildMessages",{pluginId:Q.pluginId,contributionId:j.id,messages:X},{timeoutMs:Z});return AV(Y)?Y:X}}})}function AV($){return Array.isArray($)&&$.every((J)=>typeof J==="object"&&J!==null&&("role"in J)&&("content"in J))}function Mz($,J,Q,Z,W){return async(j)=>{try{return await $.call("invokeHook",{pluginId:J,hookName:Q,payload:j},{timeoutMs:Z})}catch(X){if(!H6(X))throw X;return await W(),await $.call("invokeHook",{pluginId:J,hookName:Q,payload:j},{timeoutMs:Z})}}}function qz($,J,Q,Z){let W={};for(let j of J.hooks??[])W[j]=Mz($,J.pluginId,j,Q,Z);return Object.keys(W).length>0?W:void 0}var T7="package.json",Ez="package";function B6($){return Cz($)}function A6($){return Sz($)}function bz($){try{return d5($)&&Nz($).isDirectory()}catch{return!1}}function M7($){let J=[],Q=new Set;for(let Z of $){let W=u5(Z);if(Q.has(W))continue;Q.add(W),J.push(W)}return J}function FV($){let J=M7($);return M5(J)}function DV($){return B6($).flatMap((J)=>A6(J)).filter((J)=>d5(J))}function hz($,J){let Q=[];for(let Z of $)try{Q.push(...GV([Z],J))}catch{}return Q}function O7($){return typeof $==="object"&&$!==null}function kz($){try{let J=JSON.parse(Pz(l5($,T7),"utf8"));if(!O7(J)||!O7(J.cline))return[];let Q=J.cline.plugins;if(!Array.isArray(Q))return[];let Z=[];for(let W of Q){if(typeof W==="string"){Z.push(W);continue}if(!O7(W)||!Array.isArray(W.paths))continue;for(let j of W.paths)if(typeof j==="string")Z.push(j)}return Z}catch{return[]}}function UV($,J){let Q=u5(J);return kz($).some((Z)=>u5($,Z)===Q)}function Iz($,J){return wz($)===Ez&&d5(l5(c5($),T7))&&UV(c5($),J)}function xz($){let J=u5($),Q=[],Z=c5(J);while(!0){if(Iz(Z,J)){Q.push(Z);break}if(d5(l5(Z,T7))){if(UV(Z,J))Q.push(Z);break}let W=c5(Z);if(W===Z)break;Z=W}return M7(Q)}function e$($={}){let J=$.cwd??process.cwd(),Q=DV($.workspacePath),Z=GV($.pluginPaths??[],J);return FV([...Z,...Q])}function gz($={}){let J=$.cwd??process.cwd(),Q=DV($.workspacePath),Z=hz($.pluginPaths??[],J);return FV([...Z,...Q])}function $2($){let J=[];for(let Q of $)for(let Z of xz(Q)){let W=l5(Z,yz);if(bz(W))J.push(W)}return M7(J)}function RV($={}){return $2(gz($))}async function K8($={}){let J=e$($);if(J.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let Z=await t$(J,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:Z.plugins,failures:Z.failures,pluginPaths:Z.pluginPaths,warnings:Z.warnings}}let Q=await A8({pluginPaths:J,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:Q.extensions??[],shutdown:Q.shutdown,failures:Q.failures,pluginPaths:Q.pluginPaths,warnings:Q.warnings}}import{execFile as mz}from"node:child_process";import{promisify as vz}from"node:util";var cz=vz(mz);function q7($,J){$?.log(J,{severity:"warn"})}function uz($){let J=$?.checkpoint;if(!J||typeof J!=="object"||Array.isArray(J))return;let Q=J;if(!Q.latest||!Array.isArray(Q.history))return;let Z=Q.latest,W=Q.history.filter((j)=>!!j&&typeof j==="object"&&typeof j.ref==="string"&&typeof j.createdAt==="number"&&typeof j.runCount==="number");if(typeof Z.ref!=="string"||typeof Z.createdAt!=="number"||typeof Z.runCount!=="number")return;return{latest:Z,history:W}}async function J2($,J){let Q=await cz("git",["-C",$,...J],{windowsHide:!0});return{stdout:Q.stdout.trim(),stderr:Q.stderr.trim()}}async function P7($,J){if(!$)return;let Q=`refs/cline/checkpoints/${J}/`;try{let{stdout:Z}=await J2($,["for-each-ref","--format=%(refname)",Q]),W=Z.trim().split(`
201
+ `).filter(Boolean);await Promise.allSettled(W.map((j)=>J2($,["update-ref","-d",j])))}catch{}}async function LV($,J,Q){if(!$||Q.length===0)return;await Promise.allSettled(Q.map((Z)=>J2($,["update-ref",`refs/cline/checkpoints/${J}/${Z.runCount}`,Z.ref])))}function dz($,J){let Q=$.findIndex((Z)=>Z.runCount===J.runCount);if(Q<0)return[...$,J];return $.map((Z,W)=>W===Q?J:Z)}function zV($){let J=$.initialRunCount??0,Q,Z=async()=>{if(Q!==void 0)return Q;try{Q=(await J2($.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:J});if(!await Z())return;let j=async(V)=>{try{let B=(await J2($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!B)return;return{ref:B,createdAt:Date.now(),runCount:J,kind:"commit"}}catch(H){q7($.logger,`${V}: ${H instanceof Error?H.message:String(H)}`);return}},X=`cline checkpoint session=${$.sessionId} run=${J}`,f="";try{f=(await J2($.cwd,["stash","create",X])).stdout.trim()}catch(V){return q7($.logger,`Checkpoint snapshot failed: ${V instanceof Error?V.message:String(V)}`),j("Checkpoint HEAD fallback failed")}if(!f)return j("Checkpoint HEAD fallback failed");let Y=`refs/cline/checkpoints/${$.sessionId}/${J}`;try{await J2($.cwd,["update-ref",Y,f])}catch(V){q7($.logger,`Checkpoint store failed: ${V instanceof Error?V.message:String(V)}`);return}return{ref:f,createdAt:Date.now(),runCount:J,kind:"stash"}};return{beforeRun:async({snapshot:j})=>{if(j.parentAgentId!=null)return;J+=1;return},beforeModel:async({snapshot:j})=>{if(j.parentAgentId!=null||j.iteration!==1||J<1)return;let X=await W();if(!X)return;let f=await $.readSessionMetadata(),Y=uz(f);if(Y?.latest.ref===X.ref)return;let V=dz(Y?.history??[],X);await $.writeSessionMetadata({...f??{},checkpoint:{latest:X,history:V}});return}}}import{spawn as tz}from"node:child_process";import{appendFileSync as ez,readFileSync as $_}from"node:fs";import{join as J_}from"node:path";import{augmentNodeCommandForDebug as TV,withResolvedClineBuildEnv as S7}from"@cline/shared";import{ensureHookLogDir as _V}from"@cline/shared/storage";function G8($,J){if(!J)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:J}}import{existsSync as lz,readdirSync as pz}from"node:fs";import{basename as rz,extname as iz,join as nz}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as p5,resolveHooksConfigSearchPaths as az}from"@cline/shared/storage";function K6($){return az($)}var F8;((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"})(F8||={});var G6={["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"},sz=new Map(Object.values(F8).map(($)=>[$.toLowerCase(),$])),oz=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function F6($){let J=iz($).toLowerCase();if(!oz.has(J))return;let Q=rz($,J).trim().toLowerCase();return sz.get(Q)}function D$($){let J=[],Q=new Set,Z=K6($).filter((W)=>lz(W));for(let W of Z)try{for(let j of pz(W,{withFileTypes:!0})){if(!j.isFile())continue;let X=F6(j.name);if(!X)continue;let f=nz(W,j.name);if(Q.has(f))continue;Q.add(f),J.push({fileName:X,hookEventName:G6[X],path:f})}}catch{}return J.sort((W,j)=>W.path.localeCompare(j.path))}function i5($){if(!$||typeof $!=="object")return{};let J={};for(let[Q,Z]of Object.entries($))J[Q]=typeof Z==="string"?Z:JSON.stringify(Z);return J}function r5($,J,Q){let Z=Q instanceof Error?`: ${Q.message}`:"",W=`${J}${Z}`;if($){try{$.log(W,{severity:"warn",...Q!==void 0?{error:Q}:{}})}catch{}return}console.warn(W)}function Q_($,J){if(!J)return $;if(!$)return{...J};let Q=[$.context,J.context].filter((W)=>typeof W==="string"&&W.length>0).join(`
202
+ `),Z=[...$.appendMessages??[],...J.appendMessages??[]];return{cancel:$.cancel===!0||J.cancel===!0?!0:void 0,review:$.review===!0||J.review===!0?!0:void 0,context:Q||void 0,overrideInput:J.overrideInput!==void 0?J.overrideInput:$.overrideInput,systemPrompt:J.systemPrompt!==void 0?J.systemPrompt:$.systemPrompt,appendMessages:Z.length>0?Z:void 0}}function Z_($){if(!$||typeof $!=="object")return;let J=$,Q=typeof J.context==="string"?J.context:typeof J.contextModification==="string"?J.contextModification:typeof J.errorMessage==="string"?J.errorMessage:void 0;return{cancel:typeof J.cancel==="boolean"?J.cancel:void 0,review:typeof J.review==="boolean"?J.review:void 0,context:Q,overrideInput:Object.hasOwn(J,"overrideInput")?J.overrideInput:void 0}}function N7($){let J=String($??"").toLowerCase();return J.includes("cancel")||J.includes("abort")||J.includes("interrupt")}function L0($,J){let Q=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",Z={rootSessionId:J.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:Z,workspaceRoots:J.workspacePath?[J.workspacePath]:[],workspaceInfo:J.workspaceInfo,userId:Q,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function W_($){let J=$.trim();if(!J)return{};let Z=J.split(`
203
+ `).map((j)=>j.trim()).filter(Boolean).filter((j)=>j.startsWith("HOOK_CONTROL\t")).map((j)=>j.slice(13)),W=Z.length>0?Z[Z.length-1]:J;try{return{parsedJson:JSON.parse(W)}}catch(j){return{parseError:j instanceof Error?j.message:"Failed to parse hook stdout JSON"}}}async function j_($,J){let Q=$.stdin;if(!Q)throw Error("hook command failed to create stdin");await new Promise((Z,W)=>{let j=!1,X=()=>{Q.off("error",Y),Q.off("finish",V),$.off("close",H)},f=(B)=>{if(j)return;if(j=!0,X(),B){let A=B.code;if(A==="EPIPE"||A==="ERR_STREAM_DESTROYED"){Z();return}W(B);return}Z()},Y=(B)=>f(B),V=()=>f(),H=()=>f();Q.on("error",Y),Q.once("finish",V),$.once("close",H);try{Q.end(J)}catch(B){f(B)}})}async function MV($,J){if(J.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await OV($,J)}catch(Q){let Z=Y_(J.command,process.platform,Q);if(!Z)throw Q;return await OV($,{...J,command:Z})}}async function OV($,J){let Q=TV(J.command,{env:J.env,debugRole:"hook"}),Z=tz(Q[0],Q.slice(1),{cwd:J.cwd,env:S7(J.env),stdio:J.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:J.detached,windowsHide:!0}),W=new Promise((A)=>{Z.once("spawn",()=>A())}),j=new Promise((A,K)=>{Z.once("error",(G)=>K(G))}),X=JSON.stringify($);if(await Promise.race([W,j]),await j_(Z,X),J.detached){Z.unref();return}if(!Z.stdout||!Z.stderr)throw Error("hook command failed to create stdout/stderr");let f="",Y="",V=!1,H;Z.stdout.on("data",(A)=>{f+=A.toString()}),Z.stderr.on("data",(A)=>{Y+=A.toString()});let B=new Promise((A)=>{if((J.timeoutMs??0)>0)H=setTimeout(()=>{V=!0,Z.kill("SIGKILL")},J.timeoutMs);Z.once("close",(K)=>{if(H)clearTimeout(H);let{parsedJson:G,parseError:R}=W_(f);A({exitCode:K,stdout:f,stderr:Y,parsedJson:G,parseError:R,timedOut:V})})});return await Promise.race([B,j])}function X_($){try{let Q=$_($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Q?.startsWith("#!"))return;let Z=Q.slice(2).trim();if(!Z)return;let W=Z.split(/\s+/).filter(Boolean);return W.length>0?W:void 0}catch{return}}function f_($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function Y_($,J=process.platform,Q){if(J!=="win32"||!f_(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function qV($){if($.length===0)return;let[J,...Q]=$,Z=J.replace(/\\/g,"/").toLowerCase(),W=Z.split("/").at(-1)??Z;if(W==="env")return qV(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 V_($){let J=X_($);if(J&&J.length>0)return[...qV(J)??J,$];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 TV(["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 H_($){let J={};for(let Q of D$($)){if(!Q.hookEventName)continue;let Z=Q.hookEventName,W=J[Z]??[];W.push(V_(Q.path)),J[Z]=W}return J}async function B_($){let J;for(let Q of $.commands){let Z=Q.join(" ");try{let W=await MV($.payload,{command:Q,cwd:$.cwd,env:S7(process.env),detached:!1,timeoutMs:$.timeoutMs});if(W?.timedOut){r5($.logger,`hook command timed out: ${Z}`);continue}if(W?.parseError){r5($.logger,`hook command returned invalid JSON control output: ${Z} (${W.parseError})`);continue}J=Q_(J,Z_(W?.parsedJson))}catch(W){r5($.logger,`hook command failed: ${Z}`,W)}}return J}function Q2($){for(let J of $.commands){let Q=J.join(" ");MV($.payload,{command:J,cwd:$.cwd,env:S7(process.env),detached:!0}).catch((Z)=>{r5($.logger,`hook command failed: ${Q}`,Z)})}}function U$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function w7($,J){return{...U$($.snapshot),userMessage:J}}function PV($){return{...U$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function NV($){return{...U$($.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 wV($){return $.filter((J)=>J.type==="text"&&typeof J.text==="string").map((J)=>J.text).join("")}function A_($){if(!$)return;let J={};if($.cancel===!0)J.stop=!0;if($.overrideInput!==void 0)J.input=$.overrideInput;return Object.keys(J).length>0?J:void 0}function D8($){let J={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(Z)=>{let W=`${JSON.stringify({ts:new Date().toISOString(),...Z})}
204
+ `,X=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??J_(_V(),"hooks.jsonl");_V(X),ez(X,W,"utf8")};return{beforeRun:async(Z)=>{let W=w7(Z,"");Q({...L0(W,J),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Z)=>{let W=PV(Z);Q({...L0(W,J),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:i5(W.call.input)}});return},afterTool:async(Z)=>{let W=NV(Z);Q({...L0(W,J),hookName:"tool_result",iteration:W.iteration,tool_result:W.record,postToolUse:{toolName:W.record.name,parameters:i5(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:Z,result:W})=>{let j=U$(Z);if(W.status==="completed"){Q({...L0(j,J),hookName:"agent_end",iteration:W.iterations,turn:{outputText:W.outputText,status:W.status},taskComplete:{taskMetadata:{}}});return}if(W.status==="aborted"||N7(W.error?.message)){Q({...L0(j,J),hookName:"agent_abort",reason:W.error?.message,taskCancel:{taskMetadata:{}}});return}if(W.error)Q({...L0(j,J),hookName:"agent_error",iteration:W.iterations,error:{name:W.error.name,message:W.error.message,stack:W.error.stack}})},onEvent:async(Z)=>{if(Z.type!=="message-added"||Z.message.role!=="user")return;let W=w7({snapshot:Z.snapshot},wV(Z.message.content));Q({...L0(W,J),hookName:"prompt_submit",userPromptSubmit:{prompt:W.userMessage,attachments:[]}})}}}function D6($){let J=H_($.workspacePath);if(!Object.values(J).some((B)=>B.length>0))return;let Z=async(B,A)=>{let K=J[A]??[];if(K.length===0)return;Q2({commands:K,cwd:$.cwd,logger:$.logger,payload:A==="agent_resume"?{...L0(B,$),hookName:A,taskResume:{taskMetadata:{},previousState:{}}}:{...L0(B,$),hookName:A,taskStart:{taskMetadata:{}}}})},W=async(B)=>{let A=J.prompt_submit??[];if(A.length>0)Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"prompt_submit",userPromptSubmit:{prompt:B.userMessage,attachments:[]}}})},j=async(B)=>{let A=J.tool_call??[];if(A.length===0)return;return B_({commands:A,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...L0(B,$),hookName:"tool_call",iteration:B.iteration,tool_call:{id:B.call.id,name:B.call.name,input:B.call.input},preToolUse:{toolName:B.call.name,parameters:i5(B.call.input)}}})},X=async(B)=>{let A=J.tool_result??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"tool_result",iteration:B.iteration,tool_result:B.record,postToolUse:{toolName:B.record.name,parameters:i5(B.record.input),result:typeof B.record.output==="string"?B.record.output:JSON.stringify(B.record.output),success:!B.record.error,executionTimeMs:B.record.durationMs}}})},f=async(B)=>{let A=J.agent_end??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"agent_end",iteration:B.iteration,turn:B.turn,taskComplete:{taskMetadata:{}}}})},Y=async(B)=>{let A=J.agent_error??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"agent_error",iteration:B.iteration,error:{name:B.error.name,message:B.error.message,stack:B.error.stack}}})},V=async(B)=>{if(N7(B.reason)){let K=J.agent_abort??[];if(K.length>0)Q2({commands:K,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"agent_abort",reason:B.reason,taskCancel:{taskMetadata:{}}}})}let A=J.session_shutdown??[];if(A.length===0)return;Q2({commands:A,cwd:$.cwd,logger:$.logger,payload:{...L0(B,$),hookName:"session_shutdown",reason:B.reason}})},H={};if((J.agent_start?.length??0)>0||(J.agent_resume?.length??0)>0||(J.prompt_submit?.length??0)>0){if((J.agent_start?.length??0)>0||(J.agent_resume?.length??0)>0)H.beforeRun=async(B)=>{let A=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await Z(U$(B.snapshot),A);return};if((J.prompt_submit?.length??0)>0)H.onEvent=async(B)=>{if(B.type!=="message-added"||B.message.role!=="user")return;await W(w7({snapshot:B.snapshot},wV(B.message.content)))}}if((J.tool_call?.length??0)>0)H.beforeTool=async(B)=>{let A=await j(PV(B));return A_(A)};if((J.tool_result?.length??0)>0)H.afterTool=async(B)=>{await X(NV(B));return};if((J.agent_end?.length??0)>0)H.afterRun=async({snapshot:B,result:A})=>{if(A.status!=="completed")return;await f({...U$(B),iteration:A.iterations,turn:{outputText:A.outputText,status:A.status}})};if((J.agent_error?.length??0)>0||(J.agent_abort?.length??0)>0||(J.session_shutdown?.length??0)>0){let B=H.afterRun;H.afterRun=async(A)=>{await B?.(A);let{snapshot:K,result:G}=A;if(G.status==="aborted"||N7(G.error?.message)){await V({...U$(K),reason:G.error?.message});return}if(G.error)await Y({...U$(K),iteration:G.iterations,error:G.error})}}return H}function U8($){return G8("core.hook_config_files",D6($))}function Z2($,J){let Q=$.map((Z)=>Z[J]).filter((Z)=>typeof Z==="function");if(Q.length===0)return;return async(Z)=>{let W;for(let j of Q){let X=await j(Z);if(!X||typeof X!=="object")continue;let f=X;W={...W??{},...f,stop:W?.stop===!0||f.stop===!0?!0:f.stop,options:W?.options||f.options?{...W?.options??{},...f.options??{}}:void 0}}return W}}function W2($){let J=$.filter((Q)=>Q!==void 0);if(J.length===0)return;return{beforeRun:Z2(J,"beforeRun"),afterRun:Z2(J,"afterRun"),beforeModel:Z2(J,"beforeModel"),afterModel:Z2(J,"afterModel"),beforeTool:Z2(J,"beforeTool"),afterTool:Z2(J,"afterTool"),onEvent:Z2(J,"onEvent")}}var SV={};w(SV,{normalizeRuntimeCapabilities:()=>z0});function z0(...$){let J,Q;for(let W of $){if(!W)continue;if(W.toolExecutors)J={...J??{},...W.toolExecutors};if(W.requestToolApproval)Q=W.requestToolApproval}let Z=J&&Object.keys(J).length>0;if(!Z&&!Q)return;return{...Z?{toolExecutors:J}:{},...Q?{requestToolApproval:Q}:{}}}var gV={};w(gV,{toProviderConfig:()=>d0,emptyStoredProviderSettings:()=>z$,StoredProviderSettingsSchema:()=>_8,StoredProviderSettingsEntrySchema:()=>D9,ProviderSettingsSchemaTyped:()=>z8});import{z as L$}from"zod";var xV={};w(xV,{toProviderConfig:()=>d0,safeParseSettings:()=>F9,safeCreateProviderConfig:()=>m7,parseSettings:()=>G9,normalizeProviderId:()=>L8,isBuiltInProviderId:()=>x7,createProviderConfig:()=>g7,SapSettingsSchema:()=>B9,ReasoningSettingsSchema:()=>f9,ProviderSettingsSchema:()=>R$,ProviderProtocolSchema:()=>W9,ProviderIdSchema:()=>_6,ProviderClientSchema:()=>j9,OcaSettingsSchema:()=>A9,ModelCatalogSettingsSchema:()=>K9,GcpSettingsSchema:()=>V9,BUILT_IN_PROVIDER_IDS:()=>I7,BUILT_IN_PROVIDER:()=>z6,AzureSettingsSchema:()=>H9,AwsSettingsSchema:()=>Y9,AuthSettingsSchema:()=>X9});import*as u0 from"@cline/llms";import{z as N}from"zod";var IV={};w(IV,{resolveProviderConfig:()=>L6,getProviderConfig:()=>Z9,getLiveModelsCatalog:()=>R8,clearPublicModelsCatalogCache:()=>b_,clearPrivateModelsCatalogCache:()=>k7,clearLiveModelsCatalogCache:()=>h7,OPENAI_COMPATIBLE_PROVIDERS:()=>R6,DEFAULT_MODELS_CATALOG_URL:()=>e5});import*as a from"@cline/llms";function C7($){if(!Array.isArray($))return[];return $.map((J)=>{if(typeof J==="string")return J.trim();if(J&&typeof J==="object"){let Q=J;for(let Z of[Q.id,Q.name,Q.model])if(typeof Z==="string"&&Z.trim())return Z.trim()}return""}).filter((J)=>J.length>0)}function K_($,J){let Q=C7($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let Z=$,W=C7(Z.data??Z.models);if(W.length>0)return W;if(Z.models&&typeof Z.models==="object"&&!Array.isArray(Z.models)){let X=Object.keys(Z.models).filter((f)=>f.trim().length>0);if(X.length>0)return X}let j=Z.providers?.[J];if(j&&typeof j==="object"){let f=C7(j.models??j);if(f.length>0)return f}return[]}async function n5($,J){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return K_(await Q.json(),J)}function CV($){return $.replace(/\/+$/,"")}function a5($,J,Q){let Z=Q?.trim();if(!Z)return;let W=$?.trim();if(!W||!J?.trim())return Z;try{let j=new URL(Z),X=new URL(J),f=new URL(W);if(j.origin!==X.origin)return Z;let Y=CV(X.pathname),V=CV(f.pathname);if(Y&&j.pathname.startsWith(`${Y}/`)){let H=j.pathname.slice(Y.length);f.pathname=`${V}${H}`}else f.pathname=j.pathname;return f.search=j.search,f.hash=j.hash,f.toString()}catch{return Z}}function G_($){return Object.fromEntries(Object.entries($).map(([J,Q])=>[J,{...Q}]))}function F_($){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 D_=Object.values(a.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:G_($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),EV=Object.fromEntries(D_.map(($)=>[$.id,$]));function U_($){return EV[$]}function R_(){return Object.fromEntries(Object.entries(EV).filter(([,$])=>F_($)))}function bV($=[]){let J=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return J.length>0?J:void 0}var e5="https://models.dev/api.json",L_=600000,hV=300000,z_=5000,t5=new Map,U6=new Map,y7=new Map,s5=new Map;async function __(){return a.getGeneratedProviderModels()}async function O_($,J={},Q={},Z={},W={},j={}){let X=await __(),f=a.resolveProviderModelCatalogKeys($),Y=Object.assign({},...f.map((A)=>X[A]??{})),V=Boolean(a.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),H=Object.keys(W).length>0;if(V&&H)return a.sortModelsByReleaseDate({...W,...j});if($==="openai-codex")return a.sortModelsByReleaseDate({...J,...a.filterOpenAICodexModels(Q),...W,...j});let B=a.sortModelsByReleaseDate({...Y,...J,...Q,...Z,...W});if($==="cline")return a.sortModelsByReleaseDate({...a.preferCanonicalModelIds(B,a.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...j});return a.sortModelsByReleaseDate({...B,...j})}function T_($,J){let Q=a.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((Z)=>J[Z]??{}))}function $9($){let J=$?.trim();return J&&J.length>0?J:""}function b7($){let J=$.apiKey?.trim()||$.accessToken?.trim();return J&&J.length>0?J:void 0}function M_($){let J=2166136261;for(let Q=0;Q<$.length;Q+=1)J^=$.charCodeAt(Q),J+=(J<<1)+(J<<4)+(J<<7)+(J<<8)+(J<<24);return(J>>>0).toString(16)}function q_($,J){return`${$}:${$9(J.baseUrl)}:${M_(b7(J)??"")}`}async function J9($,J,Q=z_){let Z=new AbortController,W=setTimeout(()=>Z.abort(),Q);try{return await fetch($,{...J,signal:Z.signal})}finally{clearTimeout(W)}}function j2($,J,Q){if(Q&&!$.includes(J))$.push(J)}function Q9($,J){let Q=["streaming","tools"];return j2(Q,"images",Boolean(J.supportsImages)),j2(Q,"prompt-cache",Boolean(J.supportsPromptCache)),j2(Q,"reasoning",Boolean(J.supportsReasoning)),{id:$,name:J.name??$,contextWindow:J.contextWindow,maxInputTokens:J.maxInputTokens,maxTokens:J.maxTokens,capabilities:Q,releaseDate:J.releaseDate,status:"active"}}async function P_($,J){let Q=await J9("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${J}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let W=(await Q.json())?.data??[],j={};for(let X of W){let f=X.id?.trim();if(!f)continue;if(f.includes("whisper")||f.includes("tts")||f.includes("embedding"))continue;let Y=X.supported_features??[];j[f]=Q9(f,{name:f,contextWindow:X.context_length,maxInputTokens:X.context_length,maxTokens:X.max_completion_tokens,supportsReasoning:Y.includes("reasoning")||Y.includes("reasoning_effort"),supportsImages:!1})}return j}function yV($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let J=Number($);return Number.isFinite(J)?J:void 0}return}async function N_($,J){let Q=await J9("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":J}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let W=(await Q.json())?.data??[],j={};for(let X of W){let f=X.id?.trim();if(!f)continue;j[f]=Q9(f,{name:f,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return j}async function w_($,J){let Z=`${($9($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,W=await J9(Z,{method:"GET",headers:{Authorization:`Bearer ${J}`,accept:"application/json"}});if(!W.ok)throw Error(`Poolside model refresh failed: HTTP ${W.status}`);let X=(await W.json())?.data??[],f={};for(let Y of X){let V=Y.id?.trim();if(!V)continue;let H=Y.supported_features??[],B=Y.supported_sampling_parameters??[],A=Y.input_modalities??[],K=["streaming"];j2(K,"tools",H.includes("tools")),j2(K,"reasoning",H.includes("reasoning")),j2(K,"temperature",B.includes("temperature")),j2(K,"images",A.includes("image"));let G={input:yV(Y.pricing?.prompt),output:yV(Y.pricing?.completion)};f[V]={id:V,name:Y.name??V,description:Y.description,contextWindow:Y.context_length,maxInputTokens:Y.context_length,maxTokens:Y.max_completion_tokens,capabilities:K,pricing:G.input!==void 0||G.output!==void 0?G:void 0,status:"active"}}return f}function S_($){let J=$9($);if(!J)return"http://localhost:4000";return J.endsWith("/v1")?J.slice(0,-3):J}async function C_($,J){let Z=`${S_($.baseUrl)}/v1/model/info`,W=async(V)=>J9(Z,{method:"GET",headers:{accept:"application/json",...V}}),j=await W({"x-litellm-api-key":J});if(!j.ok)j=await W({Authorization:`Bearer ${J}`});if(!j.ok)throw Error(`LiteLLM model refresh failed: HTTP ${j.status}`);let f=(await j.json())?.data??[],Y={};for(let V of f){let H=V.model_name?.trim(),A=V.litellm_params?.model?.trim()||H;if(!A)continue;let K=V.model_info,G=Q9(A,{name:H??A,maxTokens:K?.max_output_tokens??K?.max_tokens,maxInputTokens:K?.max_input_tokens??K?.max_tokens,supportsImages:K?.supports_vision,supportsPromptCache:K?.supports_prompt_caching,supportsReasoning:K?.supports_reasoning});if(Y[A]=G,H)Y[H]={...G,id:H,name:H}}return Y}var kV={baseten:P_,hicap:N_,litellm:C_,poolside:w_},E7=new Map,o5=new Map;function y_($,J){return`${$}:${$9(J.baseUrl)}`}async function E_($,J,Q){let Z=a.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],W=a5(Q.baseUrl,Z?.provider.baseUrl,Z?.provider.modelsSourceUrl);if(!W)return{};let j=J?.cacheTtlMs??hV,X=y_($,Q),f=Date.now(),Y=E7.get(X);if(Y&&Y.expiresAt>f)return Y.data;let V=o5.get(X);if(V)return V;let H=n5(W,$).then((B)=>{let A=Object.fromEntries(B.map((K)=>[K,Q9(K,{name:K})]));return E7.set(X,{data:A,expiresAt:f+j}),A}).finally(()=>{o5.delete(X)});return o5.set(X,H),H}function b_(){E7.clear(),o5.clear()}async function h_($,J){let Q=b7(J);if(!Q)return{};let Z=kV[$];if(!Z)return{};return Z(J,Q)}function k_($,J,Q){if(!Q)return!1;if(!kV[$])return!1;if(J?.loadPrivateOnAuth===!1)return!1;return Boolean(b7(Q))}async function I_($,J,Q){let Z=J?.cacheTtlMs??hV,W=q_($,Q),j=Date.now(),X=y7.get(W);if(X&&X.expiresAt>j)return X.data;let f=s5.get(W);if(f)return f;let Y=h_($,Q).then((V)=>{return y7.set(W,{data:V,expiresAt:j+Z}),V}).finally(()=>{s5.delete(W)});return s5.set(W,Y),Y}async function x_($){return a.fetchModelsDevProviderModels($,globalThis.fetch)}async function R8($={}){let J=$.url??e5,Q=$.cacheTtlMs??L_,Z=Date.now(),W=t5.get(J);if(W&&W.expiresAt>Z)return W.data;let j=U6.get(J);if(j)return j;let X=x_(J).then((f)=>{return t5.set(J,{data:f,expiresAt:Z+Q}),f}).finally(()=>{U6.delete(J)});return U6.set(J,X),X}function h7($){if($){t5.delete($),U6.delete($);return}t5.clear(),U6.clear()}function k7(){y7.clear(),s5.clear()}function g_($){return Object.fromEntries(Object.entries($).map(([J,Q])=>[J,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:bV(Q.capabilities)}]))}var R6=g_(R_());function Z9($){let J=U_($);if(!J)return;return{baseUrl:J.baseUrl||void 0,modelId:J.modelId,knownModels:J.knownModels,capabilities:bV(J.capabilities)}}async function L6($,J,Q){let Z=Z9($);if(!Z)return;try{let W=J?.loadLatestOnInit?await R8(J):void 0,j=W?T_($,W):{},X=Q&&k_($,J,Q)?await I_($,J,Q):{},Y=Boolean(a.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:Z.modelId,baseUrl:Z.baseUrl}:Q,V=Y?await E_($,J,Y).catch(()=>({})):{},H=await O_($,Z.knownModels,j,X,V,Q?.knownModels);return{...Z,knownModels:H}}catch(W){if(J?.failOnError)throw W;return Z}}var z6=u0.BUILT_IN_PROVIDER,I7=u0.BUILT_IN_PROVIDER_IDS,x7=u0.isBuiltInProviderId,L8=u0.normalizeProviderId,_6=N.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),W9=N.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),j9=N.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),X9=N.object({apiKey:N.string().optional(),accessToken:N.string().optional(),refreshToken:N.string().optional(),expiresAt:N.number().int().positive().optional(),accountId:N.string().optional()}),m_=N.enum(["none","low","medium","high","xhigh"]),f9=N.object({enabled:N.boolean().optional(),effort:m_.optional(),budgetTokens:N.number().int().positive().optional()}),Y9=N.object({accessKey:N.string().optional(),secretKey:N.string().optional(),sessionToken:N.string().optional(),region:N.string().optional(),profile:N.string().optional(),authentication:N.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:N.boolean().optional(),useCrossRegionInference:N.boolean().optional(),useGlobalInference:N.boolean().optional(),endpoint:N.string().url().optional(),customModelBaseId:N.string().optional()}),V9=N.object({projectId:N.string().optional(),region:N.string().optional()}),H9=N.object({apiVersion:N.string().optional(),useIdentity:N.boolean().optional()}),B9=N.object({clientId:N.string().optional(),clientSecret:N.string().optional(),tokenUrl:N.string().url().optional(),resourceGroup:N.string().optional(),deploymentId:N.string().optional(),useOrchestrationMode:N.boolean().optional(),api:N.enum(["orchestration","foundation-models"]).optional(),defaultSettings:N.record(N.string(),N.unknown()).optional()}),A9=N.object({mode:N.enum(["internal","external"]).optional(),usePromptCache:N.boolean().optional()}),K9=N.object({loadLatestOnInit:N.boolean().optional(),loadPrivateOnAuth:N.boolean().optional(),url:N.string().url().optional(),cacheTtlMs:N.number().int().positive().optional(),failOnError:N.boolean().optional()}),R$=N.object({provider:_6,apiKey:N.string().optional(),auth:X9.optional(),model:N.string().optional(),protocol:W9.optional(),client:j9.optional(),routingProviderId:_6.optional(),maxTokens:N.number().int().positive().optional(),contextWindow:N.number().int().positive().optional(),baseUrl:N.string().url().optional(),headers:N.record(N.string(),N.string()).optional(),timeout:N.number().int().positive().optional(),reasoning:f9.optional(),aws:Y9.optional(),gcp:V9.optional(),azure:H9.optional(),sap:B9.optional(),oca:A9.optional(),region:N.string().optional(),apiLine:N.enum(["china","international"]).optional(),capabilities:N.array(N.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:K9.optional()});function G9($){return R$.parse($)}function F9($){return R$.safeParse($)}function v_($){return $.protocol==="openai-responses"||$.client==="openai"}function d0($,J={}){let Q=$.provider,Z=L8(Q),W=J.includeKnownModels!==!1,j=$.reasoning?.effort||"none",X=j==="none"?void 0:j,f=R6[Z],Y=Object.assign({},...u0.resolveProviderModelCatalogKeys(Z).map((R)=>u0.getGeneratedModelsForProvider(R))),V=Object.keys(Y)[0],H=l2(Z,$),B=$.baseUrl??(Z==="oca"?$.oca?.mode==="internal"?j5:X5:f?.baseUrl),A=$.routingProviderId??(v_($)&&Z!==z6.OPENAI_NATIVE?z6.OPENAI_NATIVE:void 0),K=W?f?.knownModels??(Object.keys(Y).length>0?Y:void 0):void 0,G={providerId:Q,clientType:$.client,routingProviderId:A,modelId:$.model??f?.modelId??V??"default",...W?{knownModels:K}:{},apiKey:H,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:B,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:X,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??f?.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(G).filter(([R,D])=>D!==void 0))}function g7($){let J=G9($);return d0(J)}function m7($){let J=F9($);if(J.success)return{success:!0,config:d0(J.data)};return{success:!1,error:J.error}}var z8=R$;var D9=L$.object({settings:R$,updatedAt:L$.string().datetime(),tokenSource:L$.enum(["manual","oauth","migration"]).default("manual")}),_8=L$.object({version:L$.literal(1),lastUsedProvider:L$.string().min(1).optional(),providers:L$.record(L$.string(),D9)});function z$(){return{version:1,providers:{}}}W1();var uV={};w(uV,{InMemoryWorkspaceManager:()=>T8});import{upsertWorkspaceInfo as l_,WorkspaceManifestSchema as c7}from"@cline/shared";var cV={};w(cV,{normalizeWorkspacePath:()=>m1,generateWorkspaceInfoWithDiagnostics:()=>O6,generateWorkspaceInfo:()=>O8,buildWorkspaceMetadataWithInfo:()=>v7,buildWorkspaceMetadata:()=>T6});import{basename as c_,resolve as u_}from"node:path";import{performance as mV}from"node:perf_hooks";import{processWorkspaceInfo as vV}from"@cline/shared";import d_ from"simple-git";function m1($){return u_($)}async function O8($){return(await O6($)).info}function U9($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function O6($){let J=m1($),Q={rootPath:J,hint:c_(J)},Z;try{let W=d_({baseDir:J});if(!await W.checkIsRepo())return{info:Q,vcsType:"none"};try{let X=await W.getRemotes(!0);if(X.length>0){let f=X.map((Y)=>{let V=Y.refs.fetch||Y.refs.push;return`${Y.name}: ${V}`});Q.associatedRemoteUrls=f}}catch(X){Z??=U9(X)}try{let X=(await W.revparse(["HEAD"])).trim();if(X.length>0)Q.latestGitCommitHash=X}catch(X){Z??=U9(X)}try{let X=(await W.branch()).current.trim();if(X.length>0)Q.latestGitBranchName=X}catch(X){Z??=U9(X)}return{info:Q,vcsType:"git",error:Z}}catch(W){return{info:Q,vcsType:"none",error:U9(W)}}}async function T6($){let J=await O8($);return vV(J)}async function v7($){let J=mV.now(),Q=await O6($),Z=mV.now()-J,W=Q.info;return{workspaceInfo:W,workspaceMetadata:vV(W),durationMs:Z,vcsType:Q.vcsType,initError:Q.error}}class T8{manifest;listeners=new Set;constructor($){this.manifest=c7.parse($??{workspaces:{}})}async addWorkspacePath($){let J=await O8($);return this.manifest=l_(this.manifest,J),this.emit({type:"workspace_added",workspace:J}),J}async switchWorkspace($){let J=m1($),Q=this.manifest.workspaces[J];if(Q)return this.manifest=c7.parse({...this.manifest,currentWorkspacePath:J}),this.emit({type:"workspace_switched",workspace:Q}),Q;let Z=await this.addWorkspacePath(J);return this.manifest=c7.parse({...this.manifest,currentWorkspacePath:Z.rootPath}),this.emit({type:"workspace_switched",workspace:Z}),Z}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let J=m1($);return this.manifest.workspaces[J]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let J of this.listeners)J($)}}O0();import{createHash as p_}from"node:crypto";var dV=new Set,lV=new Set;function r_($){return p_("sha256").update($).digest("hex")}function i_($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function pV($){if(!$.telemetry)return;let J=r_($.rootPath),Q=$.rootCount??1;if(!dV.has(J))dV.add(J),xJ($.telemetry,{root_count:Q,vcs_types:i_($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!lV.has(J)){lV.add(J);let Z=Error($.initError.message);Z.name=$.initError.errorType||"Error",gJ($.telemetry,Z,{fallback_to_single_root:!0,workspace_count:Q})}}function a_($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function s_($,J,Q){if(J.length>0)for(let j of J)Q?.log(j.message,{severity:"warn"});if($.length===0)return;let Z=$.slice(0,3).map(a_).join("; "),W=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${Z}${W}. Use --verbose for more details.`,{severity:"warn"});for(let j of $)Q?.log(`Plugin initialization failed (${j.phase}) for ${j.pluginPath}`,{severity:"warn",stack:j.stack,pluginPath:j.pluginPath,pluginName:j.pluginName})}function o_($,J){let Q=typeof $.thinking==="boolean",Z=typeof $.reasoningEffort==="string";if(!Q&&!Z)return J;return{...J??{},...Q?{enabled:$.thinking}:{},...Z?{effort:$.reasoningEffort}:{}}}function rV($,J){return n_($,J)}function t_($){let J=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;J+=1}return J}function e_($){let J={...$.storedHeaders??{},...$.configHeaders??{}},Q=$.accountId?.trim()||$O($.accessToken);if(J.originator="cline",J.session_id=$.sessionId,J["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,Q)J["ChatGPT-Account-Id"]=Q;return J}function $O($){let J=$?.trim();if(!J)return;let Q=T0(J),Z=Q?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof Z==="string"&&Z.length>0)return Z;let W=Q?.organizations?.[0]?.id;if(typeof W==="string"&&W.length>0)return W;let j=Q?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return}function JO($,J,Q,Z,W){let j=Q.getProviderSettings($.providerId),X=Z||j?.modelCatalog?{...Z??{},...j?.modelCatalog??{}}:void 0,f=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,Y={...j??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??j?.apiKey,baseUrl:$.baseUrl??j?.baseUrl,headers:$.providerId==="openai-codex"?e_({sessionId:J,configHeaders:$.headers,storedHeaders:j?.headers,accountId:j?.auth?.accountId,accessToken:$.apiKey??j?.auth?.accessToken??j?.apiKey}):$.headers??j?.headers,reasoning:o_($,j?.reasoning),modelCatalog:X},V={...d0(Y),...f??{}};if($.knownModels)V.knownModels=$.knownModels;if($.extensionContext)V.extensionContext=$.extensionContext;let B=$.fetch??V.fetch??W;if(B)V.fetch=B;return V}async function iV($){let{input:J,sessionId:Q,providerSettingsManager:Z,defaultTelemetry:W,defaultCapabilities:j,defaultToolPolicies:X,defaultFetch:f,onPluginEvent:Y,onTeamEvent:V,createSubAgentLifecycleCallbacks:H,createSpawnTool:B,localRuntime:A,readSessionMetadata:K,writeSessionMetadata:G}=$,R=G$(J.config),{modelCatalogDefaults:D,userInstructionService:U,configExtensions:F,onTeamRestored:O,...T}=A??{},z=Object.keys(T).length>0?T:void 0,{workspaceInfo:L,workspaceMetadata:P,durationMs:S,vcsType:b,initError:u}=await v7(R),t=z?.extensionContext,Q0={...t??{},workspace:{...L,...t?.workspace??{}},session:{...t?.session??{},sessionId:Q},logger:t?.logger??z?.logger,telemetry:t?.telemetry??z?.telemetry??W};pV({telemetry:Q0.telemetry,rootPath:L.rootPath,workspaceInfo:L,rootCount:1,vcsType:b,durationMs:S,initError:u,featureFlagEnabled:!0});let e=U8({cwd:J.config.cwd,workspacePath:R,rootSessionId:Q,logger:z?.logger,workspaceInfo:L}),$1=uY(z?.hooks)?void 0:D8({rootSessionId:Q,workspacePath:R,workspaceInfo:L}),b$=W2([z?.hooks,$1]),r;if(rV(F,"plugins"))try{r=await K8({pluginPaths:z?.pluginPaths,workspacePath:R,cwd:J.config.cwd,onEvent:Y,providerId:J.config.providerId,modelId:J.config.modelId,workspaceInfo:L,session:Q0.session,client:Q0.client,user:Q0.user,logger:Q0.logger,telemetry:Q0.telemetry,automation:Q0.automation}),s_(r.failures,r.warnings,z?.logger)}catch(x2){let QZ=x2 instanceof Error?x2.message:String(x2);z?.logger?.log?.(`plugin loading failed; continuing without plugins (${QZ})`)}let C=W7(e?[e]:void 0,W7(z?.extensions,q5(r?.extensions))),f0=rV(F,"plugins")?$2(r?.pluginPaths??[]):void 0,Y0={...J.config,...z??{},sessionId:Q,hooks:b$,extensions:C,extensionContext:Q0,telemetry:Q0.telemetry},w0=JO(Y0,Q,Z,D,f),k2=W2([Y0.hooks,Y0.checkpoint?.enabled===!0?zV({cwd:Y0.cwd,sessionId:Q,logger:Y0.logger,createCheckpoint:Y0.checkpoint?.createCheckpoint,initialRunCount:t_(J.initialMessages),readSessionMetadata:K,writeSessionMetadata:G}):void 0]),T1={...Y0,providerConfig:w0,workspaceMetadata:P,hooks:k2},Y1=J.toolPolicies??Y0.toolPolicies??X,V4=z0(j,J.capabilities),I2=V4?.requestToolApproval,bJ=V4?.toolExecutors,M1=H?.(T1),hJ=new T8({currentWorkspacePath:L.rootPath,workspaces:{[L.rootPath]:L}});return{effectiveInput:J,config:T1,providerConfig:w0,workspaceMetadata:P,workspaceInfo:L,extensions:C,hooks:k2,toolPolicies:Y1,requestToolApproval:I2,pluginSandboxShutdown:r?.shutdown,runtimeBuilderInput:{config:T1,hooks:k2,extensions:C,onTeamEvent:V,createSpawnTool:B,onTeamRestored:O,onSubAgentEvent:M1?.onSubAgentEvent,onSubAgentStart:M1?.onSubAgentStart,onSubAgentEnd:M1?.onSubAgentEnd,userInstructionService:U,pluginSkillDirectories:f0,configExtensions:F,toolExecutors:bJ,toolPolicies:Y1,workspaceManager:hJ,logger:T1.logger,telemetry:T1.telemetry,requestToolApproval:I2}}}import{existsSync as L9,mkdirSync as QO,readdirSync as ZO,rmdirSync as WO,rmSync as jO,unlinkSync as XO}from"node:fs";import{dirname as nV,join as R9}from"node:path";function $0(){return new Date().toISOString()}function M6($){if(!$||!L9($))return;try{XO($)}catch{}}function fO($){let J=j8($);if(J)return{rootSessionId:J.rootSessionId,fileStem:`${J.agentId}__${J.teamTaskId}`};let Q=J6($);if(Q)return{rootSessionId:Q.rootSessionId,fileStem:Q.agentId};return{rootSessionId:$,fileStem:$}}class u7{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return R9(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let J=this.sessionArtifactsDir($);if(!L9(J))QO(J,{recursive:!0});return J}sessionMessagesPath($){return R9(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,J=!1){let Q=J?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return R9(Q,`${$}.json`)}removeSessionDirIfEmpty($){let J=this.sessionArtifactsDir($),Q=this.ensureSessionsDir();while(J.startsWith(Q)&&J!==Q){if(!L9(J)){J=nV(J);continue}try{if(ZO(J).length>0)break;WO(J)}catch{break}J=nV(J)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!L9($))return;try{jO($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,J,Q){let{rootSessionId:Z,fileStem:W}=fO($),j=this.sessionArtifactsDir(Z);return{messagesPath:R9(j,`${W}.messages.json`)}}}import{resolveDocumentsExtensionPath as YO}from"@cline/shared/storage";O0();function aV($,J,Q,Z,W){if(Q)vJ($.telemetry,{ulid:J,apiProvider:$.providerId,...W});else mJ($.telemetry,{ulid:J,apiProvider:$.providerId,...W});VO($.telemetry,{workspacePath:Z})}function VO($,J){let Q=YO("Hooks"),Z=D$(J.workspacePath),W=new Map;for(let j of Z){let X=j.hookEventName??"unknown",f=W.get(X)??{global:0,workspace:0};if(j.path===Q||j.path.startsWith(`${Q}/`))f.global+=1;else f.workspace+=1;W.set(X,f)}for(let[j,X]of W.entries())sJ($,j,X.global,X.workspace)}function sV($,J){for(let Q of J.mentions)nJ($,Q,J.matchedFiles.includes(Q)?1:0,"file",!J.matchedFiles.includes(Q));for(let Q of J.matchedFiles)rJ($,"file",Q.length);for(let Q of J.ignoredMentions)iJ($,"file","not_found",Q)}var ZF={};w(ZF,{ProviderSettingsManager:()=>_1});import{chmodSync as jF,existsSync as Sj,mkdirSync as Pb,readFileSync as Nb,writeFileSync as wb}from"node:fs";import{basename as XF,dirname as Cj}from"node:path";import{resolveProviderSettingsPath as Sb}from"@cline/shared/storage";var M={};w(M,{writeHubDiscovery:()=>a9,writeGlobalSettings:()=>k1,withHubStartupLock:()=>s9,verifyHubConnection:()=>G1,updateMcpServerOAuthState:()=>H2,updateLocalProvider:()=>uQ,uninstallPlugin:()=>Jj,truncateNotificationBody:()=>_J,toggleDisabledTool:()=>T5,toTeamProgressLifecycleEvent:()=>d8,toProviderConfig:()=>d0,toHubStatusUrl:()=>SW,toHubHealthUrl:()=>o9,toHookConfigFileName:()=>F6,syncPluginMcpServersToSettings:()=>r3,summarizeUsageFromMessages:()=>f8,stopLocalHubServerGracefully:()=>cW,startLocalOAuthServer:()=>J1,startHubWebSocketServer:()=>C2,startHubServer:()=>tK,startClineDeviceAuth:()=>HZ,splitCoreSessionConfig:()=>r6,spawnDetachedHubServerWithRetry:()=>k8,spawnDetachedHubServer:()=>kW,setTelemetryOptOutGlobally:()=>bf,setMcpServerDisabled:()=>Y2,setDisabledTools:()=>uZ,setDisabledPlugin:()=>mf,setAutoUpdateEnabledGlobally:()=>kf,sendHubCommand:()=>oA,saveProviderOAuthCredentials:()=>x$,saveLocalProviderSettings:()=>Vj,saveLocalProviderOAuthCredentials:()=>Kj,sanitizeSessionToken:()=>a$,safeParseSettings:()=>F9,safeCreateProviderConfig:()=>m7,runSubprocessEvent:()=>i8,runHook:()=>a8,reviveTeamStateDates:()=>E5,restartLocalHubIfIdleAfterStartupTimeout:()=>QQ,resolveWorkspaceHubOwnerContext:()=>IB,resolveWorkflowsConfigSearchPaths:()=>k6,resolveSkillsConfigSearchPaths:()=>b6,resolveSharedHubOwnerContext:()=>E0,resolveSessionBackend:()=>f3,resolveRulesConfigSearchPaths:()=>h6,resolveProviderConfig:()=>L6,resolveProviderApiKeyFromSettings:()=>DZ,resolveProductionHubOwnerContext:()=>n0,resolvePluginSkillDirectoriesFromPaths:()=>$2,resolvePluginConfigSearchPaths:()=>B6,resolveMcpServerRegistrations:()=>A1,resolveLocalClineAuthToken:()=>Fj,resolveHubUrl:()=>K3,resolveHubOwnerContext:()=>l1,resolveHubEndpointOptions:()=>i0,resolveHubBuildId:()=>n9,resolveHooksConfigSearchPaths:()=>K6,resolveDisabledToolNames:()=>B1,resolveDisabledPluginPaths:()=>r4,resolveDefaultMcpSettingsPath:()=>K0,resolveDefaultHubPort:()=>h8,resolveDefaultHubPathname:()=>hW,resolveDefaultHubHost:()=>bW,resolveCoreSelectedToolIds:()=>h5,resolveCoreDistinctId:()=>b0,resolveCompatibleLocalHubUrl:()=>XJ,resolveClineDir:()=>EB,resolveClineDataDir:()=>R2,resolveAndLoadAgentPlugins:()=>K8,resolveAgentPluginPaths:()=>e$,requestHubShutdown:()=>jJ,requestDesktopToolApproval:()=>u3,removePluginMcpServersFromSettings:()=>wJ,rememberRecoverableLocalHubUrl:()=>P$,registerRemoteConfigSessionBlobUpload:()=>NQ,registerMcpServersFromSettingsFile:()=>B2,registerDisposable:()=>Ob,refreshProviderModelsFromSource:()=>Hj,refreshOpenAICodexToken:()=>W5,refreshOcaToken:()=>Y5,refreshClineToken:()=>Q5,readSessionCheckpointHistory:()=>OJ,readRemoteConfigSessionBlobUploadMetadata:()=>b3,readHubDiscovery:()=>G0,readGlobalSettings:()=>M0,readBearerToken:()=>_Q,probeHubServer:()=>p1,probeHubConnection:()=>sA,prewarmFileIndex:()=>D5,prewarmDetachedHubServer:()=>e9,prepareRemoteConfigCoreIntegration:()=>k3,parseWorkflowConfigFromMarkdown:()=>E6,parseUserCommandEnvelope:()=>_b,parseSkillConfigFromMarkdown:()=>C6,parseSettings:()=>G9,parseRuleConfigFromMarkdown:()=>y6,parseHookEventPayload:()=>n8,parseConfiguredAgentConfig:()=>HJ,normalizeWorkspacePath:()=>m1,normalizeUserInput:()=>zb,normalizeSdkError:()=>Lb,normalizeRuntimeCapabilities:()=>z0,normalizeProviderId:()=>L8,normalizeOAuthProvider:()=>Bj,normalizeHubWebSocketUrl:()=>N$,noopBasicLogger:()=>Rb,migrateLegacyProviderSettings:()=>CJ,mergeRulesForSystemPrompt:()=>w8,mergeAgentHooks:()=>W2,makeTeamTaskSubSessionId:()=>$6,makeSubSessionId:()=>W8,loginOpenAICodex:()=>F4,loginOcaOAuth:()=>R4,loginLocalProvider:()=>Aj,loginClineOAuth:()=>K4,loginAndSaveProviderOAuthCredentials:()=>z4,loginAndSaveLocalProviderOAuthCredentials:()=>Gj,loadOpenTelemetryAdapter:()=>eE,loadMcpSettingsFile:()=>f2,loadLlmsConfigFromFile:()=>Pj,loadConfiguredAgentConfigs:()=>v8,loadAgentPluginsFromPathsWithDiagnostics:()=>t$,loadAgentPluginsFromPaths:()=>m5,loadAgentPluginFromPath:()=>V6,listSessionHistoryFromBackend:()=>qW,listPluginToolsWithDiagnostics:()=>m9,listPluginTools:()=>l6,listMcpServerOAuthStatuses:()=>u6,listLocalProviders:()=>fj,listHookConfigFiles:()=>D$,isToolDisabledGlobally:()=>If,isTelemetryOptedOutGlobally:()=>O5,isSessionNotFoundError:()=>d1,isRuleEnabled:()=>S9,isPluginDisabledGlobally:()=>gf,isOAuthProvider:()=>I$,isHubReconnectableTransportError:()=>mW,isHubCommandTimeoutError:()=>JQ,isDiscoveryFilePresent:()=>hB,isClineNotSubscribedMessage:()=>jb,isClineNotSubscribedError:()=>Wb,isClineAccountActionRequest:()=>z9,isBuiltInProviderId:()=>x7,isAutoUpdateEnabledGlobally:()=>hf,identifyAccount:()=>S1,hasMcpSettingsFile:()=>c1,getValidOpenAICodexCredentials:()=>D4,getValidOcaCredentials:()=>L4,getValidClineCredentials:()=>G4,getProviderOAuthCredentialsFromSettings:()=>_4,getProviderConfigFields:()=>Dj,getProviderConfig:()=>Z9,getProviderAuthStorageId:()=>FZ,getProviderAuthHandler:()=>W0,getPersistedProviderApiKey:()=>l2,getMcpServerOAuthState:()=>V2,getLocalProviderModels:()=>Yj,getLiveModelsCatalog:()=>R8,getFileIndex:()=>b1,getCurrentContextSize:()=>Y7,getCoreHeadlessToolNames:()=>e4,getCoreDefaultEnabledToolIds:()=>b5,getCoreBuiltinToolCatalog:()=>i$,getCoreAcpToolNames:()=>k5,getClinePassSubscriptionUrl:()=>Zb,getClineNotSubscribedMessage:()=>Qb,getClineDefaultSystemPrompt:()=>Xb,generateWorkspaceInfoWithDiagnostics:()=>O6,generateWorkspaceInfo:()=>O8,formatRulesForSystemPrompt:()=>N8,formatProviderOAuthApiKey:()=>UZ,formatDisplayUserInput:()=>Ub,filterExtensionToolRegistrations:()=>q5,filterDisabledTools:()=>I1,filterDisabledPluginPaths:()=>M5,fetchClineRecommendedModels:()=>Mj,executeClineAccountAction:()=>_9,ensureHubWebSocketServer:()=>OQ,ensureHubServer:()=>eK,ensureDetachedHubServer:()=>uB,ensureCustomProvidersLoaded:()=>mQ,ensureCompatibleLocalHubUrl:()=>_2,enrichPromptWithMentions:()=>a2,emptyWorkspaceManifest:()=>Gb,emptyStoredProviderSettings:()=>z$,discoverPluginModulePaths:()=>A6,disablePluginMcpServersInSettings:()=>i3,deriveSubsessionStatus:()=>Q6,deleteLocalProvider:()=>dQ,defineLlmsConfig:()=>qj,createWorkflowsConfigDefinition:()=>g6,createUserInstructionConfigService:()=>_$,createToolPoliciesWithPreset:()=>R5,createTool:()=>Kb,createTeamName:()=>CQ,createSubprocessHooks:()=>BQ,createSpawnAgentTool:()=>A$,createSkillsConfigDefinition:()=>I6,createSessionHost:()=>r8,createRuntimeHost:()=>r8,createRulesConfigDefinition:()=>x6,createRemoteConfigSessionMessagesArtifactUploader:()=>h3,createProviderConfig:()=>g7,createOpenTelemetryTelemetryService:()=>zJ,createOAuthClientCallbacks:()=>M8,createMcpTools:()=>E8,createLocalHubScheduleRuntimeHandlers:()=>TQ,createLlmsSdk:()=>wj,createInitialAccumulatedUsage:()=>D0,createInMemoryHubOwnerContext:()=>bB,createHubServerUrl:()=>j1,createHubAuthToken:()=>i9,createHookConfigFileHooks:()=>D6,createHookConfigFileExtension:()=>U8,createHookAuditHooks:()=>D8,createDisabledMcpToolPolicy:()=>d6,createDisabledMcpToolPolicies:()=>g9,createDelegatedAgentConfigProvider:()=>H$,createDelegatedAgent:()=>B$,createDefaultToolsWithPreset:()=>L5,createDefaultTools:()=>f$,createDefaultMcpServerClientFactory:()=>C8,createDefaultExecutors:()=>s2,createCoreSettingsService:()=>K2,createCoreSessionSnapshot:()=>F1,createContributionRegistry:()=>Ab,createContextCompactionPrepareTurn:()=>N4,createConfiguredTelemetryService:()=>s1,createConfiguredTelemetryHandle:()=>$4,createConfiguredAgentTools:()=>c8,createClineTelemetryServiceMetadata:()=>Bb,createClineTelemetryServiceConfig:()=>Hb,createBuiltinTools:()=>n$,createAgentTeamsTools:()=>r$,createAgentRuntime:()=>qb,createAgentHooksExtension:()=>G8,connectToHub:()=>FQ,completeClineDeviceAuth:()=>BZ,clearPrivateModelsCatalogCache:()=>k7,clearLiveModelsCatalogCache:()=>h7,clearHubDiscovery:()=>y0,captureWorkspacePathResolved:()=>nj,captureWorkspaceInitialized:()=>xJ,captureWorkspaceInitError:()=>gJ,captureToolUsage:()=>dJ,captureTokenUsage:()=>cJ,captureTaskRestarted:()=>vJ,captureTaskCreated:()=>mJ,captureTaskCompleted:()=>H4,captureSubagentExecution:()=>A4,captureSkillUsed:()=>lJ,captureSdkError:()=>Vb,captureProviderConfigured:()=>aj,captureProviderApiError:()=>B4,captureModeSwitch:()=>uJ,captureMentionUsed:()=>rJ,captureMentionSearchResults:()=>nJ,captureMentionFailed:()=>iJ,captureHookDiscovery:()=>sJ,captureExtensionActivated:()=>ij,captureDiffEditFailure:()=>pJ,captureConversationTurnEvent:()=>g2,captureCompactionSkipped:()=>tJ,captureCompactionExecuted:()=>oJ,captureAuthSucceeded:()=>N1,captureAuthStarted:()=>P1,captureAuthLoggedOut:()=>e1,captureAuthFailed:()=>w1,captureAgentTeamCreated:()=>aJ,captureAgentCreated:()=>$$,buildWorkspaceMetadata:()=>T6,buildTeamProgressSummary:()=>u8,buildSdkErrorProperties:()=>fb,buildRemoteConfigSessionBlobUploadMetadata:()=>qQ,buildDelegatedAgentConfig:()=>l$,buildConfiguredAgentToolName:()=>BJ,buildConfiguredAgentToolDescriptors:()=>AJ,bootstrapAgentTeams:()=>Z8,authorizeMcpServerOAuth:()=>h9,addLocalProvider:()=>Xj,accumulateUsageTotals:()=>A0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>S6,UnifiedConfigFileWatcher:()=>X2,ToolPresets:()=>c0,TelemetryService:()=>t8,TelemetryLoggerSink:()=>LJ,TEAM_TOOL_NAMES:()=>Q8,SubprocessSandbox:()=>H8,StoredProviderSettingsSchema:()=>_8,StoredProviderSettingsEntrySchema:()=>D9,SqliteTeamStore:()=>y2,SqliteSessionStore:()=>U1,SessionVersioningService:()=>y$,SessionVersioningError:()=>k0,SessionSource:()=>U0,SessionNotFoundError:()=>u1,SapSettingsSchema:()=>B9,SKILLS_CONFIG_DIRECTORY_NAME:()=>w6,SESSION_STATUSES:()=>Z6,SESSION_NOT_FOUND_ERROR_CODE:()=>G2,SDK_ERROR_TELEMETRY_EVENT:()=>Tb,RpcClineAccountService:()=>P6,RemoteRuntimeHost:()=>g8,ReasoningSettingsSchema:()=>f9,RULES_CONFIG_DIRECTORY_NAME:()=>w9,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>PQ,ProviderSettingsSchema:()=>R$,ProviderSettingsManager:()=>_1,ProviderProtocolSchema:()=>W9,ProviderIdSchema:()=>_6,ProviderClientSchema:()=>j9,OpenTelemetryProvider:()=>e8,OcaSettingsSchema:()=>A9,OPENAI_COMPATIBLE_PROVIDERS:()=>R6,NodeHubClient:()=>X1,NoOpFeatureFlagsProvider:()=>q2,NativeHubTransportAdapter:()=>PJ,ModelCatalogSettingsSchema:()=>K9,LocalRuntimeHost:()=>z1,Llms:()=>$b,InMemoryWorkspaceManager:()=>T8,InMemoryMcpManager:()=>A2,HubUIClient:()=>D3,HubTransportError:()=>q0,HubSessionClient:()=>F3,HubServerTransport:()=>Q4,HubScheduleService:()=>o8,HubScheduleCommandService:()=>s8,HubRuntimeHost:()=>r1,HubCommandError:()=>I8,HookEventPayloadSchema:()=>HQ,HookEventNameSchema:()=>VQ,HookConfigFileName:()=>F8,HOOK_CONFIG_FILE_EVENT_MAP:()=>G6,HOOKS_CONFIG_DIRECTORY_NAME:()=>p5,GlobalSettingsSchema:()=>p4,GcpSettingsSchema:()=>V9,FileTeamPersistenceStore:()=>iQ,FeatureFlagsService:()=>M2,FeatureFlagDefaultValue:()=>Db,FEATURE_FLAGS:()=>Fb,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>eQ,DefaultToolNames:()=>F0,DefaultRuntimeBuilder:()=>j4,DefaultLlmsSdk:()=>yJ,DEFAULT_MODELS_CATALOG_URL:()=>e5,DEFAULT_HUB_PORT:()=>yW,DEFAULT_HUB_PATHNAME:()=>EW,DEFAULT_HUB_HOST:()=>CW,CoreSettingsService:()=>O$,CoreSessionService:()=>L1,ContributionRegistry:()=>Yb,ClineNotSubscribedError:()=>Jb,ClineCore:()=>UJ,ClineAccountService:()=>q6,ChatViewStateSchema:()=>Oj,ChatSummarySchema:()=>tQ,ChatSessionStatusSchema:()=>aQ,ChatSessionConfigSchema:()=>nQ,ChatMessageSchema:()=>oQ,ChatMessageRoleSchema:()=>sQ,CORE_TELEMETRY_EVENTS:()=>x,CORE_BUILD_VERSION:()=>Tj,BrowserWebSocketHubAdapter:()=>qJ,BUILT_IN_PROVIDER_IDS:()=>I7,BUILT_IN_PROVIDER:()=>z6,AzureSettingsSchema:()=>H9,AwsSettingsSchema:()=>Y9,AuthSettingsSchema:()=>X9,AgentTeamsRuntime:()=>T2,AgentTeam:()=>p8,Agent:()=>Mb,ALL_DEFAULT_TOOL_NAMES:()=>W$});q(M,Qa);import*as $b from"@cline/llms";import{ClineNotSubscribedError as Jb,getClineNotSubscribedMessage as Qb,getClinePassSubscriptionUrl as Zb,isClineNotSubscribedError as Wb,isClineNotSubscribedMessage as jb}from"@cline/llms";import{buildClineSystemPrompt as Xb,buildSdkErrorProperties as fb,ContributionRegistry as Yb,captureSdkError as Vb,createClineTelemetryServiceConfig as Hb,createClineTelemetryServiceMetadata as Bb,createContributionRegistry as Ab,createTool as Kb,emptyWorkspaceManifest as Gb,FEATURE_FLAGS as Fb,FeatureFlagDefaultValue as Db,formatDisplayUserInput as Ub,noopBasicLogger as Rb,normalizeSdkError as Lb,normalizeUserInput as zb,parseUserCommandEnvelope as _b,registerDisposable as Ob,SDK_ERROR_TELEMETRY_EVENT as Tb}from"@cline/shared";import"@cline/shared/storage";var tV={};w(tV,{isClineAccountActionRequest:()=>z9,executeClineAccountAction:()=>_9,RpcClineAccountService:()=>P6,ClineAccountService:()=>q6});function HO($){if(typeof $!=="object"||$===null||!("error"in $))return;let J=$.error;return typeof J==="string"&&J.trim()?J:void 0}function oV($,J,Q){let Z=HO(Q);if(Z)return Z;let W=J.trim();if(W){let j=W.length>200?`${W.slice(0,200)}...`:W;return`Cline account request failed with status ${$}: ${j}`}return`Cline account request failed with status ${$}`}class q6{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let J=$.apiBaseUrl.trim();if(!J)throw Error("apiBaseUrl is required");this.apiBaseUrl=J,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 J=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(J)}/balance`)}async fetchUsageTransactions($){let J=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(J)}/usages`)).items??[]}async fetchPaymentTransactions($){let J=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(J)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchOrganization($){let J=$.trim();if(!J)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(J)}`)}async fetchOrganizationBalance($){let J=$.trim();if(!J)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(J)}/balance`)}async fetchOrganizationUsageTransactions($){let J=$.organizationId.trim();if(!J)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(J,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(J)}/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 J=$?.trim();if(J)return J;let Z=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(Z)return Z;let W=await this.fetchMe();if(!W.id?.trim())throw Error("Unable to resolve current user id");return W.id}async resolveOrganizationMemberId($,J){let Q=J?.trim();if(Q)return Q;let W=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(W)return W;let X=(await this.fetchUserOrganizations()).find((f)=>f.organizationId===$)?.memberId;if(!X?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return X}async request($,J){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let Z=this.getHeadersFn?await this.getHeadersFn():{},W=new AbortController,j=setTimeout(()=>W.abort(),this.requestTimeoutMs);try{let X=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:J?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...Z??{}},body:J?.body!==void 0?JSON.stringify(J.body):void 0,signal:W.signal});if(X.status===204||J?.expectNoContent){if(!X.ok)throw Error(`Cline account request failed with status ${X.status}`);return}let f=await X.text(),Y;if(f.trim())try{Y=JSON.parse(f)}catch{if(!X.ok)throw Error(oV(X.status,f,void 0));throw Error("Cline account response was not valid JSON")}if(!X.ok)throw Error(oV(X.status,f,Y));if(typeof Y==="object"&&Y!==null){let V=Y;if(typeof V.success==="boolean"){if(!V.success)throw Error(V.error||"Cline account request failed");if(V.data!==void 0)return V.data}}if(Y===void 0||Y===null)throw Error("Cline account response payload was empty");return Y}finally{clearTimeout(j)}}}function z9($){return $.action==="clineAccount"}async function _9($,J){switch($.operation){case"fetchMe":return J.fetchMe();case"fetchBalance":return J.fetchBalance($.userId);case"fetchUsageTransactions":return J.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return J.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return J.fetchUserOrganizations();case"fetchOrganizationBalance":return J.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return J.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await J.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return J.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class P6{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 J=$.trim();if(!J)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:J})}async fetchOrganizationUsageTransactions($){let J=$.organizationId.trim();if(!J)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:J,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var eV={};w(eV,{createOAuthClientCallbacks:()=>M8});function M8($){return{onAuth:({url:J,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(J)).catch((Z)=>{$.onOpenUrlError?.({url:J,error:Z})})}catch(Z){$.onOpenUrlError?.({url:J,error:Z})}$.onOutput?.(J)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}var cA={};w(cA,{ClineCore:()=>UJ});function $H($){if($===!0)return{};if(!$)return;return $}function JH($){if($==="user")return"global";return $}class d7{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let J=this.getService().ingestEvent($);return{event:J.event,duplicate:J.duplicate,matchedSpecIds:J.matchedSpecs.map((Q)=>Q.specId),queuedRuns:J.queuedRuns,suppressions:J.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function QH($){let{host:J}=$;return{async startSession(Q){let Z=(Q.cwd?.trim()||Q.workspaceRoot).trim(),W=await J.startSession({source:Q.source?.trim()||U0.CLI,interactive:!1,config:{providerId:L8(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:Z,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:KO(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,Z){let W=await J.runTurn({sessionId:Q,prompt:Z.prompt,userImages:Z.attachments?.userImages,userFiles:Z.attachments?.userFiles?.map((j)=>j.content),delivery:Z.delivery});if(!W)throw Error("ClineCore automation runtime returned no result");return{result:AO(W)}},async abortSession(Q){return await J.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await J.stopSession(Q),{applied:!0}}}}function O9($){let J=BO($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),Z=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),W=$.context?.logger??$.logger,j=$.context?.telemetry??$.telemetry;if(!J&&!Q&&!Z&&!W&&!j)return $.context;return{...$.context??{},...Q?{client:Q}:{},...Z?{user:Z}:{},...W?{logger:W}:{},...j?{telemetry:j}:{},...J?{automation:J}:{}}}function BO($,J){if(!$)return;return{ingestEvent:(Q)=>{J.ingestEvent(Q)}}}function AO($){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((J)=>({name:J.name,input:J.input,output:J.output,error:J.error,durationMs:J.durationMs}))}}function KO($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var rH={};w(rH,{createCoreSettingsService:()=>K2,CoreSettingsService:()=>O$});import{existsSync as v9}from"node:fs";import{basename as dH,isAbsolute as vT,relative as cT}from"node:path";var UH={};w(UH,{resolveWorkflowsConfigSearchPaths:()=>k6,resolveSkillsConfigSearchPaths:()=>b6,resolveRulesConfigSearchPaths:()=>h6,parseWorkflowConfigFromMarkdown:()=>E6,parseSkillConfigFromMarkdown:()=>C6,parseRuleConfigFromMarkdown:()=>y6,createWorkflowsConfigDefinition:()=>g6,createUserInstructionConfigService:()=>_$,createSkillsConfigDefinition:()=>I6,createRulesConfigDefinition:()=>x6,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>S6,UnifiedConfigFileWatcher:()=>X2,SKILLS_CONFIG_DIRECTORY_NAME:()=>w6,RULES_CONFIG_DIRECTORY_NAME:()=>w9});import{createHash as GO}from"node:crypto";import{watch as FO}from"node:fs";import{readdir as DO,readFile as UO}from"node:fs/promises";import{join as RO}from"node:path";function LO($){return GO("sha1").update($).digest("hex")}function jH($){return Boolean($&&typeof $==="object"&&"code"in $)}function ZH($){return jH($)&&$.code==="ENOENT"}function WH($){return jH($)&&($.code==="EACCES"||$.code==="EPERM")}class X2{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($,J){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=J?.debounceMs??75,this.emitParseErrors=J?.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 Z of Q.directories){let W=this.baseTypesByDirectory.get(Z);if(W)W.add(Q.type);else this.baseTypesByDirectory.set(Z,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 J=this.definitionsByType.get($);if(!J)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(J)})}getSnapshot($){let J=this.recordsByType.get($);return new Map([...J?.entries()??[]].map(([Q,Z])=>[Q,{...Z}]))}getAllSnapshots(){let $=new Map;for(let[J,Q]of this.recordsByType.entries())$.set(J,new Map([...Q.entries()].map(([Z,W])=>[Z,{...W}])));return $}emit($){for(let J of this.listeners)J($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[J,Q]of this.watchersByDirectory.entries()){if($.has(J))continue;Q.close(),this.watchersByDirectory.delete(J)}this.watchedTypesByDirectory=$;for(let J of $.keys()){if(this.watchersByDirectory.has(J))continue;try{let Q=FO(J,()=>{let Z=this.watchedTypesByDirectory.get(J);if(!Z)return;for(let W of Z)this.pendingTypes.add(W);this.scheduleFlush()});this.watchersByDirectory.set(J,Q),Q.on("error",(Z)=>{let W=this.watchedTypesByDirectory.get(J);if(!W)return;for(let j of W)this.emit({kind:"error",type:j,error:Z,filePath:J})})}catch(Q){if(!ZH(Q)&&!WH(Q)){let Z=$.get(J);if(!Z)continue;for(let W of Z)this.emit({kind:"error",type:W,error:Q,filePath:J})}}}}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 J of $){let Q=this.definitionsByType.get(J);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:J,discoveredDirectories:Q}=await this.loadDefinition($),Z=this.recordsByType.get($.type)??new Map;for(let[W,j]of Z.entries()){if(J.has(W))continue;this.emit({kind:"remove",type:$.type,id:W,filePath:j.filePath})}for(let[W,j]of J.entries()){let X=Z.get(W);if(X&&X.filePath===j.filePath&&X.fingerprint===j.fingerprint)continue;this.emit({kind:"upsert",record:{type:j.type,id:W,item:j.item,filePath:j.filePath}})}if(this.recordsByType.set($.type,J),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let J=new Map,Q=new Set;for(let Z of $.directories){Q.add(Z);let W=$.discoverFiles?await $.discoverFiles(Z):await this.readDirectoryFileCandidates(Z);for(let j of W){let{fileName:X,filePath:f}=j;if(Q.add(j.directoryPath),$.includeFile&&!$.includeFile(X,f))continue;try{let Y=await UO(f,"utf8"),V={type:$.type,directoryPath:j.directoryPath,fileName:X,filePath:f,content:Y},H=$.parseFile(V),B=$.resolveId(H,V).trim();if(!B)continue;J.set(B,{type:$.type,id:B,item:H,filePath:f,fingerprint:LO(Y)})}catch(Y){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:Y,filePath:f})}}}return{records:J,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[J,Q]of this.baseTypesByDirectory.entries())$.set(J,new Set(Q));for(let[J,Q]of this.discoveredDirectoriesByType.entries())for(let Z of Q){let W=$.get(Z);if(W)W.add(J);else $.set(Z,new Set([J]))}return $}async readDirectoryFileCandidates($){try{return(await DO($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:RO($,Q.name)})).sort((Q,Z)=>Q.fileName.localeCompare(Z.fileName))}catch(J){if(ZH(J)||WH(J))return[];throw J}}}import{readdir as p7,readFile as zO,stat as l7}from"node:fs/promises";import{basename as v1,dirname as _O,extname as M9,join as C0,resolve as N6}from"node:path";import{AGENTS_RULES_FILE_NAME as XH,RULES_CONFIG_DIRECTORY_NAME as w9,resolveGlobalAgentsRulesPath as OO,resolveRulesConfigSearchPaths as TO,resolveSkillsConfigSearchPaths as MO,resolveWorkflowsConfigSearchPaths as qO,SKILLS_CONFIG_DIRECTORY_NAME as w6,WORKFLOWS_CONFIG_DIRECTORY_NAME as S6}from"@cline/shared/storage";import PO from"yaml";var T9="SKILL.md",NO="managed.json",wO=new Set([".md",".markdown",".txt"]);function r7($){return $.trim().toLowerCase()}function q8($){let J=$;return J?.code==="ENOENT"||J?.code==="EACCES"||J?.code==="EPERM"||J?.code==="ELOOP"}function q9($){return wO.has(M9($).toLowerCase())}function fH($){let J=[],Q=new Set;for(let Z of $){let W=N6(Z);if(Q.has(W))continue;Q.add(W),J.push(Z)}return J}function SO($){let J=[...$?.directories??b6($?.workspacePath)];if($?.pluginSkillDirectories)J.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)J.push(...RV({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return fH(J)}async function i7($){try{let J=await p7($,{withFileTypes:!0}),Q=[];for(let Z of J){if(!Z.isDirectory())continue;let W=C0($,Z.name),j=C0(W,NO);try{let X=await zO(j,"utf8"),f=JSON.parse(X);if(f&&typeof f==="object")Q.push(W)}catch(X){if(q8(X))continue;if(X?.name==="SyntaxError")continue;throw X}}return Q.sort((Z,W)=>Z.localeCompare(W))}catch(J){if(q8(J))return[];throw J}}function n7($){let J=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(J);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,Z,W]=Q;try{let j=PO.parse(Z);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:W,hadFrontmatter:!0}}catch(j){let X=j instanceof Error?j.message:String(j);return{data:{},body:$,hadFrontmatter:!0,parseError:X}}}function P9($,J,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${J}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${J}' must be a string.`);let Z=$.trim();if(!Z&&Q)throw Error(`Frontmatter field '${J}' cannot be empty.`);return Z||void 0}function P8($,J){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${J}' must be a boolean.`);return $}function CO($,J){if(v1($.filePath).toLowerCase()!==XH.toLowerCase())return v1($.filePath,M9($.filePath));if(J&&N6($.filePath)===N6(J,XH))return"Workspace AGENTS.md";if(N6($.filePath)===N6(OO()))return"Global AGENTS.md";return v1($.filePath,M9($.filePath))}function C6($,J){let{data:Q,body:Z,parseError:W}=n7($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let j=Z.trim();if(!j)throw Error("Missing instructions body in skill file.");let f=P9(Q.name,"name",!1)??J.trim();if(!f)throw Error("Missing skill name.");return{name:f,description:P9(Q.description,"description",!1),disabled:P8(Q.disabled,"disabled")??(P8(Q.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Q}}function y6($,J){let{data:Q,body:Z,parseError:W}=n7($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let j=Z.trim();if(!j)throw Error("Missing instructions body in rule file.");let X=P9(Q.name,"name",!1)??J.trim();if(!X)throw Error("Missing rule name.");return{name:X,disabled:P8(Q.disabled,"disabled")??(P8(Q.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Q}}function E6($,J){let{data:Q,body:Z,parseError:W}=n7($);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let j=Z.trim();if(!j)throw Error("Missing instructions body in workflow file.");let X=P9(Q.name,"name",!1)??J.trim();if(!X)throw Error("Missing workflow name.");return{name:X,disabled:P8(Q.disabled,"disabled")??(P8(Q.enabled,"enabled")===!1?!0:void 0),instructions:j,frontmatter:Q}}function b6($){return MO($)}function h6($){return TO($)}function k6($){return qO($)}async function YH($){if(v1($)===".cline"){let J=await i7($);return(await Promise.all(J.map((Z)=>YH(C0(Z,w6))))).flat()}try{let J=await p7($,{withFileTypes:!0}),Q=[];for(let Z of J){if(Z.isFile()&&Z.name===T9){Q.push({directoryPath:$,fileName:Z.name,filePath:C0($,Z.name)});continue}let W=C0($,Z.name);if(Z.isDirectory()||Z.isSymbolicLink()&&await l7(W).then((X)=>X.isDirectory()).catch((X)=>{if(q8(X))return!1;throw X}))Q.push({directoryPath:W,fileName:T9,filePath:C0(W,T9)})}return Q}catch(J){if(q8(J))return[];throw J}}async function N9($){if(v1($)===".cline"){let J=await i7($);return(await Promise.all(J.map((Z)=>N9(C0(Z,"rules.md"))))).flat()}try{if((await l7($)).isFile())return[{directoryPath:_O($),fileName:v1($),filePath:$}]}catch(J){if(!q8(J))throw J}try{let Q=(await p7($,{withFileTypes:!0})).filter((W)=>W.isFile()&&q9(W.name)).map((W)=>({directoryPath:$,fileName:W.name,filePath:C0($,W.name)})),Z=C0($,"AGENTS.md");try{if((await l7(Z)).isFile()){if(!Q.some((X)=>X.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:Z})}}catch{}return Q}catch(J){if(q8(J))return[];throw J}}async function yO($){if(v1($)===".cline"){let J=await i7($);return(await Promise.all(J.map((Z)=>N9(C0(Z,S6))))).flat()}return N9($)}function I6($){let J=SO($),Q=$?.workspacePath?C0($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?fH([...J,Q]):J,discoverFiles:YH,includeFile:(Z)=>Z===T9,parseFile:(Z)=>C6(Z.content,v1(Z.directoryPath)),resolveId:(Z)=>r7(Z.name)}}function x6($){let J=$?.directories??h6($?.workspacePath),Q=$?.workspacePath?C0($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...J,Q]:J,discoverFiles:N9,includeFile:(Z,W)=>Z===".clinerules"||q9(Z)||q9(W),parseFile:(Z)=>y6(Z.content,CO(Z,$?.workspacePath)),resolveId:(Z)=>r7(Z.name)}}function g6($){let J=$?.directories??k6($?.workspacePath),Q=$?.workspacePath?C0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...J,Q]:J,discoverFiles:yO,includeFile:(Z)=>q9(Z),parseFile:(Z)=>E6(Z.content,v1(Z.filePath,M9(Z.filePath))),resolveId:(Z)=>r7(Z.name)}}function VH($){let J=[I6($?.skills),x6($?.rules),g6($?.workflows)];return new X2(J,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as HH}from"@cline/shared";function EO($,J){if($.description?.trim())return HH($.description,".");if(J==="workflow")return;return HH($.instructions,".")}function bO($){return $.disabled!==!0}function BH($,J){return[...$.getSnapshot(J).entries()].map(([Q,Z])=>({id:Q,record:Z})).filter(({record:Q})=>bO(Q.item)).map(({id:Q,record:Z})=>({id:Q,name:Z.item.name,instructions:Z.item.instructions,description:EO(Z.item,J),kind:J})).sort((Q,Z)=>Q.name.localeCompare(Z.name))}function m6($){let J=new Map;for(let Q of[...BH($,"workflow"),...BH($,"skill")])if(!J.has(Q.name))J.set(Q.name,Q);return[...J.values()].sort((Q,Z)=>Q.name.localeCompare(Z.name))}function AH($,J){if(!$.startsWith("/")||$.length<2)return $;let Q=$.match(/^\/(\S+)/);if(!Q)return $;let Z=Q[1];if(!Z)return $;let W=Z.length+1,j=$.slice(W),X=m6(J).find((f)=>f.name===Z);return X?`${X.instructions}${j}`:$}var GH={};w(GH,{mergeRulesForSystemPrompt:()=>w8,loadRulesForSystemPromptFromWatcher:()=>a7,listEnabledRulesFromWatcher:()=>KH,isRuleEnabled:()=>S9,formatRulesForSystemPrompt:()=>N8});function S9($){return $.disabled!==!0}function N8($){if($.length===0)return"";return`
205
205
 
206
206
  # Rules
207
207
  ${$.map((Q)=>`## ${Q.name}
@@ -209,24 +209,24 @@ ${Q.instructions}`).join(`
209
209
 
210
210
  `)}`}function w8($,J){let Q=$?.trim(),Z=J?.trim();if(Q&&Z)return`${Q}
211
211
 
212
- ${Z}`;return Q||Z||void 0}function KH($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(SQ).sort((Q,Z)=>Q.name.localeCompare(Z.name))}function aW($){return N8(KH($))}function CQ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function hO($){if(!$||$.length===0)return;let J=$.map(CQ).filter((Q)=>Q.length>0);return J.length>0?new Set(J):void 0}function kO($,J,Q){if(!Q)return!0;let Z=CQ($),W=CQ(J),j=Z.includes(":")?Z.split(":").at(-1)??Z:Z,X=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(Z)||Q.has(W)||Q.has(j)||Q.has(X)}function v6($,J){let Q=hO(J);return[...$.getSnapshot("skill").entries()].map(([W,j])=>{let X=j.item;return{id:W,name:X.name.trim(),description:X.description?.trim(),disabled:X.disabled===!0,skill:X}}).filter((W)=>kO(W.id,W.name,Q))}function IO($,J){return v6($,J).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,Z)=>Q.localeCompare(Z))}function xO($,J,Q){let Z=CQ(J);if(!Z)return{error:"Missing skill name."};let W=v6($,Q),j=W.find((H)=>H.id===Z);if(j){let{skill:H}=j;if(H.disabled===!0)return{error:`Skill "${H.name}" is configured but disabled.`};return{id:j.id,skill:H}}let X=Z.includes(":")?Z.split(":").at(-1)??Z:Z,f=W.filter(({id:H})=>{if(H===X)return!0;return H.endsWith(`:${X}`)}),Y=f.filter(({skill:H})=>H.disabled!==!0);if(Y.length===1){let{id:H,skill:B}=Y[0];return{id:H,skill:B}}if(Y.length>1)return{error:`Skill "${J}" is ambiguous. Use one of: ${Y.map(({id:H})=>H).join(", ")}`};if(f.length===1){let{skill:H}=f[0];return{error:`Skill "${H.name}" is configured but disabled.`}}if(f.length>1)return{error:`Skill "${J}" is ambiguous, and all matches are disabled: ${f.map(({id:H})=>H).join(", ")}`};let V=IO($,Q);return{error:V.length>0?`Skill "${J}" not found. Available skills: ${V.join(", ")}`:"No skills are currently available."}}function sW($,J=Promise.resolve(),Q){let Z=new Set,W=async(j,X)=>{await J;let f=xO($,j,Q);if("error"in f)return f.error;let{id:Y,skill:V}=f;if(Z.has(Y))return`Skill "${V.name}" is already running.`;Z.add(Y);try{let H=X?.trim(),B=H?`
212
+ ${Z}`;return Q||Z||void 0}function KH($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(S9).sort((Q,Z)=>Q.name.localeCompare(Z.name))}function a7($){return N8(KH($))}function C9($){return $.trim().replace(/^\/+/,"").toLowerCase()}function hO($){if(!$||$.length===0)return;let J=$.map(C9).filter((Q)=>Q.length>0);return J.length>0?new Set(J):void 0}function kO($,J,Q){if(!Q)return!0;let Z=C9($),W=C9(J),j=Z.includes(":")?Z.split(":").at(-1)??Z:Z,X=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(Z)||Q.has(W)||Q.has(j)||Q.has(X)}function v6($,J){let Q=hO(J);return[...$.getSnapshot("skill").entries()].map(([W,j])=>{let X=j.item;return{id:W,name:X.name.trim(),description:X.description?.trim(),disabled:X.disabled===!0,skill:X}}).filter((W)=>kO(W.id,W.name,Q))}function IO($,J){return v6($,J).filter((Q)=>!Q.disabled).map((Q)=>Q.name.trim()).filter((Q)=>Q.length>0).sort((Q,Z)=>Q.localeCompare(Z))}function xO($,J,Q){let Z=C9(J);if(!Z)return{error:"Missing skill name."};let W=v6($,Q),j=W.find((H)=>H.id===Z);if(j){let{skill:H}=j;if(H.disabled===!0)return{error:`Skill "${H.name}" is configured but disabled.`};return{id:j.id,skill:H}}let X=Z.includes(":")?Z.split(":").at(-1)??Z:Z,f=W.filter(({id:H})=>{if(H===X)return!0;return H.endsWith(`:${X}`)}),Y=f.filter(({skill:H})=>H.disabled!==!0);if(Y.length===1){let{id:H,skill:B}=Y[0];return{id:H,skill:B}}if(Y.length>1)return{error:`Skill "${J}" is ambiguous. Use one of: ${Y.map(({id:H})=>H).join(", ")}`};if(f.length===1){let{skill:H}=f[0];return{error:`Skill "${H.name}" is configured but disabled.`}}if(f.length>1)return{error:`Skill "${J}" is ambiguous, and all matches are disabled: ${f.map(({id:H})=>H).join(", ")}`};let V=IO($,Q);return{error:V.length>0?`Skill "${J}" not found. Available skills: ${V.join(", ")}`:"No skills are currently available."}}function s7($,J=Promise.resolve(),Q){let Z=new Set,W=async(j,X)=>{await J;let f=xO($,j,Q);if("error"in f)return f.error;let{id:Y,skill:V}=f;if(Z.has(Y))return`Skill "${V.name}" is already running.`;Z.add(Y);try{let H=X?.trim(),B=H?`
213
213
  <command-args>${H}</command-args>`:"",A=V.description?.trim()?`Description: ${V.description.trim()}
214
214
 
215
215
  `:"";return`<command-name>${V.name}</command-name>${B}
216
216
  <command-instructions>
217
217
  ${A}${V.instructions}
218
- </command-instructions>`}finally{Z.delete(Y)}};return Object.defineProperty(W,"configuredSkills",{get:()=>v6($,Q).map(({skill:j,...X})=>X),enumerable:!0,configurable:!1}),W}function FH($){let J=$.watcherReady??Promise.resolve();return{name:"cline-user-instructions",manifest:{capabilities:[$.includeRules?"rules":void 0,$.registerSkillsTool?"tools":void 0,$.includeSkills||$.includeWorkflows?"commands":void 0].filter((Z)=>Boolean(Z))},async setup(Z){if(await J,$.includeRules)Z.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>aW($.watcher)});if($.registerSkillsTool)Z.registerTool(v$(sW($.watcher,J,$.allowedSkillNames)));for(let W of m6($.watcher).filter((j)=>j.kind==="skill"&&$.includeSkills||j.kind==="workflow"&&$.includeWorkflows))Z.registerCommand({name:W.name,description:W.description,handler:(j)=>{let X=j.trim();return X?`${W.instructions}
218
+ </command-instructions>`}finally{Z.delete(Y)}};return Object.defineProperty(W,"configuredSkills",{get:()=>v6($,Q).map(({skill:j,...X})=>X),enumerable:!0,configurable:!1}),W}function FH($){let J=$.watcherReady??Promise.resolve();return{name:"cline-user-instructions",manifest:{capabilities:[$.includeRules?"rules":void 0,$.registerSkillsTool?"tools":void 0,$.includeSkills||$.includeWorkflows?"commands":void 0].filter((Z)=>Boolean(Z))},async setup(Z){if(await J,$.includeRules)Z.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>a7($.watcher)});if($.registerSkillsTool)Z.registerTool(v$(s7($.watcher,J,$.allowedSkillNames)));for(let W of m6($.watcher).filter((j)=>j.kind==="skill"&&$.includeSkills||j.kind==="workflow"&&$.includeWorkflows))Z.registerCommand({name:W.name,description:W.description,handler:(j)=>{let X=j.trim();return X?`${W.instructions}
219
219
 
220
- ${X}`:W.instructions}})}}}class DH{watcher;ready;stopped=!1;constructor($){this.watcher=VH($)}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(([J,Q])=>({type:$,id:J,filePath:Q.filePath,item:Q.item}))}listRuntimeCommands(){return m6(this.watcher)}resolveRuntimeSlashCommand($){return AH($,this.watcher)}hasConfiguredSkills($){return v6(this.watcher,$).some((J)=>!J.disabled)}createSkillsExecutor($){return sW(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return FH({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function _$($){return new DH($)}import{readFile as gO,writeFile as mO}from"node:fs/promises";import LH from"yaml";function vO($){let J=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(J);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,Z,W]=Q,j=LH.parse(Z);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:W,hadFrontmatter:!0}}function RH($,J){return`---
220
+ ${X}`:W.instructions}})}}}class DH{watcher;ready;stopped=!1;constructor($){this.watcher=VH($)}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(([J,Q])=>({type:$,id:J,filePath:Q.filePath,item:Q.item}))}listRuntimeCommands(){return m6(this.watcher)}resolveRuntimeSlashCommand($){return AH($,this.watcher)}hasConfiguredSkills($){return v6(this.watcher,$).some((J)=>!J.disabled)}createSkillsExecutor($){return s7(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),$)}createExtension($){return FH({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function _$($){return new DH($)}import{readFile as gO,writeFile as mO}from"node:fs/promises";import LH from"yaml";function vO($){let J=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,Q=$.match(J);if(!Q)return{data:{},body:$,hadFrontmatter:!1};let[,Z,W]=Q,j=LH.parse(Z);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:W,hadFrontmatter:!0}}function RH($,J){return`---
221
221
  ${LH.stringify($).trimEnd()}
222
222
  ---
223
- ${J}`}function cO($,J){let{data:Q,body:Z,hadFrontmatter:W}=vO($);if(!W&&J)return $;if(J){if(delete Q.disabled,Q.enabled===!1)delete Q.enabled;if(Object.keys(Q).length===0)return Z;return RH(Q,Z)}return Q.disabled=!0,RH(Q,Z)}async function zH({filePath:$,enabled:J}){let Q=await gO($,"utf8"),Z=cO(Q,J);return await mO($,Z),{filePath:$,enabled:J,disabled:!J}}var mH={};w(mH,{updateMcpServerOAuthState:()=>H2,setMcpServerDisabled:()=>Y2,resolvePluginMcpServerRegistrations:()=>IQ,resolveMcpServerRegistrations:()=>A1,resolveDefaultMcpSettingsPath:()=>K0,registerMcpServersFromSettingsFile:()=>B2,normalizePluginMcpServerRegistration:()=>Q7,loadMcpSettingsFile:()=>f2,listMcpServerOAuthStatuses:()=>u6,hasMcpSettingsFile:()=>c1,getMcpServerOAuthState:()=>V2,createMcpTools:()=>E8,createDisabledMcpToolPolicy:()=>d6,createDisabledMcpToolPolicies:()=>gQ,createDefaultMcpServerClientFactory:()=>C8,authorizeMcpServerOAuth:()=>hQ,InMemoryMcpManager:()=>A2});import{spawn as GT}from"node:child_process";import{StringDecoder as bH}from"node:string_decoder";import{UnauthorizedError as SH}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as FT}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as WT}from"node:crypto";import{UnauthorizedError as jT}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as XT}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as fT}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as YT}from"@modelcontextprotocol/sdk/client/streamableHttp.js";yQ();var VT="/mcp/oauth/callback",HT=[1456,1457,1458],BT=300000;function AT($){if($ instanceof Error){let J=$.message.trim();if(J.length>0)return J}return String($)}function KT($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function bQ($){let J={};try{J=V2($.serverName,{filePath:$.settingsPath})??{}}catch{J={}}let Q,Z,W=async(X)=>{let f=S8(X(J))??{};try{J=H2($.serverName,()=>f,{filePath:$.settingsPath})}catch{J=f}};return{provider:{get redirectUrl(){return J.redirectUrl??$.redirectUrl},get clientMetadata(){return KT(J.redirectUrl??$.redirectUrl)},state:()=>{return Z=WT(),Z},clientInformation:()=>J.clientInformation,saveClientInformation:async(X)=>{await W((f)=>({...f,clientInformation:X,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>J.tokens,saveTokens:async(X)=>{await W((f)=>({...f,tokens:X,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:Date.now()}))},redirectToAuthorization:async(X)=>{Q=X.toString(),await $.onAuthorizationUrl?.(Q)},saveCodeVerifier:async(X)=>{await W((f)=>({...f,codeVerifier:X,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!J.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return J.codeVerifier},invalidateCredentials:async(X)=>{await W((f)=>{if(X==="all")return{lastError:f.lastError,redirectUrl:f.redirectUrl};return{...f,...X==="client"?{clientInformation:void 0}:{},...X==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...X==="verifier"?{codeVerifier:void 0}:{},...X==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(X)=>{await W((f)=>({...f,discoveryState:X}))},discoveryState:()=>J.discoveryState},getLastAuthorizationUrl:()=>Q,getLastOAuthState:()=>Z,resetInteractiveState:async()=>{await W((X)=>({...X,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(X)=>{await W((f)=>({...f,lastError:X}))},clearError:async()=>{await W((X)=>({...X,lastError:void 0}))}}}function EQ($){let J=$.registration.transport;if(J.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let Q=J.headers?{headers:J.headers}:void 0;if(J.type==="sse")return new fT(new URL(J.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch});return new YT(new URL(J.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch})}function wH($){return new XT({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function hQ($){let J=$.serverName.trim();if(!J)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Q}=await Promise.resolve().then(() => (yQ(),NH)),Z=Q({filePath:$.filePath}).find((Y)=>Y.name===J);if(!Z)throw Error(`MCP server "${J}" is not configured.`);if(Z.disabled)throw Error(`MCP server "${J}" is disabled. Enable it before running OAuth.`);if(Z.transport.type==="stdio")throw Error(`MCP server "${J}" uses stdio transport and does not support OAuth browser flow.`);let W=await J1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:HT,callbackPath:$.callbackPath??VT,timeoutMs:$.timeoutMs??BT,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!W.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let j=bQ({settingsPath:$.filePath,serverName:J,redirectUrl:W.callbackUrl,onAuthorizationUrl:async(Y)=>{await $.openUrl?.(Y)}});await j.resetInteractiveState();let X=wH($),f;try{let Y=EQ({registration:Z,oauthProvider:j.provider,fetch:$.fetch});try{return await X.connect(Y),await X.listTools(),await j.clearError(),{serverName:J,authorized:!0,message:`MCP server "${J}" is already authorized.`}}catch(V){if(!(V instanceof jT))throw V;if(!j.getLastAuthorizationUrl())throw Error(`MCP server "${J}" did not provide an authorization URL.`);let B=await W.waitForCallback();if(!B)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(B.error)throw Error(`OAuth authorization failed: ${B.error}`);if(!B.code)throw Error("OAuth callback did not include an authorization code.");let A=j.getLastOAuthState();if(!A)throw Error(`MCP server "${J}" did not start an OAuth stateful authorization flow.`);if(B.state!==A)throw Error("OAuth authorization failed: state mismatch.");await Y.finishAuth(B.code),f=wH($);let K=EQ({registration:Z,oauthProvider:j.provider,fetch:$.fetch});return await f.connect(K),await f.listTools(),await j.clearError(),{serverName:J,authorized:!0,message:`MCP server "${J}" OAuth authorization completed.`}}}catch(Y){let V=AT(Y);throw await j.markError(V),Error(V)}finally{await X.close().catch(()=>{return}),await f?.close().catch(()=>{return}),W.close()}}var DT="2024-11-05",UT=5000,RT=1500,CH="http://127.0.0.1:1456/mcp/oauth/callback";function kQ($){return $ instanceof Error?$.message:String($)}function yH($){let J=Buffer.from(JSON.stringify($),"utf8"),Q=Buffer.from(`Content-Length: ${J.byteLength}\r
223
+ ${J}`}function cO($,J){let{data:Q,body:Z,hadFrontmatter:W}=vO($);if(!W&&J)return $;if(J){if(delete Q.disabled,Q.enabled===!1)delete Q.enabled;if(Object.keys(Q).length===0)return Z;return RH(Q,Z)}return Q.disabled=!0,RH(Q,Z)}async function zH({filePath:$,enabled:J}){let Q=await gO($,"utf8"),Z=cO(Q,J);return await mO($,Z),{filePath:$,enabled:J,disabled:!J}}var mH={};w(mH,{updateMcpServerOAuthState:()=>H2,setMcpServerDisabled:()=>Y2,resolvePluginMcpServerRegistrations:()=>I9,resolveMcpServerRegistrations:()=>A1,resolveDefaultMcpSettingsPath:()=>K0,registerMcpServersFromSettingsFile:()=>B2,normalizePluginMcpServerRegistration:()=>QW,loadMcpSettingsFile:()=>f2,listMcpServerOAuthStatuses:()=>u6,hasMcpSettingsFile:()=>c1,getMcpServerOAuthState:()=>V2,createMcpTools:()=>E8,createDisabledMcpToolPolicy:()=>d6,createDisabledMcpToolPolicies:()=>g9,createDefaultMcpServerClientFactory:()=>C8,authorizeMcpServerOAuth:()=>h9,InMemoryMcpManager:()=>A2});import{spawn as GT}from"node:child_process";import{StringDecoder as bH}from"node:string_decoder";import{UnauthorizedError as SH}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as FT}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as WT}from"node:crypto";import{UnauthorizedError as jT}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as XT}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as fT}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as YT}from"@modelcontextprotocol/sdk/client/streamableHttp.js";y9();var VT="/mcp/oauth/callback",HT=[1456,1457,1458],BT=300000;function AT($){if($ instanceof Error){let J=$.message.trim();if(J.length>0)return J}return String($)}function KT($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function b9($){let J={};try{J=V2($.serverName,{filePath:$.settingsPath})??{}}catch{J={}}let Q,Z,W=async(X)=>{let f=S8(X(J))??{};try{J=H2($.serverName,()=>f,{filePath:$.settingsPath})}catch{J=f}};return{provider:{get redirectUrl(){return J.redirectUrl??$.redirectUrl},get clientMetadata(){return KT(J.redirectUrl??$.redirectUrl)},state:()=>{return Z=WT(),Z},clientInformation:()=>J.clientInformation,saveClientInformation:async(X)=>{await W((f)=>({...f,clientInformation:X,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>J.tokens,saveTokens:async(X)=>{await W((f)=>({...f,tokens:X,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:Date.now()}))},redirectToAuthorization:async(X)=>{Q=X.toString(),await $.onAuthorizationUrl?.(Q)},saveCodeVerifier:async(X)=>{await W((f)=>({...f,codeVerifier:X,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!J.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return J.codeVerifier},invalidateCredentials:async(X)=>{await W((f)=>{if(X==="all")return{lastError:f.lastError,redirectUrl:f.redirectUrl};return{...f,...X==="client"?{clientInformation:void 0}:{},...X==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...X==="verifier"?{codeVerifier:void 0}:{},...X==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(X)=>{await W((f)=>({...f,discoveryState:X}))},discoveryState:()=>J.discoveryState},getLastAuthorizationUrl:()=>Q,getLastOAuthState:()=>Z,resetInteractiveState:async()=>{await W((X)=>({...X,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(X)=>{await W((f)=>({...f,lastError:X}))},clearError:async()=>{await W((X)=>({...X,lastError:void 0}))}}}function E9($){let J=$.registration.transport;if(J.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let Q=J.headers?{headers:J.headers}:void 0;if(J.type==="sse")return new fT(new URL(J.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch});return new YT(new URL(J.url),{authProvider:$.oauthProvider,requestInit:Q,fetch:$.fetch})}function wH($){return new XT({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function h9($){let J=$.serverName.trim();if(!J)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:Q}=await Promise.resolve().then(() => (y9(),NH)),Z=Q({filePath:$.filePath}).find((Y)=>Y.name===J);if(!Z)throw Error(`MCP server "${J}" is not configured.`);if(Z.disabled)throw Error(`MCP server "${J}" is disabled. Enable it before running OAuth.`);if(Z.transport.type==="stdio")throw Error(`MCP server "${J}" uses stdio transport and does not support OAuth browser flow.`);let W=await J1({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:HT,callbackPath:$.callbackPath??VT,timeoutMs:$.timeoutMs??BT,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!W.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let j=b9({settingsPath:$.filePath,serverName:J,redirectUrl:W.callbackUrl,onAuthorizationUrl:async(Y)=>{await $.openUrl?.(Y)}});await j.resetInteractiveState();let X=wH($),f;try{let Y=E9({registration:Z,oauthProvider:j.provider,fetch:$.fetch});try{return await X.connect(Y),await X.listTools(),await j.clearError(),{serverName:J,authorized:!0,message:`MCP server "${J}" is already authorized.`}}catch(V){if(!(V instanceof jT))throw V;if(!j.getLastAuthorizationUrl())throw Error(`MCP server "${J}" did not provide an authorization URL.`);let B=await W.waitForCallback();if(!B)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(B.error)throw Error(`OAuth authorization failed: ${B.error}`);if(!B.code)throw Error("OAuth callback did not include an authorization code.");let A=j.getLastOAuthState();if(!A)throw Error(`MCP server "${J}" did not start an OAuth stateful authorization flow.`);if(B.state!==A)throw Error("OAuth authorization failed: state mismatch.");await Y.finishAuth(B.code),f=wH($);let K=E9({registration:Z,oauthProvider:j.provider,fetch:$.fetch});return await f.connect(K),await f.listTools(),await j.clearError(),{serverName:J,authorized:!0,message:`MCP server "${J}" OAuth authorization completed.`}}}catch(Y){let V=AT(Y);throw await j.markError(V),Error(V)}finally{await X.close().catch(()=>{return}),await f?.close().catch(()=>{return}),W.close()}}var DT="2024-11-05",UT=5000,RT=1500,CH="http://127.0.0.1:1456/mcp/oauth/callback";function k9($){return $ instanceof Error?$.message:String($)}function yH($){let J=Buffer.from(JSON.stringify($),"utf8"),Q=Buffer.from(`Content-Length: ${J.byteLength}\r
224
224
  \r
225
225
  `,"utf8");return Buffer.concat([Q,J])}function EH($){return Buffer.from(`${JSON.stringify($)}
226
- `,"utf8")}class $7{buffer="";decoder=new bH("utf8");push($){this.buffer+=this.decoder.write($);let J=[];while(!0){let Q=this.buffer.indexOf(`\r
226
+ `,"utf8")}class $W{buffer="";decoder=new bH("utf8");push($){this.buffer+=this.decoder.write($);let J=[];while(!0){let Q=this.buffer.indexOf(`\r
227
227
  \r
228
- `);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 j=Number.parseInt(W[1],10),X=Q+4,f=X+j;if(this.buffer.length<f)break;J.push(this.buffer.slice(X,f)),this.buffer=this.buffer.slice(f)}return J}}class J7{buffer="";decoder=new bH("utf8");push($){this.buffer+=this.decoder.write($);let J=[];while(!0){let Q=this.buffer.indexOf(`
229
- `);if(Q<0)break;let Z=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),Z.length>0)J.push(Z)}return J}}class hH{registration;process;nextRequestId=1;pending=new Map;framedParser=new $7;newlineParser=new J7;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"],J;for(let Q of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Q);try{await this.request("initialize",{protocolVersion:DT,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},RT),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Q;return}catch(Z){J=Z instanceof Error?Z:Error(String(Z))}}throw J??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((J)=>typeof J?.name==="string"&&typeof J.inputSchema==="object"&&J.inputSchema!==null).map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let J=this.registration.transport;if(J.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${J.type}`);this.framedParser=new $7,this.newlineParser=new J7,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},Z=GT(J.command,J.args??[],{cwd:J.cwd,env:{...process.env,...J.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=Z,Z.stdout.on("data",(W)=>this.handleStdout(W)),Z.stderr.on("data",(W)=>{if(this.process!==Z)return;if(this.stderrBuffer+=W.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),Z.once("error",(W)=>{if(this.process!==Z)return;this.failAllPending(Error(`MCP process error: ${kQ(W)}`))}),Z.once("exit",(W,j)=>{if(this.process!==Z)return;this.connected=!1,this.process=void 0;let X=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${W??"null"}, signal=${j??"null"}).${X}`))})}handleStdout($){try{let J=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of J){let Z=JSON.parse(Q);if(typeof Z.id!=="number")continue;let W=this.pending.get(Z.id);if(!W)continue;if(this.pending.delete(Z.id),clearTimeout(W.timeout),Z.error){let j=Z.error.message||`MCP request failed with code ${Z.error.code??"unknown"}`;W.reject(Error(j));continue}W.resolve(Z.result)}}catch(J){this.handleProtocolFailure(J)}}handleProtocolFailure($){let J=this.process;if(!J)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}": ${kQ($)}.${Q}`)),J.kill()}async request($,J,Q=UT){let Z=this.process;if(!Z?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let W=this.nextRequestId++,j={jsonrpc:"2.0",id:W,method:$,...J?{params:J}:{}},X=new Promise((f,Y)=>{let V=setTimeout(()=>{this.pending.delete(W),Y(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Q);this.pending.set(W,{resolve:f,reject:Y,timeout:V})});try{Z.stdin.write(this.protocolMode==="framed"?yH(j):EH(j))}catch(f){let Y=this.pending.get(W);if(Y)clearTimeout(Y.timeout),this.pending.delete(W);throw f}return X}notify($,J){let Q=this.process;if(!Q?.stdin.writable)return;let Z={jsonrpc:"2.0",method:$,...J?{params:J}:{}};Q.stdin.write(this.protocolMode==="framed"?yH(Z):EH(Z))}failAllPending($){for(let[J,Q]of this.pending)clearTimeout(Q.timeout),this.pending.delete(J),Q.reject($)}}class kH{registration;options;client;authContext;constructor($,J){this.registration=$;this.options=J}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 $=bQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??CH});this.authContext=$;try{let J=new FT({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Q=EQ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await J.connect(Q),await $.clearError(),this.client=J}catch(J){let Q=J instanceof SH?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):kQ(J);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(J){return await this.handleOperationError(J)}}async callTool($){let J=await this.ensureConnectedClient();try{return await J.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 J=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${J} Run authorizeMcpServerOAuth for this server.`;return`${J} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let J=this.authContext??bQ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??CH}),Q=$ instanceof SH?this.formatUnauthorizedMessage(J.getLastAuthorizationUrl()):kQ($);throw await J.markError(Q),Error(Q)}}function C8($={}){return(J)=>J.transport.type==="stdio"?new hH(J):new kH(J,$)}yQ();function l0(){return Date.now()}function LT($){return $.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema}))}class A2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let J=this.servers.get($.name);if(!J){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:l0()});return}let Q=JSON.stringify(J.registration.transport)!==JSON.stringify($.transport);if(J.registration={...$},J.updatedAt=l0(),Q)await this.disconnectState(J),J.client=void 0,J.toolCache=void 0,J.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let J=this.requireServer($);await this.disconnectState(J),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let J=this.requireServer($);await this.connectState(J)})}async disconnectServer($){await this.runExclusive($,async()=>{let J=this.requireServer($);await this.disconnectState(J)})}async setServerDisabled($,J){await this.runExclusive($,async()=>{let Q=this.requireServer($);if(Q.registration={...Q.registration,disabled:J},Q.updatedAt=l0(),J)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(($,J)=>$.name.localeCompare(J.name))}async listTools($){let J=this.requireServer($),Q=J.toolCacheUpdatedAt??0;if(J.toolCache&&l0()-Q<=this.toolsCacheTtlMs)return J.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let J=this.requireServer($),Z=await(await this.ensureConnectedClient(J)).listTools(),W=LT(Z);return J.toolCache=W,J.toolCacheUpdatedAt=l0(),J.updatedAt=l0(),W})}async callTool($){return this.runExclusive($.serverName,async()=>{let J=this.requireServer($.serverName),Q=await this.ensureConnectedClient(J);return J.updatedAt=l0(),Q.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let J of $)await this.unregisterServer(J)}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=l0();try{let J=$.client??await this.clientFactory($.registration);await J.connect(),$.client=J,$.status="connected",$.lastError=void 0,$.updatedAt=l0()}catch(J){throw $.status="disconnected",$.lastError=J instanceof Error?J.message:String(J),$.updatedAt=l0(),J}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=l0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=l0()}}requireServer($){let J=this.servers.get($);if(!J)throw Error(`Unknown MCP server: ${$}`);return J}async runExclusive($,J){let Q=this.operationLocks.get($)??Promise.resolve(),Z,W=new Promise((X)=>{Z=X}),j=Q.catch(()=>{return}).then(()=>W);this.operationLocks.set($,j),await Q.catch(()=>{return});try{return await J()}finally{if(Z?.(),this.operationLocks.get($)===j)this.operationLocks.delete($)}}}function y8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function IH($){return y8($)&&Object.values($).every((J)=>typeof J==="string")}function zT($){return Array.isArray($)&&$.every((J)=>typeof J==="string")}function _T($){if(!y8($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function OT($){let J=$.env?Object.entries($.env):[];if(J.length===0)return{ok:!0};let Q={};for(let[Z,W]of J){if(typeof W==="string"){Q[Z]=W;continue}let j=W.fromEnv?.trim()||Z,X=process.env[j];if(typeof X==="string"&&X.length>0){Q[Z]=X;continue}if(typeof W.value==="string"){Q[Z]=W.value;continue}if(W.required===!0)return{ok:!1,reason:`required environment variable "${j}" is not set`}}return{ok:!0,env:Object.keys(Q).length>0?Q:void 0}}function Q7($){if(!y8($))return{name:"",loadError:"invalid MCP server registration"};let J=typeof $.name==="string"?$.name.trim():"";if(!J)return{name:J,loadError:"empty MCP server name"};let Q=$.env,Z=Q===void 0?void 0:Q;if(Z!==void 0){if(!y8(Z))return{name:J,loadError:"invalid env"};for(let[Y,V]of Object.entries(Z))if(typeof V!=="string"&&!_T(V))return{name:J,loadError:`invalid env "${Y}"`}}let W=$.transport;if(!y8(W))return{name:J,loadError:"invalid MCP transport"};let j=W.type;if(j!=="stdio"&&j!=="sse"&&j!=="streamableHttp")return{name:J,loadError:"invalid MCP transport type"};if(j!=="stdio"&&Z!==void 0)return{name:J,loadError:"top-level env is only supported for stdio MCP transports"};let X=y8($.metadata)?$.metadata:void 0;if(j==="stdio"){let Y=W.command;if(typeof Y!=="string"||!Y.trim())return{name:J,loadError:"stdio MCP transport requires command"};let V=W.args;if(V!==void 0&&!zT(V))return{name:J,loadError:"stdio MCP transport args must be strings"};let H=W.cwd;if(H!==void 0&&typeof H!=="string")return{name:J,loadError:"stdio MCP transport cwd must be a string"};let B=W.env;if(B!==void 0&&!IH(B))return{name:J,loadError:"stdio MCP transport env must be strings"};let A=OT({name:J,transport:{type:"stdio",command:Y,args:V,cwd:H,env:B},env:Z,metadata:X});if(!A.ok)return{name:J,loadError:A.reason};let K=B||A.env?{...B??{},...A.env??{}}:void 0;return{name:J,registration:{name:J,transport:{type:"stdio",command:Y,args:V,cwd:H,env:K},metadata:X}}}if(typeof W.url!=="string"||!W.url.trim())return{name:J,loadError:`${j} MCP transport requires url`};let f=W.headers;if(f!==void 0&&!IH(f))return{name:J,loadError:`${j} MCP transport headers must be strings`};return{name:J,registration:{name:J,transport:j==="sse"?{type:"sse",url:W.url,headers:f}:{type:"streamableHttp",url:W.url,headers:f},metadata:X}}}function IQ($){let J=new Map;return $.map(({server:Q,owner:Z,ownerLabel:W})=>{let j=Q7(Q);if(!j.registration)return{owner:Z,name:j.name,loadError:j.loadError??"invalid MCP server registration"};let X=J.get(j.registration.name);if(J.has(j.registration.name)){let f=X?` already registered by ${X}`:"";return{owner:Z,name:j.registration.name,loadError:`duplicate MCP server name "${j.registration.name}"${f}`}}return J.set(j.registration.name,W),{owner:Z,name:j.registration.name,registration:j.registration}})}import{createHash as TT}from"node:crypto";var xH=128,MT=/[^a-zA-Z0-9_-]+/g,gH=8,qT=1,PT="mcp_tool";function NT($){return TT("sha1").update($).digest("hex").slice(0,gH)}function wT($){return $.replace(MT,"_")}var xQ=({serverName:$,toolName:J})=>{let Q=`${$}__${J}`,Z=wT(Q);if(Z===Q&&Q.length<=xH)return Q;let W=NT(Q),j=xH-qT-gH;return`${Z.slice(0,j)||PT}_${W}`};function d6($){return{[($.nameTransform??xQ)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function gQ($){let J={};for(let Q of $.toolNames)Object.assign(J,d6({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return J}import{createTool as ST}from"@cline/shared";function CT($,J){let Q=J.description?.trim();if(Q)return Q;return`Execute MCP tool "${J.name}" from server "${$}".`}async function E8($){let J=await $.provider.listTools($.serverName),Q=$.nameTransform??xQ;return J.map((Z)=>{let W=Q({serverName:$.serverName,toolName:Z.name});return ST({name:W,description:CT($.serverName,Z),inputSchema:Z.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(j,X)=>$.provider.callTool({serverName:$.serverName,toolName:Z.name,arguments:j&&typeof j==="object"&&!Array.isArray(j)?j:void 0,context:X})})})}W1();var uH={};w(uH,{listPluginToolsWithDiagnostics:()=>mQ,listPluginTools:()=>l6});import{stat as yT}from"node:fs/promises";import{isAbsolute as ET,relative as bT,resolve as vH}from"node:path";W1();function hT($,J){let Q=bT(vH($),vH(J));return Q===""||!Q.startsWith("..")&&!ET(Q)}var kT=32,b8=new Map;function IT($,J){if(!b8.has($)&&b8.size>=kT){let Q=b8.keys().next().value;if(Q)b8.delete(Q)}b8.set($,J)}async function xT($){let J=await Promise.all($.pluginPaths.map(async(Q)=>{try{let Z=await yT(Q);return`${Q}:${Z.mtimeMs}:${Z.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:J})}function cH($,J){return $.map((Q)=>({...Q,enabled:!J.has(Q.name)}))}function gT($){return $.sort((J,Q)=>{let Z=J.name.localeCompare(Q.name);if(Z!==0)return Z;return J.path.localeCompare(Q.path)})}async function mT($,J){if(!$.setup)return{tools:[]};let Q=[],Z={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(Z,{workspaceInfo:J}),{tools:Q}}async function mQ($){let J=e$({workspacePath:$.workspacePath,cwd:$.cwd}),Q=B1($.disabledToolNames);if(J.length===0)return{tools:[],failures:[],warnings:[]};let Z=await xT({pluginPaths:J,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),W=b8.get(Z);if(W)return{tools:cH(W.tools,Q),failures:W.failures,warnings:W.warnings};let j=[],X=[],f=[],Y;try{Y=await A8({pluginPaths:J,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),X=[...Y.failures],f=[...Y.warnings];for(let H of Y.extensions??[]){let B=H.__clinePluginPath;if(!B)continue;let A=hT($.workspacePath,B)?"workspace-plugin":"global-plugin",K;try{K=await mT(H,{rootPath:$.workspacePath})}catch(G){X.push({pluginPath:B,pluginName:H.name,phase:"setup",message:G instanceof Error?G.message:String(G),stack:G instanceof Error?G.stack:void 0});continue}for(let G of K.tools)j.push({name:G.name,pluginName:H.name,path:B,source:A,description:G.description?.trim()||void 0})}}catch(H){X=J.map((B)=>({pluginPath:B,phase:"load",message:H instanceof Error?H.message:String(H),stack:H instanceof Error?H.stack:void 0}))}finally{await Y?.shutdown().catch(()=>{})}let V=gT(j);return IT(Z,{tools:V,failures:X,warnings:f}),{tools:cH(V,Q),failures:X,warnings:f}}async function l6($){return(await mQ($)).tools}function cQ($,J){if(!J)return"global";let Q=cT(J,$);return!Q.startsWith("..")&&!vT(Q)?"workspace":"global"}function p6($){return[...$].sort((J,Q)=>{let Z=(W)=>{switch(W){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(J.source!==Q.source)return Z(J.source)-Z(Q.source);return J.name.localeCompare(Q.name)})}function pH($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}async function lH($,J){if($.userInstructionService)return await J($.userInstructionService);let Q=pH($);if(!Q)return await J(void 0);let Z=$.cwd?.trim()||Q,W=_$({skills:{workspacePath:Q,includePluginSkills:!0,cwd:Z},rules:{workspacePath:Q},workflows:{workspacePath:Q}});try{return await W.start(),await J(W)}finally{W.stop()}}function uT($,J){if(!$)return;let Q=$.listRecords("skill");if(J.id){let Z=Q.find((W)=>W.id===J.id);if(Z)return Z}for(let Z of Q)if(Z.filePath===J.path||Z.item.name===J.name||Z.id===J.name)return Z;return}class O${async list($={}){return await lH($,async(J)=>{let Q=pH($),Z=[],W=[],j=[],X=[],f=[];if(J){for(let V of J.listRecords("workflow")){let H=V.item;Z.push({id:V.id,name:H.name,path:V.filePath,enabled:H.disabled!==!0,kind:"workflow",source:cQ(V.filePath,Q),description:H.instructions,toggleable:!1})}for(let V of J.listRecords("rule")){let H=V.item;W.push({id:V.id,name:H.name,path:V.filePath,enabled:H.disabled!==!0,kind:"rule",source:cQ(V.filePath,Q),description:H.instructions,toggleable:!1})}for(let V of J.listRecords("skill")){let H=V.item;j.push({id:V.id,name:H.name,path:V.filePath,enabled:H.disabled!==!0,kind:"skill",source:cQ(V.filePath,Q),description:H.description,toggleable:!0})}}if(Q)try{for(let V of await l6({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))X.push({id:`${V.pluginName}:${V.name}:${V.path}`,name:V.name,path:V.path,enabled:V.enabled,kind:"tool",source:V.source,description:V.description,toggleable:!0})}catch{}let Y=K0();if(c1({filePath:Y}))try{for(let V of A1({filePath:Y}))f.push({id:V.name,name:V.name,path:Y,enabled:V.disabled!==!0,kind:"mcp",source:cQ(Y,Q),description:V.transport.type,toggleable:!0})}catch{}return{workflows:p6(Z.filter((V)=>vQ(V.path))),rules:p6(W.filter((V)=>vQ(V.path))),skills:p6(j.filter((V)=>vQ(V.path))),tools:p6(X),mcp:p6(f.filter((V)=>vQ(V.path)))}})}async toggle($){if($.type==="skills")return await lH($,async(J)=>{let Q=uT(J,$),Z=Q?.filePath;if(!Z)throw Error(`Unable to resolve skill setting '${$.id??$.name??dH($.path??"")}'.`);let W=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,j=$.enabled??(W!==void 0?!W:void 0);if(j===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??dH($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await zH({filePath:Z,enabled:j}),await J?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:J}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)T5($.name);else xf($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let J=$.name?.trim()||$.id?.trim();if(!J)throw Error("MCP server settings toggle requires a server name.");let Q=$.path?.trim()||K0(),Z=$.enabled;if(Z===void 0){let W=A1({filePath:Q}).find((j)=>j.name===J);if(!W)throw Error(`Unknown MCP server: ${J}`);Z=W.disabled===!0}return Y2({filePath:Q,name:J,disabled:!Z}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function K2(){return new O$}function iH($){return{async list(J){let Q=$;if(Q.listSettings)return await Q.listSettings(J);return await K2().list(J)},async toggle(J){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(J);return await K2().toggle(J)}}}function nH($){function J(){let Q=$.pendingPrompts;if(!Q)throw Error("Pending prompt service is not available.");return Q}return{list(Q){return J().list(Q)},update(Q){return J().update(Q)},delete(Q){return J().delete(Q)}}}var aH={};w(aH,{splitCoreSessionConfig:()=>r6,isSessionNotFoundError:()=>d1,SessionNotFoundError:()=>u1,SESSION_NOT_FOUND_ERROR_CODE:()=>G2});var G2="session_not_found";class u1 extends Error{sessionId;code="session_not_found";constructor($,J){super(J??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function d1($){return $ instanceof u1||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function r6($){let{hooks:J,logger:Q,telemetry:Z,extensionContext:W,extraTools:j,extensions:X,onTeamEvent:f,onConsecutiveMistakeLimitReached:Y,checkpoint:V,compaction:H,...B}=$,A={};if(J)A.hooks=J;if(Q)A.logger=Q;if(Z)A.telemetry=Z;if(W)A.extensionContext=W;if(j)A.extraTools=j;if(X)A.extensions=X;if(f)A.onTeamEvent=f;if(Y)A.onConsecutiveMistakeLimitReached=Y;if(V?.createCheckpoint)A.checkpoint=V;if(H?.compact)A.compaction=H;let K=Object.keys(A).length>0?A:void 0;return{config:{...B,...V?{checkpoint:{enabled:V.enabled}}:{},...H?{compaction:{enabled:H.enabled,strategy:H.strategy,thresholdRatio:H.thresholdRatio,reserveTokens:H.reserveTokens,preserveRecentTokens:H.preserveRecentTokens,maxInputTokens:H.maxInputTokens,summarizer:H.summarizer}}:{}},...K?{localRuntime:K}:{}}}function sH($){let J=$.config;return"providerId"in J?{...$,config:{...J,...dT($.localRuntime)},localRuntime:$.localRuntime}:$}function Z7($,J={}){let Q=r6($.config),Z=z0(J.defaultCapabilities,$.capabilities),W=lT(Q.localRuntime,$.localRuntime),j=J.withExtensionContext?.(W?.extensionContext);if(j)W={...W??{},extensionContext:j};return{...$,...Q,...W?{localRuntime:W}:{},...Z?{capabilities:Z}:{}}}function dT($){if(!$)return{};let{modelCatalogDefaults:J,userInstructionService:Q,configExtensions:Z,onTeamRestored:W,...j}=$;return j}function lT(...$){let J={};for(let Q of $)if(Q)Object.assign(J,Q);return Object.keys(J).length>0?J:void 0}O0();function oH($){let J=$.input.config.telemetry??$.telemetry;if(!J)return;J.capture({event:x.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??U0.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 i6($){return!!$&&typeof $==="object"&&!Array.isArray($)}function W7($){let J=$?.trim();return J?J:void 0}function pT($,J){let Q=$?.trim();if(!Q)return J;let Z=Date.parse(Q);if(!Number.isFinite(Z))return J;return new Date(Z).toISOString()}function tH($,J){return new Date(new Date($).getTime()+Math.max(0,Math.floor(J))*1000).toISOString()}function eH($,J){return new Date(new Date($).getTime()-Math.max(0,Math.floor(J))*1000).toISOString()}function rT($,J){if(!$)return J;return new Date($).getTime()>=new Date(J).getTime()?$:J}function iT($,J){let Q=$.eventId.trim(),Z=$.eventType.trim(),W=$.source.trim(),j=W7($.subject),X=W7($.dedupeKey)??`${Z}:${W}:${j??Q}`;return{eventId:Q,eventType:Z,source:W,subject:j,occurredAt:pT($.occurredAt,J),workspaceRoot:W7($.workspaceRoot),payload:i6($.payload)?$.payload:void 0,attributes:i6($.attributes)?$.attributes:void 0,dedupeKey:X}}function j7($,J){if(!J)return;let Q=J.split("."),Z=$;for(let W of Q){if(!i6(Z))return;Z=Z[W]}return Z}function nT($,J){if($.attributes&&Object.hasOwn($.attributes,J))return $.attributes[J];if($.payload&&Object.hasOwn($.payload,J))return $.payload[J];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},Z=j7(Q,J);if(Z!==void 0)return Z;if($.attributes){let W=j7($.attributes,J);if(W!==void 0)return W}if($.payload)return j7($.payload,J);return}function uQ($,J){if(Array.isArray(J))return J.some((Q)=>uQ($,Q));if(Array.isArray($))return $.some((Q)=>uQ(Q,J));if(i6(J)){if(!i6($))return!1;return Object.entries(J).every(([Q,Z])=>uQ($[Q],Z))}return Object.is($,J)}function aT($,J){if(!J||Object.keys(J).length===0)return!0;return Object.entries(J).every(([Q,Z])=>uQ(nT($,Q),Z))}class X7{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let J=new Date(this.nowFn()).toISOString(),Q=iT($,J),Z=this.store.insertEventLog(Q,{receivedAtIso:J});if(!Z.created)return this.logger?.debug("cron.event.duplicate",{eventId:Z.record.eventId,eventType:Z.record.eventType,source:Z.record.source}),{event:Z.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:Z.record.dedupeKey}]};try{let W=this.store.listEventSpecsForType(Q.eventType),j=[],X=[],f=[];for(let H of W){if(!aT(Q,H.filters)){j.push({specId:H.specId,externalId:H.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}X.push(H);let B=this.materializeForSpec(H,Q,Z.record.receivedAt);if(B.run)f.push(B.run);else j.push({specId:H.specId,externalId:H.externalId,reason:B.reason,dedupeKey:Q.dedupeKey})}let Y=X.length===0?"unmatched":f.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(Z.record.eventId,{status:Y,matchedSpecCount:X.length,queuedRunCount:f.length,suppressedCount:j.filter((H)=>H.reason!=="filter_mismatch").length});let V=this.store.getEventLog(Z.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:Z.record.eventId,eventType:Z.record.eventType,status:Y,matchedSpecCount:X.length,queuedRunCount:f.length}),{event:V??Z.record,duplicate:!1,matchedSpecs:X,queuedRuns:f,suppressions:j}}catch(W){if(this.store.updateEventLogProcessing(Z.record.eventId,{status:"failed",error:W instanceof Error?W.message:String(W)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:Z.record.eventId,eventType:Z.record.eventType,error:W});throw W}}materializeForSpec($,J,Q){let Z=J.dedupeKey??J.eventId,W=$.debounceSeconds??0;if(W>0){let Y=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:Z});if(Y){let V=rT(Y.scheduledFor,tH(Q,W)),H=this.store.updateQueuedEventRunForDebounce({runId:Y.runId,triggerEventId:J.eventId,scheduledFor:V});if(H)return{run:H,reason:"dedupe_window"}}}let j=$.dedupeWindowSeconds??0;if(j>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:Z,sinceIso:eH(Q,j)}))return{reason:"dedupe_window"};let X=$.cooldownSeconds??0;if(X>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:eH(Q,X)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:J.eventId,scheduledFor:W>0?tH(Q,W):Q}),reason:"dedupe_window"}}}class n6{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},J=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let Z of J)if(this.materializeOneOff(Z))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Z of Q)try{if(this.materializeSchedule(Z))$.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 QM}from"node:path";import{buildClineSystemPrompt as ZM}from"@cline/shared";import{nowIso as $B}from"@cline/shared/db";import{mkdirSync as sT,writeFileSync as oT}from"node:fs";import{join as tT}from"node:path";import{resolveCronReportsDir as eT}from"@cline/shared/storage";function T$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function F2($,J){if(J===void 0||J===null)return;return`${$}: ${T$(J)}`}function $M($,J,Q){let Z=[`runId: ${T$($.runId)}`,`specId: ${T$(J.specId)}`,`externalId: ${T$(J.externalId)}`,`title: ${T$(J.title)}`,`triggerKind: ${T$($.triggerKind)}`,`status: ${T$($.status)}`,`sourcePath: ${T$(J.sourcePath)}`],W=[F2("sessionId",$.sessionId),F2("startedAt",$.startedAt),F2("completedAt",$.completedAt),F2("triggerEventId",$.triggerEventId),F2("triggerEventType",Q?.eventType),F2("triggerEventSource",Q?.source),F2("triggerEventSubject",Q?.subject)];for(let j of W)if(j)Z.push(j);return`---
228
+ `);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 j=Number.parseInt(W[1],10),X=Q+4,f=X+j;if(this.buffer.length<f)break;J.push(this.buffer.slice(X,f)),this.buffer=this.buffer.slice(f)}return J}}class JW{buffer="";decoder=new bH("utf8");push($){this.buffer+=this.decoder.write($);let J=[];while(!0){let Q=this.buffer.indexOf(`
229
+ `);if(Q<0)break;let Z=this.buffer.slice(0,Q).trim();if(this.buffer=this.buffer.slice(Q+1),Z.length>0)J.push(Z)}return J}}class hH{registration;process;nextRequestId=1;pending=new Map;framedParser=new $W;newlineParser=new JW;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"],J;for(let Q of $){await this.disconnect().catch(()=>{}),this.spawnProcess(Q);try{await this.request("initialize",{protocolVersion:DT,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},RT),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=Q;return}catch(Z){J=Z instanceof Error?Z:Error(String(Z))}}throw J??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((J)=>typeof J?.name==="string"&&typeof J.inputSchema==="object"&&J.inputSchema!==null).map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let J=this.registration.transport;if(J.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${J.type}`);this.framedParser=new $W,this.newlineParser=new JW,this.stderrBuffer="",this.protocolMode=$;let Q=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},Z=GT(J.command,J.args??[],{cwd:J.cwd,env:{...process.env,...J.env??{}},stdio:["pipe","pipe","pipe"],...Q});this.process=Z,Z.stdout.on("data",(W)=>this.handleStdout(W)),Z.stderr.on("data",(W)=>{if(this.process!==Z)return;if(this.stderrBuffer+=W.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),Z.once("error",(W)=>{if(this.process!==Z)return;this.failAllPending(Error(`MCP process error: ${k9(W)}`))}),Z.once("exit",(W,j)=>{if(this.process!==Z)return;this.connected=!1,this.process=void 0;let X=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${W??"null"}, signal=${j??"null"}).${X}`))})}handleStdout($){try{let J=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let Q of J){let Z=JSON.parse(Q);if(typeof Z.id!=="number")continue;let W=this.pending.get(Z.id);if(!W)continue;if(this.pending.delete(Z.id),clearTimeout(W.timeout),Z.error){let j=Z.error.message||`MCP request failed with code ${Z.error.code??"unknown"}`;W.reject(Error(j));continue}W.resolve(Z.result)}}catch(J){this.handleProtocolFailure(J)}}handleProtocolFailure($){let J=this.process;if(!J)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}": ${k9($)}.${Q}`)),J.kill()}async request($,J,Q=UT){let Z=this.process;if(!Z?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let W=this.nextRequestId++,j={jsonrpc:"2.0",id:W,method:$,...J?{params:J}:{}},X=new Promise((f,Y)=>{let V=setTimeout(()=>{this.pending.delete(W),Y(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},Q);this.pending.set(W,{resolve:f,reject:Y,timeout:V})});try{Z.stdin.write(this.protocolMode==="framed"?yH(j):EH(j))}catch(f){let Y=this.pending.get(W);if(Y)clearTimeout(Y.timeout),this.pending.delete(W);throw f}return X}notify($,J){let Q=this.process;if(!Q?.stdin.writable)return;let Z={jsonrpc:"2.0",method:$,...J?{params:J}:{}};Q.stdin.write(this.protocolMode==="framed"?yH(Z):EH(Z))}failAllPending($){for(let[J,Q]of this.pending)clearTimeout(Q.timeout),this.pending.delete(J),Q.reject($)}}class kH{registration;options;client;authContext;constructor($,J){this.registration=$;this.options=J}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 $=b9({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??CH});this.authContext=$;try{let J=new FT({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),Q=E9({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await J.connect(Q),await $.clearError(),this.client=J}catch(J){let Q=J instanceof SH?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):k9(J);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(J){return await this.handleOperationError(J)}}async callTool($){let J=await this.ensureConnectedClient();try{return await J.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 J=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${J} Run authorizeMcpServerOAuth for this server.`;return`${J} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let J=this.authContext??b9({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??CH}),Q=$ instanceof SH?this.formatUnauthorizedMessage(J.getLastAuthorizationUrl()):k9($);throw await J.markError(Q),Error(Q)}}function C8($={}){return(J)=>J.transport.type==="stdio"?new hH(J):new kH(J,$)}y9();function l0(){return Date.now()}function LT($){return $.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema}))}class A2{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let J=this.servers.get($.name);if(!J){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:l0()});return}let Q=JSON.stringify(J.registration.transport)!==JSON.stringify($.transport);if(J.registration={...$},J.updatedAt=l0(),Q)await this.disconnectState(J),J.client=void 0,J.toolCache=void 0,J.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let J=this.requireServer($);await this.disconnectState(J),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let J=this.requireServer($);await this.connectState(J)})}async disconnectServer($){await this.runExclusive($,async()=>{let J=this.requireServer($);await this.disconnectState(J)})}async setServerDisabled($,J){await this.runExclusive($,async()=>{let Q=this.requireServer($);if(Q.registration={...Q.registration,disabled:J},Q.updatedAt=l0(),J)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(($,J)=>$.name.localeCompare(J.name))}async listTools($){let J=this.requireServer($),Q=J.toolCacheUpdatedAt??0;if(J.toolCache&&l0()-Q<=this.toolsCacheTtlMs)return J.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let J=this.requireServer($),Z=await(await this.ensureConnectedClient(J)).listTools(),W=LT(Z);return J.toolCache=W,J.toolCacheUpdatedAt=l0(),J.updatedAt=l0(),W})}async callTool($){return this.runExclusive($.serverName,async()=>{let J=this.requireServer($.serverName),Q=await this.ensureConnectedClient(J);return J.updatedAt=l0(),Q.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let J of $)await this.unregisterServer(J)}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=l0();try{let J=$.client??await this.clientFactory($.registration);await J.connect(),$.client=J,$.status="connected",$.lastError=void 0,$.updatedAt=l0()}catch(J){throw $.status="disconnected",$.lastError=J instanceof Error?J.message:String(J),$.updatedAt=l0(),J}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=l0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=l0()}}requireServer($){let J=this.servers.get($);if(!J)throw Error(`Unknown MCP server: ${$}`);return J}async runExclusive($,J){let Q=this.operationLocks.get($)??Promise.resolve(),Z,W=new Promise((X)=>{Z=X}),j=Q.catch(()=>{return}).then(()=>W);this.operationLocks.set($,j),await Q.catch(()=>{return});try{return await J()}finally{if(Z?.(),this.operationLocks.get($)===j)this.operationLocks.delete($)}}}function y8($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function IH($){return y8($)&&Object.values($).every((J)=>typeof J==="string")}function zT($){return Array.isArray($)&&$.every((J)=>typeof J==="string")}function _T($){if(!y8($))return!1;return($.fromEnv===void 0||typeof $.fromEnv==="string")&&($.value===void 0||typeof $.value==="string")&&($.required===void 0||typeof $.required==="boolean")}function OT($){let J=$.env?Object.entries($.env):[];if(J.length===0)return{ok:!0};let Q={};for(let[Z,W]of J){if(typeof W==="string"){Q[Z]=W;continue}let j=W.fromEnv?.trim()||Z,X=process.env[j];if(typeof X==="string"&&X.length>0){Q[Z]=X;continue}if(typeof W.value==="string"){Q[Z]=W.value;continue}if(W.required===!0)return{ok:!1,reason:`required environment variable "${j}" is not set`}}return{ok:!0,env:Object.keys(Q).length>0?Q:void 0}}function QW($){if(!y8($))return{name:"",loadError:"invalid MCP server registration"};let J=typeof $.name==="string"?$.name.trim():"";if(!J)return{name:J,loadError:"empty MCP server name"};let Q=$.env,Z=Q===void 0?void 0:Q;if(Z!==void 0){if(!y8(Z))return{name:J,loadError:"invalid env"};for(let[Y,V]of Object.entries(Z))if(typeof V!=="string"&&!_T(V))return{name:J,loadError:`invalid env "${Y}"`}}let W=$.transport;if(!y8(W))return{name:J,loadError:"invalid MCP transport"};let j=W.type;if(j!=="stdio"&&j!=="sse"&&j!=="streamableHttp")return{name:J,loadError:"invalid MCP transport type"};if(j!=="stdio"&&Z!==void 0)return{name:J,loadError:"top-level env is only supported for stdio MCP transports"};let X=y8($.metadata)?$.metadata:void 0;if(j==="stdio"){let Y=W.command;if(typeof Y!=="string"||!Y.trim())return{name:J,loadError:"stdio MCP transport requires command"};let V=W.args;if(V!==void 0&&!zT(V))return{name:J,loadError:"stdio MCP transport args must be strings"};let H=W.cwd;if(H!==void 0&&typeof H!=="string")return{name:J,loadError:"stdio MCP transport cwd must be a string"};let B=W.env;if(B!==void 0&&!IH(B))return{name:J,loadError:"stdio MCP transport env must be strings"};let A=OT({name:J,transport:{type:"stdio",command:Y,args:V,cwd:H,env:B},env:Z,metadata:X});if(!A.ok)return{name:J,loadError:A.reason};let K=B||A.env?{...B??{},...A.env??{}}:void 0;return{name:J,registration:{name:J,transport:{type:"stdio",command:Y,args:V,cwd:H,env:K},metadata:X}}}if(typeof W.url!=="string"||!W.url.trim())return{name:J,loadError:`${j} MCP transport requires url`};let f=W.headers;if(f!==void 0&&!IH(f))return{name:J,loadError:`${j} MCP transport headers must be strings`};return{name:J,registration:{name:J,transport:j==="sse"?{type:"sse",url:W.url,headers:f}:{type:"streamableHttp",url:W.url,headers:f},metadata:X}}}function I9($){let J=new Map;return $.map(({server:Q,owner:Z,ownerLabel:W})=>{let j=QW(Q);if(!j.registration)return{owner:Z,name:j.name,loadError:j.loadError??"invalid MCP server registration"};let X=J.get(j.registration.name);if(J.has(j.registration.name)){let f=X?` already registered by ${X}`:"";return{owner:Z,name:j.registration.name,loadError:`duplicate MCP server name "${j.registration.name}"${f}`}}return J.set(j.registration.name,W),{owner:Z,name:j.registration.name,registration:j.registration}})}import{createHash as TT}from"node:crypto";var xH=128,MT=/[^a-zA-Z0-9_-]+/g,gH=8,qT=1,PT="mcp_tool";function NT($){return TT("sha1").update($).digest("hex").slice(0,gH)}function wT($){return $.replace(MT,"_")}var x9=({serverName:$,toolName:J})=>{let Q=`${$}__${J}`,Z=wT(Q);if(Z===Q&&Q.length<=xH)return Q;let W=NT(Q),j=xH-qT-gH;return`${Z.slice(0,j)||PT}_${W}`};function d6($){return{[($.nameTransform??x9)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function g9($){let J={};for(let Q of $.toolNames)Object.assign(J,d6({serverName:$.serverName,toolName:Q,nameTransform:$.nameTransform}));return J}import{createTool as ST}from"@cline/shared";function CT($,J){let Q=J.description?.trim();if(Q)return Q;return`Execute MCP tool "${J.name}" from server "${$}".`}async function E8($){let J=await $.provider.listTools($.serverName),Q=$.nameTransform??x9;return J.map((Z)=>{let W=Q({serverName:$.serverName,toolName:Z.name});return ST({name:W,description:CT($.serverName,Z),inputSchema:Z.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(j,X)=>$.provider.callTool({serverName:$.serverName,toolName:Z.name,arguments:j&&typeof j==="object"&&!Array.isArray(j)?j:void 0,context:X})})})}W1();var uH={};w(uH,{listPluginToolsWithDiagnostics:()=>m9,listPluginTools:()=>l6});import{stat as yT}from"node:fs/promises";import{isAbsolute as ET,relative as bT,resolve as vH}from"node:path";W1();function hT($,J){let Q=bT(vH($),vH(J));return Q===""||!Q.startsWith("..")&&!ET(Q)}var kT=32,b8=new Map;function IT($,J){if(!b8.has($)&&b8.size>=kT){let Q=b8.keys().next().value;if(Q)b8.delete(Q)}b8.set($,J)}async function xT($){let J=await Promise.all($.pluginPaths.map(async(Q)=>{try{let Z=await yT(Q);return`${Q}:${Z.mtimeMs}:${Z.size}`}catch{return`${Q}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:J})}function cH($,J){return $.map((Q)=>({...Q,enabled:!J.has(Q.name)}))}function gT($){return $.sort((J,Q)=>{let Z=J.name.localeCompare(Q.name);if(Z!==0)return Z;return J.path.localeCompare(Q.path)})}async function mT($,J){if(!$.setup)return{tools:[]};let Q=[],Z={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(Z,{workspaceInfo:J}),{tools:Q}}async function m9($){let J=e$({workspacePath:$.workspacePath,cwd:$.cwd}),Q=B1($.disabledToolNames);if(J.length===0)return{tools:[],failures:[],warnings:[]};let Z=await xT({pluginPaths:J,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),W=b8.get(Z);if(W)return{tools:cH(W.tools,Q),failures:W.failures,warnings:W.warnings};let j=[],X=[],f=[],Y;try{Y=await A8({pluginPaths:J,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),X=[...Y.failures],f=[...Y.warnings];for(let H of Y.extensions??[]){let B=H.__clinePluginPath;if(!B)continue;let A=hT($.workspacePath,B)?"workspace-plugin":"global-plugin",K;try{K=await mT(H,{rootPath:$.workspacePath})}catch(G){X.push({pluginPath:B,pluginName:H.name,phase:"setup",message:G instanceof Error?G.message:String(G),stack:G instanceof Error?G.stack:void 0});continue}for(let G of K.tools)j.push({name:G.name,pluginName:H.name,path:B,source:A,description:G.description?.trim()||void 0})}}catch(H){X=J.map((B)=>({pluginPath:B,phase:"load",message:H instanceof Error?H.message:String(H),stack:H instanceof Error?H.stack:void 0}))}finally{await Y?.shutdown().catch(()=>{})}let V=gT(j);return IT(Z,{tools:V,failures:X,warnings:f}),{tools:cH(V,Q),failures:X,warnings:f}}async function l6($){return(await m9($)).tools}function c9($,J){if(!J)return"global";let Q=cT(J,$);return!Q.startsWith("..")&&!vT(Q)?"workspace":"global"}function p6($){return[...$].sort((J,Q)=>{let Z=(W)=>{switch(W){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(J.source!==Q.source)return Z(J.source)-Z(Q.source);return J.name.localeCompare(Q.name)})}function pH($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}async function lH($,J){if($.userInstructionService)return await J($.userInstructionService);let Q=pH($);if(!Q)return await J(void 0);let Z=$.cwd?.trim()||Q,W=_$({skills:{workspacePath:Q,includePluginSkills:!0,cwd:Z},rules:{workspacePath:Q},workflows:{workspacePath:Q}});try{return await W.start(),await J(W)}finally{W.stop()}}function uT($,J){if(!$)return;let Q=$.listRecords("skill");if(J.id){let Z=Q.find((W)=>W.id===J.id);if(Z)return Z}for(let Z of Q)if(Z.filePath===J.path||Z.item.name===J.name||Z.id===J.name)return Z;return}class O${async list($={}){return await lH($,async(J)=>{let Q=pH($),Z=[],W=[],j=[],X=[],f=[];if(J){for(let V of J.listRecords("workflow")){let H=V.item;Z.push({id:V.id,name:H.name,path:V.filePath,enabled:H.disabled!==!0,kind:"workflow",source:c9(V.filePath,Q),description:H.instructions,toggleable:!1})}for(let V of J.listRecords("rule")){let H=V.item;W.push({id:V.id,name:H.name,path:V.filePath,enabled:H.disabled!==!0,kind:"rule",source:c9(V.filePath,Q),description:H.instructions,toggleable:!1})}for(let V of J.listRecords("skill")){let H=V.item;j.push({id:V.id,name:H.name,path:V.filePath,enabled:H.disabled!==!0,kind:"skill",source:c9(V.filePath,Q),description:H.description,toggleable:!0})}}if(Q)try{for(let V of await l6({workspacePath:Q,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))X.push({id:`${V.pluginName}:${V.name}:${V.path}`,name:V.name,path:V.path,enabled:V.enabled,kind:"tool",source:V.source,description:V.description,toggleable:!0})}catch{}let Y=K0();if(c1({filePath:Y}))try{for(let V of A1({filePath:Y}))f.push({id:V.name,name:V.name,path:Y,enabled:V.disabled!==!0,kind:"mcp",source:c9(Y,Q),description:V.transport.type,toggleable:!0})}catch{}return{workflows:p6(Z.filter((V)=>v9(V.path))),rules:p6(W.filter((V)=>v9(V.path))),skills:p6(j.filter((V)=>v9(V.path))),tools:p6(X),mcp:p6(f.filter((V)=>v9(V.path)))}})}async toggle($){if($.type==="skills")return await lH($,async(J)=>{let Q=uT(J,$),Z=Q?.filePath;if(!Z)throw Error(`Unable to resolve skill setting '${$.id??$.name??dH($.path??"")}'.`);let W=Q?.item&&"disabled"in Q.item?Q.item.disabled!==!0:void 0,j=$.enabled??(W!==void 0?!W:void 0);if(j===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??dH($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await zH({filePath:Z,enabled:j}),await J?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:J}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)T5($.name);else xf($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let J=$.name?.trim()||$.id?.trim();if(!J)throw Error("MCP server settings toggle requires a server name.");let Q=$.path?.trim()||K0(),Z=$.enabled;if(Z===void 0){let W=A1({filePath:Q}).find((j)=>j.name===J);if(!W)throw Error(`Unknown MCP server: ${J}`);Z=W.disabled===!0}return Y2({filePath:Q,name:J,disabled:!Z}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function K2(){return new O$}function iH($){return{async list(J){let Q=$;if(Q.listSettings)return await Q.listSettings(J);return await K2().list(J)},async toggle(J){let Q=$;if(Q.toggleSetting)return await Q.toggleSetting(J);return await K2().toggle(J)}}}function nH($){function J(){let Q=$.pendingPrompts;if(!Q)throw Error("Pending prompt service is not available.");return Q}return{list(Q){return J().list(Q)},update(Q){return J().update(Q)},delete(Q){return J().delete(Q)}}}var aH={};w(aH,{splitCoreSessionConfig:()=>r6,isSessionNotFoundError:()=>d1,SessionNotFoundError:()=>u1,SESSION_NOT_FOUND_ERROR_CODE:()=>G2});var G2="session_not_found";class u1 extends Error{sessionId;code="session_not_found";constructor($,J){super(J??($?`session not found: ${$}`:"session not found"));this.sessionId=$;this.name="SessionNotFoundError"}}function d1($){return $ instanceof u1||typeof $==="object"&&$!==null&&"code"in $&&$.code==="session_not_found"}function r6($){let{hooks:J,logger:Q,telemetry:Z,extensionContext:W,extraTools:j,extensions:X,onTeamEvent:f,onConsecutiveMistakeLimitReached:Y,checkpoint:V,compaction:H,...B}=$,A={};if(J)A.hooks=J;if(Q)A.logger=Q;if(Z)A.telemetry=Z;if(W)A.extensionContext=W;if(j)A.extraTools=j;if(X)A.extensions=X;if(f)A.onTeamEvent=f;if(Y)A.onConsecutiveMistakeLimitReached=Y;if(V?.createCheckpoint)A.checkpoint=V;if(H?.compact)A.compaction=H;let K=Object.keys(A).length>0?A:void 0;return{config:{...B,...V?{checkpoint:{enabled:V.enabled}}:{},...H?{compaction:{enabled:H.enabled,strategy:H.strategy,thresholdRatio:H.thresholdRatio,reserveTokens:H.reserveTokens,preserveRecentTokens:H.preserveRecentTokens,maxInputTokens:H.maxInputTokens,summarizer:H.summarizer}}:{}},...K?{localRuntime:K}:{}}}function sH($){let J=$.config;return"providerId"in J?{...$,config:{...J,...dT($.localRuntime)},localRuntime:$.localRuntime}:$}function ZW($,J={}){let Q=r6($.config),Z=z0(J.defaultCapabilities,$.capabilities),W=lT(Q.localRuntime,$.localRuntime),j=J.withExtensionContext?.(W?.extensionContext);if(j)W={...W??{},extensionContext:j};return{...$,...Q,...W?{localRuntime:W}:{},...Z?{capabilities:Z}:{}}}function dT($){if(!$)return{};let{modelCatalogDefaults:J,userInstructionService:Q,configExtensions:Z,onTeamRestored:W,...j}=$;return j}function lT(...$){let J={};for(let Q of $)if(Q)Object.assign(J,Q);return Object.keys(J).length>0?J:void 0}O0();function oH($){let J=$.input.config.telemetry??$.telemetry;if(!J)return;J.capture({event:x.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??U0.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 i6($){return!!$&&typeof $==="object"&&!Array.isArray($)}function WW($){let J=$?.trim();return J?J:void 0}function pT($,J){let Q=$?.trim();if(!Q)return J;let Z=Date.parse(Q);if(!Number.isFinite(Z))return J;return new Date(Z).toISOString()}function tH($,J){return new Date(new Date($).getTime()+Math.max(0,Math.floor(J))*1000).toISOString()}function eH($,J){return new Date(new Date($).getTime()-Math.max(0,Math.floor(J))*1000).toISOString()}function rT($,J){if(!$)return J;return new Date($).getTime()>=new Date(J).getTime()?$:J}function iT($,J){let Q=$.eventId.trim(),Z=$.eventType.trim(),W=$.source.trim(),j=WW($.subject),X=WW($.dedupeKey)??`${Z}:${W}:${j??Q}`;return{eventId:Q,eventType:Z,source:W,subject:j,occurredAt:pT($.occurredAt,J),workspaceRoot:WW($.workspaceRoot),payload:i6($.payload)?$.payload:void 0,attributes:i6($.attributes)?$.attributes:void 0,dedupeKey:X}}function jW($,J){if(!J)return;let Q=J.split("."),Z=$;for(let W of Q){if(!i6(Z))return;Z=Z[W]}return Z}function nT($,J){if($.attributes&&Object.hasOwn($.attributes,J))return $.attributes[J];if($.payload&&Object.hasOwn($.payload,J))return $.payload[J];let Q={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},Z=jW(Q,J);if(Z!==void 0)return Z;if($.attributes){let W=jW($.attributes,J);if(W!==void 0)return W}if($.payload)return jW($.payload,J);return}function u9($,J){if(Array.isArray(J))return J.some((Q)=>u9($,Q));if(Array.isArray($))return $.some((Q)=>u9(Q,J));if(i6(J)){if(!i6($))return!1;return Object.entries(J).every(([Q,Z])=>u9($[Q],Z))}return Object.is($,J)}function aT($,J){if(!J||Object.keys(J).length===0)return!0;return Object.entries(J).every(([Q,Z])=>u9(nT($,Q),Z))}class XW{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let J=new Date(this.nowFn()).toISOString(),Q=iT($,J),Z=this.store.insertEventLog(Q,{receivedAtIso:J});if(!Z.created)return this.logger?.debug("cron.event.duplicate",{eventId:Z.record.eventId,eventType:Z.record.eventType,source:Z.record.source}),{event:Z.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:Z.record.dedupeKey}]};try{let W=this.store.listEventSpecsForType(Q.eventType),j=[],X=[],f=[];for(let H of W){if(!aT(Q,H.filters)){j.push({specId:H.specId,externalId:H.externalId,reason:"filter_mismatch",dedupeKey:Q.dedupeKey});continue}X.push(H);let B=this.materializeForSpec(H,Q,Z.record.receivedAt);if(B.run)f.push(B.run);else j.push({specId:H.specId,externalId:H.externalId,reason:B.reason,dedupeKey:Q.dedupeKey})}let Y=X.length===0?"unmatched":f.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(Z.record.eventId,{status:Y,matchedSpecCount:X.length,queuedRunCount:f.length,suppressedCount:j.filter((H)=>H.reason!=="filter_mismatch").length});let V=this.store.getEventLog(Z.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:Z.record.eventId,eventType:Z.record.eventType,status:Y,matchedSpecCount:X.length,queuedRunCount:f.length}),{event:V??Z.record,duplicate:!1,matchedSpecs:X,queuedRuns:f,suppressions:j}}catch(W){if(this.store.updateEventLogProcessing(Z.record.eventId,{status:"failed",error:W instanceof Error?W.message:String(W)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:Z.record.eventId,eventType:Z.record.eventType,error:W});throw W}}materializeForSpec($,J,Q){let Z=J.dedupeKey??J.eventId,W=$.debounceSeconds??0;if(W>0){let Y=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:Z});if(Y){let V=rT(Y.scheduledFor,tH(Q,W)),H=this.store.updateQueuedEventRunForDebounce({runId:Y.runId,triggerEventId:J.eventId,scheduledFor:V});if(H)return{run:H,reason:"dedupe_window"}}}let j=$.dedupeWindowSeconds??0;if(j>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:Z,sinceIso:eH(Q,j)}))return{reason:"dedupe_window"};let X=$.cooldownSeconds??0;if(X>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:eH(Q,X)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:J.eventId,scheduledFor:W>0?tH(Q,W):Q}),reason:"dedupe_window"}}}class n6{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},J=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let Z of J)if(this.materializeOneOff(Z))$.oneOffQueued+=1;let Q=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Z of Q)try{if(this.materializeSchedule(Z))$.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 QM}from"node:path";import{buildClineSystemPrompt as ZM}from"@cline/shared";import{nowIso as $B}from"@cline/shared/db";import{mkdirSync as sT,writeFileSync as oT}from"node:fs";import{join as tT}from"node:path";import{resolveCronReportsDir as eT}from"@cline/shared/storage";function T$($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function F2($,J){if(J===void 0||J===null)return;return`${$}: ${T$(J)}`}function $M($,J,Q){let Z=[`runId: ${T$($.runId)}`,`specId: ${T$(J.specId)}`,`externalId: ${T$(J.externalId)}`,`title: ${T$(J.title)}`,`triggerKind: ${T$($.triggerKind)}`,`status: ${T$($.status)}`,`sourcePath: ${T$(J.sourcePath)}`],W=[F2("sessionId",$.sessionId),F2("startedAt",$.startedAt),F2("completedAt",$.completedAt),F2("triggerEventId",$.triggerEventId),F2("triggerEventType",Q?.eventType),F2("triggerEventSource",Q?.source),F2("triggerEventSubject",Q?.subject)];for(let j of W)if(j)Z.push(j);return`---
230
230
  ${Z.join(`
231
231
  `)}
232
232
  ---
@@ -249,17 +249,17 @@ ${Z.join(`
249
249
  ${Q.join(`
250
250
  `)}
251
251
  `)}return J.join(`
252
- `)}function f7($){let J=eT($.specs);sT(J,{recursive:!0});let Q=tT(J,`${$.run.runId}.md`),Z=`${$M($.run,$.spec,$.data.triggerEvent)}
253
- ${JM($.data)}`;return oT(Q,Z,"utf8"),Q}class Y7{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,J,Q){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let Z=Math.max(1,Math.floor(Q)),W=this.activeExecutions.get($)??new Set;if(W.size>=Z)return!1;return W.add(J),this.activeExecutions.set($,W),!0}release($,J){let Q=this.activeExecutions.get($);if(!Q)return;if(Q.delete(J),Q.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let J of this.activeExecutions.values())$+=J.size;return $}}var WM=15000,jM=90,JB=["rules","skills","plugins"];function XM($,J){return new Set($.extensions??JB).has(J)}function fM($,J){if($.tools===void 0)return{"*":{autoApprove:!0}};let Q={"*":{enabled:!1,autoApprove:!0}};for(let Z of $.tools)Q[Z]={enabled:!0,autoApprove:!0};if(J==="yolo")Q[F0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Q}function YM($){let J=$?.trim();if(!J)return;return["# Notes Directory",`Use ${J} for durable notes related to this automation.`,"Before starting, inspect relevant existing notes there when useful. During or after the run, write concise notes there when they would help future runs continue with context."].join(`
254
- `)}class V7 extends Error{constructor($){super($);this.name="TimeoutError"}}async function VM($,J){if(J<=0)return $;let Q,Z=new Promise((W,j)=>{Q=setTimeout(()=>{j(new V7("cron run timed out"))},J)});try{return await Promise.race([$,Z])}finally{if(Q)clearTimeout(Q)}}class a6{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 Y7($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??jM)*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??WM);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 J=[...this.activeRuns.entries()];await Promise.all(J.map(async([Q,Z])=>{if(Z.sessionId)try{await this.options.runtimeHandlers.abortSession(Z.sessionId)}catch{}try{this.store.requeueRun({runId:Q,claimToken:Z.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:$B(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((J)=>this.executeClaim(J)))}catch($){let J=this.options.logger;if(J)if(J.error)J.error("cron.runner.tick.failed",{error:$});else J.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,J])=>{let Q=this.store.getRun($);return Q?[{...Q,...J}]:[]})}async executeClaim($){let J=$.run,Q=this.store.getSpec(J.specId);if(!Q){this.store.completeRun(J.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!Q.enabled||Q.removed){this.store.completeRun(J.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let Z=Q.maxParallel&&Q.maxParallel>0?Q.maxParallel:1;if(!this.limiter.acquire(Q.specId,J.runId,Z)){this.store.requeueRun({runId:J.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(Q.specId,J.runId),this.store.requeueRun({runId:J.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(J.runId,{claimToken:$.claimToken});let j=J.triggerEventId?this.store.getEventLog(J.triggerEventId):void 0,X,f,Y=Date.now(),V;if(Q.timeoutSeconds&&Q.timeoutSeconds>0)V=Y+Q.timeoutSeconds*1000;try{f=this.startClaimLeaseHeartbeat($);let H=await this.buildStartRequest(Q);if(X=(await this.options.runtimeHandlers.startSession(H)).sessionId.trim(),!X)throw Error("runtime returned empty sessionId");this.activeRuns.set(J.runId,{claimToken:$.claimToken,sessionId:X}),this.store.attachSessionIdToRun(J.runId,X);let A={config:H,prompt:this.buildPrompt(Q,j)},K=this.options.runtimeHandlers.sendSession(X,A),G=V?Math.max(1,V-Date.now()):0,D=(await VM(K,G)).result,U=Date.now(),F=f7({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...J,sessionId:X,status:"done"},spec:Q,data:{finalText:D.text,usage:D.usage,toolCalls:D.toolCalls,durationMs:U-Y,triggerEvent:j}});this.store.completeRun(J.runId,{status:"done",sessionId:X,reportPath:F,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",Q,J.runId),this.store.updateSpecLastRunAt(Q.specId,$B())}catch(H){let B=H instanceof V7;if(X&&B)try{await this.options.runtimeHandlers.abortSession(X)}catch{}let A=H instanceof Error?H.message:String(H),K=Date.now(),G=f7({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...J,sessionId:X,status:"failed"},spec:Q,data:{error:A,durationMs:K-Y,triggerEvent:j}});this.store.completeRun(J.runId,{status:"failed",sessionId:X,reportPath:G,error:A,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.failed",Q,J.runId)}finally{if(f?.(),X)try{await this.options.runtimeHandlers.stopSession(X)}catch{}this.activeRuns.delete(J.runId),this.limiter.release(Q.specId,J.runId)}}publishScheduleExecutionEvent($,J,Q){if(J.source!=="hub-schedule"||!this.options.eventPublisher)return;let Z=this.store.getRun(Q);if(!Z)return;let W=Z.status==="done"?"success":Z.status==="cancelled"?"aborted":Z.status==="running"?"running":Z.status==="queued"?"pending":"failed";this.options.eventPublisher($,{scheduleId:J.externalId,executionId:Z.runId,sessionId:Z.sessionId,triggeredAt:new Date(Z.scheduledFor??Z.createdAt).getTime(),startedAt:Z.startedAt?new Date(Z.startedAt).getTime():void 0,endedAt:Z.completedAt?new Date(Z.completedAt).getTime():void 0,status:W,errorMessage:Z.error})}buildPrompt($,J){let Q=$.prompt??"";if(!J)return Q;let Z={eventId:J.eventId,eventType:J.eventType,source:J.source,subject:J.subject,occurredAt:J.occurredAt,workspaceRoot:J.workspaceRoot,dedupeKey:J.dedupeKey,attributes:J.attributes,payload:J.payload};return`${Q}
252
+ `)}function fW($){let J=eT($.specs);sT(J,{recursive:!0});let Q=tT(J,`${$.run.runId}.md`),Z=`${$M($.run,$.spec,$.data.triggerEvent)}
253
+ ${JM($.data)}`;return oT(Q,Z,"utf8"),Q}class YW{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,J,Q){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let Z=Math.max(1,Math.floor(Q)),W=this.activeExecutions.get($)??new Set;if(W.size>=Z)return!1;return W.add(J),this.activeExecutions.set($,W),!0}release($,J){let Q=this.activeExecutions.get($);if(!Q)return;if(Q.delete(J),Q.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let J of this.activeExecutions.values())$+=J.size;return $}}var WM=15000,jM=90,JB=["rules","skills","plugins"];function XM($,J){return new Set($.extensions??JB).has(J)}function fM($,J){if($.tools===void 0)return{"*":{autoApprove:!0}};let Q={"*":{enabled:!1,autoApprove:!0}};for(let Z of $.tools)Q[Z]={enabled:!0,autoApprove:!0};if(J==="yolo")Q[F0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return Q}function YM($){let J=$?.trim();if(!J)return;return["# Notes Directory",`Use ${J} for durable notes related to this automation.`,"Before starting, inspect relevant existing notes there when useful. During or after the run, write concise notes there when they would help future runs continue with context."].join(`
254
+ `)}class VW extends Error{constructor($){super($);this.name="TimeoutError"}}async function VM($,J){if(J<=0)return $;let Q,Z=new Promise((W,j)=>{Q=setTimeout(()=>{j(new VW("cron run timed out"))},J)});try{return await Promise.race([$,Z])}finally{if(Q)clearTimeout(Q)}}class a6{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 YW($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??jM)*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??WM);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 J=[...this.activeRuns.entries()];await Promise.all(J.map(async([Q,Z])=>{if(Z.sessionId)try{await this.options.runtimeHandlers.abortSession(Z.sessionId)}catch{}try{this.store.requeueRun({runId:Q,claimToken:Z.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:$B(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((J)=>this.executeClaim(J)))}catch($){let J=this.options.logger;if(J)if(J.error)J.error("cron.runner.tick.failed",{error:$});else J.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,J])=>{let Q=this.store.getRun($);return Q?[{...Q,...J}]:[]})}async executeClaim($){let J=$.run,Q=this.store.getSpec(J.specId);if(!Q){this.store.completeRun(J.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!Q.enabled||Q.removed){this.store.completeRun(J.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let Z=Q.maxParallel&&Q.maxParallel>0?Q.maxParallel:1;if(!this.limiter.acquire(Q.specId,J.runId,Z)){this.store.requeueRun({runId:J.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(Q.specId,J.runId),this.store.requeueRun({runId:J.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(J.runId,{claimToken:$.claimToken});let j=J.triggerEventId?this.store.getEventLog(J.triggerEventId):void 0,X,f,Y=Date.now(),V;if(Q.timeoutSeconds&&Q.timeoutSeconds>0)V=Y+Q.timeoutSeconds*1000;try{f=this.startClaimLeaseHeartbeat($);let H=await this.buildStartRequest(Q);if(X=(await this.options.runtimeHandlers.startSession(H)).sessionId.trim(),!X)throw Error("runtime returned empty sessionId");this.activeRuns.set(J.runId,{claimToken:$.claimToken,sessionId:X}),this.store.attachSessionIdToRun(J.runId,X);let A={config:H,prompt:this.buildPrompt(Q,j)},K=this.options.runtimeHandlers.sendSession(X,A),G=V?Math.max(1,V-Date.now()):0,D=(await VM(K,G)).result,U=Date.now(),F=fW({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...J,sessionId:X,status:"done"},spec:Q,data:{finalText:D.text,usage:D.usage,toolCalls:D.toolCalls,durationMs:U-Y,triggerEvent:j}});this.store.completeRun(J.runId,{status:"done",sessionId:X,reportPath:F,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",Q,J.runId),this.store.updateSpecLastRunAt(Q.specId,$B())}catch(H){let B=H instanceof VW;if(X&&B)try{await this.options.runtimeHandlers.abortSession(X)}catch{}let A=H instanceof Error?H.message:String(H),K=Date.now(),G=fW({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...J,sessionId:X,status:"failed"},spec:Q,data:{error:A,durationMs:K-Y,triggerEvent:j}});this.store.completeRun(J.runId,{status:"failed",sessionId:X,reportPath:G,error:A,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.failed",Q,J.runId)}finally{if(f?.(),X)try{await this.options.runtimeHandlers.stopSession(X)}catch{}this.activeRuns.delete(J.runId),this.limiter.release(Q.specId,J.runId)}}publishScheduleExecutionEvent($,J,Q){if(J.source!=="hub-schedule"||!this.options.eventPublisher)return;let Z=this.store.getRun(Q);if(!Z)return;let W=Z.status==="done"?"success":Z.status==="cancelled"?"aborted":Z.status==="running"?"running":Z.status==="queued"?"pending":"failed";this.options.eventPublisher($,{scheduleId:J.externalId,executionId:Z.runId,sessionId:Z.sessionId,triggeredAt:new Date(Z.scheduledFor??Z.createdAt).getTime(),startedAt:Z.startedAt?new Date(Z.startedAt).getTime():void 0,endedAt:Z.completedAt?new Date(Z.completedAt).getTime():void 0,status:W,errorMessage:Z.error})}buildPrompt($,J){let Q=$.prompt??"";if(!J)return Q;let Z={eventId:J.eventId,eventType:J.eventType,source:J.source,subject:J.subject,occurredAt:J.occurredAt,workspaceRoot:J.workspaceRoot,dedupeKey:J.dedupeKey,attributes:J.attributes,payload:J.payload};return`${Q}
255
255
 
256
256
  Trigger event:
257
- ${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Q=setInterval(()=>{let Z=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,Z))clearInterval(Q)},J);return()=>clearInterval(Q)}async buildSystemPrompt($,J,Q,Z){let W=YM($.notesDirectory),j=w8(void 0,W),X=await T6(J),f=ZM({ide:"Cline Cron",workspaceRoot:J,workspaceName:QM(J),metadata:X,rules:$.systemPrompt?void 0:j,mode:Q,providerId:Z,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?w8(f,j)??f:f}async buildStartRequest($){let J=($.workspaceRoot??"").trim(),Q=($.providerId??"").trim(),Z=($.modelId??"").trim(),W=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,j=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():J;if(!J)throw Error("cron spec requires workspaceRoot");let X=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:J,cwd:j,provider:Q,model:Z,mode:X,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,J,X,Q),maxIterations:$.maxIterations,enableTools:W?.enableTools??!0,enableSpawn:W?.enableSpawn??!0,enableTeams:W?.enableTeams??!0,autoApproveTools:W?.autoApproveTools??!0,toolPolicies:fM($,X),configExtensions:JB.filter((f)=>XM($,f))}}}import{existsSync as EM,readdirSync as bM,readFileSync as hM,statSync as kM}from"node:fs";import{relative as IM}from"node:path";import{resolveCronSpecsDir as xM}from"@cline/shared/storage";function s6($,J,Q,Z){let W=new Set;function j(X){let f=X.toLowerCase();if(Z){let V=Z.indexOf(f);if(V!==-1)return V+J}let Y=Number(X);if(!Number.isInteger(Y)||Y<J||Y>Q)throw Error(`Invalid cron value "${X}" for range [${J}-${Q}]`);return Y}for(let X of $.split(",")){if(X==="*"){for(let V=J;V<=Q;V+=1)W.add(V);continue}let f=X.indexOf("/");if(f!==-1){let V=X.slice(0,f),H=Number(X.slice(f+1));if(!Number.isInteger(H)||H<1)throw Error(`Invalid step "${X.slice(f+1)}"`);let B=J,A=Q;if(V!=="*"){let K=V.indexOf("-");if(K!==-1)B=j(V.slice(0,K)),A=j(V.slice(K+1));else B=j(V)}if(B>A)throw Error(`Invalid cron range "${V}"`);for(let K=B;K<=A;K+=H)W.add(K);continue}let Y=X.indexOf("-");if(Y!==-1){let V=j(X.slice(0,Y)),H=j(X.slice(Y+1));if(V>H)throw Error(`Invalid cron range "${X}"`);for(let B=V;B<=H;B+=1)W.add(B);continue}W.add(j(X))}return[...W].sort((X,f)=>X-f)}var HM=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],ZB=["sun","mon","tue","wed","thu","fri","sat"];function o6($,J,Q){let Z=$[J];if(typeof Z!=="string")throw Error(`Invalid cron pattern "${Q}": missing field ${J+1}`);return Z}function H7($,J){let Q=$[0];if(typeof Q!=="number")throw Error(`Invalid cron pattern: no values parsed for ${J}`);return Q}function B7($){let J=$.trim().split(/\s+/);if(J.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${J.length}`);return{minutes:s6(o6(J,0,$),0,59),hours:s6(o6(J,1,$),0,23),daysOfMonth:s6(o6(J,2,$),1,31),months:s6(o6(J,3,$),1,12,HM),daysOfWeek:s6(o6(J,4,$),0,6,ZB)}}function A7($){B7($)}function WB($,J,Q=Date.now()){D2($,Q,J)}var QB=new Map,BM=new Map(ZB.map(($,J)=>[$,J]));function jB($){let J=$?.trim();return J?J:void 0}function XB($){let J=QB.get($);if(J)return J;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 QB.set($,Q),Q}function AM($){let J=jB($);if(!J)return;XB(J).format(new Date)}function KM($,J){let Q=XB(J).formatToParts(new Date($)),Z=new Map(Q.map((X)=>[X.type,X.value])),W=Z.get("weekday")?.toLowerCase().slice(0,3)??"",j=BM.get(W);if(j===void 0)throw Error(`Unable to resolve weekday for timezone "${J}"`);return{month:Number(Z.get("month")),dayOfMonth:Number(Z.get("day")),dayOfWeek:j,hour:Number(Z.get("hour")),minute:Number(Z.get("minute"))}}function GM($){let J=new Date($);return{month:J.getMonth()+1,dayOfMonth:J.getDate(),dayOfWeek:J.getDay(),hour:J.getHours(),minute:J.getMinutes()}}function FM($,J){return $.months.includes(J.month)&&$.daysOfMonth.includes(J.dayOfMonth)&&$.daysOfWeek.includes(J.dayOfWeek)&&$.hours.includes(J.hour)&&$.minutes.includes(J.minute)}function DM($,J,Q){let Z=B7($),W=new Date(J);W.setSeconds(0,0);let j=W.getTime()+60000,X=new Date(J);X.setFullYear(X.getFullYear()+4);let f=X.getTime();while(j<=f){if(FM(Z,KM(j,Q)))return j;j+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Q}"`)}function D2($,J,Q){let Z=jB(Q);if(Z)return AM(Z),DM($,J,Z);let W=B7($),j=new Date(J);j.setSeconds(0,0),j=new Date(j.getTime()+60000);let X=new Date(J);X.setFullYear(X.getFullYear()+4);while(j<=X){let{month:f,dayOfMonth:Y,dayOfWeek:V,hour:H,minute:B}=GM(j.getTime());if(!W.months.includes(f)){let A=W.months.find((G)=>G>f)??H7(W.months,"months"),K=A<=f?1:0;j=new Date(j.getFullYear()+K,A-1,1,0,0,0,0);continue}if(!W.daysOfMonth.includes(Y)||!W.daysOfWeek.includes(V)){j=new Date(j.getFullYear(),j.getMonth(),Y+1,0,0,0,0);continue}if(!W.hours.includes(H)){let A=W.hours.find((G)=>G>H)??H7(W.hours,"hours"),K=A<=H?1:0;j=new Date(j.getFullYear(),j.getMonth(),j.getDate()+K,A,0,0,0);continue}if(!W.minutes.includes(B)){let A=W.minutes.find((G)=>G>B)??H7(W.minutes,"minutes"),K=A<=B?1:0;j=new Date(j.getFullYear(),j.getMonth(),j.getDate(),j.getHours()+K,A,0,0);continue}return j.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{createHash as UM}from"node:crypto";import RM from"yaml";function LM($){let J=$.replace(/\\/g,"/");if(J.startsWith("events/")&&J.endsWith(".event.md"))return"event";if(J.endsWith(".cron.md"))return"schedule";return"one_off"}function zM($){let J=$.replace(/\r\n/g,`
257
+ ${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Math.floor(this.claimLeaseMs/2)),Q=setInterval(()=>{let Z=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,Z))clearInterval(Q)},J);return()=>clearInterval(Q)}async buildSystemPrompt($,J,Q,Z){let W=YM($.notesDirectory),j=w8(void 0,W),X=await T6(J),f=ZM({ide:"Cline Cron",workspaceRoot:J,workspaceName:QM(J),metadata:X,rules:$.systemPrompt?void 0:j,mode:Q,providerId:Z,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?w8(f,j)??f:f}async buildStartRequest($){let J=($.workspaceRoot??"").trim(),Q=($.providerId??"").trim(),Z=($.modelId??"").trim(),W=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,j=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():J;if(!J)throw Error("cron spec requires workspaceRoot");let X=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:J,cwd:j,provider:Q,model:Z,mode:X,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,J,X,Q),maxIterations:$.maxIterations,enableTools:W?.enableTools??!0,enableSpawn:W?.enableSpawn??!0,enableTeams:W?.enableTeams??!0,autoApproveTools:W?.autoApproveTools??!0,toolPolicies:fM($,X),configExtensions:JB.filter((f)=>XM($,f))}}}import{existsSync as EM,readdirSync as bM,readFileSync as hM,statSync as kM}from"node:fs";import{relative as IM}from"node:path";import{resolveCronSpecsDir as xM}from"@cline/shared/storage";function s6($,J,Q,Z){let W=new Set;function j(X){let f=X.toLowerCase();if(Z){let V=Z.indexOf(f);if(V!==-1)return V+J}let Y=Number(X);if(!Number.isInteger(Y)||Y<J||Y>Q)throw Error(`Invalid cron value "${X}" for range [${J}-${Q}]`);return Y}for(let X of $.split(",")){if(X==="*"){for(let V=J;V<=Q;V+=1)W.add(V);continue}let f=X.indexOf("/");if(f!==-1){let V=X.slice(0,f),H=Number(X.slice(f+1));if(!Number.isInteger(H)||H<1)throw Error(`Invalid step "${X.slice(f+1)}"`);let B=J,A=Q;if(V!=="*"){let K=V.indexOf("-");if(K!==-1)B=j(V.slice(0,K)),A=j(V.slice(K+1));else B=j(V)}if(B>A)throw Error(`Invalid cron range "${V}"`);for(let K=B;K<=A;K+=H)W.add(K);continue}let Y=X.indexOf("-");if(Y!==-1){let V=j(X.slice(0,Y)),H=j(X.slice(Y+1));if(V>H)throw Error(`Invalid cron range "${X}"`);for(let B=V;B<=H;B+=1)W.add(B);continue}W.add(j(X))}return[...W].sort((X,f)=>X-f)}var HM=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],ZB=["sun","mon","tue","wed","thu","fri","sat"];function o6($,J,Q){let Z=$[J];if(typeof Z!=="string")throw Error(`Invalid cron pattern "${Q}": missing field ${J+1}`);return Z}function HW($,J){let Q=$[0];if(typeof Q!=="number")throw Error(`Invalid cron pattern: no values parsed for ${J}`);return Q}function BW($){let J=$.trim().split(/\s+/);if(J.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${J.length}`);return{minutes:s6(o6(J,0,$),0,59),hours:s6(o6(J,1,$),0,23),daysOfMonth:s6(o6(J,2,$),1,31),months:s6(o6(J,3,$),1,12,HM),daysOfWeek:s6(o6(J,4,$),0,6,ZB)}}function AW($){BW($)}function WB($,J,Q=Date.now()){D2($,Q,J)}var QB=new Map,BM=new Map(ZB.map(($,J)=>[$,J]));function jB($){let J=$?.trim();return J?J:void 0}function XB($){let J=QB.get($);if(J)return J;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 QB.set($,Q),Q}function AM($){let J=jB($);if(!J)return;XB(J).format(new Date)}function KM($,J){let Q=XB(J).formatToParts(new Date($)),Z=new Map(Q.map((X)=>[X.type,X.value])),W=Z.get("weekday")?.toLowerCase().slice(0,3)??"",j=BM.get(W);if(j===void 0)throw Error(`Unable to resolve weekday for timezone "${J}"`);return{month:Number(Z.get("month")),dayOfMonth:Number(Z.get("day")),dayOfWeek:j,hour:Number(Z.get("hour")),minute:Number(Z.get("minute"))}}function GM($){let J=new Date($);return{month:J.getMonth()+1,dayOfMonth:J.getDate(),dayOfWeek:J.getDay(),hour:J.getHours(),minute:J.getMinutes()}}function FM($,J){return $.months.includes(J.month)&&$.daysOfMonth.includes(J.dayOfMonth)&&$.daysOfWeek.includes(J.dayOfWeek)&&$.hours.includes(J.hour)&&$.minutes.includes(J.minute)}function DM($,J,Q){let Z=BW($),W=new Date(J);W.setSeconds(0,0);let j=W.getTime()+60000,X=new Date(J);X.setFullYear(X.getFullYear()+4);let f=X.getTime();while(j<=f){if(FM(Z,KM(j,Q)))return j;j+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${Q}"`)}function D2($,J,Q){let Z=jB(Q);if(Z)return AM(Z),DM($,J,Z);let W=BW($),j=new Date(J);j.setSeconds(0,0),j=new Date(j.getTime()+60000);let X=new Date(J);X.setFullYear(X.getFullYear()+4);while(j<=X){let{month:f,dayOfMonth:Y,dayOfWeek:V,hour:H,minute:B}=GM(j.getTime());if(!W.months.includes(f)){let A=W.months.find((G)=>G>f)??HW(W.months,"months"),K=A<=f?1:0;j=new Date(j.getFullYear()+K,A-1,1,0,0,0,0);continue}if(!W.daysOfMonth.includes(Y)||!W.daysOfWeek.includes(V)){j=new Date(j.getFullYear(),j.getMonth(),Y+1,0,0,0,0);continue}if(!W.hours.includes(H)){let A=W.hours.find((G)=>G>H)??HW(W.hours,"hours"),K=A<=H?1:0;j=new Date(j.getFullYear(),j.getMonth(),j.getDate()+K,A,0,0,0);continue}if(!W.minutes.includes(B)){let A=W.minutes.find((G)=>G>B)??HW(W.minutes,"minutes"),K=A<=B?1:0;j=new Date(j.getFullYear(),j.getMonth(),j.getDate(),j.getHours()+K,A,0,0);continue}return j.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{createHash as UM}from"node:crypto";import RM from"yaml";function LM($){let J=$.replace(/\\/g,"/");if(J.startsWith("events/")&&J.endsWith(".event.md"))return"event";if(J.endsWith(".cron.md"))return"schedule";return"one_off"}function zM($){let J=$.replace(/\r\n/g,`
258
258
  `);if(!J.startsWith(`---
259
259
  `))return{frontmatter:void 0,body:$};let Q=J.slice(4),Z=Q.indexOf(`
260
260
  ---`);if(Z===-1)return{frontmatter:void 0,body:$};let W=Q.slice(0,Z),j=Q.slice(Z+4);if(j.startsWith(`
261
- `))j=j.slice(1);return{frontmatter:W,body:j}}function p0($){if(typeof $!=="string")return;let J=$.trim();return J.length>0?J:void 0}function _M($){if(!Array.isArray($))return;let J=$.map((Q)=>typeof Q==="string"?Q.trim():"").filter((Q)=>Q.length>0);return J.length>0?J:void 0}function F7($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function OM($){let J=F7($);if(!J)return;let Q=p0(J.providerId),Z=p0(J.modelId);if(Q===void 0&&Z===void 0)return;return{providerId:Q,modelId:Z}}function TM($){if(typeof $!=="string")return;let J=$.trim().toLowerCase();if(J==="act"||J==="plan"||J==="yolo")return J;return}function YB($,J={}){let Q=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!Q)return;let Z=[...new Set(Q.map((W)=>typeof W==="string"?W.trim():"").filter((W)=>W.length>0))];if(Array.isArray($)&&J.preserveEmptyArray)return Z;return Z.length>0?Z:void 0}var MM=new Set(W$);function qM($){let J=YB($,{preserveEmptyArray:!0});if(!J)return;let Q=J.filter((Z)=>!MM.has(Z));if(Q.length>0)throw Error(`unknown tool(s): ${Q.join(", ")}`);return J}var PM=new Set(["rules","skills","plugins"]);function NM($){let J=YB($,{preserveEmptyArray:!0});if(!J)return;let Q=J.filter((Z)=>!PM.has(Z));if(Q.length>0)throw Error(`unknown extension(s): ${Q.join(", ")}`);return J}function K7($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function G7($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function D7($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Q)=>D7(Q)).join(",")}]`;let J=Object.entries($).filter(([,Q])=>Q!==void 0);return J.sort(([Q],[Z])=>Q<Z?-1:Q>Z?1:0),`{${J.map(([Q,Z])=>`${JSON.stringify(Q)}:${D7(Z)}`).join(",")}}`}function VB($,J){let Q=UM("sha256");return Q.update(D7($)),Q.update(`
262
- `),Q.update(J),Q.digest("hex")}function wM($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var SM=["schedule","timezone"],CM=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],yM=["cwd"];function fB($,J,Q,Z,W){return{externalId:$,relativePath:$,triggerKind:J,body:Q,contentHash:VB(Z,Q),error:W}}function K1($,J,Q,Z,W,j){return{externalId:$,relativePath:J,triggerKind:Q,body:Z,contentHash:W,error:j}}function HB($){let J=$.relativePath.replace(/\\/g,"/"),Q=LM(J),{frontmatter:Z,body:W}=zM($.raw),j={};if(Z!==void 0&&Z.trim().length>0)try{let F=RM.parse(Z);if(F&&typeof F==="object"&&!Array.isArray(F))j=F;else if(F!==null&&F!==void 0)return fB(J,Q,W,{},"frontmatter must be a YAML mapping")}catch(F){return fB(J,Q,W,{},F instanceof Error?`failed to parse frontmatter: ${F.message}`:"failed to parse frontmatter")}let X=VB(j,W),f=p0(j.id),Y=f??J;if(Q!=="schedule"){for(let F of SM)if(j[F]!==void 0)return K1(Y,J,Q,W,X,`field "${F}" is only allowed on *.cron.md specs`)}for(let F of yM)if(j[F]!==void 0)return K1(Y,J,Q,W,X,`field "${F}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Q!=="event"){for(let F of CM)if(j[F]!==void 0)return K1(Y,J,Q,W,X,`field "${F}" is only allowed on .event.md specs`)}let V=p0(j.prompt),H=W.trim(),B=V??(H.length>0?H:void 0);if(!B)return K1(Y,J,Q,W,X,"prompt is required (frontmatter `prompt` or markdown body)");let A=p0(j.workspaceRoot);if(!A)return K1(Y,J,Q,W,X,"workspaceRoot is required");let K,G;try{K=qM(j.tools),G=NM(j.extensions)}catch(F){return K1(Y,J,Q,W,X,F instanceof Error?F.message:String(F))}let R=TM(j.mode);if(j.mode!==void 0&&R===void 0)return K1(Y,J,Q,W,X,"mode must be one of: act, plan, yolo");let D={id:f,title:p0(j.title)??f??wM(J),prompt:B,workspaceRoot:A,mode:R??"yolo",systemPrompt:p0(j.systemPrompt),modelSelection:OM(j.modelSelection),maxIterations:K7(j.maxIterations),timeoutSeconds:K7(j.timeoutSeconds),tools:K,notesDirectory:p0(j.notesDirectory),extensions:G,source:p0(j.source)??"user",tags:_M(j.tags),enabled:typeof j.enabled==="boolean"?j.enabled:!0,metadata:F7(j.metadata)},U;if(Q==="schedule"){let F=p0(j.schedule);if(!F)return K1(Y,J,Q,W,X,"schedule is required for *.cron.md specs");let O=p0(j.timezone);try{WB(F,O)}catch(z){return K1(Y,J,Q,W,X,z instanceof Error?z.message:String(z))}U={...D,triggerKind:"schedule",schedule:F,timezone:O}}else if(Q==="event"){let F=p0(j.event);if(!F)return K1(Y,J,Q,W,X,"event is required for .event.md specs");U={...D,triggerKind:"event",event:F,filters:F7(j.filters),debounceSeconds:G7(j.debounceSeconds),dedupeWindowSeconds:G7(j.dedupeWindowSeconds),cooldownSeconds:G7(j.cooldownSeconds),maxParallel:K7(j.maxParallel)}}else U={...D,triggerKind:"one_off"};return{externalId:Y,relativePath:J,triggerKind:Q,body:W,contentHash:X,spec:U}}function gM($,J){return IM($,J).replace(/\\/g,"/")}function mM($){if(!EM($))return[];let J=[],Q=[$];while(Q.length>0){let Z=Q.pop();if(!Z)continue;let W;try{W=bM(Z,{withFileTypes:!0})}catch{continue}for(let j of W){let X=`${Z}/${j.name}`;if(j.isDirectory()){if(j.name==="reports")continue;Q.push(X);continue}if(!j.isFile())continue;if(!j.name.endsWith(".md"))continue;J.push(X)}}return J}class U7{store;cronDir;constructor($){this.store=$.store,this.cronDir=xM($.specs??($.workspaceRoot?{scope:"workspace",workspaceRoot:$.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let $={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},J=mM(this.cronDir),Q=new Set;for(let W of J){let j=gM(this.cronDir,W);Q.add(j),$.scanned+=1;let X=await this.reconcileFile(j,W);if(X){if($.changes.push(X),$.upserted+=1,X.parse.error)$.invalidParses+=1}}let Z=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let W of Z)if(!Q.has(W.sourcePath))this.handleFileDeleted(W),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,J){let Q=this.store.getSpecBySourcePath($),Z,W;try{Z=hM(J,"utf8"),W=kM(J).mtimeMs}catch{return}let X=HB({relativePath:$,raw:Z}),f=this.store.upsertSpec({externalId:X.externalId,sourcePath:$,triggerKind:X.triggerKind,sourceMtimeMs:W,sourceHash:X.contentHash,parseStatus:X.error?"invalid":"valid",parseError:X.error,spec:X.spec});if(!X.error&&X.triggerKind==="schedule"&&f.record.enabled)this.applyScheduleNextRunAt(f.record,{forceReset:!Q||Q.removed||!Q.enabled||Q.scheduleExpr!==f.record.scheduleExpr||Q.timezone!==f.record.timezone});return{relativePath:$,result:f,parse:X}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let J of $)this.applyScheduleNextRunAt(J,{forceReset:!1})}applyScheduleNextRunAt($,J){if(!$.scheduleExpr)return;if(!J.forceReset&&$.nextRunAt)return;try{let Q=Date.now(),Z=$.lastRunAt?Math.max(Q,new Date($.lastRunAt).getTime()):Q,W=D2($.scheduleExpr,Z,$.timezone),j=new Date(W).toISOString();if($.nextRunAt!==j)this.store.updateSpecNextRunAt($.specId,j)}catch{}}}import{existsSync as vM,mkdirSync as cM,watch as uM}from"node:fs";import{relative as dM,resolve as lM}from"node:path";var pM=250;class R7{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??pM),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{cM($,{recursive:!0}),this.watcher=uM($,{recursive:!0},(J,Q)=>{if(!Q)return;let Z=String(Q).replace(/\\/g,"/");if(!Z.endsWith(".md"))return;if(Z.startsWith("reports/"))return;this.scheduleReconcile(Z)}),this.watcher.on("error",this.onError)}catch(J){this.onError(J)}}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 J=this.pending.get($);if(J)clearTimeout(J);let Q=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,Q)}async reconcileNow($){try{let J=lM(this.reconciler.getCronDir(),$);if(!vM(J)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Q=dM(this.reconciler.getCronDir(),J).replace(/\\/g,"/");await this.reconciler.reconcileFile(Q,J),await this.onReconciled()}catch(J){this.onError(J)}}}import{randomUUID as t6}from"node:crypto";import{asOptionalString as g,asString as s,loadSqliteDb as iM,nowIso as _0}from"@cline/shared/db";import{resolveCronDbPath as nM}from"@cline/shared/storage";var rM=[`CREATE TABLE IF NOT EXISTS cron_specs (
261
+ `))j=j.slice(1);return{frontmatter:W,body:j}}function p0($){if(typeof $!=="string")return;let J=$.trim();return J.length>0?J:void 0}function _M($){if(!Array.isArray($))return;let J=$.map((Q)=>typeof Q==="string"?Q.trim():"").filter((Q)=>Q.length>0);return J.length>0?J:void 0}function FW($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function OM($){let J=FW($);if(!J)return;let Q=p0(J.providerId),Z=p0(J.modelId);if(Q===void 0&&Z===void 0)return;return{providerId:Q,modelId:Z}}function TM($){if(typeof $!=="string")return;let J=$.trim().toLowerCase();if(J==="act"||J==="plan"||J==="yolo")return J;return}function YB($,J={}){let Q=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!Q)return;let Z=[...new Set(Q.map((W)=>typeof W==="string"?W.trim():"").filter((W)=>W.length>0))];if(Array.isArray($)&&J.preserveEmptyArray)return Z;return Z.length>0?Z:void 0}var MM=new Set(W$);function qM($){let J=YB($,{preserveEmptyArray:!0});if(!J)return;let Q=J.filter((Z)=>!MM.has(Z));if(Q.length>0)throw Error(`unknown tool(s): ${Q.join(", ")}`);return J}var PM=new Set(["rules","skills","plugins"]);function NM($){let J=YB($,{preserveEmptyArray:!0});if(!J)return;let Q=J.filter((Z)=>!PM.has(Z));if(Q.length>0)throw Error(`unknown extension(s): ${Q.join(", ")}`);return J}function KW($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function GW($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function DW($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((Q)=>DW(Q)).join(",")}]`;let J=Object.entries($).filter(([,Q])=>Q!==void 0);return J.sort(([Q],[Z])=>Q<Z?-1:Q>Z?1:0),`{${J.map(([Q,Z])=>`${JSON.stringify(Q)}:${DW(Z)}`).join(",")}}`}function VB($,J){let Q=UM("sha256");return Q.update(DW($)),Q.update(`
262
+ `),Q.update(J),Q.digest("hex")}function wM($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var SM=["schedule","timezone"],CM=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],yM=["cwd"];function fB($,J,Q,Z,W){return{externalId:$,relativePath:$,triggerKind:J,body:Q,contentHash:VB(Z,Q),error:W}}function K1($,J,Q,Z,W,j){return{externalId:$,relativePath:J,triggerKind:Q,body:Z,contentHash:W,error:j}}function HB($){let J=$.relativePath.replace(/\\/g,"/"),Q=LM(J),{frontmatter:Z,body:W}=zM($.raw),j={};if(Z!==void 0&&Z.trim().length>0)try{let F=RM.parse(Z);if(F&&typeof F==="object"&&!Array.isArray(F))j=F;else if(F!==null&&F!==void 0)return fB(J,Q,W,{},"frontmatter must be a YAML mapping")}catch(F){return fB(J,Q,W,{},F instanceof Error?`failed to parse frontmatter: ${F.message}`:"failed to parse frontmatter")}let X=VB(j,W),f=p0(j.id),Y=f??J;if(Q!=="schedule"){for(let F of SM)if(j[F]!==void 0)return K1(Y,J,Q,W,X,`field "${F}" is only allowed on *.cron.md specs`)}for(let F of yM)if(j[F]!==void 0)return K1(Y,J,Q,W,X,`field "${F}" is no longer supported; cron specs use workspaceRoot as cwd`);if(Q!=="event"){for(let F of CM)if(j[F]!==void 0)return K1(Y,J,Q,W,X,`field "${F}" is only allowed on .event.md specs`)}let V=p0(j.prompt),H=W.trim(),B=V??(H.length>0?H:void 0);if(!B)return K1(Y,J,Q,W,X,"prompt is required (frontmatter `prompt` or markdown body)");let A=p0(j.workspaceRoot);if(!A)return K1(Y,J,Q,W,X,"workspaceRoot is required");let K,G;try{K=qM(j.tools),G=NM(j.extensions)}catch(F){return K1(Y,J,Q,W,X,F instanceof Error?F.message:String(F))}let R=TM(j.mode);if(j.mode!==void 0&&R===void 0)return K1(Y,J,Q,W,X,"mode must be one of: act, plan, yolo");let D={id:f,title:p0(j.title)??f??wM(J),prompt:B,workspaceRoot:A,mode:R??"yolo",systemPrompt:p0(j.systemPrompt),modelSelection:OM(j.modelSelection),maxIterations:KW(j.maxIterations),timeoutSeconds:KW(j.timeoutSeconds),tools:K,notesDirectory:p0(j.notesDirectory),extensions:G,source:p0(j.source)??"user",tags:_M(j.tags),enabled:typeof j.enabled==="boolean"?j.enabled:!0,metadata:FW(j.metadata)},U;if(Q==="schedule"){let F=p0(j.schedule);if(!F)return K1(Y,J,Q,W,X,"schedule is required for *.cron.md specs");let O=p0(j.timezone);try{WB(F,O)}catch(z){return K1(Y,J,Q,W,X,z instanceof Error?z.message:String(z))}U={...D,triggerKind:"schedule",schedule:F,timezone:O}}else if(Q==="event"){let F=p0(j.event);if(!F)return K1(Y,J,Q,W,X,"event is required for .event.md specs");U={...D,triggerKind:"event",event:F,filters:FW(j.filters),debounceSeconds:GW(j.debounceSeconds),dedupeWindowSeconds:GW(j.dedupeWindowSeconds),cooldownSeconds:GW(j.cooldownSeconds),maxParallel:KW(j.maxParallel)}}else U={...D,triggerKind:"one_off"};return{externalId:Y,relativePath:J,triggerKind:Q,body:W,contentHash:X,spec:U}}function gM($,J){return IM($,J).replace(/\\/g,"/")}function mM($){if(!EM($))return[];let J=[],Q=[$];while(Q.length>0){let Z=Q.pop();if(!Z)continue;let W;try{W=bM(Z,{withFileTypes:!0})}catch{continue}for(let j of W){let X=`${Z}/${j.name}`;if(j.isDirectory()){if(j.name==="reports")continue;Q.push(X);continue}if(!j.isFile())continue;if(!j.name.endsWith(".md"))continue;J.push(X)}}return J}class UW{store;cronDir;constructor($){this.store=$.store,this.cronDir=xM($.specs??($.workspaceRoot?{scope:"workspace",workspaceRoot:$.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let $={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},J=mM(this.cronDir),Q=new Set;for(let W of J){let j=gM(this.cronDir,W);Q.add(j),$.scanned+=1;let X=await this.reconcileFile(j,W);if(X){if($.changes.push(X),$.upserted+=1,X.parse.error)$.invalidParses+=1}}let Z=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let W of Z)if(!Q.has(W.sourcePath))this.handleFileDeleted(W),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,J){let Q=this.store.getSpecBySourcePath($),Z,W;try{Z=hM(J,"utf8"),W=kM(J).mtimeMs}catch{return}let X=HB({relativePath:$,raw:Z}),f=this.store.upsertSpec({externalId:X.externalId,sourcePath:$,triggerKind:X.triggerKind,sourceMtimeMs:W,sourceHash:X.contentHash,parseStatus:X.error?"invalid":"valid",parseError:X.error,spec:X.spec});if(!X.error&&X.triggerKind==="schedule"&&f.record.enabled)this.applyScheduleNextRunAt(f.record,{forceReset:!Q||Q.removed||!Q.enabled||Q.scheduleExpr!==f.record.scheduleExpr||Q.timezone!==f.record.timezone});return{relativePath:$,result:f,parse:X}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let J of $)this.applyScheduleNextRunAt(J,{forceReset:!1})}applyScheduleNextRunAt($,J){if(!$.scheduleExpr)return;if(!J.forceReset&&$.nextRunAt)return;try{let Q=Date.now(),Z=$.lastRunAt?Math.max(Q,new Date($.lastRunAt).getTime()):Q,W=D2($.scheduleExpr,Z,$.timezone),j=new Date(W).toISOString();if($.nextRunAt!==j)this.store.updateSpecNextRunAt($.specId,j)}catch{}}}import{existsSync as vM,mkdirSync as cM,watch as uM}from"node:fs";import{relative as dM,resolve as lM}from"node:path";var pM=250;class RW{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??pM),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{cM($,{recursive:!0}),this.watcher=uM($,{recursive:!0},(J,Q)=>{if(!Q)return;let Z=String(Q).replace(/\\/g,"/");if(!Z.endsWith(".md"))return;if(Z.startsWith("reports/"))return;this.scheduleReconcile(Z)}),this.watcher.on("error",this.onError)}catch(J){this.onError(J)}}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 J=this.pending.get($);if(J)clearTimeout(J);let Q=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,Q)}async reconcileNow($){try{let J=lM(this.reconciler.getCronDir(),$);if(!vM(J)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let Q=dM(this.reconciler.getCronDir(),J).replace(/\\/g,"/");await this.reconciler.reconcileFile(Q,J),await this.onReconciled()}catch(J){this.onError(J)}}}import{randomUUID as t6}from"node:crypto";import{asOptionalString as g,asString as o,loadSqliteDb as iM,nowIso as _0}from"@cline/shared/db";import{resolveCronDbPath as nM}from"@cline/shared/storage";var rM=[`CREATE TABLE IF NOT EXISTS cron_specs (
263
263
  spec_id TEXT PRIMARY KEY,
264
264
  external_id TEXT NOT NULL,
265
265
  source_path TEXT NOT NULL UNIQUE,
@@ -350,11 +350,11 @@ ${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
350
350
  ON cron_specs(trigger_kind, enabled, next_run_at);`,`CREATE INDEX IF NOT EXISTS cron_specs_event_match_idx
351
351
  ON cron_specs(trigger_kind, event_type, enabled);`,`CREATE INDEX IF NOT EXISTS cron_specs_parse_status_idx
352
352
  ON cron_specs(parse_status, updated_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_source_path_idx
353
- ON cron_specs(source_path);`];function BB($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let J of rM)$.exec(J)}function dQ($){if(!$)return;try{let J=JSON.parse($);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return}function L7($,J={}){if(!$)return;try{let Q=JSON.parse($);if(!Array.isArray(Q))return;let Z=Q.map((W)=>typeof W==="string"?W.trim():"").filter((W)=>W.length>0);if(J.preserveEmpty)return Z;return Z.length>0?Z:void 0}catch{return}}function U2($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function M$($){return{specId:s($.spec_id),externalId:s($.external_id),sourcePath:s($.source_path),triggerKind:s($.trigger_kind),sourceMtimeMs:U2($.source_mtime_ms),sourceHash:g($.source_hash),parseStatus:s($.parse_status)==="invalid"?"invalid":"valid",parseError:g($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:s($.title),prompt:g($.prompt),workspaceRoot:g($.workspace_root),scheduleExpr:g($.schedule_expr),timezone:g($.timezone),eventType:g($.event_type),filters:dQ(g($.filters_json)),debounceSeconds:U2($.debounce_seconds),dedupeWindowSeconds:U2($.dedupe_window_seconds),cooldownSeconds:U2($.cooldown_seconds),mode:g($.mode),systemPrompt:g($.system_prompt),providerId:g($.provider_id),modelId:g($.model_id),maxIterations:U2($.max_iterations),timeoutSeconds:U2($.timeout_seconds),maxParallel:U2($.max_parallel),tools:L7(g($.tools_json),{preserveEmpty:!0}),notesDirectory:g($.notes_directory),extensions:L7(g($.extensions_json),{preserveEmpty:!0}),source:g($.source),tags:L7(g($.tags_json)),metadata:dQ(g($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:g($.last_materialized_run_id),lastRunAt:g($.last_run_at),nextRunAt:g($.next_run_at),createdAt:s($.created_at),updatedAt:s($.updated_at)}}function z7($){return{runId:s($.run_id),specId:s($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:s($.trigger_kind),status:s($.status),claimToken:g($.claim_token),claimStartedAt:g($.claim_started_at),claimUntilAt:g($.claim_until_at),scheduledFor:g($.scheduled_for),triggerEventId:g($.trigger_event_id),startedAt:g($.started_at),completedAt:g($.completed_at),sessionId:g($.session_id),reportPath:g($.report_path),error:g($.error),attemptCount:Number($.attempt_count??0),createdAt:s($.created_at),updatedAt:s($.updated_at)}}function AB($){return{eventId:s($.event_id),eventType:s($.event_type),source:s($.source),subject:g($.subject),occurredAt:s($.occurred_at),receivedAt:s($.received_at),workspaceRoot:g($.workspace_root),dedupeKey:g($.dedupe_key),payload:dQ(g($.payload_json)),attributes:dQ(g($.attributes_json)),processingStatus:s($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:g($.error),createdAt:s($.created_at),updatedAt:s($.updated_at)}}function KB($){return $?JSON.stringify($):null}var aM=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function GB($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function sM($,J,Q,Z){for(let W of aM){let j=$[W],X=J[W];if(GB(j)!==GB(X))return!0}if(Q===!1&&Z===!0)return!0;return!1}function oM($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function tM($){return`hub/schedules/${$}.cron.md`}function eM($){let J={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(J).length>0?J:void 0}function _7($){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((J)=>J.trim().length>0),enabled:$.enabled!==!1,metadata:eM($)}}function FB($){return JSON.stringify(_7($))}function $q($,J){let Q=$.metadata?{...$.metadata}:{},Z=J.createdBy===null?void 0:J.createdBy!==void 0?J.createdBy:typeof Q.__hubScheduleCreatedBy==="string"?Q.__hubScheduleCreatedBy:void 0,W=J.cwd!==void 0?J.cwd:typeof Q.__hubScheduleCwd==="string"?Q.__hubScheduleCwd:void 0,j=J.runtimeOptions!==void 0?J.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:J.name??$.title,cronPattern:J.cronPattern??$.scheduleExpr??"",prompt:J.prompt??$.prompt??"",workspaceRoot:J.workspaceRoot??$.workspaceRoot??"",cwd:W,modelSelection:J.modelSelection!==void 0?J.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:J.enabled??$.enabled,mode:J.mode??($.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"),systemPrompt:J.systemPrompt===null?void 0:J.systemPrompt!==void 0?J.systemPrompt:$.systemPrompt,maxIterations:J.maxIterations===null?void 0:J.maxIterations!==void 0?J.maxIterations:$.maxIterations,timeoutSeconds:J.timeoutSeconds===null?void 0:J.timeoutSeconds!==void 0?J.timeoutSeconds:$.timeoutSeconds,maxParallel:J.maxParallel??$.maxParallel??1,createdBy:Z,tags:J.tags??$.tags,runtimeOptions:j,metadata:J.metadata!==void 0?J.metadata:Object.keys(Q).length>0?Q:void 0}}class e6{db;constructor($={}){let J=$.dbPath??nM();this.db=iM(J),BB(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let J=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return J?M$(J):void 0}getSpec($){let J=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return J?M$(J):void 0}getSpecByExternalId($){let J=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return J?M$(J):void 0}listSpecs($={}){let J=[],Q=[];if($.triggerKind)J.push("trigger_kind = ?"),Q.push($.triggerKind);if(typeof $.enabled==="boolean")J.push("enabled = ?"),Q.push($.enabled?1:0);if($.parseStatus)J.push("parse_status = ?"),Q.push($.parseStatus);if(!$.includeRemoved)J.push("removed = 0");let Z=J.length>0?`WHERE ${J.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${Z} ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((X)=>M$(X))}createHubSchedule($){let J=`sched_${t6()}`,Q=this.upsertSpec({externalId:J,sourcePath:tM(J),triggerKind:"schedule",sourceHash:FB($),parseStatus:"valid",spec:_7($)});this.initializeScheduleNextRun(Q.record.specId);let Z=this.getSpec(Q.record.specId);if(!Z)throw Error("failed to create hub schedule");return Z}getHubSchedule($){let J=this.db.prepare(`SELECT * FROM cron_specs
353
+ ON cron_specs(source_path);`];function BB($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let J of rM)$.exec(J)}function d9($){if(!$)return;try{let J=JSON.parse($);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return}function LW($,J={}){if(!$)return;try{let Q=JSON.parse($);if(!Array.isArray(Q))return;let Z=Q.map((W)=>typeof W==="string"?W.trim():"").filter((W)=>W.length>0);if(J.preserveEmpty)return Z;return Z.length>0?Z:void 0}catch{return}}function U2($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function M$($){return{specId:o($.spec_id),externalId:o($.external_id),sourcePath:o($.source_path),triggerKind:o($.trigger_kind),sourceMtimeMs:U2($.source_mtime_ms),sourceHash:g($.source_hash),parseStatus:o($.parse_status)==="invalid"?"invalid":"valid",parseError:g($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:o($.title),prompt:g($.prompt),workspaceRoot:g($.workspace_root),scheduleExpr:g($.schedule_expr),timezone:g($.timezone),eventType:g($.event_type),filters:d9(g($.filters_json)),debounceSeconds:U2($.debounce_seconds),dedupeWindowSeconds:U2($.dedupe_window_seconds),cooldownSeconds:U2($.cooldown_seconds),mode:g($.mode),systemPrompt:g($.system_prompt),providerId:g($.provider_id),modelId:g($.model_id),maxIterations:U2($.max_iterations),timeoutSeconds:U2($.timeout_seconds),maxParallel:U2($.max_parallel),tools:LW(g($.tools_json),{preserveEmpty:!0}),notesDirectory:g($.notes_directory),extensions:LW(g($.extensions_json),{preserveEmpty:!0}),source:g($.source),tags:LW(g($.tags_json)),metadata:d9(g($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:g($.last_materialized_run_id),lastRunAt:g($.last_run_at),nextRunAt:g($.next_run_at),createdAt:o($.created_at),updatedAt:o($.updated_at)}}function zW($){return{runId:o($.run_id),specId:o($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:o($.trigger_kind),status:o($.status),claimToken:g($.claim_token),claimStartedAt:g($.claim_started_at),claimUntilAt:g($.claim_until_at),scheduledFor:g($.scheduled_for),triggerEventId:g($.trigger_event_id),startedAt:g($.started_at),completedAt:g($.completed_at),sessionId:g($.session_id),reportPath:g($.report_path),error:g($.error),attemptCount:Number($.attempt_count??0),createdAt:o($.created_at),updatedAt:o($.updated_at)}}function AB($){return{eventId:o($.event_id),eventType:o($.event_type),source:o($.source),subject:g($.subject),occurredAt:o($.occurred_at),receivedAt:o($.received_at),workspaceRoot:g($.workspace_root),dedupeKey:g($.dedupe_key),payload:d9(g($.payload_json)),attributes:d9(g($.attributes_json)),processingStatus:o($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:g($.error),createdAt:o($.created_at),updatedAt:o($.updated_at)}}function KB($){return $?JSON.stringify($):null}var aM=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function GB($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function sM($,J,Q,Z){for(let W of aM){let j=$[W],X=J[W];if(GB(j)!==GB(X))return!0}if(Q===!1&&Z===!0)return!0;return!1}function oM($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function tM($){return`hub/schedules/${$}.cron.md`}function eM($){let J={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(J).length>0?J:void 0}function _W($){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((J)=>J.trim().length>0),enabled:$.enabled!==!1,metadata:eM($)}}function FB($){return JSON.stringify(_W($))}function $q($,J){let Q=$.metadata?{...$.metadata}:{},Z=J.createdBy===null?void 0:J.createdBy!==void 0?J.createdBy:typeof Q.__hubScheduleCreatedBy==="string"?Q.__hubScheduleCreatedBy:void 0,W=J.cwd!==void 0?J.cwd:typeof Q.__hubScheduleCwd==="string"?Q.__hubScheduleCwd:void 0,j=J.runtimeOptions!==void 0?J.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:J.name??$.title,cronPattern:J.cronPattern??$.scheduleExpr??"",prompt:J.prompt??$.prompt??"",workspaceRoot:J.workspaceRoot??$.workspaceRoot??"",cwd:W,modelSelection:J.modelSelection!==void 0?J.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:J.enabled??$.enabled,mode:J.mode??($.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"),systemPrompt:J.systemPrompt===null?void 0:J.systemPrompt!==void 0?J.systemPrompt:$.systemPrompt,maxIterations:J.maxIterations===null?void 0:J.maxIterations!==void 0?J.maxIterations:$.maxIterations,timeoutSeconds:J.timeoutSeconds===null?void 0:J.timeoutSeconds!==void 0?J.timeoutSeconds:$.timeoutSeconds,maxParallel:J.maxParallel??$.maxParallel??1,createdBy:Z,tags:J.tags??$.tags,runtimeOptions:j,metadata:J.metadata!==void 0?J.metadata:Object.keys(Q).length>0?Q:void 0}}class e6{db;constructor($={}){let J=$.dbPath??nM();this.db=iM(J),BB(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let J=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return J?M$(J):void 0}getSpec($){let J=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return J?M$(J):void 0}getSpecByExternalId($){let J=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return J?M$(J):void 0}listSpecs($={}){let J=[],Q=[];if($.triggerKind)J.push("trigger_kind = ?"),Q.push($.triggerKind);if(typeof $.enabled==="boolean")J.push("enabled = ?"),Q.push($.enabled?1:0);if($.parseStatus)J.push("parse_status = ?"),Q.push($.parseStatus);if(!$.includeRemoved)J.push("removed = 0");let Z=J.length>0?`WHERE ${J.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${Z} ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((X)=>M$(X))}createHubSchedule($){let J=`sched_${t6()}`,Q=this.upsertSpec({externalId:J,sourcePath:tM(J),triggerKind:"schedule",sourceHash:FB($),parseStatus:"valid",spec:_W($)});this.initializeScheduleNextRun(Q.record.specId);let Z=this.getSpec(Q.record.specId);if(!Z)throw Error("failed to create hub schedule");return Z}getHubSchedule($){let J=this.db.prepare(`SELECT * FROM cron_specs
354
354
  WHERE external_id = ? AND source = 'hub-schedule' AND removed = 0
355
355
  ORDER BY created_at ASC LIMIT 1`).get($);return J?M$(J):void 0}listHubSchedules($={}){let J=["source = 'hub-schedule'","trigger_kind = 'schedule'","removed = 0"],Q=[];if(typeof $.enabled==="boolean")J.push("enabled = ?"),Q.push($.enabled?1:0);if($.tags&&$.tags.length>0)for(let j of $.tags)J.push("tags_json LIKE ?"),Q.push(`%"${j.trim()}"%`);let Z=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_specs
356
356
  WHERE ${J.join(" AND ")}
357
- ORDER BY created_at DESC LIMIT ?`).all(...Q,Z).map((j)=>M$(j))}updateHubSchedule($,J){let Q=this.getHubSchedule($);if(!Q)return;let Z=$q(Q,J),W=this.upsertSpec({externalId:$,sourcePath:Q.sourcePath,triggerKind:"schedule",sourceHash:FB(Z),parseStatus:"valid",spec:_7(Z)});if(J.cronPattern!==void 0||J.enabled!==void 0)this.initializeScheduleNextRun(W.record.specId);return this.getSpec(W.record.specId)}deleteHubSchedule($){let J=this.getHubSchedule($);if(!J)return!1;return this.markSpecRemoved(J.specId),this.cancelQueuedRunsForSpec(J.specId),!0}enqueueHubScheduleRun($,J="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:J,scheduledFor:_0()})}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
357
+ ORDER BY created_at DESC LIMIT ?`).all(...Q,Z).map((j)=>M$(j))}updateHubSchedule($,J){let Q=this.getHubSchedule($);if(!Q)return;let Z=$q(Q,J),W=this.upsertSpec({externalId:$,sourcePath:Q.sourcePath,triggerKind:"schedule",sourceHash:FB(Z),parseStatus:"valid",spec:_W(Z)});if(J.cronPattern!==void 0||J.enabled!==void 0)this.initializeScheduleNextRun(W.record.specId);return this.getSpec(W.record.specId)}deleteHubSchedule($){let J=this.getHubSchedule($);if(!J)return!1;return this.markSpecRemoved(J.specId),this.cancelQueuedRunsForSpec(J.specId),!0}enqueueHubScheduleRun($,J="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:J,scheduledFor:_0()})}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
358
358
  WHERE trigger_kind = 'event'
359
359
  AND event_type = ?
360
360
  AND enabled = 1
@@ -392,7 +392,7 @@ ${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
392
392
  last_run_at = ?,
393
393
  next_run_at = ?,
394
394
  updated_at = ?
395
- WHERE spec_id = ?`).run(X,Q,f??null,Q,W.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(X),nextRunAt:f}}catch(Z){throw this.db.exec("ROLLBACK;"),Z}}getRun($){let J=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get($);return J?z7(J):void 0}insertEventLog($,J={}){let Q=_0(),Z=J.receivedAtIso??Q,W=$.eventId.trim();if(!W)throw Error("automation event requires eventId");let j=$.eventType.trim();if(!j)throw Error("automation event requires eventType");let X=$.source.trim();if(!X)throw Error("automation event requires source");let f=$.occurredAt.trim()||Z,Y=this.db.prepare(`INSERT OR IGNORE INTO cron_event_log (
395
+ WHERE spec_id = ?`).run(X,Q,f??null,Q,W.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(X),nextRunAt:f}}catch(Z){throw this.db.exec("ROLLBACK;"),Z}}getRun($){let J=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get($);return J?zW(J):void 0}insertEventLog($,J={}){let Q=_0(),Z=J.receivedAtIso??Q,W=$.eventId.trim();if(!W)throw Error("automation event requires eventId");let j=$.eventType.trim();if(!j)throw Error("automation event requires eventType");let X=$.source.trim();if(!X)throw Error("automation event requires source");let f=$.occurredAt.trim()||Z,Y=this.db.prepare(`INSERT OR IGNORE INTO cron_event_log (
396
396
  event_id, event_type, source, subject,
397
397
  occurred_at, received_at, workspace_root, dedupe_key,
398
398
  payload_json, attributes_json, processing_status,
@@ -407,7 +407,7 @@ ${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
407
407
  suppressed_count = COALESCE(?, suppressed_count),
408
408
  error = ?,
409
409
  updated_at = ?
410
- WHERE event_id = ?`).run(J.status,J.matchedSpecCount??null,J.queuedRunCount??null,J.suppressedCount??null,J.error??null,_0(),$).changes??0)===1}listRuns($={}){let J=[],Q=[];if($.specId)J.push("spec_id = ?"),Q.push($.specId);if($.status){let X=Array.isArray($.status)?$.status:[$.status];if(X.length>0){let f=X.map(()=>"?").join(",");J.push(`status IN (${f})`);for(let Y of X)Q.push(Y)}}let Z=J.length>0?`WHERE ${J.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${Z} ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((X)=>z7(X))}hasRecentEventRunForDedupe($){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
410
+ WHERE event_id = ?`).run(J.status,J.matchedSpecCount??null,J.queuedRunCount??null,J.suppressedCount??null,J.error??null,_0(),$).changes??0)===1}listRuns($={}){let J=[],Q=[];if($.specId)J.push("spec_id = ?"),Q.push($.specId);if($.status){let X=Array.isArray($.status)?$.status:[$.status];if(X.length>0){let f=X.map(()=>"?").join(",");J.push(`status IN (${f})`);for(let Y of X)Q.push(Y)}}let Z=J.length>0?`WHERE ${J.join(" AND ")}`:"",W=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${Z} ORDER BY created_at DESC LIMIT ?`).all(...Q,W).map((X)=>zW(X))}hasRecentEventRunForDedupe($){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
411
411
  INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
412
412
  WHERE r.spec_id = ?
413
413
  AND r.trigger_kind = 'event'
@@ -425,7 +425,7 @@ ${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
425
425
  AND r.status = 'queued'
426
426
  AND e.dedupe_key = ?
427
427
  ORDER BY COALESCE(r.scheduled_for, r.created_at) DESC
428
- LIMIT 1`).get($.specId,$.dedupeKey);return J?z7(J):void 0}updateQueuedEventRunForDebounce($){let J=_0();if((this.db.prepare(`UPDATE cron_runs SET
428
+ LIMIT 1`).get($.specId,$.dedupeKey);return J?zW(J):void 0}updateQueuedEventRunForDebounce($){let J=_0();if((this.db.prepare(`UPDATE cron_runs SET
429
429
  trigger_event_id = ?,
430
430
  scheduled_for = ?,
431
431
  updated_at = ?
@@ -451,7 +451,7 @@ ${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
451
451
  )
452
452
  AND (scheduled_for IS NULL OR scheduled_for <= ?)
453
453
  ORDER BY COALESCE(scheduled_for, created_at) ASC
454
- LIMIT ?`).all(J,J,W);for(let f of X){let Y=s(f.run_id);if(!Y)continue;let V=`cclaim_${t6()}`;if((this.db.prepare(`UPDATE cron_runs SET
454
+ LIMIT ?`).all(J,J,W);for(let f of X){let Y=o(f.run_id);if(!Y)continue;let V=`cclaim_${t6()}`;if((this.db.prepare(`UPDATE cron_runs SET
455
455
  status = 'running',
456
456
  claim_token = ?,
457
457
  claim_started_at = ?,
@@ -495,39 +495,39 @@ ${JSON.stringify(Z,null,2)}`}startClaimLeaseHeartbeat($){let J=Math.max(1000,Mat
495
495
  error = ?,
496
496
  scheduled_for = COALESCE(?, scheduled_for),
497
497
  updated_at = ?
498
- WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,J,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,J){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(J,_0(),$)}attachReportPathToRun($,J){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(J,_0(),$)}}class $J{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new e6({dbPath:$.dbPath});let J=$.specs;this.reconciler=new U7({store:this.store,specs:J}),this.materializer=new n6({store:this.store}),this.eventIngress=new X7({store:this.store,logger:$.logger}),this.runner=new a6({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:J,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new R7({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let Z=$.logger;if(Z)if(Z.error)Z.error("cron.watcher.failed",{error:Q});else Z.log("cron.watcher.failed",{error:Q})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}var MB={};w(MB,{manifestToSessionRecord:()=>pQ,listSessionHistoryFromBackend:()=>q7,listSessionHistory:()=>rQ,hydrateSessionHistory:()=>TB});import{readdir as Wq,readFile as zB}from"node:fs/promises";import{join as _B}from"node:path";import{formatDisplayUserInput as jq,normalizeUserInput as Xq}from"@cline/shared";import{resolveSessionDataDir as OB}from"@cline/shared/storage";import{existsSync as Jq}from"node:fs";import{readFile as Qq}from"node:fs/promises";import{formatDisplayUserInput as DB}from"@cline/shared";class JJ{listeners=new Set;subscribe($,J){let Q={listener:$,sessionId:J?.sessionId?.trim()||void 0};return this.listeners.add(Q),()=>{this.listeners.delete(Q)}}emit($){let J=$.payload.sessionId?.trim();for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==J)continue;Q.listener($)}}get size(){return this.listeners.size}}async function q$($){let J=$?.trim();if(!J||!Jq(J))return[];try{let Q=(await Qq(J,"utf8")).trim();if(!Q)return[];let Z=JSON.parse(Q);if(Array.isArray(Z))return UB(Z);if(Z&&typeof Z==="object"&&!Array.isArray(Z)){let W=Z.messages;if(Array.isArray(W))return UB(W)}return[]}catch{return[]}}function Zq($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:DB($.content)};return{...$,content:$.content.map((J)=>{if(J.type!=="text"||typeof J.text!=="string")return J;return{...J,text:DB(J.text)}})}}function UB($){return $.map(Zq)}function O7($){return $?{...$}:void 0}async function RB($,J){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await J.queueSpawnRequest($);let Z=await J.upsertSubagentSessionFromHook($);if(!Z)return;await J.appendSubagentHookAudit(Z,$),await J.applySubagentStatus(Z,$)}function QJ($){if(typeof $!=="string")return;let J=$.trim();return J.length>0?J:void 0}function r0($){let J=QJ($);if(!J)return;return J.toLowerCase()==="unknown"?void 0:J}function lQ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function fq($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function M7($){let J=$??200;return Number.isFinite(J)?Math.max(0,Math.floor(J)):200}function Yq($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function Vq($){return $.isSubagent!==!0&&!QJ($.parentSessionId)}function Hq($){let J=$.match(/\d{13,}/g);if(!J||J.length===0)return 0;let Q=0;for(let Z of J){let W=Number.parseInt(Z,10);if(Number.isFinite(W)&&W>Q)Q=W}return Q}function pQ($){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 Bq($){let J=M7($);if(J===0)return[];let Q=OB(),W=(await Wq(Q,{withFileTypes:!0}).catch(()=>[])).filter((X)=>X.isDirectory()).map((X)=>({entry:X,recency:Hq(X.name.trim())})).sort((X,f)=>f.recency-X.recency||f.entry.name.localeCompare(X.entry.name));return(await Promise.all(W.map(async({entry:X})=>{let f=X.name.trim();if(!f)return;let Y=_B(Q,f,`${f}.json`),V=await zB(Y,"utf8").catch(()=>{return});if(!V)return;let H;try{H=JSON.parse(V)}catch{return}let B=S0.safeParse(H);if(!B.success)return;return pQ(B.data)}))).filter((X)=>Boolean(X)).sort((X,f)=>f.startedAt.localeCompare(X.startedAt)).slice(0,J)}async function Aq($,J,Q){let Z=M7(J);if(Z===0)return await $.listSessions(0),[];let W=Q.includeSubagents?Z:Yq(Z),j=await $.listSessions(W);return(Q.includeSubagents?j:j.filter(Vq)).slice(0,Z)}function Kq($){if(typeof $==="string")return $.trim();let J=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let Z=Q;if(Z.type!=="text")continue;let W=Z.text?.trim();if(W)J.push(W)}return J.join(`
498
+ WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,J,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,J){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(J,_0(),$)}attachReportPathToRun($,J){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(J,_0(),$)}}class $J{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new e6({dbPath:$.dbPath});let J=$.specs;this.reconciler=new UW({store:this.store,specs:J}),this.materializer=new n6({store:this.store}),this.eventIngress=new XW({store:this.store,logger:$.logger}),this.runner=new a6({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:J,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new RW({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(Q)=>{let Z=$.logger;if(Z)if(Z.error)Z.error("cron.watcher.failed",{error:Q});else Z.log("cron.watcher.failed",{error:Q})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}var MB={};w(MB,{manifestToSessionRecord:()=>p9,listSessionHistoryFromBackend:()=>qW,listSessionHistory:()=>r9,hydrateSessionHistory:()=>TB});import{readdir as Wq,readFile as zB}from"node:fs/promises";import{join as _B}from"node:path";import{formatDisplayUserInput as jq,normalizeUserInput as Xq}from"@cline/shared";import{resolveSessionDataDir as OB}from"@cline/shared/storage";import{existsSync as Jq}from"node:fs";import{readFile as Qq}from"node:fs/promises";import{formatDisplayUserInput as DB}from"@cline/shared";class JJ{listeners=new Set;subscribe($,J){let Q={listener:$,sessionId:J?.sessionId?.trim()||void 0};return this.listeners.add(Q),()=>{this.listeners.delete(Q)}}emit($){let J=$.payload.sessionId?.trim();for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==J)continue;Q.listener($)}}get size(){return this.listeners.size}}async function q$($){let J=$?.trim();if(!J||!Jq(J))return[];try{let Q=(await Qq(J,"utf8")).trim();if(!Q)return[];let Z=JSON.parse(Q);if(Array.isArray(Z))return UB(Z);if(Z&&typeof Z==="object"&&!Array.isArray(Z)){let W=Z.messages;if(Array.isArray(W))return UB(W)}return[]}catch{return[]}}function Zq($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:DB($.content)};return{...$,content:$.content.map((J)=>{if(J.type!=="text"||typeof J.text!=="string")return J;return{...J,text:DB(J.text)}})}}function UB($){return $.map(Zq)}function OW($){return $?{...$}:void 0}async function RB($,J){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await J.queueSpawnRequest($);let Z=await J.upsertSubagentSessionFromHook($);if(!Z)return;await J.appendSubagentHookAudit(Z,$),await J.applySubagentStatus(Z,$)}function QJ($){if(typeof $!=="string")return;let J=$.trim();return J.length>0?J:void 0}function r0($){let J=QJ($);if(!J)return;return J.toLowerCase()==="unknown"?void 0:J}function l9($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function fq($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function MW($){let J=$??200;return Number.isFinite(J)?Math.max(0,Math.floor(J)):200}function Yq($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function Vq($){return $.isSubagent!==!0&&!QJ($.parentSessionId)}function Hq($){let J=$.match(/\d{13,}/g);if(!J||J.length===0)return 0;let Q=0;for(let Z of J){let W=Number.parseInt(Z,10);if(Number.isFinite(W)&&W>Q)Q=W}return Q}function p9($){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 Bq($){let J=MW($);if(J===0)return[];let Q=OB(),W=(await Wq(Q,{withFileTypes:!0}).catch(()=>[])).filter((X)=>X.isDirectory()).map((X)=>({entry:X,recency:Hq(X.name.trim())})).sort((X,f)=>f.recency-X.recency||f.entry.name.localeCompare(X.entry.name));return(await Promise.all(W.map(async({entry:X})=>{let f=X.name.trim();if(!f)return;let Y=_B(Q,f,`${f}.json`),V=await zB(Y,"utf8").catch(()=>{return});if(!V)return;let H;try{H=JSON.parse(V)}catch{return}let B=S0.safeParse(H);if(!B.success)return;return p9(B.data)}))).filter((X)=>Boolean(X)).sort((X,f)=>f.startedAt.localeCompare(X.startedAt)).slice(0,J)}async function Aq($,J,Q){let Z=MW(J);if(Z===0)return await $.listSessions(0),[];let W=Q.includeSubagents?Z:Yq(Z),j=await $.listSessions(W);return(Q.includeSubagents?j:j.filter(Vq)).slice(0,Z)}function Kq($){if(typeof $==="string")return $.trim();let J=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let Z=Q;if(Z.type!=="text")continue;let W=Z.text?.trim();if(W)J.push(W)}return J.join(`
499
499
  `).trim()}function LB($){return $.replace(/\s+/g," ").trim()}function Gq($,J){if($.length<=J)return $;return`${$.slice(0,Math.max(0,J-3)).trimEnd()}...`}function Fq($){for(let J of["user","assistant"])for(let Q of $){if(Q.role!==J)continue;let Z=LB(Kq(Q.content));if(!Z)continue;let W=J==="user"?LB(jq(Z)):Z,j=Xq(W.split(`
500
- `)[0]??W);return Gq(j,50)}return}function Dq($){let J=0;for(let Q of $)J+=lQ(Q.metrics?.cost)??0;return J}function Uq($){let J,Q;for(let Z=$.length-1;Z>=0;Z-=1){let W=$[Z];if(!J)J=r0(W.modelInfo?.provider);if(!Q)Q=r0(W.modelInfo?.id);if(J&&Q)break}return{provider:J,model:Q}}function Rq($){return r0($?.provider)??r0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function Lq($){return r0($?.model)??r0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function T7($,J){let Q=fq($.metadata),Z=QJ(J?.title)??QJ(Q?.title),W=lQ(J?.totalCost)??lQ(Q?.totalCost),j=Q||Z!==void 0||W!==void 0?{...Q??{},...Z!==void 0?{title:Z}:{},...W!==void 0?{totalCost:W}:{}}:void 0;return{...$,provider:r0(J?.provider)??r0($.provider)??Rq(Q)??"",model:r0(J?.model)??r0($.model)??Lq(Q)??"",metadata:j}}function zq($){let J=$.content;if(!Array.isArray(J))return!1;return J.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function _q($,J){if($.status!=="running"||$.interactive!==!0)return!1;let Q=J.at(-1);return Q?.role==="assistant"&&!zq(Q)}async function Oq($,J){return await Promise.all(J.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let Z=await $.readSessionMessages(Q.sessionId);return _q(Q,Z)?{...Q,status:"idle"}:Q}))}async function TB($,J){return await Promise.all(J.map(async(Q)=>{let Z=T7(Q),W=Boolean(QJ(Z.metadata?.title)),j=Boolean(r0(Z.provider)),X=Boolean(r0(Z.model)),f=lQ(Z.metadata?.totalCost),Y=f!==void 0&&f>0;if(W&&j&&X&&Y)return Z;let V=await $.readSessionMessages(Q.sessionId);if(V.length===0)return Z;let H=Uq(V),B=Dq(V);return T7(Q,{title:W?void 0:Fq(V),provider:j?void 0:H.provider,model:X?void 0:H.model,totalCost:Y||B<=0?void 0:B})}))}async function rQ($,J={}){let Q=M7(J.limit),Z=J.includeSubagents===!0,W=await Aq($,Q,{includeSubagents:Z}),j=J.includeManifestFallback===!0&&W.length<Q?await Bq(Math.min(Math.max(Q*2,100),500)):[],X=new Map;for(let V of[...W,...j]){if(X.has(V.sessionId))continue;X.set(V.sessionId,V)}let f=j.length===0?W:Array.from(X.values()).sort((V,H)=>H.startedAt.localeCompare(V.startedAt)).slice(0,Q),Y=await Oq($,f);if(J.hydrate===!1)return Y.map((V)=>T7(V));return await TB($,Y)}async function Tq($){let J=$.trim();if(!J)return;let Q=_B(OB(),J,`${J}.json`),Z=await zB(Q,"utf8").catch(()=>{return});if(!Z)return;try{let W=S0.safeParse(JSON.parse(Z));return W.success?W.data.messages_path:void 0}catch{return}}async function q7($,J={}){let Q=new Map;return await rQ({listSessions:async(W)=>{let j=await $.listSessions(W);Q.clear();for(let X of j)Q.set(X.sessionId,X);return j.map(W6)},readSessionMessages:async(W)=>{let j=Q.get(W)?.messagesPath??await Tq(W);return await q$(j)}},J)}var xA={};w(xA,{resolveSessionBackend:()=>f3,createRuntimeHost:()=>r8});import{captureSdkError as kA}from"@cline/shared";import{createSessionId as UP,isHubProtocolCompatible as RP,resolveClineBuildEnv as LP,resolveHubCommandTimeoutMs as zP}from"@cline/shared";import{spawn as nq}from"node:child_process";import{closeSync as aq,mkdirSync as sq,openSync as oq}from"node:fs";import{basename as tq,dirname as eq,join as $P}from"node:path";import{fileURLToPath as JP}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as QP,isHubDaemonProcess as gB,isHubProtocolCompatible as ZP,resolveClineBuildEnv as mB,withResolvedClineBuildEnv as WP}from"@cline/shared";import{createHash as Mq,randomBytes as qq}from"node:crypto";import{existsSync as Pq}from"node:fs";import{chmod as Nq,mkdir as P7,readFile as SB,rm as N7,writeFile as CB}from"node:fs/promises";import{dirname as yB,join as w7}from"node:path";import{resolveClineDataDir as R2,resolveClineDir as EB}from"@cline/shared/storage";var PB="0.0.50";var ZJ={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:PB,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 wq="CLINE_HUB_DISCOVERY_PATH",Sq="CLINE_HUB_BUILD_ID",NB=30000,Cq=15000,yq=100;function Eq($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function bq($){return Mq("sha256").update($).digest("hex").slice(0,12)}function hq($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(J){return J instanceof Error&&"code"in J?String(J.code)==="EPERM":!1}}function iQ(){return qq(32).toString("hex")}function kq($){return new Promise((J)=>setTimeout(J,$))}function Iq($){return`${$}.lock`}async function xq($){try{let J=JSON.parse(await SB(w7($,"owner.json"),"utf8"));if(typeof J.pid!=="number"||typeof J.acquiredAt!=="string")return;return{pid:J.pid,acquiredAt:J.acquiredAt}}catch{return}}async function wB($){await N7($,{recursive:!0,force:!0}).catch(()=>{return})}function nQ(){return process.env[Sq]?.trim()||String(ZJ.version)}function l1($=process.argv[1]?.trim()||process.cwd()){let J=`hub-${bq($)}`,Q=process.env[wq]?.trim()||w7(R2(),"locks","hub","owners",`${Eq(J)}.json`);return{ownerId:J,discoveryPath:Q}}function bB($=`hub-${Date.now().toString(36)}`){return l1($)}async function G0($){try{let J=JSON.parse(await SB($,"utf8"));if(typeof J.hubId!=="string"||typeof J.protocolVersion!=="string"||typeof J.authToken!=="string"||typeof J.host!=="string"||typeof J.port!=="number"||typeof J.url!=="string"||typeof J.startedAt!=="string"||typeof J.updatedAt!=="string")return;return{hubId:J.hubId,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((Q)=>typeof Q==="string"):void 0,coreVersion:typeof J.coreVersion==="string"?J.coreVersion:void 0,buildId:typeof J.buildId==="string"?J.buildId:void 0,authToken:J.authToken,host:J.host,port:J.port,url:J.url,pid:typeof J.pid==="number"?J.pid:void 0,startedAt:J.startedAt,updatedAt:J.updatedAt}}catch{return}}async function aQ($,J){await P7(yB($),{recursive:!0}),await N7($,{force:!0}).catch(()=>{return}),await CB($,`${JSON.stringify(J,null,2)}
501
- `,{encoding:"utf8",mode:384}),await Nq($,384)}async function y0($){await N7($,{force:!0}).catch(()=>{return})}async function sQ($,J){let Q=Iq($);await P7(yB(Q),{recursive:!0});let Z=Date.now()+Cq;while(!0)try{await P7(Q,{recursive:!1}),await CB(w7(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
502
- `,"utf8");try{return await J()}finally{await wB(Q)}}catch(W){if((W instanceof Error&&"code"in W?String(W.code):"")!=="EEXIST")throw W;let X=await xq(Q),f=X?Date.now()-Date.parse(X.acquiredAt):NB+1;if(!X||!hq(X.pid)||f>NB){await wB(Q);continue}if(Date.now()>=Z)throw Error(`Timed out waiting for hub startup lock ${Q}`);await kq(yq)}}async function p1($,J){try{let Q=await fetch(J?.authToken?S7($):oQ($),{headers:J?.authToken?{authorization:`Bearer ${J.authToken}`}:void 0});if(!Q.ok)return;let Z=await Q.json();if(typeof Z.protocolVersion!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string")return;return{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((W)=>typeof W==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,host:Z.host,port:Z.port,url:Z.url,hubId:typeof Z.hubId==="string"?Z.hubId:void 0,authToken:typeof Z.authToken==="string"?Z.authToken:void 0,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:typeof Z.startedAt==="string"?Z.startedAt:void 0,updatedAt:typeof Z.updatedAt==="string"?Z.updatedAt:void 0}}catch{return}}function j1($,J,Q="/hub"){return new URL(`ws://${$}:${J}${Q}`).toString()}function oQ($){let J=new URL($);return J.protocol=J.protocol==="wss:"?"https:":"http:",J.pathname="/health",J.search="",J.toString()}function S7($){let J=new URL(oQ($));return J.pathname="/status",J.toString()}function hB($){return Pq($)}import{CLINE_HUB_DEV_PORT as gq,CLINE_HUB_PORT as mq,resolveClineBuildEnv as vq}from"@cline/shared";var cq="CLINE_HUB_HOST",uq="CLINE_HUB_PORT",dq="CLINE_HUB_PATHNAME",C7="127.0.0.1",y7=mq,E7="/hub";function kB($){return vq($)==="development"?gq:y7}function b7($={}){return($.env??process.env)[cq]?.trim()||C7}function h8($={}){let Q=($.env??process.env)[uq]?.trim();if(!Q)return kB($);let Z=Number.parseInt(Q,10);if(!Number.isInteger(Z)||Z<1||Z>65535)return kB($);return Z}function h7($={}){return($.env??process.env)[dq]?.trim()||E7}function i0($={},J={}){return{host:$.host??b7(J),port:$.port??h8(J),pathname:$.pathname??h7(J)}}import{join as lq}from"node:path";var pq="shared:cline",rq="CLINE_HUB_DISCOVERY_PATH",iq="hub-production";function IB($){let J=m1($.trim());return l1(`workspace:${J||$.trim()}`)}function E0($=pq){return l1($)}function n0(){return{ownerId:iq,discoveryPath:process.env[rq]?.trim()||lq(R2(),"locks","hub","production.json")}}var jP=8000,XP=200,fP=3000,YP=100,VP=[100,250,500,1000,2000],HP="--cline-hub-daemon";function BP($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function AP(){try{let $=$P(R2(),"logs","hub-daemon.log");return sq(eq($),{recursive:!0}),{fd:oq($,"a"),logPath:$}}catch{return}}function vB(){return mB()==="production"?n0():E0()}function L2($){return ZP($).compatible}function xB($,J,Q){if(!J||J.url!==Q)return $;return{...$,authToken:$.authToken??J.authToken,pid:$.pid??J.pid}}async function z2($,J){try{return await p1($,{authToken:J})}catch{return}}async function KP($,J){let Q=Date.now()+J;while(Date.now()<Q){if(!(await z2($))?.url)return!0;await new Promise((W)=>setTimeout(W,YP))}return!1}async function tQ($,J){if(await jJ($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await KP($.url,fP);return await y0(J).catch(()=>{return}),Q}async function WJ($,J){if(L2($))return!0;return tQ($,J)}async function cB($){if(mB()!=="production")return;let J=E0();if(J.discoveryPath===$.discoveryPath)return;let Q=await G0(J.discoveryPath);if(Q?.url)await tQ(Q,J.discoveryPath);else await y0(J.discoveryPath).catch(()=>{return})}function GP(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return JP(new URL(`./entry.${$}`,import.meta.url))}function FP($,J){let Q=GP(),Z=process.execPath?.trim();if(!Z)throw Error("unable to resolve runtime executable for hub daemon");let W=tq(Z).toLowerCase().includes("bun"),j=Q.startsWith("/$bunfs/"),X=W&&Q.toLowerCase().endsWith(".ts"),f=j?[HP]:[...X?["--conditions=development"]:[],Q];return{launcher:Z,args:[...f,"--cwd",$,...BP(J)],cwd:$,env:{...WP(process.env),CLINE_NO_INTERACTIVE:"1",[QP]:"1"}}}function DP($){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 k7($,J={}){if(gB())return;let Q=FP($,J),Z=AP();try{nq(Q.launcher,Q.args,{detached:!0,stdio:Z?["ignore",Z.fd,Z.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(Z)aq(Z.fd)}}async function k8($,J={}){for(let Q=0;;Q++)try{k7($,J);return}catch(Z){let W=VP[Q];if(!DP(Z)||W===void 0)throw Z;await new Promise((j)=>setTimeout(j,W))}}function eQ($,J={}){if(gB())return;let Q=vB(),Z=i0(J),W=j1(Z.host,Z.port,Z.pathname),j=J.allowPortFallback===!0&&Z.port!==0;cB(Q).catch(()=>{return}).then(()=>G0(Q.discoveryPath)).then(async(X)=>{let f=!1;if(X?.url)if(!X.authToken){if(f=!0,!await tQ(X,Q.discoveryPath)&&!j)return}else{let H=await z2(X.url,X.authToken);if(H?.url&&L2(H)&&await G1(H.url,{authToken:X.authToken}))return;if(H?.url)await WJ({...H,authToken:X.authToken},Q.discoveryPath);else await y0(Q.discoveryPath).catch(()=>{return})}let Y=await z2(W);if(Y?.url){if(L2(Y)){if(!j||!f)return}else if(!await WJ({...Y,authToken:void 0},Q.discoveryPath)&&!j)return}let V=j?{...Z,port:0}:Z;await k8($,V)}).catch(()=>{})}async function uB($,J={}){let Q=vB(),Z=J.host!==void 0||J.port!==void 0||J.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=i0(J),j=j1(W.host,W.port,W.pathname),X=(K)=>{if(!Z)P$(K.url,K.authToken);return K};await cB(Q).catch(()=>{return});let f=await G0(Q.discoveryPath),Y=!1;if(f?.url){let K=f.authToken;if(!K)Y=!0,await tQ(f,Q.discoveryPath);else{let G=await z2(f.url,K);if(G?.url&&L2(G)&&await G1(G.url,{authToken:K}))return X({url:G.url,authToken:K});if(G?.url)await WJ({...G,authToken:K},Q.discoveryPath);else await y0(Q.discoveryPath).catch(()=>{return})}}let V=await z2(j);if(V?.url){let K=xB(V,f,j);if(L2(V))throw Error(`A compatible Cline Hub is already running at ${j}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${Y?" 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 WJ(K,Q.discoveryPath)&&J.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is already running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let B=J.allowPortFallback===!0&&W.port!==0?{...W,port:0}:W;await k8($,B);let A=Date.now()+jP;while(Date.now()<A){let K=await G0(Q.discoveryPath);if(K?.url&&K.authToken){let R=await z2(K.url,K.authToken);if(R?.url&&L2(R)&&await G1(R.url,{authToken:K.authToken}))return X({url:R.url,authToken:K.authToken})}let G=await z2(j);if(G?.url&&!L2(G)){let R=xB(G,K,j);if(!await WJ(R,Q.discoveryPath)&&J.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is still running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((R)=>setTimeout(R,XP))}throw Error("Timed out waiting for detached hub startup.")}function $9(){return LP()==="production"?n0():E0()}function _P(){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((J)=>Buffer.from(J))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return iB($.data);return String($)}function OP($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function dB($){let J=$,Q=OP(J.reason);return new q0("hub_connection_closed",J.code||Q?`Hub connection closed (code=${J.code??0}${Q?`, reason=${Q}`:""})`:I7,{closeCode:J.code,closeReason:Q||void 0})}function TP($,J){if($ instanceof q0)return $;if($ instanceof Error)return new q0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new q0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new q0("hub_connect_failed",Q);let Z=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new q0("hub_connect_failed",Z?`Failed to connect to hub at ${J.toString()} (${Z} event before socket open).`:`Failed to connect to hub at ${J.toString()}.`)}var MP=8000,qP=200,lB="*",pB=8000,PP="cline-hub-auth.",nB=new Map,aB=new Set,NP=3000,wP=3000,SP=100,I7="Hub connection closed",CP=250,yP=5000,rB=0.5;class q0 extends Error{code;details;constructor($,J,Q){super(J);this.code=$;this.details=Q;this.name="HubTransportError"}}function m7($){return $ instanceof q0}class I8 extends Error{command;code;constructor($,J,Q){super(Q);this.command=$;this.code=J;this.name="HubCommandError"}}function J9($,J){return $ instanceof I8&&$.code==="hub_command_timeout"&&(J===void 0||$.command===J)}function sB($){let J=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),J)return J;let Q=v7($.toString());return Q?nB.get(Q):void 0}function EP($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function v7($){if(!EP($))return;let J=new URL(N$($));return J.search="",J.hash="",J.toString()}function x7($){let J=v7($);return!!J&&aB.has(J)}function P$($,J){let Q=v7($);if(Q){if(aB.add(Q),J?.trim())nB.set(Q,J)}return $}class X1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new q0("hub_connection_closed",I7);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),J=this.options.authToken?.trim()||sB($);$.hash="";let Z=new(_P())($.toString(),J?[`${PP}${J}`]:void 0);this.socket=Z;let W=!1;this.connectPromise=new Promise((j,X)=>{let f=!1,Y=setTimeout(()=>{if(f)return;f=!0,W=!0,this.lastCloseError=new q0("hub_connect_timeout",`Timed out connecting to hub after ${pB}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Z.close()}catch{}X(this.lastCloseError)},pB);Z.addEventListener("open",()=>{if(f)return;f=!0,clearTimeout(Y),j()}),Z.addEventListener("error",(V)=>{if(f)return;f=!0,clearTimeout(Y),this.lastCloseError=TP(V,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,X(this.lastCloseError)}),Z.addEventListener("close",(V)=>{if(f)return;if(f=!0,clearTimeout(Y),!W)this.lastCloseError=dB(V),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,X(this.lastCloseError)})}),Z.addEventListener("message",(j)=>{this.handleFrame(JSON.parse(iB(j)))}),Z.addEventListener("close",(j)=>{if(this.socket!==Z)return;if(!W)this.lastCloseError=dB(j),this.sawSocketClose=!0;this.registered=!1;for(let X of this.pendingReplies.values())X.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let j of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(j));this.reconnectAttempt=0}subscribe($,J){let Q=J?.sessionId?.trim()||void 0,Z={listener:$,sessionId:Q};return this.listeners.add(Z),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(Z))return;this.adjustSubscriptionCount(Q,-1)}}async command($,J,Q,Z){let W=0,j=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,J,Q,Z)}catch(X){if(!j||W>=1||!await this.recoverLocalHubTransport(X))throw X;W+=1}}async commandOnce($,J,Q,Z){await this.connect();let W=UP("hubreq_"),j=zP($,Z?.timeoutMs),X=new Promise((Y,V)=>{let H=j===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(W))return;V(new I8($,"hub_command_timeout",`Hub command ${$} timed out after ${j}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.`))},j);this.pendingReplies.set(W,{resolve:(B)=>{if(H)clearTimeout(H);Y(B)},reject:(B)=>{if(H)clearTimeout(H);V(B)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:W,clientId:this.clientId,sessionId:Q,timeoutMs:j,payload:J}})}catch(Y){throw this.pendingReplies.delete(W),Y}let f=await X;if(!f.ok){if(f.error?.code===G2){let Y=Q??(typeof J?.sessionId==="string"?J.sessionId:void 0);throw new u1(Y,f.error.message)}throw new I8($,f.error?.code,f.error?.message??`Hub command ${$} failed`)}return f}async recoverLocalHubTransport($){if(!x7(this.currentUrl)||!m7($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let J=await _2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!J)return!1;return this.currentUrl=J,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(CP*2**this.reconnectAttempt,yP),J=Math.round($*(1-rB)+Math.random()*$*rB);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},J)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!x7(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await _2({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 q0("hub_connection_closed",I7),this.sawSocketClose=!1;for(let J of this.pendingReplies.values())J.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 q0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,J){this.sendFrame({kind:$,clientId:this.clientId,...J?{sessionId:J}:{}})}adjustSubscriptionCount($,J){let Q=this.subscriptionKeyForSessionId($),Z=(this.subscriptionCounts.get(Q)??0)+J;if(Z<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(J<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,Z),J>0&&Z===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??lB}subscriptionSessionIdFromKey($){return $===lB?void 0:$}handleFrame($){switch($.kind){case"reply":{let J=$.envelope.requestId;if(!J)return;let Q=this.pendingReplies.get(J);if(!Q)return;this.pendingReplies.delete(J),Q.resolve($.envelope);return}case"event":for(let J of this.listeners){if(J.sessionId&&J.sessionId!==$.envelope.sessionId?.trim())continue;J.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function N$($){let J=new URL($);if(J.protocol==="http:")J.protocol="ws:";else if(J.protocol==="https:")J.protocol="wss:";return J.toString()}async function G1($,J){let Q=new X1({url:$,authToken:J?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function g7($,J){let Q=N$($),Z=await p1(Q,{authToken:J?.authToken});if(!Z)return{status:"unreachable",url:Q};if(!RP(Z).compatible)return{status:"protocol_mismatch",url:Q};if(J?.verifyConnection===!0&&!await G1(Q,{workspaceRoot:J.workspaceRoot,cwd:J.cwd,authToken:J.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function bP($){let J=Date.now()+MP;while(Date.now()<J){let Q=await G0($.discoveryPath);if(Q?.url){let Z=await g7(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(Z.status==="compatible")return P$(Z.url,Q.authToken)}await new Promise((Z)=>setTimeout(Z,qP))}return}async function hP($){let J=Date.now()+wP;while(Date.now()<J){if(!(await p1($).catch(()=>{return}))?.url)return!0;await new Promise((Z)=>setTimeout(Z,SP))}return!1}function kP($,J){try{return N$($)===N$(J)}catch{return!1}}function IP($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let Z=Q;if(Z.status==="running"||Z.status==="idle"||Z.status==="pending")return!0;return Array.isArray(Z.participants)&&Z.participants.length>0})}async function xP($,J,Q){let Z=new X1({url:$,authToken:J,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let W=await Z.command("session.list",{limit:500},void 0,{timeoutMs:NP});return!IP(W.payload)}catch{return!1}finally{await Z.dispose().catch(()=>{return})}}async function XJ($={}){if($.endpoint?.trim()){let W=await g7($.endpoint);return W.status==="compatible"?W.url:void 0}let J=$9(),Q=await G0(J.discoveryPath);if(!Q?.url)return;let Z=await g7(Q.url,{authToken:Q.authToken});if(Z.status==="compatible")return P$(Z.url,Q.authToken);if(Z.status==="protocol_mismatch")await y0(J.discoveryPath).catch(()=>{return});return}async function _2($={}){let J=await XJ($);if(J&&await G1(J,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return J;if($.endpoint?.trim())return;let Q=$9();return await k8($.workspaceRoot??process.cwd()),await bP(Q)}async function jJ($,J){let Q=new URL($),Z=J?.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:Z?{authorization:`Bearer ${Z}`}:void 0})).ok}async function c7($=$9()){let J=await G0($.discoveryPath);if(!J?.url)return!1;try{if(await jJ(J.url,J.authToken))return!0}catch{}return!1}async function Q9($){if(!x7($.url))return;let J=$9(),Q=await G0(J.discoveryPath);if(!Q?.url||!kP(Q.url,$.url))return;if(!await xP(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await c7())return;if(!await hP(Q.url))return;return await y0(J.discoveryPath).catch(()=>{return}),await _2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var VA={};w(VA,{HubRuntimeHost:()=>r1});import{captureSdkError as tB,createSessionId as eB,HUB_CHECKPOINT_CAPABILITY as cP,HUB_COMPACTION_CAPABILITY as uP,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as dP,HUB_HOOK_CAPABILITY_PREFIX as lP,HUB_MISTAKE_LIMIT_CAPABILITY as pP,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as rP,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as iP,isHubToolExecutorName as nP}from"@cline/shared";var oB={};w(oB,{createCoreSessionSnapshot:()=>F1,coreSessionSnapshotToRecord:()=>Z9});function gP($){return $?JSON.parse(JSON.stringify($)):void 0}function mP($){return $?JSON.parse(JSON.stringify($)):void 0}function vP($){let J=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,Z=(Array.isArray(J?.history)?J.history:[]).filter((X)=>!!X&&typeof X==="object"&&!Array.isArray(X)).flatMap((X)=>{let f=typeof X.ref==="string"?X.ref.trim():"",Y=Number(X.createdAt),V=Number(X.runCount);if(!f||!Number.isFinite(Y)||!Number.isInteger(V))return[];return[{ref:f,createdAt:Y,runCount:V,...X.kind==="stash"||X.kind==="commit"?{kind:X.kind}:{}}]}),W=Z.at(-1),j=$?.checkpointEnabled===!0?!0:void 0;if(!j&&Z.length===0)return;return{...j?{enabled:j}:{},...W?{latest:W}:{},history:Z}}function F1($){let{session:J}=$,Q=gP(J.metadata);return{version:1,sessionId:J.sessionId,source:J.source,status:J.status,createdAt:J.startedAt,updatedAt:J.updatedAt,endedAt:J.endedAt??null,exitCode:J.exitCode??null,interactive:J.interactive,workspace:{cwd:J.cwd,root:J.workspaceRoot},model:{providerId:J.provider,modelId:J.model},capabilities:{enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams},lineage:{...J.parentSessionId?{parentSessionId:J.parentSessionId}:{},...J.parentAgentId?{parentAgentId:J.parentAgentId}:{},...J.agentId?{agentId:J.agentId}:{},...J.conversationId?{conversationId:J.conversationId}:{},isSubagent:J.isSubagent},...J.teamName?{team:{name:J.teamName}}:{},...J.prompt?{prompt:J.prompt}:{},...Q?{metadata:Q}:{},...J.messagesPath?{artifacts:{messagesPath:J.messagesPath}}:{},...$.messages?{messages:mP($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Z=vP(Q);return Z?{checkpoint:Z}:{}})()}}function Z9($){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 x8($){if(!$)return;return JSON.parse(JSON.stringify($))}var aP=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function $A($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function JA($){if(!$)return;let{userInstructionService:J,...Q}=$;return JSON.parse(JSON.stringify(Q))}function QA($){let J=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof J.agentId==="string"?J.agentId:"",conversationId:typeof J.conversationId==="string"?J.conversationId:"",iteration:typeof J.iteration==="number"?J.iteration:0,metadata:J.metadata&&typeof J.metadata==="object"&&!Array.isArray(J.metadata)?J.metadata:void 0}}function O2($,J,Q){$.manifest.push(J),$.handlers.set(J.capabilityName,Q)}function ZA($,J){let Q={manifest:[],handlers:new Map};for(let W of Object.keys(J.toolExecutors??{}).filter(nP)){let j=J.toolExecutors?.[W];if(typeof j!=="function")continue;O2(Q,{kind:"toolExecutor",executor:W,capabilityName:`${rP}${W}`},async({payload:X,abortSignal:f})=>{let Y=Array.isArray(X.args)?[...X.args]:[],V={...QA(X.context),signal:f};return{result:await j(...Y,V)}})}for(let W of $?.extraTools??[])O2(Q,{kind:"tool",name:W.name,description:W.description,inputSchema:x8(W.inputSchema)??{},...W.lifecycle?{lifecycle:x8(W.lifecycle)}:{},capabilityName:`${dP}${W.name}`},async({payload:j,abortSignal:X,progress:f})=>{let Y={...QA(j.context),signal:X};return{result:await W.execute(j.input,{...Y,emitUpdate:(H)=>{f({update:H})}})}});let Z=$?.hooks;if(Z)for(let W of aP){let j=Z[W];if(typeof j!=="function")continue;O2(Q,{kind:"hook",name:W,capabilityName:`${lP}${W}`},async({payload:X})=>({control:await j(X.context)}))}if($?.compaction?.compact){let W=$.compaction.compact;O2(Q,{kind:"compaction",capabilityName:uP,config:$A($.compaction)},async({payload:j})=>({result:await W(j.context)}))}if($?.checkpoint?.createCheckpoint){let W=$.checkpoint.createCheckpoint;O2(Q,{kind:"checkpoint",capabilityName:cP,config:$A($.checkpoint)},async({payload:j})=>({result:await W(j.context)}))}if($?.onConsecutiveMistakeLimitReached){let W=$.onConsecutiveMistakeLimitReached;O2(Q,{kind:"mistakeLimit",capabilityName:pP},async({payload:j})=>({result:await W(j.context)}))}if($?.userInstructionService){let W=$.userInstructionService;O2(Q,{kind:"userInstructionService",capabilityName:iP},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 fA($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let J=$.message;if(typeof J==="string"&&J.trim())return J.trim()}return}function sP($){return fA($)??"Capability request was cancelled."}function oP($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function tP($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function eP($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$,Q=typeof J.inputTokens==="number"?J.inputTokens:void 0,Z=typeof J.outputTokens==="number"?J.outputTokens:void 0;if(Q===void 0||Z===void 0)return;return{inputTokens:Q,outputTokens:Z,cacheReadTokens:typeof J.cacheReadTokens==="number"?J.cacheReadTokens:0,cacheWriteTokens:typeof J.cacheWriteTokens==="number"?J.cacheWriteTokens:0,totalCost:typeof J.totalCost==="number"?J.totalCost:0}}function WA($){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 u7($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function w$($,J){return u7($?.[J])??0}function $N($){let J=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,Z=$?.agent&&typeof $.agent==="object"?$.agent:void 0,W=Z?.teamRole==="teammate"||Z?.teamRole==="lead"?Z.teamRole:void 0;return{event:{type:"usage",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,inputTokens:w$(J,"inputTokens"),outputTokens:w$(J,"outputTokens"),cacheReadTokens:w$(J,"cacheReadTokens"),cacheWriteTokens:w$(J,"cacheWriteTokens"),cost:u7(J?.totalCost),totalInputTokens:w$(Q,"inputTokens"),totalOutputTokens:w$(Q,"outputTokens"),totalCacheReadTokens:w$(Q,"cacheReadTokens"),totalCacheWriteTokens:w$(Q,"cacheWriteTokens"),totalCost:u7(Q?.totalCost)},teamAgentId:typeof Z?.teamAgentId==="string"?Z.teamAgentId:void 0,teamRole:W}}function JN($){let J=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??J?.finishReason,Z=tP(Q)?Q:Q==="failed"?"error":"completed",W=eP($?.usage??J?.usage);return{type:"done",reason:Z,text:typeof $?.text==="string"?$.text:typeof J?.text==="string"?J.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof J?.iterations==="number"?J.iterations:0,usage:W}}function W9($,J){return $.error?.message??`hub command failed: ${J}`}function fJ($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function YA($){let J=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof J?.parentSessionId==="string"?J.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof J?.agentId==="string"?J.agentId:void 0),parentAgentId:typeof J?.parentAgentId==="string"?J.parentAgentId:void 0,conversationId:typeof J?.conversationId==="string"?J.conversationId:void 0,isSubagent:typeof J?.isSubagent==="boolean"?J.isSubagent:!1,source:typeof J?.source==="string"?J.source:U0.CORE,pid:typeof J?.pid==="number"?J.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:fJ($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:fJ($.status)==="completed"?0:fJ($.status)==="failed"?1:void 0,status:fJ($.status),interactive:J?.interactive===!0,provider:typeof J?.provider==="string"?J.provider:"hub",model:typeof J?.model==="string"?J.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof J?.teamName==="string"?J.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??J?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??J?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??J?.enableTeams===!0,prompt:typeof J?.prompt==="string"?J.prompt:void 0,metadata:J,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof J?.messagesPath==="string"?J.messagesPath:void 0,hookPath:typeof J?.hookPath==="string"?J.hookPath:void 0}}function S$($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$;return J.version===1&&typeof J.sessionId==="string"?JSON.parse(JSON.stringify(J)):void 0}function QN($){let J=S$($?.snapshot);if(J)return Z9(J);let Q=$?.session;return Q?YA(Q):void 0}function jA($,J,Q){let Z=Q?.workspaceRoot?.trim()||J.config.workspaceRoot||J.config.cwd;return S0.parse({version:1,session_id:$,source:J.source??U0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:fJ(Q?.status),interactive:J.interactive===!0,provider:J.config.providerId,model:J.config.modelId,cwd:Q?.cwd?.trim()||J.config.cwd,workspace_root:Z,team_name:J.config.teamName,enable_tools:J.config.enableTools,enable_spawn:J.config.enableSpawnAgent,enable_teams:J.config.enableAgentTeams,prompt:J.prompt?.trim()||void 0,metadata:J.sessionMetadata&&Object.keys(J.sessionMetadata).length>0?J.sessionMetadata:void 0})}function XA($,J){return S0.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??J.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class r1{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new JJ;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,J){this.clientContext=J,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd},this.defaultCapabilities=z0($.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 X1({...this.clientOptions,url:$})}async replaceClient($){let J=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(J.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!J9($,"session.create"))return!1;let J=await Q9({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!J)return!1;return await this.replaceClient(J),!0}registerPlannedSession($,J,Q){if(this.sessionCapabilities.set($,J),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 J=this.resolveCapabilities($),Q=ZA($.localRuntime,J),Z=$.config.sessionId?.trim()||eB(),W=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:x8({...$.config,sessionId:Z}),metadata:{...$.sessionMetadata??{},source:$.source??U0.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:x8($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(Z,J,Q.handlers);let j;try{j=await W()}catch(V){if(this.cleanupPlannedSession(Z),await this.recoverLocalHubStartupDeadlock(V)){this.registerPlannedSession(Z,J,Q.handlers);try{j=await W()}catch(H){throw this.cleanupPlannedSession(Z),H}}else throw V}let X=S$(j.payload?.snapshot),f=j.payload?.session,Y=(X?.sessionId??f?.sessionId)?.trim();if(!Y)throw this.cleanupPlannedSession(Z),Error("Hub runtime did not return a session id.");if(Y!==Z)this.cleanupPlannedSession(Z),this.registerPlannedSession(Y,J,Q.handlers);return{sessionId:Y,manifest:X?XA(X,$):jA(Y,$,f),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let J=$.sessionId.trim();if(!J)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let Z=$.start,W=Z?this.resolveCapabilities(Z):void 0,j=Z?ZA(Z.localRuntime,W??{}):{manifest:[],handlers:new Map},X=Z?Z.config.sessionId?.trim()||eB():void 0;if(X&&W)this.sessionCapabilities.set(X,W);if(X&&j.handlers.size>0)this.sessionClientContributionHandlers.set(X,j.handlers),this.ensureSessionSubscription(X);let f;try{f=await this.client.command("session.restore",{sessionId:J,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Z?{workspaceRoot:Z.config.workspaceRoot?.trim()||Z.config.cwd,cwd:Z.config.cwd??$.cwd,sessionConfig:x8({...Z.config,sessionId:X}),metadata:{...Z.sessionMetadata??{},source:Z.source??U0.CORE,provider:Z.config.providerId,model:Z.config.modelId,enableTools:Z.config.enableTools,enableSpawn:Z.config.enableSpawnAgent,enableTeams:Z.config.enableAgentTeams,teamName:Z.config.teamName,prompt:Z.prompt,interactive:Z.interactive===!0},runtimeOptions:{...j.manifest.length>0?{clientContributions:j.manifest}:{},...Z.localRuntime?.configExtensions?{configExtensions:Z.localRuntime.configExtensions}:{}},toolPolicies:x8(Z.toolPolicies)}:{}},J)}catch(K){if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw K}if(!f.ok){let K=typeof f.payload?.error==="string"?f.payload.error:"session.restore failed";if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw Error(K)}let Y=S$(f.payload?.snapshot),V=f.payload?.session,H=(Y?.sessionId??V?.sessionId)?.trim();if(Q&&!H){if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw Error("Hub checkpoint restore returned no session id")}if(H&&X&&H!==X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);if(H&&W)this.sessionCapabilities.set(H,W);if(H&&j.handlers.size>0)this.sessionClientContributionHandlers.set(H,j.handlers);if(H)this.ensureSessionSubscription(H);let B=Array.isArray(f.payload?.messages)?f.payload.messages:void 0,A=f.payload?.checkpoint;if(!A)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:H,startResult:H?{sessionId:H,manifest:Y?XA(Y,Z??{}):jA(H,Z??{},V),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:B,checkpoint:A}}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 J=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(J.payload?.prompts)?J.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let J=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(J.payload?.prompts)?J.payload.prompts:[],prompt:J.payload?.prompt,updated:J.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let J=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(J.payload?.prompts)?J.payload.prompts:[],prompt:J.payload?.prompt,removed:J.payload?.removed===!0}}async getAccumulatedUsage($){let J=await this.client.command("session.get",{includeSnapshot:!0},$),Q=S$(J.payload?.snapshot);if(Q){let X=Q.usage?{...Q.usage}:void 0,f=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return X||f?{usage:X,aggregateUsage:f}:void 0}let Z=J.payload?.session,W=WA(Z?.usage),j=WA(Z?.aggregateUsage);return W||j?{usage:W,aggregateUsage:j}:void 0}async abort($,J){await this.client.command("run.abort",{sessionId:$,reason:fA(J)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,J]of this.sessionSubscriptions){J();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 J;try{J=await this.client.command("session.get",void 0,$)}catch(Q){if(d1(Q))return;throw Q}return QN(J.payload)}async listSessions($=100){let J=await this.client.command("session.list",{limit:$}),Q=Array.isArray(J.payload?.snapshots)?J.payload.snapshots.flatMap((W)=>{let j=S$(W);return j?[Z9(j)]:[]}):[];if(Q.length>0)return Q;return(J.payload?.sessions??[]).map(YA)}async listSettings($){let J=await this.client.command("settings.list",JA($));if(!J.ok)throw Error(W9(J,"settings.list"));return J.payload?.snapshot}async toggleSetting($){let J=await this.client.command("settings.toggle",JA($));if(!J.ok)throw Error(W9(J,"settings.toggle"));return{snapshot:J.payload?.snapshot,changedTypes:Array.isArray(J.payload?.changedTypes)?J.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,J){let Q={...J.metadata??{}};if(typeof J.prompt==="string")Q.prompt=J.prompt;if(typeof J.title==="string")Q.title=J.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async readSessionMessages($){let J=$.trim();if(!J)return[];let Q=await this.client.command("session.messages",{sessionId:J},J);if(!Q.ok)throw tB(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(W9(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:J,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(W9(Q,"session.messages"));let Z=Q.payload?.messages;return Array.isArray(Z)?Z:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,J){return this.events.subscribe($,J)}ensureSessionSubscription($){let J=$.trim();if(!J||this.sessionSubscriptions.has(J))return;let Q=this.client.subscribe((Z)=>{this.handleHubEvent(Z)},{sessionId:J});this.sessionSubscriptions.set(J,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let J=$.trim();if(!J)return;this.sessionSubscriptions.get(J)?.(),this.sessionSubscriptions.delete(J),this.agentDoneEmittedForCurrentRunBySession.delete(J)}resolveCapabilities($){return z0(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:JN($.payload)}})}handleHubEvent($){let J=$.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(!J)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(J);let Q=S$($.payload?.snapshot),Z=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:J,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:J,status:Z?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,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:J,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,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:"",Z=$.payload?.redacted===!0;if(!Q&&!Z)return;this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:Z}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:J,payload:$.payload});return}case"usage.updated":{let Q=$N($.payload);this.events.emit({type:"agent_event",payload:{sessionId:J,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:J,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:J,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=S$($.payload?.snapshot),Z=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:J,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:J,status:Z?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:J,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:J,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=S$($.payload?.snapshot),Z=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:J,payload:{...$.payload,reason:Z}}),Q?.interactive===!0&&j0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:J,reason:Z,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,J,Q){try{tB(this.telemetry,{component:"core",operation:$,error:J,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let J=$.sessionId?.trim();if(!J)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let Z=typeof $.payload?.requestId==="string"?$.payload.requestId:"",W=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!Z)return;let j=this.sessionClientContributionHandlers.get(J)?.get(W);if(!j){await this.client.command("capability.respond",{requestId:Z,ok:!1,error:`No client contribution handler registered for capability ${W} in session ${J}.`},J).catch(()=>{});return}let X=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},f=new AbortController;this.activeCapabilityAbortControllers.set(Z,f);let Y=(V)=>{this.client.command("capability.progress",{requestId:Z,payload:V},J).catch((H)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",H,$)})};try{let V=await j({payload:X,abortSignal:f.signal,progress:Y});if(f.signal.aborted)return;await this.client.command("capability.respond",{requestId:Z,ok:!0,payload:V},J)}catch(V){if(f.signal.aborted)return;await this.client.command("capability.respond",{requestId:Z,ok:!1,error:V instanceof Error?V.message:String(V)},J)}finally{this.activeCapabilityAbortControllers.delete(Z)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let J=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!J)return;let Q=this.activeCapabilityAbortControllers.get(J);if(!Q)return;Q.abort(sP($.payload.error))}async handleApprovalRequested($){let J=$.sessionId?.trim();if(!J)return;let Q=this.sessionCapabilities.get(J)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let Z=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",W=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",j=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!Z||!W||!j)return;let X=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},f=oP($.payload?.inputJson);this.pendingApprovalToolCallIds.add(W),this.emitToolCallContentStart({sessionId:J,toolCallId:W,toolName:j,toolInput:f});let Y=await Promise.resolve(Q({sessionId:J,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:J,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:W,toolName:j,input:f,policy:X})).catch((V)=>({approved:!1,reason:V instanceof Error?V.message:`Tool approval request failed: ${String(V)}`}));await this.client.command("approval.respond",{approvalId:Z,approved:Y.approved,reason:Y.reason},J).catch(()=>{})}}var HA={};w(HA,{RemoteRuntimeHost:()=>g8});class g8 extends r1{constructor($){super({url:N$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var BA={};w(BA,{SqliteSessionStore:()=>U1});import{existsSync as ZN,mkdirSync as WN}from"node:fs";import{join as jN}from"node:path";import{asBool as YJ,asOptionalString as D1,asString as i1,ensureSessionSchema as XN,loadSqliteDb as fN,nowIso as j9,toBoolInt as VJ}from"@cline/shared/db";import{resolveDbDataDir as YN}from"@cline/shared/storage";class U1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??YN()}init(){this.getRawDb()}ensureSessionsDir(){if(!ZN(this.sessionsDirPath))WN(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return jN(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=fN(this.sessionDbPath());return XN($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,J=[]){return this.getRawDb().prepare($).run(...J)}queryOne($,J=[]){return this.getRawDb().prepare($).get(...J)??void 0}queryAll($,J=[]){return this.getRawDb().prepare($).all(...J)}create($){let J=j9();this.run(`INSERT OR REPLACE INTO sessions (
500
+ `)[0]??W);return Gq(j,50)}return}function Dq($){let J=0;for(let Q of $)J+=l9(Q.metrics?.cost)??0;return J}function Uq($){let J,Q;for(let Z=$.length-1;Z>=0;Z-=1){let W=$[Z];if(!J)J=r0(W.modelInfo?.provider);if(!Q)Q=r0(W.modelInfo?.id);if(J&&Q)break}return{provider:J,model:Q}}function Rq($){return r0($?.provider)??r0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function Lq($){return r0($?.model)??r0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function TW($,J){let Q=fq($.metadata),Z=QJ(J?.title)??QJ(Q?.title),W=l9(J?.totalCost)??l9(Q?.totalCost),j=Q||Z!==void 0||W!==void 0?{...Q??{},...Z!==void 0?{title:Z}:{},...W!==void 0?{totalCost:W}:{}}:void 0;return{...$,provider:r0(J?.provider)??r0($.provider)??Rq(Q)??"",model:r0(J?.model)??r0($.model)??Lq(Q)??"",metadata:j}}function zq($){let J=$.content;if(!Array.isArray(J))return!1;return J.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function _q($,J){if($.status!=="running"||$.interactive!==!0)return!1;let Q=J.at(-1);return Q?.role==="assistant"&&!zq(Q)}async function Oq($,J){return await Promise.all(J.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let Z=await $.readSessionMessages(Q.sessionId);return _q(Q,Z)?{...Q,status:"idle"}:Q}))}async function TB($,J){return await Promise.all(J.map(async(Q)=>{let Z=TW(Q),W=Boolean(QJ(Z.metadata?.title)),j=Boolean(r0(Z.provider)),X=Boolean(r0(Z.model)),f=l9(Z.metadata?.totalCost),Y=f!==void 0&&f>0;if(W&&j&&X&&Y)return Z;let V=await $.readSessionMessages(Q.sessionId);if(V.length===0)return Z;let H=Uq(V),B=Dq(V);return TW(Q,{title:W?void 0:Fq(V),provider:j?void 0:H.provider,model:X?void 0:H.model,totalCost:Y||B<=0?void 0:B})}))}async function r9($,J={}){let Q=MW(J.limit),Z=J.includeSubagents===!0,W=await Aq($,Q,{includeSubagents:Z}),j=J.includeManifestFallback===!0&&W.length<Q?await Bq(Math.min(Math.max(Q*2,100),500)):[],X=new Map;for(let V of[...W,...j]){if(X.has(V.sessionId))continue;X.set(V.sessionId,V)}let f=j.length===0?W:Array.from(X.values()).sort((V,H)=>H.startedAt.localeCompare(V.startedAt)).slice(0,Q),Y=await Oq($,f);if(J.hydrate===!1)return Y.map((V)=>TW(V));return await TB($,Y)}async function Tq($){let J=$.trim();if(!J)return;let Q=_B(OB(),J,`${J}.json`),Z=await zB(Q,"utf8").catch(()=>{return});if(!Z)return;try{let W=S0.safeParse(JSON.parse(Z));return W.success?W.data.messages_path:void 0}catch{return}}async function qW($,J={}){let Q=new Map;return await r9({listSessions:async(W)=>{let j=await $.listSessions(W);Q.clear();for(let X of j)Q.set(X.sessionId,X);return j.map(W6)},readSessionMessages:async(W)=>{let j=Q.get(W)?.messagesPath??await Tq(W);return await q$(j)}},J)}var xA={};w(xA,{resolveSessionBackend:()=>f3,createRuntimeHost:()=>r8});import{captureSdkError as kA}from"@cline/shared";import{createSessionId as UP,isHubProtocolCompatible as RP,resolveClineBuildEnv as LP,resolveHubCommandTimeoutMs as zP}from"@cline/shared";import{spawn as nq}from"node:child_process";import{closeSync as aq,mkdirSync as sq,openSync as oq}from"node:fs";import{basename as tq,dirname as eq,join as $P}from"node:path";import{fileURLToPath as JP}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as QP,isHubDaemonProcess as gB,isHubProtocolCompatible as ZP,resolveClineBuildEnv as mB,withResolvedClineBuildEnv as WP}from"@cline/shared";import{createHash as Mq,randomBytes as qq}from"node:crypto";import{existsSync as Pq}from"node:fs";import{chmod as Nq,mkdir as PW,readFile as SB,rm as NW,writeFile as CB}from"node:fs/promises";import{dirname as yB,join as wW}from"node:path";import{resolveClineDataDir as R2,resolveClineDir as EB}from"@cline/shared/storage";var PB="0.0.51-nightly.1782011943";var ZJ={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:PB,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 wq="CLINE_HUB_DISCOVERY_PATH",Sq="CLINE_HUB_BUILD_ID",NB=30000,Cq=15000,yq=100;function Eq($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function bq($){return Mq("sha256").update($).digest("hex").slice(0,12)}function hq($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(J){return J instanceof Error&&"code"in J?String(J.code)==="EPERM":!1}}function i9(){return qq(32).toString("hex")}function kq($){return new Promise((J)=>setTimeout(J,$))}function Iq($){return`${$}.lock`}async function xq($){try{let J=JSON.parse(await SB(wW($,"owner.json"),"utf8"));if(typeof J.pid!=="number"||typeof J.acquiredAt!=="string")return;return{pid:J.pid,acquiredAt:J.acquiredAt}}catch{return}}async function wB($){await NW($,{recursive:!0,force:!0}).catch(()=>{return})}function n9(){return process.env[Sq]?.trim()||String(ZJ.version)}function l1($=process.argv[1]?.trim()||process.cwd()){let J=`hub-${bq($)}`,Q=process.env[wq]?.trim()||wW(R2(),"locks","hub","owners",`${Eq(J)}.json`);return{ownerId:J,discoveryPath:Q}}function bB($=`hub-${Date.now().toString(36)}`){return l1($)}async function G0($){try{let J=JSON.parse(await SB($,"utf8"));if(typeof J.hubId!=="string"||typeof J.protocolVersion!=="string"||typeof J.authToken!=="string"||typeof J.host!=="string"||typeof J.port!=="number"||typeof J.url!=="string"||typeof J.startedAt!=="string"||typeof J.updatedAt!=="string")return;return{hubId:J.hubId,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((Q)=>typeof Q==="string"):void 0,coreVersion:typeof J.coreVersion==="string"?J.coreVersion:void 0,buildId:typeof J.buildId==="string"?J.buildId:void 0,authToken:J.authToken,host:J.host,port:J.port,url:J.url,pid:typeof J.pid==="number"?J.pid:void 0,startedAt:J.startedAt,updatedAt:J.updatedAt}}catch{return}}async function a9($,J){await PW(yB($),{recursive:!0}),await NW($,{force:!0}).catch(()=>{return}),await CB($,`${JSON.stringify(J,null,2)}
501
+ `,{encoding:"utf8",mode:384}),await Nq($,384)}async function y0($){await NW($,{force:!0}).catch(()=>{return})}async function s9($,J){let Q=Iq($);await PW(yB(Q),{recursive:!0});let Z=Date.now()+Cq;while(!0)try{await PW(Q,{recursive:!1}),await CB(wW(Q,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
502
+ `,"utf8");try{return await J()}finally{await wB(Q)}}catch(W){if((W instanceof Error&&"code"in W?String(W.code):"")!=="EEXIST")throw W;let X=await xq(Q),f=X?Date.now()-Date.parse(X.acquiredAt):NB+1;if(!X||!hq(X.pid)||f>NB){await wB(Q);continue}if(Date.now()>=Z)throw Error(`Timed out waiting for hub startup lock ${Q}`);await kq(yq)}}async function p1($,J){try{let Q=await fetch(J?.authToken?SW($):o9($),{headers:J?.authToken?{authorization:`Bearer ${J.authToken}`}:void 0});if(!Q.ok)return;let Z=await Q.json();if(typeof Z.protocolVersion!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string")return;return{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((W)=>typeof W==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,host:Z.host,port:Z.port,url:Z.url,hubId:typeof Z.hubId==="string"?Z.hubId:void 0,authToken:typeof Z.authToken==="string"?Z.authToken:void 0,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:typeof Z.startedAt==="string"?Z.startedAt:void 0,updatedAt:typeof Z.updatedAt==="string"?Z.updatedAt:void 0}}catch{return}}function j1($,J,Q="/hub"){return new URL(`ws://${$}:${J}${Q}`).toString()}function o9($){let J=new URL($);return J.protocol=J.protocol==="wss:"?"https:":"http:",J.pathname="/health",J.search="",J.toString()}function SW($){let J=new URL(o9($));return J.pathname="/status",J.toString()}function hB($){return Pq($)}import{CLINE_HUB_DEV_PORT as gq,CLINE_HUB_PORT as mq,resolveClineBuildEnv as vq}from"@cline/shared";var cq="CLINE_HUB_HOST",uq="CLINE_HUB_PORT",dq="CLINE_HUB_PATHNAME",CW="127.0.0.1",yW=mq,EW="/hub";function kB($){return vq($)==="development"?gq:yW}function bW($={}){return($.env??process.env)[cq]?.trim()||CW}function h8($={}){let Q=($.env??process.env)[uq]?.trim();if(!Q)return kB($);let Z=Number.parseInt(Q,10);if(!Number.isInteger(Z)||Z<1||Z>65535)return kB($);return Z}function hW($={}){return($.env??process.env)[dq]?.trim()||EW}function i0($={},J={}){return{host:$.host??bW(J),port:$.port??h8(J),pathname:$.pathname??hW(J)}}import{join as lq}from"node:path";var pq="shared:cline",rq="CLINE_HUB_DISCOVERY_PATH",iq="hub-production";function IB($){let J=m1($.trim());return l1(`workspace:${J||$.trim()}`)}function E0($=pq){return l1($)}function n0(){return{ownerId:iq,discoveryPath:process.env[rq]?.trim()||lq(R2(),"locks","hub","production.json")}}var jP=8000,XP=200,fP=3000,YP=100,VP=[100,250,500,1000,2000],HP="--cline-hub-daemon";function BP($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function AP(){try{let $=$P(R2(),"logs","hub-daemon.log");return sq(eq($),{recursive:!0}),{fd:oq($,"a"),logPath:$}}catch{return}}function vB(){return mB()==="production"?n0():E0()}function L2($){return ZP($).compatible}function xB($,J,Q){if(!J||J.url!==Q)return $;return{...$,authToken:$.authToken??J.authToken,pid:$.pid??J.pid}}async function z2($,J){try{return await p1($,{authToken:J})}catch{return}}async function KP($,J){let Q=Date.now()+J;while(Date.now()<Q){if(!(await z2($))?.url)return!0;await new Promise((W)=>setTimeout(W,YP))}return!1}async function t9($,J){if(await jJ($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}let Q=await KP($.url,fP);return await y0(J).catch(()=>{return}),Q}async function WJ($,J){if(L2($))return!0;return t9($,J)}async function cB($){if(mB()!=="production")return;let J=E0();if(J.discoveryPath===$.discoveryPath)return;let Q=await G0(J.discoveryPath);if(Q?.url)await t9(Q,J.discoveryPath);else await y0(J.discoveryPath).catch(()=>{return})}function GP(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return JP(new URL(`./entry.${$}`,import.meta.url))}function FP($,J){let Q=GP(),Z=process.execPath?.trim();if(!Z)throw Error("unable to resolve runtime executable for hub daemon");let W=tq(Z).toLowerCase().includes("bun"),j=Q.startsWith("/$bunfs/"),X=W&&Q.toLowerCase().endsWith(".ts"),f=j?[HP]:[...X?["--conditions=development"]:[],Q];return{launcher:Z,args:[...f,"--cwd",$,...BP(J)],cwd:$,env:{...WP(process.env),CLINE_NO_INTERACTIVE:"1",[QP]:"1"}}}function DP($){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 kW($,J={}){if(gB())return;let Q=FP($,J),Z=AP();try{nq(Q.launcher,Q.args,{detached:!0,stdio:Z?["ignore",Z.fd,Z.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(Z)aq(Z.fd)}}async function k8($,J={}){for(let Q=0;;Q++)try{kW($,J);return}catch(Z){let W=VP[Q];if(!DP(Z)||W===void 0)throw Z;await new Promise((j)=>setTimeout(j,W))}}function e9($,J={}){if(gB())return;let Q=vB(),Z=i0(J),W=j1(Z.host,Z.port,Z.pathname),j=J.allowPortFallback===!0&&Z.port!==0;cB(Q).catch(()=>{return}).then(()=>G0(Q.discoveryPath)).then(async(X)=>{let f=!1;if(X?.url)if(!X.authToken){if(f=!0,!await t9(X,Q.discoveryPath)&&!j)return}else{let H=await z2(X.url,X.authToken);if(H?.url&&L2(H)&&await G1(H.url,{authToken:X.authToken}))return;if(H?.url)await WJ({...H,authToken:X.authToken},Q.discoveryPath);else await y0(Q.discoveryPath).catch(()=>{return})}let Y=await z2(W);if(Y?.url){if(L2(Y)){if(!j||!f)return}else if(!await WJ({...Y,authToken:void 0},Q.discoveryPath)&&!j)return}let V=j?{...Z,port:0}:Z;await k8($,V)}).catch(()=>{})}async function uB($,J={}){let Q=vB(),Z=J.host!==void 0||J.port!==void 0||J.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=i0(J),j=j1(W.host,W.port,W.pathname),X=(K)=>{if(!Z)P$(K.url,K.authToken);return K};await cB(Q).catch(()=>{return});let f=await G0(Q.discoveryPath),Y=!1;if(f?.url){let K=f.authToken;if(!K)Y=!0,await t9(f,Q.discoveryPath);else{let G=await z2(f.url,K);if(G?.url&&L2(G)&&await G1(G.url,{authToken:K}))return X({url:G.url,authToken:K});if(G?.url)await WJ({...G,authToken:K},Q.discoveryPath);else await y0(Q.discoveryPath).catch(()=>{return})}}let V=await z2(j);if(V?.url){let K=xB(V,f,j);if(L2(V))throw Error(`A compatible Cline Hub is already running at ${j}, but its discovery record is missing or unreadable. Run 'cline doctor fix' to repair local hub discovery.${Y?" 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 WJ(K,Q.discoveryPath)&&J.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is already running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let B=J.allowPortFallback===!0&&W.port!==0?{...W,port:0}:W;await k8($,B);let A=Date.now()+jP;while(Date.now()<A){let K=await G0(Q.discoveryPath);if(K?.url&&K.authToken){let R=await z2(K.url,K.authToken);if(R?.url&&L2(R)&&await G1(R.url,{authToken:K.authToken}))return X({url:R.url,authToken:K.authToken})}let G=await z2(j);if(G?.url&&!L2(G)){let R=xB(G,K,j);if(!await WJ(R,Q.discoveryPath)&&J.allowPortFallback!==!0&&W.port!==0)throw Error(`An incompatible Cline Hub is still running at ${j} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((R)=>setTimeout(R,XP))}throw Error("Timed out waiting for detached hub startup.")}function $Q(){return LP()==="production"?n0():E0()}function _P(){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((J)=>Buffer.from(J))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return iB($.data);return String($)}function OP($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function dB($){let J=$,Q=OP(J.reason);return new q0("hub_connection_closed",J.code||Q?`Hub connection closed (code=${J.code??0}${Q?`, reason=${Q}`:""})`:IW,{closeCode:J.code,closeReason:Q||void 0})}function TP($,J){if($ instanceof q0)return $;if($ instanceof Error)return new q0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new q0("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new q0("hub_connect_failed",Q);let Z=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new q0("hub_connect_failed",Z?`Failed to connect to hub at ${J.toString()} (${Z} event before socket open).`:`Failed to connect to hub at ${J.toString()}.`)}var MP=8000,qP=200,lB="*",pB=8000,PP="cline-hub-auth.",nB=new Map,aB=new Set,NP=3000,wP=3000,SP=100,IW="Hub connection closed",CP=250,yP=5000,rB=0.5;class q0 extends Error{code;details;constructor($,J,Q){super(J);this.code=$;this.details=Q;this.name="HubTransportError"}}function mW($){return $ instanceof q0}class I8 extends Error{command;code;constructor($,J,Q){super(Q);this.command=$;this.code=J;this.name="HubCommandError"}}function JQ($,J){return $ instanceof I8&&$.code==="hub_command_timeout"&&(J===void 0||$.command===J)}function sB($){let J=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),J)return J;let Q=vW($.toString());return Q?nB.get(Q):void 0}function EP($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function vW($){if(!EP($))return;let J=new URL(N$($));return J.search="",J.hash="",J.toString()}function xW($){let J=vW($);return!!J&&aB.has(J)}function P$($,J){let Q=vW($);if(Q){if(aB.add(Q),J?.trim())nB.set(Q,J)}return $}class X1{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new q0("hub_connection_closed",IW);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),J=this.options.authToken?.trim()||sB($);$.hash="";let Z=new(_P())($.toString(),J?[`${PP}${J}`]:void 0);this.socket=Z;let W=!1;this.connectPromise=new Promise((j,X)=>{let f=!1,Y=setTimeout(()=>{if(f)return;f=!0,W=!0,this.lastCloseError=new q0("hub_connect_timeout",`Timed out connecting to hub after ${pB}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Z.close()}catch{}X(this.lastCloseError)},pB);Z.addEventListener("open",()=>{if(f)return;f=!0,clearTimeout(Y),j()}),Z.addEventListener("error",(V)=>{if(f)return;f=!0,clearTimeout(Y),this.lastCloseError=TP(V,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,X(this.lastCloseError)}),Z.addEventListener("close",(V)=>{if(f)return;if(f=!0,clearTimeout(Y),!W)this.lastCloseError=dB(V),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,X(this.lastCloseError)})}),Z.addEventListener("message",(j)=>{this.handleFrame(JSON.parse(iB(j)))}),Z.addEventListener("close",(j)=>{if(this.socket!==Z)return;if(!W)this.lastCloseError=dB(j),this.sawSocketClose=!0;this.registered=!1;for(let X of this.pendingReplies.values())X.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let j of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(j));this.reconnectAttempt=0}subscribe($,J){let Q=J?.sessionId?.trim()||void 0,Z={listener:$,sessionId:Q};return this.listeners.add(Z),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(Z))return;this.adjustSubscriptionCount(Q,-1)}}async command($,J,Q,Z){let W=0,j=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,J,Q,Z)}catch(X){if(!j||W>=1||!await this.recoverLocalHubTransport(X))throw X;W+=1}}async commandOnce($,J,Q,Z){await this.connect();let W=UP("hubreq_"),j=zP($,Z?.timeoutMs),X=new Promise((Y,V)=>{let H=j===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(W))return;V(new I8($,"hub_command_timeout",`Hub command ${$} timed out after ${j}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.`))},j);this.pendingReplies.set(W,{resolve:(B)=>{if(H)clearTimeout(H);Y(B)},reject:(B)=>{if(H)clearTimeout(H);V(B)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:W,clientId:this.clientId,sessionId:Q,timeoutMs:j,payload:J}})}catch(Y){throw this.pendingReplies.delete(W),Y}let f=await X;if(!f.ok){if(f.error?.code===G2){let Y=Q??(typeof J?.sessionId==="string"?J.sessionId:void 0);throw new u1(Y,f.error.message)}throw new I8($,f.error?.code,f.error?.message??`Hub command ${$} failed`)}return f}async recoverLocalHubTransport($){if(!xW(this.currentUrl)||!mW($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let J=await _2({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!J)return!1;return this.currentUrl=J,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(CP*2**this.reconnectAttempt,yP),J=Math.round($*(1-rB)+Math.random()*$*rB);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},J)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!xW(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await _2({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 q0("hub_connection_closed",IW),this.sawSocketClose=!1;for(let J of this.pendingReplies.values())J.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 q0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,J){this.sendFrame({kind:$,clientId:this.clientId,...J?{sessionId:J}:{}})}adjustSubscriptionCount($,J){let Q=this.subscriptionKeyForSessionId($),Z=(this.subscriptionCounts.get(Q)??0)+J;if(Z<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(J<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,Z),J>0&&Z===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??lB}subscriptionSessionIdFromKey($){return $===lB?void 0:$}handleFrame($){switch($.kind){case"reply":{let J=$.envelope.requestId;if(!J)return;let Q=this.pendingReplies.get(J);if(!Q)return;this.pendingReplies.delete(J),Q.resolve($.envelope);return}case"event":for(let J of this.listeners){if(J.sessionId&&J.sessionId!==$.envelope.sessionId?.trim())continue;J.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function N$($){let J=new URL($);if(J.protocol==="http:")J.protocol="ws:";else if(J.protocol==="https:")J.protocol="wss:";return J.toString()}async function G1($,J){let Q=new X1({url:$,authToken:J?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function gW($,J){let Q=N$($),Z=await p1(Q,{authToken:J?.authToken});if(!Z)return{status:"unreachable",url:Q};if(!RP(Z).compatible)return{status:"protocol_mismatch",url:Q};if(J?.verifyConnection===!0&&!await G1(Q,{workspaceRoot:J.workspaceRoot,cwd:J.cwd,authToken:J.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function bP($){let J=Date.now()+MP;while(Date.now()<J){let Q=await G0($.discoveryPath);if(Q?.url){let Z=await gW(Q.url,{verifyConnection:!0,authToken:Q.authToken});if(Z.status==="compatible")return P$(Z.url,Q.authToken)}await new Promise((Z)=>setTimeout(Z,qP))}return}async function hP($){let J=Date.now()+wP;while(Date.now()<J){if(!(await p1($).catch(()=>{return}))?.url)return!0;await new Promise((Z)=>setTimeout(Z,SP))}return!1}function kP($,J){try{return N$($)===N$(J)}catch{return!1}}function IP($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let Z=Q;if(Z.status==="running"||Z.status==="idle"||Z.status==="pending")return!0;return Array.isArray(Z.participants)&&Z.participants.length>0})}async function xP($,J,Q){let Z=new X1({url:$,authToken:J,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let W=await Z.command("session.list",{limit:500},void 0,{timeoutMs:NP});return!IP(W.payload)}catch{return!1}finally{await Z.dispose().catch(()=>{return})}}async function XJ($={}){if($.endpoint?.trim()){let W=await gW($.endpoint);return W.status==="compatible"?W.url:void 0}let J=$Q(),Q=await G0(J.discoveryPath);if(!Q?.url)return;let Z=await gW(Q.url,{authToken:Q.authToken});if(Z.status==="compatible")return P$(Z.url,Q.authToken);if(Z.status==="protocol_mismatch")await y0(J.discoveryPath).catch(()=>{return});return}async function _2($={}){let J=await XJ($);if(J&&await G1(J,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return J;if($.endpoint?.trim())return;let Q=$Q();return await k8($.workspaceRoot??process.cwd()),await bP(Q)}async function jJ($,J){let Q=new URL($),Z=J?.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:Z?{authorization:`Bearer ${Z}`}:void 0})).ok}async function cW($=$Q()){let J=await G0($.discoveryPath);if(!J?.url)return!1;try{if(await jJ(J.url,J.authToken))return!0}catch{}return!1}async function QQ($){if(!xW($.url))return;let J=$Q(),Q=await G0(J.discoveryPath);if(!Q?.url||!kP(Q.url,$.url))return;if(!await xP(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await cW())return;if(!await hP(Q.url))return;return await y0(J.discoveryPath).catch(()=>{return}),await _2({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var VA={};w(VA,{HubRuntimeHost:()=>r1});import{captureSdkError as tB,createSessionId as eB,HUB_CHECKPOINT_CAPABILITY as cP,HUB_COMPACTION_CAPABILITY as uP,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as dP,HUB_HOOK_CAPABILITY_PREFIX as lP,HUB_MISTAKE_LIMIT_CAPABILITY as pP,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as rP,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as iP,isHubToolExecutorName as nP}from"@cline/shared";var oB={};w(oB,{createCoreSessionSnapshot:()=>F1,coreSessionSnapshotToRecord:()=>ZQ});function gP($){return $?JSON.parse(JSON.stringify($)):void 0}function mP($){return $?JSON.parse(JSON.stringify($)):void 0}function vP($){let J=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,Z=(Array.isArray(J?.history)?J.history:[]).filter((X)=>!!X&&typeof X==="object"&&!Array.isArray(X)).flatMap((X)=>{let f=typeof X.ref==="string"?X.ref.trim():"",Y=Number(X.createdAt),V=Number(X.runCount);if(!f||!Number.isFinite(Y)||!Number.isInteger(V))return[];return[{ref:f,createdAt:Y,runCount:V,...X.kind==="stash"||X.kind==="commit"?{kind:X.kind}:{}}]}),W=Z.at(-1),j=$?.checkpointEnabled===!0?!0:void 0;if(!j&&Z.length===0)return;return{...j?{enabled:j}:{},...W?{latest:W}:{},history:Z}}function F1($){let{session:J}=$,Q=gP(J.metadata);return{version:1,sessionId:J.sessionId,source:J.source,status:J.status,createdAt:J.startedAt,updatedAt:J.updatedAt,endedAt:J.endedAt??null,exitCode:J.exitCode??null,interactive:J.interactive,workspace:{cwd:J.cwd,root:J.workspaceRoot},model:{providerId:J.provider,modelId:J.model},capabilities:{enableTools:J.enableTools,enableSpawn:J.enableSpawn,enableTeams:J.enableTeams},lineage:{...J.parentSessionId?{parentSessionId:J.parentSessionId}:{},...J.parentAgentId?{parentAgentId:J.parentAgentId}:{},...J.agentId?{agentId:J.agentId}:{},...J.conversationId?{conversationId:J.conversationId}:{},isSubagent:J.isSubagent},...J.teamName?{team:{name:J.teamName}}:{},...J.prompt?{prompt:J.prompt}:{},...Q?{metadata:Q}:{},...J.messagesPath?{artifacts:{messagesPath:J.messagesPath}}:{},...$.messages?{messages:mP($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Z=vP(Q);return Z?{checkpoint:Z}:{}})()}}function ZQ($){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 x8($){if(!$)return;return JSON.parse(JSON.stringify($))}var aP=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function $A($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function JA($){if(!$)return;let{userInstructionService:J,...Q}=$;return JSON.parse(JSON.stringify(Q))}function QA($){let J=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof J.agentId==="string"?J.agentId:"",conversationId:typeof J.conversationId==="string"?J.conversationId:"",iteration:typeof J.iteration==="number"?J.iteration:0,metadata:J.metadata&&typeof J.metadata==="object"&&!Array.isArray(J.metadata)?J.metadata:void 0}}function O2($,J,Q){$.manifest.push(J),$.handlers.set(J.capabilityName,Q)}function ZA($,J){let Q={manifest:[],handlers:new Map};for(let W of Object.keys(J.toolExecutors??{}).filter(nP)){let j=J.toolExecutors?.[W];if(typeof j!=="function")continue;O2(Q,{kind:"toolExecutor",executor:W,capabilityName:`${rP}${W}`},async({payload:X,abortSignal:f})=>{let Y=Array.isArray(X.args)?[...X.args]:[],V={...QA(X.context),signal:f};return{result:await j(...Y,V)}})}for(let W of $?.extraTools??[])O2(Q,{kind:"tool",name:W.name,description:W.description,inputSchema:x8(W.inputSchema)??{},...W.lifecycle?{lifecycle:x8(W.lifecycle)}:{},capabilityName:`${dP}${W.name}`},async({payload:j,abortSignal:X,progress:f})=>{let Y={...QA(j.context),signal:X};return{result:await W.execute(j.input,{...Y,emitUpdate:(H)=>{f({update:H})}})}});let Z=$?.hooks;if(Z)for(let W of aP){let j=Z[W];if(typeof j!=="function")continue;O2(Q,{kind:"hook",name:W,capabilityName:`${lP}${W}`},async({payload:X})=>({control:await j(X.context)}))}if($?.compaction?.compact){let W=$.compaction.compact;O2(Q,{kind:"compaction",capabilityName:uP,config:$A($.compaction)},async({payload:j})=>({result:await W(j.context)}))}if($?.checkpoint?.createCheckpoint){let W=$.checkpoint.createCheckpoint;O2(Q,{kind:"checkpoint",capabilityName:cP,config:$A($.checkpoint)},async({payload:j})=>({result:await W(j.context)}))}if($?.onConsecutiveMistakeLimitReached){let W=$.onConsecutiveMistakeLimitReached;O2(Q,{kind:"mistakeLimit",capabilityName:pP},async({payload:j})=>({result:await W(j.context)}))}if($?.userInstructionService){let W=$.userInstructionService;O2(Q,{kind:"userInstructionService",capabilityName:iP},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 fA($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let J=$.message;if(typeof J==="string"&&J.trim())return J.trim()}return}function sP($){return fA($)??"Capability request was cancelled."}function oP($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function tP($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function eP($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$,Q=typeof J.inputTokens==="number"?J.inputTokens:void 0,Z=typeof J.outputTokens==="number"?J.outputTokens:void 0;if(Q===void 0||Z===void 0)return;return{inputTokens:Q,outputTokens:Z,cacheReadTokens:typeof J.cacheReadTokens==="number"?J.cacheReadTokens:0,cacheWriteTokens:typeof J.cacheWriteTokens==="number"?J.cacheWriteTokens:0,totalCost:typeof J.totalCost==="number"?J.totalCost:0}}function WA($){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 uW($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function w$($,J){return uW($?.[J])??0}function $N($){let J=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,Z=$?.agent&&typeof $.agent==="object"?$.agent:void 0,W=Z?.teamRole==="teammate"||Z?.teamRole==="lead"?Z.teamRole:void 0;return{event:{type:"usage",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,inputTokens:w$(J,"inputTokens"),outputTokens:w$(J,"outputTokens"),cacheReadTokens:w$(J,"cacheReadTokens"),cacheWriteTokens:w$(J,"cacheWriteTokens"),cost:uW(J?.totalCost),totalInputTokens:w$(Q,"inputTokens"),totalOutputTokens:w$(Q,"outputTokens"),totalCacheReadTokens:w$(Q,"cacheReadTokens"),totalCacheWriteTokens:w$(Q,"cacheWriteTokens"),totalCost:uW(Q?.totalCost)},teamAgentId:typeof Z?.teamAgentId==="string"?Z.teamAgentId:void 0,teamRole:W}}function JN($){let J=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??J?.finishReason,Z=tP(Q)?Q:Q==="failed"?"error":"completed",W=eP($?.usage??J?.usage);return{type:"done",reason:Z,text:typeof $?.text==="string"?$.text:typeof J?.text==="string"?J.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof J?.iterations==="number"?J.iterations:0,usage:W}}function WQ($,J){return $.error?.message??`hub command failed: ${J}`}function fJ($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function YA($){let J=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof J?.parentSessionId==="string"?J.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof J?.agentId==="string"?J.agentId:void 0),parentAgentId:typeof J?.parentAgentId==="string"?J.parentAgentId:void 0,conversationId:typeof J?.conversationId==="string"?J.conversationId:void 0,isSubagent:typeof J?.isSubagent==="boolean"?J.isSubagent:!1,source:typeof J?.source==="string"?J.source:U0.CORE,pid:typeof J?.pid==="number"?J.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:fJ($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:fJ($.status)==="completed"?0:fJ($.status)==="failed"?1:void 0,status:fJ($.status),interactive:J?.interactive===!0,provider:typeof J?.provider==="string"?J.provider:"hub",model:typeof J?.model==="string"?J.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof J?.teamName==="string"?J.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??J?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??J?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??J?.enableTeams===!0,prompt:typeof J?.prompt==="string"?J.prompt:void 0,metadata:J,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof J?.messagesPath==="string"?J.messagesPath:void 0,hookPath:typeof J?.hookPath==="string"?J.hookPath:void 0}}function S$($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$;return J.version===1&&typeof J.sessionId==="string"?JSON.parse(JSON.stringify(J)):void 0}function QN($){let J=S$($?.snapshot);if(J)return ZQ(J);let Q=$?.session;return Q?YA(Q):void 0}function jA($,J,Q){let Z=Q?.workspaceRoot?.trim()||J.config.workspaceRoot||J.config.cwd;return S0.parse({version:1,session_id:$,source:J.source??U0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:fJ(Q?.status),interactive:J.interactive===!0,provider:J.config.providerId,model:J.config.modelId,cwd:Q?.cwd?.trim()||J.config.cwd,workspace_root:Z,team_name:J.config.teamName,enable_tools:J.config.enableTools,enable_spawn:J.config.enableSpawnAgent,enable_teams:J.config.enableAgentTeams,prompt:J.prompt?.trim()||void 0,metadata:J.sessionMetadata&&Object.keys(J.sessionMetadata).length>0?J.sessionMetadata:void 0})}function XA($,J){return S0.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??J.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class r1{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new JJ;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,J){this.clientContext=J,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd},this.defaultCapabilities=z0($.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 X1({...this.clientOptions,url:$})}async replaceClient($){let J=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(J.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!JQ($,"session.create"))return!1;let J=await QQ({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!J)return!1;return await this.replaceClient(J),!0}registerPlannedSession($,J,Q){if(this.sessionCapabilities.set($,J),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 J=this.resolveCapabilities($),Q=ZA($.localRuntime,J),Z=$.config.sessionId?.trim()||eB(),W=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:x8({...$.config,sessionId:Z}),metadata:{...$.sessionMetadata??{},source:$.source??U0.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:x8($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(Z,J,Q.handlers);let j;try{j=await W()}catch(V){if(this.cleanupPlannedSession(Z),await this.recoverLocalHubStartupDeadlock(V)){this.registerPlannedSession(Z,J,Q.handlers);try{j=await W()}catch(H){throw this.cleanupPlannedSession(Z),H}}else throw V}let X=S$(j.payload?.snapshot),f=j.payload?.session,Y=(X?.sessionId??f?.sessionId)?.trim();if(!Y)throw this.cleanupPlannedSession(Z),Error("Hub runtime did not return a session id.");if(Y!==Z)this.cleanupPlannedSession(Z),this.registerPlannedSession(Y,J,Q.handlers);return{sessionId:Y,manifest:X?XA(X,$):jA(Y,$,f),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let J=$.sessionId.trim();if(!J)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let Z=$.start,W=Z?this.resolveCapabilities(Z):void 0,j=Z?ZA(Z.localRuntime,W??{}):{manifest:[],handlers:new Map},X=Z?Z.config.sessionId?.trim()||eB():void 0;if(X&&W)this.sessionCapabilities.set(X,W);if(X&&j.handlers.size>0)this.sessionClientContributionHandlers.set(X,j.handlers),this.ensureSessionSubscription(X);let f;try{f=await this.client.command("session.restore",{sessionId:J,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Z?{workspaceRoot:Z.config.workspaceRoot?.trim()||Z.config.cwd,cwd:Z.config.cwd??$.cwd,sessionConfig:x8({...Z.config,sessionId:X}),metadata:{...Z.sessionMetadata??{},source:Z.source??U0.CORE,provider:Z.config.providerId,model:Z.config.modelId,enableTools:Z.config.enableTools,enableSpawn:Z.config.enableSpawnAgent,enableTeams:Z.config.enableAgentTeams,teamName:Z.config.teamName,prompt:Z.prompt,interactive:Z.interactive===!0},runtimeOptions:{...j.manifest.length>0?{clientContributions:j.manifest}:{},...Z.localRuntime?.configExtensions?{configExtensions:Z.localRuntime.configExtensions}:{}},toolPolicies:x8(Z.toolPolicies)}:{}},J)}catch(K){if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw K}if(!f.ok){let K=typeof f.payload?.error==="string"?f.payload.error:"session.restore failed";if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw Error(K)}let Y=S$(f.payload?.snapshot),V=f.payload?.session,H=(Y?.sessionId??V?.sessionId)?.trim();if(Q&&!H){if(X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);throw Error("Hub checkpoint restore returned no session id")}if(H&&X&&H!==X)this.sessionCapabilities.delete(X),this.sessionClientContributionHandlers.delete(X),this.disposeSessionSubscription(X);if(H&&W)this.sessionCapabilities.set(H,W);if(H&&j.handlers.size>0)this.sessionClientContributionHandlers.set(H,j.handlers);if(H)this.ensureSessionSubscription(H);let B=Array.isArray(f.payload?.messages)?f.payload.messages:void 0,A=f.payload?.checkpoint;if(!A)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:H,startResult:H?{sessionId:H,manifest:Y?XA(Y,Z??{}):jA(H,Z??{},V),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:B,checkpoint:A}}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 J=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(J.payload?.prompts)?J.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let J=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(J.payload?.prompts)?J.payload.prompts:[],prompt:J.payload?.prompt,updated:J.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let J=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(J.payload?.prompts)?J.payload.prompts:[],prompt:J.payload?.prompt,removed:J.payload?.removed===!0}}async getAccumulatedUsage($){let J=await this.client.command("session.get",{includeSnapshot:!0},$),Q=S$(J.payload?.snapshot);if(Q){let X=Q.usage?{...Q.usage}:void 0,f=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return X||f?{usage:X,aggregateUsage:f}:void 0}let Z=J.payload?.session,W=WA(Z?.usage),j=WA(Z?.aggregateUsage);return W||j?{usage:W,aggregateUsage:j}:void 0}async abort($,J){await this.client.command("run.abort",{sessionId:$,reason:fA(J)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,J]of this.sessionSubscriptions){J();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 J;try{J=await this.client.command("session.get",void 0,$)}catch(Q){if(d1(Q))return;throw Q}return QN(J.payload)}async listSessions($=100){let J=await this.client.command("session.list",{limit:$}),Q=Array.isArray(J.payload?.snapshots)?J.payload.snapshots.flatMap((W)=>{let j=S$(W);return j?[ZQ(j)]:[]}):[];if(Q.length>0)return Q;return(J.payload?.sessions??[]).map(YA)}async listSettings($){let J=await this.client.command("settings.list",JA($));if(!J.ok)throw Error(WQ(J,"settings.list"));return J.payload?.snapshot}async toggleSetting($){let J=await this.client.command("settings.toggle",JA($));if(!J.ok)throw Error(WQ(J,"settings.toggle"));return{snapshot:J.payload?.snapshot,changedTypes:Array.isArray(J.payload?.changedTypes)?J.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,J){let Q={...J.metadata??{}};if(typeof J.prompt==="string")Q.prompt=J.prompt;if(typeof J.title==="string")Q.title=J.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async readSessionMessages($){let J=$.trim();if(!J)return[];let Q=await this.client.command("session.messages",{sessionId:J},J);if(!Q.ok)throw tB(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(WQ(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:J,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(WQ(Q,"session.messages"));let Z=Q.payload?.messages;return Array.isArray(Z)?Z:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,J){return this.events.subscribe($,J)}ensureSessionSubscription($){let J=$.trim();if(!J||this.sessionSubscriptions.has(J))return;let Q=this.client.subscribe((Z)=>{this.handleHubEvent(Z)},{sessionId:J});this.sessionSubscriptions.set(J,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let J=$.trim();if(!J)return;this.sessionSubscriptions.get(J)?.(),this.sessionSubscriptions.delete(J),this.agentDoneEmittedForCurrentRunBySession.delete(J)}resolveCapabilities($){return z0(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:JN($.payload)}})}handleHubEvent($){let J=$.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(!J)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(J);let Q=S$($.payload?.snapshot),Z=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:J,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:J,status:Z?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,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:J,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,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:"",Z=$.payload?.redacted===!0;if(!Q&&!Z)return;this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:Z}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:J,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:J,payload:$.payload});return}case"usage.updated":{let Q=$N($.payload);this.events.emit({type:"agent_event",payload:{sessionId:J,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:J,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:J,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=S$($.payload?.snapshot),Z=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:J,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:J,status:Z?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:J,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:J,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=S$($.payload?.snapshot),Z=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:J,payload:{...$.payload,reason:Z}}),Q?.interactive===!0&&X0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:J,reason:Z,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,J,Q){try{tB(this.telemetry,{component:"core",operation:$,error:J,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let J=$.sessionId?.trim();if(!J)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let Z=typeof $.payload?.requestId==="string"?$.payload.requestId:"",W=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!Z)return;let j=this.sessionClientContributionHandlers.get(J)?.get(W);if(!j){await this.client.command("capability.respond",{requestId:Z,ok:!1,error:`No client contribution handler registered for capability ${W} in session ${J}.`},J).catch(()=>{});return}let X=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},f=new AbortController;this.activeCapabilityAbortControllers.set(Z,f);let Y=(V)=>{this.client.command("capability.progress",{requestId:Z,payload:V},J).catch((H)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",H,$)})};try{let V=await j({payload:X,abortSignal:f.signal,progress:Y});if(f.signal.aborted)return;await this.client.command("capability.respond",{requestId:Z,ok:!0,payload:V},J)}catch(V){if(f.signal.aborted)return;await this.client.command("capability.respond",{requestId:Z,ok:!1,error:V instanceof Error?V.message:String(V)},J)}finally{this.activeCapabilityAbortControllers.delete(Z)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let J=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!J)return;let Q=this.activeCapabilityAbortControllers.get(J);if(!Q)return;Q.abort(sP($.payload.error))}async handleApprovalRequested($){let J=$.sessionId?.trim();if(!J)return;let Q=this.sessionCapabilities.get(J)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let Z=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",W=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",j=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!Z||!W||!j)return;let X=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},f=oP($.payload?.inputJson);this.pendingApprovalToolCallIds.add(W),this.emitToolCallContentStart({sessionId:J,toolCallId:W,toolName:j,toolInput:f});let Y=await Promise.resolve(Q({sessionId:J,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:J,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:W,toolName:j,input:f,policy:X})).catch((V)=>({approved:!1,reason:V instanceof Error?V.message:`Tool approval request failed: ${String(V)}`}));await this.client.command("approval.respond",{approvalId:Z,approved:Y.approved,reason:Y.reason},J).catch(()=>{})}}var HA={};w(HA,{RemoteRuntimeHost:()=>g8});class g8 extends r1{constructor($){super({url:N$($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var BA={};w(BA,{SqliteSessionStore:()=>U1});import{existsSync as ZN,mkdirSync as WN}from"node:fs";import{join as jN}from"node:path";import{asBool as YJ,asOptionalString as D1,asString as i1,ensureSessionSchema as XN,loadSqliteDb as fN,nowIso as jQ,toBoolInt as VJ}from"@cline/shared/db";import{resolveDbDataDir as YN}from"@cline/shared/storage";class U1{sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??YN()}init(){this.getRawDb()}ensureSessionsDir(){if(!ZN(this.sessionsDirPath))WN(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return jN(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=fN(this.sessionDbPath());return XN($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,J=[]){return this.getRawDb().prepare($).run(...J)}queryOne($,J=[]){return this.getRawDb().prepare($).get(...J)??void 0}queryAll($,J=[]){return this.getRawDb().prepare($).all(...J)}create($){let J=jQ();this.run(`INSERT OR REPLACE INTO sessions (
503
503
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
504
504
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
505
505
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
506
506
  metadata_json, transcript_path, hook_path, messages_path, updated_at
507
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,VJ($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,VJ($.enableTools),VJ($.enableSpawn),VJ($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,VJ($.isSubagent),$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"",$.hookPath??"",$.messagesPath??null,J])}update($){let J=[],Q=[];if($.endedAt!==void 0)J.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)J.push("exit_code = ?"),Q.push($.exitCode);if($.status!==void 0)J.push("status = ?"),Q.push($.status);if($.prompt!==void 0)J.push("prompt = ?"),Q.push($.prompt);if($.metadata!==void 0)J.push("metadata_json = ?"),Q.push($.metadata?JSON.stringify($.metadata):null);if($.parentSessionId!==void 0)J.push("parent_session_id = ?"),Q.push($.parentSessionId);if($.parentAgentId!==void 0)J.push("parent_agent_id = ?"),Q.push($.parentAgentId);if($.agentId!==void 0)J.push("agent_id = ?"),Q.push($.agentId);if($.conversationId!==void 0)J.push("conversation_id = ?"),Q.push($.conversationId);if(J.length===0)return;J.push("updated_at = ?"),Q.push(j9()),Q.push($.sessionId),this.run(`UPDATE sessions SET ${J.join(", ")} WHERE session_id = ?`,Q)}updateStatus($,J,Q){this.update({sessionId:$,status:J,endedAt:j0(J)?null:j9(),exitCode:j0(J)?null:Q??(J==="failed"?1:0)})}get($){let J=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
507
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,VJ($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,VJ($.enableTools),VJ($.enableSpawn),VJ($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,VJ($.isSubagent),$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"",$.hookPath??"",$.messagesPath??null,J])}update($){let J=[],Q=[];if($.endedAt!==void 0)J.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)J.push("exit_code = ?"),Q.push($.exitCode);if($.status!==void 0)J.push("status = ?"),Q.push($.status);if($.prompt!==void 0)J.push("prompt = ?"),Q.push($.prompt);if($.metadata!==void 0)J.push("metadata_json = ?"),Q.push($.metadata?JSON.stringify($.metadata):null);if($.parentSessionId!==void 0)J.push("parent_session_id = ?"),Q.push($.parentSessionId);if($.parentAgentId!==void 0)J.push("parent_agent_id = ?"),Q.push($.parentAgentId);if($.agentId!==void 0)J.push("agent_id = ?"),Q.push($.agentId);if($.conversationId!==void 0)J.push("conversation_id = ?"),Q.push($.conversationId);if(J.length===0)return;J.push("updated_at = ?"),Q.push(jQ()),Q.push($.sessionId),this.run(`UPDATE sessions SET ${J.join(", ")} WHERE session_id = ?`,Q)}updateStatus($,J,Q){this.update({sessionId:$,status:J,endedAt:X0(J)?null:jQ(),exitCode:X0(J)?null:Q??(J==="failed"?1:0)})}get($){let J=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
508
508
  provider, model, cwd, workspace_root, team_name,
509
509
  enable_tools, enable_spawn, enable_teams,
510
510
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
511
511
  prompt, metadata_json, hook_path, messages_path, updated_at
512
- FROM sessions WHERE session_id = ?`,[$]);if(!J)return;return{sessionId:i1(J.session_id),source:i1(J.source),pid:Number(J.pid??0),startedAt:i1(J.started_at),endedAt:J.ended_at??null,exitCode:J.exit_code??null,status:i1(J.status),interactive:YJ(J.interactive),provider:i1(J.provider),model:i1(J.model),cwd:i1(J.cwd),workspaceRoot:i1(J.workspace_root),teamName:D1(J.team_name),enableTools:YJ(J.enable_tools),enableSpawn:YJ(J.enable_spawn),enableTeams:YJ(J.enable_teams),parentSessionId:D1(J.parent_session_id),parentAgentId:D1(J.parent_agent_id),agentId:D1(J.agent_id),conversationId:D1(J.conversation_id),isSubagent:YJ(J.is_subagent),prompt:D1(J.prompt),metadata:(()=>{let Q=D1(J.metadata_json);if(!Q)return;try{let Z=JSON.parse(Q);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return})(),hookPath:D1(J.hook_path),messagesPath:D1(J.messages_path),updatedAt:D1(J.updated_at)??j9()}}list($=200){let J=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Q=[];for(let Z of J){let W=this.get(i1(Z.session_id));if(W)Q.push(W)}return Q}delete($,J=!1){let Q=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(J)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}}m8();import{existsSync as J3,mkdirSync as $w,readFileSync as NA,renameSync as Jw,writeFileSync as Qw}from"node:fs";import{join as wA}from"node:path";import{resolveSessionDataDir as Zw}from"@cline/shared/storage";import{dirname as tN}from"node:path";import{nanoid as eN}from"nanoid";import{appendFileSync as _N,existsSync as ON,mkdirSync as AA,readFileSync as TN,writeFileSync as KA}from"node:fs";import{dirname as GA,join as MN}from"node:path";import{ensureHookLogDir as qN}from"@cline/shared/storage";class d7{adapter;messagesArtifactUploader;logger;artifacts;constructor($,J,Q){this.adapter=$;this.messagesArtifactUploader=J;this.logger=Q;this.artifacts=new uW(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,J,Q){lY(J,Q,XW($))}writeSessionManifest($,J){AA(GA($),{recursive:!0}),KA($,`${JSON.stringify(S0.parse(J),null,2)}
513
- `,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let J=this.artifacts.sessionManifestPath($,!1);if(!ON(J))return{path:J};try{return{path:J,manifest:S0.parse(JSON.parse(TN(J,"utf8")))}}catch{return{path:J}}}async resolveArtifactPath($,J,Q){let W=(await this.adapter.getSession($))?.[J];return typeof W==="string"&&W.trim().length>0?W:Q($)}async persistSessionMessages($,J,Q){let Z=await this.resolveArtifactPath($,"messagesPath",(X)=>this.artifacts.sessionMessagesPath(X)),W=fW({updatedAt:e(),context:XW($),messages:J,systemPrompt:Q}),j=`${JSON.stringify(W,null,2)}
512
+ FROM sessions WHERE session_id = ?`,[$]);if(!J)return;return{sessionId:i1(J.session_id),source:i1(J.source),pid:Number(J.pid??0),startedAt:i1(J.started_at),endedAt:J.ended_at??null,exitCode:J.exit_code??null,status:i1(J.status),interactive:YJ(J.interactive),provider:i1(J.provider),model:i1(J.model),cwd:i1(J.cwd),workspaceRoot:i1(J.workspace_root),teamName:D1(J.team_name),enableTools:YJ(J.enable_tools),enableSpawn:YJ(J.enable_spawn),enableTeams:YJ(J.enable_teams),parentSessionId:D1(J.parent_session_id),parentAgentId:D1(J.parent_agent_id),agentId:D1(J.agent_id),conversationId:D1(J.conversation_id),isSubagent:YJ(J.is_subagent),prompt:D1(J.prompt),metadata:(()=>{let Q=D1(J.metadata_json);if(!Q)return;try{let Z=JSON.parse(Q);if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z}catch{}return})(),hookPath:D1(J.hook_path),messagesPath:D1(J.messages_path),updatedAt:D1(J.updated_at)??jQ()}}list($=200){let J=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),Q=[];for(let Z of J){let W=this.get(i1(Z.session_id));if(W)Q.push(W)}return Q}delete($,J=!1){let Q=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(J)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return Q>0}}m8();import{existsSync as J3,mkdirSync as $w,readFileSync as NA,renameSync as Jw,writeFileSync as Qw}from"node:fs";import{join as wA}from"node:path";import{resolveSessionDataDir as Zw}from"@cline/shared/storage";import{dirname as tN}from"node:path";import{nanoid as eN}from"nanoid";import{appendFileSync as _N,existsSync as ON,mkdirSync as AA,readFileSync as TN,writeFileSync as KA}from"node:fs";import{dirname as GA,join as MN}from"node:path";import{ensureHookLogDir as qN}from"@cline/shared/storage";class dW{adapter;messagesArtifactUploader;logger;artifacts;constructor($,J,Q){this.adapter=$;this.messagesArtifactUploader=J;this.logger=Q;this.artifacts=new u7(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,J,Q){lY(J,Q,X7($))}writeSessionManifest($,J){AA(GA($),{recursive:!0}),KA($,`${JSON.stringify(S0.parse(J),null,2)}
513
+ `,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let J=this.artifacts.sessionManifestPath($,!1);if(!ON(J))return{path:J};try{return{path:J,manifest:S0.parse(JSON.parse(TN(J,"utf8")))}}catch{return{path:J}}}async resolveArtifactPath($,J,Q){let W=(await this.adapter.getSession($))?.[J];return typeof W==="string"&&W.trim().length>0?W:Q($)}async persistSessionMessages($,J,Q){let Z=await this.resolveArtifactPath($,"messagesPath",(X)=>this.artifacts.sessionMessagesPath(X)),W=f7({updatedAt:$0(),context:X7($),messages:J,systemPrompt:Q}),j=`${JSON.stringify(W,null,2)}
514
514
  `;if(AA(GA(Z),{recursive:!0}),KA(Z,j,"utf8"),!this.messagesArtifactUploader)return;try{let X=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:Z,contents:j,row:X})}catch(X){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:X})}}appendStaleSessionHookLog($,J,Q,Z,W){let X=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??MN(qN(),"hooks.jsonl");_N(X,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:Z,sessionId:J,pid:Q,source:W})}
515
- `,"utf8")}}import{appendFileSync as PN}from"node:fs";import{join as NN}from"node:path";import{resolveRootSessionId as FA}from"@cline/shared";import{ensureHookLogDir as wN}from"@cline/shared/storage";import{z as l7}from"zod";var SN="subagent",CN=l7.looseObject({task:l7.string().optional(),systemPrompt:l7.string().optional()});class X9{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,J,Q,Z){this.adapter=$;this.manifestStore=J;this.toPersistedMessages=Q;this.heartbeatLogIntervalMs=Z}teamTaskQueueKey($,J){return`${$}::${J}`}activeTeamTaskSessionId($,J){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,J))?.at(-1)}buildSubsessionRow($,J){return{sessionId:J.sessionId,source:SN,pid:process.ppid,startedAt:J.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:J.parentSessionId,parentAgentId:J.parentAgentId,agentId:J.agentId,conversationId:J.conversationId??null,isSubagent:!0,prompt:J.prompt,metadata:j6({prompt:J.prompt}),hookPath:"",messagesPath:J.messagesPath,updatedAt:J.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let J=FA($.sessionContext);if(!J)return;let Q=CN.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:J,parentAgentId:$.agent_id,task:Q.success?Q.data.task:void 0,systemPrompt:Q.success?Q.data.systemPrompt:void 0})}async upsertSubagentSession($){let J=$.rootSessionId;if(!J)return;let Q=await this.adapter.getSession(J);if(!Q)return;let Z=W8(J,$.agentId),W=await this.adapter.getSession(Z),j=e(),X=this.manifestStore.artifacts.subagentArtifactPaths(Z,$.agentId,this.activeTeamTaskSessionId(J,$.parentAgentId)),f=$.prompt??W?.prompt??void 0;if(!f)f=await this.adapter.claimSpawnRequest(J,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!W)return await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:Z,parentSessionId:J,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:f,startedAt:j,...X})),this.manifestStore.initializeMessagesFile(Z,X.messagesPath,j),Z;return await this.adapter.updateSession({sessionId:Z,setRunning:!0,parentSessionId:J,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:W.prompt??f??null,metadata:j6({metadata:W.metadata??void 0,prompt:W.prompt??f??null}),expectedStatusLock:W.statusLock}),Z}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let J=FA($.sessionContext);if(!J)return;if($.hookName==="session_shutdown"){let Q=W8(J,$.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:J})}async applySubagentStatus($,J){await this.applySubagentStatusBySessionId($,Q6(J))}async applySubagentStatusBySessionId($,J){let Q=await this.adapter.getSession($);if(!Q)return;let Z=j0(J)?null:e(),W=j0(J)?null:J==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:J,endedAt:Z,exitCode:W,expectedStatusLock:Q.statusLock})}async applyStatusToRunningChildSessions($,J){if(!$)return;let Q=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let Z of Q)await this.applySubagentStatusBySessionId(Z.sessionId,J)}async onTeamTaskStart($,J,Q){let Z=await this.adapter.getSession($);if(!Z)return;let W=$6($,J),j=e(),{messagesPath:X}=this.manifestStore.artifacts.subagentArtifactPaths(W,J);await this.adapter.upsertSession(this.buildSubsessionRow(Z,{sessionId:W,parentSessionId:$,parentAgentId:"lead",agentId:J,prompt:Q||`Team task for ${J}`,startedAt:j,messagesPath:X})),this.manifestStore.initializeMessagesFile(W,X,j);let f=this.teamTaskQueueKey($,J),Y=this.teamTaskSessionsByAgent.get(f)??[];Y.push(W),this.teamTaskSessionsByAgent.set(f,Y)}async onTeamTaskEnd($,J,Q,Z,W,j){let X=this.teamTaskQueueKey($,J),f=this.teamTaskSessionsByAgent.get(X);if(!f||f.length===0)return;let Y=f.shift();if(f.length===0)this.teamTaskSessionsByAgent.delete(X);if(!Y)return;let V=W?.messages??j,H=this.toPersistedMessages(V,W,j);if(H)await this.manifestStore.persistSessionMessages(Y,H);await this.applySubagentStatusBySessionId(Y,Q),this.teamTaskLastHeartbeatBySession.delete(Y),this.teamTaskLastProgressLineBySession.delete(Y)}async onTeamTaskProgress($,J,Q,Z){let W=this.teamTaskQueueKey($,J),j=this.teamTaskSessionsByAgent.get(W)?.[0];if(!j)return;let X=Q.trim();if(!X)return;let f=Z?.kind??"progress";if(f==="heartbeat"){let V=Date.now(),H=this.teamTaskLastHeartbeatBySession.get(j)??0;if(V-H<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(j,V)}let Y=f==="heartbeat"?"[progress] heartbeat":f==="text"?`[progress] text: ${X}`:`[progress] ${X}`;if(this.teamTaskLastProgressLineBySession.get(j)===Y)return;this.teamTaskLastProgressLineBySession.set(j,Y)}async handleSubAgentStart($,J){let Q=await this.upsertSubagentSession({agentId:J.subAgentId,parentAgentId:J.parentAgentId,conversationId:J.conversationId,prompt:J.input.task,rootSessionId:$});if(!Q)return;await this.applySubagentStatusBySessionId(Q,"running")}async handleSubAgentEnd($,J){let Q=await this.upsertSubagentSession({agentId:J.subAgentId,parentAgentId:J.parentAgentId,conversationId:J.conversationId,prompt:J.input.task,rootSessionId:$});if(!Q)return;if(J.error){await this.applySubagentStatusBySessionId(Q,"failed");return}let Z=this.toPersistedMessages(J.agentResult?.messages,J.agentResult);if(Z)await this.manifestStore.persistSessionMessages(Q,Z);let W=J.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Q,W==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Q=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??NN(wN(),"hooks.jsonl");PN(Q,`${JSON.stringify({ts:e(),...$})}
516
- `,"utf8")}}import{formatUserInputBlock as oN}from"@cline/shared";var PA={};w(PA,{toTeamProgressLifecycleEvent:()=>d8,sanitizeTeamName:()=>hY,reviveTeamStateDates:()=>E5,parseConfiguredAgentConfig:()=>HJ,loadConfiguredAgentConfigs:()=>v8,createWorkerReviewerTeam:()=>qA,createSpawnAgentTool:()=>A$,createDelegatedAgentConfigProvider:()=>H$,createDelegatedAgent:()=>B$,createConfiguredAgentTools:()=>c8,createAgentTeamsTools:()=>r$,createAgentTeam:()=>i7,buildTeamProgressSummary:()=>u8,buildDelegatedAgentConfig:()=>l$,buildConfiguredAgentToolName:()=>BJ,buildConfiguredAgentToolDescriptors:()=>AJ,bootstrapAgentTeams:()=>Z8,AgentTeamsRuntime:()=>T2,AgentTeam:()=>p8});import{existsSync as yN,readdirSync as EN,readFileSync as bN}from"node:fs";import{basename as DA,extname as hN,join as kN}from"node:path";import{resolveAgentConfigSearchPaths as IN}from"@cline/shared/storage";import RA from"yaml";import{z as P0}from"zod";var LA=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 xN($){let J=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!J)throw Error("Missing YAML frontmatter block in agent config file.");let Q=J[0].length,Z=/^---[^\S\r\n]*(?:\r?\n|$)/gm;Z.lastIndex=Q;let W,j=Array.from($.matchAll(Z)).filter((X)=>X.index>=Q);for(let X of j){let f=X.index,Y=$.slice(Q,f);try{let V=RA.parse(Y);if(!V||typeof V!=="object"||Array.isArray(V))continue;LA.parse(V);let H=$.slice(f+X[0].length);W={frontmatter:Y,body:H}}catch{}}if(W)return W;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function UA($){if($===void 0)return;let J=Array.isArray($)?$:$.split(",");return Array.from(new Set(J.map((Q)=>Q.trim()).filter((Q)=>Q.length>0)))}function gN($){return $.trim().toLowerCase()}function mN($){let J=hN($).toLowerCase();return J===".yml"||J===".yaml"}function HJ($,J={}){let{frontmatter:Q,body:Z}=xN($),W=RA.parse(Q);if(!W||typeof W!=="object"||Array.isArray(W))throw Error("Agent config frontmatter must be a YAML mapping.");let j=LA.parse(W),X=Z.trim();if(!X)throw Error("Missing system prompt body in agent config file.");return{name:j.name,description:j.description,tools:UA(j.tools),skills:UA(j.skills),providerId:j.providerId,modelId:j.modelId,maxIterations:j.maxIterations,systemPrompt:X,path:J.path}}function v8($){let J=$.searchPaths??IN($.workspaceRoot),Q=new Map,Z=[];for(let j of J.filter(Boolean)){if(!yN(j))continue;let X;try{X=EN(j,{withFileTypes:!0})}catch(f){Z.push({path:j,error:f instanceof Error?f:Error(String(f))});continue}for(let f of X){if(!f.isFile()||!mN(f.name))continue;let Y=kN(j,f.name);try{let V=bN(Y,"utf8"),H=HJ(V,{path:Y}),B=gN(H.name);if(!Q.has(B))Q.set(B,H)}catch(V){Z.push({path:Y,error:V instanceof Error?V:Error(String(V))})}}}return{configs:Array.from(Q.values()).sort((j,X)=>(j.path?DA(j.path):j.name).localeCompare(X.path?DA(X.path):X.name)),errors:Z}}import{createTool as vN,zodToJsonSchema as cN}from"@cline/shared";import{z as zA}from"zod";var p7="subagent_",f9=64,uN=zA.object({prompt:zA.string().trim().min(1).describe("Task for the subagent to perform")});function dN($){let J="",Q=!0;for(let Z of $.trim().toLowerCase()){let W=Z.charCodeAt(0);if(!(W>=97&&W<=122||W>=48&&W<=57||Z==="_")||Z==="_"){if(!Q)J+="_",Q=!0;continue}J+=Z,Q=!1}return Q?J.slice(0,-1):J}function lN($){let J=2166136261;for(let Q=0;Q<$.length;Q++)J^=$.charCodeAt(Q),J=Math.imul(J,16777619);return(J>>>0).toString(36)}function BJ($){let J=dN($)||"agent",Q=lN($).slice(0,6),Z=`${p7}${J}`;if(Z.length<=f9)return Z;let W=f9-p7.length-Q.length-1,j=J.slice(0,Math.max(1,W));return`${p7}${j}_${Q}`.slice(0,f9)}function AJ($){let J=new Set,Q=[];for(let Z of[...$].sort((W,j)=>W.name.localeCompare(j.name))){let W=BJ(Z.name),j=W,X=2;while(J.has(j)){let f=`_${X++}`,Y=Math.max(1,f9-f.length);j=`${W.slice(0,Y)}${f}`}J.add(j),Q.push({toolName:j,config:Z})}return Q}function pN($,J){return{...$,providerId:J.providerId??$.providerId,modelId:J.modelId??$.modelId,maxIterations:J.maxIterations??$.maxIterations}}function c8($){return AJ($.agents).map(({toolName:J,config:Q})=>{return vN({name:J,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:cN(uN),execute:async(W,j)=>{let X=$.configProvider.getRuntimeConfig(),f=H$(pN(X,Q)),Y=$.createSubAgentTools?await $.createSubAgentTools(Q,W,j):[],V=B$({kind:"subagent",prompt:Q.systemPrompt,configProvider:f,tools:Y,maxIterations:Q.maxIterations,parentAgentId:j.agentId,abortSignal:j.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),H=V.getAgentId(),B=V.getConversationId(),A=j.agentId,K={systemPrompt:Q.systemPrompt,task:W.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:H,conversationId:B,parentAgentId:A,input:K})}catch{}try{let G=await V.run(W.prompt),R={text:G.text,iterations:G.iterations,finishReason:G.finishReason,usage:{inputTokens:G.usage.inputTokens,outputTokens:G.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:B,parentAgentId:A,input:K,result:R,agentResult:G})}catch{}return R}catch(G){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:B,parentAgentId:A,input:K,error:G instanceof Error?G:Error(String(G))})}catch{}throw G}},timeoutMs:300000,retryable:!1})})}function R1(){return new Date().toISOString()}function _A($,J){if(J<=0)return 0;return Math.round($/J*100)}function rN($,J){let Q=new Set;for(let W of J)if(W.status==="reviewed")Q.add(`${W.outcomeId}:${W.section}`);let Z=new Set;for(let W of $){if(W.status==="finalized")continue;for(let j of W.requiredSections)if(!Q.has(`${W.id}:${j}`))Z.add(`${W.id}:${j}`)}return[...Z].sort((W,j)=>W.localeCompare(j))}function u8($,J){let Q={idle:0,running:0,stopped:0},Z={pending:0,in_progress:0,blocked:0,completed:0},W={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},j={draft:0,in_review:0,finalized:0},X={draft:0,reviewed:0,rejected:0},f=0,Y=0;for(let D of J.members)if(Q[D.status]+=1,D.role==="lead")f+=1;else Y+=1;let V=[],H=[],B=J.tasks.filter((D)=>D.status==="completed").length,A=new Map(J.tasks.map((D)=>[D.id,D]));for(let D of J.tasks){if(Z[D.status]+=1,D.status==="blocked"){V.push(D.id);continue}if(D.status!=="pending")continue;if(D.dependsOn.every((F)=>{return A.get(F)?.status==="completed"}))H.push(D.id)}let K=[],G,R=0;for(let D of J.runs){if(W[D.status]+=1,D.status==="queued"||D.status==="running")K.push(D.id);let U=D.startedAt.getTime();if(U>=R)R=U,G=D.id}for(let D of J.outcomes)j[D.status]+=1;for(let D of J.outcomeFragments)X[D.status]+=1;return{teamName:$,updatedAt:R1(),members:{total:J.members.length,byStatus:Q,leadCount:f,teammateCount:Y},tasks:{total:J.tasks.length,byStatus:Z,blockedTaskIds:V,readyTaskIds:H,completionPct:_A(B,J.tasks.length)},runs:{total:J.runs.length,byStatus:W,activeRunIds:K,latestRunId:G},outcomes:{total:J.outcomes.length,byStatus:j,finalizedPct:_A(j.finalized,J.outcomes.length),missingRequiredSections:rN(J.outcomes,J.outcomeFragments)},fragments:{total:J.outcomeFragments.length,byStatus:X}}}function d8($){let{event:J}=$;switch(J.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),taskId:J.task.id,agentId:J.task.assignee??J.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:J.type,ts:R1(),runId:J.run.id,taskId:J.run.taskId,agentId:J.run.agentId,message:J.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),runId:J.run.id,taskId:J.run.taskId,agentId:J.run.agentId,message:J.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),outcomeId:J.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),outcomeId:J.fragment.outcomeId,fragmentId:J.fragment.id,agentId:J.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),taskId:J.message.taskId,agentId:J.message.fromAgentId,message:J.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),taskId:J.entry.taskId,agentId:J.entry.agentId,message:J.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),agentId:J.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1()}}import{sanitizeFileName as iN,TeamMessageType as I}from"@cline/shared";import{nanoid as nN}from"nanoid";import{TeamMessageType as Bd}from"@cline/shared";function r7($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function OA($,J){return $?.status==="stopped"&&r7(J)}var aN=600000,TA="recovered_queued";function sN($){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.
515
+ `,"utf8")}}import{appendFileSync as PN}from"node:fs";import{join as NN}from"node:path";import{resolveRootSessionId as FA}from"@cline/shared";import{ensureHookLogDir as wN}from"@cline/shared/storage";import{z as lW}from"zod";var SN="subagent",CN=lW.looseObject({task:lW.string().optional(),systemPrompt:lW.string().optional()});class XQ{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,J,Q,Z){this.adapter=$;this.manifestStore=J;this.toPersistedMessages=Q;this.heartbeatLogIntervalMs=Z}teamTaskQueueKey($,J){return`${$}::${J}`}activeTeamTaskSessionId($,J){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,J))?.at(-1)}buildSubsessionRow($,J){return{sessionId:J.sessionId,source:SN,pid:process.ppid,startedAt:J.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:J.parentSessionId,parentAgentId:J.parentAgentId,agentId:J.agentId,conversationId:J.conversationId??null,isSubagent:!0,prompt:J.prompt,metadata:j6({prompt:J.prompt}),hookPath:"",messagesPath:J.messagesPath,updatedAt:J.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let J=FA($.sessionContext);if(!J)return;let Q=CN.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:J,parentAgentId:$.agent_id,task:Q.success?Q.data.task:void 0,systemPrompt:Q.success?Q.data.systemPrompt:void 0})}async upsertSubagentSession($){let J=$.rootSessionId;if(!J)return;let Q=await this.adapter.getSession(J);if(!Q)return;let Z=W8(J,$.agentId),W=await this.adapter.getSession(Z),j=$0(),X=this.manifestStore.artifacts.subagentArtifactPaths(Z,$.agentId,this.activeTeamTaskSessionId(J,$.parentAgentId)),f=$.prompt??W?.prompt??void 0;if(!f)f=await this.adapter.claimSpawnRequest(J,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!W)return await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:Z,parentSessionId:J,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:f,startedAt:j,...X})),this.manifestStore.initializeMessagesFile(Z,X.messagesPath,j),Z;return await this.adapter.updateSession({sessionId:Z,setRunning:!0,parentSessionId:J,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:W.prompt??f??null,metadata:j6({metadata:W.metadata??void 0,prompt:W.prompt??f??null}),expectedStatusLock:W.statusLock}),Z}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let J=FA($.sessionContext);if(!J)return;if($.hookName==="session_shutdown"){let Q=W8(J,$.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:J})}async applySubagentStatus($,J){await this.applySubagentStatusBySessionId($,Q6(J))}async applySubagentStatusBySessionId($,J){let Q=await this.adapter.getSession($);if(!Q)return;let Z=X0(J)?null:$0(),W=X0(J)?null:J==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:J,endedAt:Z,exitCode:W,expectedStatusLock:Q.statusLock})}async applyStatusToRunningChildSessions($,J){if(!$)return;let Q=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let Z of Q)await this.applySubagentStatusBySessionId(Z.sessionId,J)}async onTeamTaskStart($,J,Q){let Z=await this.adapter.getSession($);if(!Z)return;let W=$6($,J),j=$0(),{messagesPath:X}=this.manifestStore.artifacts.subagentArtifactPaths(W,J);await this.adapter.upsertSession(this.buildSubsessionRow(Z,{sessionId:W,parentSessionId:$,parentAgentId:"lead",agentId:J,prompt:Q||`Team task for ${J}`,startedAt:j,messagesPath:X})),this.manifestStore.initializeMessagesFile(W,X,j);let f=this.teamTaskQueueKey($,J),Y=this.teamTaskSessionsByAgent.get(f)??[];Y.push(W),this.teamTaskSessionsByAgent.set(f,Y)}async onTeamTaskEnd($,J,Q,Z,W,j){let X=this.teamTaskQueueKey($,J),f=this.teamTaskSessionsByAgent.get(X);if(!f||f.length===0)return;let Y=f.shift();if(f.length===0)this.teamTaskSessionsByAgent.delete(X);if(!Y)return;let V=W?.messages??j,H=this.toPersistedMessages(V,W,j);if(H)await this.manifestStore.persistSessionMessages(Y,H);await this.applySubagentStatusBySessionId(Y,Q),this.teamTaskLastHeartbeatBySession.delete(Y),this.teamTaskLastProgressLineBySession.delete(Y)}async onTeamTaskProgress($,J,Q,Z){let W=this.teamTaskQueueKey($,J),j=this.teamTaskSessionsByAgent.get(W)?.[0];if(!j)return;let X=Q.trim();if(!X)return;let f=Z?.kind??"progress";if(f==="heartbeat"){let V=Date.now(),H=this.teamTaskLastHeartbeatBySession.get(j)??0;if(V-H<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(j,V)}let Y=f==="heartbeat"?"[progress] heartbeat":f==="text"?`[progress] text: ${X}`:`[progress] ${X}`;if(this.teamTaskLastProgressLineBySession.get(j)===Y)return;this.teamTaskLastProgressLineBySession.set(j,Y)}async handleSubAgentStart($,J){let Q=await this.upsertSubagentSession({agentId:J.subAgentId,parentAgentId:J.parentAgentId,conversationId:J.conversationId,prompt:J.input.task,rootSessionId:$});if(!Q)return;await this.applySubagentStatusBySessionId(Q,"running")}async handleSubAgentEnd($,J){let Q=await this.upsertSubagentSession({agentId:J.subAgentId,parentAgentId:J.parentAgentId,conversationId:J.conversationId,prompt:J.input.task,rootSessionId:$});if(!Q)return;if(J.error){await this.applySubagentStatusBySessionId(Q,"failed");return}let Z=this.toPersistedMessages(J.agentResult?.messages,J.agentResult);if(Z)await this.manifestStore.persistSessionMessages(Q,Z);let W=J.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Q,W==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Q=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??NN(wN(),"hooks.jsonl");PN(Q,`${JSON.stringify({ts:$0(),...$})}
516
+ `,"utf8")}}import{formatUserInputBlock as oN}from"@cline/shared";var PA={};w(PA,{toTeamProgressLifecycleEvent:()=>d8,sanitizeTeamName:()=>hY,reviveTeamStateDates:()=>E5,parseConfiguredAgentConfig:()=>HJ,loadConfiguredAgentConfigs:()=>v8,createWorkerReviewerTeam:()=>qA,createSpawnAgentTool:()=>A$,createDelegatedAgentConfigProvider:()=>H$,createDelegatedAgent:()=>B$,createConfiguredAgentTools:()=>c8,createAgentTeamsTools:()=>r$,createAgentTeam:()=>iW,buildTeamProgressSummary:()=>u8,buildDelegatedAgentConfig:()=>l$,buildConfiguredAgentToolName:()=>BJ,buildConfiguredAgentToolDescriptors:()=>AJ,bootstrapAgentTeams:()=>Z8,AgentTeamsRuntime:()=>T2,AgentTeam:()=>p8});import{existsSync as yN,readdirSync as EN,readFileSync as bN}from"node:fs";import{basename as DA,extname as hN,join as kN}from"node:path";import{resolveAgentConfigSearchPaths as IN}from"@cline/shared/storage";import RA from"yaml";import{z as P0}from"zod";var LA=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 xN($){let J=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!J)throw Error("Missing YAML frontmatter block in agent config file.");let Q=J[0].length,Z=/^---[^\S\r\n]*(?:\r?\n|$)/gm;Z.lastIndex=Q;let W,j=Array.from($.matchAll(Z)).filter((X)=>X.index>=Q);for(let X of j){let f=X.index,Y=$.slice(Q,f);try{let V=RA.parse(Y);if(!V||typeof V!=="object"||Array.isArray(V))continue;LA.parse(V);let H=$.slice(f+X[0].length);W={frontmatter:Y,body:H}}catch{}}if(W)return W;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function UA($){if($===void 0)return;let J=Array.isArray($)?$:$.split(",");return Array.from(new Set(J.map((Q)=>Q.trim()).filter((Q)=>Q.length>0)))}function gN($){return $.trim().toLowerCase()}function mN($){let J=hN($).toLowerCase();return J===".yml"||J===".yaml"}function HJ($,J={}){let{frontmatter:Q,body:Z}=xN($),W=RA.parse(Q);if(!W||typeof W!=="object"||Array.isArray(W))throw Error("Agent config frontmatter must be a YAML mapping.");let j=LA.parse(W),X=Z.trim();if(!X)throw Error("Missing system prompt body in agent config file.");return{name:j.name,description:j.description,tools:UA(j.tools),skills:UA(j.skills),providerId:j.providerId,modelId:j.modelId,maxIterations:j.maxIterations,systemPrompt:X,path:J.path}}function v8($){let J=$.searchPaths??IN($.workspaceRoot),Q=new Map,Z=[];for(let j of J.filter(Boolean)){if(!yN(j))continue;let X;try{X=EN(j,{withFileTypes:!0})}catch(f){Z.push({path:j,error:f instanceof Error?f:Error(String(f))});continue}for(let f of X){if(!f.isFile()||!mN(f.name))continue;let Y=kN(j,f.name);try{let V=bN(Y,"utf8"),H=HJ(V,{path:Y}),B=gN(H.name);if(!Q.has(B))Q.set(B,H)}catch(V){Z.push({path:Y,error:V instanceof Error?V:Error(String(V))})}}}return{configs:Array.from(Q.values()).sort((j,X)=>(j.path?DA(j.path):j.name).localeCompare(X.path?DA(X.path):X.name)),errors:Z}}import{createTool as vN,zodToJsonSchema as cN}from"@cline/shared";import{z as zA}from"zod";var pW="subagent_",fQ=64,uN=zA.object({prompt:zA.string().trim().min(1).describe("Task for the subagent to perform")});function dN($){let J="",Q=!0;for(let Z of $.trim().toLowerCase()){let W=Z.charCodeAt(0);if(!(W>=97&&W<=122||W>=48&&W<=57||Z==="_")||Z==="_"){if(!Q)J+="_",Q=!0;continue}J+=Z,Q=!1}return Q?J.slice(0,-1):J}function lN($){let J=2166136261;for(let Q=0;Q<$.length;Q++)J^=$.charCodeAt(Q),J=Math.imul(J,16777619);return(J>>>0).toString(36)}function BJ($){let J=dN($)||"agent",Q=lN($).slice(0,6),Z=`${pW}${J}`;if(Z.length<=fQ)return Z;let W=fQ-pW.length-Q.length-1,j=J.slice(0,Math.max(1,W));return`${pW}${j}_${Q}`.slice(0,fQ)}function AJ($){let J=new Set,Q=[];for(let Z of[...$].sort((W,j)=>W.name.localeCompare(j.name))){let W=BJ(Z.name),j=W,X=2;while(J.has(j)){let f=`_${X++}`,Y=Math.max(1,fQ-f.length);j=`${W.slice(0,Y)}${f}`}J.add(j),Q.push({toolName:j,config:Z})}return Q}function pN($,J){return{...$,providerId:J.providerId??$.providerId,modelId:J.modelId??$.modelId,maxIterations:J.maxIterations??$.maxIterations}}function c8($){return AJ($.agents).map(({toolName:J,config:Q})=>{return vN({name:J,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:cN(uN),execute:async(W,j)=>{let X=$.configProvider.getRuntimeConfig(),f=H$(pN(X,Q)),Y=$.createSubAgentTools?await $.createSubAgentTools(Q,W,j):[],V=B$({kind:"subagent",prompt:Q.systemPrompt,configProvider:f,tools:Y,maxIterations:Q.maxIterations,parentAgentId:j.agentId,abortSignal:j.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),H=V.getAgentId(),B=V.getConversationId(),A=j.agentId,K={systemPrompt:Q.systemPrompt,task:W.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:H,conversationId:B,parentAgentId:A,input:K})}catch{}try{let G=await V.run(W.prompt),R={text:G.text,iterations:G.iterations,finishReason:G.finishReason,usage:{inputTokens:G.usage.inputTokens,outputTokens:G.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:B,parentAgentId:A,input:K,result:R,agentResult:G})}catch{}return R}catch(G){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:H,conversationId:B,parentAgentId:A,input:K,error:G instanceof Error?G:Error(String(G))})}catch{}throw G}},timeoutMs:300000,retryable:!1})})}function R1(){return new Date().toISOString()}function _A($,J){if(J<=0)return 0;return Math.round($/J*100)}function rN($,J){let Q=new Set;for(let W of J)if(W.status==="reviewed")Q.add(`${W.outcomeId}:${W.section}`);let Z=new Set;for(let W of $){if(W.status==="finalized")continue;for(let j of W.requiredSections)if(!Q.has(`${W.id}:${j}`))Z.add(`${W.id}:${j}`)}return[...Z].sort((W,j)=>W.localeCompare(j))}function u8($,J){let Q={idle:0,running:0,stopped:0},Z={pending:0,in_progress:0,blocked:0,completed:0},W={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},j={draft:0,in_review:0,finalized:0},X={draft:0,reviewed:0,rejected:0},f=0,Y=0;for(let D of J.members)if(Q[D.status]+=1,D.role==="lead")f+=1;else Y+=1;let V=[],H=[],B=J.tasks.filter((D)=>D.status==="completed").length,A=new Map(J.tasks.map((D)=>[D.id,D]));for(let D of J.tasks){if(Z[D.status]+=1,D.status==="blocked"){V.push(D.id);continue}if(D.status!=="pending")continue;if(D.dependsOn.every((F)=>{return A.get(F)?.status==="completed"}))H.push(D.id)}let K=[],G,R=0;for(let D of J.runs){if(W[D.status]+=1,D.status==="queued"||D.status==="running")K.push(D.id);let U=D.startedAt.getTime();if(U>=R)R=U,G=D.id}for(let D of J.outcomes)j[D.status]+=1;for(let D of J.outcomeFragments)X[D.status]+=1;return{teamName:$,updatedAt:R1(),members:{total:J.members.length,byStatus:Q,leadCount:f,teammateCount:Y},tasks:{total:J.tasks.length,byStatus:Z,blockedTaskIds:V,readyTaskIds:H,completionPct:_A(B,J.tasks.length)},runs:{total:J.runs.length,byStatus:W,activeRunIds:K,latestRunId:G},outcomes:{total:J.outcomes.length,byStatus:j,finalizedPct:_A(j.finalized,J.outcomes.length),missingRequiredSections:rN(J.outcomes,J.outcomeFragments)},fragments:{total:J.outcomeFragments.length,byStatus:X}}}function d8($){let{event:J}=$;switch(J.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),taskId:J.task.id,agentId:J.task.assignee??J.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:J.type,ts:R1(),runId:J.run.id,taskId:J.run.taskId,agentId:J.run.agentId,message:J.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),runId:J.run.id,taskId:J.run.taskId,agentId:J.run.agentId,message:J.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),outcomeId:J.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),outcomeId:J.fragment.outcomeId,fragmentId:J.fragment.id,agentId:J.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),taskId:J.message.taskId,agentId:J.message.fromAgentId,message:J.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),taskId:J.entry.taskId,agentId:J.entry.agentId,message:J.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1(),agentId:J.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:J.type,ts:R1()}}import{sanitizeFileName as iN,TeamMessageType as I}from"@cline/shared";import{nanoid as nN}from"nanoid";import{TeamMessageType as Bd}from"@cline/shared";function rW($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function OA($,J){return $?.status==="stopped"&&rW(J)}var aN=600000,TA="recovered_queued";function sN($){return`This is an automatic recovery of interrupted team run ${$.id}. The previous process stopped before completion. Continue the task safely, inspect the current workspace state before making changes, and avoid duplicating completed work.
517
517
 
518
518
  ${$.message}`}class p8{agents=new Map;configs=new Map;onTeamEvent;constructor($,J){if(this.onTeamEvent=J,$)for(let[Q,Z]of Object.entries($))this.addAgent(Q,Z)}addAgent($,J){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let Q={...J,onEvent:(W)=>{J.onEvent?.(W),this.emitEvent({type:I.AgentEvent,agentId:$,event:W})}},Z=new V$(Q);if(Q.onEvent)Z.subscribeEvents(Q.onEvent);this.agents.set($,Z),this.configs.set($,J)}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($,J){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:I.TaskStart,agentId:$,message:J});try{let Z=await Q.run(J);return this.emitEvent({type:I.TaskEnd,agentId:$,result:Z}),Z}catch(Z){let W=Z instanceof Error?Z:Error(String(Z));throw this.emitEvent({type:I.TaskEnd,agentId:$,error:W,messages:Q.getMessages()}),Z}}async continueTo($,J){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:I.TaskStart,agentId:$,message:J});try{let Z=await Q.continue(J);return this.emitEvent({type:I.TaskEnd,agentId:$,result:Z}),Z}catch(Z){let W=Z instanceof Error?Z:Error(String(Z));throw this.emitEvent({type:I.TaskEnd,agentId:$,error:W,messages:Q.getMessages()}),Z}}async runParallel($){let J=$.map(async(Q)=>{let Z=this.agents.get(Q.agentId);if(!Z)return{agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata};this.emitEvent({type:I.TaskStart,agentId:Q.agentId,message:Q.message});try{let W=await Z.run(Q.message);return this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,result:W}),{agentId:Q.agentId,result:W,metadata:Q.metadata}}catch(W){let j=W instanceof Error?W:Error(String(W));return this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,error:j,messages:Z.getMessages()}),{agentId:Q.agentId,result:void 0,error:j,metadata:Q.metadata}}});return Promise.all(J)}async runSequential($){let J=[];for(let Q of $){let Z=this.agents.get(Q.agentId);if(!Z){J.push({agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata});continue}this.emitEvent({type:I.TaskStart,agentId:Q.agentId,message:Q.message});try{let W=await Z.run(Q.message);this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,result:W}),J.push({agentId:Q.agentId,result:W,metadata:Q.metadata})}catch(W){let j=W instanceof Error?W:Error(String(W));this.emitEvent({type:I.TaskEnd,agentId:Q.agentId,error:j,messages:Z.getMessages()}),J.push({agentId:Q.agentId,result:void 0,error:j,metadata:Q.metadata})}}return J}async runPipeline($,J,Q){let Z=[],W=J;for(let j of $){let X=this.agents.get(j);if(!X){Z.push({agentId:j,result:void 0,error:Error(`Agent "${j}" not found in team`)});break}this.emitEvent({type:I.TaskStart,agentId:j,message:W});try{let f=await X.run(W);this.emitEvent({type:I.TaskEnd,agentId:j,result:f}),Z.push({agentId:j,result:f});let Y=$.indexOf(j)+1;if(Y<$.length){let V=$[Y];W=Q?Q(f,V):`Previous agent output:
519
519
  ${f.text}
520
520
 
521
- Please continue from here.`}}catch(f){let Y=f instanceof Error?f:Error(String(f));this.emitEvent({type:I.TaskEnd,agentId:j,error:Y,messages:X.getMessages()}),Z.push({agentId:j,result:void 0,error:Y});break}}return Z}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function i7($,J){return new p8($,J)}function qA($){let J=i7({worker:$.worker,reviewer:$.reviewer}),Q=J;return Q.doAndReview=async(Z)=>{let W=await J.routeTo("worker",Z),j=await J.routeTo("reviewer",`Please review this work:
521
+ Please continue from here.`}}catch(f){let Y=f instanceof Error?f:Error(String(f));this.emitEvent({type:I.TaskEnd,agentId:j,error:Y,messages:X.getMessages()}),Z.push({agentId:j,result:void 0,error:Y});break}}return Z}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function iW($,J){return new p8($,J)}function qA($){let J=iW({worker:$.worker,reviewer:$.reviewer}),Q=J;return Q.doAndReview=async(Z)=>{let W=await J.routeTo("worker",Z),j=await J.routeTo("reviewer",`Please review this work:
522
522
 
523
- ${W.text}`);return{workerResult:W,reviewResult:j}},Q}class T2{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_${iN(nN(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 J=$.leadAgentId??"lead";this.members.set(J,{agentId:J,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((J)=>{let Q=this.getUnresolvedDependencies(J);return{...J,blockedBy:Q,isReady:J.status==="pending"&&!J.assignee&&Q.length===0}}).filter((J)=>{if($?.status&&J.status!==$.status)return!1;if($?.assignee&&J.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,J){let Q=J?.unreadOnly??!0,Z=J?.markRead??!0,W=J?.limit,j=this.mailbox.filter((f)=>f.toAgentId===$&&(!Q||!f.readAt)),X=typeof W==="number"&&W>0?j.slice(Math.max(0,j.length-W)):j;if(Z){let f=new Date;for(let Y of X)if(!Y.readAt)Y.readAt=f}return X.map((f)=>({...f}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let Q of this.tasks.values())$[Q.status]++;let J={draft:0,in_review:0,finalized:0};for(let Q of this.outcomes.values())J[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:J}}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 J=Array.from(this.members.values()).filter((Q)=>Q.role==="lead");this.members.clear();for(let Q of J)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,l8($.tasks.map((Q)=>Q.id),"task_")),this.messageCounter=Math.max(this.messageCounter,l8($.mailbox.map((Q)=>Q.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,l8($.missionLog.map((Q)=>Q.id),"log_")),this.runCounter=Math.max(this.runCounter,l8(($.runs??[]).map((Q)=>Q.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,l8(($.outcomes??[]).map((Q)=>Q.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,l8(($.outcomeFragments??[]).map((Q)=>Q.id),"frag_"))}isTeammateActive($){let J=this.members.get($);return!!J&&J.role==="teammate"&&!!J.agent}spawnTeammate({agentId:$,config:J}){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 Z={...J,apiTimeoutMs:aN,consumePendingUserMessage:()=>{let X=this.members.get($);if(!X||!X.pendingSteerMessage)return;let f=X.pendingSteerMessage;return X.pendingSteerMessage=void 0,f},onEvent:(X)=>{J.onEvent?.(X),this.emitEvent({type:I.AgentEvent,agentId:$,event:X}),this.trackMeaningfulEvent($,X)}},W=new V$(Z);if(Z.onEvent)W.subscribeEvents(Z.onEvent);let j={agentId:$,role:"teammate",description:J.role,status:"idle",agent:W,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,j),this.emitEvent({type:I.TeammateSpawned,agentId:$,role:J.role,teammate:{rolePrompt:J.systemPrompt,modelId:J.modelId,maxIterations:J.maxIterations,runtimeAgentId:W.getAgentId(),conversationId:W.getConversationId(),parentAgentId:null}}),{agentId:j.agentId,role:j.role,description:j.description,status:j.status}}shutdownTeammate($,J){let Q=this.members.get($);if(!Q||Q.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{Q.agent?.abort()}catch(Z){if(!r7(Z))throw Z}Q.status="stopped",this.emitEvent({type:I.TeammateShutdown,agentId:$,reason:J})}updateTeammateConnections($){for(let J of this.members.values()){if(J.role!=="teammate"||!J.agent)continue;J.agent.updateConnection($)}}createTask($){let J=`task_${String(++this.taskCounter).padStart(4,"0")}`,Q=new Date,Z={id:J,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:Q,updatedAt:Q,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(J,Z),this.emitEvent({type:I.TeamTaskUpdated,task:{...Z}}),{...Z}}claimTask($,J){let Q=this.requireTask($);return this.assertDependenciesResolved(Q),Q.status="in_progress",Q.assignee=J,Q.updatedAt=new Date,this.emitEvent({type:I.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:J,taskId:$,kind:"progress",summary:`Claimed task "${Q.title}"`}),{...Q}}blockTask($,J,Q){let Z=this.requireTask($);return Z.status="blocked",Z.updatedAt=new Date,Z.summary=Q,this.emitEvent({type:I.TeamTaskUpdated,task:{...Z}}),this.appendMissionLog({agentId:J,taskId:$,kind:"blocked",summary:Q}),{...Z}}completeTask($,J,Q){let Z=this.requireTask($);if(Z.status="completed",Z.updatedAt=new Date,Z.summary=Q,!Z.assignee)Z.assignee=J;return this.emitEvent({type:I.TeamTaskUpdated,task:{...Z}}),this.appendMissionLog({agentId:J,taskId:$,kind:"done",summary:Q}),{...Z}}async routeToTeammate($,J,Q){let Z=this.members.get($);if(!Z||Z.role!=="teammate"||!Z.agent)throw Error(`Teammate "${$}" was not found`);if(!Z.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");Z.runningCount++,Z.status="running",this.emitEvent({type:I.TaskStart,agentId:$,message:J});try{let W=this.listMailbox($,{unreadOnly:!0,markRead:!0}),j=W.length>0?`${this.buildMailboxNotification(W)}
523
+ ${W.text}`);return{workerResult:W,reviewResult:j}},Q}class T2{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_${iN(nN(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 J=$.leadAgentId??"lead";this.members.set(J,{agentId:J,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((J)=>{let Q=this.getUnresolvedDependencies(J);return{...J,blockedBy:Q,isReady:J.status==="pending"&&!J.assignee&&Q.length===0}}).filter((J)=>{if($?.status&&J.status!==$.status)return!1;if($?.assignee&&J.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,J){let Q=J?.unreadOnly??!0,Z=J?.markRead??!0,W=J?.limit,j=this.mailbox.filter((f)=>f.toAgentId===$&&(!Q||!f.readAt)),X=typeof W==="number"&&W>0?j.slice(Math.max(0,j.length-W)):j;if(Z){let f=new Date;for(let Y of X)if(!Y.readAt)Y.readAt=f}return X.map((f)=>({...f}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let Q of this.tasks.values())$[Q.status]++;let J={draft:0,in_review:0,finalized:0};for(let Q of this.outcomes.values())J[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:J}}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 J=Array.from(this.members.values()).filter((Q)=>Q.role==="lead");this.members.clear();for(let Q of J)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,l8($.tasks.map((Q)=>Q.id),"task_")),this.messageCounter=Math.max(this.messageCounter,l8($.mailbox.map((Q)=>Q.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,l8($.missionLog.map((Q)=>Q.id),"log_")),this.runCounter=Math.max(this.runCounter,l8(($.runs??[]).map((Q)=>Q.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,l8(($.outcomes??[]).map((Q)=>Q.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,l8(($.outcomeFragments??[]).map((Q)=>Q.id),"frag_"))}isTeammateActive($){let J=this.members.get($);return!!J&&J.role==="teammate"&&!!J.agent}spawnTeammate({agentId:$,config:J}){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 Z={...J,apiTimeoutMs:aN,consumePendingUserMessage:()=>{let X=this.members.get($);if(!X||!X.pendingSteerMessage)return;let f=X.pendingSteerMessage;return X.pendingSteerMessage=void 0,f},onEvent:(X)=>{J.onEvent?.(X),this.emitEvent({type:I.AgentEvent,agentId:$,event:X}),this.trackMeaningfulEvent($,X)}},W=new V$(Z);if(Z.onEvent)W.subscribeEvents(Z.onEvent);let j={agentId:$,role:"teammate",description:J.role,status:"idle",agent:W,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,j),this.emitEvent({type:I.TeammateSpawned,agentId:$,role:J.role,teammate:{rolePrompt:J.systemPrompt,modelId:J.modelId,maxIterations:J.maxIterations,runtimeAgentId:W.getAgentId(),conversationId:W.getConversationId(),parentAgentId:null}}),{agentId:j.agentId,role:j.role,description:j.description,status:j.status}}shutdownTeammate($,J){let Q=this.members.get($);if(!Q||Q.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{Q.agent?.abort()}catch(Z){if(!rW(Z))throw Z}Q.status="stopped",this.emitEvent({type:I.TeammateShutdown,agentId:$,reason:J})}updateTeammateConnections($){for(let J of this.members.values()){if(J.role!=="teammate"||!J.agent)continue;J.agent.updateConnection($)}}createTask($){let J=`task_${String(++this.taskCounter).padStart(4,"0")}`,Q=new Date,Z={id:J,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:Q,updatedAt:Q,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(J,Z),this.emitEvent({type:I.TeamTaskUpdated,task:{...Z}}),{...Z}}claimTask($,J){let Q=this.requireTask($);return this.assertDependenciesResolved(Q),Q.status="in_progress",Q.assignee=J,Q.updatedAt=new Date,this.emitEvent({type:I.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:J,taskId:$,kind:"progress",summary:`Claimed task "${Q.title}"`}),{...Q}}blockTask($,J,Q){let Z=this.requireTask($);return Z.status="blocked",Z.updatedAt=new Date,Z.summary=Q,this.emitEvent({type:I.TeamTaskUpdated,task:{...Z}}),this.appendMissionLog({agentId:J,taskId:$,kind:"blocked",summary:Q}),{...Z}}completeTask($,J,Q){let Z=this.requireTask($);if(Z.status="completed",Z.updatedAt=new Date,Z.summary=Q,!Z.assignee)Z.assignee=J;return this.emitEvent({type:I.TeamTaskUpdated,task:{...Z}}),this.appendMissionLog({agentId:J,taskId:$,kind:"done",summary:Q}),{...Z}}async routeToTeammate($,J,Q){let Z=this.members.get($);if(!Z||Z.role!=="teammate"||!Z.agent)throw Error(`Teammate "${$}" was not found`);if(!Z.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");Z.runningCount++,Z.status="running",this.emitEvent({type:I.TaskStart,agentId:$,message:J});try{let W=this.listMailbox($,{unreadOnly:!0,markRead:!0}),j=W.length>0?`${this.buildMailboxNotification(W)}
524
524
 
525
- ${J}`:J,X=Q?.continueConversation?await Z.agent.continue(j):await Z.agent.run(j);return this.emitEvent({type:I.TaskEnd,agentId:$,result:X}),this.recordProgressStep($,`Completed a delegated run (${X.iterations} iterations)`,Q?.taskId,!0),X}catch(W){let j=W instanceof Error?W:Error(String(W));if(this.emitEvent({type:I.TaskEnd,agentId:$,error:j,messages:Z.agent.getMessages()}),!OA(Z,j))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:j.message});throw j}finally{if(Z.runningCount--,Z.runningCount<=0&&this.members.get($)?.status!=="stopped")Z.status="idle"}}startTeammateRun($,J,Q){let Z=`run_${String(++this.runCounter).padStart(5,"0")}`,W={id:Z,agentId:$,taskId:Q?.taskId,status:"queued",message:J,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(Z,W),this.runQueue.push(Z),this.emitEvent({type:I.RunQueued,run:{...W}}),this.dispatchQueuedRuns(),{...W}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let J=this.selectNextDispatchableQueuedRun();$=J.nextDelayedAttemptAt;let Q=J.index;if(Q<0){this.scheduleQueuedRunDispatch($);return}let[Z]=this.runQueue.splice(Q,1),W=Z?this.runs.get(Z):void 0;if(!W||W.status!=="queued")continue;this.executeQueuedRun(W)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,J=Number.NEGATIVE_INFINITY,Q,Z=Date.now();for(let W=0;W<this.runQueue.length;W++){let j=this.runs.get(this.runQueue[W]);if(!j||j.status!=="queued")continue;if(j.nextAttemptAt&&j.nextAttemptAt.getTime()>Z){if(!Q||j.nextAttemptAt<Q)Q=j.nextAttemptAt;continue}if(j.priority>J)J=j.priority,$=W}return{index:$,nextDelayedAttemptAt:Q}}scheduleQueuedRunDispatch($){if(!$)return;let J=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},J)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let J of this.runs.values())if(J.status==="running")$++;return $}async executeQueuedRun($){let J=$.currentActivity===TA;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:I.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let Z=J?sN($):$.message,W=await this.routeToTeammate($.agentId,Z,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=W,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:I.RunCompleted,run:{...$}})}catch(Z){let W=Z instanceof Error?Z.message:String(Z??"Unknown error");$.error=W,$.endedAt=new Date;let j=this.members.get($.agentId);if(OA(j,Z))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:I.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:I.RunFailed,run:{...$}})}finally{clearInterval(Q),this.dispatchQueuedRuns()}}listRuns($){let J=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Q)=>{if(!J&&!["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 J=this.runs.get($);return J?{...J}:void 0}async awaitRun($,J=250){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);while(Q.status==="queued"||Q.status==="running")await MA(J);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((J)=>["queued","running"].includes(J.status)))await MA($);return this.listRuns()}cancelRun($,J){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=J,Q.endedAt=new Date,Q.currentActivity="cancelled";let Z=this.runQueue.indexOf($);if(Z>=0)this.runQueue.splice(Z,1);return this.emitEvent({type:I.RunCancelled,run:{...Q},reason:J}),{...Q}}recoverActiveRuns($="runtime_recovered"){let J=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;let Z=this.members.get(Q.agentId);if(!Z||Z.role!=="teammate"||!Z.agent){Q.status="interrupted",Q.error="teammate_unavailable_after_recovery",Q.endedAt=new Date,Q.currentActivity="interrupted",this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:Q.error});continue}let 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=TA,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);J.push({...Q}),this.emitEvent({type:I.RunQueued,run:{...Q}})}return this.dispatchQueuedRuns(),J}markStaleRunsInterrupted($="runtime_recovered"){let J=[];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",J.push({...Q}),this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),J}sendMessage($,J,Q,Z,W){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let j=this.members.get(J);if(!j)throw Error(`Unknown recipient "${J}"`);let X={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:J,subject:Q,body:Z,taskId:W,sentAt:new Date};if(this.mailbox.push(X),this.emitEvent({type:I.TeamMessage,message:{...X}}),j.role==="teammate"&&j.runningCount>0&&j.agent)j.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Q}". Use the team_read_mailbox tool to read it at your convenience.`;return{...X}}broadcast($,J,Q,Z){let W=[];for(let j of this.members.values()){if(j.agentId===$)continue;if(j.role==="lead")continue;W.push(this.sendMessage($,j.agentId,J,Q,Z?.taskId))}return W}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let J={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(J);let Q=this.members.get($.agentId);if(Q)Q.lastMissionAt=Date.now(),Q.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:I.TeamMissionLog,entry:{...J}}),{...J}}createOutcome($){let J={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(J.id,J),this.emitEvent({type:I.OutcomeCreated,outcome:{...J}}),{...J}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let J=this.outcomes.get($.outcomeId);if(!J)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!J.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),J.status==="draft")J.status="in_review";return this.emitEvent({type:I.OutcomeFragmentAttached,fragment:{...Q}}),{...Q}}reviewOutcomeFragment($){let J=this.outcomeFragments.get($.fragmentId);if(!J)throw Error(`Fragment "${$.fragmentId}" was not found`);return J.status=$.approved?"reviewed":"rejected",J.reviewedBy=$.reviewedBy,J.reviewedAt=new Date,this.emitEvent({type:I.OutcomeFragmentReviewed,fragment:{...J}}),{...J}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((J)=>J.outcomeId===$).map((J)=>({...J}))}finalizeOutcome($){let J=this.outcomes.get($);if(!J)throw Error(`Outcome "${$}" was not found`);let Q=this.listOutcomeFragments($);for(let Z of J.requiredSections)if(!Q.some((j)=>j.section===Z&&j.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${Z}" is missing a reviewed fragment.`);return J.status="finalized",J.finalizedAt=new Date,this.emitEvent({type:I.OutcomeFinalized,outcome:{...J}}),{...J}}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(J){if(!r7(J))throw J}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[$,J]of this.members.entries())if(J.role==="teammate")this.members.delete($)}requireTask($){let J=this.tasks.get($);if(!J)throw Error(`Task "${$}" was not found`);return J}assertDependenciesResolved($){let J=this.getUnresolvedDependencies($);if(J.length>0)throw Error(`Task "${$.id}" is blocked by "${J[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((J)=>{let Q=this.tasks.get(J);return!Q||Q.status!=="completed"})}trackMeaningfulEvent($,J){if(this.recordRunActivityFromAgentEvent($,J),J.type==="iteration_end"&&J.hadToolCalls){this.recordProgressStep($,`Completed iteration ${J.iteration} with ${J.toolCallCount} tool call(s)`);return}if(J.type==="content_end"&&J.contentType==="tool"&&!J.error){this.recordProgressStep($,`Finished tool "${J.toolName??"unknown"}"`);return}if(J.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${J.iterations} iterations)`});return}if(J.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:J.error.message})}recordRunActivityFromAgentEvent($,J){let Q;switch(J.type){case"iteration_start":Q=`iteration_${J.iteration}_started`;break;case"content_start":if(J.contentType==="tool")Q=`running_tool_${J.toolName??"unknown"}`;break;case"content_end":if(J.contentType==="tool")Q=J.error?this.formatProgressErrorActivity(`tool_${J.toolName??"unknown"}_error`,J.error):`finished_tool_${J.toolName??"unknown"}`;break;case"done":Q="finalizing_response";break;case"error":Q=this.formatProgressErrorActivity("run_error",J.error.message);break;default:break}if(!Q)return;for(let Z of this.runs.values()){if(Z.agentId!==$||Z.status!=="running")continue;this.recordRunProgress(Z,Q)}}recordRunProgress($,J){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=J,$.currentActivity=J,this.emitEvent({type:I.RunProgress,run:{...$},message:J})}formatProgressErrorActivity($,J){let Q=J.replace(/\s+/g," ").trim();if(Q.length===0)return $;let Z=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${Z}`}recordProgressStep($,J,Q,Z=!1){this.missionStepCounter++;let W=this.members.get($);if(!W)return;let j=this.missionStepCounter-W.lastMissionStep,X=Date.now()-W.lastMissionAt;if(!Z&&j<this.missionLogIntervalSteps&&X<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Q,kind:"progress",summary:J})}buildMailboxNotification($){if($.length===0)return"";let J=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Q of $)J.push(`--- Message from ${Q.fromAgentId} | subject: ${Q.subject} ---`),J.push(Q.body);return J.push("---"),J.join(`
526
- `)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function MA($){return new Promise((J)=>setTimeout(J,$))}function l8($,J){let Q=0;for(let Z of $){if(!Z.startsWith(J))continue;let W=Number.parseInt(Z.slice(J.length),10);if(Number.isFinite(W))Q=Math.max(Q,W)}return Q}function n7($,J){switch(J.type){case"run_queued":case"run_started":$.activeTeamRunIds.add(J.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let Q;if(J.type==="run_failed")Q=J.run.error;else if(J.type==="run_cancelled"||J.type==="run_interrupted")Q=J.run.error??J.reason;$.activeTeamRunIds.delete(J.run.id),$.pendingTeamRunUpdates.push({runId:J.run.id,agentId:J.run.agentId,taskId:J.run.taskId,status:J.type.replace("run_",""),error:Q,iterations:J.run.result?.iterations}),Y9($);break}default:break}}async function a7($,J,Q){switch(J.type){case"run_progress":await Q("onTeamTaskProgress",$,J.run.agentId,J.message,{kind:J.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(J.event.type==="content_start"&&J.event.contentType==="text"&&typeof J.event.text==="string"){let Z=J.event.text.replace(/\s+/g," ").trim().slice(0,120);if(Z)await Q("onTeamTaskProgress",$,J.agentId,Z,{kind:"text"})}break;case"task_start":await Q("onTeamTaskStart",$,J.agentId,J.message);break;case"task_end":{if(J.error)await Q("onTeamTaskEnd",$,J.agentId,"failed",`[error] ${J.error.message}`,void 0,J.messages);else if(J.result?.finishReason==="aborted")await Q("onTeamTaskEnd",$,J.agentId,"cancelled","[done] aborted",J.result,J.result.messages);else await Q("onTeamTaskEnd",$,J.agentId,"completed",`[done] ${J.result?.finishReason??"completed"}`,J.result,J.result?.messages);break}default:break}}function s7($,J,Q,Z){if(!$.runtime.teamRuntime)return;let W=$.runtime.teamRuntime.getTeamName();Z({type:"team_progress",payload:{sessionId:J,teamName:W,lifecycle:d8({teamName:W,sessionId:J,event:Q}),summary:u8(W,$.runtime.teamRuntime.exportState())}})}function KJ($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function o7($,J){if($.aborting)return!1;if(!(J==="completed"||J==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&KJ($)}function Y9($){let J=$.teamRunWaiters.splice(0);for(let Q of J)Q()}async function t7($){while(!0){if($.aborting)return[];if($.pendingTeamRunUpdates.length>0){let J=[...$.pendingTeamRunUpdates];return $.pendingTeamRunUpdates.length=0,J}if($.activeTeamRunIds.size===0)return[];await new Promise((J)=>{$.teamRunWaiters.push(J)})}}function e7($,J){let Q=J.map((j)=>{let X=[`- ${j.runId} (${j.agentId}) -> ${j.status}`];if(j.taskId)X.push(` task=${j.taskId}`);if(typeof j.iterations==="number")X.push(` iterations=${j.iterations}`);if(j.error)X.push(` error=${j.error}`);return X.join("")}),Z=$.activeTeamRunIds.size,W=Z>0?`There are still ${Z} 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 GJ(`System-delivered teammate async run updates:
525
+ ${J}`:J,X=Q?.continueConversation?await Z.agent.continue(j):await Z.agent.run(j);return this.emitEvent({type:I.TaskEnd,agentId:$,result:X}),this.recordProgressStep($,`Completed a delegated run (${X.iterations} iterations)`,Q?.taskId,!0),X}catch(W){let j=W instanceof Error?W:Error(String(W));if(this.emitEvent({type:I.TaskEnd,agentId:$,error:j,messages:Z.agent.getMessages()}),!OA(Z,j))this.appendMissionLog({agentId:$,taskId:Q?.taskId,kind:"error",summary:j.message});throw j}finally{if(Z.runningCount--,Z.runningCount<=0&&this.members.get($)?.status!=="stopped")Z.status="idle"}}startTeammateRun($,J,Q){let Z=`run_${String(++this.runCounter).padStart(5,"0")}`,W={id:Z,agentId:$,taskId:Q?.taskId,status:"queued",message:J,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(Z,W),this.runQueue.push(Z),this.emitEvent({type:I.RunQueued,run:{...W}}),this.dispatchQueuedRuns(),{...W}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let J=this.selectNextDispatchableQueuedRun();$=J.nextDelayedAttemptAt;let Q=J.index;if(Q<0){this.scheduleQueuedRunDispatch($);return}let[Z]=this.runQueue.splice(Q,1),W=Z?this.runs.get(Z):void 0;if(!W||W.status!=="queued")continue;this.executeQueuedRun(W)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,J=Number.NEGATIVE_INFINITY,Q,Z=Date.now();for(let W=0;W<this.runQueue.length;W++){let j=this.runs.get(this.runQueue[W]);if(!j||j.status!=="queued")continue;if(j.nextAttemptAt&&j.nextAttemptAt.getTime()>Z){if(!Q||j.nextAttemptAt<Q)Q=j.nextAttemptAt;continue}if(j.priority>J)J=j.priority,$=W}return{index:$,nextDelayedAttemptAt:Q}}scheduleQueuedRunDispatch($){if(!$)return;let J=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},J)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let J of this.runs.values())if(J.status==="running")$++;return $}async executeQueuedRun($){let J=$.currentActivity===TA;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:I.RunStarted,run:{...$}});let Q=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let Z=J?sN($):$.message,W=await this.routeToTeammate($.agentId,Z,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=W,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:I.RunCompleted,run:{...$}})}catch(Z){let W=Z instanceof Error?Z.message:String(Z??"Unknown error");$.error=W,$.endedAt=new Date;let j=this.members.get($.agentId);if(OA(j,Z))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:I.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:I.RunFailed,run:{...$}})}finally{clearInterval(Q),this.dispatchQueuedRuns()}}listRuns($){let J=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((Q)=>{if(!J&&!["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 J=this.runs.get($);return J?{...J}:void 0}async awaitRun($,J=250){let Q=this.runs.get($);if(!Q)throw Error(`Run "${$}" was not found`);while(Q.status==="queued"||Q.status==="running")await MA(J);return{...Q}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((J)=>["queued","running"].includes(J.status)))await MA($);return this.listRuns()}cancelRun($,J){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=J,Q.endedAt=new Date,Q.currentActivity="cancelled";let Z=this.runQueue.indexOf($);if(Z>=0)this.runQueue.splice(Z,1);return this.emitEvent({type:I.RunCancelled,run:{...Q},reason:J}),{...Q}}recoverActiveRuns($="runtime_recovered"){let J=[];for(let Q of this.runs.values()){if(!["queued","running"].includes(Q.status))continue;let Z=this.members.get(Q.agentId);if(!Z||Z.role!=="teammate"||!Z.agent){Q.status="interrupted",Q.error="teammate_unavailable_after_recovery",Q.endedAt=new Date,Q.currentActivity="interrupted",this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:Q.error});continue}let 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=TA,!this.runQueue.includes(Q.id))this.runQueue.push(Q.id);J.push({...Q}),this.emitEvent({type:I.RunQueued,run:{...Q}})}return this.dispatchQueuedRuns(),J}markStaleRunsInterrupted($="runtime_recovered"){let J=[];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",J.push({...Q}),this.emitEvent({type:I.RunInterrupted,run:{...Q},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),J}sendMessage($,J,Q,Z,W){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let j=this.members.get(J);if(!j)throw Error(`Unknown recipient "${J}"`);let X={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:J,subject:Q,body:Z,taskId:W,sentAt:new Date};if(this.mailbox.push(X),this.emitEvent({type:I.TeamMessage,message:{...X}}),j.role==="teammate"&&j.runningCount>0&&j.agent)j.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${Q}". Use the team_read_mailbox tool to read it at your convenience.`;return{...X}}broadcast($,J,Q,Z){let W=[];for(let j of this.members.values()){if(j.agentId===$)continue;if(j.role==="lead")continue;W.push(this.sendMessage($,j.agentId,J,Q,Z?.taskId))}return W}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let J={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(J);let Q=this.members.get($.agentId);if(Q)Q.lastMissionAt=Date.now(),Q.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:I.TeamMissionLog,entry:{...J}}),{...J}}createOutcome($){let J={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(J.id,J),this.emitEvent({type:I.OutcomeCreated,outcome:{...J}}),{...J}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let J=this.outcomes.get($.outcomeId);if(!J)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!J.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),J.status==="draft")J.status="in_review";return this.emitEvent({type:I.OutcomeFragmentAttached,fragment:{...Q}}),{...Q}}reviewOutcomeFragment($){let J=this.outcomeFragments.get($.fragmentId);if(!J)throw Error(`Fragment "${$.fragmentId}" was not found`);return J.status=$.approved?"reviewed":"rejected",J.reviewedBy=$.reviewedBy,J.reviewedAt=new Date,this.emitEvent({type:I.OutcomeFragmentReviewed,fragment:{...J}}),{...J}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((J)=>J.outcomeId===$).map((J)=>({...J}))}finalizeOutcome($){let J=this.outcomes.get($);if(!J)throw Error(`Outcome "${$}" was not found`);let Q=this.listOutcomeFragments($);for(let Z of J.requiredSections)if(!Q.some((j)=>j.section===Z&&j.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${Z}" is missing a reviewed fragment.`);return J.status="finalized",J.finalizedAt=new Date,this.emitEvent({type:I.OutcomeFinalized,outcome:{...J}}),{...J}}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(J){if(!rW(J))throw J}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[$,J]of this.members.entries())if(J.role==="teammate")this.members.delete($)}requireTask($){let J=this.tasks.get($);if(!J)throw Error(`Task "${$}" was not found`);return J}assertDependenciesResolved($){let J=this.getUnresolvedDependencies($);if(J.length>0)throw Error(`Task "${$.id}" is blocked by "${J[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((J)=>{let Q=this.tasks.get(J);return!Q||Q.status!=="completed"})}trackMeaningfulEvent($,J){if(this.recordRunActivityFromAgentEvent($,J),J.type==="iteration_end"&&J.hadToolCalls){this.recordProgressStep($,`Completed iteration ${J.iteration} with ${J.toolCallCount} tool call(s)`);return}if(J.type==="content_end"&&J.contentType==="tool"&&!J.error){this.recordProgressStep($,`Finished tool "${J.toolName??"unknown"}"`);return}if(J.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${J.iterations} iterations)`});return}if(J.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:J.error.message})}recordRunActivityFromAgentEvent($,J){let Q;switch(J.type){case"iteration_start":Q=`iteration_${J.iteration}_started`;break;case"content_start":if(J.contentType==="tool")Q=`running_tool_${J.toolName??"unknown"}`;break;case"content_end":if(J.contentType==="tool")Q=J.error?this.formatProgressErrorActivity(`tool_${J.toolName??"unknown"}_error`,J.error):`finished_tool_${J.toolName??"unknown"}`;break;case"done":Q="finalizing_response";break;case"error":Q=this.formatProgressErrorActivity("run_error",J.error.message);break;default:break}if(!Q)return;for(let Z of this.runs.values()){if(Z.agentId!==$||Z.status!=="running")continue;this.recordRunProgress(Z,Q)}}recordRunProgress($,J){let Q=new Date;$.heartbeatAt=Q,$.lastProgressAt=Q,$.lastProgressMessage=J,$.currentActivity=J,this.emitEvent({type:I.RunProgress,run:{...$},message:J})}formatProgressErrorActivity($,J){let Q=J.replace(/\s+/g," ").trim();if(Q.length===0)return $;let Z=Q.length>240?`${Q.slice(0,237).trimEnd()}...`:Q;return`${$}: ${Z}`}recordProgressStep($,J,Q,Z=!1){this.missionStepCounter++;let W=this.members.get($);if(!W)return;let j=this.missionStepCounter-W.lastMissionStep,X=Date.now()-W.lastMissionAt;if(!Z&&j<this.missionLogIntervalSteps&&X<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:Q,kind:"progress",summary:J})}buildMailboxNotification($){if($.length===0)return"";let J=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let Q of $)J.push(`--- Message from ${Q.fromAgentId} | subject: ${Q.subject} ---`),J.push(Q.body);return J.push("---"),J.join(`
526
+ `)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function MA($){return new Promise((J)=>setTimeout(J,$))}function l8($,J){let Q=0;for(let Z of $){if(!Z.startsWith(J))continue;let W=Number.parseInt(Z.slice(J.length),10);if(Number.isFinite(W))Q=Math.max(Q,W)}return Q}function nW($,J){switch(J.type){case"run_queued":case"run_started":$.activeTeamRunIds.add(J.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let Q;if(J.type==="run_failed")Q=J.run.error;else if(J.type==="run_cancelled"||J.type==="run_interrupted")Q=J.run.error??J.reason;$.activeTeamRunIds.delete(J.run.id),$.pendingTeamRunUpdates.push({runId:J.run.id,agentId:J.run.agentId,taskId:J.run.taskId,status:J.type.replace("run_",""),error:Q,iterations:J.run.result?.iterations}),YQ($);break}default:break}}async function aW($,J,Q){switch(J.type){case"run_progress":await Q("onTeamTaskProgress",$,J.run.agentId,J.message,{kind:J.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(J.event.type==="content_start"&&J.event.contentType==="text"&&typeof J.event.text==="string"){let Z=J.event.text.replace(/\s+/g," ").trim().slice(0,120);if(Z)await Q("onTeamTaskProgress",$,J.agentId,Z,{kind:"text"})}break;case"task_start":await Q("onTeamTaskStart",$,J.agentId,J.message);break;case"task_end":{if(J.error)await Q("onTeamTaskEnd",$,J.agentId,"failed",`[error] ${J.error.message}`,void 0,J.messages);else if(J.result?.finishReason==="aborted")await Q("onTeamTaskEnd",$,J.agentId,"cancelled","[done] aborted",J.result,J.result.messages);else await Q("onTeamTaskEnd",$,J.agentId,"completed",`[done] ${J.result?.finishReason??"completed"}`,J.result,J.result?.messages);break}default:break}}function sW($,J,Q,Z){if(!$.runtime.teamRuntime)return;let W=$.runtime.teamRuntime.getTeamName();Z({type:"team_progress",payload:{sessionId:J,teamName:W,lifecycle:d8({teamName:W,sessionId:J,event:Q}),summary:u8(W,$.runtime.teamRuntime.exportState())}})}function KJ($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function oW($,J){if($.aborting)return!1;if(!(J==="completed"||J==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&KJ($)}function YQ($){let J=$.teamRunWaiters.splice(0);for(let Q of J)Q()}async function tW($){while(!0){if($.aborting)return[];if($.pendingTeamRunUpdates.length>0){let J=[...$.pendingTeamRunUpdates];return $.pendingTeamRunUpdates.length=0,J}if($.activeTeamRunIds.size===0)return[];await new Promise((J)=>{$.teamRunWaiters.push(J)})}}function eW($,J){let Q=J.map((j)=>{let X=[`- ${j.runId} (${j.agentId}) -> ${j.status}`];if(j.taskId)X.push(` task=${j.taskId}`);if(typeof j.iterations==="number")X.push(` iterations=${j.iterations}`);if(j.error)X.push(` error=${j.error}`);return X.join("")}),Z=$.activeTeamRunIds.size,W=Z>0?`There are still ${Z} 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 GJ(`System-delivered teammate async run updates:
527
527
  ${Q.join(`
528
528
  `)}
529
529
 
530
- ${W}`,$.config.mode)}function GJ($,J){return oN($,J==="plan"?"plan":J==="yolo"?"yolo":"act")}var $3=4;class n1{adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor($,J={}){this.adapter=$;this.manifestStore=new d7($,J.messagesArtifactUploader,J.logger),this.teamChildren=new X9($,this.manifestStore,(Q,Z,W)=>this.toPersistedMessages(Q,Z,W),n1.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,J,Q){if(!$)return;return J?x5(J.messages,J,Q):I5($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,J){this.manifestStore.writeSessionManifest($,J)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let J=$.startedAt??e(),Q=$.sessionId.trim(),Z=Q.length>0?Q:`${Date.now()}_${eN(5)}`,W=this.manifestStore.artifacts.sessionMessagesPath(Z),j=this.manifestStore.artifacts.sessionManifestPath(Z),X=j6({metadata:$.metadata,prompt:$.prompt}),f={version:1,session_id:Z,source:$.source,pid:$.pid,started_at:J,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:X,messages_path:W};return await this.adapter.upsertSession({sessionId:Z,source:$.source,pid:$.pid,startedAt:J,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:f.prompt??null,metadata:K$(f.metadata),hookPath:"",messagesPath:W,updatedAt:e()}),this.manifestStore.initializeMessagesFile(Z,W,J),this.manifestStore.writeSessionManifest(j,f),{manifestPath:j,messagesPath:W,manifest:f}}async updateSessionStatus($,J,Q){let Z;if((await rY(()=>this.adapter.getSession($),async(j)=>{return Z=j0(J)?void 0:e(),this.adapter.updateSession({sessionId:$,status:J,endedAt:Z??null,exitCode:j0(J)?null:typeof Q==="number"?Q:null,expectedStatusLock:j.statusLock})},$3)).updated){if(J==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:Z}}return{updated:!1}}async updateSession($){for(let J=0;J<$3;J++){let Q=await this.adapter.getSession($.sessionId);if(!Q)return{updated:!1};let Z=Q.metadata??void 0,W=$.metadata!==void 0?K$($.metadata)??{}:K$(Z)??{},j=s$(typeof Z?.title==="string"?Z.title:void 0),X=$.title!==void 0?s$($.title):j??jW($.prompt);if(X)W.title=X;else delete W.title;let f=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:f?Object.keys(W).length>0?W:null:void 0,title:X,expectedStatusLock:Q.statusLock})).updated)continue;let{path:V,manifest:H}=this.manifestStore.readManifestFile($.sessionId);if(H){if($.prompt!==void 0)H.prompt=$.prompt??void 0;let B=$.metadata!==void 0?K$($.metadata)??{}:K$(H.metadata)??{};if(X)B.title=X;H.metadata=Object.keys(B).length>0?B:void 0,this.manifestStore.writeSessionManifest(V,H)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,J){return this.teamChildren.appendSubagentHookAudit(J),Promise.resolve()}persistSessionMessages($,J,Q){let Z=I5(J);return this.manifestStore.persistSessionMessages($,Z,Q)}applySubagentStatus($,J){return this.teamChildren.applySubagentStatus($,J)}applySubagentStatusBySessionId($,J){return this.teamChildren.applySubagentStatusBySessionId($,J)}applyStatusToRunningChildSessions($,J){return this.teamChildren.applyStatusToRunningChildSessions($,J)}onTeamTaskStart($,J,Q){return this.teamChildren.onTeamTaskStart($,J,Q)}onTeamTaskEnd($,J,Q,Z,W,j){return this.teamChildren.onTeamTaskEnd($,J,Q,Z,W,j)}onTeamTaskProgress($,J,Q,Z){return this.teamChildren.onTeamTaskProgress($,J,Q,Z)}handleSubAgentStart($,J){return this.teamChildren.handleSubAgentStart($,J)}handleSubAgentEnd($,J){return this.teamChildren.handleSubAgentEnd($,J)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(J){return typeof J==="object"&&J!==null&&"code"in J&&J.code==="EPERM"}}async reconcileDeadRunningSession($){if(j0($.status)===!1||this.isPidAlive($.pid))return $;let J=e(),Q=n1.STALE_REASON;for(let Z=0;Z<$3;Z++){let W=await this.adapter.getSession($.sessionId);if(!W)return;if(j0(W.status)===!1)return W;let j={...W.metadata??{},terminal_marker:Q,terminal_marker_at:J,terminal_marker_pid:W.pid,terminal_marker_source:n1.STALE_SOURCE},X=await this.adapter.updateSession({sessionId:W.sessionId,status:"failed",endedAt:J,exitCode:1,metadata:j,expectedStatusLock:W.statusLock});if(!X.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(W.sessionId,"failed");let f=pY(W,{status:"failed",endedAt:J,exitCode:1,metadata:j}),{path:Y}=this.manifestStore.readManifestFile(W.sessionId);return this.manifestStore.writeSessionManifest(Y,f),this.manifestStore.appendStaleSessionHookLog(J,W.sessionId,W.pid,Q,n1.STALE_SOURCE),{...W,status:"failed",endedAt:J,exitCode:1,metadata:j,statusLock:X.statusLock,updatedAt:J}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let J=Math.max(1,Math.floor($)),Q=Math.min(J*5,2000);return await this.reconcileDeadSessions(Q),(await this.adapter.listSessions({limit:Q})).slice(0,J).map((W)=>{let j=K$(W.metadata??void 0),X=this.manifestStore.readSessionManifest(W.sessionId),f=s$(typeof X?.metadata?.title==="string"?X.metadata.title:void 0),Y=f?{...j??{},title:f}:j;return{...W,metadata:Y}})}async reconcileDeadSessions($=2000){let J=Math.max(1,Math.floor($)),Q=(await Promise.all(["idle","running","pending"].map((W)=>this.adapter.listSessions({limit:J,status:W})))).flat(),Z=0;for(let W of Q){let j=await this.reconcileDeadRunningSession(W);if(j&&j.status!==W.status)Z++}return Z}async deleteSession($){let J=$.trim();if(!J)throw Error("session id is required");let Q=await this.adapter.getSession(J);if(!Q)return{deleted:!1};if(await this.adapter.deleteSession(J,!1),!Q.isSubagent){let Z=await this.adapter.listSessions({limit:2000,parentSessionId:J});await this.adapter.deleteSession(J,!0),await Promise.allSettled(Z.map(async(W)=>{await PW(W.cwd,W.sessionId),M6(W.messagesPath),M6(this.manifestStore.artifacts.sessionManifestPath(W.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(W.sessionId)}))}if(await PW(Q.cwd,J),M6(Q.messagesPath),M6(this.manifestStore.artifacts.sessionManifestPath(J,!1)),Q.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(J);else{let Z=new Set([this.manifestStore.artifacts.sessionArtifactsDir(J)]);for(let W of[Q.messagesPath])if(typeof W==="string"&&W.trim().length>0)Z.add(tN(W));for(let W of Z)this.manifestStore.artifacts.removeDir(W)}return{deleted:!0}}}function Q3(){return new Date().toISOString()}function SA($,J){let Q=`${$}.tmp`;Qw(Q,`${JSON.stringify(J,null,2)}
530
+ ${W}`,$.config.mode)}function GJ($,J){return oN($,J==="plan"?"plan":J==="yolo"?"yolo":"act")}var $3=4;class n1{adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor($,J={}){this.adapter=$;this.manifestStore=new dW($,J.messagesArtifactUploader,J.logger),this.teamChildren=new XQ($,this.manifestStore,(Q,Z,W)=>this.toPersistedMessages(Q,Z,W),n1.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,J,Q){if(!$)return;return J?x5(J.messages,J,Q):I5($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,J){this.manifestStore.writeSessionManifest($,J)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let J=$.startedAt??$0(),Q=$.sessionId.trim(),Z=Q.length>0?Q:`${Date.now()}_${eN(5)}`,W=this.manifestStore.artifacts.sessionMessagesPath(Z),j=this.manifestStore.artifacts.sessionManifestPath(Z),X=j6({metadata:$.metadata,prompt:$.prompt}),f={version:1,session_id:Z,source:$.source,pid:$.pid,started_at:J,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:X,messages_path:W};return await this.adapter.upsertSession({sessionId:Z,source:$.source,pid:$.pid,startedAt:J,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:f.prompt??null,metadata:K$(f.metadata),hookPath:"",messagesPath:W,updatedAt:$0()}),this.manifestStore.initializeMessagesFile(Z,W,J),this.manifestStore.writeSessionManifest(j,f),{manifestPath:j,messagesPath:W,manifest:f}}async updateSessionStatus($,J,Q){let Z;if((await rY(()=>this.adapter.getSession($),async(j)=>{return Z=X0(J)?void 0:$0(),this.adapter.updateSession({sessionId:$,status:J,endedAt:Z??null,exitCode:X0(J)?null:typeof Q==="number"?Q:null,expectedStatusLock:j.statusLock})},$3)).updated){if(J==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:Z}}return{updated:!1}}async updateSession($){for(let J=0;J<$3;J++){let Q=await this.adapter.getSession($.sessionId);if(!Q)return{updated:!1};let Z=Q.metadata??void 0,W=$.metadata!==void 0?K$($.metadata)??{}:K$(Z)??{},j=s$(typeof Z?.title==="string"?Z.title:void 0),X=$.title!==void 0?s$($.title):j??j7($.prompt);if(X)W.title=X;else delete W.title;let f=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:f?Object.keys(W).length>0?W:null:void 0,title:X,expectedStatusLock:Q.statusLock})).updated)continue;let{path:V,manifest:H}=this.manifestStore.readManifestFile($.sessionId);if(H){if($.prompt!==void 0)H.prompt=$.prompt??void 0;let B=$.metadata!==void 0?K$($.metadata)??{}:K$(H.metadata)??{};if(X)B.title=X;H.metadata=Object.keys(B).length>0?B:void 0,this.manifestStore.writeSessionManifest(V,H)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,J){return this.teamChildren.appendSubagentHookAudit(J),Promise.resolve()}persistSessionMessages($,J,Q){let Z=I5(J);return this.manifestStore.persistSessionMessages($,Z,Q)}applySubagentStatus($,J){return this.teamChildren.applySubagentStatus($,J)}applySubagentStatusBySessionId($,J){return this.teamChildren.applySubagentStatusBySessionId($,J)}applyStatusToRunningChildSessions($,J){return this.teamChildren.applyStatusToRunningChildSessions($,J)}onTeamTaskStart($,J,Q){return this.teamChildren.onTeamTaskStart($,J,Q)}onTeamTaskEnd($,J,Q,Z,W,j){return this.teamChildren.onTeamTaskEnd($,J,Q,Z,W,j)}onTeamTaskProgress($,J,Q,Z){return this.teamChildren.onTeamTaskProgress($,J,Q,Z)}handleSubAgentStart($,J){return this.teamChildren.handleSubAgentStart($,J)}handleSubAgentEnd($,J){return this.teamChildren.handleSubAgentEnd($,J)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(J){return typeof J==="object"&&J!==null&&"code"in J&&J.code==="EPERM"}}async reconcileDeadRunningSession($){if(X0($.status)===!1||this.isPidAlive($.pid))return $;let J=$0(),Q=n1.STALE_REASON;for(let Z=0;Z<$3;Z++){let W=await this.adapter.getSession($.sessionId);if(!W)return;if(X0(W.status)===!1)return W;let j={...W.metadata??{},terminal_marker:Q,terminal_marker_at:J,terminal_marker_pid:W.pid,terminal_marker_source:n1.STALE_SOURCE},X=await this.adapter.updateSession({sessionId:W.sessionId,status:"failed",endedAt:J,exitCode:1,metadata:j,expectedStatusLock:W.statusLock});if(!X.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(W.sessionId,"failed");let f=pY(W,{status:"failed",endedAt:J,exitCode:1,metadata:j}),{path:Y}=this.manifestStore.readManifestFile(W.sessionId);return this.manifestStore.writeSessionManifest(Y,f),this.manifestStore.appendStaleSessionHookLog(J,W.sessionId,W.pid,Q,n1.STALE_SOURCE),{...W,status:"failed",endedAt:J,exitCode:1,metadata:j,statusLock:X.statusLock,updatedAt:J}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let J=Math.max(1,Math.floor($)),Q=Math.min(J*5,2000);return await this.reconcileDeadSessions(Q),(await this.adapter.listSessions({limit:Q})).slice(0,J).map((W)=>{let j=K$(W.metadata??void 0),X=this.manifestStore.readSessionManifest(W.sessionId),f=s$(typeof X?.metadata?.title==="string"?X.metadata.title:void 0),Y=f?{...j??{},title:f}:j;return{...W,metadata:Y}})}async reconcileDeadSessions($=2000){let J=Math.max(1,Math.floor($)),Q=(await Promise.all(["idle","running","pending"].map((W)=>this.adapter.listSessions({limit:J,status:W})))).flat(),Z=0;for(let W of Q){let j=await this.reconcileDeadRunningSession(W);if(j&&j.status!==W.status)Z++}return Z}async deleteSession($){let J=$.trim();if(!J)throw Error("session id is required");let Q=await this.adapter.getSession(J);if(!Q)return{deleted:!1};if(await this.adapter.deleteSession(J,!1),!Q.isSubagent){let Z=await this.adapter.listSessions({limit:2000,parentSessionId:J});await this.adapter.deleteSession(J,!0),await Promise.allSettled(Z.map(async(W)=>{await P7(W.cwd,W.sessionId),M6(W.messagesPath),M6(this.manifestStore.artifacts.sessionManifestPath(W.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(W.sessionId)}))}if(await P7(Q.cwd,J),M6(Q.messagesPath),M6(this.manifestStore.artifacts.sessionManifestPath(J,!1)),Q.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(J);else{let Z=new Set([this.manifestStore.artifacts.sessionArtifactsDir(J)]);for(let W of[Q.messagesPath])if(typeof W==="string"&&W.trim().length>0)Z.add(tN(W));for(let W of Z)this.manifestStore.artifacts.removeDir(W)}return{deleted:!0}}}function Q3(){return new Date().toISOString()}function SA($,J){let Q=`${$}.tmp`;Qw(Q,`${JSON.stringify(J,null,2)}
531
531
  `,"utf8"),Jw(Q,$)}class CA{sessionsDirPath;constructor($=Zw()){this.sessionsDirPath=$}ensureSessionsDir(){if(!J3(this.sessionsDirPath))$w(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return wA(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return wA(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!J3($))return{version:1,sessions:{}};try{let J=JSON.parse(NA($,"utf8"));if(J?.version===1&&J.sessions)return J}catch{}return{version:1,sessions:{}}}writeIndex($){SA(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!J3($))return{version:1,nextId:1,requests:[]};try{let J=JSON.parse(NA($,"utf8"));if(J?.version===1&&typeof J.nextId==="number"&&Array.isArray(J.requests))return J}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){SA(this.spawnQueuePath(),$)}async upsertSession($){let J=this.readIndex();J.sessions[$.sessionId]=$,this.writeIndex(J)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((J)=>$.parentSessionId!==void 0?J.parentSessionId===$.parentSessionId:!0).filter((J)=>$.status!==void 0?J.status===$.status:!0).sort((J,Q)=>Q.startedAt.localeCompare(J.startedAt)).slice(0,$.limit)}async updateSession($){let J=this.readIndex(),Q=J.sessions[$.sessionId];if(!Q)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&Q.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:Q.statusLock};let Z=$.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:Z,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:Q.isSubagent,updatedAt:Q3()};if($.setRunning)W.status="running",W.endedAt=null,W.exitCode=null;return J.sessions[$.sessionId]=W,this.writeIndex(J),{updated:!0,statusLock:W.statusLock}}async deleteSession($,J){let Q=this.readIndex();if(!Q.sessions[$])return!1;if(delete Q.sessions[$],J){for(let W of Object.values(Q.sessions))if(W.parentSessionId===$)delete Q.sessions[W.sessionId]}return this.writeIndex(Q),!0}async enqueueSpawnRequest($){let J=this.readQueue();J.requests.push({id:J.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:Q3()}),J.nextId+=1,this.writeQueue(J)}async claimSpawnRequest($,J){let Q=this.readQueue(),Z=Q.requests.find((W)=>W.rootSessionId===$&&W.parentAgentId===J&&!W.consumedAt);if(!Z)return;return Z.consumedAt=Q3(),this.writeQueue(Q),Z.task}}class Z3 extends n1{constructor($,J={}){super(new CA($),J)}ensureSessionsDir(){return super.ensureSessionsDir()}}var bA={};w(bA,{CoreSessionService:()=>L1});import{existsSync as Ww,mkdirSync as jw}from"node:fs";import{resolveSessionDataDir as Xw}from"@cline/shared/storage";var W3=`
532
532
  session_id AS sessionId,
533
533
  source,
@@ -568,18 +568,18 @@ ${W}`,$.config.mode)}function GJ($,J){return oN($,J==="plan"?"plan":J==="yolo"?"
568
568
  SET status = 'running', ended_at = NULL, exit_code = NULL, updated_at = ?, status_lock = ?,
569
569
  parent_session_id = ?, parent_agent_id = ?, agent_id = ?, conversation_id = ?, is_subagent = 1,
570
570
  prompt = COALESCE(prompt, ?)
571
- WHERE session_id = ? AND status_lock = ?`,[e(),$.expectedStatusLock+1,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.prompt??null,$.sessionId,$.expectedStatusLock]).changes??0)>0,statusLock:$.expectedStatusLock+1}}let J=[],Q=[];if($.status!==void 0)J.push("status = ?"),Q.push($.status);if($.endedAt!==void 0)J.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)J.push("exit_code = ?"),Q.push($.exitCode);if($.prompt!==void 0)J.push("prompt = ?"),Q.push($.prompt??null);if($.metadata!==void 0)J.push("metadata_json = ?"),Q.push(X3($.metadata));if($.parentSessionId!==void 0)J.push("parent_session_id = ?"),Q.push($.parentSessionId??null);if($.parentAgentId!==void 0)J.push("parent_agent_id = ?"),Q.push($.parentAgentId??null);if($.agentId!==void 0)J.push("agent_id = ?"),Q.push($.agentId??null);if($.conversationId!==void 0)J.push("conversation_id = ?"),Q.push($.conversationId??null);if(J.length===0){let X=await this.getSession($.sessionId);return{updated:!!X,statusLock:X?.statusLock??0}}let Z=0;if($.expectedStatusLock!==void 0)Z=$.expectedStatusLock+1,J.push("status_lock = ?"),Q.push(Z);J.push("updated_at = ?"),Q.push(e());let W=`UPDATE sessions SET ${J.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)Z=(await this.getSession($.sessionId))?.statusLock??0;return{updated:!0,statusLock:Z}}async deleteSession($,J){let Q=this.store.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(J)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)
572
- VALUES (?, ?, ?, ?, ?, NULL)`,[$.rootSessionId,$.parentAgentId,$.task??null,$.systemPrompt??null,e()])}async claimSpawnRequest($,J){let Q=this.store.queryOne(`SELECT id, task FROM subagent_spawn_queue
571
+ 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 J=[],Q=[];if($.status!==void 0)J.push("status = ?"),Q.push($.status);if($.endedAt!==void 0)J.push("ended_at = ?"),Q.push($.endedAt);if($.exitCode!==void 0)J.push("exit_code = ?"),Q.push($.exitCode);if($.prompt!==void 0)J.push("prompt = ?"),Q.push($.prompt??null);if($.metadata!==void 0)J.push("metadata_json = ?"),Q.push(X3($.metadata));if($.parentSessionId!==void 0)J.push("parent_session_id = ?"),Q.push($.parentSessionId??null);if($.parentAgentId!==void 0)J.push("parent_agent_id = ?"),Q.push($.parentAgentId??null);if($.agentId!==void 0)J.push("agent_id = ?"),Q.push($.agentId??null);if($.conversationId!==void 0)J.push("conversation_id = ?"),Q.push($.conversationId??null);if(J.length===0){let X=await this.getSession($.sessionId);return{updated:!!X,statusLock:X?.statusLock??0}}let Z=0;if($.expectedStatusLock!==void 0)Z=$.expectedStatusLock+1,J.push("status_lock = ?"),Q.push(Z);J.push("updated_at = ?"),Q.push($0());let W=`UPDATE sessions SET ${J.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)Z=(await this.getSession($.sessionId))?.statusLock??0;return{updated:!0,statusLock:Z}}async deleteSession($,J){let Q=this.store.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(J)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)
572
+ VALUES (?, ?, ?, ?, ?, NULL)`,[$.rootSessionId,$.parentAgentId,$.task??null,$.systemPrompt??null,$0()])}async claimSpawnRequest($,J){let Q=this.store.queryOne(`SELECT id, task FROM subagent_spawn_queue
573
573
  WHERE root_session_id = ? AND parent_agent_id = ? AND consumed_at IS NULL
574
- ORDER BY id ASC LIMIT 1`,[$,J]);if(!Q||typeof Q.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[e(),Q.id]),Q.task??void 0}}class L1 extends n1{store;constructor($,J={}){super(new EA($,J.sessionArtifactsDir),J);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
574
+ ORDER BY id ASC LIMIT 1`,[$,J]);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 L1 extends n1{store;constructor($,J={}){super(new EA($,J.sessionArtifactsDir),J);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
575
575
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
576
576
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
577
577
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
578
578
  metadata_json, transcript_path, hook_path, messages_path, updated_at
579
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,e()])}}function fw($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let J=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(J==="local"||J==="hub"||J==="remote")return J;return"auto"}var FJ,DJ;function Yw($,J){if($!=="auto"&&$!=="hub")return;if(J.hub?.endpoint?.trim())return;eQ(J.hub?.workspaceRoot?.trim()||J.hub?.cwd?.trim()||process.cwd())}async function Vw($){await $.reconcileDeadSessions?.().catch(()=>{})}function IA($){try{let J=new U1;return J.init(),new L1(J,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(J){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),kA($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:J,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new Z3(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function hA($,J,Q){return new z1({sessionService:Q??$.sessionService??IA($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:J,fetch:$.fetch})}async function f3($){if(FJ)return FJ;if(DJ)return await DJ;return DJ=(async()=>{return FJ=IA($),await Vw(FJ),FJ})().finally(()=>{DJ=void 0}),await DJ}async function r8($){let J=b0($.distinctId);$.telemetry?.setDistinctId(J);let Q=fw($);if(Yw(Q,$),Q==="remote"){let Z=$.remote?.endpoint?.trim();if(!Z)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:Z}),new g8({endpoint:Z,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let Z=$.hub?.endpoint?.trim(),W=Z||await _2({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:Z||void 0}),new r1({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 Z=await XJ({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(Z){$.logger?.log("Using discovered local hub runtime host",{url:Z});let W=new r1({url:Z,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(j){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:j}),kA($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:j,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),hA($,J)}return hA($,J)}var vA={};w(vA,{NoOpFeatureFlagsProvider:()=>q2,FeatureFlagsService:()=>M2});import{existsSync as Hw,mkdirSync as Bw,readFileSync as Aw,writeFileSync as Kw}from"node:fs";import{dirname as Gw}from"node:path";import{FEATURE_FLAGS as gA,FeatureFlagDefaultValue as Y3}from"@cline/shared";var Fw=3600000,Dw=604800000,mA=1;class M2{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??Fw,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??Dw,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 J=$??this.context.userId??null,Q=Date.now();if(Q-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===J)return}let Z=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:J||null};try{let W=await this.provider.getAllFlagsAndPayloads({flagKeys:gA.length>0?gA:void 0,context:{...this.context,userId:J}});if(this.cacheInfo.userId!==J)return;this.cacheInfo.flagsPayload=W,this.rebuildCacheFromSnapshot(W),this.writePersistentCache()}catch(W){if(this.cacheInfo.userId!==J)return;throw this.cacheInfo=Z.updateTime?Z:{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((J)=>this.isFeatureFlagPayload(J));if(typeof $==="object")return Object.values($).every((J)=>this.isFeatureFlagPayload(J));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=Object.entries($).filter(([,Z])=>this.isFeatureFlagPayload(Z));if(J.length===0)return;let Q={};for(let[Z,W]of J)Q[Z]=W;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!Hw(this.cacheFilePath))return;let $=JSON.parse(Aw(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let J=$;if(J.version!==mA||typeof J.updatedAt!=="number"||!Number.isFinite(J.updatedAt)||Date.now()-J.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:J.updatedAt,userId:J.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(J.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(J.flagsPayload?.featureFlagPayloads)}}}catch($){this.logger?.error?.("Error reading SDK feature flags cache",{error:$});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;Bw(Gw(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),J={version:mA,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};Kw(this.cacheFilePath,`${JSON.stringify(J,null,2)}
580
- `,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let J=new Map;for(let Q of this.getReturnedFlagKeys($)){let Z=this.getFeatureFlag(Q);J.set(Q,Z??!1)}this.cache=J}getFeatureFlag($){try{let J=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],Z=J??Q??Y3[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==Z)this.telemetry?.capture({event:x.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return Z}catch(J){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:J}),Y3[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??Y3[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,J){if(process.env.IS_TEST==="true")this.cache.set($,J)}async dispose(){await this.provider.dispose()}}class q2{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}m8();class UJ{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,J,Q,Z,W,j,X,f,Y,V){this.clientName=J,this.runtimeAddress=Q,this.host=$,this.prepare=Z,this.capabilities=W,this.logger=j,this.telemetry=X,this.distinctId=f,this.featureFlags=Y,this.settings=iH($),this.pendingPrompts=nH($),this.automation=new dW(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=V?new $J({workspaceRoot:V.workspaceRoot??process.cwd(),specs:{cronSpecsDir:V.cronSpecsDir??V.cronDir,scope:JH(V.cronScope),workspaceRoot:V.workspaceRoot},runtimeHandlers:QH({host:$,getExtensionContext:()=>OQ({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:V.dbPath,logger:V.logger,pollIntervalMs:V.pollIntervalMs,claimLeaseSeconds:V.claimLeaseSeconds,globalMaxConcurrency:V.globalMaxConcurrency,watcherDebounceMs:V.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((H)=>{if(H.type!=="ended")return;this.disposeSessionBootstrap(H.payload.sessionId)})}static async create($={}){let J=b0($.distinctId),Q=z0($.capabilities),Z={...$,capabilities:Q,distinctId:J},W=await r8(Z),j=$H($.automation),X=$.featureFlags||new M2({provider:new q2,telemetry:$.telemetry,logger:$.logger,context:{distinctId:J,clientName:$.clientName}}),f=new UJ(W,$.clientName,W.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,J,X,j?{...j,logger:$.logger}:void 0);if(j&&j.autoStart!==!1)await f.automation.start();return f}async disposeSessionBootstrap($){let J=this.activeSessionBootstraps.get($);if(!J)return;this.activeSessionBootstraps.delete($),await Promise.resolve(J.dispose?.())}async start($){let J=sH($),Q=await this.prepare?.(J);try{let Z=Q?await Q.applyToStartSessionInput(J):J,W=await this.host.startSession(Z7(Z,{defaultCapabilities:this.capabilities,withExtensionContext:(j)=>OQ({automationService:this.automationService,automation:this.automation,context:j,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 oH({input:Z,sessionId:W.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),W}catch(Z){throw await Promise.resolve(Q?.dispose?.()),Z}}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 J=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(J.map((Q)=>this.disposeSessionBootstrap(Q)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await rQ(this.host,$);list=async($=200,J={})=>await this.listHistory({...J,limit:$});delete=async($)=>{let J=await this.host.deleteSession($);if(J)await this.disposeSessionBootstrap($);return J};update=(...$)=>this.host.updateSession(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let J=$.start?Z7($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>OQ({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:J})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,J){return this.host.subscribe($,J)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}var uA={};w(uA,{resolvePluginSkillDirectoriesFromPaths:()=>$2,resolvePluginConfigSearchPaths:()=>B6,resolveAndLoadAgentPlugins:()=>K8,resolveAgentPluginPaths:()=>e$,loadAgentPluginsFromPathsWithDiagnostics:()=>t$,loadAgentPluginsFromPaths:()=>m5,loadAgentPluginFromPath:()=>V6,discoverPluginModulePaths:()=>A6});var pA={};w(pA,{toHookConfigFileName:()=>F6,runSubprocessEvent:()=>i8,runHook:()=>a8,resolveHooksConfigSearchPaths:()=>K6,parseHookEventPayload:()=>n8,mergeAgentHooks:()=>W2,listHookConfigFiles:()=>D$,createSubprocessHooks:()=>B9,createHookConfigFileHooks:()=>D6,createHookConfigFileExtension:()=>U8,createHookAuditHooks:()=>D8,createAgentHooksExtension:()=>G8,HookEventPayloadSchema:()=>H9,HookEventNameSchema:()=>V9,HookConfigFileName:()=>F8,HOOK_CONFIG_FILE_EVENT_MAP:()=>G6,HOOKS_CONFIG_DIRECTORY_NAME:()=>p5});import{HookEventNameSchema as V9,HookEventPayloadSchema as H9,parseHookEventPayload as n8,resolveHookSessionContext as Tw}from"@cline/shared";import{z as P2}from"zod";import{spawn as Uw}from"node:child_process";import{augmentNodeCommandForDebug as Rw,withResolvedClineBuildEnv as Lw}from"@cline/shared";function zw($){let J=$.trim();if(!J)return{};let Z=J.split(`
581
- `).map((j)=>j.trim()).filter(Boolean).filter((j)=>j.startsWith("HOOK_CONTROL\t")).map((j)=>j.slice(13)),W=Z.length>0?Z[Z.length-1]:J;try{return{parsedJson:JSON.parse(W)}}catch(j){return{parseError:j instanceof Error?j.message:"Failed to parse subprocess stdout JSON"}}}function _w($,J){let Q=$ instanceof Error?$:Error(String($)),Z=Q,W=J.join(" ");if(Z.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 Ow($,J){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((Z,W)=>{let j=(X)=>{Q.off("error",j);let f=X.code;if(f==="EPIPE"||f==="ERR_STREAM_DESTROYED"){Z();return}W(X)};Q.once("error",j),Q.end(J,(X)=>{if(Q.off("error",j),X){let f=X.code;if(f==="EPIPE"||f==="ERR_STREAM_DESTROYED"){Z();return}W(X);return}Z()})})}async function i8($,J){let Q=Rw(J.command,{env:J.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let Z=!!J.detached,W=Uw(Q[0],Q.slice(1),{cwd:J.cwd,env:Lw(J.env),stdio:Z?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Z,windowsHide:!0}),j=new Promise((A)=>{W.once("spawn",()=>{try{J.onSpawn?.({command:Q,pid:W.pid??void 0,detached:Z})}catch{}A()})}),X=new Promise((A,K)=>{W.once("error",(G)=>{K(_w(G,Q))})});if(await Ow(W,JSON.stringify($)),Z){await Promise.race([j,X]),W.unref();return}if(!W.stdout||!W.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let f="",Y="",V=!1,H;W.stdout.on("data",(A)=>{f+=A.toString()}),W.stderr.on("data",(A)=>{Y+=A.toString()});let B=new Promise((A)=>{if((J.timeoutMs??0)>0)H=setTimeout(()=>{V=!0,W.kill("SIGKILL")},J.timeoutMs);W.once("close",(K)=>{if(H)clearTimeout(H);let{parsedJson:G,parseError:R}=zw(f);A({exitCode:K,stdout:f,stderr:Y,parsedJson:G,parseError:R,timedOut:V})})});return await Promise.race([B,X])}var Mw=P2.object({contextModification:P2.string().optional(),cancel:P2.boolean().optional(),review:P2.boolean().optional(),errorMessage:P2.string().optional(),context:P2.string().optional(),overrideInput:P2.unknown().optional()}).passthrough();var qw=["agent","hook"];async function a8($,J={}){let Q=J.command??qw;return await i8($,{command:Q,cwd:J.cwd,env:J.env,detached:J.detached,timeoutMs:J.timeoutMs,onSpawn:J.onSpawn})}function lA($){return $ instanceof Error?$:Error(String($))}function Pw($){if(!$||typeof $!=="object")return;let J=Mw.safeParse($);if(!J.success)return;let Q=J.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 dA($){if(!$||typeof $!=="object")return{};let J={};for(let[Q,Z]of Object.entries($))if(typeof Z==="string")J[Q]=Z;else J[Q]=JSON.stringify(Z);return J}function a1($,J,Q){let Z=Q.env??process.env,W=Z.CLINE_USER_ID?.trim()||Z.USER?.trim()||"unknown",j=Q.cwd||process.cwd();return{clineVersion:Z.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:J.conversationId,sessionContext:Tw(Q.sessionContext,{hookName:$,conversationId:J.conversationId,agentId:J.agentId,parentAgentId:J.parentAgentId}),workspaceRoots:j?[j]:[],workspaceInfo:Q.workspaceInfo,userId:W,agent_id:J.agentId,parent_agent_id:J.parentAgentId}}function Nw($){return{name:$.name,message:$.message,stack:$.stack}}function ww($){let J=String($??"").toLowerCase();return J.includes("cancel")||J.includes("abort")||J.includes("interrupt")}function Sw($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function Cw($){return $.filter((J)=>J.type==="text"&&typeof J.text==="string").map((J)=>J.text).join("")}function yw($){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 Ew($){if(!$)return;let J={};if($.cancel===!0)J.stop=!0;if($.overrideInput!==void 0)J.input=$.overrideInput;return Object.keys(J).length>0?J:void 0}async function N2($,J){try{let Q=await a8($,{command:J.command,cwd:J.cwd,env:J.env,detached:!0,onSpawn:J.onSpawn});J.onDispatch?.({payload:$,result:Q,detached:!0})}catch(Q){J.onDispatchError?.(lA(Q),$)}}function B9($={}){return{hooks:{beforeRun:async(f)=>{let Y=Sw(f);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...a1("agent_resume",Y,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await N2(H,$)}else{let H={...a1("agent_start",Y,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await N2(H,$)}return},beforeTool:async(f)=>{let Y={agentId:f.snapshot.agentId,conversationId:f.snapshot.conversationId??f.snapshot.runId??f.snapshot.agentId,parentAgentId:f.snapshot.parentAgentId??null},V={...a1("tool_call",Y,$),hookName:"tool_call",iteration:f.snapshot.iteration,tool_call:{id:f.toolCall.toolCallId,name:f.toolCall.toolName,input:f.input},preToolUse:{toolName:f.toolCall.toolName,parameters:dA(f.input)}};try{let H=await a8(V,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:V,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 Ew(Pw(H?.parsedJson))}catch(H){$.onDispatchError?.(lA(H),V);return}},afterTool:async(f)=>{let Y=yw(f),V={agentId:f.snapshot.agentId,conversationId:f.snapshot.conversationId??f.snapshot.runId??f.snapshot.agentId,parentAgentId:f.snapshot.parentAgentId??null},H={...a1("tool_result",V,$),hookName:"tool_result",iteration:f.snapshot.iteration,tool_result:Y,postToolUse:{toolName:Y.name,parameters:dA(Y.input),result:typeof Y.output==="string"?Y.output:JSON.stringify(Y.output),success:!Y.error,executionTimeMs:Y.durationMs}};await N2(H,$);return},afterRun:async({snapshot:f,result:Y})=>{let V={agentId:f.agentId,conversationId:f.conversationId??f.runId??f.agentId,parentAgentId:f.parentAgentId??null};if(Y.status==="completed"){let A={...a1("agent_end",V,$),hookName:"agent_end",iteration:Y.iterations,turn:{outputText:Y.outputText,status:Y.status},taskComplete:{taskMetadata:{}}};await N2(A,$);return}let H=Y.status==="aborted"||ww(Y.error?.message)?"agent_abort":"agent_error",B=H==="agent_error"?{...a1(H,V,$),hookName:H,iteration:Y.iterations,error:Nw(Y.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...a1(H,V,$),hookName:H,reason:Y.error?.message,taskCancel:{taskMetadata:{}}};await N2(B,$)},onEvent:async(f)=>{if(f.type!=="message-added"||f.message.role!=="user")return;let Y={agentId:f.snapshot.agentId,conversationId:f.snapshot.conversationId??f.snapshot.runId??f.snapshot.agentId,parentAgentId:f.snapshot.parentAgentId??null},V={...a1("prompt_submit",Y,$),hookName:"prompt_submit",userPromptSubmit:{prompt:Cw(f.message.content),attachments:[]}};await N2(V,$)}},shutdown:async({agentId:f,conversationId:Y,parentAgentId:V,reason:H})=>{let B={...a1("session_shutdown",{agentId:f,conversationId:Y,parentAgentId:V},$),hookName:"session_shutdown",reason:H};await N2(B,$)}}}var $G={};w($G,{writeHubDiscovery:()=>aQ,withHubStartupLock:()=>sQ,verifyHubConnection:()=>G1,truncateNotificationBody:()=>_J,toHubStatusUrl:()=>S7,toHubHealthUrl:()=>oQ,stopLocalHubServerGracefully:()=>c7,startHubWebSocketServer:()=>C2,startHubServer:()=>tK,spawnDetachedHubServerWithRetry:()=>k8,spawnDetachedHubServer:()=>k7,sendHubCommand:()=>oA,restartLocalHubIfIdleAfterStartupTimeout:()=>Q9,resolveWorkspaceHubOwnerContext:()=>IB,resolveSharedHubOwnerContext:()=>E0,resolveProductionHubOwnerContext:()=>n0,resolveHubUrl:()=>K3,resolveHubOwnerContext:()=>l1,resolveHubEndpointOptions:()=>i0,resolveHubBuildId:()=>nQ,resolveDefaultHubPort:()=>h8,resolveDefaultHubPathname:()=>h7,resolveDefaultHubHost:()=>b7,resolveCompatibleLocalHubUrl:()=>XJ,resolveClineDir:()=>EB,resolveClineDataDir:()=>R2,requestHubShutdown:()=>jJ,rememberRecoverableLocalHubUrl:()=>P$,readHubDiscovery:()=>G0,readBearerToken:()=>_9,probeHubServer:()=>p1,probeHubConnection:()=>sA,prewarmDetachedHubServer:()=>eQ,normalizeHubWebSocketUrl:()=>N$,isHubReconnectableTransportError:()=>m7,isHubCommandTimeoutError:()=>J9,isDiscoveryFilePresent:()=>hB,ensureHubWebSocketServer:()=>O9,ensureHubServer:()=>eK,ensureDetachedHubServer:()=>uB,ensureCompatibleLocalHubUrl:()=>_2,createLocalHubScheduleRuntimeHandlers:()=>T9,createInMemoryHubOwnerContext:()=>bB,createHubServerUrl:()=>j1,createHubAuthToken:()=>iQ,createConfiguredTelemetryService:()=>s1,createConfiguredTelemetryHandle:()=>$4,connectToHub:()=>F9,clearHubDiscovery:()=>y0,NodeHubClient:()=>X1,NativeHubTransportAdapter:()=>PJ,HubUIClient:()=>D3,HubTransportError:()=>q0,HubSessionClient:()=>F3,HubServerTransport:()=>Q4,HubScheduleService:()=>o8,HubScheduleCommandService:()=>s8,HubCommandError:()=>I8,DEFAULT_HUB_PORT:()=>y7,DEFAULT_HUB_PATHNAME:()=>E7,DEFAULT_HUB_HOST:()=>C7,BrowserWebSocketHubAdapter:()=>qJ});import{createSessionId as bw}from"@cline/shared";function a0($,J){return{version:$.version,requestId:$.requestId,ok:!0,payload:J}}function rA($,J,Q){return{version:$.version,requestId:$.requestId??bw("hubreq_"),ok:!1,error:{code:J,message:Q}}}class s8{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return a0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return a0($,{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 a0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return a0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return a0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return a0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return a0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return a0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return a0($,{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 a0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return a0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return a0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return rA($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(J){return rA($,"schedule_command_failed",J instanceof Error?J.message:String(J))}}toCreateInput($){let J=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:J}}toUpdateInput($){let J=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:J}}}function K9($){return $?new Date($).getTime():void 0}function hw($){let J=$.metadata?{...$.metadata}:void 0;if(J)delete J.__hubScheduleCreatedBy,delete J.__hubScheduleCwd,delete J.__hubRuntimeOptions;return J}function A9($){let J=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof J?.__hubScheduleCwd==="string"?J.__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:K9($.nextRunAt),lastRunAt:K9($.lastRunAt),createdBy:typeof J?.__hubScheduleCreatedBy==="string"?J.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:J?.__hubRuntimeOptions&&typeof J.__hubRuntimeOptions==="object"&&!Array.isArray(J.__hubRuntimeOptions)?J.__hubRuntimeOptions:void 0,metadata:hw($)}}function kw($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function V3($,J){return{executionId:$.runId,scheduleId:J,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:K9($.startedAt),endedAt:K9($.completedAt),status:kw($.status),errorMessage:$.error}}class o8{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new e6({dbPath:$.dbPath}),this.materializer=new n6({store:this.store}),this.runner=new a6({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(A7($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return A9(this.store.createHubSchedule($))}getSchedule($){let J=this.store.getHubSchedule($);return J?A9(J):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((J)=>A9(J))}updateSchedule($,J){if(J.cronPattern!==void 0)A7(J.cronPattern);let Q=this.store.getHubSchedule($);if(!Q)return;let Z=J.workspaceRoot!==void 0?J.workspaceRoot.trim():Q.workspaceRoot;if((J.enabled??Q.enabled)&&!Z)throw Error("workspaceRoot is required for enabled schedules");let j=this.store.updateHubSchedule($,{...J,scheduleId:$});return j?A9(j):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let J=this.store.enqueueHubScheduleRun($,"manual");if(!J)return;await this.runner.tick();let Q=this.store.getRun(J.runId)??J;return V3(Q,$)}triggerScheduleNowDetached($){let J=this.store.enqueueHubScheduleRun($,"manual");if(!J)return;return this.runner.tick().catch(()=>{return}),V3(J,$)}listScheduleExecutions($){let J=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:J?.specId,limit:$.limit};return this.store.listRuns(Q).map((W)=>{let j=J??this.store.getSpec(W.specId);if(!j||j.source!=="hub-schedule")return;return V3(W,j.externalId)}).filter((W)=>{if(!W)return!1;return!$.status||W.status===$.status})}getScheduleStats($){let J=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(J.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,Z=0,W=0,j;for(let X of J){if(X.status==="success"||X.status==="completed")Q+=1;if(!j&&X.status!=="success"&&X.status!=="completed")j=X;if(X.startedAt&&X.endedAt)W+=X.endedAt-X.startedAt,Z+=1}return{totalRuns:J.length,successRate:Q/J.length,avgDurationSeconds:Z>0?W/Z/1000:0,lastFailure:j}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let J=this.store.getSpec($.specId);if(!J||J.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:J.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:J.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+J.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let J={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(J).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,Z)=>String(Q.nextRunAt).localeCompare(String(Z.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:Z})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:Z}))}}G9();import{resolveClineBuildEnv as WS}from"@cline/shared";function jS($,J){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 ${J} (${Q} event before socket open).`:`Failed to connect to hub at ${J}.`)}var XS="cline-hub-auth.";function fS($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function YS($,J){let Q=new URL($),Z=new URL(J);return Q.search="",Q.hash="",Z.search="",Z.hash="",Q.toString()===Z.toString()}function aA(){return WS()==="production"?n0():E0()}async function VS($){let J=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),J)return J;let Q=aA(),Z=await G0(Q.discoveryPath);if(Z?.url&&YS($.toString(),Z.url))return Z.authToken;return}async function K3($={}){let J=i0($);if(!fS($)){let Q=aA(),Z=await G0(Q.discoveryPath);if(Z?.url)return Z.url}return j1(J.host,J.port,J.pathname)}async function F9($){return await new Promise((J,Q)=>{(async()=>{let Z=new URL($),W=await VS(Z);Z.hash="";let j=new WebSocket(Z.toString(),W?[`${XS}${W}`]:void 0),X=new Map,f=0;j.addEventListener("open",()=>{J({send(Y){let V=Y.requestId??`hub-client-${++f}`;return new Promise((H,B)=>{X.set(V,{resolve:H,reject:B});let A={kind:"command",envelope:{...Y,requestId:V}};j.send(JSON.stringify(A))})},close(){j.close()}})}),j.addEventListener("message",(Y)=>{let V=JSON.parse(String(Y.data));if(V.kind==="reply"&&V.envelope.requestId){let H=X.get(V.envelope.requestId);if(H)X.delete(V.envelope.requestId),H.resolve(V.envelope)}}),j.addEventListener("close",()=>{for(let Y of X.values())Y.reject(Error("Hub connection closed"));X.clear()}),j.addEventListener("error",(Y)=>{Q(jS(Y,$))})})().catch(Q)})}async function sA($){try{return(await F9($)).close(),!0}catch{return!1}}async function oA($,J){let Q=await K3($),Z=await F9(Q);try{return await Z.send({version:J.version??"v1",clientId:J.clientId??"hub-client",...J})}finally{Z.close()}}function G3($){return $?JSON.parse(JSON.stringify($)):{}}function D9($){let J=$?.session&&typeof $.session==="object"?$.session:void 0;if(!J)return;let Q=J.metadata&&typeof J.metadata==="object"?G3(J.metadata):void 0;return{sessionId:typeof J.sessionId==="string"?J.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function tA($,J){return $.error?.message??`hub command failed: ${J}`}function HS($){let J=G3($);if(typeof J.error==="string"&&J.error.trim())return{...J,error:J.error.trim()};let Q=J.result&&typeof J.result==="object"?J.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...J,error:Q.text.trim()};let Z=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof Z?.message==="string"&&Z.message.trim())return{...J,error:Z.message.trim()};return J}function eA($){let J=$?.sessionId;return typeof J==="string"&&J.trim()?J.trim():void 0}function BS($){let J=$?.checkpoint;if(!J||typeof J!=="object"||Array.isArray(J))throw Error("hub checkpoint restore returned no checkpoint");let Q=J;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 AS($){let J=G3($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||eA(J)||"",eventType:"schedule.execution.completed",payload:J};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||eA(J)||"",eventType:"schedule.execution.failed",payload:J};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:J};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:J};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:J};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:J};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:J};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:J};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:J};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:J};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:HS($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:J};default:return}}class F3{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new X1({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 J=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=D9(J.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($,J,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:J.prompt,mode:J.config.mode,attachments:J.attachments,delivery:J.delivery,timeoutSeconds:J.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 J;try{J=await this.client.command("session.get",void 0,$)}catch(Q){if(d1(Q))return;throw Q}return D9(J.payload)}async readMessages($){let J=$.trim();if(!J)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:J},J);if(!Q.ok)throw Error(tA(Q,"session.messages"));let Z=Q.payload?.messages;return Array.isArray(Z)?Z:[]}async restore($){let J=$.sessionId.trim();if(!J)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 Z=$.config,W=await this.client.command("session.restore",{sessionId:J,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Z?{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,sessionConfig:{providerId:Z.provider,modelId:Z.model,apiKey:Z.apiKey,cwd:Z.cwd??Z.workspaceRoot,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:Z.mode??"act",rules:Z.rules,maxIterations:Z.maxIterations,enableTools:Z.enableTools,enableSpawnAgent:Z.enableSpawn!==!1,enableAgentTeams:Z.enableTeams!==!1,disableMcpSettingsTools:Z.disableMcpSettingsTools,missionLogIntervalSteps:Z.missionStepInterval,missionLogIntervalMs:Z.missionTimeIntervalMs},metadata:{source:Z.source??"cli",provider:Z.provider,model:Z.model,enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams,prompt:void 0,interactive:Z.interactive!==!1},runtimeOptions:{mode:Z.mode,systemPrompt:Z.systemPrompt,maxIterations:Z.maxIterations,enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams,autoApproveTools:Z.autoApproveTools,configExtensions:Z.configExtensions},modelSelection:{provider:Z.provider,model:Z.model,apiKey:Z.apiKey},toolPolicies:Z.toolPolicies}:{}},J);if(!W.ok)throw Error(tA(W,"session.restore"));let j=D9(W.payload);if(Q&&!j?.sessionId)throw Error("hub checkpoint restore returned no session id");let X=Array.isArray(W.payload?.messages)?W.payload.messages:void 0,f=BS(W.payload);return{sessionId:j?.sessionId,startResult:j?.sessionId?{sessionId:j.sessionId,manifestPath:"",messagesPath:j.messagesPath??""}:void 0,...X?{messages:X}:{},checkpoint:f}}async listSessions($){await this.ensureMetadataApplied();let J=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(J.payload?.sessions)?J.payload?.sessions:[]).map((Z)=>D9({session:Z})).filter((Z)=>Boolean(Z?.sessionId))}async deleteSession($,J=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:J})).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($,J){let Q=new Set(($.sessionIds??[]).map((W)=>W.trim()).filter(Boolean)),Z=this.client.subscribe((W)=>{let j=AS(W);if(!j)return;if(Q.size>0&&!Q.has(j.sessionId))return;J.onEvent?.(j)});return this.ensureMetadataApplied().catch((W)=>{J.onError?.(W instanceof Error?W:Error(String(W)))}),Z}streamTeamProgress($,J){let Q=this.client.subscribe((Z)=>{if(Z.event!=="team.progress"||!Z.payload)return;J.onProjection?.(Z.payload)});return this.ensureMetadataApplied().catch((Z)=>{J.onError?.(Z instanceof Error?Z:Error(String(Z)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let J=await this.client.command("schedule.list");return Array.isArray(J.payload?.schedules)?J.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,J){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...J})).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($,J){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:J});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 J=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(J.payload?.upcoming)?J.payload?.upcoming:[]}}class D3{client;constructor($){this.client=new X1({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 J=await this.client.command("session.list",{limit:$});return Array.isArray(J.payload?.sessions)?J.payload.sessions:[]}subscribeUI($){return this.client.subscribe((J)=>{switch(J.event){case"ui.notify":$.onNotify?.(J.payload);break;case"ui.show_window":$.onShowWindow?.(J.payload);break;case"hub.client.registered":$.onClientRegistered?.(J.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(J.payload??{});break;case"session.created":$.onSessionCreated?.(J.payload??{});break;case"session.updated":$.onSessionUpdated?.(J.payload??{});break;case"session.detached":$.onSessionDetached?.(J.payload??{});break}})}}import{resolveClineBuildEnv as sK}from"@cline/shared";function KS($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
582
- `).trim()||void 0}var $K=120,U3="...";function _J($){let J=$.trim();if(!J)return"";if(Buffer.byteLength(J,"utf8")<=$K)return J;let Q=$K-Buffer.byteLength(U3,"utf8");if(Q<=0)return U3;let Z="";for(let W of J){if(Buffer.byteLength(Z+W,"utf8")>Q)break;Z+=W}return`${Z}${U3}`}async function JK($){let J=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,W=[...await q$(Q)].reverse().find((Y)=>Y.role==="assistant"),j=W?KS(W.content):void 0,X=$?.workspaceRoot?.trim()||"workspace",f=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():X;return{title:`Task completed (${J})`,body:_J(j&&j.length>0?j:f.length>0?f:X),severity:"info"}}import{captureSdkError as z9,createSessionId as rS}from"@cline/shared";import{createSessionId as US}from"@cline/shared";import{createSessionId as DS}from"@cline/shared";function GS($){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 FS($){let J=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())J.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())J.parentAgentId=$.parentAgentId;if($.agentId?.trim())J.agentId=$.agentId;if($.conversationId?.trim())J.conversationId=$.conversationId;if($.messagesPath?.trim())J.messagesPath=$.messagesPath;if($.prompt?.trim())J.prompt=$.prompt;if($.provider?.trim())J.provider=$.provider;if($.model?.trim())J.model=$.model;if($.source?.trim())J.source=$.source;if(typeof $.pid==="number")J.pid=$.pid;return Object.keys(J).length>0?J:void 0}function U9($,J,Q,Z){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:J?.createdByClientId??"hub",status:GS($.status),participants:J?[...J.participants.values()]:[],metadata:FS($),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}}:{},...Z?{aggregateUsage:{...Z}}:{}}}function l($,J){return{version:$.version,requestId:$.requestId,ok:!0,...J!==void 0?{payload:J}:{}}}function v($,J,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:J,message:Q}}}function R9($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function h0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function w2($,J,Q){return{version:"v1",event:$,eventId:DS("hevt_"),sessionId:Q,timestamp:Date.now(),payload:J}}async function s0($,J){let Q=await $.sessionHost.getSession(J);if(!Q)return;let Z=await $.sessionHost.getAccumulatedUsage?.(J);return U9(Q,$.sessionState.get(J),Z?.usage,Z?.aggregateUsage)}async function o0($,J){let Q=await $.sessionHost.getSession(J);if(!Q)return;let[Z,W]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(J):[],$.sessionHost.getAccumulatedUsage?.(J)]);return F1({session:Q,messages:Z,usage:W?.usage,aggregateUsage:W?.aggregateUsage})}function L9($,J,Q,Z,W={}){let j=$.sessionState.get(J);if(j){if(W.interactive!==void 0)j.interactive=W.interactive;if(!j.participants.has(Q))j.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:Z});return j}let X={createdByClientId:Q,interactive:W.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:Z}]])};return $.sessionState.set(J,X),X}async function R3($,J){let Q=US("approval_"),Z=J.sessionId;if($.sessionState.get(Z)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((j)=>{$.pendingApprovals.set(Q,{sessionId:Z,resolve:j}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:J.sessionId,agentId:J.agentId,conversationId:J.conversationId,iteration:J.iteration,toolCallId:J.toolCallId,toolName:J.toolName,inputJson:JSON.stringify(J.input??null),policy:J.policy},Z))})}function L3($,J,Q){let Z=$.pendingApprovals.get(J);if(!Z)return;return $.pendingApprovals.delete(J),Z.resolve(Q),{sessionId:Z.sessionId}}function z3($,J,Q){let Z=0;for(let[W,j]of[...$.pendingApprovals.entries()]){if(!J({approvalId:W,sessionId:j.sessionId}))continue;$.pendingApprovals.delete(W),j.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:W,approved:!1,cancelled:!0,reason:Q},j.sessionId)),Z+=1}return Z}async function QK($,J){let Q=typeof J.payload?.approvalId==="string"?J.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return v(J,"approval_not_found",`Unknown approval: ${Q}`);let W=typeof J.payload?.reason==="string"?J.payload.reason:J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)&&typeof J.payload.payload.reason==="string"?J.payload.payload.reason:void 0,j=J.payload?.approved===!0,X=L3($,Q,{approved:j,reason:W});if(!X)return v(J,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:j,reason:W},X.sessionId)),l(J,{approvalId:Q,approved:j})}import{createSessionId as zS}from"@cline/shared";function RS($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var ZK={debug:10,info:20,warn:30,error:40,silent:50};function LS(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function c($,J,Q={}){if(ZK[$]<ZK[LS()])return;let Z=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:J,...Object.fromEntries(Object.entries(Q).map(([W,j])=>[W,RS(j)]).filter(([,W])=>W!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${Z}`);return}console.log(`[hub] ${Z}`)}function _3($,J){let Q=J instanceof Error?J.stack||J.message:String(J);c("error",$,{error:Q})}async function WK($,J,Q,Z,W,j){let X=zS("capreq_"),f=performance.now();return c("info","capability.request.start",{requestId:X,sessionId:J,capabilityName:Q,targetClientId:W}),await new Promise((Y,V)=>{$.pendingCapabilityRequests.set(X,{sessionId:J,targetClientId:W,capabilityName:Q,onProgress:j,resolve:(H)=>{if(c(H.ok?"info":"warn","capability.request.end",{requestId:X,sessionId:J,capabilityName:Q,targetClientId:W,ok:H.ok,error:H.error,durationMs:Math.round(performance.now()-f)}),!H.ok){V(Error(H.error||`Capability ${Q} was rejected by ${W}.`));return}Y(H.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:X,targetClientId:W,capabilityName:Q,payload:Z},J)),c("info","capability.request.published",{requestId:X,sessionId:J,capabilityName:Q,targetClientId:W})})}function jK($,J){let Q=typeof J.payload?.requestId==="string"?J.payload.requestId.trim():"",Z=$.pendingCapabilityRequests.get(Q);if(!Z)return v(J,"capability_not_found",`Unknown capability request: ${Q}`);if((J.clientId?.trim()||"")!==Z.targetClientId)return v(J,"capability_wrong_client",`Capability request ${Q} is owned by ${Z.targetClientId}`);if(J.sessionId?.trim()&&J.sessionId.trim()!==Z.sessionId)return v(J,"capability_wrong_session",`Capability request ${Q} belongs to session ${Z.sessionId}`);let j=J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)?J.payload.payload:{};return Z.onProgress?.(j),l(J,{requestId:Q})}function C$($,J,Q){let Z=0;for(let[W,j]of[...$.pendingCapabilityRequests.entries()]){if(!J({requestId:W,...j}))continue;$.pendingCapabilityRequests.delete(W),c("warn","capability.request.cancelled",{requestId:W,sessionId:j.sessionId,capabilityName:j.capabilityName,targetClientId:j.targetClientId,reason:Q}),j.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:W,capabilityName:j.capabilityName,targetClientId:j.targetClientId,ok:!1,cancelled:!0,error:Q},j.sessionId)),Z+=1}return Z}async function XK($,J){let Q=typeof J.payload?.sessionId==="string"?J.payload.sessionId.trim():J.sessionId?.trim()||"",Z=typeof J.payload?.capabilityName==="string"?J.payload.capabilityName.trim():"",W=typeof J.payload?.targetClientId==="string"?J.payload.targetClientId.trim():"";if(!Q||!Z||!W)return v(J,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let j=J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)?J.payload.payload:{},X=await $.requestCapability(Q,Z,j,W);return l(J,X)}catch(j){return v(J,"capability_request_failed",j instanceof Error?j.message:String(j))}}function fK($,J){let Q=typeof J.payload?.requestId==="string"?J.payload.requestId.trim():"",Z=$.pendingCapabilityRequests.get(Q);if(!Z)return v(J,"capability_not_found",`Unknown capability request: ${Q}`);let W=J.clientId?.trim()||"";if(W!==Z.targetClientId)return v(J,"capability_wrong_client",`Capability request ${Q} is owned by ${Z.targetClientId}`);if(J.sessionId?.trim()&&J.sessionId.trim()!==Z.sessionId)return v(J,"capability_wrong_session",`Capability request ${Q} belongs to session ${Z.sessionId}`);$.pendingCapabilityRequests.delete(Q);let j=J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)?J.payload.payload:void 0,X=typeof J.payload?.error==="string"?J.payload.error:void 0,f=J.payload?.ok===!0;return c(f?"info":"warn","capability.respond",{requestId:Q,sessionId:Z.sessionId,capabilityName:Z.capabilityName,targetClientId:Z.targetClientId,respondedByClientId:W,ok:f,error:X}),Z.resolve({ok:f,payload:j,error:X}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:Z.capabilityName,targetClientId:Z.targetClientId,respondedByClientId:W,ok:f,payload:j,error:X},Z.sessionId)),l(J,{requestId:Q,ok:f})}import{createSessionId as _S}from"@cline/shared";function YK($,J){let Q=J.payload,Z=Q?.clientId?.trim()||J.clientId?.trim()||_S("client_");return $.clients.set(Z,{clientId:Z,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:Z,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),l(J,{clientId:Z})}function VK($,J){let Q=J.clientId?.trim(),Z=Q?$.clients.get(Q):void 0;if(!Q||!Z)return v(J,"client_not_found","Client is not registered with this hub.");let W=R9(J.payload?.metadata);if(Z.lastSeenAt=Date.now(),W)Z.metadata=JSON.parse(JSON.stringify(W));return l(J)}function HK($,J,Q){let Z=J.clientId?.trim();if(Z)$.clients.delete(Z),Q(Z),$.publish($.buildEvent("hub.client.disconnected",{clientId:Z}));return l(J)}function BK($,J){return l(J,{clients:[...$.clients.values()]})}var OS=30000;function TS($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function MS($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function qS($,J,Q){let Z=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${J}`;return v($,G2,Z)}function PS($){return $?$:void 0}function NS($){let J=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(J&&Number.isFinite(J)&&J>0)return Math.floor(J);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 wS($,J,Q,Z){let W=performance.now(),j=!1,X={command:J.command,requestId:J.requestId,clientId:J.clientId,sessionId:Q.sessionId,timeoutMs:Z},f=setInterval(()=>{if(j)return;let H=Math.round(performance.now()-W);c("warn","run.heartbeat",{...X,elapsedMs:H}),$.publish($.buildEvent("run.heartbeat",{requestId:J.requestId,elapsedMs:H,...Z?{timeoutMs:Z}:{}},Q.sessionId))},OS),Y=$.sessionHost.runTurn(Q);Y.then((H)=>{if(!j)return;c("warn","run.late_end",{...X,elapsedMs:Math.round(performance.now()-W),finishReason:H?.finishReason})},(H)=>{if(!j)return;c("error","run.late_error",{...X,elapsedMs:Math.round(performance.now()-W),error:H})});let V;try{if(!Z)return await Y;return await Promise.race([Y,new Promise((H,B)=>{V=setTimeout(()=>{let A=`Hub run ${J.command} timed out after ${Z}ms.`;j=!0,clearInterval(f),B(Error(A)),c("error","run.timeout",{...X,elapsedMs:Math.round(performance.now()-W)}),z3($,(K)=>K.sessionId===Q.sessionId,A),C$($,(K)=>K.sessionId===Q.sessionId,A),$.sessionHost.abort(Q.sessionId,A).catch((K)=>{c("error","run.timeout_abort_failed",{...X,error:K})})},Z)})])}finally{if(j=!0,clearInterval(f),V)clearTimeout(V)}}async function AK($,J){let Q=h0(J),Z=J.payload&&typeof J.payload==="object"?J.payload:{},W=typeof Z.prompt==="string"?Z.prompt:typeof Z.input==="string"?Z.input:"";if(!W.trim())return v(J,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let j=Z.attachments&&typeof Z.attachments==="object"&&!Array.isArray(Z.attachments)?Z.attachments:void 0,X=Array.isArray(j?.userFiles)?j.userFiles.filter((H)=>typeof H==="string"):void 0,f=NS(Z);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let Y;try{Y=await wS($,J,{sessionId:Q,prompt:W,mode:PS(Z.mode),delivery:Z.delivery==="queue"||Z.delivery==="steer"?Z.delivery:void 0,userImages:Array.isArray(j?.userImages)?j.userImages:void 0,userFiles:X,timeoutMs:f},f)}catch(H){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(d1(H))return qS(J,Q,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Q)),H}if(Y){let H=await o0($,Q),B=MS(Y);if($.publish($.buildEvent(TS(Y.finishReason),{reason:Y.finishReason,...B?{error:B}:{},result:Y,...H?{snapshot:H}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let V=await o0($,Q);return l(J,Y||V?{...Y?{result:Y}:{},...V?{snapshot:V}:{}}:void 0)}async function KK($,J){let Q=h0(J),Z=typeof J.payload?.reason==="string"?J.payload.reason:"Run was aborted before pending approval or capability request was resolved.";z3($,(W)=>W.sessionId===Q,Z);try{await $.sessionHost.abort(Q,J.payload?.reason)}catch(W){c("warn","run.abort_failed",{command:J.command,requestId:J.requestId,clientId:J.clientId,sessionId:Q,error:W})}finally{C$($,(W)=>W.sessionId===Q,Z)}return l(J,{applied:!0})}async function GK($,J){let Q=n8(J.payload?.payload);if(!Q)return v(J,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),l(J,{applied:!0})}async function FK($,J){switch(J.type){case"chunk":return;case"agent_event":await SS($,J);return;case"hook":if(J.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:J.payload.toolName},J.payload.sessionId));else if(J.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:J.payload.toolName},J.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:J.payload.sessionId,summary:J.payload.summary,lastEvent:J.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,J.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:J.payload.sessionId,prompts:J.payload.prompts},J.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:J.payload.id,prompt:J.payload.prompt,delivery:J.payload.delivery,attachmentCount:J.payload.attachmentCount};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:J.payload.sessionId,prompt:Q},J.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:J.payload.sessionId,snapshot:J.payload.snapshot},J.payload.sessionId));return;case"status":{let[Q,Z]=await Promise.all([s0($,J.payload.sessionId),o0($,J.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...Z?{snapshot:Z}:{}},J.payload.sessionId));return}case"ended":await CS($,J);return;default:return}}async function SS($,J){let{sessionId:Q,event:Z}=J.payload;if(Z.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:Z.iteration},Q));return}if(Z.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:Z.iteration,hadToolCalls:Z.hadToolCalls,toolCallCount:Z.toolCallCount},Q));return}if(Z.type==="content_start"){if(Z.contentType==="text"&&typeof Z.text==="string"&&Z.text.length>0){$.publish($.buildEvent("assistant.delta",{text:Z.text},Q));return}if(Z.contentType==="reasoning"){if(Z.redacted&&!Z.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof Z.reasoning==="string"&&Z.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:Z.reasoning,redacted:Z.redacted===!0},Q));return}if(Z.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:Z.toolCallId,toolName:Z.toolName,input:Z.input},Q));return}}if(Z.type==="content_end"){switch(Z.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:Z.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:Z.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:Z.toolCallId,toolName:Z.toolName,output:Z.output,error:Z.error},Q));break}return}if(Z.type==="usage"){let W;try{W=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{W=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:Z.inputTokens,outputTokens:Z.outputTokens,cacheReadTokens:Z.cacheReadTokens??0,cacheWriteTokens:Z.cacheWriteTokens??0,totalCost:Z.cost??0},totals:{inputTokens:Z.totalInputTokens,outputTokens:Z.totalOutputTokens,cacheReadTokens:Z.totalCacheReadTokens??0,cacheWriteTokens:Z.totalCacheWriteTokens??0,totalCost:Z.totalCost??0},usage:W?.usage,aggregateUsage:W?.aggregateUsage,agent:{kind:J.payload.teamRole==="teammate"?"teammate":Z.parentAgentId?"subagent":"lead",agentId:Z.agentId,conversationId:Z.conversationId,parentAgentId:Z.parentAgentId,teamAgentId:J.payload.teamAgentId,teamRole:J.payload.teamRole}},Q));return}if(Z.type==="done")$.publish($.buildEvent("agent.done",{reason:Z.reason,text:Z.text,iterations:Z.iterations,usage:Z.usage},Q))}async function CS($,J){let Q=$.suppressNextTerminalEventBySession.get(J.payload.sessionId),Z=Q===J.payload.reason||Q==="run.start.reply";if(Z)$.suppressNextTerminalEventBySession.delete(J.payload.sessionId);let[W,j]=await Promise.all([s0($,J.payload.sessionId),o0($,J.payload.sessionId)]);if(J.payload.reason==="completed"){let X=await JK(W);$.publish($.buildEvent("ui.notify",X,J.payload.sessionId))}if(Z)return;$.publish($.buildEvent(J.payload.reason==="aborted"?"run.aborted":J.payload.reason==="error"||J.payload.reason==="failed"?"run.failed":"run.completed",{reason:J.payload.reason,...j?{snapshot:j}:{}},J.payload.sessionId))}import{createSessionId as OK,parseRuntimeConfigExtensions as TK}from"@cline/shared";var LK={};w(LK,{SessionVersioningService:()=>y$,SessionVersioningError:()=>k0});var RK={};w(RK,{trimMessagesToCheckpoint:()=>UK,trimMessagesBeforeCheckpoint:()=>T3,readSessionCheckpointHistory:()=>OJ,createRestoredCheckpointMetadata:()=>O3,createCheckpointRestorePlan:()=>M3,applyCheckpointToWorktree:()=>q3});import{execFile as yS}from"node:child_process";import{promisify as ES}from"node:util";var J4=ES(yS);function OJ($){let J=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(J?.history)?J.history:[]).filter((Z)=>!!Z&&typeof Z==="object"&&!Array.isArray(Z)).flatMap((Z)=>{let W=String(Z.ref??"").trim(),j=Number(Z.createdAt??0),X=Number(Z.runCount??0);if(W.length===0||!Number.isFinite(j)||!Number.isInteger(X)||X<1)return[];let f=Z.kind==="stash"||Z.kind==="commit"?Z.kind:void 0;return[{ref:W,createdAt:j,runCount:X,...f?{kind:f}:{}}]})}function O3($,J){let Q=OJ($).filter((W)=>W.runCount<=J),Z=Q.at(-1);return Z?{latest:Z,history:Q}:void 0}function bS($,J){return $.reduce((Q,Z)=>{if(Z.runCount>J)return Q;if(!Q||Z.runCount>Q.runCount)return Z;return Q},void 0)}function DK($,J){let Q=0;for(let Z=0;Z<$.length;Z+=1){let W=$[Z];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===J)return Z}throw Error(`Could not find user message for checkpoint run ${J}`)}function UK($,J){let Q=DK($,J);return $.slice(0,Q+1)}function T3($,J){let Q=DK($,J);return $.slice(0,Q)}function M3($){let J=$.checkpointRunCount;if(!Number.isInteger(J)||J<1)throw Error("checkpointRunCount must be a positive integer");let Q=bS(OJ($.session),J);if(!Q)throw Error(`No checkpoint found at or before run ${J} in session ${$.session.sessionId}`);let Z=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!Z)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:Z,...$.restoreMessages!==!1?{messages:UK($.messages??[],J)}:{}}}async function q3($,J){if((await J4("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await J4("git",["-C",$,"cat-file","-e",`${J.ref}^{commit}`],{windowsHide:!0}),await J4("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await J4("git",["-C",$,"clean","-fd"],{windowsHide:!0}),J.kind==="commit"){await J4("git",["-C",$,"reset","--hard",J.ref],{windowsHide:!0});return}await J4("git",["-C",$,"stash","apply",J.ref],{windowsHide:!0})}class k0 extends Error{code;constructor($,J){super(J);this.code=$;this.name="SessionVersioningError"}}function hS($){let J=$.sessionId.trim();if(!J)throw new k0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new k0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new k0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new k0("invalid_restore","checkpointRunCount must be a positive integer");return J}class y${async restoreCheckpoint($){let J=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,Z=hS({sessionId:$.sessionId,restoreMessages:J,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),W=await $.getSession(Z);if(!W)throw new k0("session_not_found",`Session ${Z} not found`);let j=J?await $.readMessages(Z):void 0;if(J&&j?.length===0)throw new k0("session_messages_not_found",`No messages found for session ${Z}`);let X=M3({session:W,messages:j,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:J});if(Q)await($.applyWorkspaceCheckpoint??q3)(X.cwd,X.checkpoint);let f=F1({session:W,messages:j});if(!J)return{checkpoint:X.checkpoint,sourceSnapshot:f};let Y=O3(W,$.checkpointRunCount),V=$.restore?.omitCheckpointMessageFromSession?T3(j??[],$.checkpointRunCount):X.messages??[],H={sourceSession:W,sourceMessages:j,sourceSnapshot:f,plan:X,restoredCheckpointMetadata:Y,initialMessages:V,restoreMessages:J,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new k0("invalid_restore","start is required when restore.messages is true");let B=$.buildStartInput?await $.buildStartInput(H,$.start):$.start,A=await $.startSession(B),K=$.getStartedSessionId?.(A);if(K)await($.retainCheckpointRefs??LV)(X.cwd,K,Y?.history??[]);let G=K&&$.readRestoredSession?await $.readRestoredSession(K):void 0;return{sessionId:K,startResult:A,messages:X.messages,checkpoint:X.checkpoint,sourceSnapshot:f,...G?{restoredSnapshot:F1({session:G,messages:V})}:{}}}}import{HUB_CHECKPOINT_CAPABILITY as tp,HUB_COMPACTION_CAPABILITY as ep,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as $r,HUB_HOOK_CAPABILITY_PREFIX as Jr,HUB_MISTAKE_LIMIT_CAPABILITY as Qr,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Zr,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Wr,isHubToolExecutorName as kS}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as Vr,HUB_COMPACTION_CAPABILITY as Hr,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Br,HUB_HOOK_CAPABILITY_PREFIX as Ar,HUB_MISTAKE_LIMIT_CAPABILITY as Kr,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Gr,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Fr}from"@cline/shared";var IS=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function S2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function xS($,J){let Q=typeof $.name==="string"?$.name.trim():"",Z=typeof $.description==="string"?$.description:"",W=typeof $.capabilityName==="string"?$.capabilityName.trim():"",j=S2($.inputSchema);if(!Q||!Z||!j||!W||J.has(W))return;return J.add(W),{kind:"tool",capabilityName:W,name:Q,description:Z,inputSchema:j,...S2($.lifecycle)?{lifecycle:S2($.lifecycle)}:{}}}function N3($){if(!Array.isArray($))return[];let J=[],Q=new Set;for(let Z of $){if(!Z||typeof Z!=="object"||Array.isArray(Z))continue;let W=Z,j=W.kind,X=typeof W.capabilityName==="string"?W.capabilityName.trim():"";if(!X||Q.has(X))continue;if(j==="tool"){let f=xS(W,Q);if(f)J.push(f);continue}if(j==="toolExecutor"){let f=W.executor;if(!kS(f))continue;Q.add(X),J.push({kind:"toolExecutor",capabilityName:X,executor:f});continue}if(j==="hook"){let f=typeof W.name==="string"?W.name.trim():"";if(!f)continue;Q.add(X),J.push({kind:"hook",capabilityName:X,name:f});continue}if(j==="compaction"){Q.add(X),J.push({kind:"compaction",capabilityName:X,...S2(W.config)?{config:S2(W.config)}:{}});continue}if(j==="checkpoint"){Q.add(X),J.push({kind:"checkpoint",capabilityName:X,...S2(W.config)?{config:S2(W.config)}:{}});continue}if(j==="mistakeLimit"){Q.add(X),J.push({kind:"mistakeLimit",capabilityName:X});continue}if(j==="userInstructionService")Q.add(X),J.push({kind:"userInstructionService",capabilityName:X})}return J}function _K($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function gS($){return Object.hasOwn($,"update")?$.update:$}function TJ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function mS($){let J=($??[]).map(TJ).filter(Boolean);return J.length>0?new Set(J):void 0}function vS($,J,Q){if(!Q)return!0;let Z=TJ($),W=TJ(J),j=Z.includes(":")?Z.split(":").at(-1)??Z:Z,X=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(Z)||Q.has(W)||Q.has(j)||Q.has(X)}function P3($,J){let Q=mS(J);return $.records.skill.map((Z)=>({id:Z.id,name:Z.item.name,description:"description"in Z.item&&typeof Z.item.description==="string"?Z.item.description:void 0,disabled:Z.item.disabled===!0,skill:Z.item})).filter((Z)=>vS(Z.id,Z.name,Q))}function zK($,J){let Q=async(Z,W)=>{let j=TJ(Z),f=P3($,J).filter((A)=>A.id===j||TJ(A.name)===j||A.id.endsWith(`:${j}`)).filter((A)=>!A.disabled);if(f.length!==1)return f.length>1?`Skill "${Z}" is ambiguous. Use one of: ${f.map((A)=>A.id).join(", ")}`:`Skill "${Z}" not found.`;let Y=f[0].skill,V=W?.trim(),H=V?`
579
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,$0()])}}function fw($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let J=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(J==="local"||J==="hub"||J==="remote")return J;return"auto"}var FJ,DJ;function Yw($,J){if($!=="auto"&&$!=="hub")return;if(J.hub?.endpoint?.trim())return;e9(J.hub?.workspaceRoot?.trim()||J.hub?.cwd?.trim()||process.cwd())}async function Vw($){await $.reconcileDeadSessions?.().catch(()=>{})}function IA($){try{let J=new U1;return J.init(),new L1(J,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(J){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),kA($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:J,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new Z3(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function hA($,J,Q){return new z1({sessionService:Q??$.sessionService??IA($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:J,fetch:$.fetch})}async function f3($){if(FJ)return FJ;if(DJ)return await DJ;return DJ=(async()=>{return FJ=IA($),await Vw(FJ),FJ})().finally(()=>{DJ=void 0}),await DJ}async function r8($){let J=b0($.distinctId);$.telemetry?.setDistinctId(J);let Q=fw($);if(Yw(Q,$),Q==="remote"){let Z=$.remote?.endpoint?.trim();if(!Z)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:Z}),new g8({endpoint:Z,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let Z=$.hub?.endpoint?.trim(),W=Z||await _2({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:Z||void 0}),new r1({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 Z=await XJ({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(Z){$.logger?.log("Using discovered local hub runtime host",{url:Z});let W=new r1({url:Z,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(j){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:j}),kA($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:j,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),hA($,J)}return hA($,J)}var vA={};w(vA,{NoOpFeatureFlagsProvider:()=>q2,FeatureFlagsService:()=>M2});import{existsSync as Hw,mkdirSync as Bw,readFileSync as Aw,writeFileSync as Kw}from"node:fs";import{dirname as Gw}from"node:path";import{FEATURE_FLAGS as gA,FeatureFlagDefaultValue as Y3}from"@cline/shared";var Fw=3600000,Dw=604800000,mA=1;class M2{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??Fw,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??Dw,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 J=$??this.context.userId??null,Q=Date.now();if(Q-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===J)return}let Z=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:J||null};try{let W=await this.provider.getAllFlagsAndPayloads({flagKeys:gA.length>0?gA:void 0,context:{...this.context,userId:J}});if(this.cacheInfo.userId!==J)return;this.cacheInfo.flagsPayload=W,this.rebuildCacheFromSnapshot(W),this.writePersistentCache()}catch(W){if(this.cacheInfo.userId!==J)return;throw this.cacheInfo=Z.updateTime?Z:{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((J)=>this.isFeatureFlagPayload(J));if(typeof $==="object")return Object.values($).every((J)=>this.isFeatureFlagPayload(J));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=Object.entries($).filter(([,Z])=>this.isFeatureFlagPayload(Z));if(J.length===0)return;let Q={};for(let[Z,W]of J)Q[Z]=W;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!Hw(this.cacheFilePath))return;let $=JSON.parse(Aw(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let J=$;if(J.version!==mA||typeof J.updatedAt!=="number"||!Number.isFinite(J.updatedAt)||Date.now()-J.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:J.updatedAt,userId:J.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(J.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(J.flagsPayload?.featureFlagPayloads)}}}catch($){this.logger?.error?.("Error reading SDK feature flags cache",{error:$});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;Bw(Gw(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),J={version:mA,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};Kw(this.cacheFilePath,`${JSON.stringify(J,null,2)}
580
+ `,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let J=new Map;for(let Q of this.getReturnedFlagKeys($)){let Z=this.getFeatureFlag(Q);J.set(Q,Z??!1)}this.cache=J}getFeatureFlag($){try{let J=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],Z=J??Q??Y3[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==Z)this.telemetry?.capture({event:x.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return Z}catch(J){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:J}),Y3[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??Y3[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,J){if(process.env.IS_TEST==="true")this.cache.set($,J)}async dispose(){await this.provider.dispose()}}class q2{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}m8();class UJ{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,J,Q,Z,W,j,X,f,Y,V){this.clientName=J,this.runtimeAddress=Q,this.host=$,this.prepare=Z,this.capabilities=W,this.logger=j,this.telemetry=X,this.distinctId=f,this.featureFlags=Y,this.settings=iH($),this.pendingPrompts=nH($),this.automation=new d7(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=V?new $J({workspaceRoot:V.workspaceRoot??process.cwd(),specs:{cronSpecsDir:V.cronSpecsDir??V.cronDir,scope:JH(V.cronScope),workspaceRoot:V.workspaceRoot},runtimeHandlers:QH({host:$,getExtensionContext:()=>O9({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:V.dbPath,logger:V.logger,pollIntervalMs:V.pollIntervalMs,claimLeaseSeconds:V.claimLeaseSeconds,globalMaxConcurrency:V.globalMaxConcurrency,watcherDebounceMs:V.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((H)=>{if(H.type!=="ended")return;this.disposeSessionBootstrap(H.payload.sessionId)})}static async create($={}){let J=b0($.distinctId),Q=z0($.capabilities),Z={...$,capabilities:Q,distinctId:J},W=await r8(Z),j=$H($.automation),X=$.featureFlags||new M2({provider:new q2,telemetry:$.telemetry,logger:$.logger,context:{distinctId:J,clientName:$.clientName}}),f=new UJ(W,$.clientName,W.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,J,X,j?{...j,logger:$.logger}:void 0);if(j&&j.autoStart!==!1)await f.automation.start();return f}async disposeSessionBootstrap($){let J=this.activeSessionBootstraps.get($);if(!J)return;this.activeSessionBootstraps.delete($),await Promise.resolve(J.dispose?.())}async start($){let J=sH($),Q=await this.prepare?.(J);try{let Z=Q?await Q.applyToStartSessionInput(J):J,W=await this.host.startSession(ZW(Z,{defaultCapabilities:this.capabilities,withExtensionContext:(j)=>O9({automationService:this.automationService,automation:this.automation,context:j,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 oH({input:Z,sessionId:W.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),W}catch(Z){throw await Promise.resolve(Q?.dispose?.()),Z}}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 J=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(J.map((Q)=>this.disposeSessionBootstrap(Q)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await r9(this.host,$);list=async($=200,J={})=>await this.listHistory({...J,limit:$});delete=async($)=>{let J=await this.host.deleteSession($);if(J)await this.disposeSessionBootstrap($);return J};update=(...$)=>this.host.updateSession(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let J=$.start?ZW($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>O9({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:J})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,J){return this.host.subscribe($,J)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}var uA={};w(uA,{resolvePluginSkillDirectoriesFromPaths:()=>$2,resolvePluginConfigSearchPaths:()=>B6,resolveAndLoadAgentPlugins:()=>K8,resolveAgentPluginPaths:()=>e$,loadAgentPluginsFromPathsWithDiagnostics:()=>t$,loadAgentPluginsFromPaths:()=>m5,loadAgentPluginFromPath:()=>V6,discoverPluginModulePaths:()=>A6});var pA={};w(pA,{toHookConfigFileName:()=>F6,runSubprocessEvent:()=>i8,runHook:()=>a8,resolveHooksConfigSearchPaths:()=>K6,parseHookEventPayload:()=>n8,mergeAgentHooks:()=>W2,listHookConfigFiles:()=>D$,createSubprocessHooks:()=>BQ,createHookConfigFileHooks:()=>D6,createHookConfigFileExtension:()=>U8,createHookAuditHooks:()=>D8,createAgentHooksExtension:()=>G8,HookEventPayloadSchema:()=>HQ,HookEventNameSchema:()=>VQ,HookConfigFileName:()=>F8,HOOK_CONFIG_FILE_EVENT_MAP:()=>G6,HOOKS_CONFIG_DIRECTORY_NAME:()=>p5});import{HookEventNameSchema as VQ,HookEventPayloadSchema as HQ,parseHookEventPayload as n8,resolveHookSessionContext as Tw}from"@cline/shared";import{z as P2}from"zod";import{spawn as Uw}from"node:child_process";import{augmentNodeCommandForDebug as Rw,withResolvedClineBuildEnv as Lw}from"@cline/shared";function zw($){let J=$.trim();if(!J)return{};let Z=J.split(`
581
+ `).map((j)=>j.trim()).filter(Boolean).filter((j)=>j.startsWith("HOOK_CONTROL\t")).map((j)=>j.slice(13)),W=Z.length>0?Z[Z.length-1]:J;try{return{parsedJson:JSON.parse(W)}}catch(j){return{parseError:j instanceof Error?j.message:"Failed to parse subprocess stdout JSON"}}}function _w($,J){let Q=$ instanceof Error?$:Error(String($)),Z=Q,W=J.join(" ");if(Z.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 Ow($,J){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((Z,W)=>{let j=(X)=>{Q.off("error",j);let f=X.code;if(f==="EPIPE"||f==="ERR_STREAM_DESTROYED"){Z();return}W(X)};Q.once("error",j),Q.end(J,(X)=>{if(Q.off("error",j),X){let f=X.code;if(f==="EPIPE"||f==="ERR_STREAM_DESTROYED"){Z();return}W(X);return}Z()})})}async function i8($,J){let Q=Rw(J.command,{env:J.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let Z=!!J.detached,W=Uw(Q[0],Q.slice(1),{cwd:J.cwd,env:Lw(J.env),stdio:Z?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Z,windowsHide:!0}),j=new Promise((A)=>{W.once("spawn",()=>{try{J.onSpawn?.({command:Q,pid:W.pid??void 0,detached:Z})}catch{}A()})}),X=new Promise((A,K)=>{W.once("error",(G)=>{K(_w(G,Q))})});if(await Ow(W,JSON.stringify($)),Z){await Promise.race([j,X]),W.unref();return}if(!W.stdout||!W.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let f="",Y="",V=!1,H;W.stdout.on("data",(A)=>{f+=A.toString()}),W.stderr.on("data",(A)=>{Y+=A.toString()});let B=new Promise((A)=>{if((J.timeoutMs??0)>0)H=setTimeout(()=>{V=!0,W.kill("SIGKILL")},J.timeoutMs);W.once("close",(K)=>{if(H)clearTimeout(H);let{parsedJson:G,parseError:R}=zw(f);A({exitCode:K,stdout:f,stderr:Y,parsedJson:G,parseError:R,timedOut:V})})});return await Promise.race([B,X])}var Mw=P2.object({contextModification:P2.string().optional(),cancel:P2.boolean().optional(),review:P2.boolean().optional(),errorMessage:P2.string().optional(),context:P2.string().optional(),overrideInput:P2.unknown().optional()}).passthrough();var qw=["agent","hook"];async function a8($,J={}){let Q=J.command??qw;return await i8($,{command:Q,cwd:J.cwd,env:J.env,detached:J.detached,timeoutMs:J.timeoutMs,onSpawn:J.onSpawn})}function lA($){return $ instanceof Error?$:Error(String($))}function Pw($){if(!$||typeof $!=="object")return;let J=Mw.safeParse($);if(!J.success)return;let Q=J.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 dA($){if(!$||typeof $!=="object")return{};let J={};for(let[Q,Z]of Object.entries($))if(typeof Z==="string")J[Q]=Z;else J[Q]=JSON.stringify(Z);return J}function a1($,J,Q){let Z=Q.env??process.env,W=Z.CLINE_USER_ID?.trim()||Z.USER?.trim()||"unknown",j=Q.cwd||process.cwd();return{clineVersion:Z.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:J.conversationId,sessionContext:Tw(Q.sessionContext,{hookName:$,conversationId:J.conversationId,agentId:J.agentId,parentAgentId:J.parentAgentId}),workspaceRoots:j?[j]:[],workspaceInfo:Q.workspaceInfo,userId:W,agent_id:J.agentId,parent_agent_id:J.parentAgentId}}function Nw($){return{name:$.name,message:$.message,stack:$.stack}}function ww($){let J=String($??"").toLowerCase();return J.includes("cancel")||J.includes("abort")||J.includes("interrupt")}function Sw($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function Cw($){return $.filter((J)=>J.type==="text"&&typeof J.text==="string").map((J)=>J.text).join("")}function yw($){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 Ew($){if(!$)return;let J={};if($.cancel===!0)J.stop=!0;if($.overrideInput!==void 0)J.input=$.overrideInput;return Object.keys(J).length>0?J:void 0}async function N2($,J){try{let Q=await a8($,{command:J.command,cwd:J.cwd,env:J.env,detached:!0,onSpawn:J.onSpawn});J.onDispatch?.({payload:$,result:Q,detached:!0})}catch(Q){J.onDispatchError?.(lA(Q),$)}}function BQ($={}){return{hooks:{beforeRun:async(f)=>{let Y=Sw(f);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let H={...a1("agent_resume",Y,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await N2(H,$)}else{let H={...a1("agent_start",Y,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await N2(H,$)}return},beforeTool:async(f)=>{let Y={agentId:f.snapshot.agentId,conversationId:f.snapshot.conversationId??f.snapshot.runId??f.snapshot.agentId,parentAgentId:f.snapshot.parentAgentId??null},V={...a1("tool_call",Y,$),hookName:"tool_call",iteration:f.snapshot.iteration,tool_call:{id:f.toolCall.toolCallId,name:f.toolCall.toolName,input:f.input},preToolUse:{toolName:f.toolCall.toolName,parameters:dA(f.input)}};try{let H=await a8(V,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:V,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 Ew(Pw(H?.parsedJson))}catch(H){$.onDispatchError?.(lA(H),V);return}},afterTool:async(f)=>{let Y=yw(f),V={agentId:f.snapshot.agentId,conversationId:f.snapshot.conversationId??f.snapshot.runId??f.snapshot.agentId,parentAgentId:f.snapshot.parentAgentId??null},H={...a1("tool_result",V,$),hookName:"tool_result",iteration:f.snapshot.iteration,tool_result:Y,postToolUse:{toolName:Y.name,parameters:dA(Y.input),result:typeof Y.output==="string"?Y.output:JSON.stringify(Y.output),success:!Y.error,executionTimeMs:Y.durationMs}};await N2(H,$);return},afterRun:async({snapshot:f,result:Y})=>{let V={agentId:f.agentId,conversationId:f.conversationId??f.runId??f.agentId,parentAgentId:f.parentAgentId??null};if(Y.status==="completed"){let A={...a1("agent_end",V,$),hookName:"agent_end",iteration:Y.iterations,turn:{outputText:Y.outputText,status:Y.status},taskComplete:{taskMetadata:{}}};await N2(A,$);return}let H=Y.status==="aborted"||ww(Y.error?.message)?"agent_abort":"agent_error",B=H==="agent_error"?{...a1(H,V,$),hookName:H,iteration:Y.iterations,error:Nw(Y.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...a1(H,V,$),hookName:H,reason:Y.error?.message,taskCancel:{taskMetadata:{}}};await N2(B,$)},onEvent:async(f)=>{if(f.type!=="message-added"||f.message.role!=="user")return;let Y={agentId:f.snapshot.agentId,conversationId:f.snapshot.conversationId??f.snapshot.runId??f.snapshot.agentId,parentAgentId:f.snapshot.parentAgentId??null},V={...a1("prompt_submit",Y,$),hookName:"prompt_submit",userPromptSubmit:{prompt:Cw(f.message.content),attachments:[]}};await N2(V,$)}},shutdown:async({agentId:f,conversationId:Y,parentAgentId:V,reason:H})=>{let B={...a1("session_shutdown",{agentId:f,conversationId:Y,parentAgentId:V},$),hookName:"session_shutdown",reason:H};await N2(B,$)}}}var $G={};w($G,{writeHubDiscovery:()=>a9,withHubStartupLock:()=>s9,verifyHubConnection:()=>G1,truncateNotificationBody:()=>_J,toHubStatusUrl:()=>SW,toHubHealthUrl:()=>o9,stopLocalHubServerGracefully:()=>cW,startHubWebSocketServer:()=>C2,startHubServer:()=>tK,spawnDetachedHubServerWithRetry:()=>k8,spawnDetachedHubServer:()=>kW,sendHubCommand:()=>oA,restartLocalHubIfIdleAfterStartupTimeout:()=>QQ,resolveWorkspaceHubOwnerContext:()=>IB,resolveSharedHubOwnerContext:()=>E0,resolveProductionHubOwnerContext:()=>n0,resolveHubUrl:()=>K3,resolveHubOwnerContext:()=>l1,resolveHubEndpointOptions:()=>i0,resolveHubBuildId:()=>n9,resolveDefaultHubPort:()=>h8,resolveDefaultHubPathname:()=>hW,resolveDefaultHubHost:()=>bW,resolveCompatibleLocalHubUrl:()=>XJ,resolveClineDir:()=>EB,resolveClineDataDir:()=>R2,requestHubShutdown:()=>jJ,rememberRecoverableLocalHubUrl:()=>P$,readHubDiscovery:()=>G0,readBearerToken:()=>_Q,probeHubServer:()=>p1,probeHubConnection:()=>sA,prewarmDetachedHubServer:()=>e9,normalizeHubWebSocketUrl:()=>N$,isHubReconnectableTransportError:()=>mW,isHubCommandTimeoutError:()=>JQ,isDiscoveryFilePresent:()=>hB,ensureHubWebSocketServer:()=>OQ,ensureHubServer:()=>eK,ensureDetachedHubServer:()=>uB,ensureCompatibleLocalHubUrl:()=>_2,createLocalHubScheduleRuntimeHandlers:()=>TQ,createInMemoryHubOwnerContext:()=>bB,createHubServerUrl:()=>j1,createHubAuthToken:()=>i9,createConfiguredTelemetryService:()=>s1,createConfiguredTelemetryHandle:()=>$4,connectToHub:()=>FQ,clearHubDiscovery:()=>y0,NodeHubClient:()=>X1,NativeHubTransportAdapter:()=>PJ,HubUIClient:()=>D3,HubTransportError:()=>q0,HubSessionClient:()=>F3,HubServerTransport:()=>Q4,HubScheduleService:()=>o8,HubScheduleCommandService:()=>s8,HubCommandError:()=>I8,DEFAULT_HUB_PORT:()=>yW,DEFAULT_HUB_PATHNAME:()=>EW,DEFAULT_HUB_HOST:()=>CW,BrowserWebSocketHubAdapter:()=>qJ});import{createSessionId as bw}from"@cline/shared";function a0($,J){return{version:$.version,requestId:$.requestId,ok:!0,payload:J}}function rA($,J,Q){return{version:$.version,requestId:$.requestId??bw("hubreq_"),ok:!1,error:{code:J,message:Q}}}class s8{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return a0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return a0($,{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 a0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return a0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return a0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return a0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return a0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return a0($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(String($.payload?.scheduleId??"")):await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return a0($,{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 a0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return a0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return a0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return rA($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(J){return rA($,"schedule_command_failed",J instanceof Error?J.message:String(J))}}toCreateInput($){let J=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:J}}toUpdateInput($){let J=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:J}}}function KQ($){return $?new Date($).getTime():void 0}function hw($){let J=$.metadata?{...$.metadata}:void 0;if(J)delete J.__hubScheduleCreatedBy,delete J.__hubScheduleCwd,delete J.__hubRuntimeOptions;return J}function AQ($){let J=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof J?.__hubScheduleCwd==="string"?J.__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:KQ($.nextRunAt),lastRunAt:KQ($.lastRunAt),createdBy:typeof J?.__hubScheduleCreatedBy==="string"?J.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:J?.__hubRuntimeOptions&&typeof J.__hubRuntimeOptions==="object"&&!Array.isArray(J.__hubRuntimeOptions)?J.__hubRuntimeOptions:void 0,metadata:hw($)}}function kw($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function V3($,J){return{executionId:$.runId,scheduleId:J,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:KQ($.startedAt),endedAt:KQ($.completedAt),status:kw($.status),errorMessage:$.error}}class o8{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new e6({dbPath:$.dbPath}),this.materializer=new n6({store:this.store}),this.runner=new a6({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(AW($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return AQ(this.store.createHubSchedule($))}getSchedule($){let J=this.store.getHubSchedule($);return J?AQ(J):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((J)=>AQ(J))}updateSchedule($,J){if(J.cronPattern!==void 0)AW(J.cronPattern);let Q=this.store.getHubSchedule($);if(!Q)return;let Z=J.workspaceRoot!==void 0?J.workspaceRoot.trim():Q.workspaceRoot;if((J.enabled??Q.enabled)&&!Z)throw Error("workspaceRoot is required for enabled schedules");let j=this.store.updateHubSchedule($,{...J,scheduleId:$});return j?AQ(j):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let J=this.store.enqueueHubScheduleRun($,"manual");if(!J)return;await this.runner.tick();let Q=this.store.getRun(J.runId)??J;return V3(Q,$)}triggerScheduleNowDetached($){let J=this.store.enqueueHubScheduleRun($,"manual");if(!J)return;return this.runner.tick().catch(()=>{return}),V3(J,$)}listScheduleExecutions($){let J=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:J?.specId,limit:$.limit};return this.store.listRuns(Q).map((W)=>{let j=J??this.store.getSpec(W.specId);if(!j||j.source!=="hub-schedule")return;return V3(W,j.externalId)}).filter((W)=>{if(!W)return!1;return!$.status||W.status===$.status})}getScheduleStats($){let J=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(J.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,Z=0,W=0,j;for(let X of J){if(X.status==="success"||X.status==="completed")Q+=1;if(!j&&X.status!=="success"&&X.status!=="completed")j=X;if(X.startedAt&&X.endedAt)W+=X.endedAt-X.startedAt,Z+=1}return{totalRuns:J.length,successRate:Q/J.length,avgDurationSeconds:Z>0?W/Z/1000:0,lastFailure:j}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let J=this.store.getSpec($.specId);if(!J||J.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:J.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:J.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+J.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let J={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(J).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,Z)=>String(Q.nextRunAt).localeCompare(String(Z.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:Z})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:Z}))}}GQ();import{resolveClineBuildEnv as WS}from"@cline/shared";function jS($,J){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 ${J} (${Q} event before socket open).`:`Failed to connect to hub at ${J}.`)}var XS="cline-hub-auth.";function fS($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function YS($,J){let Q=new URL($),Z=new URL(J);return Q.search="",Q.hash="",Z.search="",Z.hash="",Q.toString()===Z.toString()}function aA(){return WS()==="production"?n0():E0()}async function VS($){let J=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),J)return J;let Q=aA(),Z=await G0(Q.discoveryPath);if(Z?.url&&YS($.toString(),Z.url))return Z.authToken;return}async function K3($={}){let J=i0($);if(!fS($)){let Q=aA(),Z=await G0(Q.discoveryPath);if(Z?.url)return Z.url}return j1(J.host,J.port,J.pathname)}async function FQ($){return await new Promise((J,Q)=>{(async()=>{let Z=new URL($),W=await VS(Z);Z.hash="";let j=new WebSocket(Z.toString(),W?[`${XS}${W}`]:void 0),X=new Map,f=0;j.addEventListener("open",()=>{J({send(Y){let V=Y.requestId??`hub-client-${++f}`;return new Promise((H,B)=>{X.set(V,{resolve:H,reject:B});let A={kind:"command",envelope:{...Y,requestId:V}};j.send(JSON.stringify(A))})},close(){j.close()}})}),j.addEventListener("message",(Y)=>{let V=JSON.parse(String(Y.data));if(V.kind==="reply"&&V.envelope.requestId){let H=X.get(V.envelope.requestId);if(H)X.delete(V.envelope.requestId),H.resolve(V.envelope)}}),j.addEventListener("close",()=>{for(let Y of X.values())Y.reject(Error("Hub connection closed"));X.clear()}),j.addEventListener("error",(Y)=>{Q(jS(Y,$))})})().catch(Q)})}async function sA($){try{return(await FQ($)).close(),!0}catch{return!1}}async function oA($,J){let Q=await K3($),Z=await FQ(Q);try{return await Z.send({version:J.version??"v1",clientId:J.clientId??"hub-client",...J})}finally{Z.close()}}function G3($){return $?JSON.parse(JSON.stringify($)):{}}function DQ($){let J=$?.session&&typeof $.session==="object"?$.session:void 0;if(!J)return;let Q=J.metadata&&typeof J.metadata==="object"?G3(J.metadata):void 0;return{sessionId:typeof J.sessionId==="string"?J.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function tA($,J){return $.error?.message??`hub command failed: ${J}`}function HS($){let J=G3($);if(typeof J.error==="string"&&J.error.trim())return{...J,error:J.error.trim()};let Q=J.result&&typeof J.result==="object"?J.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...J,error:Q.text.trim()};let Z=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof Z?.message==="string"&&Z.message.trim())return{...J,error:Z.message.trim()};return J}function eA($){let J=$?.sessionId;return typeof J==="string"&&J.trim()?J.trim():void 0}function BS($){let J=$?.checkpoint;if(!J||typeof J!=="object"||Array.isArray(J))throw Error("hub checkpoint restore returned no checkpoint");let Q=J;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 AS($){let J=G3($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||eA(J)||"",eventType:"schedule.execution.completed",payload:J};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||eA(J)||"",eventType:"schedule.execution.failed",payload:J};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:J};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:J};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:J};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:J};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:J};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:J};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:J};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:J};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:HS($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:J};default:return}}class F3{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new X1({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 J=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=DQ(J.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($,J,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:J.prompt,mode:J.config.mode,attachments:J.attachments,delivery:J.delivery,timeoutSeconds:J.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 J;try{J=await this.client.command("session.get",void 0,$)}catch(Q){if(d1(Q))return;throw Q}return DQ(J.payload)}async readMessages($){let J=$.trim();if(!J)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:J},J);if(!Q.ok)throw Error(tA(Q,"session.messages"));let Z=Q.payload?.messages;return Array.isArray(Z)?Z:[]}async restore($){let J=$.sessionId.trim();if(!J)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 Z=$.config,W=await this.client.command("session.restore",{sessionId:J,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Z?{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,sessionConfig:{providerId:Z.provider,modelId:Z.model,apiKey:Z.apiKey,cwd:Z.cwd??Z.workspaceRoot,workspaceRoot:Z.workspaceRoot,systemPrompt:Z.systemPrompt??"",mode:Z.mode??"act",rules:Z.rules,maxIterations:Z.maxIterations,enableTools:Z.enableTools,enableSpawnAgent:Z.enableSpawn!==!1,enableAgentTeams:Z.enableTeams!==!1,disableMcpSettingsTools:Z.disableMcpSettingsTools,missionLogIntervalSteps:Z.missionStepInterval,missionLogIntervalMs:Z.missionTimeIntervalMs},metadata:{source:Z.source??"cli",provider:Z.provider,model:Z.model,enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams,prompt:void 0,interactive:Z.interactive!==!1},runtimeOptions:{mode:Z.mode,systemPrompt:Z.systemPrompt,maxIterations:Z.maxIterations,enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams,autoApproveTools:Z.autoApproveTools,configExtensions:Z.configExtensions},modelSelection:{provider:Z.provider,model:Z.model,apiKey:Z.apiKey},toolPolicies:Z.toolPolicies}:{}},J);if(!W.ok)throw Error(tA(W,"session.restore"));let j=DQ(W.payload);if(Q&&!j?.sessionId)throw Error("hub checkpoint restore returned no session id");let X=Array.isArray(W.payload?.messages)?W.payload.messages:void 0,f=BS(W.payload);return{sessionId:j?.sessionId,startResult:j?.sessionId?{sessionId:j.sessionId,manifestPath:"",messagesPath:j.messagesPath??""}:void 0,...X?{messages:X}:{},checkpoint:f}}async listSessions($){await this.ensureMetadataApplied();let J=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(J.payload?.sessions)?J.payload?.sessions:[]).map((Z)=>DQ({session:Z})).filter((Z)=>Boolean(Z?.sessionId))}async deleteSession($,J=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:J})).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($,J){let Q=new Set(($.sessionIds??[]).map((W)=>W.trim()).filter(Boolean)),Z=this.client.subscribe((W)=>{let j=AS(W);if(!j)return;if(Q.size>0&&!Q.has(j.sessionId))return;J.onEvent?.(j)});return this.ensureMetadataApplied().catch((W)=>{J.onError?.(W instanceof Error?W:Error(String(W)))}),Z}streamTeamProgress($,J){let Q=this.client.subscribe((Z)=>{if(Z.event!=="team.progress"||!Z.payload)return;J.onProjection?.(Z.payload)});return this.ensureMetadataApplied().catch((Z)=>{J.onError?.(Z instanceof Error?Z:Error(String(Z)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let J=await this.client.command("schedule.list");return Array.isArray(J.payload?.schedules)?J.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,J){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...J})).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($,J){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:J});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 J=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(J.payload?.upcoming)?J.payload?.upcoming:[]}}class D3{client;constructor($){this.client=new X1({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 J=await this.client.command("session.list",{limit:$});return Array.isArray(J.payload?.sessions)?J.payload.sessions:[]}subscribeUI($){return this.client.subscribe((J)=>{switch(J.event){case"ui.notify":$.onNotify?.(J.payload);break;case"ui.show_window":$.onShowWindow?.(J.payload);break;case"hub.client.registered":$.onClientRegistered?.(J.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(J.payload??{});break;case"session.created":$.onSessionCreated?.(J.payload??{});break;case"session.updated":$.onSessionUpdated?.(J.payload??{});break;case"session.detached":$.onSessionDetached?.(J.payload??{});break}})}}import{resolveClineBuildEnv as sK}from"@cline/shared";function KS($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
582
+ `).trim()||void 0}var $K=120,U3="...";function _J($){let J=$.trim();if(!J)return"";if(Buffer.byteLength(J,"utf8")<=$K)return J;let Q=$K-Buffer.byteLength(U3,"utf8");if(Q<=0)return U3;let Z="";for(let W of J){if(Buffer.byteLength(Z+W,"utf8")>Q)break;Z+=W}return`${Z}${U3}`}async function JK($){let J=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,W=[...await q$(Q)].reverse().find((Y)=>Y.role==="assistant"),j=W?KS(W.content):void 0,X=$?.workspaceRoot?.trim()||"workspace",f=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():X;return{title:`Task completed (${J})`,body:_J(j&&j.length>0?j:f.length>0?f:X),severity:"info"}}import{captureSdkError as zQ,createSessionId as rS}from"@cline/shared";import{createSessionId as US}from"@cline/shared";import{createSessionId as DS}from"@cline/shared";function GS($){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 FS($){let J=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())J.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())J.parentAgentId=$.parentAgentId;if($.agentId?.trim())J.agentId=$.agentId;if($.conversationId?.trim())J.conversationId=$.conversationId;if($.messagesPath?.trim())J.messagesPath=$.messagesPath;if($.prompt?.trim())J.prompt=$.prompt;if($.provider?.trim())J.provider=$.provider;if($.model?.trim())J.model=$.model;if($.source?.trim())J.source=$.source;if(typeof $.pid==="number")J.pid=$.pid;return Object.keys(J).length>0?J:void 0}function UQ($,J,Q,Z){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:J?.createdByClientId??"hub",status:GS($.status),participants:J?[...J.participants.values()]:[],metadata:FS($),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}}:{},...Z?{aggregateUsage:{...Z}}:{}}}function l($,J){return{version:$.version,requestId:$.requestId,ok:!0,...J!==void 0?{payload:J}:{}}}function v($,J,Q){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:J,message:Q}}}function RQ($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function h0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function w2($,J,Q){return{version:"v1",event:$,eventId:DS("hevt_"),sessionId:Q,timestamp:Date.now(),payload:J}}async function s0($,J){let Q=await $.sessionHost.getSession(J);if(!Q)return;let Z=await $.sessionHost.getAccumulatedUsage?.(J);return UQ(Q,$.sessionState.get(J),Z?.usage,Z?.aggregateUsage)}async function o0($,J){let Q=await $.sessionHost.getSession(J);if(!Q)return;let[Z,W]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(J):[],$.sessionHost.getAccumulatedUsage?.(J)]);return F1({session:Q,messages:Z,usage:W?.usage,aggregateUsage:W?.aggregateUsage})}function LQ($,J,Q,Z,W={}){let j=$.sessionState.get(J);if(j){if(W.interactive!==void 0)j.interactive=W.interactive;if(!j.participants.has(Q))j.participants.set(Q,{clientId:Q,attachedAt:Date.now(),role:Z});return j}let X={createdByClientId:Q,interactive:W.interactive??!0,participants:new Map([[Q,{clientId:Q,attachedAt:Date.now(),role:Z}]])};return $.sessionState.set(J,X),X}async function R3($,J){let Q=US("approval_"),Z=J.sessionId;if($.sessionState.get(Z)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((j)=>{$.pendingApprovals.set(Q,{sessionId:Z,resolve:j}),$.publish($.buildEvent("approval.requested",{approvalId:Q,sessionId:J.sessionId,agentId:J.agentId,conversationId:J.conversationId,iteration:J.iteration,toolCallId:J.toolCallId,toolName:J.toolName,inputJson:JSON.stringify(J.input??null),policy:J.policy},Z))})}function L3($,J,Q){let Z=$.pendingApprovals.get(J);if(!Z)return;return $.pendingApprovals.delete(J),Z.resolve(Q),{sessionId:Z.sessionId}}function z3($,J,Q){let Z=0;for(let[W,j]of[...$.pendingApprovals.entries()]){if(!J({approvalId:W,sessionId:j.sessionId}))continue;$.pendingApprovals.delete(W),j.resolve({approved:!1,reason:Q}),$.publish($.buildEvent("approval.resolved",{approvalId:W,approved:!1,cancelled:!0,reason:Q},j.sessionId)),Z+=1}return Z}async function QK($,J){let Q=typeof J.payload?.approvalId==="string"?J.payload.approvalId.trim():"";if(!$.pendingApprovals.get(Q))return v(J,"approval_not_found",`Unknown approval: ${Q}`);let W=typeof J.payload?.reason==="string"?J.payload.reason:J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)&&typeof J.payload.payload.reason==="string"?J.payload.payload.reason:void 0,j=J.payload?.approved===!0,X=L3($,Q,{approved:j,reason:W});if(!X)return v(J,"approval_not_found",`Unknown approval: ${Q}`);return $.publish($.buildEvent("approval.resolved",{approvalId:Q,approved:j,reason:W},X.sessionId)),l(J,{approvalId:Q,approved:j})}import{createSessionId as zS}from"@cline/shared";function RS($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var ZK={debug:10,info:20,warn:30,error:40,silent:50};function LS(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function c($,J,Q={}){if(ZK[$]<ZK[LS()])return;let Z=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:J,...Object.fromEntries(Object.entries(Q).map(([W,j])=>[W,RS(j)]).filter(([,W])=>W!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${Z}`);return}console.log(`[hub] ${Z}`)}function _3($,J){let Q=J instanceof Error?J.stack||J.message:String(J);c("error",$,{error:Q})}async function WK($,J,Q,Z,W,j){let X=zS("capreq_"),f=performance.now();return c("info","capability.request.start",{requestId:X,sessionId:J,capabilityName:Q,targetClientId:W}),await new Promise((Y,V)=>{$.pendingCapabilityRequests.set(X,{sessionId:J,targetClientId:W,capabilityName:Q,onProgress:j,resolve:(H)=>{if(c(H.ok?"info":"warn","capability.request.end",{requestId:X,sessionId:J,capabilityName:Q,targetClientId:W,ok:H.ok,error:H.error,durationMs:Math.round(performance.now()-f)}),!H.ok){V(Error(H.error||`Capability ${Q} was rejected by ${W}.`));return}Y(H.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:X,targetClientId:W,capabilityName:Q,payload:Z},J)),c("info","capability.request.published",{requestId:X,sessionId:J,capabilityName:Q,targetClientId:W})})}function jK($,J){let Q=typeof J.payload?.requestId==="string"?J.payload.requestId.trim():"",Z=$.pendingCapabilityRequests.get(Q);if(!Z)return v(J,"capability_not_found",`Unknown capability request: ${Q}`);if((J.clientId?.trim()||"")!==Z.targetClientId)return v(J,"capability_wrong_client",`Capability request ${Q} is owned by ${Z.targetClientId}`);if(J.sessionId?.trim()&&J.sessionId.trim()!==Z.sessionId)return v(J,"capability_wrong_session",`Capability request ${Q} belongs to session ${Z.sessionId}`);let j=J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)?J.payload.payload:{};return Z.onProgress?.(j),l(J,{requestId:Q})}function C$($,J,Q){let Z=0;for(let[W,j]of[...$.pendingCapabilityRequests.entries()]){if(!J({requestId:W,...j}))continue;$.pendingCapabilityRequests.delete(W),c("warn","capability.request.cancelled",{requestId:W,sessionId:j.sessionId,capabilityName:j.capabilityName,targetClientId:j.targetClientId,reason:Q}),j.resolve({ok:!1,error:Q}),$.publish($.buildEvent("capability.resolved",{requestId:W,capabilityName:j.capabilityName,targetClientId:j.targetClientId,ok:!1,cancelled:!0,error:Q},j.sessionId)),Z+=1}return Z}async function XK($,J){let Q=typeof J.payload?.sessionId==="string"?J.payload.sessionId.trim():J.sessionId?.trim()||"",Z=typeof J.payload?.capabilityName==="string"?J.payload.capabilityName.trim():"",W=typeof J.payload?.targetClientId==="string"?J.payload.targetClientId.trim():"";if(!Q||!Z||!W)return v(J,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let j=J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)?J.payload.payload:{},X=await $.requestCapability(Q,Z,j,W);return l(J,X)}catch(j){return v(J,"capability_request_failed",j instanceof Error?j.message:String(j))}}function fK($,J){let Q=typeof J.payload?.requestId==="string"?J.payload.requestId.trim():"",Z=$.pendingCapabilityRequests.get(Q);if(!Z)return v(J,"capability_not_found",`Unknown capability request: ${Q}`);let W=J.clientId?.trim()||"";if(W!==Z.targetClientId)return v(J,"capability_wrong_client",`Capability request ${Q} is owned by ${Z.targetClientId}`);if(J.sessionId?.trim()&&J.sessionId.trim()!==Z.sessionId)return v(J,"capability_wrong_session",`Capability request ${Q} belongs to session ${Z.sessionId}`);$.pendingCapabilityRequests.delete(Q);let j=J.payload?.payload&&typeof J.payload.payload==="object"&&!Array.isArray(J.payload.payload)?J.payload.payload:void 0,X=typeof J.payload?.error==="string"?J.payload.error:void 0,f=J.payload?.ok===!0;return c(f?"info":"warn","capability.respond",{requestId:Q,sessionId:Z.sessionId,capabilityName:Z.capabilityName,targetClientId:Z.targetClientId,respondedByClientId:W,ok:f,error:X}),Z.resolve({ok:f,payload:j,error:X}),$.publish($.buildEvent("capability.resolved",{requestId:Q,capabilityName:Z.capabilityName,targetClientId:Z.targetClientId,respondedByClientId:W,ok:f,payload:j,error:X},Z.sessionId)),l(J,{requestId:Q,ok:f})}import{createSessionId as _S}from"@cline/shared";function YK($,J){let Q=J.payload,Z=Q?.clientId?.trim()||J.clientId?.trim()||_S("client_");return $.clients.set(Z,{clientId:Z,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:Z,clientType:Q?.clientType??"unknown",displayName:Q?.displayName,connectedAt:Date.now()})),l(J,{clientId:Z})}function VK($,J){let Q=J.clientId?.trim(),Z=Q?$.clients.get(Q):void 0;if(!Q||!Z)return v(J,"client_not_found","Client is not registered with this hub.");let W=RQ(J.payload?.metadata);if(Z.lastSeenAt=Date.now(),W)Z.metadata=JSON.parse(JSON.stringify(W));return l(J)}function HK($,J,Q){let Z=J.clientId?.trim();if(Z)$.clients.delete(Z),Q(Z),$.publish($.buildEvent("hub.client.disconnected",{clientId:Z}));return l(J)}function BK($,J){return l(J,{clients:[...$.clients.values()]})}var OS=30000;function TS($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function MS($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function qS($,J,Q){let Z=Q instanceof Error&&Q.message.trim()?Q.message:`Unknown session: ${J}`;return v($,G2,Z)}function PS($){return $?$:void 0}function NS($){let J=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(J&&Number.isFinite(J)&&J>0)return Math.floor(J);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 wS($,J,Q,Z){let W=performance.now(),j=!1,X={command:J.command,requestId:J.requestId,clientId:J.clientId,sessionId:Q.sessionId,timeoutMs:Z},f=setInterval(()=>{if(j)return;let H=Math.round(performance.now()-W);c("warn","run.heartbeat",{...X,elapsedMs:H}),$.publish($.buildEvent("run.heartbeat",{requestId:J.requestId,elapsedMs:H,...Z?{timeoutMs:Z}:{}},Q.sessionId))},OS),Y=$.sessionHost.runTurn(Q);Y.then((H)=>{if(!j)return;c("warn","run.late_end",{...X,elapsedMs:Math.round(performance.now()-W),finishReason:H?.finishReason})},(H)=>{if(!j)return;c("error","run.late_error",{...X,elapsedMs:Math.round(performance.now()-W),error:H})});let V;try{if(!Z)return await Y;return await Promise.race([Y,new Promise((H,B)=>{V=setTimeout(()=>{let A=`Hub run ${J.command} timed out after ${Z}ms.`;j=!0,clearInterval(f),B(Error(A)),c("error","run.timeout",{...X,elapsedMs:Math.round(performance.now()-W)}),z3($,(K)=>K.sessionId===Q.sessionId,A),C$($,(K)=>K.sessionId===Q.sessionId,A),$.sessionHost.abort(Q.sessionId,A).catch((K)=>{c("error","run.timeout_abort_failed",{...X,error:K})})},Z)})])}finally{if(j=!0,clearInterval(f),V)clearTimeout(V)}}async function AK($,J){let Q=h0(J),Z=J.payload&&typeof J.payload==="object"?J.payload:{},W=typeof Z.prompt==="string"?Z.prompt:typeof Z.input==="string"?Z.input:"";if(!W.trim())return v(J,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,Q));let j=Z.attachments&&typeof Z.attachments==="object"&&!Array.isArray(Z.attachments)?Z.attachments:void 0,X=Array.isArray(j?.userFiles)?j.userFiles.filter((H)=>typeof H==="string"):void 0,f=NS(Z);$.suppressNextTerminalEventBySession.set(Q,"run.start.reply");let Y;try{Y=await wS($,J,{sessionId:Q,prompt:W,mode:PS(Z.mode),delivery:Z.delivery==="queue"||Z.delivery==="steer"?Z.delivery:void 0,userImages:Array.isArray(j?.userImages)?j.userImages:void 0,userFiles:X,timeoutMs:f},f)}catch(H){if($.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q);if(d1(H))return qS(J,Q,H);throw $.publish($.buildEvent("run.failed",{reason:"error",error:H instanceof Error?H.message:String(H)},Q)),H}if(Y){let H=await o0($,Q),B=MS(Y);if($.publish($.buildEvent(TS(Y.finishReason),{reason:Y.finishReason,...B?{error:B}:{},result:Y,...H?{snapshot:H}:{}},Q)),$.suppressNextTerminalEventBySession.get(Q)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(Q)}else $.suppressNextTerminalEventBySession.delete(Q);let V=await o0($,Q);return l(J,Y||V?{...Y?{result:Y}:{},...V?{snapshot:V}:{}}:void 0)}async function KK($,J){let Q=h0(J),Z=typeof J.payload?.reason==="string"?J.payload.reason:"Run was aborted before pending approval or capability request was resolved.";z3($,(W)=>W.sessionId===Q,Z);try{await $.sessionHost.abort(Q,J.payload?.reason)}catch(W){c("warn","run.abort_failed",{command:J.command,requestId:J.requestId,clientId:J.clientId,sessionId:Q,error:W})}finally{C$($,(W)=>W.sessionId===Q,Z)}return l(J,{applied:!0})}async function GK($,J){let Q=n8(J.payload?.payload);if(!Q)return v(J,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(Q),l(J,{applied:!0})}async function FK($,J){switch(J.type){case"chunk":return;case"agent_event":await SS($,J);return;case"hook":if(J.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:J.payload.toolName},J.payload.sessionId));else if(J.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:J.payload.toolName},J.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:J.payload.sessionId,summary:J.payload.summary,lastEvent:J.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,J.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:J.payload.sessionId,prompts:J.payload.prompts},J.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:J.payload.id,prompt:J.payload.prompt,delivery:J.payload.delivery,attachmentCount:J.payload.attachmentCount};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:J.payload.sessionId,prompt:Q},J.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:J.payload.sessionId,snapshot:J.payload.snapshot},J.payload.sessionId));return;case"status":{let[Q,Z]=await Promise.all([s0($,J.payload.sessionId),o0($,J.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...Z?{snapshot:Z}:{}},J.payload.sessionId));return}case"ended":await CS($,J);return;default:return}}async function SS($,J){let{sessionId:Q,event:Z}=J.payload;if(Z.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:Z.iteration},Q));return}if(Z.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:Z.iteration,hadToolCalls:Z.hadToolCalls,toolCallCount:Z.toolCallCount},Q));return}if(Z.type==="content_start"){if(Z.contentType==="text"&&typeof Z.text==="string"&&Z.text.length>0){$.publish($.buildEvent("assistant.delta",{text:Z.text},Q));return}if(Z.contentType==="reasoning"){if(Z.redacted&&!Z.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof Z.reasoning==="string"&&Z.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:Z.reasoning,redacted:Z.redacted===!0},Q));return}if(Z.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:Z.toolCallId,toolName:Z.toolName,input:Z.input},Q));return}}if(Z.type==="content_end"){switch(Z.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:Z.text},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:Z.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:Z.toolCallId,toolName:Z.toolName,output:Z.output,error:Z.error},Q));break}return}if(Z.type==="usage"){let W;try{W=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{W=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:Z.inputTokens,outputTokens:Z.outputTokens,cacheReadTokens:Z.cacheReadTokens??0,cacheWriteTokens:Z.cacheWriteTokens??0,totalCost:Z.cost??0},totals:{inputTokens:Z.totalInputTokens,outputTokens:Z.totalOutputTokens,cacheReadTokens:Z.totalCacheReadTokens??0,cacheWriteTokens:Z.totalCacheWriteTokens??0,totalCost:Z.totalCost??0},usage:W?.usage,aggregateUsage:W?.aggregateUsage,agent:{kind:J.payload.teamRole==="teammate"?"teammate":Z.parentAgentId?"subagent":"lead",agentId:Z.agentId,conversationId:Z.conversationId,parentAgentId:Z.parentAgentId,teamAgentId:J.payload.teamAgentId,teamRole:J.payload.teamRole}},Q));return}if(Z.type==="done")$.publish($.buildEvent("agent.done",{reason:Z.reason,text:Z.text,iterations:Z.iterations,usage:Z.usage},Q))}async function CS($,J){let Q=$.suppressNextTerminalEventBySession.get(J.payload.sessionId),Z=Q===J.payload.reason||Q==="run.start.reply";if(Z)$.suppressNextTerminalEventBySession.delete(J.payload.sessionId);let[W,j]=await Promise.all([s0($,J.payload.sessionId),o0($,J.payload.sessionId)]);if(J.payload.reason==="completed"){let X=await JK(W);$.publish($.buildEvent("ui.notify",X,J.payload.sessionId))}if(Z)return;$.publish($.buildEvent(J.payload.reason==="aborted"?"run.aborted":J.payload.reason==="error"||J.payload.reason==="failed"?"run.failed":"run.completed",{reason:J.payload.reason,...j?{snapshot:j}:{}},J.payload.sessionId))}import{createSessionId as OK,parseRuntimeConfigExtensions as TK}from"@cline/shared";var LK={};w(LK,{SessionVersioningService:()=>y$,SessionVersioningError:()=>k0});var RK={};w(RK,{trimMessagesToCheckpoint:()=>UK,trimMessagesBeforeCheckpoint:()=>T3,readSessionCheckpointHistory:()=>OJ,createRestoredCheckpointMetadata:()=>O3,createCheckpointRestorePlan:()=>M3,applyCheckpointToWorktree:()=>q3});import{execFile as yS}from"node:child_process";import{promisify as ES}from"node:util";var J4=ES(yS);function OJ($){let J=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(J?.history)?J.history:[]).filter((Z)=>!!Z&&typeof Z==="object"&&!Array.isArray(Z)).flatMap((Z)=>{let W=String(Z.ref??"").trim(),j=Number(Z.createdAt??0),X=Number(Z.runCount??0);if(W.length===0||!Number.isFinite(j)||!Number.isInteger(X)||X<1)return[];let f=Z.kind==="stash"||Z.kind==="commit"?Z.kind:void 0;return[{ref:W,createdAt:j,runCount:X,...f?{kind:f}:{}}]})}function O3($,J){let Q=OJ($).filter((W)=>W.runCount<=J),Z=Q.at(-1);return Z?{latest:Z,history:Q}:void 0}function bS($,J){return $.reduce((Q,Z)=>{if(Z.runCount>J)return Q;if(!Q||Z.runCount>Q.runCount)return Z;return Q},void 0)}function DK($,J){let Q=0;for(let Z=0;Z<$.length;Z+=1){let W=$[Z];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===J)return Z}throw Error(`Could not find user message for checkpoint run ${J}`)}function UK($,J){let Q=DK($,J);return $.slice(0,Q+1)}function T3($,J){let Q=DK($,J);return $.slice(0,Q)}function M3($){let J=$.checkpointRunCount;if(!Number.isInteger(J)||J<1)throw Error("checkpointRunCount must be a positive integer");let Q=bS(OJ($.session),J);if(!Q)throw Error(`No checkpoint found at or before run ${J} in session ${$.session.sessionId}`);let Z=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!Z)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:Z,...$.restoreMessages!==!1?{messages:UK($.messages??[],J)}:{}}}async function q3($,J){if((await J4("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await J4("git",["-C",$,"cat-file","-e",`${J.ref}^{commit}`],{windowsHide:!0}),await J4("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await J4("git",["-C",$,"clean","-fd"],{windowsHide:!0}),J.kind==="commit"){await J4("git",["-C",$,"reset","--hard",J.ref],{windowsHide:!0});return}await J4("git",["-C",$,"stash","apply",J.ref],{windowsHide:!0})}class k0 extends Error{code;constructor($,J){super(J);this.code=$;this.name="SessionVersioningError"}}function hS($){let J=$.sessionId.trim();if(!J)throw new k0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new k0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new k0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new k0("invalid_restore","checkpointRunCount must be a positive integer");return J}class y${async restoreCheckpoint($){let J=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,Z=hS({sessionId:$.sessionId,restoreMessages:J,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),W=await $.getSession(Z);if(!W)throw new k0("session_not_found",`Session ${Z} not found`);let j=J?await $.readMessages(Z):void 0;if(J&&j?.length===0)throw new k0("session_messages_not_found",`No messages found for session ${Z}`);let X=M3({session:W,messages:j,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:J});if(Q)await($.applyWorkspaceCheckpoint??q3)(X.cwd,X.checkpoint);let f=F1({session:W,messages:j});if(!J)return{checkpoint:X.checkpoint,sourceSnapshot:f};let Y=O3(W,$.checkpointRunCount),V=$.restore?.omitCheckpointMessageFromSession?T3(j??[],$.checkpointRunCount):X.messages??[],H={sourceSession:W,sourceMessages:j,sourceSnapshot:f,plan:X,restoredCheckpointMetadata:Y,initialMessages:V,restoreMessages:J,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new k0("invalid_restore","start is required when restore.messages is true");let B=$.buildStartInput?await $.buildStartInput(H,$.start):$.start,A=await $.startSession(B),K=$.getStartedSessionId?.(A);if(K)await($.retainCheckpointRefs??LV)(X.cwd,K,Y?.history??[]);let G=K&&$.readRestoredSession?await $.readRestoredSession(K):void 0;return{sessionId:K,startResult:A,messages:X.messages,checkpoint:X.checkpoint,sourceSnapshot:f,...G?{restoredSnapshot:F1({session:G,messages:V})}:{}}}}import{HUB_CHECKPOINT_CAPABILITY as tp,HUB_COMPACTION_CAPABILITY as ep,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as $r,HUB_HOOK_CAPABILITY_PREFIX as Jr,HUB_MISTAKE_LIMIT_CAPABILITY as Qr,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Zr,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Wr,isHubToolExecutorName as kS}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as Vr,HUB_COMPACTION_CAPABILITY as Hr,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Br,HUB_HOOK_CAPABILITY_PREFIX as Ar,HUB_MISTAKE_LIMIT_CAPABILITY as Kr,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Gr,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Fr}from"@cline/shared";var IS=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function S2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function xS($,J){let Q=typeof $.name==="string"?$.name.trim():"",Z=typeof $.description==="string"?$.description:"",W=typeof $.capabilityName==="string"?$.capabilityName.trim():"",j=S2($.inputSchema);if(!Q||!Z||!j||!W||J.has(W))return;return J.add(W),{kind:"tool",capabilityName:W,name:Q,description:Z,inputSchema:j,...S2($.lifecycle)?{lifecycle:S2($.lifecycle)}:{}}}function N3($){if(!Array.isArray($))return[];let J=[],Q=new Set;for(let Z of $){if(!Z||typeof Z!=="object"||Array.isArray(Z))continue;let W=Z,j=W.kind,X=typeof W.capabilityName==="string"?W.capabilityName.trim():"";if(!X||Q.has(X))continue;if(j==="tool"){let f=xS(W,Q);if(f)J.push(f);continue}if(j==="toolExecutor"){let f=W.executor;if(!kS(f))continue;Q.add(X),J.push({kind:"toolExecutor",capabilityName:X,executor:f});continue}if(j==="hook"){let f=typeof W.name==="string"?W.name.trim():"";if(!f)continue;Q.add(X),J.push({kind:"hook",capabilityName:X,name:f});continue}if(j==="compaction"){Q.add(X),J.push({kind:"compaction",capabilityName:X,...S2(W.config)?{config:S2(W.config)}:{}});continue}if(j==="checkpoint"){Q.add(X),J.push({kind:"checkpoint",capabilityName:X,...S2(W.config)?{config:S2(W.config)}:{}});continue}if(j==="mistakeLimit"){Q.add(X),J.push({kind:"mistakeLimit",capabilityName:X});continue}if(j==="userInstructionService")Q.add(X),J.push({kind:"userInstructionService",capabilityName:X})}return J}function _K($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function gS($){return Object.hasOwn($,"update")?$.update:$}function TJ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function mS($){let J=($??[]).map(TJ).filter(Boolean);return J.length>0?new Set(J):void 0}function vS($,J,Q){if(!Q)return!0;let Z=TJ($),W=TJ(J),j=Z.includes(":")?Z.split(":").at(-1)??Z:Z,X=W.includes(":")?W.split(":").at(-1)??W:W;return Q.has(Z)||Q.has(W)||Q.has(j)||Q.has(X)}function P3($,J){let Q=mS(J);return $.records.skill.map((Z)=>({id:Z.id,name:Z.item.name,description:"description"in Z.item&&typeof Z.item.description==="string"?Z.item.description:void 0,disabled:Z.item.disabled===!0,skill:Z.item})).filter((Z)=>vS(Z.id,Z.name,Q))}function zK($,J){let Q=async(Z,W)=>{let j=TJ(Z),f=P3($,J).filter((A)=>A.id===j||TJ(A.name)===j||A.id.endsWith(`:${j}`)).filter((A)=>!A.disabled);if(f.length!==1)return f.length>1?`Skill "${Z}" is ambiguous. Use one of: ${f.map((A)=>A.id).join(", ")}`:`Skill "${Z}" not found.`;let Y=f[0].skill,V=W?.trim(),H=V?`
583
583
  <command-args>${V}</command-args>`:"",B=Y.description?.trim()?`Description: ${Y.description.trim()}
584
584
 
585
585
  `:"";return`<command-name>${Y.name}</command-name>${H}
@@ -587,7 +587,7 @@ ${W}`,$.config.mode)}function GJ($,J){return oN($,J==="plan"?"plan":J==="yolo"?"
587
587
  ${B}${Y.instructions}
588
588
  </command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>P3($,J).map(({skill:Z,...W})=>W),enumerable:!0}),Q}function cS($,J,Q,Z){let W={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},j=async()=>{let X=await Z($,Q.capabilityName,{},J);if(X?.snapshot)W=X.snapshot};return{start:j,stop:()=>{},refreshType:async()=>{await j()},listRecords:(X)=>[...W.records[X]],listRuntimeCommands:()=>[...W.runtimeCommands],resolveRuntimeSlashCommand:(X)=>{if(!X.startsWith("/")||X.length<2)return X;let Y=X.match(/^\/(\S+)/)?.[1];if(!Y)return X;let V=W.runtimeCommands.find((H)=>H.name===Y);return V?`${V.instructions}${X.slice(Y.length+1)}`:X},hasConfiguredSkills:(X)=>P3(W,X).some((f)=>!f.disabled),createSkillsExecutor:(X)=>zK(W,X),createExtension:(X)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[X.includeRules?"rules":void 0,X.registerSkillsTool?"tools":void 0,X.includeSkills||X.includeWorkflows?"commands":void 0].filter((f)=>Boolean(f))},setup(f){if(X.includeRules)f.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>N8(W.records.rule.map((Y)=>Y.item).filter((Y)=>Y.disabled!==!0))});if(X.registerSkillsTool)f.registerTool(v$(zK(W,X.allowedSkillNames)));for(let Y of W.runtimeCommands.filter((V)=>V.kind==="skill"&&X.includeSkills||V.kind==="workflow"&&X.includeWorkflows))f.registerCommand({name:Y.name,description:Y.description,handler:(V)=>{let H=V.trim();return H?`${Y.instructions}
589
589
 
590
- ${H}`:Y.instructions}})}})}}function uS($,J,Q,Z){let W=Q.map((j)=>[j.executor,async(...X)=>{let f=X.at(-1),Y=X.slice(0,-1);return(await Z($,j.capabilityName,{executor:j.executor,args:Y,context:_K(f)},J))?.result}]);return W.length>0?Object.fromEntries(W):void 0}function dS($,J,Q,Z){if(Q.length===0)return;return Q.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema,lifecycle:W.lifecycle,async execute(j,X){return(await Z($,W.capabilityName,{toolName:W.name,input:j,context:_K(X)},J,X.emitUpdate?(Y)=>{X.emitUpdate?.(gS(Y))}:void 0))?.result}}))}function lS($,J,Q,Z){let W=new Map(Q.map((X)=>[X.name,X])),j={};for(let X of IS){let f=W.get(X);if(!f)continue;j[X]=async(Y)=>{return(await Z($,f.capabilityName,{context:Y},J))?.control}}return Object.keys(j).length>0?j:void 0}function w3($){let J=$.contributions.filter((Y)=>Y.kind==="toolExecutor"),Q=$.contributions.filter((Y)=>Y.kind==="tool"),Z=$.contributions.filter((Y)=>Y.kind==="hook"),W=$.contributions.find((Y)=>Y.kind==="compaction"),j=$.contributions.find((Y)=>Y.kind==="checkpoint"),X=$.contributions.find((Y)=>Y.kind==="mistakeLimit"),f=$.contributions.find((Y)=>Y.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:uS($.sessionId,$.targetClientId,J,$.requestCapability),localRuntime:{...Z.length>0?{hooks:lS($.sessionId,$.targetClientId,Z,$.requestCapability)}:{},...Q.length>0?{extraTools:dS($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...W?{compaction:{...$.sessionConfig?.compaction??{},...W.config,compact:async(Y)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:Y},$.targetClientId))?.result}}}:{},...j?{checkpoint:{...$.sessionConfig?.checkpoint??{},...j.config,createCheckpoint:async(Y)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:Y},$.targetClientId))?.result}}}:{},...X?{onConsecutiveMistakeLimitReached:async(Y)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:Y},$.targetClientId))?.result}}:{},...f?{userInstructionService:cS($.sessionId,$.targetClientId,f,$.requestCapability)}:{}}}}var MK="hubCapabilityOwnerClientId";function qK($,J){$[MK]=J}function pS($){let J=$?.[MK];return typeof J==="string"&&J.trim()?J.trim():void 0}async function PK($,J,Q){let Z=performance.now(),W={command:J.command,requestId:J.requestId,clientId:J.clientId,sessionId:J.sessionId};c("info","session.create.begin",W);let j=J.payload&&typeof J.payload==="object"?J.payload:{},X=j.metadata&&typeof j.metadata==="object"?JSON.parse(JSON.stringify(j.metadata)):{},f=j.sessionConfig&&typeof j.sessionConfig==="object"?JSON.parse(JSON.stringify(j.sessionConfig)):void 0,Y=j.runtimeOptions&&typeof j.runtimeOptions==="object"?j.runtimeOptions:{};if(typeof f?.mode==="string")X.mode=f.mode;else if(typeof Y.mode==="string")X.mode=Y.mode;if(typeof f?.systemPrompt==="string")X.systemPrompt=f.systemPrompt;else if(typeof Y.systemPrompt==="string")X.systemPrompt=Y.systemPrompt;if(f?.checkpoint?.enabled===!0)X.checkpointEnabled=!0;else if(Y.checkpointEnabled===!0)X.checkpointEnabled=!0;let V=j.modelSelection&&typeof j.modelSelection==="object"?j.modelSelection:{},H=typeof j.workspaceRoot==="string"&&j.workspaceRoot.trim()?j.workspaceRoot.trim():typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():"";if(!H)return c("warn","session.create.invalid",{...W,reason:"missing_workspace_root"}),v(J,"invalid_session_create","session.create requires workspaceRoot or cwd");let B=J.clientId?.trim()||"hub-client",A=N3(Y.clientContributions);if(c("info","session.create.contributions_parsed",{...W,clientId:B,workspaceRoot:H,cwd:typeof j.cwd==="string"?j.cwd:void 0,contributionCount:A.length}),A.length>0)qK(X,B);let G=(typeof f?.sessionId==="string"?f.sessionId.trim():"")||OK(),R=TK(Y.configExtensions);c("info","session.create.runtime_build.begin",{...W,sessionId:G,configExtensionCount:R?.length??0});let D=w3({sessionId:G,targetClientId:B,contributions:A,sessionConfig:f,requestCapability:$.requestCapability});c("info","session.create.start_session.begin",{...W,sessionId:G,provider:f?.providerId??(typeof V.provider==="string"?V.provider:typeof X.provider==="string"?X.provider:"hub"),model:f?.modelId??(typeof V.model==="string"?V.model:typeof X.model==="string"?X.model:"hub")});let U=await $.sessionHost.startSession({source:typeof X.source==="string"?X.source:void 0,interactive:X.interactive!==!1,sessionMetadata:Object.keys(X).length>0?X:void 0,initialMessages:Array.isArray(j.initialMessages)?j.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:R,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...f??{},sessionId:G,providerId:f?.providerId??(typeof V.provider==="string"?V.provider:typeof X.provider==="string"?X.provider:"hub"),modelId:f?.modelId??(typeof V.model==="string"?V.model:typeof X.model==="string"?X.model:"hub"),apiKey:f?.apiKey??(typeof V.apiKey==="string"?V.apiKey:void 0),cwd:f?.cwd??(typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():H),workspaceRoot:f?.workspaceRoot??H,systemPrompt:f?.systemPrompt??(typeof Y.systemPrompt==="string"?Y.systemPrompt:""),mode:f?.mode??(Y.mode==="plan"||Y.mode==="yolo"?Y.mode:"act"),maxIterations:f?.maxIterations??(typeof Y.maxIterations==="number"?Y.maxIterations:void 0),enableTools:f?.enableTools??Y.enableTools!==!1,enableSpawnAgent:f?.enableSpawnAgent??Y.enableSpawn!==!1,enableAgentTeams:f?.enableAgentTeams??Y.enableTeams!==!1,checkpoint:f?.checkpoint??(Y.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:f?.teamName??(typeof X.teamName==="string"?X.teamName:void 0)},toolPolicies:j.toolPolicies&&typeof j.toolPolicies==="object"&&!Array.isArray(j.toolPolicies)?JSON.parse(JSON.stringify(j.toolPolicies)):Y.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});c("info","session.create.start_session.end",{...W,sessionId:U.sessionId,elapsedMs:Math.round(performance.now()-Z),hasImmediateResult:!!U.result}),L9($,U.sessionId,B,"creator",{interactive:X.interactive!==!1}),c("info","session.create.read_records.begin",{...W,sessionId:U.sessionId});let[F,O]=await Promise.all([s0($,U.sessionId),o0($,U.sessionId)]);if(c("info","session.create.read_records.end",{...W,sessionId:U.sessionId,hasSession:!!F,hasSnapshot:!!O,elapsedMs:Math.round(performance.now()-Z)}),F)$.publish($.buildEvent("session.created",{session:F,...O?{snapshot:O}:{}},U.sessionId));return c("info","session.create.reply",{...W,sessionId:U.sessionId,elapsedMs:Math.round(performance.now()-Z)}),l(J,{session:F,...O?{snapshot:O}:{}})}async function NK($,J,Q){let Z=J.payload&&typeof J.payload==="object"?J.payload:{},W=typeof Z.sessionId==="string"?Z.sessionId.trim():J.sessionId?.trim()||"",j=Z.checkpointRunCount;if(!W)return v(J,"invalid_restore","session.restore requires a session id");let X=Z.restore&&typeof Z.restore==="object"?Z.restore:{},f=X.messages!==!1;if(typeof j!=="number")return v(J,"invalid_restore","checkpointRunCount must be a positive integer");try{let Y=Z.sessionConfig&&typeof Z.sessionConfig==="object"?JSON.parse(JSON.stringify(Z.sessionConfig)):void 0;if(f&&!Y)return v(J,"invalid_restore","sessionConfig is required when restore.messages is true");let V=Z.runtimeOptions&&typeof Z.runtimeOptions==="object"?Z.runtimeOptions:{},H=Z.metadata&&typeof Z.metadata==="object"?JSON.parse(JSON.stringify(Z.metadata)):{};if(typeof Y?.mode==="string")H.mode=Y.mode;else if(typeof V.mode==="string")H.mode=V.mode;if(typeof Y?.systemPrompt==="string")H.systemPrompt=Y.systemPrompt;else if(typeof V.systemPrompt==="string")H.systemPrompt=V.systemPrompt;if(Y?.checkpoint?.enabled===!0)H.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)H.checkpointEnabled=!0;let B=Z.modelSelection&&typeof Z.modelSelection==="object"?Z.modelSelection:{},A=J.clientId?.trim()||"hub-client",K=N3(V.clientContributions);if(K.length>0)qK(H,A);let R=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||OK(),D=TK(V.configExtensions),U=w3({sessionId:R,targetClientId:A,contributions:K,sessionConfig:Y,requestCapability:$.requestCapability}),O=await new y$().restoreCheckpoint({sessionId:W,checkpointRunCount:j,restore:{messages:X.messages,workspace:X.workspace,omitCheckpointMessageFromSession:X.omitCheckpointMessageFromSession===!0},start:Y,cwd:typeof Y?.cwd==="string"&&Y.cwd.trim()||typeof Y?.workspaceRoot==="string"&&Y.workspaceRoot.trim()||void 0,getSession:(P)=>$.sessionHost.getSession(P),readMessages:(P)=>$.sessionHost.readSessionMessages(P),buildStartInput:(P)=>{if(P.restoredCheckpointMetadata)H.checkpoint=P.restoredCheckpointMetadata;let S=typeof Z.workspaceRoot==="string"&&Z.workspaceRoot.trim()?Z.workspaceRoot.trim():typeof Z.cwd==="string"&&Z.cwd.trim()?Z.cwd.trim():P.sourceSession.workspaceRoot||P.sourceSession.cwd;return{source:typeof H.source==="string"?H.source:void 0,interactive:H.interactive!==!1,sessionMetadata:{...H,restoredFromSessionId:W,restoredCheckpointRunCount:j},initialMessages:P.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:D,...U.localRuntime},capabilities:{toolExecutors:U.toolExecutors,requestToolApproval:Q},config:{...Y??{},sessionId:R,providerId:Y?.providerId??(typeof B.provider==="string"?B.provider:P.sourceSession.provider),modelId:Y?.modelId??(typeof B.model==="string"?B.model:P.sourceSession.model),apiKey:Y?.apiKey??(typeof B.apiKey==="string"?B.apiKey:""),cwd:Y?.cwd??P.plan.cwd,workspaceRoot:Y?.workspaceRoot??S,systemPrompt:Y?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:Y?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:Y?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:Y?.enableTools??V.enableTools!==!1,enableSpawnAgent:Y?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:Y?.enableAgentTeams??V.enableTeams!==!1,checkpoint:Y?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:Y?.teamName??(typeof H.teamName==="string"?H.teamName:void 0)},toolPolicies:Z.toolPolicies&&typeof Z.toolPolicies==="object"&&!Array.isArray(Z.toolPolicies)?JSON.parse(JSON.stringify(Z.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(P)=>$.sessionHost.startSession(P),getStartedSessionId:(P)=>P.sessionId,readRestoredSession:(P)=>$.sessionHost.getSession(P)});if(!f)return l(J,{checkpoint:O.checkpoint});let T=O.startResult;if(!T)return v(J,"restore_failed","Checkpoint restore did not start a session");L9($,T.sessionId,A,"creator",{interactive:H.interactive!==!1});let[z,L]=await Promise.all([s0($,T.sessionId),o0($,T.sessionId)]);if(z)$.publish($.buildEvent("session.created",{session:z,...L?{snapshot:L}:{}},T.sessionId));return l(J,{session:z,...L?{snapshot:L}:{},messages:O.messages??[],checkpoint:O.checkpoint})}catch(Y){if(Y instanceof k0)return v(J,Y.code,Y.code==="session_not_found"?`Unknown session: ${W}`:Y.message);return v(J,"restore_failed",Y instanceof Error?Y.message:String(Y))}}async function wK($,J){let Q=h0(J);if(!Q)return v(J,"invalid_session_attach","session.attach requires a session id");L9($,Q,J.clientId?.trim()||"hub-client","participant");let Z=await s0($,Q);if(Z)$.publish($.buildEvent("session.attached",{session:Z},Q));return Z?l(J,{session:Z}):v(J,"session_not_found",`Unknown session: ${Q}`)}async function SK($,J){let Q=h0(J);if(!Q)return v(J,"invalid_session_detach","session.detach requires a session id");let Z=J.clientId?.trim()||"hub-client",[W]=await Promise.all([s0($,Q)]),j=pS(W?.metadata)??Z,X=$.sessionState.get(Q);if(X){if(X.participants.delete(Z),X.createdByClientId===Z)X.createdByClientId=j;if(X.participants.size===0)$.sessionState.delete(Q)}C$($,(V)=>V.sessionId===Q&&V.targetClientId===Z,`Capability owner client ${Z} detached before request was resolved.`);let[f,Y]=await Promise.all([s0($,Q),o0($,Q)]);return $.publish($.buildEvent("session.detached",f?{session:f,...Y?{snapshot:Y}:{},clientId:Z}:{clientId:Z},Q)),l(J)}async function CK($,J){let Q=h0(J),Z=J.payload?.includeSnapshot===!0,[W,j]=await Promise.all([s0($,Q),Z?o0($,Q):Promise.resolve(void 0)]);return W?l(J,{session:W,...j?{snapshot:j}:{}}):v(J,"session_not_found",`Unknown session: ${Q}`)}async function yK($,J){let Q=h0(J);if(!Q)return v(J,"invalid_session_id","session.messages requires a session id");if(!await s0($,Q))return v(J,"session_not_found",`Unknown session: ${Q}`);let W=await $.sessionHost.readSessionMessages(Q);return l(J,{sessionId:Q,messages:W})}async function EK($,J){let Q=typeof J.payload?.limit==="number"?J.payload.limit:200,W=(await $.sessionHost.listSessions(Q)).map((j)=>U9(j,$.sessionState.get(j.sessionId)));return l(J,{sessions:W})}async function bK($,J){let Q=h0(J),Z=R9(J.payload?.metadata),W=await $.sessionHost.updateSession(Q,{metadata:Z}),[j,X]=await Promise.all([s0($,Q),o0($,Q)]);if(j)$.publish($.buildEvent("session.updated",{session:j,...X?{snapshot:X}:{}},Q));return{version:J.version,requestId:J.requestId,ok:W.updated,payload:{updated:W.updated,session:j,...X?{snapshot:X}:{}}}}async function hK($,J){let Q=h0(J),Z=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),l(J,{deleted:Z})}async function kK($,J){let Q=h0(J),Z=$.sessionHost.pendingPrompts;if(!Z)return v(J,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await Z.list({sessionId:Q});return l(J,{sessionId:Q,prompts:W})}async function IK($,J){let Q=h0(J),Z=typeof J.payload?.promptId==="string"?J.payload.promptId.trim():"",W=typeof J.payload?.prompt==="string"?J.payload.prompt:void 0,j=J.payload?.delivery==="queue"||J.payload?.delivery==="steer"?J.payload.delivery:void 0,X=$.sessionHost.pendingPrompts;if(!X)return v(J,"pending_prompts_unavailable","Pending prompt service is not available.");let f=await X.update({sessionId:Q,promptId:Z,prompt:W,delivery:j});return l(J,f)}async function xK($,J){let Q=h0(J),Z=typeof J.payload?.promptId==="string"?J.payload.promptId.trim():"",W=$.sessionHost.pendingPrompts;if(!W)return v(J,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await W.delete({sessionId:Q,promptId:Z});return l(J,j)}function gK($){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 iS=new Set(["skills","workflows","rules","tools","mcp"]);function S3($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function MJ($,J){let Q=$[J];if(Q===void 0)return;if(typeof Q!=="string")throw Error(`settings payload '${J}' must be a string.`);return Q}function nS($,J){let Q=$[J];if(Q===void 0)return;if(typeof Q!=="boolean")throw Error(`settings payload '${J}' must be a boolean.`);return Q}function mK($){if($===void 0)return{};if(!S3($))throw Error("settings.list payload must be an object.");return{cwd:MJ($,"cwd"),workspaceRoot:MJ($,"workspaceRoot"),availabilityContext:S3($.availabilityContext)?$.availabilityContext:void 0}}function aS($){if(!S3($))throw Error("settings.toggle payload must be an object.");let{type:J}=$;if(typeof J!=="string"||!iS.has(J))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...mK($),type:J,id:MJ($,"id"),path:MJ($,"path"),name:MJ($,"name"),enabled:nS($,"enabled")}}class Q4{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=rS("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new z1({sessionService:new L1(new U1),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:(J)=>this.publish(J),buildEvent:w2,requestCapability:(J,Q,Z,W,j)=>WK(this.ctx,J,Q,Z,W,j)},this.schedules=new o8({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(J,Q)=>{let Z=J==="schedule.execution.completed"?"schedule.execution_completed":J==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!Z)return;this.publish(w2(Z,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new s8(this.schedules),this.settings=$.settingsService??new O$,$.cronOptions)this.cronService=new $J({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((J)=>{FK(this.ctx,J).catch((Q)=>{_3("session event handling failed",Q),z9(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Q,severity:"error",handled:!0,context:{eventType:J.type,sessionId:J.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())L3(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(C$(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 J=await this.dispatchCommand($);return this.captureFailedReply($,J),J}catch(J){throw z9(this.options.telemetry,{component:"core",operation:"hub.command",error:J,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),J}}async dispatchCommand($){switch($.command){case"client.register":return YK(this.ctx,$);case"client.update":return VK(this.ctx,$);case"client.unregister":return HK(this.ctx,$,(J)=>{this.listeners.delete(J),this.detachClientFromSessions(J)});case"client.list":return BK(this.ctx,$);case"session.create":return await PK(this.ctx,$,(J)=>R3(this.ctx,J));case"session.restore":return await NK(this.ctx,$,(J)=>R3(this.ctx,J));case"session.attach":return await wK(this.ctx,$);case"session.detach":return await SK(this.ctx,$);case"session.get":return await CK(this.ctx,$);case"session.messages":return await yK(this.ctx,$);case"session.list":return await EK(this.ctx,$);case"session.update":return await bK(this.ctx,$);case"session.pending_prompts":return await kK(this.ctx,$);case"session.update_pending_prompt":return await IK(this.ctx,$);case"session.remove_pending_prompt":return await xK(this.ctx,$);case"session.delete":return await hK(this.ctx,$);case"session.hook":return await GK(this.ctx,$);case"run.start":case"session.send_input":return await AK(this.ctx,$);case"run.abort":return await KK(this.ctx,$);case"capability.request":return await XK(this.ctx,$);case"approval.respond":return await QK(this.ctx,$);case"capability.respond":return fK(this.ctx,$);case"capability.progress":return jK(this.ctx,$);case"ui.notify":return this.publish(w2("ui.notify",$.payload??{})),l($);case"ui.show_window":return this.publish(w2("ui.show_window",$.payload??{})),l($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);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 J=await this.scheduleCommands.handleCommand($);if(J.ok){let Q=gK($.command);if(Q)this.publish(w2(Q,J.payload))}return J}}}captureFailedReply($,J){if(J.ok||!J.error||!sS(J.error.code))return;z9(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(J.error.message),severity:J.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:J.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let J=await this.settings.list(mK($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:J}}}catch(J){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:J instanceof Error?J.message:String(J)}}}}async handleSettingsToggle($){try{let J=await this.settings.toggle(aS($.payload));return this.publish(w2("settings.changed",{types:J.changedTypes,snapshot:J.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:J.snapshot,changedTypes:J.changedTypes}}}catch(J){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:J instanceof Error?J.message:String(J)}}}}subscribe($,J,Q){let Z=this.listeners.get($)??new Set,W={sessionId:Q?.sessionId,listener:J};return Z.add(W),this.listeners.set($,Z),()=>{let j=this.listeners.get($);if(!j)return;if(j.delete(W),j.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[J,Q]of this.sessionState.entries())if(Q.participants.delete($),Q.participants.size===0)this.sessionState.delete(J);C$(this.ctx,(J)=>J.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let J of this.listeners.values())for(let Q of J){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(Z){_3(`listener threw while publishing ${$.event}`,Z),z9(this.options.telemetry,{component:"core",operation:"hub.publish",error:Z,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function sS($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as $C}from"node:crypto";import JC from"node:http";import QC from"node:net";import{URL as uK}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as dK,HUB_CAPABILITIES as ZC,isHubProtocolCompatible as WC,MAX_CLIENT_HUB_PROTOCOL_VERSION as lK,MIN_CLIENT_HUB_PROTOCOL_VERSION as pK}from"@cline/shared";import{WebSocketServer as jC}from"ws";import{captureSdkError as vK,HUB_COMMAND_SLOW_LOG_MS as oS,resolveHubCommandTimeoutMs as tS,safeJsonParse as eS}from"@cline/shared";function C3($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function cK($,J,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:J,message:Q}}}class qJ{transport;telemetry;constructor($,J){this.transport=$;this.telemetry=J}attach($){let J=new Map,Q=new Set,Z=!1,W=(Y)=>{try{$.send(JSON.stringify(Y))}catch(V){console.error(`[hub] failed to send websocket frame: ${V instanceof Error?V.stack||V.message:String(V)}`)}},j=(Y)=>{W({kind:"event",envelope:Y})},X=async(Y)=>{try{let V=JSON.parse(Y.data);switch(V.kind){case"command":{let H=performance.now(),B=!1,A=C3(V);c("info","command.start",A);let K=setTimeout(()=>{if(B)return;c("warn","command.slow",{...A,elapsedMs:Math.round(performance.now()-H)})},oS),G=this.transport.command(V.envelope);G.then((T)=>{if(!B)return;c(T.ok?"warn":"error","command.late_end",{...A,elapsedMs:Math.round(performance.now()-H),ok:T.ok,errorCode:T.error?.code,errorMessage:T.error?.message})},(T)=>{if(!B)return;c("error","command.late_error",{...A,elapsedMs:Math.round(performance.now()-H),error:T})});let R=!1,D,U,F=tS(V.envelope.command,V.envelope.timeoutMs);try{U=F===null?await G:await Promise.race([G,new Promise((T)=>{D=setTimeout(()=>{R=!0,vK(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${V.envelope.command} did not complete within ${F}ms.`),severity:"error",handled:!0,context:{...A,timeoutMs:F}}),T(cK(V,"hub_command_timeout",`Hub command ${V.envelope.command} did not complete within ${F}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${V.envelope.requestId}.`))},F)})])}catch(T){if(clearTimeout(K),D)clearTimeout(D);throw T}if(B=R,clearTimeout(K),D)clearTimeout(D);let O=Math.round(performance.now()-H);if(R)c("error","command.timeout",{...A,durationMs:O,timeoutMs:F});else c(U.ok?"info":"warn","command.end",{...A,durationMs:O,ok:U.ok,errorCode:U.error?.code,errorMessage:U.error?.message});if(V.envelope.command==="client.register"&&U.ok){let z=(V.envelope.payload??{}).clientId?.trim()||V.envelope.clientId?.trim();if(z)Q.add(z)}else if(V.envelope.command==="client.unregister"&&U.ok){let T=V.envelope.clientId?.trim();if(T)Q.delete(T)}W({kind:"reply",envelope:U});break}case"stream.subscribe":{let H=`${V.clientId}:${V.sessionId??"*"}`;if(J.has(H))break;let B=await this.transport.subscribe(V.clientId,j,{sessionId:V.sessionId});J.set(H,B);break}case"stream.unsubscribe":{let H=`${V.clientId}:${V.sessionId??"*"}`;J.get(H)?.(),J.delete(H);break}case"reply":case"event":break}}catch(V){let H=typeof Y.data==="string"?eS(Y.data):void 0;if(!H||H.kind!=="command"){c("error","rejected malformed websocket frame",{error:V});return}c("error","command.error",{...C3(H),error:V}),vK(this.telemetry,{component:"core",operation:"hub.websocket_command",error:V,severity:"error",handled:!0,context:C3(H)}),W({kind:"reply",envelope:cK(H,"command_failed",V instanceof Error?V.message:"Unknown hub error")})}},f=()=>{if(Z)return;Z=!0;for(let Y of J.values())Y();J.clear();for(let Y of Q)this.transport.command({version:"v1",command:"client.unregister",clientId:Y});Q.clear(),$.removeEventListener("message",X),$.removeEventListener("close",f)};return $.addEventListener("message",X),$.addEventListener("close",f),f}}class PJ{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,J,Q){return this.transport.subscribe($,J,Q)}}function XC($){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((J)=>Buffer.from(J))).toString();return String($)}function fC($){return{send(J){$.send(J)},addEventListener(J,Q){if(J==="message"){$.on("message",(Z)=>{Q({data:XC(Z)})});return}$.on("close",Q)},removeEventListener(){}}}function YC($){try{$.write(`HTTP/1.1 400 Bad Request\r
590
+ ${H}`:Y.instructions}})}})}}function uS($,J,Q,Z){let W=Q.map((j)=>[j.executor,async(...X)=>{let f=X.at(-1),Y=X.slice(0,-1);return(await Z($,j.capabilityName,{executor:j.executor,args:Y,context:_K(f)},J))?.result}]);return W.length>0?Object.fromEntries(W):void 0}function dS($,J,Q,Z){if(Q.length===0)return;return Q.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema,lifecycle:W.lifecycle,async execute(j,X){return(await Z($,W.capabilityName,{toolName:W.name,input:j,context:_K(X)},J,X.emitUpdate?(Y)=>{X.emitUpdate?.(gS(Y))}:void 0))?.result}}))}function lS($,J,Q,Z){let W=new Map(Q.map((X)=>[X.name,X])),j={};for(let X of IS){let f=W.get(X);if(!f)continue;j[X]=async(Y)=>{return(await Z($,f.capabilityName,{context:Y},J))?.control}}return Object.keys(j).length>0?j:void 0}function w3($){let J=$.contributions.filter((Y)=>Y.kind==="toolExecutor"),Q=$.contributions.filter((Y)=>Y.kind==="tool"),Z=$.contributions.filter((Y)=>Y.kind==="hook"),W=$.contributions.find((Y)=>Y.kind==="compaction"),j=$.contributions.find((Y)=>Y.kind==="checkpoint"),X=$.contributions.find((Y)=>Y.kind==="mistakeLimit"),f=$.contributions.find((Y)=>Y.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:uS($.sessionId,$.targetClientId,J,$.requestCapability),localRuntime:{...Z.length>0?{hooks:lS($.sessionId,$.targetClientId,Z,$.requestCapability)}:{},...Q.length>0?{extraTools:dS($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...W?{compaction:{...$.sessionConfig?.compaction??{},...W.config,compact:async(Y)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:Y},$.targetClientId))?.result}}}:{},...j?{checkpoint:{...$.sessionConfig?.checkpoint??{},...j.config,createCheckpoint:async(Y)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:Y},$.targetClientId))?.result}}}:{},...X?{onConsecutiveMistakeLimitReached:async(Y)=>{return(await $.requestCapability($.sessionId,X.capabilityName,{context:Y},$.targetClientId))?.result}}:{},...f?{userInstructionService:cS($.sessionId,$.targetClientId,f,$.requestCapability)}:{}}}}var MK="hubCapabilityOwnerClientId";function qK($,J){$[MK]=J}function pS($){let J=$?.[MK];return typeof J==="string"&&J.trim()?J.trim():void 0}async function PK($,J,Q){let Z=performance.now(),W={command:J.command,requestId:J.requestId,clientId:J.clientId,sessionId:J.sessionId};c("info","session.create.begin",W);let j=J.payload&&typeof J.payload==="object"?J.payload:{},X=j.metadata&&typeof j.metadata==="object"?JSON.parse(JSON.stringify(j.metadata)):{},f=j.sessionConfig&&typeof j.sessionConfig==="object"?JSON.parse(JSON.stringify(j.sessionConfig)):void 0,Y=j.runtimeOptions&&typeof j.runtimeOptions==="object"?j.runtimeOptions:{};if(typeof f?.mode==="string")X.mode=f.mode;else if(typeof Y.mode==="string")X.mode=Y.mode;if(typeof f?.systemPrompt==="string")X.systemPrompt=f.systemPrompt;else if(typeof Y.systemPrompt==="string")X.systemPrompt=Y.systemPrompt;if(f?.checkpoint?.enabled===!0)X.checkpointEnabled=!0;else if(Y.checkpointEnabled===!0)X.checkpointEnabled=!0;let V=j.modelSelection&&typeof j.modelSelection==="object"?j.modelSelection:{},H=typeof j.workspaceRoot==="string"&&j.workspaceRoot.trim()?j.workspaceRoot.trim():typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():"";if(!H)return c("warn","session.create.invalid",{...W,reason:"missing_workspace_root"}),v(J,"invalid_session_create","session.create requires workspaceRoot or cwd");let B=J.clientId?.trim()||"hub-client",A=N3(Y.clientContributions);if(c("info","session.create.contributions_parsed",{...W,clientId:B,workspaceRoot:H,cwd:typeof j.cwd==="string"?j.cwd:void 0,contributionCount:A.length}),A.length>0)qK(X,B);let G=(typeof f?.sessionId==="string"?f.sessionId.trim():"")||OK(),R=TK(Y.configExtensions);c("info","session.create.runtime_build.begin",{...W,sessionId:G,configExtensionCount:R?.length??0});let D=w3({sessionId:G,targetClientId:B,contributions:A,sessionConfig:f,requestCapability:$.requestCapability});c("info","session.create.start_session.begin",{...W,sessionId:G,provider:f?.providerId??(typeof V.provider==="string"?V.provider:typeof X.provider==="string"?X.provider:"hub"),model:f?.modelId??(typeof V.model==="string"?V.model:typeof X.model==="string"?X.model:"hub")});let U=await $.sessionHost.startSession({source:typeof X.source==="string"?X.source:void 0,interactive:X.interactive!==!1,sessionMetadata:Object.keys(X).length>0?X:void 0,initialMessages:Array.isArray(j.initialMessages)?j.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:R,...D.localRuntime},capabilities:{toolExecutors:D.toolExecutors,requestToolApproval:Q},config:{...f??{},sessionId:G,providerId:f?.providerId??(typeof V.provider==="string"?V.provider:typeof X.provider==="string"?X.provider:"hub"),modelId:f?.modelId??(typeof V.model==="string"?V.model:typeof X.model==="string"?X.model:"hub"),apiKey:f?.apiKey??(typeof V.apiKey==="string"?V.apiKey:void 0),cwd:f?.cwd??(typeof j.cwd==="string"&&j.cwd.trim()?j.cwd.trim():H),workspaceRoot:f?.workspaceRoot??H,systemPrompt:f?.systemPrompt??(typeof Y.systemPrompt==="string"?Y.systemPrompt:""),mode:f?.mode??(Y.mode==="plan"||Y.mode==="yolo"?Y.mode:"act"),maxIterations:f?.maxIterations??(typeof Y.maxIterations==="number"?Y.maxIterations:void 0),enableTools:f?.enableTools??Y.enableTools!==!1,enableSpawnAgent:f?.enableSpawnAgent??Y.enableSpawn!==!1,enableAgentTeams:f?.enableAgentTeams??Y.enableTeams!==!1,checkpoint:f?.checkpoint??(Y.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:f?.teamName??(typeof X.teamName==="string"?X.teamName:void 0)},toolPolicies:j.toolPolicies&&typeof j.toolPolicies==="object"&&!Array.isArray(j.toolPolicies)?JSON.parse(JSON.stringify(j.toolPolicies)):Y.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});c("info","session.create.start_session.end",{...W,sessionId:U.sessionId,elapsedMs:Math.round(performance.now()-Z),hasImmediateResult:!!U.result}),LQ($,U.sessionId,B,"creator",{interactive:X.interactive!==!1}),c("info","session.create.read_records.begin",{...W,sessionId:U.sessionId});let[F,O]=await Promise.all([s0($,U.sessionId),o0($,U.sessionId)]);if(c("info","session.create.read_records.end",{...W,sessionId:U.sessionId,hasSession:!!F,hasSnapshot:!!O,elapsedMs:Math.round(performance.now()-Z)}),F)$.publish($.buildEvent("session.created",{session:F,...O?{snapshot:O}:{}},U.sessionId));return c("info","session.create.reply",{...W,sessionId:U.sessionId,elapsedMs:Math.round(performance.now()-Z)}),l(J,{session:F,...O?{snapshot:O}:{}})}async function NK($,J,Q){let Z=J.payload&&typeof J.payload==="object"?J.payload:{},W=typeof Z.sessionId==="string"?Z.sessionId.trim():J.sessionId?.trim()||"",j=Z.checkpointRunCount;if(!W)return v(J,"invalid_restore","session.restore requires a session id");let X=Z.restore&&typeof Z.restore==="object"?Z.restore:{},f=X.messages!==!1;if(typeof j!=="number")return v(J,"invalid_restore","checkpointRunCount must be a positive integer");try{let Y=Z.sessionConfig&&typeof Z.sessionConfig==="object"?JSON.parse(JSON.stringify(Z.sessionConfig)):void 0;if(f&&!Y)return v(J,"invalid_restore","sessionConfig is required when restore.messages is true");let V=Z.runtimeOptions&&typeof Z.runtimeOptions==="object"?Z.runtimeOptions:{},H=Z.metadata&&typeof Z.metadata==="object"?JSON.parse(JSON.stringify(Z.metadata)):{};if(typeof Y?.mode==="string")H.mode=Y.mode;else if(typeof V.mode==="string")H.mode=V.mode;if(typeof Y?.systemPrompt==="string")H.systemPrompt=Y.systemPrompt;else if(typeof V.systemPrompt==="string")H.systemPrompt=V.systemPrompt;if(Y?.checkpoint?.enabled===!0)H.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)H.checkpointEnabled=!0;let B=Z.modelSelection&&typeof Z.modelSelection==="object"?Z.modelSelection:{},A=J.clientId?.trim()||"hub-client",K=N3(V.clientContributions);if(K.length>0)qK(H,A);let R=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||OK(),D=TK(V.configExtensions),U=w3({sessionId:R,targetClientId:A,contributions:K,sessionConfig:Y,requestCapability:$.requestCapability}),O=await new y$().restoreCheckpoint({sessionId:W,checkpointRunCount:j,restore:{messages:X.messages,workspace:X.workspace,omitCheckpointMessageFromSession:X.omitCheckpointMessageFromSession===!0},start:Y,cwd:typeof Y?.cwd==="string"&&Y.cwd.trim()||typeof Y?.workspaceRoot==="string"&&Y.workspaceRoot.trim()||void 0,getSession:(P)=>$.sessionHost.getSession(P),readMessages:(P)=>$.sessionHost.readSessionMessages(P),buildStartInput:(P)=>{if(P.restoredCheckpointMetadata)H.checkpoint=P.restoredCheckpointMetadata;let S=typeof Z.workspaceRoot==="string"&&Z.workspaceRoot.trim()?Z.workspaceRoot.trim():typeof Z.cwd==="string"&&Z.cwd.trim()?Z.cwd.trim():P.sourceSession.workspaceRoot||P.sourceSession.cwd;return{source:typeof H.source==="string"?H.source:void 0,interactive:H.interactive!==!1,sessionMetadata:{...H,restoredFromSessionId:W,restoredCheckpointRunCount:j},initialMessages:P.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:D,...U.localRuntime},capabilities:{toolExecutors:U.toolExecutors,requestToolApproval:Q},config:{...Y??{},sessionId:R,providerId:Y?.providerId??(typeof B.provider==="string"?B.provider:P.sourceSession.provider),modelId:Y?.modelId??(typeof B.model==="string"?B.model:P.sourceSession.model),apiKey:Y?.apiKey??(typeof B.apiKey==="string"?B.apiKey:""),cwd:Y?.cwd??P.plan.cwd,workspaceRoot:Y?.workspaceRoot??S,systemPrompt:Y?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:Y?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),maxIterations:Y?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:Y?.enableTools??V.enableTools!==!1,enableSpawnAgent:Y?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:Y?.enableAgentTeams??V.enableTeams!==!1,checkpoint:Y?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:Y?.teamName??(typeof H.teamName==="string"?H.teamName:void 0)},toolPolicies:Z.toolPolicies&&typeof Z.toolPolicies==="object"&&!Array.isArray(Z.toolPolicies)?JSON.parse(JSON.stringify(Z.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(P)=>$.sessionHost.startSession(P),getStartedSessionId:(P)=>P.sessionId,readRestoredSession:(P)=>$.sessionHost.getSession(P)});if(!f)return l(J,{checkpoint:O.checkpoint});let T=O.startResult;if(!T)return v(J,"restore_failed","Checkpoint restore did not start a session");LQ($,T.sessionId,A,"creator",{interactive:H.interactive!==!1});let[z,L]=await Promise.all([s0($,T.sessionId),o0($,T.sessionId)]);if(z)$.publish($.buildEvent("session.created",{session:z,...L?{snapshot:L}:{}},T.sessionId));return l(J,{session:z,...L?{snapshot:L}:{},messages:O.messages??[],checkpoint:O.checkpoint})}catch(Y){if(Y instanceof k0)return v(J,Y.code,Y.code==="session_not_found"?`Unknown session: ${W}`:Y.message);return v(J,"restore_failed",Y instanceof Error?Y.message:String(Y))}}async function wK($,J){let Q=h0(J);if(!Q)return v(J,"invalid_session_attach","session.attach requires a session id");LQ($,Q,J.clientId?.trim()||"hub-client","participant");let Z=await s0($,Q);if(Z)$.publish($.buildEvent("session.attached",{session:Z},Q));return Z?l(J,{session:Z}):v(J,"session_not_found",`Unknown session: ${Q}`)}async function SK($,J){let Q=h0(J);if(!Q)return v(J,"invalid_session_detach","session.detach requires a session id");let Z=J.clientId?.trim()||"hub-client",[W]=await Promise.all([s0($,Q)]),j=pS(W?.metadata)??Z,X=$.sessionState.get(Q);if(X){if(X.participants.delete(Z),X.createdByClientId===Z)X.createdByClientId=j;if(X.participants.size===0)$.sessionState.delete(Q)}C$($,(V)=>V.sessionId===Q&&V.targetClientId===Z,`Capability owner client ${Z} detached before request was resolved.`);let[f,Y]=await Promise.all([s0($,Q),o0($,Q)]);return $.publish($.buildEvent("session.detached",f?{session:f,...Y?{snapshot:Y}:{},clientId:Z}:{clientId:Z},Q)),l(J)}async function CK($,J){let Q=h0(J),Z=J.payload?.includeSnapshot===!0,[W,j]=await Promise.all([s0($,Q),Z?o0($,Q):Promise.resolve(void 0)]);return W?l(J,{session:W,...j?{snapshot:j}:{}}):v(J,"session_not_found",`Unknown session: ${Q}`)}async function yK($,J){let Q=h0(J);if(!Q)return v(J,"invalid_session_id","session.messages requires a session id");if(!await s0($,Q))return v(J,"session_not_found",`Unknown session: ${Q}`);let W=await $.sessionHost.readSessionMessages(Q);return l(J,{sessionId:Q,messages:W})}async function EK($,J){let Q=typeof J.payload?.limit==="number"?J.payload.limit:200,W=(await $.sessionHost.listSessions(Q)).map((j)=>UQ(j,$.sessionState.get(j.sessionId)));return l(J,{sessions:W})}async function bK($,J){let Q=h0(J),Z=RQ(J.payload?.metadata),W=await $.sessionHost.updateSession(Q,{metadata:Z}),[j,X]=await Promise.all([s0($,Q),o0($,Q)]);if(j)$.publish($.buildEvent("session.updated",{session:j,...X?{snapshot:X}:{}},Q));return{version:J.version,requestId:J.requestId,ok:W.updated,payload:{updated:W.updated,session:j,...X?{snapshot:X}:{}}}}async function hK($,J){let Q=h0(J),Z=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),l(J,{deleted:Z})}async function kK($,J){let Q=h0(J),Z=$.sessionHost.pendingPrompts;if(!Z)return v(J,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await Z.list({sessionId:Q});return l(J,{sessionId:Q,prompts:W})}async function IK($,J){let Q=h0(J),Z=typeof J.payload?.promptId==="string"?J.payload.promptId.trim():"",W=typeof J.payload?.prompt==="string"?J.payload.prompt:void 0,j=J.payload?.delivery==="queue"||J.payload?.delivery==="steer"?J.payload.delivery:void 0,X=$.sessionHost.pendingPrompts;if(!X)return v(J,"pending_prompts_unavailable","Pending prompt service is not available.");let f=await X.update({sessionId:Q,promptId:Z,prompt:W,delivery:j});return l(J,f)}async function xK($,J){let Q=h0(J),Z=typeof J.payload?.promptId==="string"?J.payload.promptId.trim():"",W=$.sessionHost.pendingPrompts;if(!W)return v(J,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await W.delete({sessionId:Q,promptId:Z});return l(J,j)}function gK($){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 iS=new Set(["skills","workflows","rules","tools","mcp"]);function S3($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function MJ($,J){let Q=$[J];if(Q===void 0)return;if(typeof Q!=="string")throw Error(`settings payload '${J}' must be a string.`);return Q}function nS($,J){let Q=$[J];if(Q===void 0)return;if(typeof Q!=="boolean")throw Error(`settings payload '${J}' must be a boolean.`);return Q}function mK($){if($===void 0)return{};if(!S3($))throw Error("settings.list payload must be an object.");return{cwd:MJ($,"cwd"),workspaceRoot:MJ($,"workspaceRoot"),availabilityContext:S3($.availabilityContext)?$.availabilityContext:void 0}}function aS($){if(!S3($))throw Error("settings.toggle payload must be an object.");let{type:J}=$;if(typeof J!=="string"||!iS.has(J))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...mK($),type:J,id:MJ($,"id"),path:MJ($,"path"),name:MJ($,"name"),enabled:nS($,"enabled")}}class Q4{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=rS("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new z1({sessionService:new L1(new U1),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:(J)=>this.publish(J),buildEvent:w2,requestCapability:(J,Q,Z,W,j)=>WK(this.ctx,J,Q,Z,W,j)},this.schedules=new o8({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(J,Q)=>{let Z=J==="schedule.execution.completed"?"schedule.execution_completed":J==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!Z)return;this.publish(w2(Z,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new s8(this.schedules),this.settings=$.settingsService??new O$,$.cronOptions)this.cronService=new $J({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((J)=>{FK(this.ctx,J).catch((Q)=>{_3("session event handling failed",Q),zQ(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Q,severity:"error",handled:!0,context:{eventType:J.type,sessionId:J.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())L3(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(C$(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 J=await this.dispatchCommand($);return this.captureFailedReply($,J),J}catch(J){throw zQ(this.options.telemetry,{component:"core",operation:"hub.command",error:J,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),J}}async dispatchCommand($){switch($.command){case"client.register":return YK(this.ctx,$);case"client.update":return VK(this.ctx,$);case"client.unregister":return HK(this.ctx,$,(J)=>{this.listeners.delete(J),this.detachClientFromSessions(J)});case"client.list":return BK(this.ctx,$);case"session.create":return await PK(this.ctx,$,(J)=>R3(this.ctx,J));case"session.restore":return await NK(this.ctx,$,(J)=>R3(this.ctx,J));case"session.attach":return await wK(this.ctx,$);case"session.detach":return await SK(this.ctx,$);case"session.get":return await CK(this.ctx,$);case"session.messages":return await yK(this.ctx,$);case"session.list":return await EK(this.ctx,$);case"session.update":return await bK(this.ctx,$);case"session.pending_prompts":return await kK(this.ctx,$);case"session.update_pending_prompt":return await IK(this.ctx,$);case"session.remove_pending_prompt":return await xK(this.ctx,$);case"session.delete":return await hK(this.ctx,$);case"session.hook":return await GK(this.ctx,$);case"run.start":case"session.send_input":return await AK(this.ctx,$);case"run.abort":return await KK(this.ctx,$);case"capability.request":return await XK(this.ctx,$);case"approval.respond":return await QK(this.ctx,$);case"capability.respond":return fK(this.ctx,$);case"capability.progress":return jK(this.ctx,$);case"ui.notify":return this.publish(w2("ui.notify",$.payload??{})),l($);case"ui.show_window":return this.publish(w2("ui.show_window",$.payload??{})),l($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);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 J=await this.scheduleCommands.handleCommand($);if(J.ok){let Q=gK($.command);if(Q)this.publish(w2(Q,J.payload))}return J}}}captureFailedReply($,J){if(J.ok||!J.error||!sS(J.error.code))return;zQ(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(J.error.message),severity:J.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:J.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let J=await this.settings.list(mK($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:J}}}catch(J){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:J instanceof Error?J.message:String(J)}}}}async handleSettingsToggle($){try{let J=await this.settings.toggle(aS($.payload));return this.publish(w2("settings.changed",{types:J.changedTypes,snapshot:J.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:J.snapshot,changedTypes:J.changedTypes}}}catch(J){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:J instanceof Error?J.message:String(J)}}}}subscribe($,J,Q){let Z=this.listeners.get($)??new Set,W={sessionId:Q?.sessionId,listener:J};return Z.add(W),this.listeners.set($,Z),()=>{let j=this.listeners.get($);if(!j)return;if(j.delete(W),j.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[J,Q]of this.sessionState.entries())if(Q.participants.delete($),Q.participants.size===0)this.sessionState.delete(J);C$(this.ctx,(J)=>J.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let J of this.listeners.values())for(let Q of J){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(Z){_3(`listener threw while publishing ${$.event}`,Z),zQ(this.options.telemetry,{component:"core",operation:"hub.publish",error:Z,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function sS($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as $C}from"node:crypto";import JC from"node:http";import QC from"node:net";import{URL as uK}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as dK,HUB_CAPABILITIES as ZC,isHubProtocolCompatible as WC,MAX_CLIENT_HUB_PROTOCOL_VERSION as lK,MIN_CLIENT_HUB_PROTOCOL_VERSION as pK}from"@cline/shared";import{WebSocketServer as jC}from"ws";import{captureSdkError as vK,HUB_COMMAND_SLOW_LOG_MS as oS,resolveHubCommandTimeoutMs as tS,safeJsonParse as eS}from"@cline/shared";function C3($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function cK($,J,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:J,message:Q}}}class qJ{transport;telemetry;constructor($,J){this.transport=$;this.telemetry=J}attach($){let J=new Map,Q=new Set,Z=!1,W=(Y)=>{try{$.send(JSON.stringify(Y))}catch(V){console.error(`[hub] failed to send websocket frame: ${V instanceof Error?V.stack||V.message:String(V)}`)}},j=(Y)=>{W({kind:"event",envelope:Y})},X=async(Y)=>{try{let V=JSON.parse(Y.data);switch(V.kind){case"command":{let H=performance.now(),B=!1,A=C3(V);c("info","command.start",A);let K=setTimeout(()=>{if(B)return;c("warn","command.slow",{...A,elapsedMs:Math.round(performance.now()-H)})},oS),G=this.transport.command(V.envelope);G.then((T)=>{if(!B)return;c(T.ok?"warn":"error","command.late_end",{...A,elapsedMs:Math.round(performance.now()-H),ok:T.ok,errorCode:T.error?.code,errorMessage:T.error?.message})},(T)=>{if(!B)return;c("error","command.late_error",{...A,elapsedMs:Math.round(performance.now()-H),error:T})});let R=!1,D,U,F=tS(V.envelope.command,V.envelope.timeoutMs);try{U=F===null?await G:await Promise.race([G,new Promise((T)=>{D=setTimeout(()=>{R=!0,vK(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${V.envelope.command} did not complete within ${F}ms.`),severity:"error",handled:!0,context:{...A,timeoutMs:F}}),T(cK(V,"hub_command_timeout",`Hub command ${V.envelope.command} did not complete within ${F}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${V.envelope.requestId}.`))},F)})])}catch(T){if(clearTimeout(K),D)clearTimeout(D);throw T}if(B=R,clearTimeout(K),D)clearTimeout(D);let O=Math.round(performance.now()-H);if(R)c("error","command.timeout",{...A,durationMs:O,timeoutMs:F});else c(U.ok?"info":"warn","command.end",{...A,durationMs:O,ok:U.ok,errorCode:U.error?.code,errorMessage:U.error?.message});if(V.envelope.command==="client.register"&&U.ok){let z=(V.envelope.payload??{}).clientId?.trim()||V.envelope.clientId?.trim();if(z)Q.add(z)}else if(V.envelope.command==="client.unregister"&&U.ok){let T=V.envelope.clientId?.trim();if(T)Q.delete(T)}W({kind:"reply",envelope:U});break}case"stream.subscribe":{let H=`${V.clientId}:${V.sessionId??"*"}`;if(J.has(H))break;let B=await this.transport.subscribe(V.clientId,j,{sessionId:V.sessionId});J.set(H,B);break}case"stream.unsubscribe":{let H=`${V.clientId}:${V.sessionId??"*"}`;J.get(H)?.(),J.delete(H);break}case"reply":case"event":break}}catch(V){let H=typeof Y.data==="string"?eS(Y.data):void 0;if(!H||H.kind!=="command"){c("error","rejected malformed websocket frame",{error:V});return}c("error","command.error",{...C3(H),error:V}),vK(this.telemetry,{component:"core",operation:"hub.websocket_command",error:V,severity:"error",handled:!0,context:C3(H)}),W({kind:"reply",envelope:cK(H,"command_failed",V instanceof Error?V.message:"Unknown hub error")})}},f=()=>{if(Z)return;Z=!0;for(let Y of J.values())Y();J.clear();for(let Y of Q)this.transport.command({version:"v1",command:"client.unregister",clientId:Y});Q.clear(),$.removeEventListener("message",X),$.removeEventListener("close",f)};return $.addEventListener("message",X),$.addEventListener("close",f),f}}class PJ{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,J,Q){return this.transport.subscribe($,J,Q)}}function XC($){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((J)=>Buffer.from(J))).toString();return String($)}function fC($){return{send(J){$.send(J)},addEventListener(J,Q){if(J==="message"){$.on("message",(Z)=>{Q({data:XC(Z)})});return}$.on("close",Q)},removeEventListener(){}}}function YC($){try{$.write(`HTTP/1.1 400 Bad Request\r
591
591
  Connection: close\r
592
592
  Content-Length: 0\r
593
593
  \r
@@ -596,7 +596,7 @@ Connection: close\r
596
596
  Content-Length: 0\r
597
597
  \r
598
598
  `),$.end()}catch{$.destroy()}}function y3($,J){if(!$||!J)return!1;let Q=Buffer.from($,"utf8"),Z=Buffer.from(J,"utf8");return Q.length===Z.length&&$C(Q,Z)}function rK($,J){let Q=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,Z=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",W=`Failed to start hub server on ${J.host}:${J.port}${J.pathname}: ${Z}`,j=Error(Q?`${W} (${Q})`:W);if(Q)$.code=Q,j.code=Q;if($ instanceof Error&&$.stack)j.stack=`${j.name}: ${j.message}
599
- Caused by: ${$.stack}`;return j}async function HC($){return await new Promise((J,Q)=>{let Z=QC.createServer();Z.once("error",Q),Z.listen(0,$,()=>{let W=Z.address();if(!W||typeof W==="string"){Z.close(()=>Q(Error("Failed to resolve free port")));return}let j=W.port;Z.close((X)=>{if(X){Q(X);return}J(j)})})})}function BC($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var E3=new Map,iK="cline-hub-auth.",AC=30000;function aK($){return Array.isArray($)?$.join(","):$??""}function nK($){return $===32||$===9}function _9($){let J=aK($).trim(),Q="bearer";if(J.length<=6||J.slice(0,6).toLowerCase()!=="bearer"||!nK(J.charCodeAt(6)))return null;let Z=7;while(Z<J.length&&nK(J.charCodeAt(Z)))Z+=1;return J.slice(Z).trim()||null}function KC($){for(let J of aK($).split(",")){let Q=J.trim();if(Q.startsWith(iK))return Q.slice(iK.length).trim()||null}return null}async function C2($){let J=$.owner??l1(),Q=$.host??"127.0.0.1",Z=$.pathname??"/hub",W=$.port??h8(),j=W===0?await HC(Q):W,X=j,f=j1(Q,j,Z),Y=nQ(),V=iQ(),H=new Q4($);await H.start();let B=new qJ(new PJ(H),$.telemetry),A=new Set,K=new Date().toISOString(),G={protocolVersion:dK,minClientProtocolVersion:pK,maxClientProtocolVersion:lK,capabilities:ZC,coreVersion:ZJ.version,buildId:Y,pid:process.pid,startedAt:K},R=new Set,D,U,F=async()=>{if(U)return U;return U=(async()=>{if(D)clearInterval(D),D=void 0;for(let L of R)L.terminate?.();R.clear();for(let L of A)L();if(A.clear(),await new Promise((L,P)=>{T.close((S)=>{if(S){P(S);return}L()})}),await new Promise((L,P)=>{O.close((S)=>{if(S){P(S);return}L()})}),await H.stop(),(await G0(J.discoveryPath))?.url===f)await y0(J.discoveryPath)})(),U},O=JC.createServer((z,L)=>{if((z.url??"/")==="/health"){let S=JSON.stringify({ok:!0,protocolVersion:G.protocolVersion,minClientProtocolVersion:G.minClientProtocolVersion,maxClientProtocolVersion:G.maxClientProtocolVersion,coreVersion:G.coreVersion,host:Q,port:X,url:f});L.statusCode=200,L.setHeader("content-type","application/json"),L.end(S);return}if((z.url??"/")==="/status"){if(!y3(_9(z.headers.authorization),V)){L.statusCode=401,L.end("Unauthorized");return}let S=JSON.stringify({hubId:H.getHubId(),...G,authToken:V,host:Q,port:X,url:f,updatedAt:new Date().toISOString()});L.statusCode=200,L.setHeader("content-type","application/json"),L.end(S);return}if((z.url??"/")==="/version"){L.statusCode=200,L.setHeader("content-type","application/json"),L.end(JSON.stringify(G));return}if(new uK(z.url??"/",`http://${Q}:${X}`).pathname==="/shutdown"&&z.method==="POST"){if(!y3(_9(z.headers.authorization),V)){L.statusCode=401,L.end("Unauthorized");return}L.statusCode=202,L.setHeader("content-type","application/json"),L.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{F()});return}L.statusCode=404,L.end("Not found")}),T=new jC({noServer:!0});D=setInterval(()=>{for(let z of R){if(z.isAlive===!1){try{z.terminate?.()}catch{}R.delete(z);continue}z.isAlive=!1;try{z.ping?.()}catch{try{z.terminate?.()}catch{}R.delete(z)}}},AC),O.on("upgrade",(z,L,P)=>{if(new uK(z.url??"/",`http://${Q}:${X}`).pathname!==Z){L.destroy();return}if(!y3(KC(z.headers["sec-websocket-protocol"]),V)){VC(L);return}try{T.handleUpgrade(z,L,P,(b)=>{let u=b;u.isAlive=!0,u.on("pong",()=>{u.isAlive=!0}),R.add(u);let o=B.attach(fC(b));A.add(o),b.once("close",()=>{R.delete(u),o(),A.delete(o)})})}catch{YC(L)}});try{await new Promise((z,L)=>{O.once("error",(P)=>{L(rK(P,{host:Q,port:j,pathname:Z}))}),O.listen(j,Q,()=>{let P=O.address();if(!P||typeof P==="string"){L(rK(Error("Failed to resolve hub port"),{host:Q,port:j,pathname:Z}));return}X=P.port,f=j1(Q,X,Z),z()})})}catch(z){if(D)clearInterval(D),D=void 0;throw await H.stop().catch(()=>{return}),z}return await aQ(J.discoveryPath,{hubId:H.getHubId(),protocolVersion:dK,minClientProtocolVersion:pK,maxClientProtocolVersion:lK,capabilities:[...G.capabilities],coreVersion:ZJ.version,buildId:Y,authToken:V,host:Q,port:X,url:f,pid:process.pid,startedAt:K,updatedAt:K}),{host:Q,port:X,url:f,authToken:V,close:F}}async function O9($){let J=$.owner??l1(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=$.host??"127.0.0.1",W=$.port??h8(),j=$.pathname??"/hub",X=j1(Z,W,j),f=J.discoveryPath,Y=(H)=>{if(!Q)P$(H.url,H.authToken);return H},V=E3.get(f);if(V){let H=await V;if(H.url===X)return Y({server:H,url:H.url,authToken:H.authToken,action:"reuse"})}return await sQ(J.discoveryPath,async()=>{let H=await G0(J.discoveryPath);if(H?.url&&(H.url===X||$.allowPortFallback===!0)){let K=await p1(H.url,{authToken:H.authToken});if(K?.url&&WC(K).compatible&&await G1(K.url,{authToken:H.authToken}))return Y({url:K.url,authToken:H.authToken,action:"reuse"})}if(H?.url)await y0(J.discoveryPath);let A=async(K)=>{let G=C2({...K,owner:J});E3.set(f,G);try{let R=await G;return Y({server:R,url:R.url,authToken:R.authToken,action:"started"})}catch(R){throw E3.delete(f),R}};try{return await A($)}catch(K){if(!$.allowPortFallback||!BC(K))throw K;return await A({...$,port:0})}})}function oK(){return sK()==="production"?n0():E0()}function GC($){return sK()!=="production"&&!$}async function tK($){let J=i0({host:$.host,port:$.port,pathname:$.pathname});return await C2({...$,...J,owner:oK()})}async function eK($){let J=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=i0({host:$.host,port:$.port,pathname:$.pathname});return await O9({...$,...Q,allowPortFallback:$.allowPortFallback??GC(J),owner:oK()})}M9();var QG={};w(QG,{registerRemoteConfigSessionBlobUpload:()=>N9,readRemoteConfigSessionBlobUploadMetadata:()=>b3,prepareRemoteConfigCoreIntegration:()=>k3,createRemoteConfigSessionMessagesArtifactUploader:()=>h3,buildRemoteConfigSessionBlobUploadMetadata:()=>q9,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>P9});import{buildRemoteConfigSessionBlobUploadMetadata as q9,clearRemoteConfigSessionBlobUpload as FC,createClineTelemetryServiceConfig as DC,createSessionId as UC,createRemoteConfigSessionMessagesArtifactUploader as RC,prepareRemoteConfigRuntime as LC,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as P9,readRemoteConfigSessionBlobUploadMetadata as b3,registerRemoteConfigSessionBlobUpload as N9}from"@cline/shared";function zC($,J){let Q=$.telemetry||J.telemetryService?{...J.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return s1(DC(Q)).telemetry}function h3(){let $=RC();return{async uploadMessagesFile(J){await $.uploadMessagesFile(J)}}}async function k3($){let J=await LC($),Q=zC(J,$),Z=[J.pluginDefinition],W=J.claims?.subject,j=q9(J.bundle?.remoteConfig,W),X;return{prepared:J,extensions:Z,telemetry:Q,applyToStartSessionInput(f){let Y=f.config.extensions??[],V=f.config.telemetry,H=j?f.config.sessionId?.trim()||UC():f.config.sessionId;if(H&&j)X=H;let B=H&&j?N9(H,J.bundle?.remoteConfig,W):void 0,A=B?{...f.sessionMetadata??{},[P9]:B}:f.sessionMetadata;return{...f,...A?{sessionMetadata:A}:{},config:{...f.config,...H?{sessionId:H}:{},extensions:[...Y,...Z],telemetry:Q??V}}},async dispose(){if(X)FC(X)}}}var VG={};w(VG,{createTeamName:()=>C9,DefaultRuntimeBuilder:()=>j4});import{hasRuntimeConfigExtension as hC}from"@cline/shared";import{nanoid as kC}from"nanoid";W1();var YG={};w(YG,{createLocalTeamStore:()=>m3,SqliteTeamStore:()=>y2,FileTeamStore:()=>NJ});import{appendFileSync as _C,existsSync as Z4,mkdirSync as ZG,readdirSync as OC,readFileSync as WG,renameSync as TC,writeFileSync as MC}from"node:fs";import{join as I3}from"node:path";import{resolveTeamDataDir as qC}from"@cline/shared/storage";function jG(){return new Date().toISOString()}function x3($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function XG($){return{...$,tasks:$.tasks.map((J)=>({...J,createdAt:new Date(J.createdAt),updatedAt:new Date(J.updatedAt)})),mailbox:$.mailbox.map((J)=>({...J,sentAt:new Date(J.sentAt),readAt:J.readAt?new Date(J.readAt):void 0})),missionLog:$.missionLog.map((J)=>({...J,ts:new Date(J.ts)})),runs:($.runs??[]).map((J)=>({...J,startedAt:new Date(J.startedAt),endedAt:J.endedAt?new Date(J.endedAt):void 0,nextAttemptAt:J.nextAttemptAt?new Date(J.nextAttemptAt):void 0,heartbeatAt:J.heartbeatAt?new Date(J.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),finalizedAt:J.finalizedAt?new Date(J.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),reviewedAt:J.reviewedAt?new Date(J.reviewedAt):void 0}))}}class NJ{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??qC()}init(){this.ensureTeamDir()}listTeamNames(){if(!Z4(this.teamDirPath))return[];return OC(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>Z4(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let J=this.readEnvelope($);return J?.teamState?XG(J.teamState):void 0}readHistory($,J=200){let Q=this.historyPath($);if(!Z4(Q))return[];return WG(Q,"utf8").split(`
599
+ Caused by: ${$.stack}`;return j}async function HC($){return await new Promise((J,Q)=>{let Z=QC.createServer();Z.once("error",Q),Z.listen(0,$,()=>{let W=Z.address();if(!W||typeof W==="string"){Z.close(()=>Q(Error("Failed to resolve free port")));return}let j=W.port;Z.close((X)=>{if(X){Q(X);return}J(j)})})})}function BC($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var E3=new Map,iK="cline-hub-auth.",AC=30000;function aK($){return Array.isArray($)?$.join(","):$??""}function nK($){return $===32||$===9}function _Q($){let J=aK($).trim(),Q="bearer";if(J.length<=6||J.slice(0,6).toLowerCase()!=="bearer"||!nK(J.charCodeAt(6)))return null;let Z=7;while(Z<J.length&&nK(J.charCodeAt(Z)))Z+=1;return J.slice(Z).trim()||null}function KC($){for(let J of aK($).split(",")){let Q=J.trim();if(Q.startsWith(iK))return Q.slice(iK.length).trim()||null}return null}async function C2($){let J=$.owner??l1(),Q=$.host??"127.0.0.1",Z=$.pathname??"/hub",W=$.port??h8(),j=W===0?await HC(Q):W,X=j,f=j1(Q,j,Z),Y=n9(),V=i9(),H=new Q4($);await H.start();let B=new qJ(new PJ(H),$.telemetry),A=new Set,K=new Date().toISOString(),G={protocolVersion:dK,minClientProtocolVersion:pK,maxClientProtocolVersion:lK,capabilities:ZC,coreVersion:ZJ.version,buildId:Y,pid:process.pid,startedAt:K},R=new Set,D,U,F=async()=>{if(U)return U;return U=(async()=>{if(D)clearInterval(D),D=void 0;for(let L of R)L.terminate?.();R.clear();for(let L of A)L();if(A.clear(),await new Promise((L,P)=>{T.close((S)=>{if(S){P(S);return}L()})}),await new Promise((L,P)=>{O.close((S)=>{if(S){P(S);return}L()})}),await H.stop(),(await G0(J.discoveryPath))?.url===f)await y0(J.discoveryPath)})(),U},O=JC.createServer((z,L)=>{if((z.url??"/")==="/health"){let S=JSON.stringify({ok:!0,protocolVersion:G.protocolVersion,minClientProtocolVersion:G.minClientProtocolVersion,maxClientProtocolVersion:G.maxClientProtocolVersion,coreVersion:G.coreVersion,host:Q,port:X,url:f});L.statusCode=200,L.setHeader("content-type","application/json"),L.end(S);return}if((z.url??"/")==="/status"){if(!y3(_Q(z.headers.authorization),V)){L.statusCode=401,L.end("Unauthorized");return}let S=JSON.stringify({hubId:H.getHubId(),...G,authToken:V,host:Q,port:X,url:f,updatedAt:new Date().toISOString()});L.statusCode=200,L.setHeader("content-type","application/json"),L.end(S);return}if((z.url??"/")==="/version"){L.statusCode=200,L.setHeader("content-type","application/json"),L.end(JSON.stringify(G));return}if(new uK(z.url??"/",`http://${Q}:${X}`).pathname==="/shutdown"&&z.method==="POST"){if(!y3(_Q(z.headers.authorization),V)){L.statusCode=401,L.end("Unauthorized");return}L.statusCode=202,L.setHeader("content-type","application/json"),L.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{F()});return}L.statusCode=404,L.end("Not found")}),T=new jC({noServer:!0});D=setInterval(()=>{for(let z of R){if(z.isAlive===!1){try{z.terminate?.()}catch{}R.delete(z);continue}z.isAlive=!1;try{z.ping?.()}catch{try{z.terminate?.()}catch{}R.delete(z)}}},AC),O.on("upgrade",(z,L,P)=>{if(new uK(z.url??"/",`http://${Q}:${X}`).pathname!==Z){L.destroy();return}if(!y3(KC(z.headers["sec-websocket-protocol"]),V)){VC(L);return}try{T.handleUpgrade(z,L,P,(b)=>{let u=b;u.isAlive=!0,u.on("pong",()=>{u.isAlive=!0}),R.add(u);let t=B.attach(fC(b));A.add(t),b.once("close",()=>{R.delete(u),t(),A.delete(t)})})}catch{YC(L)}});try{await new Promise((z,L)=>{O.once("error",(P)=>{L(rK(P,{host:Q,port:j,pathname:Z}))}),O.listen(j,Q,()=>{let P=O.address();if(!P||typeof P==="string"){L(rK(Error("Failed to resolve hub port"),{host:Q,port:j,pathname:Z}));return}X=P.port,f=j1(Q,X,Z),z()})})}catch(z){if(D)clearInterval(D),D=void 0;throw await H.stop().catch(()=>{return}),z}return await a9(J.discoveryPath,{hubId:H.getHubId(),protocolVersion:dK,minClientProtocolVersion:pK,maxClientProtocolVersion:lK,capabilities:[...G.capabilities],coreVersion:ZJ.version,buildId:Y,authToken:V,host:Q,port:X,url:f,pid:process.pid,startedAt:K,updatedAt:K}),{host:Q,port:X,url:f,authToken:V,close:F}}async function OQ($){let J=$.owner??l1(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=$.host??"127.0.0.1",W=$.port??h8(),j=$.pathname??"/hub",X=j1(Z,W,j),f=J.discoveryPath,Y=(H)=>{if(!Q)P$(H.url,H.authToken);return H},V=E3.get(f);if(V){let H=await V;if(H.url===X)return Y({server:H,url:H.url,authToken:H.authToken,action:"reuse"})}return await s9(J.discoveryPath,async()=>{let H=await G0(J.discoveryPath);if(H?.url&&(H.url===X||$.allowPortFallback===!0)){let K=await p1(H.url,{authToken:H.authToken});if(K?.url&&WC(K).compatible&&await G1(K.url,{authToken:H.authToken}))return Y({url:K.url,authToken:H.authToken,action:"reuse"})}if(H?.url)await y0(J.discoveryPath);let A=async(K)=>{let G=C2({...K,owner:J});E3.set(f,G);try{let R=await G;return Y({server:R,url:R.url,authToken:R.authToken,action:"started"})}catch(R){throw E3.delete(f),R}};try{return await A($)}catch(K){if(!$.allowPortFallback||!BC(K))throw K;return await A({...$,port:0})}})}function oK(){return sK()==="production"?n0():E0()}function GC($){return sK()!=="production"&&!$}async function tK($){let J=i0({host:$.host,port:$.port,pathname:$.pathname});return await C2({...$,...J,owner:oK()})}async function eK($){let J=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=i0({host:$.host,port:$.port,pathname:$.pathname});return await OQ({...$,...Q,allowPortFallback:$.allowPortFallback??GC(J),owner:oK()})}MQ();var QG={};w(QG,{registerRemoteConfigSessionBlobUpload:()=>NQ,readRemoteConfigSessionBlobUploadMetadata:()=>b3,prepareRemoteConfigCoreIntegration:()=>k3,createRemoteConfigSessionMessagesArtifactUploader:()=>h3,buildRemoteConfigSessionBlobUploadMetadata:()=>qQ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>PQ});import{buildRemoteConfigSessionBlobUploadMetadata as qQ,clearRemoteConfigSessionBlobUpload as FC,createClineTelemetryServiceConfig as DC,createSessionId as UC,createRemoteConfigSessionMessagesArtifactUploader as RC,prepareRemoteConfigRuntime as LC,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as PQ,readRemoteConfigSessionBlobUploadMetadata as b3,registerRemoteConfigSessionBlobUpload as NQ}from"@cline/shared";function zC($,J){let Q=$.telemetry||J.telemetryService?{...J.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return s1(DC(Q)).telemetry}function h3(){let $=RC();return{async uploadMessagesFile(J){await $.uploadMessagesFile(J)}}}async function k3($){let J=await LC($),Q=zC(J,$),Z=[J.pluginDefinition],W=J.claims?.subject,j=qQ(J.bundle?.remoteConfig,W),X;return{prepared:J,extensions:Z,telemetry:Q,applyToStartSessionInput(f){let Y=f.config.extensions??[],V=f.config.telemetry,H=j?f.config.sessionId?.trim()||UC():f.config.sessionId;if(H&&j)X=H;let B=H&&j?NQ(H,J.bundle?.remoteConfig,W):void 0,A=B?{...f.sessionMetadata??{},[PQ]:B}:f.sessionMetadata;return{...f,...A?{sessionMetadata:A}:{},config:{...f.config,...H?{sessionId:H}:{},extensions:[...Y,...Z],telemetry:Q??V}}},async dispose(){if(X)FC(X)}}}var VG={};w(VG,{createTeamName:()=>CQ,DefaultRuntimeBuilder:()=>j4});import{hasRuntimeConfigExtension as hC}from"@cline/shared";import{nanoid as kC}from"nanoid";W1();var YG={};w(YG,{createLocalTeamStore:()=>m3,SqliteTeamStore:()=>y2,FileTeamStore:()=>NJ});import{appendFileSync as _C,existsSync as Z4,mkdirSync as ZG,readdirSync as OC,readFileSync as WG,renameSync as TC,writeFileSync as MC}from"node:fs";import{join as I3}from"node:path";import{resolveTeamDataDir as qC}from"@cline/shared/storage";function jG(){return new Date().toISOString()}function x3($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function XG($){return{...$,tasks:$.tasks.map((J)=>({...J,createdAt:new Date(J.createdAt),updatedAt:new Date(J.updatedAt)})),mailbox:$.mailbox.map((J)=>({...J,sentAt:new Date(J.sentAt),readAt:J.readAt?new Date(J.readAt):void 0})),missionLog:$.missionLog.map((J)=>({...J,ts:new Date(J.ts)})),runs:($.runs??[]).map((J)=>({...J,startedAt:new Date(J.startedAt),endedAt:J.endedAt?new Date(J.endedAt):void 0,nextAttemptAt:J.nextAttemptAt?new Date(J.nextAttemptAt):void 0,heartbeatAt:J.heartbeatAt?new Date(J.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),finalizedAt:J.finalizedAt?new Date(J.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),reviewedAt:J.reviewedAt?new Date(J.reviewedAt):void 0}))}}class NJ{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??qC()}init(){this.ensureTeamDir()}listTeamNames(){if(!Z4(this.teamDirPath))return[];return OC(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>Z4(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let J=this.readEnvelope($);return J?.teamState?XG(J.teamState):void 0}readHistory($,J=200){let Q=this.historyPath($);if(!Z4(Q))return[];return WG(Q,"utf8").split(`
600
600
  `).map((Z)=>Z.trim()).filter(Boolean).map((Z)=>{try{return JSON.parse(Z)}catch{return}}).filter((Z)=>Z!==void 0).reverse().slice(0,J)}loadRuntime($){let J=this.readEnvelope($);return{state:J?.teamState?XG(J.teamState):void 0,teammates:J?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,J){this.ensureTeamSubdir($),_C(this.historyPath($),`${JSON.stringify({ts:jG(),eventType:J.type,payload:J})}
601
601
  `,"utf8")}persistRuntime($,J,Q){this.ensureTeamSubdir($);let Z={version:1,updatedAt:jG(),teamState:J,teammates:Q},W=this.statePath($),j=`${W}.tmp`;MC(j,`${JSON.stringify(Z,null,2)}
602
602
  `,"utf8"),TC(j,W)}markInProgressRunsInterrupted($,J){let Q=this.readEnvelope($);if(!Q?.teamState?.runs?.length)return[];let Z=Q.teamState.runs.filter((j)=>j.status==="queued"||j.status==="running").map((j)=>j.id);if(Z.length===0)return[];let W=new Date;return Q.teamState={...Q.teamState,runs:Q.teamState.runs.map((j)=>j.status==="queued"||j.status==="running"?{...j,status:"interrupted",error:J,endedAt:W}:j)},this.persistRuntime($,Q.teamState,Q.teammates),Z}ensureTeamDir(){if(!Z4(this.teamDirPath))ZG(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let J=I3(this.ensureTeamDir(),x3($));if(!Z4(J))ZG(J,{recursive:!0});return J}statePath($){return I3(this.ensureTeamDir(),x3($),"state.json")}historyPath($){return I3(this.ensureTeamDir(),x3($),"task-history.jsonl")}readEnvelope($){let J=this.statePath($);if(!Z4(J))return;try{let Q=JSON.parse(WG(J,"utf8"));if(Q?.version===1&&Q.teamState)return Q}catch{}return}}import{existsSync as PC,mkdirSync as NC}from"node:fs";import{join as wC}from"node:path";import{safeJsonParse as fG}from"@cline/shared";import{loadSqliteDb as SC,nowIso as g3}from"@cline/shared/db";import{resolveDbDataDir as CC}from"@cline/shared/storage";function yC(){return CC()}function W4($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function EC($){let J=fG($);if(!Array.isArray(J))return[];let Q=[];for(let Z of J){if(!Z||typeof Z!=="object")continue;let W=Z,j=W.agentId,X=W.rolePrompt;if(typeof j!=="string"||!j.trim())continue;if(typeof X!=="string"||!X.trim())continue;let f={agentId:j.trim(),rolePrompt:X};if(typeof W.modelId==="string"&&W.modelId.trim())f.modelId=W.modelId.trim();if(typeof W.maxIterations==="number"&&Number.isFinite(W.maxIterations))f.maxIterations=Math.max(1,Math.floor(W.maxIterations));Q.push(f)}return Q}function bC($){return{...$,tasks:$.tasks.map((J)=>({...J,createdAt:new Date(J.createdAt),updatedAt:new Date(J.updatedAt)})),mailbox:$.mailbox.map((J)=>({...J,sentAt:new Date(J.sentAt),readAt:J.readAt?new Date(J.readAt):void 0})),missionLog:$.missionLog.map((J)=>({...J,ts:new Date(J.ts)})),runs:($.runs??[]).map((J)=>({...J,startedAt:new Date(J.startedAt),endedAt:J.endedAt?new Date(J.endedAt):void 0,nextAttemptAt:J.nextAttemptAt?new Date(J.nextAttemptAt):void 0,heartbeatAt:J.heartbeatAt?new Date(J.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),finalizedAt:J.finalizedAt?new Date(J.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((J)=>({...J,createdAt:new Date(J.createdAt),reviewedAt:J.reviewedAt?new Date(J.reviewedAt):void 0}))}}class y2{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??yC()}init(){this.getRawDb()}ensureTeamDir(){if(!PC(this.teamDirPath))NC(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return wC(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=SC(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
@@ -730,15 +730,15 @@ Caused by: ${$.stack}`;return j}async function HC($){return await new Promise((J
730
730
  reviewed_by = excluded.reviewed_by,
731
731
  reviewed_at = excluded.reviewed_at,
732
732
  version = team_outcome_fragments.version + 1`,[Z,j.outcomeId,j.id,j.section,j.sourceAgentId,j.sourceRunId??null,j.content,j.status,j.reviewedBy??null,j.reviewedAt?j.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,J){let Q=W4($),Z=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[Q]);if(Z.length===0)return[];let W=g3();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
733
- WHERE team_name = ? AND status IN ('queued', 'running')`,[J,W,Q]),Z.map((j)=>j.run_id)}handleTeamEvent($,J){this.appendTeamEvent($,J.type,J)}}function m3($={}){try{let J=new y2($);return J.init(),J}catch{let J=new NJ({teamDir:$.teamDir});return J.init(),J}}function w9($,J){return hC($,J)}function IC($,J){let Q=J?.["*"]??{},Z=J?.[$]??{};return{...Q,...Z}.enabled!==!1}function xC($,J){return $.filter((Q)=>IC(Q.name,J))}function v3($,J){return I1(xC($,J))}var gC={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 mC($){let J=$.trim().toLowerCase();return gC[J]??J}function vC($,J){if(J.tools===void 0)return $;let Q=new Set(J.tools.map(mC));if(J.skills!==void 0)Q.add("skills");return $.filter((Z)=>Q.has(Z.name))}function C9(){return`team-${kC(5)}`}function S9($,J,Q,Z,W,j,X,f){let Y=c0[h1({mode:Q})],V=t2(J,Z,Q,W??o2);return v3(n$({cwd:$,...Y,enableSkills:!!X,...V,executors:{...X?{skills:X}:{},...f??{}}}),j)}function cC($){return S9($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,uC,$.toolExecutors).some((J)=>J.name==="skills")}var uC=async()=>"";async function dC($){let J=K0();if(!c1({filePath:J}))return{tools:[]};let Q=new A2({clientFactory:C8({settingsPath:J})}),Z;try{Z=await B2(Q,{filePath:J})}catch(f){await Q.dispose().catch(()=>{});let Y=f instanceof Error?f.message:String(f);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${Y}`),{tools:[]}}let W=Z.filter((f)=>f.disabled!==!0),j=await Promise.allSettled(W.map((f)=>E8({serverName:f.name,provider:Q}))),X=[];for(let[f,Y]of j.entries())if(Y.status==="fulfilled")X.push(...Y.value);else{let V=Y.reason instanceof Error?Y.reason.message:String(Y.reason);$?.log(`[mcp] Failed to load tools from MCP server "${W[f].name}", skipping: ${V}`)}return{tools:X,shutdown:async()=>{await Q.dispose()}}}function lC($,J){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,J)}catch{}}function pC($){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 rC($){let J=c0[h1({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??J.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??J.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 j4{teamRuntimeEntries=new Map;async build($){let{config:J,hooks:Q,extensions:Z,logger:W,telemetry:j,createSpawnTool:X,onTeamRestored:f,userInstructionService:Y,configExtensions:V,toolExecutors:H}=$,B=$.onTeamEvent??(()=>{}),A=rC(J),K=J.workspaceRoot??J.cwd,G=$.toolPolicies??J.toolPolicies,R=B1(),D=[],U=J.teamName?.trim()||C9(),F=J.sessionId?.trim()||U,O=A.enableSpawnAgent?v8({workspaceRoot:K}):{configs:[],errors:[]},T=O.configs.some((m)=>m.skills!==void 0),z=w9(V,"rules"),L=w9(V,"skills"),P=L||T,S=w9(V,"workflows"),b=w9(V,"plugins"),u=z||L||S,o=!1,J0=Boolean(Y),t=Y,$1;for(let m of O.errors)(W??J.logger)?.log?.(`[agents] Failed to load agent config at ${m.path}: ${m.error.message}`);if(!t&&(u||T))t=_$({skills:P?{workspacePath:K,includePluginSkills:b,pluginSkillDirectories:b?$.pluginSkillDirectories:void 0,pluginPaths:J.pluginPaths,cwd:J.cwd}:{workspacePath:K},rules:{workspacePath:J.cwd},workflows:{workspacePath:J.cwd}});if(t)await t.start().catch(()=>{});let b$=A.enableTools&&L&&Boolean(t)&&t?.hasConfiguredSkills(J.skills)===!0&&cC({cwd:J.cwd,providerId:J.providerId,mode:A.mode,modelId:J.modelId,toolRoutingRules:J.toolRoutingRules,toolPolicies:G,toolExecutors:H}),r=t&&u?t.createExtension({includeRules:z,includeSkills:L,includeWorkflows:S,registerSkillsTool:b$,allowedSkillNames:J.skills}):void 0,O1=r?[...Z??J.extensions??[],r]:Z??J.extensions;if(A.enableTools){if(D.push(...S9(J.cwd,J.providerId,A.mode,J.modelId,J.toolRoutingRules,G,void 0,H)),!A.disableMcpSettingsTools){let m=await dC(J.logger);D.push(...m.tools),$1=m.shutdown}}let C,X0=A.enableAgentTeams?m3():void 0,f0=X0?.loadRuntime(F),w0=f0?.state,k2=f0?.teammates??[],T1=new Map(k2.map((m)=>[m.agentId,m])),Y1=J.sessionId||U,V4,I2=[],bJ=!1,M1=H$({providerId:J.providerId,modelId:J.modelId,cwd:J.cwd,apiKey:J.apiKey??"",baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking,maxIterations:J.maxIterations,hooks:Q,extensions:O1,logger:W??J.logger,telemetry:$.telemetry??J.telemetry,workspaceMetadata:J.workspaceMetadata});if(A.enableSpawnAgent){if(O.configs.length>0)D.push(...v3(c8({configProvider:M1,agents:O.configs,createSubAgentTools:(m)=>A.enableTools?vC(S9(J.cwd,m.providerId??J.providerId,A.mode,m.modelId??J.modelId,J.toolRoutingRules,G,m.skills!==void 0&&t?.createSkillsExecutor?t.createSkillsExecutor(m.skills):void 0,H),m):[],hookErrorMode:J.hookErrorMode,toolPolicies:G,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),G))}if(!this.teamRuntimeEntries.has(Y1))this.teamRuntimeEntries.set(Y1,{delegatedAgentConfigProvider:M1});let hJ=()=>{if(!A.enableAgentTeams)return;let m=this.teamRuntimeEntries.get(Y1)??{delegatedAgentConfigProvider:M1};if(this.teamRuntimeEntries.set(Y1,m),C=m.runtime,!C){if(C=new T2({teamName:U,leadAgentId:J.sessionId||"lead",missionLogIntervalSteps:A.missionLogIntervalSteps,missionLogIntervalMs:A.missionLogIntervalMs,onTeamEvent:(Q0)=>{if(B(Q0),C&&X0){if(Q0.type==="teammate_spawned"&&Q0.teammate?.rolePrompt){let q1={agentId:Q0.agentId,rolePrompt:Q0.teammate.rolePrompt,modelId:Q0.teammate.modelId,maxIterations:Q0.teammate.maxIterations};T1.set(q1.agentId,q1)}if(Q0.type==="teammate_shutdown"&&!pC(Q0.reason))T1.delete(Q0.agentId);X0.handleTeamEvent(F,Q0),X0.persistRuntime(F,C.exportState(),Array.from(T1.values()))}}}),w0)C.hydrateState(w0),bJ=!0;m.runtime=C}if(!o){if(!C)return;o=!0;let Q0=Z8({runtime:C,leadAgentId:J.sessionId||"lead",restoredFromPersistence:Boolean(w0),restoredTeammates:k2,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(q1)=>{I2=q1,V4?.addTools(q1)},createBaseTools:A.enableTools?()=>S9(J.cwd,J.providerId,A.mode,J.modelId,J.toolRoutingRules,G,void 0,H):void 0,teammateConfigProvider:M1});if(bJ)C.recoverActiveRuns("runtime_recovered");if(Q0.restoredFromPersistence)f?.();D.push(...Q0.tools)}return C};if(A.enableSpawnAgent&&X){let m=X();D.push({...m,execute:async(Q0,q1)=>{return hJ(),m.execute(Q0,q1)}})}if(A.enableAgentTeams)hJ();let x2=v3(D,G),QZ=x2.some((m)=>m.name==="submit_and_exit"&&m.lifecycle?.completesRun===!0),kJ=A.enableAgentTeams?()=>{let m=this.teamRuntimeEntries.get(Y1)?.runtime;if(!m)return;let Q0=m.listTasks(),q1=Q0.some((t1)=>t1.status==="in_progress"||t1.status==="pending"),cj=m.listRuns({}),GF=cj.some((t1)=>t1.status==="running"||t1.status==="queued");if(q1||GF){let t1=Q0.filter((x0)=>x0.status==="in_progress"||x0.status==="pending").map((x0)=>`${x0.id} (${x0.status}): ${x0.title}`).join(", "),uj=cj.filter((x0)=>x0.status==="running"||x0.status==="queued").map((x0)=>`${x0.id} (${x0.status})`).join(", "),ZZ=[];if(t1)ZZ.push(`Unfinished tasks: ${t1}`);if(uj)ZZ.push(`Active runs: ${uj}`);return`[SYSTEM] You still have team obligations. ${ZZ.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,KF=QZ?{requireCompletionTool:!0,...kJ?{completionGuard:kJ}:{}}:kJ?{completionGuard:kJ}:void 0;return{tools:x2,logger:W??J.logger,telemetry:j??J.telemetry,teamRuntime:C,teamRestoredFromPersistence:Boolean(w0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(Y1)?.delegatedAgentConfigProvider??M1,extensions:O1,completionPolicy:KF,registerLeadAgent:(m)=>{if(V4=m,I2.length>0)m.addTools(I1(I2,[...R]))},shutdown:async(m)=>{if(lC(C,m),this.teamRuntimeEntries.delete(Y1),await $1?.(),!J0)t?.stop()}}}}var BG={};w(BG,{requestDesktopToolApproval:()=>u3});import{mkdir as iC,readFile as nC,unlink as aC,writeFile as sC}from"node:fs/promises";import{join as HG}from"node:path";function oC($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function tC($){return new Promise((J)=>setTimeout(J,$))}async function c3($){try{await aC($)}catch{}}async function u3($,J={}){let Q=J.approvalDir?.trim(),Z=J.sessionId?.trim();if(!Q||!Z)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await iC(Q,{recursive:!0});let W=oC(`${$.toolCallId}`),j=HG(Q,`${Z}.request.${W}.json`),X=HG(Q,`${Z}.decision.${W}.json`),f=J.nowIso??(()=>new Date().toISOString());await sC(j,`${JSON.stringify({requestId:W,sessionId:Z,createdAt:f(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
734
- `,"utf8");let Y=J.timeoutMs??300000,V=J.pollIntervalMs??200,H=Date.now();while(Date.now()-H<Y){try{let B=await nC(X,"utf8"),A=JSON.parse(B),K={approved:A.approved===!0,reason:typeof A.reason==="string"?A.reason:void 0};return await Promise.all([c3(X),c3(j)]),K}catch{}await tC(V)}return await c3(j),{approved:!1,reason:"Tool approval request timed out"}}W1();var FG={};w(FG,{syncPluginMcpServersToSettings:()=>r3,removePluginMcpServersFromSettings:()=>wJ,disablePluginMcpServersInSettings:()=>i3});import{existsSync as eC,mkdirSync as $y,readFileSync as Jy,writeFileSync as Qy}from"node:fs";import{dirname as KG,isAbsolute as Zy,relative as Wy,resolve as AG}from"node:path";function E2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function y9($,J){let Q=Wy(AG($),AG(J));return Q===""||!Q.startsWith("..")&&!Zy(Q)}function d3($){if(!eC($))return{mcpServers:{}};try{let J=JSON.parse(Jy($,"utf8"));if(E2(J))return J}catch(J){throw Error(`Invalid MCP settings at "${$}": ${J instanceof Error?J.message:String(J)}`)}throw Error(`Invalid MCP settings at "${$}": expected an object`)}function l3($){if(E2($.mcpServers))return{...$.mcpServers};return{}}function p3($,J,Q){$y(KG($),{recursive:!0}),Qy($,`${JSON.stringify({...J,mcpServers:Q},null,2)}
735
- `,"utf8")}function GG($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((J)=>J.trim()).filter((J)=>J.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((J)=>J.trim()).filter((J)=>J.length>0))]}}function b9($){if(!E2($))return;let J=$.metadata;return E2(J)?J:void 0}function E9($,J){let Q=b9($);if(!Q||Q.source!=="plugin")return!1;let Z=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,W=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(J.pluginName&&Z===J.pluginName){if(!J.pluginPath||W===J.pluginPath)return!0}if(W&&J.pluginPath&&(W===J.pluginPath||y9(J.pluginPath,W)||y9(W,J.pluginPath)))return!0;if(Z&&J.pluginNames?.some((j)=>j===Z))return!0;if(W&&J.pluginPaths?.some((j)=>W===j||y9(j,W)||y9(W,j)))return!0;return!1}function jy($){let J=E2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:KG($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...J,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function Xy($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let J=await A8({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],Z=[],W=(J.failures??[]).map((j)=>({pluginPath:j.pluginPath,pluginName:j.pluginName,message:j.message}));for(let j of J.extensions??[]){let X=j.__clinePluginPath;if(!X)continue;if(!j.setup){Q.push({pluginName:j.name,pluginPath:X});continue}let f=[],Y={registerTool:(V)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(V)=>{if(!j.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');f.push(V)}};try{await j.setup(Y,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(V){W.push({pluginPath:X,pluginName:j.name,message:V instanceof Error?V.message:String(V)});continue}Q.push({pluginName:j.name,pluginPath:X});for(let V of f)Z.push({pluginName:j.name,pluginPath:X,server:{...V,metadata:{...V.metadata??{},source:"plugin",pluginName:j.name,pluginPath:X}}})}return{plugins:Q,servers:Z,failures:W}}finally{await J.shutdown().catch(()=>{})}}async function r3($){let J=$.settingsPath??K0(),Q={mutations:[],failures:[]},Z;try{Z=await Xy($)}catch(V){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:V instanceof Error?V.message:String(V)});return Q}Q.failures.push(...Z.failures);let W;try{W=d3(J)}catch(V){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:V instanceof Error?V.message:String(V)});return Q}let j=l3(W),X=new Map,f=new Map;for(let V of Z.plugins)X.set(V.pluginPath,new Set),f.set(V.pluginPath,V.pluginName);let Y=IQ(Z.servers.map((V)=>({server:V.server,owner:V,ownerLabel:V.pluginName})));for(let V of Y){let H=V.owner;if(!X.has(H.pluginPath))X.set(H.pluginPath,new Set);if(V.name)X.get(H.pluginPath)?.add(V.name);if(!V.registration){Q.mutations.push({name:V.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:V.loadError??"invalid MCP server registration"});continue}let B=j[V.registration.name];if(B!==void 0){if(!E9(B,{pluginName:H.pluginName,pluginPath:H.pluginPath})){Q.mutations.push({name:V.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}j[V.registration.name]=jy({registration:V.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:E2(B)?B:void 0}),Q.mutations.push({name:V.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:B===void 0?"created":"updated"})}for(let[V,H]of Object.entries(j)){let B=b9(H),A=typeof B?.pluginPath==="string"?B.pluginPath:"",K=X.get(A);if(K&&E9(H,{pluginPath:A})&&!K.has(V))delete j[V],Q.mutations.push({name:V,pluginName:typeof B?.pluginName==="string"?B.pluginName:f.get(A)??"plugin",pluginPath:A,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((V)=>V.action!=="skipped"))try{p3(J,W,j)}catch(V){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:V instanceof Error?V.message:String(V)})}return Q}function i3($){let J=$.settingsPath??K0(),Q;try{Q=d3(J)}catch{return[]}let Z=l3(Q),W=GG($),j=[];for(let[X,f]of Object.entries(Z)){if(!E2(f)||!E9(f,W))continue;let Y=b9(f);Z[X]={...f,disabled:!0},j.push({name:X,pluginName:typeof Y?.pluginName==="string"?Y.pluginName:"plugin",pluginPath:typeof Y?.pluginPath==="string"?Y.pluginPath:"",action:"disabled"})}if(j.length>0)p3(J,Q,Z);return j}function wJ($){let J=$.settingsPath??K0(),Q;try{Q=d3(J)}catch{return[]}let Z=l3(Q),W=GG($),j=[];for(let[X,f]of Object.entries(Z)){if(!E9(f,W))continue;let Y=b9(f);delete Z[X],j.push({name:X,pluginName:typeof Y?.pluginName==="string"?Y.pluginName:"plugin",pluginPath:typeof Y?.pluginPath==="string"?Y.pluginPath:"",action:"removed"})}if(j.length>0)p3(J,Q,Z);return j}W1();var LG={};w(LG,{uninstallPlugin:()=>Jj});import{existsSync as f4,readdirSync as fy,readFileSync as Yy,rmdirSync as Vy,rmSync as Hy,statSync as By}from"node:fs";import{basename as t0,dirname as E$,extname as Ay,isAbsolute as Ky,join as o1,relative as Gy,resolve as X4,sep as n3}from"node:path";import{discoverPluginModulePaths as Fy,resolvePluginConfigSearchPaths as Dy}from"@cline/shared/storage";var e3="_installed",Uy="package",Ry=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function a3($){return $.trim().toLowerCase()}function f1($,J){let Q=J?.trim();if(!Q)return;$.add(Q)}function Ly($){return $.replace(/-[0-9a-f]{12}$/i,"")}function s3($){let J=Ay($);return J?$.slice(0,-J.length):$}function o3($){if(!f4($))return;try{let J=JSON.parse(Yy($,"utf8"));return typeof J.name==="string"?J.name.trim():void 0}catch{return}}function $j($,J){let Q=Gy(J,$);return Q===""||!Q.startsWith("..")&&!Ky(Q)}function DG($){let Q=X4($).split(n3),Z=Q.lastIndexOf(e3);if(Z<0)return;let W=Q[Z+1];if(!W)return;let j=Ry.get(W)??1,X=Z+2+j;if(Q.length<X)return;let f=Q.slice(0,X).join(n3)||n3;return f4(f)?f:void 0}function h9($){try{return fy($,{withFileTypes:!0})}catch{return[]}}function zy($){let J=o1($,e3);if(!f4(J))return[];let Q=[];for(let Z of h9(J)){if(!Z.isDirectory())continue;let W=o1(J,Z.name);if(Z.name==="git"){for(let j of h9(W)){if(!j.isDirectory())continue;let X=o1(W,j.name);for(let f of h9(X))if(f.isDirectory())Q.push(o1(X,f.name))}continue}for(let j of h9(W))if(j.isDirectory())Q.push(o1(W,j.name))}return Q.sort((Z,W)=>Z.localeCompare(W))}function UG($){try{return Fy($)}catch{return[]}}function t3($){let J=UG($),Q=new Set;f1(Q,t0($)),f1(Q,Ly(t0($))),f1(Q,o3(o1($,"package.json"))),f1(Q,o3(o1($,Uy,"package.json")));for(let Z of J)f1(Q,t0(Z)),f1(Q,s3(t0(Z)));return{installPath:$,entryPaths:J,names:[...Q].sort((Z,W)=>Z.localeCompare(W)),installed:!0}}function _y($,J){let Q=X4($),Z=J.find((X)=>$j(Q,X));if(!Z)return;let W=E$(Q);while(W!==Z&&W!==E$(W)){if(f4(o1(W,"package.json")))return W;W=E$(W)}let j=t0(Q);if((j==="index.ts"||j==="index.js")&&E$(Q)!==Z)return E$(Q);return Q}function RG($,J){let Q=_y($,J);if(!Q)return;let Z=new Set;return f1(Z,t0($)),f1(Z,s3(t0($))),f1(Z,t0(Q)),f1(Z,s3(t0(Q))),f1(Z,o3(o1(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...Z].sort((W,j)=>W.localeCompare(j)),installed:!1}}function Oy($){let J=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return Dy(J).filter((Q)=>f4(Q))}function Ty($){let J=new Map;for(let Q of $){for(let Z of zy(Q))J.set(Z,t3(Z));for(let Z of UG(Q)){let W=DG(Z);if(W){if(!J.has(W))J.set(W,t3(W));continue}let j=RG(Z,$);if(j)J.set(j.installPath,j)}}return[...J.values()].sort((Q,Z)=>Q.installPath.localeCompare(Z.installPath))}function My($,J){let Q=a3(J);if(!Q)return!1;if(a3($.installPath)===Q)return!0;return $.names.some((Z)=>a3(Z)===Q)}function qy($,J,Q){let Z=X4($);for(let j of J){if($j(Z,j.installPath))return j;if(j.entryPaths.some((X)=>X4(X)===Z))return j}let W=DG(Z);if(W)return t3(W);if(f4(Z))return RG(Z,Q);return}function Py($){let J=M0(),Q=J.disabledPlugins;if(!Q?.length)return;let Z=Q.filter((W)=>{let j=X4(W);if($j(j,$.installPath))return!1;return!$.entryPaths.some((X)=>X4(X)===j)});if(Z.length===Q.length)return;k1({...J,disabledPlugins:Z})}function Ny($){let J=E$($);while(J!==E$(J)&&t0(J)!==e3){try{Vy(J)}catch{return}J=E$(J)}}function wy($){return`${$.names[0]??t0($.installPath)} at ${$.installPath}`}async function Jj($){let J=Oy($),Q=Ty(J),Z=$.path?.trim(),W=$.name?.trim(),j;if(Z){if(j=qy(Z,Q,J),!j)throw Error(`No plugin found at ${Z}`)}else{if(!W)throw Error("plugin uninstall requires a plugin name");let f=Q.filter((Y)=>My(Y,W));if(f.length===0)throw Error(`No plugin found matching "${W}"`);if(f.length>1)throw Error(`Multiple plugins match "${W}": ${f.map(wy).join(", ")}`);j=f[0]}let X=By(j.installPath,{throwIfNoEntry:!1});if(!X)throw Error(`Plugin install path does not exist: ${j.installPath}`);if(wJ({pluginPaths:[j.installPath,...j.entryPaths],pluginNames:j.names}),Hy(j.installPath,{recursive:X.isDirectory(),force:!0}),Py(j),j.installed)Ny(j.installPath);return{name:W||j.names[0]||t0(j.installPath),installPath:j.installPath,removedPaths:[j.installPath],entryPaths:j.entryPaths}}var mG={};w(mG,{updateLocalProvider:()=>u9,saveLocalProviderSettings:()=>Vj,saveLocalProviderOAuthCredentials:()=>Kj,resolveLocalClineAuthToken:()=>Fj,refreshProviderModelsFromSource:()=>Hj,normalizeOAuthProvider:()=>Bj,loginLocalProvider:()=>Aj,loginAndSaveLocalProviderOAuthCredentials:()=>Gj,listLocalProviders:()=>fj,getLocalProviderModels:()=>Yj,ensureCustomProvidersLoaded:()=>m9,deleteLocalProvider:()=>d9,addLocalProvider:()=>Xj});import*as N0 from"@cline/llms";import{existsSync as Sy,mkdirSync as Cy,readFileSync as yy,writeFileSync as Ey}from"node:fs";import{mkdir as by,readFile as hy,writeFile as ky}from"node:fs/promises";import{dirname as Qj,join as Iy}from"node:path";import*as I0 from"@cline/llms";import{ModelCapabilitySchema as xy,ProviderCapabilitySchema as gy,ProviderClientSchema as my,ProviderProtocolSchema as vy}from"@cline/shared";import{z as n}from"zod";var cy=n.object({id:n.string().optional(),name:n.string().optional(),maxTokens:n.number().optional(),contextWindow:n.number().optional(),maxInputTokens:n.number().optional(),capabilities:n.array(xy).optional(),supportsVision:n.boolean().optional(),supportsAttachments:n.boolean().optional(),supportsReasoning:n.boolean().optional()}).passthrough(),uy=n.object({name:n.string(),baseUrl:n.string(),defaultModelId:n.string().optional(),protocol:vy.optional(),client:my.optional(),capabilities:n.array(gy).optional(),modelsSourceUrl:n.string().optional()}).passthrough(),zG=n.object({provider:uy.optional(),models:n.record(n.string(),cy).optional()}).passthrough(),_G=n.object({version:n.literal(1),providers:n.record(n.string(),zG)}),dy=n.object({version:n.literal(1),providers:n.record(n.string(),n.unknown())}),k9=new Set;function OG($){return $.split(/[-_]/).filter(Boolean).map((J)=>J.charAt(0).toUpperCase()+J.slice(1)).join(" ")}function b2($){return Iy(Qj($.getFilePath()),"models.json")}function I9(){return{version:1,providers:{}}}function TG($){let J=dy.safeParse($);if(!J.success)return I9();let Q={};for(let[Z,W]of Object.entries(J.data.providers)){let j=zG.safeParse(W);if(j.success)Q[Z]=j.data}return{version:1,providers:Q}}function Zj($){if(!Sy($))return I9();try{let J=yy($,"utf8");return TG(JSON.parse(J))}catch{}return I9()}async function Y4($){try{let J=await hy($,"utf8");return TG(JSON.parse(J))}catch{}return I9()}function MG($,J){Cy(Qj($),{recursive:!0});let Q=_G.parse(J);Ey($,`${JSON.stringify(Q,null,2)}
736
- `,"utf8")}async function x9($,J){await by(Qj($),{recursive:!0});let Q=_G.parse(J);await ky($,`${JSON.stringify(Q,null,2)}
737
- `,"utf8")}function qG($,J){return{id:$,name:J.name??$,supportsAttachments:J.capabilities?.includes("files"),supportsVision:J.capabilities?.includes("images"),supportsReasoning:J.capabilities?.includes("reasoning")||J.thinkingConfig!=null}}function PG($){if(!$||$.length===0)return;let J=new Set;if($.includes("reasoning"))J.add("reasoning");if($.includes("prompt-cache"))J.add("prompt-cache");if($.includes("tools"))J.add("tools");return J.size>0?[...J]:void 0}function NG($){let J=new Set;if(!$||$.length===0)return[...J];if($.includes("streaming"))J.add("streaming");if($.includes("tools"))J.add("tools");if($.includes("reasoning"))J.add("reasoning");if($.includes("prompt-cache"))J.add("prompt-cache");if($.includes("vision"))J.add("images"),J.add("files");return[...J]}function ly($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function wG($,J){return $??J??"openai-chat"}function SG($,J,Q){return $??Q??(J==="openai-responses"?"openai":"openai-compatible")}function CG($,J,Q){let Z=new Set(J?.capabilities??Q??[]);if(J?.supportsVision)Z.add("images");if(J?.supportsAttachments)Z.add("files");if(J?.supportsReasoning)Z.add("reasoning");return{id:$,name:J?.name??$,maxTokens:J?.maxTokens,contextWindow:J?.contextWindow,maxInputTokens:J?.maxInputTokens,capabilities:Z.size>0?[...Z]:void 0}}function py($,J){for(let[Q,Z]of Object.entries(J??{})){let W=Z.id?.trim()||Q.trim();if(!W)continue;I0.registerModel($,W,CG(W,Z))}}function ry($,J,Q){return{...J??{},id:$,name:J?.name??$,capabilities:J?.capabilities??Q}}function iy($){return Object.assign({},...I0.resolveProviderModelCatalogKeys($).map((Q)=>I0.getGeneratedModelsForProvider(Q)))}function ny($){let J=$.provider.trim();if(!J||I0.isBuiltInProviderId(J))return;let Q=$.baseUrl?.trim();if(!Q)return;let Z=I0.MODEL_COLLECTIONS_BY_PROVIDER_ID[J],W=iy(J),j=NG($.capabilities),X=j.length>0?j:void 0,f=$.model?.trim(),Y={...W,...Z?.models??{}};if(f)Y[f]=ry(f,Y[f],X);let V=Object.keys(Y).filter(Boolean),H=f||V[0];if(!H)return;let B=wG($.protocol,Z?.provider.protocol),A=SG($.client,B,Z?.provider.client);I0.registerProvider({provider:{id:J,name:Z?.provider.name??OG(J),description:Z?.provider.description,protocol:B,client:A,baseUrl:Q,modelsSourceUrl:Z?.provider.modelsSourceUrl,defaultModelId:H,capabilities:PG($.capabilities)??Z?.provider.capabilities,source:"file"},models:Y})}function g9($){for(let J of Object.values($.providers))ny(J.settings)}function SJ($,J){let Q=J.models??{};if(!ly(J.provider)){py($,Q);return}let Z=NG(J.provider.capabilities),W=Object.entries(Q).map(([V,H])=>({id:H.id?.trim()||V.trim(),model:H})).filter(({id:V})=>V.length>0),j=J.provider.defaultModelId?.trim()||W[0]?.id||"default",X=wG(J.provider.protocol,void 0),f=SG(J.provider.client,X,void 0),Y=Object.fromEntries(W.map(({id:V,model:H})=>[V,{...CG(V,H,Z.length>0?Z:void 0),status:"active"}]));I0.registerProvider({provider:{id:$,name:J.provider.name.trim()||OG($),protocol:X,client:f,baseUrl:J.provider.baseUrl,modelsSourceUrl:J.provider.modelsSourceUrl,defaultModelId:j,capabilities:PG(J.provider.capabilities),source:"file"},models:Y})}function yG($){let J=b2($);if(k9.has(J))return;let Q=Zj(J);for(let[Z,W]of Object.entries(Q.providers))SJ(Z,W);k9.add(J)}async function m9($){let J=b2($);if(k9.has(J))return;let Q=await Y4(J);for(let[Z,W]of Object.entries(Q.providers))SJ(Z,W);k9.add(J)}var ay="cline-pass";function sy($){return $.apiKey??$.auth?.apiKey}function oy($){return($.auth?.accessToken?.trim()??"").length>0}function bG($){return $.split(/[-_]/).filter(Boolean).map((J)=>J.charAt(0).toUpperCase()+J.slice(1)).join(" ")}function ty($){let J=$.split(/\s+/).filter(Boolean);if(J.length===0)return"?";if(J.length===1)return J[0].slice(0,2).toUpperCase();return`${J[0][0]}${J[1][0]}`.toUpperCase()}function ey($){let J=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let Z of $)Q=Q*31+Z.charCodeAt(0)>>>0;return J[Q%J.length]}function hG($){return Object.entries($).sort(([J],[Q])=>J.localeCompare(Q)).map(([J,Q])=>qG(J,Q))}async function $E($,J){let Q=await N0.getModelsForProvider($);if(!J)return Q;let Z=await L6($,{loadPrivateOnAuth:!0,failOnError:!1},J);return Z?.knownModels?{...Q,...Z.knownModels}:Q}function Wj($){return[...new Set(($??[]).map((J)=>J.trim()).filter(Boolean))]}function JE($){if(!$?.length)return;return[...new Set($)]}function QE($,J){return JE([...$??[],...J??[]])}function ZE($){let J=$?.popularRank;return typeof J==="number"&&Number.isFinite(J)?J:Number.MAX_SAFE_INTEGER}function WE($){if(!$||typeof $!=="object")return!1;let J=$;return typeof J.path==="string"&&J.path.trim().length>0&&typeof J.label==="string"&&J.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(J.type))}function jE($){let J=$?.configFields;if(!Array.isArray(J))return;return J.filter(WE)}var v9={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},EG={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function XE($){if(!$)return[v9];if($.source!=="system")return $.baseUrl?[v9,EG]:[v9];let J=[];if($.env?.length)J.push(v9);if($.baseUrl)J.push(EG);return J}function fE($,J){return J.split(".").reduce((Q,Z)=>{if(!Q||typeof Q!=="object")return;return Q[Z]},$)}function YE($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function VE($,J,Q){if(!$?.length)return;let Z={};for(let W of $){let X=YE(W.path==="baseUrl"&&J?.baseUrl===void 0?Q?.baseUrl:fE(J,W.path))??W.defaultValue;if(X!==void 0)Z[W.path]=X}return Z}function kG($){let J=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return J.length>0?Object.fromEntries(J):void 0}function jj($,J){let Q=J?.includes("vision")??!1,Z=J?.includes("reasoning")??!1;return Object.fromEntries($.map((W)=>[W,{id:W,name:W,supportsVision:Q,supportsAttachments:Q,supportsReasoning:Z}]))}async function IG($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let J=$.modelsSourceUrl?await n5($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...J])]}function xG($,J){let Q=$.read(),Z=!1;if(Q.providers[J])delete Q.providers[J],Z=!0;if(Q.lastUsedProvider===J)delete Q.lastUsedProvider,Z=!0;if(Z)$.write(Q);N0.unregisterProvider(J)}async function Xj($,J){let Q=J.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let Z=J.baseUrl.trim(),W=J.apiKey?.trim()??"";if(!Z&&!W){let G=b2($);if((await Y4(G)).providers[Q]){let D=await d9($,{providerId:Q});return{providerId:Q,settingsPath:D.settingsPath,modelsPath:D.modelsPath,modelsCount:0}}return xG($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:G,modelsCount:0}}if(N0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let j=J.name.trim();if(!j)throw Error("name is required");if(!Z)throw Error("baseUrl is required");let X=Wj(J.models),f=J.modelsSourceUrl?.trim(),Y=await IG({providerId:Q,explicitModels:X,modelsSourceUrl:f,shouldRecompute:!0});if(Y.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let V=J.defaultModelId?.trim()&&Y.includes(J.defaultModelId.trim())?J.defaultModelId.trim():Y[0],H=J.capabilities?.length?[...new Set(J.capabilities)]:void 0,B=kG(J.headers);$.saveProviderSettings({provider:Q,apiKey:W||void 0,baseUrl:Z,headers:B,timeout:J.timeoutMs,model:V,protocol:J.protocol,client:J.client},{setLastUsed:!1});let A=b2($),K=await Y4(A);return K.providers[Q]={provider:{name:j,baseUrl:Z,defaultModelId:V,protocol:J.protocol,client:J.client,capabilities:H,modelsSourceUrl:f},models:jj(Y,H)},await x9(A,K),SJ(Q,K.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:Y.length}}async function u9($,J){let Q=J.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let Z=b2($),W=await Y4(Z),j=W.providers[Q];if(!j){let T=$.getProviderSettings(Q);if(!T)throw Error(`provider "${Q}" does not exist`);let z=J.modelsSourceUrl?.trim(),L=Wj(J.models)[0]??T.model?.trim();if(!L&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);j={provider:{name:J.name?.trim()||bG(Q),baseUrl:J.baseUrl?.trim()??T.baseUrl?.trim()??"",defaultModelId:L,protocol:T.protocol,client:T.client,capabilities:T.capabilities},models:L?jj([L],T.capabilities):{}}}if(!j.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let X=J.name?.trim()??j.provider.name.trim();if(!X)throw Error("name is required");let f=J.baseUrl?.trim()??j.provider.baseUrl.trim();if(!f)throw Error("baseUrl is required");let Y=J.capabilities===void 0?j.provider.capabilities:J.capabilities===null?void 0:[...new Set(J.capabilities)],V=J.protocol===void 0?j.provider.protocol:J.protocol??void 0,H=J.client===void 0?j.provider.client:J.client??void 0,B=Wj(J.models),A=J.modelsSourceUrl===void 0?j.provider.modelsSourceUrl:J.modelsSourceUrl?.trim()||void 0,K=J.models!==void 0||J.modelsSourceUrl!==void 0&&!!A,G=Object.keys(j.models??{}).map((T)=>T.trim()).filter(Boolean),R=await IG({providerId:Q,explicitModels:B,modelsSourceUrl:A,fallbackModelIds:G,shouldRecompute:K});if(R.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let D=J.defaultModelId===void 0?j.provider.defaultModelId?.trim():J.defaultModelId?.trim(),U=D&&R.includes(D)?D:R[0],O={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:f,model:U};if(V)O.protocol=V;else delete O.protocol;if(H)O.client=H;else delete O.client;if(J.apiKey!==void 0){let T=J.apiKey?.trim()??"";if(T)O.apiKey=T;else delete O.apiKey}if(J.headers!==void 0){let T=kG(J.headers);if(T)O.headers=T;else delete O.headers}if(J.timeoutMs!==void 0)if(typeof J.timeoutMs==="number")O.timeout=J.timeoutMs;else delete O.timeout;return $.saveProviderSettings(O,{setLastUsed:!1}),W.providers[Q]={provider:{name:X,baseUrl:f,defaultModelId:U,protocol:V,client:H,capabilities:Y,modelsSourceUrl:A},models:jj(R,Y)},await x9(Z,W),SJ(Q,W.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:Z,modelsCount:R.length}}async function d9($,J){let Q=J.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let Z=b2($),W=await Y4(Z);if(!W.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete W.providers[Q],await x9(Z,W),N0.unregisterProvider(Q),xG($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:Z}}async function fj($,J={}){let Q=$.read(),Z=N0.getProviderIds(),W=await Promise.all(Z.map(async(X)=>{let[f,Y]=await Promise.all([N0.getProvider(X),N0.getModelsForProvider(X)]),V=hG(Y),H=Q.providers[X]?.settings,B=f?.name??bG(X),A=QE(f?.capabilities,H?.capabilities),K=jE(f?.metadata)??XE(f);return{provider:{id:X,name:B,models:V.length,color:ey(X),letter:ty(B),enabled:Boolean(H),apiKey:H?sy(H):void 0,oauthAccessTokenPresent:H?oy(H):void 0,baseUrl:H?.baseUrl??f?.baseUrl,defaultModelId:f?.defaultModelId,protocol:H?.protocol??f?.protocol,client:H?.client??f?.client,capabilities:A,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:K,configValues:VE(K,H,f),modelList:V},rank:ZE(f?.metadata)}}));W.sort((X,f)=>{if(X.rank!==f.rank)return X.rank-f.rank;return X.provider.name.localeCompare(f.provider.name)||X.provider.id.localeCompare(f.provider.id)});let j=W.map((X)=>X.provider);if(J.isClinePassEnabled!==!0)j=j.filter((X)=>X.id!==ay);return{providers:j,settingsPath:$.getFilePath()}}async function Yj($,J){let Q=$.trim(),Z=await $E(Q,J),W=hG(Z);return{providerId:Q,models:W}}function c9($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function gG($,J){if(!c9(J))return c9($)?{...$}:void 0;let Q=c9($)?{...$}:{};for(let[Z,W]of Object.entries(J)){if(W==null||W===""){delete Q[Z];continue}if(c9(W)){let j=gG(Q[Z],W);if(j&&Object.keys(j).length>0)Q[Z]=j;else delete Q[Z];continue}Q[Z]=W}return Object.keys(Q).length>0?Q:void 0}function Vj($,J){let Q=J.providerId.trim();if(J.enabled===!1){let j=$.read();if(delete j.providers[Q],j.lastUsedProvider===Q)delete j.lastUsedProvider;return $.write(j),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let W={...$.getProviderSettings(Q)??{},provider:Q};for(let j of["apiKey","baseUrl","model","region"])if(Object.hasOwn(J,j)&&typeof J[j]==="string")if(J[j].trim().length===0)delete W[j];else W[j]=J[j];for(let j of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(J,j))W[j]=J[j];for(let j of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(J,j)&&J[j]!=null){let X=gG(W[j],J[j]);if(X)W[j]=X;else delete W[j]}return $.saveProviderSettings(W,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function Hj($,J){let Q=J.trim(),Z=$.getProviderSettings(Q),j=N0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,X=Z?.baseUrl?.trim()||j?.baseUrl?.trim(),f=a5(X,j?.baseUrl,j?.modelsSourceUrl);if(!Z||!j||!X||!f)return{providerId:Q,refreshed:!1};let Y=await u9($,{providerId:Q,name:j.name,baseUrl:X,apiKey:Z.apiKey,headers:Z.headers??null,timeoutMs:Z.timeout??null,modelsSourceUrl:f,protocol:Z.protocol??j.protocol??null,client:Z.client??j.client??null,capabilities:Z.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:Y.modelsCount}}function Bj($){let J=$.trim().toLowerCase(),Q=Z0(J);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function Aj($,J,Q,Z){let W=Z0($);if(!W)throw Error(`provider "${$}" does not support OAuth login`);let j=M8({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return W.login({settings:J,callbacks:j,telemetry:Z})}function Kj($,J,Q,Z,W){return x$({manager:$,providerId:J,settings:Q,credentials:Z,setLastUsed:W?.setLastUsed})}async function Gj($,J,Q,Z){let W=M8({onPrompt:async(j)=>j.defaultValue??"",openUrl:Q,onOpenUrlError:({error:j})=>{throw j instanceof Error?j:Error(String(j))}});return z4($,J,{callbacks:W,telemetry:Z})}function Fj($){let J=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return J&&J.length>0?J:void 0}var vG={};w(vG,{getProviderConfigFields:()=>Dj});import*as l9 from"@cline/llms";var HE=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],BE={"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 AE($,J){let Q={};for(let Z of HE){let W=$[Z],j=J[Z];if(W||j)Q[Z]={...W,...j}}return Q}function KE($){let J=BE[$.providerId];if(!J)return $;return{...$,description:J.description??$.description,fields:J.mode==="replace"?J.fields:AE($.fields,J.fields)}}var GE=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function FE($,J){if(!J?.provider.baseUrl)return!1;if(J.provider.source!=="system")return!0;return GE.has($)}function Dj($){let J=l9.normalizeProviderId($);if(I$(J))return{providerId:J,authMethod:"oauth",fields:{}};let Q=l9.MODEL_COLLECTIONS_BY_PROVIDER_ID[J];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:J,authMethod:"local",fields:{}};let Z=Q?.provider.baseUrl,W={apiKey:{}};if(FE(J,Q))W.baseUrl={defaultValue:Z};return KE({providerId:J,authMethod:"api-key",fields:W})}var lG={};w(lG,{resolveLegacyClineAuth:()=>Lj,migrateLegacyProviderSettings:()=>CJ});import{existsSync as DE,readFileSync as UE}from"node:fs";import{dirname as RE,join as Uj}from"node:path";import*as r9 from"@cline/llms";import{resolveClineDataDir as LE}from"@cline/shared/storage";var p9="openai",dG=r9.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,cG=128000;function Lj($){let J=$?.trim();if(!J)return;try{let Q=JSON.parse(J);if(!Q)return;let Z=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:Z,accountId:Q.userInfo?.id}}catch{return}}function E($){let J=$?.trim();return J?J:void 0}function uG($){if(!DE($))return;try{let J=UE($,"utf8"),Q=JSON.parse(J);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function zE($){let J=$.dataDir??LE(),Q=$.globalStatePath??Uj(J,"globalState.json"),Z=$.secretsPath??Uj(J,"secrets.json"),W=uG(Q),j=uG(Z);if(!W&&!j)return;return{globalState:W??{},secrets:j??{}}}function Rj($){if($===p9)return dG;return $}function _E($,J,Q,Z){let W=Q==="plan"?"planMode":"actMode",j=J===Z?E(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,f={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`}[J];return(f?E(typeof $[f]==="string"?$[f]:void 0):void 0)??j}function OE($,J,Q){let Z=Q==="plan"?$.planModeReasoningEffort:$.actModeReasoningEffort,W=Q==="plan"?$.geminiPlanModeThinkingLevel:$.geminiActModeThinkingLevel,j=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,X=(J==="gemini"?W:void 0)??Z,f=X==="none"||X==="low"||X==="medium"||X==="high"?X:void 0,Y=typeof j==="number"&&Number.isInteger(j)&&j>0?j:void 0;if(!f&&Y===void 0)return;return{...f?{effort:f}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function TE($){let J=$["openai-codex-oauth-credentials"];if(!J)return;try{let Q=JSON.parse(J),Z=E(Q.access_token),W=E(Q.refresh_token),j=E(Q.accountId);if(!Z&&!W&&!j)return;return{...Z?{apiKey:Z}:{},auth:{...Z?{accessToken:Z}:{},...W?{refreshToken:W}:{},...j?{accountId:j}:{}}}}catch{return}}function ME($){let J=r9.getGeneratedModelsForProvider($);return Object.keys(J)[0]??void 0}function qE($,J,Q,Z){let W=Rj($),j=E(Z==="plan"?J.planModeApiProvider:J.actModeApiProvider),X=_E(J,$,Z,j)??ME(W),f=OE(J,W,Z),Y=typeof J.requestTimeoutMs==="number"&&Number.isInteger(J.requestTimeoutMs)&&J.requestTimeoutMs>0?J.requestTimeoutMs:void 0,V={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,TE(Q));if($==="cline")try{let U=E(Q["cline:clineAccountId"]);if(U)H.auth={...H.auth??{},...Lj(U)}}catch{}if($===p9&&J.openAiHeaders)H.headers=J.openAiHeaders;if($==="bedrock"){let U=J.awsAuthentication==="profile"||J.awsUseProfile===!0;H.aws={accessKey:E(Q.awsAccessKey),secretKey:E(Q.awsSecretKey),sessionToken:E(Q.awsSessionToken),region:E(J.awsRegion),authentication:J.awsAuthentication,profile:U?E(J.awsProfile):void 0,usePromptCache:J.awsBedrockUsePromptCache,useCrossRegionInference:J.awsUseCrossRegionInference,useGlobalInference:J.awsUseGlobalInference,endpoint:E(J.awsBedrockEndpoint),customModelBaseId:E(Z==="plan"?J.planModeAwsBedrockCustomModelBaseId:J.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")H.gcp={projectId:E(J.vertexProjectId),region:E(J.vertexRegion)};if($===p9&&(J.azureApiVersion||J.azureIdentity!==void 0))H.azure={apiVersion:E(J.azureApiVersion),useIdentity:J.azureIdentity};if($==="sapaicore")H.sap={clientId:E(Q.sapAiCoreClientId),clientSecret:E(Q.sapAiCoreClientSecret),tokenUrl:E(J.sapAiCoreTokenUrl),resourceGroup:E(J.sapAiResourceGroup),deploymentId:E(Z==="plan"?J.planModeSapAiCoreDeploymentId:J.actModeSapAiCoreDeploymentId),useOrchestrationMode:J.sapAiCoreUseOrchestrationMode};if($==="oca"){H.oca={mode:J.ocaMode};let U=E(Q.ocaRefreshToken);if(U)H.auth={...H.auth??{},refreshToken:U}}if($==="qwen")H.apiLine=J.qwenApiLine;if($==="moonshot")H.apiLine=J.moonshotApiLine;if($==="zai")H.apiLine=J.zaiApiLine;if($==="minimax")H.apiLine=J.minimaxApiLine;let B={anthropic:J.anthropicBaseUrl,openai:J.openAiBaseUrl,ollama:J.ollamaBaseUrl,lmstudio:J.lmStudioBaseUrl,litellm:J.liteLlmBaseUrl,gemini:J.geminiBaseUrl,requesty:J.requestyBaseUrl,asksage:J.asksageApiUrl,dify:J.difyBaseUrl,oca:J.ocaBaseUrl,aihubmix:J.aihubmixBaseUrl,sapaicore:J.sapAiCoreBaseUrl},A=E(V[$]),K=E(B[$]),G={provider:W,...A?{apiKey:A}:{},...X?{model:X}:{},...K?{baseUrl:K}:{},...f?{reasoning:f}:{},...Y?{timeout:Y}:{},...H},R=z8.safeParse(G);if(!R.success)return;return Object.keys(G).filter((U)=>U!=="provider").length>0?R.data:void 0}function PE($,J){if($!==dG)return;if(!J.baseUrl||!J.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:J.baseUrl,defaultModelId:J.model},models:{[J.model]:{id:J.model,name:J.model,contextWindow:cG,maxInputTokens:cG,capabilities:["streaming","tools","images"]}}}}function NE($,J){let Q=new Set;for(let W of[$.actModeApiProvider,$.planModeApiProvider]){let j=E(W);if(j)Q.add(j)}if(E(J.apiKey))Q.add("anthropic");if(E(J.openRouterApiKey))Q.add("openrouter");if(E(J.openAiApiKey))Q.add(p9);if(E(J.openAiNativeApiKey))Q.add("openai-native");if(E(J["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(E(J.geminiApiKey))Q.add("gemini");if(E(J.ollamaApiKey))Q.add("ollama");if(E(J.awsAccessKey)||E(J.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||E($.awsProfile))Q.add("bedrock");if(E($.vertexProjectId)||E($.vertexRegion))Q.add("vertex");if(E(J.clineApiKey))Q.add("cline");let Z=Lj(E(J["cline:clineAccountId"]));if(Z?.accessToken||Z?.refreshToken||Z?.accountId)Q.add("cline");if(E(J.ocaApiKey))Q.add("oca");if(E(J.sapAiCoreClientId)||E(J.sapAiCoreClientSecret)||E($.sapAiCoreTokenUrl)||E($.sapAiCoreBaseUrl)||E($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function CJ($){let J=$.providerSettingsManager.read(),Q=zE($);if(!Q)return{migrated:!1,providerCount:Object.keys(J.providers).length,lastUsedProvider:J.lastUsedProvider};let{globalState:Z,secrets:W}=Q,j=Z.mode==="plan"?"plan":"act",X=NE(Z,W),f=z$();f.providers={...J.providers},f.lastUsedProvider=J.lastUsedProvider;let Y=new Date().toISOString(),V=0,H=Uj(RE($.providerSettingsManager.getFilePath()),"models.json"),B=Zj(H),A=0;for(let R of X){let D=Rj(R);if(f.providers[D])continue;let U=qE(R,Z,W,j);if(!U)continue;f.providers[D]={settings:U,updatedAt:Y,tokenSource:"migration"},V+=1;let F=PE(D,U);if(F&&!B.providers[D])B.providers[D]=F,A+=1}if(V===0&&A===0)return{migrated:!1,providerCount:Object.keys(J.providers).length,lastUsedProvider:J.lastUsedProvider};let K=E(j==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),G=K?Rj(K):void 0;if(f.lastUsedProvider=J.lastUsedProvider??(G&&f.providers[G]?G:Object.keys(f.providers)[0]),$.providerSettingsManager.write(f),A>0)MG(H,B);return{migrated:V>0||A>0,providerCount:Object.keys(f.providers).length,lastUsedProvider:f.lastUsedProvider}}M9();O0();G9();var pG={};w(pG,{FileTeamPersistenceStore:()=>i9});import{appendFileSync as wE,existsSync as zj,mkdirSync as SE,readFileSync as CE,renameSync as yE,unlinkSync as EE,writeFileSync as bE}from"node:fs";import{join as _j}from"node:path";import{resolveTeamDataDir as hE}from"@cline/shared/storage";function kE($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class i9{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let J=kE($.teamName),Q=$.baseDir?.trim()||hE();this.dirPath=_j(Q,J),this.statePath=_j(this.dirPath,"state.json"),this.taskHistoryPath=_j(this.dirPath,"task-history.jsonl")}loadState(){if(!zj(this.statePath))return;try{let $=CE(this.statePath,"utf8"),J=JSON.parse($);if(J.version!==1||!J.teamState)return;for(let Q of J.teammates??[])this.teammateSpecs.set(Q.agentId,Q);return yA(J.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 J={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Q=`${this.statePath}.tmp`;bE(Q,`${JSON.stringify(J,null,2)}
733
+ WHERE team_name = ? AND status IN ('queued', 'running')`,[J,W,Q]),Z.map((j)=>j.run_id)}handleTeamEvent($,J){this.appendTeamEvent($,J.type,J)}}function m3($={}){try{let J=new y2($);return J.init(),J}catch{let J=new NJ({teamDir:$.teamDir});return J.init(),J}}function wQ($,J){return hC($,J)}function IC($,J){let Q=J?.["*"]??{},Z=J?.[$]??{};return{...Q,...Z}.enabled!==!1}function xC($,J){return $.filter((Q)=>IC(Q.name,J))}function v3($,J){return I1(xC($,J))}var gC={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 mC($){let J=$.trim().toLowerCase();return gC[J]??J}function vC($,J){if(J.tools===void 0)return $;let Q=new Set(J.tools.map(mC));if(J.skills!==void 0)Q.add("skills");return $.filter((Z)=>Q.has(Z.name))}function CQ(){return`team-${kC(5)}`}function SQ($,J,Q,Z,W,j,X,f){let Y=c0[h1({mode:Q})],V=t2(J,Z,Q,W??o2);return v3(n$({cwd:$,...Y,enableSkills:!!X,...V,executors:{...X?{skills:X}:{},...f??{}}}),j)}function cC($){return SQ($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,uC,$.toolExecutors).some((J)=>J.name==="skills")}var uC=async()=>"";async function dC($){let J=K0();if(!c1({filePath:J}))return{tools:[]};let Q=new A2({clientFactory:C8({settingsPath:J})}),Z;try{Z=await B2(Q,{filePath:J})}catch(f){await Q.dispose().catch(()=>{});let Y=f instanceof Error?f.message:String(f);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${Y}`),{tools:[]}}let W=Z.filter((f)=>f.disabled!==!0),j=await Promise.allSettled(W.map((f)=>E8({serverName:f.name,provider:Q}))),X=[];for(let[f,Y]of j.entries())if(Y.status==="fulfilled")X.push(...Y.value);else{let V=Y.reason instanceof Error?Y.reason.message:String(Y.reason);$?.log(`[mcp] Failed to load tools from MCP server "${W[f].name}", skipping: ${V}`)}return{tools:X,shutdown:async()=>{await Q.dispose()}}}function lC($,J){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,J)}catch{}}function pC($){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 rC($){let J=c0[h1({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??J.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??J.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 j4{teamRuntimeEntries=new Map;async build($){let{config:J,hooks:Q,extensions:Z,logger:W,telemetry:j,createSpawnTool:X,onTeamRestored:f,userInstructionService:Y,configExtensions:V,toolExecutors:H}=$,B=$.onTeamEvent??(()=>{}),A=rC(J),K=J.workspaceRoot??J.cwd,G=$.toolPolicies??J.toolPolicies,R=B1(),D=[],U=J.teamName?.trim()||CQ(),F=J.sessionId?.trim()||U,O=A.enableSpawnAgent?v8({workspaceRoot:K}):{configs:[],errors:[]},T=O.configs.some((m)=>m.skills!==void 0),z=wQ(V,"rules"),L=wQ(V,"skills"),P=L||T,S=wQ(V,"workflows"),b=wQ(V,"plugins"),u=z||L||S,t=!1,Q0=Boolean(Y),e=Y,$1;for(let m of O.errors)(W??J.logger)?.log?.(`[agents] Failed to load agent config at ${m.path}: ${m.error.message}`);if(!e&&(u||T))e=_$({skills:P?{workspacePath:K,includePluginSkills:b,pluginSkillDirectories:b?$.pluginSkillDirectories:void 0,pluginPaths:J.pluginPaths,cwd:J.cwd}:{workspacePath:K},rules:{workspacePath:J.cwd},workflows:{workspacePath:J.cwd}});if(e)await e.start().catch(()=>{});let b$=A.enableTools&&L&&Boolean(e)&&e?.hasConfiguredSkills(J.skills)===!0&&cC({cwd:J.cwd,providerId:J.providerId,mode:A.mode,modelId:J.modelId,toolRoutingRules:J.toolRoutingRules,toolPolicies:G,toolExecutors:H}),r=e&&u?e.createExtension({includeRules:z,includeSkills:L,includeWorkflows:S,registerSkillsTool:b$,allowedSkillNames:J.skills}):void 0,O1=r?[...Z??J.extensions??[],r]:Z??J.extensions;if(A.enableTools){if(D.push(...SQ(J.cwd,J.providerId,A.mode,J.modelId,J.toolRoutingRules,G,void 0,H)),!A.disableMcpSettingsTools){let m=await dC(J.logger);D.push(...m.tools),$1=m.shutdown}}let C,f0=A.enableAgentTeams?m3():void 0,Y0=f0?.loadRuntime(F),w0=Y0?.state,k2=Y0?.teammates??[],T1=new Map(k2.map((m)=>[m.agentId,m])),Y1=J.sessionId||U,V4,I2=[],bJ=!1,M1=H$({providerId:J.providerId,modelId:J.modelId,cwd:J.cwd,apiKey:J.apiKey??"",baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking,maxIterations:J.maxIterations,hooks:Q,extensions:O1,logger:W??J.logger,telemetry:$.telemetry??J.telemetry,workspaceMetadata:J.workspaceMetadata});if(A.enableSpawnAgent){if(O.configs.length>0)D.push(...v3(c8({configProvider:M1,agents:O.configs,createSubAgentTools:(m)=>A.enableTools?vC(SQ(J.cwd,m.providerId??J.providerId,A.mode,m.modelId??J.modelId,J.toolRoutingRules,G,m.skills!==void 0&&e?.createSkillsExecutor?e.createSkillsExecutor(m.skills):void 0,H),m):[],hookErrorMode:J.hookErrorMode,toolPolicies:G,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),G))}if(!this.teamRuntimeEntries.has(Y1))this.teamRuntimeEntries.set(Y1,{delegatedAgentConfigProvider:M1});let hJ=()=>{if(!A.enableAgentTeams)return;let m=this.teamRuntimeEntries.get(Y1)??{delegatedAgentConfigProvider:M1};if(this.teamRuntimeEntries.set(Y1,m),C=m.runtime,!C){if(C=new T2({teamName:U,leadAgentId:J.sessionId||"lead",missionLogIntervalSteps:A.missionLogIntervalSteps,missionLogIntervalMs:A.missionLogIntervalMs,onTeamEvent:(Z0)=>{if(B(Z0),C&&f0){if(Z0.type==="teammate_spawned"&&Z0.teammate?.rolePrompt){let q1={agentId:Z0.agentId,rolePrompt:Z0.teammate.rolePrompt,modelId:Z0.teammate.modelId,maxIterations:Z0.teammate.maxIterations};T1.set(q1.agentId,q1)}if(Z0.type==="teammate_shutdown"&&!pC(Z0.reason))T1.delete(Z0.agentId);f0.handleTeamEvent(F,Z0),f0.persistRuntime(F,C.exportState(),Array.from(T1.values()))}}}),w0)C.hydrateState(w0),bJ=!0;m.runtime=C}if(!t){if(!C)return;t=!0;let Z0=Z8({runtime:C,leadAgentId:J.sessionId||"lead",restoredFromPersistence:Boolean(w0),restoredTeammates:k2,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(q1)=>{I2=q1,V4?.addTools(q1)},createBaseTools:A.enableTools?()=>SQ(J.cwd,J.providerId,A.mode,J.modelId,J.toolRoutingRules,G,void 0,H):void 0,teammateConfigProvider:M1});if(bJ)C.recoverActiveRuns("runtime_recovered");if(Z0.restoredFromPersistence)f?.();D.push(...Z0.tools)}return C};if(A.enableSpawnAgent&&X){let m=X();D.push({...m,execute:async(Z0,q1)=>{return hJ(),m.execute(Z0,q1)}})}if(A.enableAgentTeams)hJ();let x2=v3(D,G),QZ=x2.some((m)=>m.name==="submit_and_exit"&&m.lifecycle?.completesRun===!0),kJ=A.enableAgentTeams?()=>{let m=this.teamRuntimeEntries.get(Y1)?.runtime;if(!m)return;let Z0=m.listTasks(),q1=Z0.some((t1)=>t1.status==="in_progress"||t1.status==="pending"),cj=m.listRuns({}),GF=cj.some((t1)=>t1.status==="running"||t1.status==="queued");if(q1||GF){let t1=Z0.filter((x0)=>x0.status==="in_progress"||x0.status==="pending").map((x0)=>`${x0.id} (${x0.status}): ${x0.title}`).join(", "),uj=cj.filter((x0)=>x0.status==="running"||x0.status==="queued").map((x0)=>`${x0.id} (${x0.status})`).join(", "),ZZ=[];if(t1)ZZ.push(`Unfinished tasks: ${t1}`);if(uj)ZZ.push(`Active runs: ${uj}`);return`[SYSTEM] You still have team obligations. ${ZZ.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,KF=QZ?{requireCompletionTool:!0,...kJ?{completionGuard:kJ}:{}}:kJ?{completionGuard:kJ}:void 0;return{tools:x2,logger:W??J.logger,telemetry:j??J.telemetry,teamRuntime:C,teamRestoredFromPersistence:Boolean(w0),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(Y1)?.delegatedAgentConfigProvider??M1,extensions:O1,completionPolicy:KF,registerLeadAgent:(m)=>{if(V4=m,I2.length>0)m.addTools(I1(I2,[...R]))},shutdown:async(m)=>{if(lC(C,m),this.teamRuntimeEntries.delete(Y1),await $1?.(),!Q0)e?.stop()}}}}var BG={};w(BG,{requestDesktopToolApproval:()=>u3});import{mkdir as iC,readFile as nC,unlink as aC,writeFile as sC}from"node:fs/promises";import{join as HG}from"node:path";function oC($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function tC($){return new Promise((J)=>setTimeout(J,$))}async function c3($){try{await aC($)}catch{}}async function u3($,J={}){let Q=J.approvalDir?.trim(),Z=J.sessionId?.trim();if(!Q||!Z)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await iC(Q,{recursive:!0});let W=oC(`${$.toolCallId}`),j=HG(Q,`${Z}.request.${W}.json`),X=HG(Q,`${Z}.decision.${W}.json`),f=J.nowIso??(()=>new Date().toISOString());await sC(j,`${JSON.stringify({requestId:W,sessionId:Z,createdAt:f(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
734
+ `,"utf8");let Y=J.timeoutMs??300000,V=J.pollIntervalMs??200,H=Date.now();while(Date.now()-H<Y){try{let B=await nC(X,"utf8"),A=JSON.parse(B),K={approved:A.approved===!0,reason:typeof A.reason==="string"?A.reason:void 0};return await Promise.all([c3(X),c3(j)]),K}catch{}await tC(V)}return await c3(j),{approved:!1,reason:"Tool approval request timed out"}}W1();var FG={};w(FG,{syncPluginMcpServersToSettings:()=>r3,removePluginMcpServersFromSettings:()=>wJ,disablePluginMcpServersInSettings:()=>i3});import{existsSync as eC,mkdirSync as $y,readFileSync as Jy,writeFileSync as Qy}from"node:fs";import{dirname as KG,isAbsolute as Zy,relative as Wy,resolve as AG}from"node:path";function E2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function yQ($,J){let Q=Wy(AG($),AG(J));return Q===""||!Q.startsWith("..")&&!Zy(Q)}function d3($){if(!eC($))return{mcpServers:{}};try{let J=JSON.parse(Jy($,"utf8"));if(E2(J))return J}catch(J){throw Error(`Invalid MCP settings at "${$}": ${J instanceof Error?J.message:String(J)}`)}throw Error(`Invalid MCP settings at "${$}": expected an object`)}function l3($){if(E2($.mcpServers))return{...$.mcpServers};return{}}function p3($,J,Q){$y(KG($),{recursive:!0}),Qy($,`${JSON.stringify({...J,mcpServers:Q},null,2)}
735
+ `,"utf8")}function GG($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((J)=>J.trim()).filter((J)=>J.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((J)=>J.trim()).filter((J)=>J.length>0))]}}function bQ($){if(!E2($))return;let J=$.metadata;return E2(J)?J:void 0}function EQ($,J){let Q=bQ($);if(!Q||Q.source!=="plugin")return!1;let Z=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,W=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(J.pluginName&&Z===J.pluginName){if(!J.pluginPath||W===J.pluginPath)return!0}if(W&&J.pluginPath&&(W===J.pluginPath||yQ(J.pluginPath,W)||yQ(W,J.pluginPath)))return!0;if(Z&&J.pluginNames?.some((j)=>j===Z))return!0;if(W&&J.pluginPaths?.some((j)=>W===j||yQ(j,W)||yQ(W,j)))return!0;return!1}function jy($){let J=E2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:KG($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...J,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function Xy($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let J=await A8({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],Z=[],W=(J.failures??[]).map((j)=>({pluginPath:j.pluginPath,pluginName:j.pluginName,message:j.message}));for(let j of J.extensions??[]){let X=j.__clinePluginPath;if(!X)continue;if(!j.setup){Q.push({pluginName:j.name,pluginPath:X});continue}let f=[],Y={registerTool:(V)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(V)=>{if(!j.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');f.push(V)}};try{await j.setup(Y,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(V){W.push({pluginPath:X,pluginName:j.name,message:V instanceof Error?V.message:String(V)});continue}Q.push({pluginName:j.name,pluginPath:X});for(let V of f)Z.push({pluginName:j.name,pluginPath:X,server:{...V,metadata:{...V.metadata??{},source:"plugin",pluginName:j.name,pluginPath:X}}})}return{plugins:Q,servers:Z,failures:W}}finally{await J.shutdown().catch(()=>{})}}async function r3($){let J=$.settingsPath??K0(),Q={mutations:[],failures:[]},Z;try{Z=await Xy($)}catch(V){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:V instanceof Error?V.message:String(V)});return Q}Q.failures.push(...Z.failures);let W;try{W=d3(J)}catch(V){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:V instanceof Error?V.message:String(V)});return Q}let j=l3(W),X=new Map,f=new Map;for(let V of Z.plugins)X.set(V.pluginPath,new Set),f.set(V.pluginPath,V.pluginName);let Y=I9(Z.servers.map((V)=>({server:V.server,owner:V,ownerLabel:V.pluginName})));for(let V of Y){let H=V.owner;if(!X.has(H.pluginPath))X.set(H.pluginPath,new Set);if(V.name)X.get(H.pluginPath)?.add(V.name);if(!V.registration){Q.mutations.push({name:V.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:V.loadError??"invalid MCP server registration"});continue}let B=j[V.registration.name];if(B!==void 0){if(!EQ(B,{pluginName:H.pluginName,pluginPath:H.pluginPath})){Q.mutations.push({name:V.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}j[V.registration.name]=jy({registration:V.registration,pluginName:H.pluginName,pluginPath:H.pluginPath,existing:E2(B)?B:void 0}),Q.mutations.push({name:V.registration.name,pluginName:H.pluginName,pluginPath:H.pluginPath,action:B===void 0?"created":"updated"})}for(let[V,H]of Object.entries(j)){let B=bQ(H),A=typeof B?.pluginPath==="string"?B.pluginPath:"",K=X.get(A);if(K&&EQ(H,{pluginPath:A})&&!K.has(V))delete j[V],Q.mutations.push({name:V,pluginName:typeof B?.pluginName==="string"?B.pluginName:f.get(A)??"plugin",pluginPath:A,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((V)=>V.action!=="skipped"))try{p3(J,W,j)}catch(V){for(let H of $.pluginPaths)Q.failures.push({pluginPath:H,message:V instanceof Error?V.message:String(V)})}return Q}function i3($){let J=$.settingsPath??K0(),Q;try{Q=d3(J)}catch{return[]}let Z=l3(Q),W=GG($),j=[];for(let[X,f]of Object.entries(Z)){if(!E2(f)||!EQ(f,W))continue;let Y=bQ(f);Z[X]={...f,disabled:!0},j.push({name:X,pluginName:typeof Y?.pluginName==="string"?Y.pluginName:"plugin",pluginPath:typeof Y?.pluginPath==="string"?Y.pluginPath:"",action:"disabled"})}if(j.length>0)p3(J,Q,Z);return j}function wJ($){let J=$.settingsPath??K0(),Q;try{Q=d3(J)}catch{return[]}let Z=l3(Q),W=GG($),j=[];for(let[X,f]of Object.entries(Z)){if(!EQ(f,W))continue;let Y=bQ(f);delete Z[X],j.push({name:X,pluginName:typeof Y?.pluginName==="string"?Y.pluginName:"plugin",pluginPath:typeof Y?.pluginPath==="string"?Y.pluginPath:"",action:"removed"})}if(j.length>0)p3(J,Q,Z);return j}W1();var LG={};w(LG,{uninstallPlugin:()=>Jj});import{existsSync as f4,readdirSync as fy,readFileSync as Yy,rmdirSync as Vy,rmSync as Hy,statSync as By}from"node:fs";import{basename as t0,dirname as E$,extname as Ay,isAbsolute as Ky,join as o1,relative as Gy,resolve as X4,sep as n3}from"node:path";import{discoverPluginModulePaths as Fy,resolvePluginConfigSearchPaths as Dy}from"@cline/shared/storage";var e3="_installed",Uy="package",Ry=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function a3($){return $.trim().toLowerCase()}function f1($,J){let Q=J?.trim();if(!Q)return;$.add(Q)}function Ly($){return $.replace(/-[0-9a-f]{12}$/i,"")}function s3($){let J=Ay($);return J?$.slice(0,-J.length):$}function o3($){if(!f4($))return;try{let J=JSON.parse(Yy($,"utf8"));return typeof J.name==="string"?J.name.trim():void 0}catch{return}}function $j($,J){let Q=Gy(J,$);return Q===""||!Q.startsWith("..")&&!Ky(Q)}function DG($){let Q=X4($).split(n3),Z=Q.lastIndexOf(e3);if(Z<0)return;let W=Q[Z+1];if(!W)return;let j=Ry.get(W)??1,X=Z+2+j;if(Q.length<X)return;let f=Q.slice(0,X).join(n3)||n3;return f4(f)?f:void 0}function hQ($){try{return fy($,{withFileTypes:!0})}catch{return[]}}function zy($){let J=o1($,e3);if(!f4(J))return[];let Q=[];for(let Z of hQ(J)){if(!Z.isDirectory())continue;let W=o1(J,Z.name);if(Z.name==="git"){for(let j of hQ(W)){if(!j.isDirectory())continue;let X=o1(W,j.name);for(let f of hQ(X))if(f.isDirectory())Q.push(o1(X,f.name))}continue}for(let j of hQ(W))if(j.isDirectory())Q.push(o1(W,j.name))}return Q.sort((Z,W)=>Z.localeCompare(W))}function UG($){try{return Fy($)}catch{return[]}}function t3($){let J=UG($),Q=new Set;f1(Q,t0($)),f1(Q,Ly(t0($))),f1(Q,o3(o1($,"package.json"))),f1(Q,o3(o1($,Uy,"package.json")));for(let Z of J)f1(Q,t0(Z)),f1(Q,s3(t0(Z)));return{installPath:$,entryPaths:J,names:[...Q].sort((Z,W)=>Z.localeCompare(W)),installed:!0}}function _y($,J){let Q=X4($),Z=J.find((X)=>$j(Q,X));if(!Z)return;let W=E$(Q);while(W!==Z&&W!==E$(W)){if(f4(o1(W,"package.json")))return W;W=E$(W)}let j=t0(Q);if((j==="index.ts"||j==="index.js")&&E$(Q)!==Z)return E$(Q);return Q}function RG($,J){let Q=_y($,J);if(!Q)return;let Z=new Set;return f1(Z,t0($)),f1(Z,s3(t0($))),f1(Z,t0(Q)),f1(Z,s3(t0(Q))),f1(Z,o3(o1(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...Z].sort((W,j)=>W.localeCompare(j)),installed:!1}}function Oy($){let J=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return Dy(J).filter((Q)=>f4(Q))}function Ty($){let J=new Map;for(let Q of $){for(let Z of zy(Q))J.set(Z,t3(Z));for(let Z of UG(Q)){let W=DG(Z);if(W){if(!J.has(W))J.set(W,t3(W));continue}let j=RG(Z,$);if(j)J.set(j.installPath,j)}}return[...J.values()].sort((Q,Z)=>Q.installPath.localeCompare(Z.installPath))}function My($,J){let Q=a3(J);if(!Q)return!1;if(a3($.installPath)===Q)return!0;return $.names.some((Z)=>a3(Z)===Q)}function qy($,J,Q){let Z=X4($);for(let j of J){if($j(Z,j.installPath))return j;if(j.entryPaths.some((X)=>X4(X)===Z))return j}let W=DG(Z);if(W)return t3(W);if(f4(Z))return RG(Z,Q);return}function Py($){let J=M0(),Q=J.disabledPlugins;if(!Q?.length)return;let Z=Q.filter((W)=>{let j=X4(W);if($j(j,$.installPath))return!1;return!$.entryPaths.some((X)=>X4(X)===j)});if(Z.length===Q.length)return;k1({...J,disabledPlugins:Z})}function Ny($){let J=E$($);while(J!==E$(J)&&t0(J)!==e3){try{Vy(J)}catch{return}J=E$(J)}}function wy($){return`${$.names[0]??t0($.installPath)} at ${$.installPath}`}async function Jj($){let J=Oy($),Q=Ty(J),Z=$.path?.trim(),W=$.name?.trim(),j;if(Z){if(j=qy(Z,Q,J),!j)throw Error(`No plugin found at ${Z}`)}else{if(!W)throw Error("plugin uninstall requires a plugin name");let f=Q.filter((Y)=>My(Y,W));if(f.length===0)throw Error(`No plugin found matching "${W}"`);if(f.length>1)throw Error(`Multiple plugins match "${W}": ${f.map(wy).join(", ")}`);j=f[0]}let X=By(j.installPath,{throwIfNoEntry:!1});if(!X)throw Error(`Plugin install path does not exist: ${j.installPath}`);if(wJ({pluginPaths:[j.installPath,...j.entryPaths],pluginNames:j.names}),Hy(j.installPath,{recursive:X.isDirectory(),force:!0}),Py(j),j.installed)Ny(j.installPath);return{name:W||j.names[0]||t0(j.installPath),installPath:j.installPath,removedPaths:[j.installPath],entryPaths:j.entryPaths}}var mG={};w(mG,{updateLocalProvider:()=>uQ,saveLocalProviderSettings:()=>Vj,saveLocalProviderOAuthCredentials:()=>Kj,resolveLocalClineAuthToken:()=>Fj,refreshProviderModelsFromSource:()=>Hj,normalizeOAuthProvider:()=>Bj,loginLocalProvider:()=>Aj,loginAndSaveLocalProviderOAuthCredentials:()=>Gj,listLocalProviders:()=>fj,getLocalProviderModels:()=>Yj,ensureCustomProvidersLoaded:()=>mQ,deleteLocalProvider:()=>dQ,addLocalProvider:()=>Xj});import*as N0 from"@cline/llms";import{existsSync as Sy,mkdirSync as Cy,readFileSync as yy,writeFileSync as Ey}from"node:fs";import{mkdir as by,readFile as hy,writeFile as ky}from"node:fs/promises";import{dirname as Qj,join as Iy}from"node:path";import*as I0 from"@cline/llms";import{ModelCapabilitySchema as xy,ProviderCapabilitySchema as gy,ProviderClientSchema as my,ProviderProtocolSchema as vy}from"@cline/shared";import{z as n}from"zod";var cy=n.object({id:n.string().optional(),name:n.string().optional(),maxTokens:n.number().optional(),contextWindow:n.number().optional(),maxInputTokens:n.number().optional(),capabilities:n.array(xy).optional(),supportsVision:n.boolean().optional(),supportsAttachments:n.boolean().optional(),supportsReasoning:n.boolean().optional()}).passthrough(),uy=n.object({name:n.string(),baseUrl:n.string(),defaultModelId:n.string().optional(),protocol:vy.optional(),client:my.optional(),capabilities:n.array(gy).optional(),modelsSourceUrl:n.string().optional()}).passthrough(),zG=n.object({provider:uy.optional(),models:n.record(n.string(),cy).optional()}).passthrough(),_G=n.object({version:n.literal(1),providers:n.record(n.string(),zG)}),dy=n.object({version:n.literal(1),providers:n.record(n.string(),n.unknown())}),kQ=new Set;function OG($){return $.split(/[-_]/).filter(Boolean).map((J)=>J.charAt(0).toUpperCase()+J.slice(1)).join(" ")}function b2($){return Iy(Qj($.getFilePath()),"models.json")}function IQ(){return{version:1,providers:{}}}function TG($){let J=dy.safeParse($);if(!J.success)return IQ();let Q={};for(let[Z,W]of Object.entries(J.data.providers)){let j=zG.safeParse(W);if(j.success)Q[Z]=j.data}return{version:1,providers:Q}}function Zj($){if(!Sy($))return IQ();try{let J=yy($,"utf8");return TG(JSON.parse(J))}catch{}return IQ()}async function Y4($){try{let J=await hy($,"utf8");return TG(JSON.parse(J))}catch{}return IQ()}function MG($,J){Cy(Qj($),{recursive:!0});let Q=_G.parse(J);Ey($,`${JSON.stringify(Q,null,2)}
736
+ `,"utf8")}async function xQ($,J){await by(Qj($),{recursive:!0});let Q=_G.parse(J);await ky($,`${JSON.stringify(Q,null,2)}
737
+ `,"utf8")}function qG($,J){return{id:$,name:J.name??$,supportsAttachments:J.capabilities?.includes("files"),supportsVision:J.capabilities?.includes("images"),supportsReasoning:J.capabilities?.includes("reasoning")||J.thinkingConfig!=null}}function PG($){if(!$||$.length===0)return;let J=new Set;if($.includes("reasoning"))J.add("reasoning");if($.includes("prompt-cache"))J.add("prompt-cache");if($.includes("tools"))J.add("tools");return J.size>0?[...J]:void 0}function NG($){let J=new Set;if(!$||$.length===0)return[...J];if($.includes("streaming"))J.add("streaming");if($.includes("tools"))J.add("tools");if($.includes("reasoning"))J.add("reasoning");if($.includes("prompt-cache"))J.add("prompt-cache");if($.includes("vision"))J.add("images"),J.add("files");return[...J]}function ly($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function wG($,J){return $??J??"openai-chat"}function SG($,J,Q){return $??Q??(J==="openai-responses"?"openai":"openai-compatible")}function CG($,J,Q){let Z=new Set(J?.capabilities??Q??[]);if(J?.supportsVision)Z.add("images");if(J?.supportsAttachments)Z.add("files");if(J?.supportsReasoning)Z.add("reasoning");return{id:$,name:J?.name??$,maxTokens:J?.maxTokens,contextWindow:J?.contextWindow,maxInputTokens:J?.maxInputTokens,capabilities:Z.size>0?[...Z]:void 0}}function py($,J){for(let[Q,Z]of Object.entries(J??{})){let W=Z.id?.trim()||Q.trim();if(!W)continue;I0.registerModel($,W,CG(W,Z))}}function ry($,J,Q){return{...J??{},id:$,name:J?.name??$,capabilities:J?.capabilities??Q}}function iy($){return Object.assign({},...I0.resolveProviderModelCatalogKeys($).map((Q)=>I0.getGeneratedModelsForProvider(Q)))}function ny($){let J=$.provider.trim();if(!J||I0.isBuiltInProviderId(J))return;let Q=$.baseUrl?.trim();if(!Q)return;let Z=I0.MODEL_COLLECTIONS_BY_PROVIDER_ID[J],W=iy(J),j=NG($.capabilities),X=j.length>0?j:void 0,f=$.model?.trim(),Y={...W,...Z?.models??{}};if(f)Y[f]=ry(f,Y[f],X);let V=Object.keys(Y).filter(Boolean),H=f||V[0];if(!H)return;let B=wG($.protocol,Z?.provider.protocol),A=SG($.client,B,Z?.provider.client);I0.registerProvider({provider:{id:J,name:Z?.provider.name??OG(J),description:Z?.provider.description,protocol:B,client:A,baseUrl:Q,modelsSourceUrl:Z?.provider.modelsSourceUrl,defaultModelId:H,capabilities:PG($.capabilities)??Z?.provider.capabilities,source:"file"},models:Y})}function gQ($){for(let J of Object.values($.providers))ny(J.settings)}function SJ($,J){let Q=J.models??{};if(!ly(J.provider)){py($,Q);return}let Z=NG(J.provider.capabilities),W=Object.entries(Q).map(([V,H])=>({id:H.id?.trim()||V.trim(),model:H})).filter(({id:V})=>V.length>0),j=J.provider.defaultModelId?.trim()||W[0]?.id||"default",X=wG(J.provider.protocol,void 0),f=SG(J.provider.client,X,void 0),Y=Object.fromEntries(W.map(({id:V,model:H})=>[V,{...CG(V,H,Z.length>0?Z:void 0),status:"active"}]));I0.registerProvider({provider:{id:$,name:J.provider.name.trim()||OG($),protocol:X,client:f,baseUrl:J.provider.baseUrl,modelsSourceUrl:J.provider.modelsSourceUrl,defaultModelId:j,capabilities:PG(J.provider.capabilities),source:"file"},models:Y})}function yG($){let J=b2($);if(kQ.has(J))return;let Q=Zj(J);for(let[Z,W]of Object.entries(Q.providers))SJ(Z,W);kQ.add(J)}async function mQ($){let J=b2($);if(kQ.has(J))return;let Q=await Y4(J);for(let[Z,W]of Object.entries(Q.providers))SJ(Z,W);kQ.add(J)}var ay="cline-pass";function sy($){return $.apiKey??$.auth?.apiKey}function oy($){return($.auth?.accessToken?.trim()??"").length>0}function bG($){return $.split(/[-_]/).filter(Boolean).map((J)=>J.charAt(0).toUpperCase()+J.slice(1)).join(" ")}function ty($){let J=$.split(/\s+/).filter(Boolean);if(J.length===0)return"?";if(J.length===1)return J[0].slice(0,2).toUpperCase();return`${J[0][0]}${J[1][0]}`.toUpperCase()}function ey($){let J=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let Z of $)Q=Q*31+Z.charCodeAt(0)>>>0;return J[Q%J.length]}function hG($){return Object.entries($).sort(([J],[Q])=>J.localeCompare(Q)).map(([J,Q])=>qG(J,Q))}async function $E($,J){let Q=await N0.getModelsForProvider($);if(!J)return Q;let Z=await L6($,{loadPrivateOnAuth:!0,failOnError:!1},J);return Z?.knownModels?{...Q,...Z.knownModels}:Q}function Wj($){return[...new Set(($??[]).map((J)=>J.trim()).filter(Boolean))]}function JE($){if(!$?.length)return;return[...new Set($)]}function QE($,J){return JE([...$??[],...J??[]])}function ZE($){let J=$?.popularRank;return typeof J==="number"&&Number.isFinite(J)?J:Number.MAX_SAFE_INTEGER}function WE($){if(!$||typeof $!=="object")return!1;let J=$;return typeof J.path==="string"&&J.path.trim().length>0&&typeof J.label==="string"&&J.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(J.type))}function jE($){let J=$?.configFields;if(!Array.isArray(J))return;return J.filter(WE)}var vQ={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},EG={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function XE($){if(!$)return[vQ];if($.source!=="system")return $.baseUrl?[vQ,EG]:[vQ];let J=[];if($.env?.length)J.push(vQ);if($.baseUrl)J.push(EG);return J}function fE($,J){return J.split(".").reduce((Q,Z)=>{if(!Q||typeof Q!=="object")return;return Q[Z]},$)}function YE($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function VE($,J,Q){if(!$?.length)return;let Z={};for(let W of $){let X=YE(W.path==="baseUrl"&&J?.baseUrl===void 0?Q?.baseUrl:fE(J,W.path))??W.defaultValue;if(X!==void 0)Z[W.path]=X}return Z}function kG($){let J=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return J.length>0?Object.fromEntries(J):void 0}function jj($,J){let Q=J?.includes("vision")??!1,Z=J?.includes("reasoning")??!1;return Object.fromEntries($.map((W)=>[W,{id:W,name:W,supportsVision:Q,supportsAttachments:Q,supportsReasoning:Z}]))}async function IG($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let J=$.modelsSourceUrl?await n5($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...J])]}function xG($,J){let Q=$.read(),Z=!1;if(Q.providers[J])delete Q.providers[J],Z=!0;if(Q.lastUsedProvider===J)delete Q.lastUsedProvider,Z=!0;if(Z)$.write(Q);N0.unregisterProvider(J)}async function Xj($,J){let Q=J.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let Z=J.baseUrl.trim(),W=J.apiKey?.trim()??"";if(!Z&&!W){let G=b2($);if((await Y4(G)).providers[Q]){let D=await dQ($,{providerId:Q});return{providerId:Q,settingsPath:D.settingsPath,modelsPath:D.modelsPath,modelsCount:0}}return xG($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:G,modelsCount:0}}if(N0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let j=J.name.trim();if(!j)throw Error("name is required");if(!Z)throw Error("baseUrl is required");let X=Wj(J.models),f=J.modelsSourceUrl?.trim(),Y=await IG({providerId:Q,explicitModels:X,modelsSourceUrl:f,shouldRecompute:!0});if(Y.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let V=J.defaultModelId?.trim()&&Y.includes(J.defaultModelId.trim())?J.defaultModelId.trim():Y[0],H=J.capabilities?.length?[...new Set(J.capabilities)]:void 0,B=kG(J.headers);$.saveProviderSettings({provider:Q,apiKey:W||void 0,baseUrl:Z,headers:B,timeout:J.timeoutMs,model:V,protocol:J.protocol,client:J.client},{setLastUsed:!1});let A=b2($),K=await Y4(A);return K.providers[Q]={provider:{name:j,baseUrl:Z,defaultModelId:V,protocol:J.protocol,client:J.client,capabilities:H,modelsSourceUrl:f},models:jj(Y,H)},await xQ(A,K),SJ(Q,K.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:A,modelsCount:Y.length}}async function uQ($,J){let Q=J.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let Z=b2($),W=await Y4(Z),j=W.providers[Q];if(!j){let T=$.getProviderSettings(Q);if(!T)throw Error(`provider "${Q}" does not exist`);let z=J.modelsSourceUrl?.trim(),L=Wj(J.models)[0]??T.model?.trim();if(!L&&!z)throw Error(`provider "${Q}" cannot be updated because no model is configured`);j={provider:{name:J.name?.trim()||bG(Q),baseUrl:J.baseUrl?.trim()??T.baseUrl?.trim()??"",defaultModelId:L,protocol:T.protocol,client:T.client,capabilities:T.capabilities},models:L?jj([L],T.capabilities):{}}}if(!j.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let X=J.name?.trim()??j.provider.name.trim();if(!X)throw Error("name is required");let f=J.baseUrl?.trim()??j.provider.baseUrl.trim();if(!f)throw Error("baseUrl is required");let Y=J.capabilities===void 0?j.provider.capabilities:J.capabilities===null?void 0:[...new Set(J.capabilities)],V=J.protocol===void 0?j.provider.protocol:J.protocol??void 0,H=J.client===void 0?j.provider.client:J.client??void 0,B=Wj(J.models),A=J.modelsSourceUrl===void 0?j.provider.modelsSourceUrl:J.modelsSourceUrl?.trim()||void 0,K=J.models!==void 0||J.modelsSourceUrl!==void 0&&!!A,G=Object.keys(j.models??{}).map((T)=>T.trim()).filter(Boolean),R=await IG({providerId:Q,explicitModels:B,modelsSourceUrl:A,fallbackModelIds:G,shouldRecompute:K});if(R.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let D=J.defaultModelId===void 0?j.provider.defaultModelId?.trim():J.defaultModelId?.trim(),U=D&&R.includes(D)?D:R[0],O={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:f,model:U};if(V)O.protocol=V;else delete O.protocol;if(H)O.client=H;else delete O.client;if(J.apiKey!==void 0){let T=J.apiKey?.trim()??"";if(T)O.apiKey=T;else delete O.apiKey}if(J.headers!==void 0){let T=kG(J.headers);if(T)O.headers=T;else delete O.headers}if(J.timeoutMs!==void 0)if(typeof J.timeoutMs==="number")O.timeout=J.timeoutMs;else delete O.timeout;return $.saveProviderSettings(O,{setLastUsed:!1}),W.providers[Q]={provider:{name:X,baseUrl:f,defaultModelId:U,protocol:V,client:H,capabilities:Y,modelsSourceUrl:A},models:jj(R,Y)},await xQ(Z,W),SJ(Q,W.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:Z,modelsCount:R.length}}async function dQ($,J){let Q=J.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let Z=b2($),W=await Y4(Z);if(!W.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete W.providers[Q],await xQ(Z,W),N0.unregisterProvider(Q),xG($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:Z}}async function fj($,J={}){let Q=$.read(),Z=N0.getProviderIds(),W=await Promise.all(Z.map(async(X)=>{let[f,Y]=await Promise.all([N0.getProvider(X),N0.getModelsForProvider(X)]),V=hG(Y),H=Q.providers[X]?.settings,B=f?.name??bG(X),A=QE(f?.capabilities,H?.capabilities),K=jE(f?.metadata)??XE(f);return{provider:{id:X,name:B,models:V.length,color:ey(X),letter:ty(B),enabled:Boolean(H),apiKey:H?sy(H):void 0,oauthAccessTokenPresent:H?oy(H):void 0,baseUrl:H?.baseUrl??f?.baseUrl,defaultModelId:f?.defaultModelId,protocol:H?.protocol??f?.protocol,client:H?.client??f?.client,capabilities:A,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:K,configValues:VE(K,H,f),modelList:V},rank:ZE(f?.metadata)}}));W.sort((X,f)=>{if(X.rank!==f.rank)return X.rank-f.rank;return X.provider.name.localeCompare(f.provider.name)||X.provider.id.localeCompare(f.provider.id)});let j=W.map((X)=>X.provider);if(J.isClinePassEnabled!==!0)j=j.filter((X)=>X.id!==ay);return{providers:j,settingsPath:$.getFilePath()}}async function Yj($,J){let Q=$.trim(),Z=await $E(Q,J),W=hG(Z);return{providerId:Q,models:W}}function cQ($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function gG($,J){if(!cQ(J))return cQ($)?{...$}:void 0;let Q=cQ($)?{...$}:{};for(let[Z,W]of Object.entries(J)){if(W==null||W===""){delete Q[Z];continue}if(cQ(W)){let j=gG(Q[Z],W);if(j&&Object.keys(j).length>0)Q[Z]=j;else delete Q[Z];continue}Q[Z]=W}return Object.keys(Q).length>0?Q:void 0}function Vj($,J){let Q=J.providerId.trim();if(J.enabled===!1){let j=$.read();if(delete j.providers[Q],j.lastUsedProvider===Q)delete j.lastUsedProvider;return $.write(j),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let W={...$.getProviderSettings(Q)??{},provider:Q};for(let j of["apiKey","baseUrl","model","region"])if(Object.hasOwn(J,j)&&typeof J[j]==="string")if(J[j].trim().length===0)delete W[j];else W[j]=J[j];for(let j of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(J,j))W[j]=J[j];for(let j of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(J,j)&&J[j]!=null){let X=gG(W[j],J[j]);if(X)W[j]=X;else delete W[j]}return $.saveProviderSettings(W,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function Hj($,J){let Q=J.trim(),Z=$.getProviderSettings(Q),j=N0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,X=Z?.baseUrl?.trim()||j?.baseUrl?.trim(),f=a5(X,j?.baseUrl,j?.modelsSourceUrl);if(!Z||!j||!X||!f)return{providerId:Q,refreshed:!1};let Y=await uQ($,{providerId:Q,name:j.name,baseUrl:X,apiKey:Z.apiKey,headers:Z.headers??null,timeoutMs:Z.timeout??null,modelsSourceUrl:f,protocol:Z.protocol??j.protocol??null,client:Z.client??j.client??null,capabilities:Z.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:Y.modelsCount}}function Bj($){let J=$.trim().toLowerCase(),Q=W0(J);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function Aj($,J,Q,Z){let W=W0($);if(!W)throw Error(`provider "${$}" does not support OAuth login`);let j=M8({onPrompt:async(X)=>X.defaultValue??"",openUrl:Q,onOpenUrlError:({error:X})=>{throw X instanceof Error?X:Error(String(X))}});return W.login({settings:J,callbacks:j,telemetry:Z})}function Kj($,J,Q,Z,W){return x$({manager:$,providerId:J,settings:Q,credentials:Z,setLastUsed:W?.setLastUsed})}async function Gj($,J,Q,Z){let W=M8({onPrompt:async(j)=>j.defaultValue??"",openUrl:Q,onOpenUrlError:({error:j})=>{throw j instanceof Error?j:Error(String(j))}});return z4($,J,{callbacks:W,telemetry:Z})}function Fj($){let J=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return J&&J.length>0?J:void 0}var vG={};w(vG,{getProviderConfigFields:()=>Dj});import*as lQ from"@cline/llms";var HE=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],BE={"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 AE($,J){let Q={};for(let Z of HE){let W=$[Z],j=J[Z];if(W||j)Q[Z]={...W,...j}}return Q}function KE($){let J=BE[$.providerId];if(!J)return $;return{...$,description:J.description??$.description,fields:J.mode==="replace"?J.fields:AE($.fields,J.fields)}}var GE=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function FE($,J){if(!J?.provider.baseUrl)return!1;if(J.provider.source!=="system")return!0;return GE.has($)}function Dj($){let J=lQ.normalizeProviderId($);if(I$(J))return{providerId:J,authMethod:"oauth",fields:{}};let Q=lQ.MODEL_COLLECTIONS_BY_PROVIDER_ID[J];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:J,authMethod:"local",fields:{}};let Z=Q?.provider.baseUrl,W={apiKey:{}};if(FE(J,Q))W.baseUrl={defaultValue:Z};return KE({providerId:J,authMethod:"api-key",fields:W})}var lG={};w(lG,{resolveLegacyClineAuth:()=>Lj,migrateLegacyProviderSettings:()=>CJ});import{existsSync as DE,readFileSync as UE}from"node:fs";import{dirname as RE,join as Uj}from"node:path";import*as rQ from"@cline/llms";import{resolveClineDataDir as LE}from"@cline/shared/storage";var pQ="openai",dG=rQ.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,cG=128000;function Lj($){let J=$?.trim();if(!J)return;try{let Q=JSON.parse(J);if(!Q)return;let Z=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:Z,accountId:Q.userInfo?.id}}catch{return}}function E($){let J=$?.trim();return J?J:void 0}function uG($){if(!DE($))return;try{let J=UE($,"utf8"),Q=JSON.parse(J);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function zE($){let J=$.dataDir??LE(),Q=$.globalStatePath??Uj(J,"globalState.json"),Z=$.secretsPath??Uj(J,"secrets.json"),W=uG(Q),j=uG(Z);if(!W&&!j)return;return{globalState:W??{},secrets:j??{}}}function Rj($){if($===pQ)return dG;return $}function _E($,J,Q,Z){let W=Q==="plan"?"planMode":"actMode",j=J===Z?E(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,f={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`}[J];return(f?E(typeof $[f]==="string"?$[f]:void 0):void 0)??j}function OE($,J,Q){let Z=Q==="plan"?$.planModeReasoningEffort:$.actModeReasoningEffort,W=Q==="plan"?$.geminiPlanModeThinkingLevel:$.geminiActModeThinkingLevel,j=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,X=(J==="gemini"?W:void 0)??Z,f=X==="none"||X==="low"||X==="medium"||X==="high"?X:void 0,Y=typeof j==="number"&&Number.isInteger(j)&&j>0?j:void 0;if(!f&&Y===void 0)return;return{...f?{effort:f}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function TE($){let J=$["openai-codex-oauth-credentials"];if(!J)return;try{let Q=JSON.parse(J),Z=E(Q.access_token),W=E(Q.refresh_token),j=E(Q.accountId);if(!Z&&!W&&!j)return;return{...Z?{apiKey:Z}:{},auth:{...Z?{accessToken:Z}:{},...W?{refreshToken:W}:{},...j?{accountId:j}:{}}}}catch{return}}function ME($){let J=rQ.getGeneratedModelsForProvider($);return Object.keys(J)[0]??void 0}function qE($,J,Q,Z){let W=Rj($),j=E(Z==="plan"?J.planModeApiProvider:J.actModeApiProvider),X=_E(J,$,Z,j)??ME(W),f=OE(J,W,Z),Y=typeof J.requestTimeoutMs==="number"&&Number.isInteger(J.requestTimeoutMs)&&J.requestTimeoutMs>0?J.requestTimeoutMs:void 0,V={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,TE(Q));if($==="cline")try{let U=E(Q["cline:clineAccountId"]);if(U)H.auth={...H.auth??{},...Lj(U)}}catch{}if($===pQ&&J.openAiHeaders)H.headers=J.openAiHeaders;if($==="bedrock"){let U=J.awsAuthentication==="profile"||J.awsUseProfile===!0;H.aws={accessKey:E(Q.awsAccessKey),secretKey:E(Q.awsSecretKey),sessionToken:E(Q.awsSessionToken),region:E(J.awsRegion),authentication:J.awsAuthentication,profile:U?E(J.awsProfile):void 0,usePromptCache:J.awsBedrockUsePromptCache,useCrossRegionInference:J.awsUseCrossRegionInference,useGlobalInference:J.awsUseGlobalInference,endpoint:E(J.awsBedrockEndpoint),customModelBaseId:E(Z==="plan"?J.planModeAwsBedrockCustomModelBaseId:J.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")H.gcp={projectId:E(J.vertexProjectId),region:E(J.vertexRegion)};if($===pQ&&(J.azureApiVersion||J.azureIdentity!==void 0))H.azure={apiVersion:E(J.azureApiVersion),useIdentity:J.azureIdentity};if($==="sapaicore")H.sap={clientId:E(Q.sapAiCoreClientId),clientSecret:E(Q.sapAiCoreClientSecret),tokenUrl:E(J.sapAiCoreTokenUrl),resourceGroup:E(J.sapAiResourceGroup),deploymentId:E(Z==="plan"?J.planModeSapAiCoreDeploymentId:J.actModeSapAiCoreDeploymentId),useOrchestrationMode:J.sapAiCoreUseOrchestrationMode};if($==="oca"){H.oca={mode:J.ocaMode};let U=E(Q.ocaRefreshToken);if(U)H.auth={...H.auth??{},refreshToken:U}}if($==="qwen")H.apiLine=J.qwenApiLine;if($==="moonshot")H.apiLine=J.moonshotApiLine;if($==="zai")H.apiLine=J.zaiApiLine;if($==="minimax")H.apiLine=J.minimaxApiLine;let B={anthropic:J.anthropicBaseUrl,openai:J.openAiBaseUrl,ollama:J.ollamaBaseUrl,lmstudio:J.lmStudioBaseUrl,litellm:J.liteLlmBaseUrl,gemini:J.geminiBaseUrl,requesty:J.requestyBaseUrl,asksage:J.asksageApiUrl,dify:J.difyBaseUrl,oca:J.ocaBaseUrl,aihubmix:J.aihubmixBaseUrl,sapaicore:J.sapAiCoreBaseUrl},A=E(V[$]),K=E(B[$]),G={provider:W,...A?{apiKey:A}:{},...X?{model:X}:{},...K?{baseUrl:K}:{},...f?{reasoning:f}:{},...Y?{timeout:Y}:{},...H},R=z8.safeParse(G);if(!R.success)return;return Object.keys(G).filter((U)=>U!=="provider").length>0?R.data:void 0}function PE($,J){if($!==dG)return;if(!J.baseUrl||!J.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:J.baseUrl,defaultModelId:J.model},models:{[J.model]:{id:J.model,name:J.model,contextWindow:cG,maxInputTokens:cG,capabilities:["streaming","tools","images"]}}}}function NE($,J){let Q=new Set;for(let W of[$.actModeApiProvider,$.planModeApiProvider]){let j=E(W);if(j)Q.add(j)}if(E(J.apiKey))Q.add("anthropic");if(E(J.openRouterApiKey))Q.add("openrouter");if(E(J.openAiApiKey))Q.add(pQ);if(E(J.openAiNativeApiKey))Q.add("openai-native");if(E(J["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(E(J.geminiApiKey))Q.add("gemini");if(E(J.ollamaApiKey))Q.add("ollama");if(E(J.awsAccessKey)||E(J.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||E($.awsProfile))Q.add("bedrock");if(E($.vertexProjectId)||E($.vertexRegion))Q.add("vertex");if(E(J.clineApiKey))Q.add("cline");let Z=Lj(E(J["cline:clineAccountId"]));if(Z?.accessToken||Z?.refreshToken||Z?.accountId)Q.add("cline");if(E(J.ocaApiKey))Q.add("oca");if(E(J.sapAiCoreClientId)||E(J.sapAiCoreClientSecret)||E($.sapAiCoreTokenUrl)||E($.sapAiCoreBaseUrl)||E($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function CJ($){let J=$.providerSettingsManager.read(),Q=zE($);if(!Q)return{migrated:!1,providerCount:Object.keys(J.providers).length,lastUsedProvider:J.lastUsedProvider};let{globalState:Z,secrets:W}=Q,j=Z.mode==="plan"?"plan":"act",X=NE(Z,W),f=z$();f.providers={...J.providers},f.lastUsedProvider=J.lastUsedProvider;let Y=new Date().toISOString(),V=0,H=Uj(RE($.providerSettingsManager.getFilePath()),"models.json"),B=Zj(H),A=0;for(let R of X){let D=Rj(R);if(f.providers[D])continue;let U=qE(R,Z,W,j);if(!U)continue;f.providers[D]={settings:U,updatedAt:Y,tokenSource:"migration"},V+=1;let F=PE(D,U);if(F&&!B.providers[D])B.providers[D]=F,A+=1}if(V===0&&A===0)return{migrated:!1,providerCount:Object.keys(J.providers).length,lastUsedProvider:J.lastUsedProvider};let K=E(j==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),G=K?Rj(K):void 0;if(f.lastUsedProvider=J.lastUsedProvider??(G&&f.providers[G]?G:Object.keys(f.providers)[0]),$.providerSettingsManager.write(f),A>0)MG(H,B);return{migrated:V>0||A>0,providerCount:Object.keys(f.providers).length,lastUsedProvider:f.lastUsedProvider}}MQ();O0();GQ();var pG={};w(pG,{FileTeamPersistenceStore:()=>iQ});import{appendFileSync as wE,existsSync as zj,mkdirSync as SE,readFileSync as CE,renameSync as yE,unlinkSync as EE,writeFileSync as bE}from"node:fs";import{join as _j}from"node:path";import{resolveTeamDataDir as hE}from"@cline/shared/storage";function kE($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class iQ{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let J=kE($.teamName),Q=$.baseDir?.trim()||hE();this.dirPath=_j(Q,J),this.statePath=_j(this.dirPath,"state.json"),this.taskHistoryPath=_j(this.dirPath,"task-history.jsonl")}loadState(){if(!zj(this.statePath))return;try{let $=CE(this.statePath,"utf8"),J=JSON.parse($);if(J.version!==1||!J.teamState)return;for(let Q of J.teammates??[])this.teammateSpecs.set(Q.agentId,Q);return yA(J.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 J={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Q=`${this.statePath}.tmp`;bE(Q,`${JSON.stringify(J,null,2)}
738
738
  `,"utf8"),yE(Q,this.statePath)}appendTaskHistory($){let J={};switch($.type){case"team_task_updated":J=$.task;break;case"team_message":J={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":J={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":J={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":J={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":J={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),wE(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:J})}
739
- `,"utf8")}ensureDir(){if(!zj(this.dirPath))SE(this.dirPath,{recursive:!0})}hasPersistableState($){let J=$.exportState();if(this.teammateSpecs.size>0)return!0;if(J.members.some((Q)=>Q.role==="teammate"))return!0;return J.tasks.length>0||J.mailbox.length>0||J.missionLog.length>0}clearPersistedState(){if(zj(this.statePath))EE(this.statePath)}}var rG={};w(rG,{ChatViewStateSchema:()=>Oj,ChatSummarySchema:()=>t9,ChatSessionStatusSchema:()=>a9,ChatSessionConfigSchema:()=>n9,ChatMessageSchema:()=>o9,ChatMessageRoleSchema:()=>s9});import{z as h}from"zod";var n9=h.object({workspaceRoot:h.string().min(1),cwd:h.string().optional(),provider:h.string().min(1),model:h.string().min(1),mode:h.enum(["act","plan"]).default("act"),apiKey:h.string(),systemPrompt:h.string().optional(),rules:h.string().optional(),maxIterations:h.number().int().positive().optional(),enableTools:h.boolean(),enableSpawn:h.boolean().optional(),enableTeams:h.boolean().optional(),autoApproveTools:h.boolean().optional(),missionStepInterval:h.number().int().positive().optional(),missionTimeIntervalMs:h.number().int().positive().optional()}),a9=h.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),s9=h.enum(["user","assistant","tool","system","status","error"]),o9=h.object({id:h.string().min(1),sessionId:h.string().nullable(),role:s9,content:h.string(),createdAt:h.number().int().nonnegative(),meta:h.object({stream:h.enum(["stdout","stderr"]).optional(),toolName:h.string().optional(),iteration:h.number().int().nonnegative().optional(),agentId:h.string().optional(),conversationId:h.string().optional(),hookEventName:h.string().optional(),inputTokens:h.number().int().nonnegative().optional(),outputTokens:h.number().int().nonnegative().optional(),checkpoint:h.object({ref:h.string(),createdAt:h.number().int().nonnegative(),runCount:h.number().int().positive(),kind:h.enum(["stash","commit"]).optional()}).optional()}).optional()}),t9=h.object({toolCalls:h.number().int().nonnegative(),tokensIn:h.number().int().nonnegative(),tokensOut:h.number().int().nonnegative()}),Oj=h.object({sessionId:h.string().nullable(),status:a9,config:n9,messages:h.array(o9),rawTranscript:h.string(),error:h.string().nullable(),summary:t9});var iG={};w(iG,{CORE_BUILD_VERSION:()=>Tj});var Tj=PB;import{Agent as Mb,createAgentRuntime as qb}from"@cline/agents";var aG={};w(aG,{fetchClineRecommendedModels:()=>Mj,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>e9});import{getClineEnvironmentConfig as IE}from"@cline/shared";var xE=5000,e9={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"]}]};function gE($){return{recommended:$.recommended.map((J)=>({...J,tags:[...J.tags]})),free:$.free.map((J)=>({...J,tags:[...J.tags]}))}}function nG($){if(!$||typeof $!=="object")return null;let J=$;if(typeof J.id!=="string"||J.id.length===0)return null;return{id:J.id,name:typeof J.name==="string"&&J.name.length>0?J.name:J.id,description:typeof J.description==="string"?J.description:"",tags:Array.isArray(J.tags)?J.tags.filter((Q)=>typeof Q==="string"):[]}}function mE($){if(!$||typeof $!=="object")return null;let J=$,Q=Array.isArray(J.recommended)?J.recommended:[],Z=Array.isArray(J.free)?J.free:[],W=Q.map(nG).filter((X)=>X!==null),j=Z.map(nG).filter((X)=>X!==null);if(W.length===0&&j.length===0)return null;return{recommended:W,free:j}}function vE($){let J=$.baseUrl?.trim();if(J)return J;let Q=IE().apiBaseUrl;try{return($.providerSettingsManager??new _1).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function cE($,J,Q){let Z=new AbortController,W=setTimeout(()=>Z.abort(),Q);try{return await $(J,{signal:Z.signal})}finally{clearTimeout(W)}}async function Mj($={}){try{let J=vE($),Q=$.fetchImpl??fetch,Z=await cE(Q,`${J}/api/v1/ai/cline/recommended-models`,$.timeoutMs??xE);if(!Z.ok)throw Error(`HTTP ${Z.status}`);let W=await Z.json(),j=mE(W);if(j)return j}catch{}return gE(e9)}var sG={};w(sG,{loadLlmsConfigFromFile:()=>Pj,defineLlmsConfig:()=>qj});import{readFile as uE}from"node:fs/promises";import dE from"node:path";function qj($){return $}async function Pj($){let J=dE.resolve($),Q=await uE(J,"utf8"),Z;try{Z=JSON.parse(Q)}catch(W){let j=W instanceof Error?W.message:String(W);throw Error(`Failed to parse JSON config at "${J}": ${j}`)}return lE(Z,J)}function lE($,J){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${J}": expected an object.`);let Z=$.providers;if(!Array.isArray(Z))throw Error(`Invalid llms config in "${J}": "providers" must be an array.`);if(!Z.length)throw Error(`Invalid llms config in "${J}": "providers" cannot be empty.`);return $}var QF={};w(QF,{createLlmsSdk:()=>wj,DefaultLlmsSdk:()=>yJ});import{BUILT_IN_PROVIDER_IDS as eG,createHandler as iE,createHandlerAsync as nE,getProviderCollection as aE,hasProvider as $F,registerAsyncHandler as sE,registerHandler as oE,registerModel as tE,registerProvider as JF}from"@cline/llms";function oG($){return $?{...$}:{}}function pE($,J){if($)return $;if(!J)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[J]}function rE($,J){if(!J.length)throw Error(`Provider "${$}" must include at least one model.`)}function tG($){let J=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:J,defaultModel:$.collection.provider.defaultModelId,modelCount:J.length}}class Nj{providers=new Map;register($){rE($.id,$.models);let J=$.defaultModel??$.models[0];if(!J)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(J))throw Error(`Default model "${J}" 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:J,defaults:{...Q?.defaults??{},...oG($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:pE($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...oG($.settings)}})}registerModel($,J){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([J]),defaultModel:J,defaults:{}});return}Q.models.add(J)}createHandlerConfig($){let J=this.require($.providerId),Q=$.modelId??J.defaultModel;if(!J.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...J.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($,J){return this.providers.get($)?.models.has(J)??!1}require($){let J=this.providers.get($);if(!J)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return J}}class yJ{configuredProviders=new Nj;constructor($){this.applyConfig($)}createHandler($){return iE(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return nE(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(JF($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)oE($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)sE($.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 J=$.exposeModels??Object.keys($.models),Q=$.defaultModel??J[0];if(!Q)throw Error(`Provider "${$.id}" must define a default model.`);JF({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:J,defaultModel:Q,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){tE($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...eG]}async getBuiltInProviders(){return(await Promise.all(eG.map((J)=>aE(J)))).filter((J)=>J!==void 0).map((J)=>tG({collection:J}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,J){return this.configuredProviders.hasModel($,J)}applyConfig($){for(let J of $.providers)this.configuredProviders.registerSelectionConfig(J);for(let J of $.models??[])this.registerModel(J);for(let J of $.customProviders??[])this.registerProvider(J);for(let J of this.configuredProviders.list()){let Q=$F(J.id),Z=this.configuredProviders.createHandlerConfig({providerId:J.id,modelId:J.defaultModel}).routingProviderId,W=typeof Z==="string"&&$F(Z);if(!Q&&!W)throw Error(`Provider "${J.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function wj($){return new yJ($)}H3();async function eE(){return Promise.resolve().then(() => (M9(),JG))}function Cb(){return new Date().toISOString()}var yb="cline",Eb="cline-pass";function bb($){if(XF($)!=="providers.json")return;let J=Cj($);if(XF(J)!=="settings")return;return Cj(J)}class _1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??Sb(),this.dataDir=$.dataDir??bb(this.filePath),this.dataDir||!$.filePath)CJ({providerSettingsManager:this,dataDir:this.dataDir});if(yG(this),g9(this.read()),Sj(this.filePath))try{jF(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!Sj(this.filePath))return z$();try{let $=Nb(this.filePath,"utf8"),J=JSON.parse($),Q=_8.safeParse(J);if(Q.success)return g9(Q.data),Q.data}catch{}return z$()}write($){let J=_8.parse($),Q=Cj(this.filePath);if(!Sj(Q))Pb(Q,{recursive:!0,mode:448});wb(this.filePath,`${JSON.stringify(J,null,2)}
740
- `,"utf8");try{jF(this.filePath,384)}catch{}g9(J)}saveProviderSettings($,J={}){let Q=z8.parse($),Z=this.read(),W=Q.provider,j=J.setLastUsed!==!1,X=Z.providers[W],f=J.tokenSource??X?.tokenSource??"manual",Y={...Z,providers:{...Z.providers,[W]:{settings:Q,updatedAt:Cb(),tokenSource:f}},lastUsedProvider:j?W:Z.lastUsedProvider};return this.write(Y),Y}resolveProviderSettings($,J){let Q=$.providers[J]?.settings,W=Z0(J)?.storageProviderId;if(!W||W===J)return Q;let j=$.providers[W]?.settings;if(!j)return Q;return z8.parse({...j.auth?{auth:j.auth}:{},...j.apiKey?{apiKey:j.apiKey}:{},...j.baseUrl?{baseUrl:j.baseUrl}:{},...Q??{},provider:J})}getProviderSettings($){let J=this.read();return this.resolveProviderSettings(J,$)}resolveLastUsedProviderId($,J){let Q=$.lastUsedProvider;if(Q===Eb&&J.isClinePassEnabled===!1)return yb;return Q}getLastUsedProviderSettings($={}){let J=this.read(),Q=this.resolveLastUsedProviderId(J,$);if(!Q)return;return this.resolveProviderSettings(J,Q)}getProviderConfig($,J){let Q=this.getProviderSettings($);if(!Q)return;return d0(Q,J)}getLastUsedProviderConfig($={}){let J=this.getLastUsedProviderSettings($);if(!J)return;return d0(J,$)}async refreshCatalog(){try{await R8({})}catch{}}}O0();m8();function hb($,J){let Q=$?.expiresAt,Z=J?.expiresAt;return $?.accessToken===J?.accessToken&&$?.refreshToken===J?.refreshToken&&$?.accountId===J?.accountId&&Q===Z}class $Z 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 yj{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new _1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let J=Z0($.providerId);if(!J)return null;return this.resolveWithSingleFlight(J.providerId,J.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,J,Q=!1){let Z=this.refreshInFlight.get(J);if(Z)return Z;let W=this.resolveProviderApiKeyInternal($,J,Q).catch((j)=>{throw j}).finally(()=>{this.refreshInFlight.delete(J)});return this.refreshInFlight.set(J,W),W}async resolveProviderApiKeyInternal($,J,Q){let Z=Z0($);if(!Z)return null;let W=this.providerSettingsManager.getProviderSettings(J);if(!W)return null;let j=_4($,W);if(!j)return null;let X=await Z.refresh({settings:W,credentials:j,forceRefresh:Q,telemetry:this.telemetry});if(!X)throw new $Z($);let f=x$({manager:this.providerSettingsManager,providerId:$,settings:W,credentials:X,setLastUsed:!1,save:!1}),Y=!hb(W.auth,f.auth);if(Y)this.providerSettingsManager.saveProviderSettings(f,{setLastUsed:!1,tokenSource:"oauth"});return{apiKey:Z.getApiKey(f)??X.access,accountId:X.accountId,refreshed:Y}}}import{normalizeUserInput as kb}from"@cline/shared";import{nanoid as Ib}from"nanoid";class fF{list($){return $?e0($):[]}update($,J){if(!$)return{sessionId:J.sessionId,prompts:[],updated:!1};let Q=J.promptId.trim(),Z=$.pendingPrompts.findIndex((Y)=>Y.id===Q);if(Z<0)return{sessionId:J.sessionId,prompts:e0($),updated:!1};let W=$.pendingPrompts[Z];if(!W)return{sessionId:J.sessionId,prompts:e0($),updated:!1};let j=J.prompt===void 0?W.prompt:kb(J.prompt).trim();if(!j)throw Error("prompt cannot be empty");let X=J.delivery??W.delivery,f={...W,prompt:j,mode:J.mode??W.mode,delivery:X};return $.pendingPrompts.splice(Z,1),xb($,f,Z,W.delivery),{sessionId:J.sessionId,prompts:e0($),prompt:JZ(f),updated:!0}}delete($,J){if(!$)return{sessionId:J.sessionId,prompts:[],removed:!1};let Q=J.promptId.trim(),Z=$.pendingPrompts.findIndex((j)=>j.id===Q);if(Z<0)return{sessionId:J.sessionId,prompts:e0($),removed:!1};let[W]=$.pendingPrompts.splice(Z,1);return{sessionId:J.sessionId,prompts:e0($),prompt:W?JZ(W):void 0,removed:!0}}enqueue($,J){let{prompt:Q,mode:Z,delivery:W,userImages:j,userFiles:X}=J,f=$.pendingPrompts.findIndex((Y)=>Y.prompt===Q);if(f>=0){let[Y]=$.pendingPrompts.splice(f,1),V={...Y,prompt:Q,mode:Z??Y.mode,userImages:j??Y.userImages,userFiles:X??Y.userFiles};if(W==="steer"||Y.delivery==="steer")$.pendingPrompts.unshift({...V,delivery:"steer"});else $.pendingPrompts.push(V)}else{let Y={id:`pending_${Date.now()}_${Ib(5)}`,prompt:Q,mode:Z,delivery:W,userImages:j,userFiles:X};if(W==="steer")$.pendingPrompts.unshift(Y);else $.pendingPrompts.push(Y)}return e0($)}consumeSteer($){let J=$.pendingPrompts.findIndex((Z)=>Z.delivery==="steer");if(J<0)return{prompts:e0($)};let[Q]=$.pendingPrompts.splice(J,1);return{entry:Q,prompts:e0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:e0($)}}requeueFront($,J){return $.pendingPrompts.unshift(J),e0($)}clear($){return $.pendingPrompts.length=0,[]}}class Ej{deps;service=new fF;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let J=this.deps.getSession($.sessionId);if(!J||J.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(J,$);return this.emitPrompts(J),this.scheduleDrain($.sessionId,J),Q}delete($){let J=this.deps.getSession($.sessionId);if(!J||J.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(J,$);return this.emitPrompts(J),this.scheduleDrain($.sessionId,J),Q}enqueue($,J){let Q=this.deps.getSession($);if(!Q||Q.aborting)return;this.service.enqueue(Q,J),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let J=this.deps.getSession($);if(!J)return;let{entry:Q}=this.service.consumeSteer(J);if(!Q)return;return this.emitPrompts(J),this.emitSubmitted(J,Q),Q}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:e0($)}})}scheduleDrain($,J){if(J.pendingPrompts.length===0||J.aborting||J.drainingPendingPrompts||!J.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let J=this.deps.getSession($);if(!J)return;if(J.aborting||J.drainingPendingPrompts)return;if(!J.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(J);if(!Q)return;this.emitPrompts(J),this.emitSubmitted(J,Q),J.drainingPendingPrompts=!0;let Z=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{Z=!1,this.service.requeueFront(J,Q),this.emitPrompts(J)}finally{if(J.drainingPendingPrompts=!1,Z&&J.pendingPrompts.length>0&&J.status!=="failed"&&J.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,J){let Q=JZ(J);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount}})}}function JZ($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0)}}function e0($){return $.pendingPrompts.map(JZ)}function xb($,J,Q,Z){if(J.delivery==="steer")$.pendingPrompts.unshift(J);else if(Z==="steer")$.pendingPrompts.push(J);else $.pendingPrompts.splice(Q,0,J)}O0();class hj{deps;constructor($){this.deps=$}dispatchAgentEvent($,J,Q){let Z=this.deps.getSession($),W={sessionId:$,config:J,liveSession:Z,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},j=VW(Q),X=!!Z&&(!j.agentId||j.agentId===bj(Z.agent));HW(W,Q,X?{isPrimaryAgentEvent:!0,agentId:bj(Z.agent),conversationId:Z.agent.getConversationId(),...Z?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,J){let Q=this.deps.getSession($);if(Q){if(n7(Q,J),J.type==="agent_event"){let Z={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};HW(Z,J.event,{agentId:J.agentId,teamRole:"teammate",teamAgentId:J.agentId,isPrimaryAgentEvent:!1})}if(J.type==="teammate_spawned"){let Z=g1({agentId:J.teammate.runtimeAgentId??J.agentId,conversationId:J.teammate.conversationId,parentAgentId:J.teammate.parentAgentId,createdByAgentId:bj(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:J.agentId});if(Z)$$(Q.config.telemetry,{ulid:$,modelId:J.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...Z})}}if(await a7($,J,this.deps.invokeBackendOptional),Q)s7(Q,$,J,this.deps.emit)}async handlePluginEvent($,J,Q){if(J.name==="plugin_log"){this.handlePluginLog($,J.payload);return}if(J.name==="automation_event"){let Y=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!Y)return;let V=J.payload&&typeof J.payload==="object"?J.payload:void 0;if(!V)return;await Y.ingestEvent(V);return}if(J.name!=="steer_message"&&J.name!=="queue_message"&&J.name!=="pending_prompt")return;let Z=J.payload&&typeof J.payload==="object"?J.payload:void 0,W=typeof Z?.sessionId==="string"&&Z.sessionId.trim().length>0?Z.sessionId.trim():$,j=typeof Z?.prompt==="string"?Z.prompt.trim():"";if(!j)return;let X=J.name==="steer_message"?"steer":J.name==="queue_message"?"queue":Z?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(W,{prompt:j,delivery:X})}handlePluginLog($,J,Q){let Z=this.deps.getSession($),W=Q??Z?.config.extensionContext?.logger??Z?.config.logger;if(!W||!J||typeof J!=="object")return;let j=J,X=typeof j.message==="string"?j.message:"";if(!X)return;let f=j.metadata&&typeof j.metadata==="object"?{...j.metadata}:{};if(f.sessionId??=$,typeof j.pluginName==="string"&&j.pluginName)f.pluginName=j.pluginName;if(j.level==="debug"){W.debug(X,f);return}if(j.level==="error"){if(W.error)W.error(X,f);else W.log(X,{...f,severity:"error"});return}W.log(X,f)}}function bj($){return $.getAgentId()}function kj($){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:G$($.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 Ij($,J){let Q=$[J];return typeof Q==="function"?Q:null}async function YF($,J,...Q){let Z=Ij($,J);if(!Z)throw Error(`session service method not available: ${J}`);return Promise.resolve(Z.apply($,Q))}async function VF($,J,...Q){let Z=Ij($,J);if(!Z)return;await Promise.resolve(Z.apply($,Q))}async function HF($,J,...Q){let Z=Ij($,J);if(!Z)return;return await Promise.resolve(Z.apply($,Q))}W1();O0();function xj($,J,Q){return{onSubAgentEvent:(Z)=>$.onAgentEvent(Q,J,Z),onSubAgentStart:(Z)=>{let W=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(Z.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let j=g1({agentId:Z.subAgentId,conversationId:Z.conversationId,parentAgentId:Z.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:Z.parentAgentId});if(j)$$(J.telemetry,{ulid:Q,modelId:J.modelId,provider:J.providerId,...j});A4(J.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:Z.parentAgentId,agentId:Z.subAgentId,...j}),$.invokeBackendOptional("handleSubAgentStart",Q,Z)},onSubAgentEnd:(Z)=>{let W=$.getSession(Q)?.runtime.teamRuntime,j=$.subAgentStarts.get(Z.subAgentId),X=j?Date.now()-j.startedAt:0,f=Z.result?.text?Z.result.text.split(`
741
- `).length:0;A4(J.telemetry,{event:"ended",ulid:Q,durationMs:X,outputLines:f,errorMessage:Z.error?String(Z.error):void 0,agentId:Z.subAgentId,parentId:Z.parentAgentId,...g1({agentId:Z.subAgentId,conversationId:Z.conversationId,parentAgentId:Z.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:Z.parentAgentId})}),$.subAgentStarts.delete(Z.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,Z)}}}function gj($,J,Q,Z){let W=xj($,J,Q);return A$({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:J.providerId,modelId:J.modelId,cwd:J.cwd,apiKey:J.apiKey,baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking,maxIterations:J.maxIterations,hooks:J.hooks,extensions:J.extensions,logger:J.logger,telemetry:J.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:J.providerId,modelId:J.modelId,apiKey:J.apiKey,baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let X=J.enableTools?n$({cwd:J.cwd,...c0[h1({mode:J.mode})],executors:Z}):[];if(J.enableSpawnAgent)X.push(gj($,J,Q,Z));return I1(X)},...W})}import{readFile as gb,stat as mb}from"node:fs/promises";var vb=20480000;async function BF($){let J=await mb($);if(!J.isFile())throw Error("Path is not a file");if(J.size>vb)throw Error("File is too large to read into context.");let Q=await gb($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var AF=5000;function EJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function nb($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$,Q=EJ(J.inputTokens),Z=EJ(J.outputTokens),W=EJ(J.cacheReadTokens),j=EJ(J.cacheWriteTokens),X=EJ(J.totalCost);if(Q===void 0||Z===void 0||W===void 0||j===void 0||X===void 0)return;return{inputTokens:Q,outputTokens:Z,cacheReadTokens:W,cacheWriteTokens:j,totalCost:X}}function ab($,J){return{inputTokens:Math.max($.inputTokens,J.inputTokens),outputTokens:Math.max($.outputTokens,J.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,J.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,J.cacheWriteTokens),totalCost:Math.max($.totalCost,J.totalCost)}}class z1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new JJ;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new y$;constructor($){let J=ub();if(J)ib(J);let Q=b0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new j4,this.createAgentInstance=$.createAgent??((Z)=>new V$(Z)),this.defaultCapabilities=z0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new _1,this.oauthTokenManager=$.oauthTokenManager??new yj({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new Ej({getSession:(Z)=>this.sessions.get(Z),emit:(Z)=>this.emit(Z),send:(Z)=>this.runTurn(Z)}),this.pendingPrompts={list:async(Z)=>this.pendingPromptsController.list(Z.sessionId),update:async(Z)=>this.pendingPromptsController.update(Z),delete:async(Z)=>this.pendingPromptsController.delete(Z)},this.eventBridge=new hj({getSession:(Z)=>this.sessions.get(Z),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(Z)=>this.emit(Z),persistMessages:(Z,W,j)=>{this.invoke("persistSessionMessages",Z,W,j)},enqueuePendingPrompt:(Z,W)=>this.pendingPromptsController.enqueue(Z,W),invokeBackendOptional:(Z,...W)=>this.invokeOptional(Z,...W)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let J=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!J?.apiKey)return $;return{...$,config:{...$.config,apiKey:J.apiKey}}}async startSession($){let J=$.source??U0.CLI,Q=e(),Z=$.config.sessionId?.trim()??"",W=Z||lb(),j=await this.applyInitialOAuthCredentials($),X=j.initialMessages??[],f=X.length>0?f8(X):D0(),Y=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!Y)throw Error("session service method not available: ensureSessionsDir");let V=mj(Y,W),H=mj(V,`${W}.messages.json`),B=mj(V,`${W}.json`),A=G$($.config),K=S0.parse({version:1,session_id:W,source:J,pid:process.pid,started_at:Q,status:"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:A,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:H}),G;if(Z.length>0&&X.length>0&&!j.prompt?.trim()){let C=await this.invokeOptionalValue("readSessionManifest",W);if(C)K=C,G={manifestPath:B,messagesPath:C.messages_path||H,manifest:C}}let D=await this.seedAggregateUsageFromArtifacts({initialUsage:f,sessionDir:V,rootMessagesPath:G?.messagesPath??H,manifest:K});this.usageBySession.set(W,f),this.aggregateUsageBySession.set(W,D);let U=z0(this.defaultCapabilities,$.capabilities),F=U?.toolExecutors??this.toolExecutors,O=$.localRuntime,T=O?.extensionContext?.logger??O?.logger,z=O?.extensionContext?.automation,L,P={getSession:(C)=>this.sessions.get(C),subAgentStarts:this.subAgentStarts,onAgentEvent:(C,X0,f0)=>this.eventBridge.dispatchAgentEvent(C,X0,f0),invokeBackendOptional:(C,...X0)=>this.invokeOptional(C,...X0)};L=await iV({input:j,localRuntime:$.localRuntime,sessionId:W,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:U,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(C)=>{if(C.name==="plugin_log"){this.eventBridge.handlePluginLog(W,C.payload,T);return}this.eventBridge.handlePluginEvent(W,C,z)},onTeamEvent:(C)=>{this.eventBridge.handleTeamEvent(W,C),L.config.onTeamEvent?.(C)},createSpawnTool:()=>gj(P,L.config,W,F),createSubAgentLifecycleCallbacks:(C)=>xj(P,C,W),readSessionMetadata:async()=>(await this.getSession(W))?.metadata,writeSessionMetadata:async(C)=>{await this.persistSessionMetadata(W,()=>C)}});let S=await this.runtimeBuilder.build(L.runtimeBuilderInput),b=L.config,u=L.providerConfig;if(S.teamRuntime&&!b.teamName?.trim())b.teamName=S.teamRuntime.getTeamName();let o=[...S.tools,...b.extraTools??[]],J0=S.extensions??L.extensions,t={sessionId:W,providerId:u.providerId,modelId:u.modelId,apiKey:u.apiKey,baseUrl:u.baseUrl,headers:u.headers,knownModels:u.knownModels,providerConfig:u,thinking:b.thinking,reasoningEffort:b.reasoningEffort??u.reasoningEffort,systemPrompt:b.systemPrompt,maxIterations:b.maxIterations,execution:b.execution,prepareTurn:N4(b),tools:o,hooks:L.hooks,extensions:J0,hookErrorMode:b.hookErrorMode,initialMessages:L.effectiveInput.initialMessages,userFileContentLoader:BF,toolPolicies:L.toolPolicies,requestToolApproval:L.requestToolApproval?async(C)=>{let X0=L.requestToolApproval,f0=this.sessions.get(W);if(f0)await this.markTurnPending(f0);try{if(!X0)return{approved:!1,reason:"Tool approval callback is not configured."};return await X0(C)}finally{let w0=this.sessions.get(W);if(w0?.status==="pending")await this.markTurnRunning(w0)}}:void 0,telemetry:b.telemetry,onConsecutiveMistakeLimitReached:b.onConsecutiveMistakeLimitReached,completionPolicy:S.completionPolicy,consumePendingUserMessage:()=>{let C=this.pendingPromptsController.consumeSteer(W);return C?GJ(C.prompt,C.mode??b.mode):void 0},logger:S.logger??b.logger,extensionContext:b.extensionContext,onEvent:(C)=>this.eventBridge.dispatchAgentEvent(W,b,C)};t.hooks={...t.hooks,onEvent:async(C)=>{if(await L.hooks?.onEvent?.(C),C.type!=="assistant-message")return;let X0=this.sessions.get(W);if(!X0)return;let f0=X0.agent.getMessages();try{await this.invoke("persistSessionMessages",W,f0,b.systemPrompt)}catch(w0){b.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:W,error:w0}),h2(b.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:w0,severity:"warn",handled:!0,context:{sessionId:W,providerId:b.providerId,modelId:b.modelId}})}}};let $1=this.createAgentInstance(t);if(t.onEvent)$1.subscribeEvents(t.onEvent);S.registerLeadAgent?.($1);let b$=g1({agentId:$1.getAgentId(),conversationId:$1.getConversationId(),teamId:S.teamRuntime?.getTeamId(),teamName:S.teamRuntime?.getTeamName(),teamRole:S.teamRuntime?"lead":void 0});if(aV(b,W,Z.length>0,A,b$),b$)$$(b.telemetry,{ulid:W,modelId:b.modelId,provider:b.providerId,...b$});if(S.teamRuntime)aJ(b.telemetry,{ulid:W,teamId:S.teamRuntime.getTeamId(),teamName:S.teamRuntime.getTeamName(),leadAgentId:$1.getAgentId(),restoredFromPersistence:S.teamRestoredFromPersistence===!0});let r={sessionId:W,config:b,sessionMetadata:j.sessionMetadata,...G?{artifacts:G}:{},source:J,startedAt:G?.manifest.started_at??Q,updatedAt:G?.manifest.ended_at??G?.manifest.started_at??Q,pendingPrompt:K.prompt,runtime:S,agent:$1,started:!1,status:G?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:X,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:L.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(this.sessions.set(W,r),this.emitStatus(W,"running"),X.length>0&&!G){if(await this.ensureSessionPersisted(r),await this.invoke("persistSessionMessages",r.sessionId,X,r.config.systemPrompt),!j.prompt?.trim())await this.updateStatus(r,"completed",0)}let O1;try{if(j.prompt?.trim())if(O1=await this.executeTurn(r,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!r.interactive)await this.finalizeSingleRun(r,O1.finishReason);else await this.completeInteractiveTurn(r,O1.finishReason)}catch(C){if(r.interactive&&r.aborting)O1=await this.completeAbortedInteractiveTurn(r);else{h2(r.config.telemetry,{component:"core",operation:"session.start",error:C,severity:"error",handled:!1,context:{sessionId:r.sessionId,providerId:r.config.providerId,modelId:r.config.modelId}});try{await this.failSession(r)}catch(X0){r.config.logger?.error?.("Session failure cleanup threw",{sessionId:r.sessionId,error:X0})}throw C}}return{sessionId:W,manifest:K,manifestPath:B,messagesPath:H,result:O1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(J)=>this.getSession(J),readMessages:(J)=>this.readSessionMessages(J),buildStartInput:(J,Q)=>{let Z=J.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:J.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...Z?{sessionMetadata:Z}:{},initialMessages:J.initialMessages}},startSession:(J)=>this.startSession(J),getStartedSessionId:(J)=>J.sessionId,readRestoredSession:(J)=>this.getSession(J)})}async runTurn($){let J=this.getSessionOrThrow($.sessionId),Q=J.agent.canStartRun(),Z=$.delivery??(J.interactive&&!Q?"queue":void 0);if(J.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:Z??"immediate"}}),Z==="queue"||Z==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:Z,userImages:$.userImages,userFiles:$.userFiles});return}try{let W=await this.executeTurn(J,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!J.interactive)await this.finalizeSingleRun(J,W.finishReason);else await this.completeInteractiveTurn(J,W.finishReason);if(W.finishReason==="error"||W.finishReason==="aborted")return W;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),W}catch(W){if(J.interactive&&J.aborting)return await this.completeAbortedInteractiveTurn(J);throw h2(J.config.telemetry,{component:"core",operation:"session.submit",error:W,severity:"error",handled:!1,context:{sessionId:J.sessionId,providerId:J.config.providerId,modelId:J.config.modelId}}),await this.failSession(J),W}}async getAccumulatedUsage($){let J=O7(this.usageBySession.get($)),Q=O7(this.aggregateUsageBySession.get($));return J||Q?{usage:J,aggregateUsage:Q}:void 0}async abort($,J){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(J)}async stopSession($){let J=this.sessions.get($);if(!J)return;if(J.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),J.interactive&&!j0(J.status)){await this.releaseSessionRuntime(J,"session_stop");return}if(J.interactive&&J.agent.canStartRun()){await this.shutdownSession(J,{status:this.resolveInteractiveStopStatus(J),exitCode:this.resolveInteractiveStopExitCode(J),shutdownReason:"session_stop",endReason:"stopped"});return}J.aborting=!0,J.agent.abort(Error("session_stop")),await this.shutdownSession(J,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let J=[...this.sessions.values()];if(J.length===0)return;await Promise.allSettled(J.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 J=this.sessions.get($);if(J)return kj(J);let Q=$.trim();if(!Q)return;let Z=await this.getRow(Q);if(Z)return W6(Z);let W=await this.readManifest(Q);return W?pQ(W):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(W6),Z=new Set(Q.map((W)=>W.sessionId));for(let W of this.sessions.values()){if(Z.has(W.sessionId))continue;Q.unshift(kj(W))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let J=await this.invoke("deleteSession",$);if(J.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return J.deleted}async updateSession($,J){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:J.prompt,metadata:J.metadata,title:J.title}))?.updated===!0}}async readSessionMessages($){let J=$.trim();if(!J)return[];let Q=await this.getRow(J);if(Q?.messagesPath)return q$(Q.messagesPath);let Z=await this.readManifest(J);return q$(Z?.messages_path)}async dispatchHookEvent($){await RB($,{queueSpawnRequest:(J)=>this.invokeOptional("queueSpawnRequest",J),upsertSubagentSessionFromHook:(J)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",J),appendSubagentHookAudit:(J,Q)=>this.invokeOptional("appendSubagentHookAudit",J,Q),applySubagentStatus:(J,Q)=>this.invokeOptional("applySubagentStatus",J,Q)})}subscribe($,J){return this.events.subscribe($,J)}async updateSessionModel($,J){let Q=this.getSessionOrThrow($);Q.config.modelId=J,Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:J}),Q.agent.updateConnection({modelId:J})}handlePluginEvent($,J,Q){return this.eventBridge.handlePluginEvent($,J,Q)}async executeTurn($,J){let Q=await this.prepareTurnInput($,J),Z=Q.prompt.trim();if(!Z)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=Z;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let W=await this.executeAgentTurn($,Z,Q.userImages,Q.userFiles);while(o7($,W.finishReason)){let j=await t7($);if(j.length===0)break;let X=e7($,j);W=await this.executeAgentTurn($,X)}return W}async completeInteractiveTurn($,J){if(KJ($))return;$.lastInteractiveTurnFinishReason=J,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let J=$.lastInteractiveTurnFinishReason;if(!J)return"cancelled";switch(J){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return J}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let J=new Date,Q=$.agent.getMessages(),Z=D0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:Z}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:Z,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:J,endedAt:J,durationMs:0}}async executeAgentTurn($,J,Q,Z){let W=$.started||$.agent.getMessages().length>0,j=$.persistedMessages??$.agent.getMessages(),X=this.usageBySession.get($.sessionId)??D0(),f=this.aggregateUsageBySession.get($.sessionId)??X;$.turnUsageBaseline=X,$.turnAggregateUsageBaseline=f,$.turnPrimaryUsage=D0(),$.turnUsageByAgent=new Map,uJ($.config.telemetry,$.sessionId,$.config.mode),g2($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let Y=W?()=>$.agent.continue(J,Q,Z):()=>$.agent.run(J,Q,Z),V=await this.runWithAuthRetry($,Y,j);$.started=!0;let H=x5(V.messages,V,j);$.persistedMessages=H;let B=X6($.turnUsageByAgent?.values()??[]),A=B0(X,V.usage),K=B0(B0(D0(),V.usage),B),G=B0(f,K);return this.usageBySession.set($.sessionId,A),this.aggregateUsageBySession.set($.sessionId,G),await this.persistSessionMetadata($.sessionId,(R)=>({...R??{},totalCost:A.totalCost,aggregatedAgentsCost:G.totalCost,usage:A,aggregateUsage:G})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,V),V}catch(Y){throw h2($.config.telemetry,{component:"core",operation:"session.turn",error:Y,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),Y}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,J){if($.submitAndExitObserved)return;if(!J.toolCalls.some((Z)=>Z.name===F0.SUBMIT_AND_EXIT&&Z.error===void 0))return;$.submitAndExitObserved=!0,H4($.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($,J){let Q=G$($.config),Z=rb(J.prompt).trim();if(!Z)return{prompt:"",userImages:J.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,J.userFiles)};let W=await a2(Z,Q);sV($.config.telemetry,W);let j=GJ(W.prompt,J.mode??$.config.mode),X=this.resolveAbsoluteFilePaths($.config.cwd,J.userFiles),f=this.resolveAbsoluteFilePaths(Q,W.matchedFiles),Y=Array.from(new Set([...X,...f]));return{prompt:j,userImages:J.userImages,userFiles:Y.length>0?Y:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let J=G$($.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:J,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($,J){let Q=this.sessions.get($),Z=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,W=J(Z?.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($,J){if(KJ($))return;let Q=J==="aborted"||$.aborting,Z=J==="error";await this.shutdownSession($,{status:Q?"cancelled":Z?"failed":"completed",exitCode:Z?1:0,shutdownReason:Z?"session_error":"session_complete",endReason:J})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,J){if(J.status==="completed"&&!$.submitAndExitObserved)H4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});Y9($);let Q=[],Z=(W,j)=>{Q.push(j),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:W,error:j,severity:"warn"}),h2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,status:J.status,shutdownReason:J.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,J.status,J.exitCode)}catch(W){Z("update_status",W)}try{await $.agent.shutdown(J.shutdownReason)}catch(W){Z("agent_shutdown",W)}}try{await Promise.resolve($.runtime.shutdown(J.shutdownReason))}catch(W){Z("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){Z("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:J.endReason,ts:Date.now()}}),Q.length>0&&J.status==="failed")throw Q[0]}async releaseSessionRuntime($,J){let Q=[],Z=(W,j)=>{Q.push(j),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:W,error:j,severity:"warn"}),h2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,reason:J,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(J)}catch(W){Z("agent_shutdown",W)}try{await Promise.resolve($.runtime.shutdown(J))}catch(W){Z("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){Z("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,J,Q){if(!$.artifacts)return;let Z=await this.invoke("updateSessionStatus",$.sessionId,J,Q);if(!Z.updated)return;let W=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(W.status=J,j0(J))delete W.ended_at,W.exit_code=null;else W.ended_at=Z.endedAt??e(),W.exit_code=typeof Q==="number"?Q:null;$.artifacts.manifest=W,$.status=J,$.updatedAt=Z.endedAt??e(),$.endedAt=j0(J)?null:W.ended_at,$.exitCode=W.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,W),this.emitStatus($.sessionId,J)}async runWithAuthRetry($,J,Q){try{return await J()}catch(Z){if(!I$($.config.providerId)||!pb(Z))throw Z;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),J()}}async syncOAuthCredentials($,J){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:J?.forceRefresh})}catch(Z){if(Z instanceof $Z)throw Error(`${Z.providerId} requires re-authentication.`);throw Z}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 J=this.sessions.get($);if(!J){let Q=new u1($);throw h2(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return J}resolveAbsoluteFilePaths($,J){if(!J||J.length===0)return[];let Q=J.map((Z)=>Z.trim()).filter((Z)=>Z.length>0).map((Z)=>db(Z)?Z:vj($,Z));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return g1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let J=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=B0($.initialUsage,J);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,J,Q){let Z=vj(J),W=`${Q}.messages.json`,j;try{j=cb($)}catch{return D0()}let X=D0();for(let f of j){if(!f.endsWith(".messages.json"))continue;if(f===W)continue;let Y=vj($,f);if(Y===Z)continue;let V=await q$(Y);if(V.length===0)continue;X=B0(X,f8(V))}return X}withPersistedAggregateUsageFloor($,J){let Q=nb(J.metadata?.aggregateUsage);if(Q)return ab($,Q);let Z=J.metadata?.aggregatedAgentsCost;if(typeof Z!=="number"||!Number.isFinite(Z)||Z<=$.totalCost)return $;return{...$,totalCost:Z}}emitStatus($,J){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:J}})}async emitSessionSnapshot($){let J=await this.getSession($);if(!J)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:F1({session:J,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($)),AF))}async getRow($){let J=$.trim();if(!J)return;return(await this.listRows(AF)).find((Z)=>Z.sessionId===J)}async readManifest($){let J=$.trim();if(!J)return;return await this.invokeOptionalValue("readSessionManifest",J)}invoke($,...J){return YF(this.sessionService,$,...J)}invokeOptional($,...J){return VF(this.sessionService,$,...J)}invokeOptionalValue($,...J){return HF(this.sessionService,$,...J)}}function ob($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((J)=>({name:J.name,input:J.input,output:J.output,error:J.error,durationMs:J.durationMs}))}}function tb($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function T9($={}){let J=new z1({sessionService:new L1(new U1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Q){let Z=(Q.cwd?.trim()||Q.workspaceRoot).trim(),W=await J.startSession({source:Q.source?.trim()||U0.CLI,interactive:!1,config:{providerId:sb(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:Z,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:tb(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,Z){let W=await J.runTurn({sessionId:Q,prompt:Z.prompt,userImages:Z.attachments?.userImages,userFiles:Z.attachments?.userFiles?.map((j)=>j.content)});if(!W)throw Error("local hub schedule runtime returned no turn result");return{result:ob(W)}},async abortSession(Q){return await J.abort(Q,Error("hub schedule abort")),{applied:!0}},async stopSession(Q){return await J.stopSession(Q),{applied:!0}}}}$h(process.env.CLINE_VCR);function Qh($){let J=process.cwd(),Q,Z,W;for(let j=0;j<$.length;j+=1){let X=$[j],f=$[j+1];if(X==="--cwd"&&f){J=f,j+=1;continue}if(X==="--host"&&f){Q=f,j+=1;continue}if(X==="--port"&&f){let Y=Number(f);if(Number.isFinite(Y))Z=Y;j+=1;continue}if(X==="--pathname"&&f)W=f,j+=1}return{cwd:J,host:Q,port:Z,pathname:W}}async function Zh(){let $=Qh(process.argv.slice(2));process.chdir($.cwd);let J=i0({host:$.host,port:$.port,pathname:$.pathname}),Q=await C2({host:J.host,port:J.port,pathname:J.pathname,owner:Jh()==="production"?n0():E0(),runtimeHandlers:T9(),cronOptions:{workspaceRoot:$.cwd}}),Z=async()=>{await Q.close(),process.exit(0)},W=!1,j=(X,f)=>{if(W)return;W=!0;let Y=f instanceof Error?f.stack||f.message:String(f);process.stderr.write(`[hub-daemon] ${X}: ${Y}
739
+ `,"utf8")}ensureDir(){if(!zj(this.dirPath))SE(this.dirPath,{recursive:!0})}hasPersistableState($){let J=$.exportState();if(this.teammateSpecs.size>0)return!0;if(J.members.some((Q)=>Q.role==="teammate"))return!0;return J.tasks.length>0||J.mailbox.length>0||J.missionLog.length>0}clearPersistedState(){if(zj(this.statePath))EE(this.statePath)}}var rG={};w(rG,{ChatViewStateSchema:()=>Oj,ChatSummarySchema:()=>tQ,ChatSessionStatusSchema:()=>aQ,ChatSessionConfigSchema:()=>nQ,ChatMessageSchema:()=>oQ,ChatMessageRoleSchema:()=>sQ});import{z as h}from"zod";var nQ=h.object({workspaceRoot:h.string().min(1),cwd:h.string().optional(),provider:h.string().min(1),model:h.string().min(1),mode:h.enum(["act","plan"]).default("act"),apiKey:h.string(),systemPrompt:h.string().optional(),rules:h.string().optional(),maxIterations:h.number().int().positive().optional(),enableTools:h.boolean(),enableSpawn:h.boolean().optional(),enableTeams:h.boolean().optional(),autoApproveTools:h.boolean().optional(),missionStepInterval:h.number().int().positive().optional(),missionTimeIntervalMs:h.number().int().positive().optional()}),aQ=h.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),sQ=h.enum(["user","assistant","tool","system","status","error"]),oQ=h.object({id:h.string().min(1),sessionId:h.string().nullable(),role:sQ,content:h.string(),createdAt:h.number().int().nonnegative(),meta:h.object({stream:h.enum(["stdout","stderr"]).optional(),toolName:h.string().optional(),iteration:h.number().int().nonnegative().optional(),agentId:h.string().optional(),conversationId:h.string().optional(),hookEventName:h.string().optional(),inputTokens:h.number().int().nonnegative().optional(),outputTokens:h.number().int().nonnegative().optional(),checkpoint:h.object({ref:h.string(),createdAt:h.number().int().nonnegative(),runCount:h.number().int().positive(),kind:h.enum(["stash","commit"]).optional()}).optional()}).optional()}),tQ=h.object({toolCalls:h.number().int().nonnegative(),tokensIn:h.number().int().nonnegative(),tokensOut:h.number().int().nonnegative()}),Oj=h.object({sessionId:h.string().nullable(),status:aQ,config:nQ,messages:h.array(oQ),rawTranscript:h.string(),error:h.string().nullable(),summary:tQ});var iG={};w(iG,{CORE_BUILD_VERSION:()=>Tj});var Tj=PB;import{Agent as Mb,createAgentRuntime as qb}from"@cline/agents";var aG={};w(aG,{fetchClineRecommendedModels:()=>Mj,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>eQ});import{getClineEnvironmentConfig as IE}from"@cline/shared";var xE=5000,eQ={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"]}]};function gE($){return{recommended:$.recommended.map((J)=>({...J,tags:[...J.tags]})),free:$.free.map((J)=>({...J,tags:[...J.tags]}))}}function nG($){if(!$||typeof $!=="object")return null;let J=$;if(typeof J.id!=="string"||J.id.length===0)return null;return{id:J.id,name:typeof J.name==="string"&&J.name.length>0?J.name:J.id,description:typeof J.description==="string"?J.description:"",tags:Array.isArray(J.tags)?J.tags.filter((Q)=>typeof Q==="string"):[]}}function mE($){if(!$||typeof $!=="object")return null;let J=$,Q=Array.isArray(J.recommended)?J.recommended:[],Z=Array.isArray(J.free)?J.free:[],W=Q.map(nG).filter((X)=>X!==null),j=Z.map(nG).filter((X)=>X!==null);if(W.length===0&&j.length===0)return null;return{recommended:W,free:j}}function vE($){let J=$.baseUrl?.trim();if(J)return J;let Q=IE().apiBaseUrl;try{return($.providerSettingsManager??new _1).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function cE($,J,Q){let Z=new AbortController,W=setTimeout(()=>Z.abort(),Q);try{return await $(J,{signal:Z.signal})}finally{clearTimeout(W)}}async function Mj($={}){try{let J=vE($),Q=$.fetchImpl??fetch,Z=await cE(Q,`${J}/api/v1/ai/cline/recommended-models`,$.timeoutMs??xE);if(!Z.ok)throw Error(`HTTP ${Z.status}`);let W=await Z.json(),j=mE(W);if(j)return j}catch{}return gE(eQ)}var sG={};w(sG,{loadLlmsConfigFromFile:()=>Pj,defineLlmsConfig:()=>qj});import{readFile as uE}from"node:fs/promises";import dE from"node:path";function qj($){return $}async function Pj($){let J=dE.resolve($),Q=await uE(J,"utf8"),Z;try{Z=JSON.parse(Q)}catch(W){let j=W instanceof Error?W.message:String(W);throw Error(`Failed to parse JSON config at "${J}": ${j}`)}return lE(Z,J)}function lE($,J){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${J}": expected an object.`);let Z=$.providers;if(!Array.isArray(Z))throw Error(`Invalid llms config in "${J}": "providers" must be an array.`);if(!Z.length)throw Error(`Invalid llms config in "${J}": "providers" cannot be empty.`);return $}var QF={};w(QF,{createLlmsSdk:()=>wj,DefaultLlmsSdk:()=>yJ});import{BUILT_IN_PROVIDER_IDS as eG,createHandler as iE,createHandlerAsync as nE,getProviderCollection as aE,hasProvider as $F,registerAsyncHandler as sE,registerHandler as oE,registerModel as tE,registerProvider as JF}from"@cline/llms";function oG($){return $?{...$}:{}}function pE($,J){if($)return $;if(!J)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[J]}function rE($,J){if(!J.length)throw Error(`Provider "${$}" must include at least one model.`)}function tG($){let J=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:J,defaultModel:$.collection.provider.defaultModelId,modelCount:J.length}}class Nj{providers=new Map;register($){rE($.id,$.models);let J=$.defaultModel??$.models[0];if(!J)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(J))throw Error(`Default model "${J}" 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:J,defaults:{...Q?.defaults??{},...oG($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:pE($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...oG($.settings)}})}registerModel($,J){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([J]),defaultModel:J,defaults:{}});return}Q.models.add(J)}createHandlerConfig($){let J=this.require($.providerId),Q=$.modelId??J.defaultModel;if(!J.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...J.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($,J){return this.providers.get($)?.models.has(J)??!1}require($){let J=this.providers.get($);if(!J)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return J}}class yJ{configuredProviders=new Nj;constructor($){this.applyConfig($)}createHandler($){return iE(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return nE(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(JF($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)oE($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)sE($.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 J=$.exposeModels??Object.keys($.models),Q=$.defaultModel??J[0];if(!Q)throw Error(`Provider "${$.id}" must define a default model.`);JF({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:J,defaultModel:Q,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){tE($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...eG]}async getBuiltInProviders(){return(await Promise.all(eG.map((J)=>aE(J)))).filter((J)=>J!==void 0).map((J)=>tG({collection:J}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,J){return this.configuredProviders.hasModel($,J)}applyConfig($){for(let J of $.providers)this.configuredProviders.registerSelectionConfig(J);for(let J of $.models??[])this.registerModel(J);for(let J of $.customProviders??[])this.registerProvider(J);for(let J of this.configuredProviders.list()){let Q=$F(J.id),Z=this.configuredProviders.createHandlerConfig({providerId:J.id,modelId:J.defaultModel}).routingProviderId,W=typeof Z==="string"&&$F(Z);if(!Q&&!W)throw Error(`Provider "${J.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function wj($){return new yJ($)}H3();async function eE(){return Promise.resolve().then(() => (MQ(),JG))}function Cb(){return new Date().toISOString()}var yb="cline",Eb="cline-pass";function bb($){if(XF($)!=="providers.json")return;let J=Cj($);if(XF(J)!=="settings")return;return Cj(J)}class _1{filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??Sb(),this.dataDir=$.dataDir??bb(this.filePath),this.dataDir||!$.filePath)CJ({providerSettingsManager:this,dataDir:this.dataDir});if(yG(this),gQ(this.read()),Sj(this.filePath))try{jF(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!Sj(this.filePath))return z$();try{let $=Nb(this.filePath,"utf8"),J=JSON.parse($),Q=_8.safeParse(J);if(Q.success)return gQ(Q.data),Q.data}catch{}return z$()}write($){let J=_8.parse($),Q=Cj(this.filePath);if(!Sj(Q))Pb(Q,{recursive:!0,mode:448});wb(this.filePath,`${JSON.stringify(J,null,2)}
740
+ `,"utf8");try{jF(this.filePath,384)}catch{}gQ(J)}saveProviderSettings($,J={}){let Q=z8.parse($),Z=this.read(),W=Q.provider,j=J.setLastUsed!==!1,X=Z.providers[W],f=J.tokenSource??X?.tokenSource??"manual",Y={...Z,providers:{...Z.providers,[W]:{settings:Q,updatedAt:Cb(),tokenSource:f}},lastUsedProvider:j?W:Z.lastUsedProvider};return this.write(Y),Y}resolveProviderSettings($,J){let Q=$.providers[J]?.settings,W=W0(J)?.storageProviderId;if(!W||W===J)return Q;let j=$.providers[W]?.settings;if(!j)return Q;return z8.parse({...j.auth?{auth:j.auth}:{},...j.apiKey?{apiKey:j.apiKey}:{},...j.baseUrl?{baseUrl:j.baseUrl}:{},...Q??{},provider:J})}getProviderSettings($){let J=this.read();return this.resolveProviderSettings(J,$)}resolveLastUsedProviderId($,J){let Q=$.lastUsedProvider;if(Q===Eb&&J.isClinePassEnabled===!1)return yb;return Q}getLastUsedProviderSettings($={}){let J=this.read(),Q=this.resolveLastUsedProviderId(J,$);if(!Q)return;return this.resolveProviderSettings(J,Q)}getProviderConfig($,J){let Q=this.getProviderSettings($);if(!Q)return;return d0(Q,J)}getLastUsedProviderConfig($={}){let J=this.getLastUsedProviderSettings($);if(!J)return;return d0(J,$)}async refreshCatalog(){try{await R8({})}catch{}}}O0();m8();function hb($,J){let Q=$?.expiresAt,Z=J?.expiresAt;return $?.accessToken===J?.accessToken&&$?.refreshToken===J?.refreshToken&&$?.accountId===J?.accountId&&Q===Z}class $Z 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 yj{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new _1,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let J=W0($.providerId);if(!J)return null;return this.resolveWithSingleFlight(J.providerId,J.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,J,Q=!1){let Z=this.refreshInFlight.get(J);if(Z)return Z;let W=this.resolveProviderApiKeyInternal($,J,Q).catch((j)=>{throw j}).finally(()=>{this.refreshInFlight.delete(J)});return this.refreshInFlight.set(J,W),W}async resolveProviderApiKeyInternal($,J,Q){let Z=W0($);if(!Z)return null;let W=this.providerSettingsManager.getProviderSettings(J);if(!W)return null;let j=_4($,W);if(!j)return null;let X=await Z.refresh({settings:W,credentials:j,forceRefresh:Q,telemetry:this.telemetry});if(!X)throw new $Z($);let f=x$({manager:this.providerSettingsManager,providerId:$,settings:W,credentials:X,setLastUsed:!1,save:!1}),Y=!hb(W.auth,f.auth);if(Y)this.providerSettingsManager.saveProviderSettings(f,{setLastUsed:!1,tokenSource:"oauth"});return{apiKey:Z.getApiKey(f)??X.access,accountId:X.accountId,refreshed:Y}}}import{normalizeUserInput as kb}from"@cline/shared";import{nanoid as Ib}from"nanoid";class fF{list($){return $?e0($):[]}update($,J){if(!$)return{sessionId:J.sessionId,prompts:[],updated:!1};let Q=J.promptId.trim(),Z=$.pendingPrompts.findIndex((Y)=>Y.id===Q);if(Z<0)return{sessionId:J.sessionId,prompts:e0($),updated:!1};let W=$.pendingPrompts[Z];if(!W)return{sessionId:J.sessionId,prompts:e0($),updated:!1};let j=J.prompt===void 0?W.prompt:kb(J.prompt).trim();if(!j)throw Error("prompt cannot be empty");let X=J.delivery??W.delivery,f={...W,prompt:j,mode:J.mode??W.mode,delivery:X};return $.pendingPrompts.splice(Z,1),xb($,f,Z,W.delivery),{sessionId:J.sessionId,prompts:e0($),prompt:JZ(f),updated:!0}}delete($,J){if(!$)return{sessionId:J.sessionId,prompts:[],removed:!1};let Q=J.promptId.trim(),Z=$.pendingPrompts.findIndex((j)=>j.id===Q);if(Z<0)return{sessionId:J.sessionId,prompts:e0($),removed:!1};let[W]=$.pendingPrompts.splice(Z,1);return{sessionId:J.sessionId,prompts:e0($),prompt:W?JZ(W):void 0,removed:!0}}enqueue($,J){let{prompt:Q,mode:Z,delivery:W,userImages:j,userFiles:X}=J,f=$.pendingPrompts.findIndex((Y)=>Y.prompt===Q);if(f>=0){let[Y]=$.pendingPrompts.splice(f,1),V={...Y,prompt:Q,mode:Z??Y.mode,userImages:j??Y.userImages,userFiles:X??Y.userFiles};if(W==="steer"||Y.delivery==="steer")$.pendingPrompts.unshift({...V,delivery:"steer"});else $.pendingPrompts.push(V)}else{let Y={id:`pending_${Date.now()}_${Ib(5)}`,prompt:Q,mode:Z,delivery:W,userImages:j,userFiles:X};if(W==="steer")$.pendingPrompts.unshift(Y);else $.pendingPrompts.push(Y)}return e0($)}consumeSteer($){let J=$.pendingPrompts.findIndex((Z)=>Z.delivery==="steer");if(J<0)return{prompts:e0($)};let[Q]=$.pendingPrompts.splice(J,1);return{entry:Q,prompts:e0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:e0($)}}requeueFront($,J){return $.pendingPrompts.unshift(J),e0($)}clear($){return $.pendingPrompts.length=0,[]}}class Ej{deps;service=new fF;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let J=this.deps.getSession($.sessionId);if(!J||J.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(J,$);return this.emitPrompts(J),this.scheduleDrain($.sessionId,J),Q}delete($){let J=this.deps.getSession($.sessionId);if(!J||J.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(J,$);return this.emitPrompts(J),this.scheduleDrain($.sessionId,J),Q}enqueue($,J){let Q=this.deps.getSession($);if(!Q||Q.aborting)return;this.service.enqueue(Q,J),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let J=this.deps.getSession($);if(!J)return;let{entry:Q}=this.service.consumeSteer(J);if(!Q)return;return this.emitPrompts(J),this.emitSubmitted(J,Q),Q}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:e0($)}})}scheduleDrain($,J){if(J.pendingPrompts.length===0||J.aborting||J.drainingPendingPrompts||!J.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let J=this.deps.getSession($);if(!J)return;if(J.aborting||J.drainingPendingPrompts)return;if(!J.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(J);if(!Q)return;this.emitPrompts(J),this.emitSubmitted(J,Q),J.drainingPendingPrompts=!0;let Z=!0;try{await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles})}catch{Z=!1,this.service.requeueFront(J,Q),this.emitPrompts(J)}finally{if(J.drainingPendingPrompts=!1,Z&&J.pendingPrompts.length>0&&J.status!=="failed"&&J.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,J){let Q=JZ(J);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount}})}}function JZ($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0)}}function e0($){return $.pendingPrompts.map(JZ)}function xb($,J,Q,Z){if(J.delivery==="steer")$.pendingPrompts.unshift(J);else if(Z==="steer")$.pendingPrompts.push(J);else $.pendingPrompts.splice(Q,0,J)}O0();class hj{deps;constructor($){this.deps=$}dispatchAgentEvent($,J,Q){let Z=this.deps.getSession($),W={sessionId:$,config:J,liveSession:Z,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},j=V7(Q),X=!!Z&&(!j.agentId||j.agentId===bj(Z.agent));H7(W,Q,X?{isPrimaryAgentEvent:!0,agentId:bj(Z.agent),conversationId:Z.agent.getConversationId(),...Z?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,J){let Q=this.deps.getSession($);if(Q){if(nW(Q,J),J.type==="agent_event"){let Z={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};H7(Z,J.event,{agentId:J.agentId,teamRole:"teammate",teamAgentId:J.agentId,isPrimaryAgentEvent:!1})}if(J.type==="teammate_spawned"){let Z=g1({agentId:J.teammate.runtimeAgentId??J.agentId,conversationId:J.teammate.conversationId,parentAgentId:J.teammate.parentAgentId,createdByAgentId:bj(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:J.agentId});if(Z)$$(Q.config.telemetry,{ulid:$,modelId:J.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...Z})}}if(await aW($,J,this.deps.invokeBackendOptional),Q)sW(Q,$,J,this.deps.emit)}async handlePluginEvent($,J,Q){if(J.name==="plugin_log"){this.handlePluginLog($,J.payload);return}if(J.name==="automation_event"){let Y=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!Y)return;let V=J.payload&&typeof J.payload==="object"?J.payload:void 0;if(!V)return;await Y.ingestEvent(V);return}if(J.name!=="steer_message"&&J.name!=="queue_message"&&J.name!=="pending_prompt")return;let Z=J.payload&&typeof J.payload==="object"?J.payload:void 0,W=typeof Z?.sessionId==="string"&&Z.sessionId.trim().length>0?Z.sessionId.trim():$,j=typeof Z?.prompt==="string"?Z.prompt.trim():"";if(!j)return;let X=J.name==="steer_message"?"steer":J.name==="queue_message"?"queue":Z?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(W,{prompt:j,delivery:X})}handlePluginLog($,J,Q){let Z=this.deps.getSession($),W=Q??Z?.config.extensionContext?.logger??Z?.config.logger;if(!W||!J||typeof J!=="object")return;let j=J,X=typeof j.message==="string"?j.message:"";if(!X)return;let f=j.metadata&&typeof j.metadata==="object"?{...j.metadata}:{};if(f.sessionId??=$,typeof j.pluginName==="string"&&j.pluginName)f.pluginName=j.pluginName;if(j.level==="debug"){W.debug(X,f);return}if(j.level==="error"){if(W.error)W.error(X,f);else W.log(X,{...f,severity:"error"});return}W.log(X,f)}}function bj($){return $.getAgentId()}function kj($){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:G$($.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 Ij($,J){let Q=$[J];return typeof Q==="function"?Q:null}async function YF($,J,...Q){let Z=Ij($,J);if(!Z)throw Error(`session service method not available: ${J}`);return Promise.resolve(Z.apply($,Q))}async function VF($,J,...Q){let Z=Ij($,J);if(!Z)return;await Promise.resolve(Z.apply($,Q))}async function HF($,J,...Q){let Z=Ij($,J);if(!Z)return;return await Promise.resolve(Z.apply($,Q))}W1();O0();function xj($,J,Q){return{onSubAgentEvent:(Z)=>$.onAgentEvent(Q,J,Z),onSubAgentStart:(Z)=>{let W=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(Z.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let j=g1({agentId:Z.subAgentId,conversationId:Z.conversationId,parentAgentId:Z.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:Z.parentAgentId});if(j)$$(J.telemetry,{ulid:Q,modelId:J.modelId,provider:J.providerId,...j});A4(J.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:Z.parentAgentId,agentId:Z.subAgentId,...j}),$.invokeBackendOptional("handleSubAgentStart",Q,Z)},onSubAgentEnd:(Z)=>{let W=$.getSession(Q)?.runtime.teamRuntime,j=$.subAgentStarts.get(Z.subAgentId),X=j?Date.now()-j.startedAt:0,f=Z.result?.text?Z.result.text.split(`
741
+ `).length:0;A4(J.telemetry,{event:"ended",ulid:Q,durationMs:X,outputLines:f,errorMessage:Z.error?String(Z.error):void 0,agentId:Z.subAgentId,parentId:Z.parentAgentId,...g1({agentId:Z.subAgentId,conversationId:Z.conversationId,parentAgentId:Z.parentAgentId,teamId:W?.getTeamId(),teamName:W?.getTeamName(),createdByAgentId:Z.parentAgentId})}),$.subAgentStarts.delete(Z.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,Z)}}}function gj($,J,Q,Z){let W=xj($,J,Q);return A$({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:J.providerId,modelId:J.modelId,cwd:J.cwd,apiKey:J.apiKey,baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking,maxIterations:J.maxIterations,hooks:J.hooks,extensions:J.extensions,logger:J.logger,telemetry:J.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:J.providerId,modelId:J.modelId,apiKey:J.apiKey,baseUrl:J.baseUrl,headers:J.headers,providerConfig:J.providerConfig,knownModels:J.knownModels,thinking:J.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let X=J.enableTools?n$({cwd:J.cwd,...c0[h1({mode:J.mode})],executors:Z}):[];if(J.enableSpawnAgent)X.push(gj($,J,Q,Z));return I1(X)},...W})}import{readFile as gb,stat as mb}from"node:fs/promises";var vb=20480000;async function BF($){let J=await mb($);if(!J.isFile())throw Error("Path is not a file");if(J.size>vb)throw Error("File is too large to read into context.");let Q=await gb($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var AF=5000;function EJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function nb($){if(!$||typeof $!=="object"||Array.isArray($))return;let J=$,Q=EJ(J.inputTokens),Z=EJ(J.outputTokens),W=EJ(J.cacheReadTokens),j=EJ(J.cacheWriteTokens),X=EJ(J.totalCost);if(Q===void 0||Z===void 0||W===void 0||j===void 0||X===void 0)return;return{inputTokens:Q,outputTokens:Z,cacheReadTokens:W,cacheWriteTokens:j,totalCost:X}}function ab($,J){return{inputTokens:Math.max($.inputTokens,J.inputTokens),outputTokens:Math.max($.outputTokens,J.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,J.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,J.cacheWriteTokens),totalCost:Math.max($.totalCost,J.totalCost)}}class z1{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new JJ;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new y$;constructor($){let J=ub();if(J)ib(J);let Q=b0($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new j4,this.createAgentInstance=$.createAgent??((Z)=>new V$(Z)),this.defaultCapabilities=z0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new _1,this.oauthTokenManager=$.oauthTokenManager??new yj({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,this.pendingPromptsController=new Ej({getSession:(Z)=>this.sessions.get(Z),emit:(Z)=>this.emit(Z),send:(Z)=>this.runTurn(Z)}),this.pendingPrompts={list:async(Z)=>this.pendingPromptsController.list(Z.sessionId),update:async(Z)=>this.pendingPromptsController.update(Z),delete:async(Z)=>this.pendingPromptsController.delete(Z)},this.eventBridge=new hj({getSession:(Z)=>this.sessions.get(Z),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(Z)=>this.emit(Z),persistMessages:(Z,W,j)=>{this.invoke("persistSessionMessages",Z,W,j)},enqueuePendingPrompt:(Z,W)=>this.pendingPromptsController.enqueue(Z,W),invokeBackendOptional:(Z,...W)=>this.invokeOptional(Z,...W)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let J=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!J?.apiKey)return $;return{...$,config:{...$.config,apiKey:J.apiKey}}}async startSession($){let J=$.source??U0.CLI,Q=$0(),Z=$.config.sessionId?.trim()??"",W=Z||lb(),j=await this.applyInitialOAuthCredentials($),X=j.initialMessages??[],f=X.length>0?f8(X):D0(),Y=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!Y)throw Error("session service method not available: ensureSessionsDir");let V=mj(Y,W),H=mj(V,`${W}.messages.json`),B=mj(V,`${W}.json`),A=G$($.config),K=S0.parse({version:1,session_id:W,source:J,pid:process.pid,started_at:Q,status:"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:A,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:H}),G;if(Z.length>0&&X.length>0&&!j.prompt?.trim()){let C=await this.invokeOptionalValue("readSessionManifest",W);if(C)K=C,G={manifestPath:B,messagesPath:C.messages_path||H,manifest:C}}let D=await this.seedAggregateUsageFromArtifacts({initialUsage:f,sessionDir:V,rootMessagesPath:G?.messagesPath??H,manifest:K});this.usageBySession.set(W,f),this.aggregateUsageBySession.set(W,D);let U=z0(this.defaultCapabilities,$.capabilities),F=U?.toolExecutors??this.toolExecutors,O=$.localRuntime,T=O?.extensionContext?.logger??O?.logger,z=O?.extensionContext?.automation,L,P={getSession:(C)=>this.sessions.get(C),subAgentStarts:this.subAgentStarts,onAgentEvent:(C,f0,Y0)=>this.eventBridge.dispatchAgentEvent(C,f0,Y0),invokeBackendOptional:(C,...f0)=>this.invokeOptional(C,...f0)};L=await iV({input:j,localRuntime:$.localRuntime,sessionId:W,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:U,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(C)=>{if(C.name==="plugin_log"){this.eventBridge.handlePluginLog(W,C.payload,T);return}this.eventBridge.handlePluginEvent(W,C,z)},onTeamEvent:(C)=>{this.eventBridge.handleTeamEvent(W,C),L.config.onTeamEvent?.(C)},createSpawnTool:()=>gj(P,L.config,W,F),createSubAgentLifecycleCallbacks:(C)=>xj(P,C,W),readSessionMetadata:async()=>(await this.getSession(W))?.metadata,writeSessionMetadata:async(C)=>{await this.persistSessionMetadata(W,()=>C)}});let S=await this.runtimeBuilder.build(L.runtimeBuilderInput),b=L.config,u=L.providerConfig;if(S.teamRuntime&&!b.teamName?.trim())b.teamName=S.teamRuntime.getTeamName();let t=[...S.tools,...b.extraTools??[]],Q0=S.extensions??L.extensions,e={sessionId:W,providerId:u.providerId,modelId:u.modelId,apiKey:u.apiKey,baseUrl:u.baseUrl,headers:u.headers,knownModels:u.knownModels,providerConfig:u,thinking:b.thinking,reasoningEffort:b.reasoningEffort??u.reasoningEffort,systemPrompt:b.systemPrompt,maxIterations:b.maxIterations,execution:b.execution,prepareTurn:N4(b),tools:t,hooks:L.hooks,extensions:Q0,hookErrorMode:b.hookErrorMode,initialMessages:L.effectiveInput.initialMessages,userFileContentLoader:BF,toolPolicies:L.toolPolicies,requestToolApproval:L.requestToolApproval?async(C)=>{let f0=L.requestToolApproval,Y0=this.sessions.get(W);if(Y0)await this.markTurnPending(Y0);try{if(!f0)return{approved:!1,reason:"Tool approval callback is not configured."};return await f0(C)}finally{let w0=this.sessions.get(W);if(w0?.status==="pending")await this.markTurnRunning(w0)}}:void 0,telemetry:b.telemetry,onConsecutiveMistakeLimitReached:b.onConsecutiveMistakeLimitReached,completionPolicy:S.completionPolicy,consumePendingUserMessage:()=>{let C=this.pendingPromptsController.consumeSteer(W);return C?GJ(C.prompt,C.mode??b.mode):void 0},logger:S.logger??b.logger,extensionContext:b.extensionContext,onEvent:(C)=>this.eventBridge.dispatchAgentEvent(W,b,C)};e.hooks={...e.hooks,onEvent:async(C)=>{if(await L.hooks?.onEvent?.(C),C.type!=="assistant-message")return;let f0=this.sessions.get(W);if(!f0)return;let Y0=f0.agent.getMessages();try{await this.invoke("persistSessionMessages",W,Y0,b.systemPrompt)}catch(w0){b.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:W,error:w0}),h2(b.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:w0,severity:"warn",handled:!0,context:{sessionId:W,providerId:b.providerId,modelId:b.modelId}})}}};let $1=this.createAgentInstance(e);if(e.onEvent)$1.subscribeEvents(e.onEvent);S.registerLeadAgent?.($1);let b$=g1({agentId:$1.getAgentId(),conversationId:$1.getConversationId(),teamId:S.teamRuntime?.getTeamId(),teamName:S.teamRuntime?.getTeamName(),teamRole:S.teamRuntime?"lead":void 0});if(aV(b,W,Z.length>0,A,b$),b$)$$(b.telemetry,{ulid:W,modelId:b.modelId,provider:b.providerId,...b$});if(S.teamRuntime)aJ(b.telemetry,{ulid:W,teamId:S.teamRuntime.getTeamId(),teamName:S.teamRuntime.getTeamName(),leadAgentId:$1.getAgentId(),restoredFromPersistence:S.teamRestoredFromPersistence===!0});let r={sessionId:W,config:b,sessionMetadata:j.sessionMetadata,...G?{artifacts:G}:{},source:J,startedAt:G?.manifest.started_at??Q,updatedAt:G?.manifest.ended_at??G?.manifest.started_at??Q,pendingPrompt:K.prompt,runtime:S,agent:$1,started:!1,status:G?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:X,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:L.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(this.sessions.set(W,r),this.emitStatus(W,"running"),X.length>0&&!G){if(await this.ensureSessionPersisted(r),await this.invoke("persistSessionMessages",r.sessionId,X,r.config.systemPrompt),!j.prompt?.trim())await this.updateStatus(r,"completed",0)}let O1;try{if(j.prompt?.trim())if(O1=await this.executeTurn(r,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!r.interactive)await this.finalizeSingleRun(r,O1.finishReason);else await this.completeInteractiveTurn(r,O1.finishReason)}catch(C){if(r.interactive&&r.aborting)O1=await this.completeAbortedInteractiveTurn(r);else{h2(r.config.telemetry,{component:"core",operation:"session.start",error:C,severity:"error",handled:!1,context:{sessionId:r.sessionId,providerId:r.config.providerId,modelId:r.config.modelId}});try{await this.failSession(r)}catch(f0){r.config.logger?.error?.("Session failure cleanup threw",{sessionId:r.sessionId,error:f0})}throw C}}return{sessionId:W,manifest:K,manifestPath:B,messagesPath:H,result:O1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(J)=>this.getSession(J),readMessages:(J)=>this.readSessionMessages(J),buildStartInput:(J,Q)=>{let Z=J.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:J.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...Z?{sessionMetadata:Z}:{},initialMessages:J.initialMessages}},startSession:(J)=>this.startSession(J),getStartedSessionId:(J)=>J.sessionId,readRestoredSession:(J)=>this.getSession(J)})}async runTurn($){let J=this.getSessionOrThrow($.sessionId),Q=J.agent.canStartRun(),Z=$.delivery??(J.interactive&&!Q?"queue":void 0);if(J.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:Z??"immediate"}}),Z==="queue"||Z==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:Z,userImages:$.userImages,userFiles:$.userFiles});return}try{let W=await this.executeTurn(J,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!J.interactive)await this.finalizeSingleRun(J,W.finishReason);else await this.completeInteractiveTurn(J,W.finishReason);if(W.finishReason==="error"||W.finishReason==="aborted")return W;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),W}catch(W){if(J.interactive&&J.aborting)return await this.completeAbortedInteractiveTurn(J);throw h2(J.config.telemetry,{component:"core",operation:"session.submit",error:W,severity:"error",handled:!1,context:{sessionId:J.sessionId,providerId:J.config.providerId,modelId:J.config.modelId}}),await this.failSession(J),W}}async getAccumulatedUsage($){let J=OW(this.usageBySession.get($)),Q=OW(this.aggregateUsageBySession.get($));return J||Q?{usage:J,aggregateUsage:Q}:void 0}async abort($,J){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(J)}async stopSession($){let J=this.sessions.get($);if(!J)return;if(J.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),J.interactive&&!X0(J.status)){await this.releaseSessionRuntime(J,"session_stop");return}if(J.interactive&&J.agent.canStartRun()){await this.shutdownSession(J,{status:this.resolveInteractiveStopStatus(J),exitCode:this.resolveInteractiveStopExitCode(J),shutdownReason:"session_stop",endReason:"stopped"});return}J.aborting=!0,J.agent.abort(Error("session_stop")),await this.shutdownSession(J,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let J=[...this.sessions.values()];if(J.length===0)return;await Promise.allSettled(J.map((Q)=>Q.interactive&&!X0(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 J=this.sessions.get($);if(J)return kj(J);let Q=$.trim();if(!Q)return;let Z=await this.getRow(Q);if(Z)return W6(Z);let W=await this.readManifest(Q);return W?p9(W):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(W6),Z=new Set(Q.map((W)=>W.sessionId));for(let W of this.sessions.values()){if(Z.has(W.sessionId))continue;Q.unshift(kj(W))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let J=await this.invoke("deleteSession",$);if(J.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return J.deleted}async updateSession($,J){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:J.prompt,metadata:J.metadata,title:J.title}))?.updated===!0}}async readSessionMessages($){let J=$.trim();if(!J)return[];let Q=await this.getRow(J);if(Q?.messagesPath)return q$(Q.messagesPath);let Z=await this.readManifest(J);return q$(Z?.messages_path)}async dispatchHookEvent($){await RB($,{queueSpawnRequest:(J)=>this.invokeOptional("queueSpawnRequest",J),upsertSubagentSessionFromHook:(J)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",J),appendSubagentHookAudit:(J,Q)=>this.invokeOptional("appendSubagentHookAudit",J,Q),applySubagentStatus:(J,Q)=>this.invokeOptional("applySubagentStatus",J,Q)})}subscribe($,J){return this.events.subscribe($,J)}async updateSessionModel($,J){let Q=this.getSessionOrThrow($);Q.config.modelId=J,Q.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:J}),Q.agent.updateConnection({modelId:J})}handlePluginEvent($,J,Q){return this.eventBridge.handlePluginEvent($,J,Q)}async executeTurn($,J){let Q=await this.prepareTurnInput($,J),Z=Q.prompt.trim();if(!Z)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=Z;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let W=await this.executeAgentTurn($,Z,Q.userImages,Q.userFiles);while(oW($,W.finishReason)){let j=await tW($);if(j.length===0)break;let X=eW($,j);W=await this.executeAgentTurn($,X)}return W}async completeInteractiveTurn($,J){if(KJ($))return;$.lastInteractiveTurnFinishReason=J,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let J=$.lastInteractiveTurnFinishReason;if(!J)return"cancelled";switch(J){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return J}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let J=new Date,Q=$.agent.getMessages(),Z=D0();return $.persistedMessages=Q,$.started=$.started||Q.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:Z}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:Z,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:J,endedAt:J,durationMs:0}}async executeAgentTurn($,J,Q,Z){let W=$.started||$.agent.getMessages().length>0,j=$.persistedMessages??$.agent.getMessages(),X=this.usageBySession.get($.sessionId)??D0(),f=this.aggregateUsageBySession.get($.sessionId)??X;$.turnUsageBaseline=X,$.turnAggregateUsageBaseline=f,$.turnPrimaryUsage=D0(),$.turnUsageByAgent=new Map,uJ($.config.telemetry,$.sessionId,$.config.mode),g2($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let Y=W?()=>$.agent.continue(J,Q,Z):()=>$.agent.run(J,Q,Z),V=await this.runWithAuthRetry($,Y,j);$.started=!0;let H=x5(V.messages,V,j);$.persistedMessages=H;let B=X6($.turnUsageByAgent?.values()??[]),A=A0(X,V.usage),K=A0(A0(D0(),V.usage),B),G=A0(f,K);return this.usageBySession.set($.sessionId,A),this.aggregateUsageBySession.set($.sessionId,G),await this.persistSessionMetadata($.sessionId,(R)=>({...R??{},totalCost:A.totalCost,aggregatedAgentsCost:G.totalCost,usage:A,aggregateUsage:G})),await this.invoke("persistSessionMessages",$.sessionId,H,$.config.systemPrompt),this.observeTaskCompletionTool($,V),V}catch(Y){throw h2($.config.telemetry,{component:"core",operation:"session.turn",error:Y,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),Y}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,J){if($.submitAndExitObserved)return;if(!J.toolCalls.some((Z)=>Z.name===F0.SUBMIT_AND_EXIT&&Z.error===void 0))return;$.submitAndExitObserved=!0,H4($.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($,J){let Q=G$($.config),Z=rb(J.prompt).trim();if(!Z)return{prompt:"",userImages:J.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,J.userFiles)};let W=await a2(Z,Q);sV($.config.telemetry,W);let j=GJ(W.prompt,J.mode??$.config.mode),X=this.resolveAbsoluteFilePaths($.config.cwd,J.userFiles),f=this.resolveAbsoluteFilePaths(Q,W.matchedFiles),Y=Array.from(new Set([...X,...f]));return{prompt:j,userImages:J.userImages,userFiles:Y.length>0?Y:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let J=G$($.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:J,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($,J){let Q=this.sessions.get($),Z=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,W=J(Z?.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($,J){if(KJ($))return;let Q=J==="aborted"||$.aborting,Z=J==="error";await this.shutdownSession($,{status:Q?"cancelled":Z?"failed":"completed",exitCode:Z?1:0,shutdownReason:Z?"session_error":"session_complete",endReason:J})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,J){if(J.status==="completed"&&!$.submitAndExitObserved)H4($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});YQ($);let Q=[],Z=(W,j)=>{Q.push(j),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:W,error:j,severity:"warn"}),h2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,status:J.status,shutdownReason:J.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,J.status,J.exitCode)}catch(W){Z("update_status",W)}try{await $.agent.shutdown(J.shutdownReason)}catch(W){Z("agent_shutdown",W)}}try{await Promise.resolve($.runtime.shutdown(J.shutdownReason))}catch(W){Z("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){Z("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:J.endReason,ts:Date.now()}}),Q.length>0&&J.status==="failed")throw Q[0]}async releaseSessionRuntime($,J){let Q=[],Z=(W,j)=>{Q.push(j),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:W,error:j,severity:"warn"}),h2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:j,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:W,reason:J,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(J)}catch(W){Z("agent_shutdown",W)}try{await Promise.resolve($.runtime.shutdown(J))}catch(W){Z("runtime_shutdown",W)}try{await $.pluginSandboxShutdown?.()}catch(W){Z("plugin_sandbox_shutdown",W)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,J,Q){if(!$.artifacts)return;let Z=await this.invoke("updateSessionStatus",$.sessionId,J,Q);if(!Z.updated)return;let W=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(W.status=J,X0(J))delete W.ended_at,W.exit_code=null;else W.ended_at=Z.endedAt??$0(),W.exit_code=typeof Q==="number"?Q:null;$.artifacts.manifest=W,$.status=J,$.updatedAt=Z.endedAt??$0(),$.endedAt=X0(J)?null:W.ended_at,$.exitCode=W.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,W),this.emitStatus($.sessionId,J)}async runWithAuthRetry($,J,Q){try{return await J()}catch(Z){if(!I$($.config.providerId)||!pb(Z))throw Z;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),J()}}async syncOAuthCredentials($,J){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:J?.forceRefresh})}catch(Z){if(Z instanceof $Z)throw Error(`${Z.providerId} requires re-authentication.`);throw Z}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 J=this.sessions.get($);if(!J){let Q=new u1($);throw h2(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return J}resolveAbsoluteFilePaths($,J){if(!J||J.length===0)return[];let Q=J.map((Z)=>Z.trim()).filter((Z)=>Z.length>0).map((Z)=>db(Z)?Z:vj($,Z));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return g1({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let J=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=A0($.initialUsage,J);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,J,Q){let Z=vj(J),W=`${Q}.messages.json`,j;try{j=cb($)}catch{return D0()}let X=D0();for(let f of j){if(!f.endsWith(".messages.json"))continue;if(f===W)continue;let Y=vj($,f);if(Y===Z)continue;let V=await q$(Y);if(V.length===0)continue;X=A0(X,f8(V))}return X}withPersistedAggregateUsageFloor($,J){let Q=nb(J.metadata?.aggregateUsage);if(Q)return ab($,Q);let Z=J.metadata?.aggregatedAgentsCost;if(typeof Z!=="number"||!Number.isFinite(Z)||Z<=$.totalCost)return $;return{...$,totalCost:Z}}emitStatus($,J){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:J}})}async emitSessionSnapshot($){let J=await this.getSession($);if(!J)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:F1({session:J,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($)),AF))}async getRow($){let J=$.trim();if(!J)return;return(await this.listRows(AF)).find((Z)=>Z.sessionId===J)}async readManifest($){let J=$.trim();if(!J)return;return await this.invokeOptionalValue("readSessionManifest",J)}invoke($,...J){return YF(this.sessionService,$,...J)}invokeOptional($,...J){return VF(this.sessionService,$,...J)}invokeOptionalValue($,...J){return HF(this.sessionService,$,...J)}}function ob($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((J)=>({name:J.name,input:J.input,output:J.output,error:J.error,durationMs:J.durationMs}))}}function tb($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function TQ($={}){let J=new z1({sessionService:new L1(new U1),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(Q){let Z=(Q.cwd?.trim()||Q.workspaceRoot).trim(),W=await J.startSession({source:Q.source?.trim()||U0.CLI,interactive:!1,config:{providerId:sb(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:Z,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:tb(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,Z){let W=await J.runTurn({sessionId:Q,prompt:Z.prompt,userImages:Z.attachments?.userImages,userFiles:Z.attachments?.userFiles?.map((j)=>j.content)});if(!W)throw Error("local hub schedule runtime returned no turn result");return{result:ob(W)}},async abortSession(Q){return await J.abort(Q,Error("hub schedule abort")),{applied:!0}},async stopSession(Q){return await J.stopSession(Q),{applied:!0}}}}$h(process.env.CLINE_VCR);function Qh($){let J=process.cwd(),Q,Z,W;for(let j=0;j<$.length;j+=1){let X=$[j],f=$[j+1];if(X==="--cwd"&&f){J=f,j+=1;continue}if(X==="--host"&&f){Q=f,j+=1;continue}if(X==="--port"&&f){let Y=Number(f);if(Number.isFinite(Y))Z=Y;j+=1;continue}if(X==="--pathname"&&f)W=f,j+=1}return{cwd:J,host:Q,port:Z,pathname:W}}async function Zh(){let $=Qh(process.argv.slice(2));process.chdir($.cwd);let J=i0({host:$.host,port:$.port,pathname:$.pathname}),Q=await C2({host:J.host,port:J.port,pathname:J.pathname,owner:Jh()==="production"?n0():E0(),runtimeHandlers:TQ(),cronOptions:{workspaceRoot:$.cwd}}),Z=async()=>{await Q.close(),process.exit(0)},W=!1,j=(X,f)=>{if(W)return;W=!0;let Y=f instanceof Error?f.stack||f.message:String(f);process.stderr.write(`[hub-daemon] ${X}: ${Y}
742
742
  `),Q.close().catch((V)=>{let H=V instanceof Error?V.stack||V.message:String(V);process.stderr.write(`[hub-daemon] shutdown after ${X} failed: ${H}
743
743
  `)}).finally(()=>{process.exit(1)})};process.on("SIGINT",()=>{Z()}),process.on("SIGTERM",()=>{Z()}),process.on("uncaughtException",(X)=>{j("uncaughtException",X)}),process.on("unhandledRejection",(X)=>{if(X instanceof eb){process.stderr.write(`[hub-daemon] ignored agent runtime abort rejection: ${X.message}
744
744
  `);return}j("unhandledRejection",X)}),await new Promise(()=>{})}Zh().catch(($)=>{let J=$ instanceof Error?$.stack||$.message:String($);process.stderr.write(`[hub-daemon] fatal: ${J}