@cline/core 0.0.40 → 0.0.41

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,15 +1,15 @@
1
- import{createRequire as XB}from"node:module";var{defineProperty:N5,getOwnPropertyNames:ZB}=Object;var dZ=Object.prototype.hasOwnProperty;function lZ($){return this[$]}var M=($,f,J)=>{var Q=ZB(f);for(let Z of Q)if(!dZ.call($,Z)&&Z!=="default")N5($,Z,{get:lZ.bind(f,Z),enumerable:!0});if(J){for(let Z of Q)if(!dZ.call(J,Z)&&Z!=="default")N5(J,Z,{get:lZ.bind(f,Z),enumerable:!0});return J}};var WB=($)=>$;function jB($,f){this[$]=WB.bind(null,f)}var q=($,f)=>{for(var J in f)N5($,J,{get:f[J],enumerable:!0,configurable:!0,set:jB.bind(f,J)})};var F1=($,f)=>()=>($&&(f=$($=0)),f);var pZ=XB(import.meta.url);var $W={};q($W,{normalizeUserMessage:()=>QG,buildInitialUserContent:()=>JG});async function JG($,f,J,Q){let Z=ZG(f),W=await jG(J,Q);if(Z.length===0&&!W)return $;let j=[{type:"text",text:$},...Z];if(W)j.push(...W);return j}function QG($){if($==null)return"";if(typeof $==="string")return $;let f=$.content;if(typeof f==="string")return f;if(!Array.isArray(f))return"";let J=[];for(let Q of f)if(Q&&typeof Q==="object"&&Q.type==="text"){let Z=Q.text;if(typeof Z==="string")J.push(Z)}return J.join(`
2
- `)}function ZG($){if(!$||$.length===0)return[];let f=[];for(let J of $){let Q=WG(J);if(Q)f.push(Q)}return f}function WG($){let f=$.trim();if(!f)return;let J=f.match(/^data:([^;,]+);base64,(.+)$/);if(J){let Q=J[1],Z=J[2];if(!Q||!Z)return;return{type:"image",mediaType:Q,data:Z}}return{type:"image",mediaType:"image/png",data:f}}async function jG($,f){if(!$||$.length===0)return;let J=f??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),Q=await Promise.all($.map(async(Z)=>{let W=Z.replace(/\\/g,"/");try{let j=await J(Z);return{type:"file",path:W,content:j}}catch(j){let X=j instanceof Error?j.message:String(j);return{type:"file",path:W,content:`Error fetching content: ${X}`}}}));if(Q.length===0)return;return Q}import{SDK_ERROR_TELEMETRY_EVENT as tG}from"@cline/shared";function r($,f,J){$?.capture({event:f,properties:J})}function Z6($){if(!$)return;return $.substring(0,sG)}function oG($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function eG($){return typeof $==="string"?$:$.message}function gW($,f){return $.some((J)=>f.has(J.trim().toLowerCase()))}function mW($){r($,v.CLIENT.EXTENSION_ACTIVATED)}function W6($,f){let J=[...f.vcs_types],Q={root_count:f.root_count,vcs_types:J,is_multi_root:f.root_count>1,has_git:gW(J,new Set(["git"])),has_mercurial:gW(J,new Set(["mercurial","hg"]))};if(f.init_duration_ms!==void 0)Q.init_duration_ms=f.init_duration_ms;if(f.feature_flag_enabled!==void 0)Q.feature_flag_enabled=f.feature_flag_enabled;if(f.is_remote_workspace!==void 0)Q.is_remote_workspace=f.is_remote_workspace;r($,v.WORKSPACE.INITIALIZED,Q)}function j6($,f,J){r($,v.WORKSPACE.INIT_ERROR,{error_type:oG(f),error_message:Z6(eG(f)),fallback_to_single_root:J.fallback_to_single_root,workspace_count:J.workspace_count??0})}function vW($,f){r($,v.WORKSPACE.PATH_RESOLVED,{...f})}function L$($,f){r($,v.USER.AUTH_STARTED,{provider:f})}function O$($,f){r($,v.USER.AUTH_SUCCEEDED,{provider:f})}function z$($,f,J){r($,v.USER.AUTH_FAILED,{provider:f,errorMessage:Z6(J)})}function n$($,f,J){r($,v.USER.AUTH_LOGGED_OUT,{provider:f,reason:J})}function cW($,f){$?.captureRequired(v.USER.TELEMETRY_OPT_OUT,f)}function _$($,f){let J=f.id?.trim();if(J)$?.setDistinctId(J);$?.updateCommonProperties({account_id:f.id,account_email:f.email,provider:f.provider,organization_id:f.organizationId,organization_name:f.organizationName,member_id:f.memberId})}function X6($,f){r($,v.TASK.CREATED,f)}function H6($,f){r($,v.TASK.RESTARTED,f)}function J8($,f){r($,v.TASK.COMPLETED,f)}function yf($,f){r($,v.TASK.CONVERSATION_TURN,{...f,timestamp:new Date().toISOString()})}function Y6($,f){r($,v.TASK.TOKEN_USAGE,f)}function V6($,f,J){r($,v.TASK.MODE_SWITCH,{ulid:f,mode:J})}function A6($,f){r($,v.TASK.TOOL_USED,f)}function B6($,f){r($,v.TASK.SKILL_USED,f)}function K6($,f){r($,v.TASK.DIFF_EDIT_FAILED,f)}function Q8($,f){r($,v.TASK.PROVIDER_API_ERROR,{...f,errorMessage:Z6(f.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function G6($,f,J){r($,v.TASK.MENTION_USED,{mentionType:f,contentLength:J,timestamp:new Date().toISOString()})}function P6($,f,J,Q){r($,v.TASK.MENTION_FAILED,{mentionType:f,errorType:J,errorMessage:Z6(Q),timestamp:new Date().toISOString()})}function F6($,f,J,Q,Z){r($,v.TASK.MENTION_SEARCH_RESULTS,{queryLength:f.length,resultCount:J,searchType:Q,isEmpty:Z,timestamp:new Date().toISOString()})}function a$($,f){r($,v.TASK.AGENT_CREATED,{...f,timestamp:new Date().toISOString()})}function D6($,f){r($,v.TASK.AGENT_TEAM_CREATED,{...f,timestamp:new Date().toISOString()})}function Z8($,f){r($,f.event==="ended"?v.TASK.SUBAGENT_COMPLETED:v.TASK.SUBAGENT_STARTED,{...f,timestamp:new Date().toISOString()})}function R6($,f,J,Q){r($,v.HOOKS.DISCOVERY_COMPLETED,{hookName:f,globalCount:J,workspaceCount:Q,totalCount:J+Q,timestamp:new Date().toISOString()})}var sG=500,v;var T0=F1(()=>{v={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",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"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:tG}}});import{mkdirSync as jP,readFileSync as XP,writeFileSync as HP}from"node:fs";import{dirname as YP}from"node:path";import{resolveGlobalSettingsPath as rW}from"@cline/shared/storage";import{z as j8}from"zod";function pW(){return X8.parse({})}function J$(){let $=rW(),f;try{f=JSON.parse(XP($,"utf8"))}catch{return pW()}let J=X8.safeParse(f);return J.success?J.data:pW()}function C1($,f={}){let J=rW(),Q=J$();jP(YP(J),{recursive:!0});let Z=X8.parse($);if(!Q.telemetryOptOut&&Z.telemetryOptOut)cW(f.telemetry);HP(J,`${JSON.stringify(Z,null,2)}
3
- `,"utf8")}function O6(){return J$().telemetryOptOut}function iW($,f={}){C1({...J$(),telemetryOptOut:$},f)}function n0($){return new Set($??J$().disabledTools??[])}function H8($){return new Set($??J$().disabledPlugins??[])}function nW($){return n0().has($)}function z6($){let f=n0(),J=J$();if(f.has($))return f.delete($),C1({...J,disabledTools:[...f]}),!1;return f.add($),C1({...J,disabledTools:[...f]}),!0}function D9($,f){let J=[...new Set($.map((W)=>W.trim()).filter(Boolean))];if(J.length===0)return;let Q=J$(),Z=n0(Q.disabledTools);for(let W of J)if(f)Z.add(W);else Z.delete(W);C1({...Q,disabledTools:[...Z]})}function aW($,f){return D9([$],f),f}function tW($){return H8().has($)}function sW($,f){let J=$.trim();if(!J)return;let Q=J$(),Z=H8(Q.disabledPlugins);if(f)Z.add(J);else Z.delete(J);C1({...Q,disabledPlugins:[...Z]})}function _6($,f){let J=H8(f);if(J.size===0)return[...$];return $.filter((Q)=>!J.has(Q))}function E1($,f){let J=n0(f);if(J.size===0)return[...$];return $.filter((Q)=>!J.has(Q.name))}function y6($,f){if(!$||$.length===0)return $;let J=n0(f);if(J.size===0)return $;return $.map((Q)=>{if(!Q.setup)return Q;return{...Q,setup:(Z,W)=>Q.setup?.({...Z,registerTool:(j)=>{if(!J.has(j.name))Z.registerTool(j)}},W)}})}var lW,X8;var T$=F1(()=>{T0();lW=j8.preprocess(($)=>Array.isArray($)?$.filter((f)=>typeof f==="string").map((f)=>f.trim()).filter(Boolean):void 0,j8.array(j8.string()).optional()).transform(($)=>{if(!$)return;let f=[...new Set($)].sort((J,Q)=>J.localeCompare(Q));return f.length>0?f:void 0}),X8=j8.object({telemetryOptOut:j8.boolean().default(!1).catch(!1),disabledTools:lW.optional(),disabledPlugins:lW.optional()}).strip().transform(($)=>{let f={telemetryOptOut:$.telemetryOptOut};if($.disabledTools?.length)f.disabledTools=$.disabledTools;if($.disabledPlugins?.length)f.disabledPlugins=$.disabledPlugins;return f})});var tX={};q(tX,{updateMcpServerOAuthState:()=>d1,setMcpServerDisabled:()=>c1,resolveMcpServerRegistrations:()=>Q$,resolveDefaultMcpSettingsPath:()=>O0,registerMcpServersFromSettingsFile:()=>l1,normalizeMcpServerOAuthState:()=>sf,loadMcpSettingsFile:()=>v1,listMcpServerOAuthStatuses:()=>e8,hasMcpSettingsFile:()=>q$,getMcpServerOAuthState:()=>u1});import{existsSync as NR,mkdirSync as lX,readFileSync as D7,writeFileSync as pX}from"node:fs";import{dirname as rX}from"node:path";import{resolveMcpSettingsPath as MR}from"@cline/shared/storage";import{z as S}from"zod";function F7($){if(!$)return;if($==="http")return"streamableHttp";return $}function O0(){return MR()}function gR($){let f=D7($,"utf8"),J;try{J=JSON.parse(f)}catch(Q){let Z=Q instanceof Error?Q.message:String(Q);throw Error(`Failed to parse MCP settings JSON at "${$}": ${Z}`)}if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${$}": expected object.`);return J}function aX($,f){if(!Object.hasOwn($,f))return;let J=$[f];if(!J||typeof J!=="object"||Array.isArray(J))return;return J}function mR($,f,J){Object.defineProperty($,f,{value:J,enumerable:!0,configurable:!0,writable:!0})}function v1($={}){let f=$.filePath??O0(),J=D7(f,"utf8"),Q;try{Q=JSON.parse(J)}catch(W){let j=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${f}": ${j}`)}let Z=xR.safeParse(Q);if(!Z.success){let W=Z.error.issues.map((j)=>{let X=j.path.join(".");return X?`${X}: ${j.message}`:j.message}).join("; ");throw Error(`Invalid MCP settings at "${f}": ${W}`)}return Z.data}function vR($){let f=D7($,"utf8"),J;try{J=JSON.parse(f)}catch(W){let j=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${$}": ${j}`)}if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${$}": expected object`);let Q=J,Z=Q.mcpServers;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error(`Invalid MCP settings at "${$}": mcpServers must be an object`);return Q}function sf($){if(!$)return;let f={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(f).length>0?f:void 0}function cR($){if($===void 0)return;let f=R7.safeParse($);if(!f.success)return;return sf(f.data)}function q$($={}){let f=$.filePath??O0();return NR(f)}function Q$($={}){let f=v1($);return Object.entries(f.mcpServers).map(([J,Q])=>({name:J,transport:Q.transport,disabled:Q.disabled,metadata:Q.metadata,oauth:Q.oauth}))}function c1($){let f=$.filePath??O0(),J=$.name.trim();if(!J)throw Error("MCP server settings toggle requires a server name.");let Q=gR(f),Z=Q.mcpServers;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error(`Invalid MCP settings at "${f}": mcpServers must be an object.`);let W={...Z},j=aX(W,J);if(!j)throw Error(`Unknown MCP server: ${J}`);let X={...j};if($.disabled)X.disabled=!0;else delete X.disabled;mR(W,J,X),lX(rX(f),{recursive:!0}),pX(f,`${JSON.stringify({...Q,mcpServers:W},null,2)}
1
+ import{createRequire as XB}from"node:module";var{defineProperty:T5,getOwnPropertyNames:ZB}=Object;var dZ=Object.prototype.hasOwnProperty;function lZ($){return this[$]}var M=($,f,J)=>{var Q=ZB(f);for(let Z of Q)if(!dZ.call($,Z)&&Z!=="default")T5($,Z,{get:lZ.bind(f,Z),enumerable:!0});if(J){for(let Z of Q)if(!dZ.call(J,Z)&&Z!=="default")T5(J,Z,{get:lZ.bind(f,Z),enumerable:!0});return J}};var WB=($)=>$;function jB($,f){this[$]=WB.bind(null,f)}var q=($,f)=>{for(var J in f)T5($,J,{get:f[J],enumerable:!0,configurable:!0,set:jB.bind(f,J)})};var F1=($,f)=>()=>($&&(f=$($=0)),f);var pZ=XB(import.meta.url);var $W={};q($W,{normalizeUserMessage:()=>QG,buildInitialUserContent:()=>JG});async function JG($,f,J,Q){let Z=ZG(f),W=await jG(J,Q);if(Z.length===0&&!W)return $;let j=[{type:"text",text:$},...Z];if(W)j.push(...W);return j}function QG($){if($==null)return"";if(typeof $==="string")return $;let f=$.content;if(typeof f==="string")return f;if(!Array.isArray(f))return"";let J=[];for(let Q of f)if(Q&&typeof Q==="object"&&Q.type==="text"){let Z=Q.text;if(typeof Z==="string")J.push(Z)}return J.join(`
2
+ `)}function ZG($){if(!$||$.length===0)return[];let f=[];for(let J of $){let Q=WG(J);if(Q)f.push(Q)}return f}function WG($){let f=$.trim();if(!f)return;let J=f.match(/^data:([^;,]+);base64,(.+)$/);if(J){let Q=J[1],Z=J[2];if(!Q||!Z)return;return{type:"image",mediaType:Q,data:Z}}return{type:"image",mediaType:"image/png",data:f}}async function jG($,f){if(!$||$.length===0)return;let J=f??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),Q=await Promise.all($.map(async(Z)=>{let W=Z.replace(/\\/g,"/");try{let j=await J(Z);return{type:"file",path:W,content:j}}catch(j){let X=j instanceof Error?j.message:String(j);return{type:"file",path:W,content:`Error fetching content: ${X}`}}}));if(Q.length===0)return;return Q}import{SDK_ERROR_TELEMETRY_EVENT as tG}from"@cline/shared";function r($,f,J){$?.capture({event:f,properties:J})}function Z6($){if(!$)return;return $.substring(0,sG)}function oG($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function eG($){return typeof $==="string"?$:$.message}function gW($,f){return $.some((J)=>f.has(J.trim().toLowerCase()))}function mW($){r($,v.CLIENT.EXTENSION_ACTIVATED)}function W6($,f){let J=[...f.vcs_types],Q={root_count:f.root_count,vcs_types:J,is_multi_root:f.root_count>1,has_git:gW(J,new Set(["git"])),has_mercurial:gW(J,new Set(["mercurial","hg"]))};if(f.init_duration_ms!==void 0)Q.init_duration_ms=f.init_duration_ms;if(f.feature_flag_enabled!==void 0)Q.feature_flag_enabled=f.feature_flag_enabled;if(f.is_remote_workspace!==void 0)Q.is_remote_workspace=f.is_remote_workspace;r($,v.WORKSPACE.INITIALIZED,Q)}function j6($,f,J){r($,v.WORKSPACE.INIT_ERROR,{error_type:oG(f),error_message:Z6(eG(f)),fallback_to_single_root:J.fallback_to_single_root,workspace_count:J.workspace_count??0})}function vW($,f){r($,v.WORKSPACE.PATH_RESOLVED,{...f})}function L$($,f){r($,v.USER.AUTH_STARTED,{provider:f})}function O$($,f){r($,v.USER.AUTH_SUCCEEDED,{provider:f})}function z$($,f,J){r($,v.USER.AUTH_FAILED,{provider:f,errorMessage:Z6(J)})}function n$($,f,J){r($,v.USER.AUTH_LOGGED_OUT,{provider:f,reason:J})}function cW($,f){$?.captureRequired(v.USER.TELEMETRY_OPT_OUT,f)}function _$($,f){let J=f.id?.trim();if(J)$?.setDistinctId(J);$?.updateCommonProperties({account_id:f.id,account_email:f.email,provider:f.provider,organization_id:f.organizationId,organization_name:f.organizationName,member_id:f.memberId})}function X6($,f){r($,v.TASK.CREATED,f)}function H6($,f){r($,v.TASK.RESTARTED,f)}function J8($,f){r($,v.TASK.COMPLETED,f)}function yf($,f){r($,v.TASK.CONVERSATION_TURN,{...f,timestamp:new Date().toISOString()})}function Y6($,f){r($,v.TASK.TOKEN_USAGE,f)}function V6($,f,J){r($,v.TASK.MODE_SWITCH,{ulid:f,mode:J})}function A6($,f){r($,v.TASK.TOOL_USED,f)}function B6($,f){r($,v.TASK.SKILL_USED,f)}function K6($,f){r($,v.TASK.DIFF_EDIT_FAILED,f)}function Q8($,f){r($,v.TASK.PROVIDER_API_ERROR,{...f,errorMessage:Z6(f.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function G6($,f,J){r($,v.TASK.MENTION_USED,{mentionType:f,contentLength:J,timestamp:new Date().toISOString()})}function P6($,f,J,Q){r($,v.TASK.MENTION_FAILED,{mentionType:f,errorType:J,errorMessage:Z6(Q),timestamp:new Date().toISOString()})}function F6($,f,J,Q,Z){r($,v.TASK.MENTION_SEARCH_RESULTS,{queryLength:f.length,resultCount:J,searchType:Q,isEmpty:Z,timestamp:new Date().toISOString()})}function a$($,f){r($,v.TASK.AGENT_CREATED,{...f,timestamp:new Date().toISOString()})}function D6($,f){r($,v.TASK.AGENT_TEAM_CREATED,{...f,timestamp:new Date().toISOString()})}function Z8($,f){r($,f.event==="ended"?v.TASK.SUBAGENT_COMPLETED:v.TASK.SUBAGENT_STARTED,{...f,timestamp:new Date().toISOString()})}function R6($,f,J,Q){r($,v.HOOKS.DISCOVERY_COMPLETED,{hookName:f,globalCount:J,workspaceCount:Q,totalCount:J+Q,timestamp:new Date().toISOString()})}var sG=500,v;var N0=F1(()=>{v={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",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"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:tG}}});import{mkdirSync as jP,readFileSync as XP,writeFileSync as HP}from"node:fs";import{dirname as YP}from"node:path";import{resolveGlobalSettingsPath as rW}from"@cline/shared/storage";import{z as j8}from"zod";function pW(){return X8.parse({})}function J$(){let $=rW(),f;try{f=JSON.parse(XP($,"utf8"))}catch{return pW()}let J=X8.safeParse(f);return J.success?J.data:pW()}function C1($,f={}){let J=rW(),Q=J$();jP(YP(J),{recursive:!0});let Z=X8.parse($);if(!Q.telemetryOptOut&&Z.telemetryOptOut)cW(f.telemetry);HP(J,`${JSON.stringify(Z,null,2)}
3
+ `,"utf8")}function O6(){return J$().telemetryOptOut}function iW($,f={}){C1({...J$(),telemetryOptOut:$},f)}function n0($){return new Set($??J$().disabledTools??[])}function H8($){return new Set($??J$().disabledPlugins??[])}function nW($){return n0().has($)}function z6($){let f=n0(),J=J$();if(f.has($))return f.delete($),C1({...J,disabledTools:[...f]}),!1;return f.add($),C1({...J,disabledTools:[...f]}),!0}function D9($,f){let J=[...new Set($.map((W)=>W.trim()).filter(Boolean))];if(J.length===0)return;let Q=J$(),Z=n0(Q.disabledTools);for(let W of J)if(f)Z.add(W);else Z.delete(W);C1({...Q,disabledTools:[...Z]})}function aW($,f){return D9([$],f),f}function tW($){return H8().has($)}function sW($,f){let J=$.trim();if(!J)return;let Q=J$(),Z=H8(Q.disabledPlugins);if(f)Z.add(J);else Z.delete(J);C1({...Q,disabledPlugins:[...Z]})}function _6($,f){let J=H8(f);if(J.size===0)return[...$];return $.filter((Q)=>!J.has(Q))}function E1($,f){let J=n0(f);if(J.size===0)return[...$];return $.filter((Q)=>!J.has(Q.name))}function y6($,f){if(!$||$.length===0)return $;let J=n0(f);if(J.size===0)return $;return $.map((Q)=>{if(!Q.setup)return Q;return{...Q,setup:(Z,W)=>Q.setup?.({...Z,registerTool:(j)=>{if(!J.has(j.name))Z.registerTool(j)}},W)}})}var lW,X8;var N$=F1(()=>{N0();lW=j8.preprocess(($)=>Array.isArray($)?$.filter((f)=>typeof f==="string").map((f)=>f.trim()).filter(Boolean):void 0,j8.array(j8.string()).optional()).transform(($)=>{if(!$)return;let f=[...new Set($)].sort((J,Q)=>J.localeCompare(Q));return f.length>0?f:void 0}),X8=j8.object({telemetryOptOut:j8.boolean().default(!1).catch(!1),disabledTools:lW.optional(),disabledPlugins:lW.optional()}).strip().transform(($)=>{let f={telemetryOptOut:$.telemetryOptOut};if($.disabledTools?.length)f.disabledTools=$.disabledTools;if($.disabledPlugins?.length)f.disabledPlugins=$.disabledPlugins;return f})});var tX={};q(tX,{updateMcpServerOAuthState:()=>d1,setMcpServerDisabled:()=>c1,resolveMcpServerRegistrations:()=>Q$,resolveDefaultMcpSettingsPath:()=>O0,registerMcpServersFromSettingsFile:()=>l1,normalizeMcpServerOAuthState:()=>sf,loadMcpSettingsFile:()=>v1,listMcpServerOAuthStatuses:()=>e8,hasMcpSettingsFile:()=>q$,getMcpServerOAuthState:()=>u1});import{existsSync as TR,mkdirSync as lX,readFileSync as D7,writeFileSync as pX}from"node:fs";import{dirname as rX}from"node:path";import{resolveMcpSettingsPath as MR}from"@cline/shared/storage";import{z as S}from"zod";function F7($){if(!$)return;if($==="http")return"streamableHttp";return $}function O0(){return MR()}function gR($){let f=D7($,"utf8"),J;try{J=JSON.parse(f)}catch(Q){let Z=Q instanceof Error?Q.message:String(Q);throw Error(`Failed to parse MCP settings JSON at "${$}": ${Z}`)}if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${$}": expected object.`);return J}function aX($,f){if(!Object.hasOwn($,f))return;let J=$[f];if(!J||typeof J!=="object"||Array.isArray(J))return;return J}function mR($,f,J){Object.defineProperty($,f,{value:J,enumerable:!0,configurable:!0,writable:!0})}function v1($={}){let f=$.filePath??O0(),J=D7(f,"utf8"),Q;try{Q=JSON.parse(J)}catch(W){let j=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${f}": ${j}`)}let Z=xR.safeParse(Q);if(!Z.success){let W=Z.error.issues.map((j)=>{let X=j.path.join(".");return X?`${X}: ${j.message}`:j.message}).join("; ");throw Error(`Invalid MCP settings at "${f}": ${W}`)}return Z.data}function vR($){let f=D7($,"utf8"),J;try{J=JSON.parse(f)}catch(W){let j=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${$}": ${j}`)}if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${$}": expected object`);let Q=J,Z=Q.mcpServers;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error(`Invalid MCP settings at "${$}": mcpServers must be an object`);return Q}function sf($){if(!$)return;let f={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(f).length>0?f:void 0}function cR($){if($===void 0)return;let f=R7.safeParse($);if(!f.success)return;return sf(f.data)}function q$($={}){let f=$.filePath??O0();return TR(f)}function Q$($={}){let f=v1($);return Object.entries(f.mcpServers).map(([J,Q])=>({name:J,transport:Q.transport,disabled:Q.disabled,metadata:Q.metadata,oauth:Q.oauth}))}function c1($){let f=$.filePath??O0(),J=$.name.trim();if(!J)throw Error("MCP server settings toggle requires a server name.");let Q=gR(f),Z=Q.mcpServers;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error(`Invalid MCP settings at "${f}": mcpServers must be an object.`);let W={...Z},j=aX(W,J);if(!j)throw Error(`Unknown MCP server: ${J}`);let X={...j};if($.disabled)X.disabled=!0;else delete X.disabled;mR(W,J,X),lX(rX(f),{recursive:!0}),pX(f,`${JSON.stringify({...Q,mcpServers:W},null,2)}
4
4
  `)}function u1($,f={}){let J=v1(f);if(!Object.hasOwn(J.mcpServers,$))return;return sf(J.mcpServers[$]?.oauth)}function d1($,f,J={}){let Q=J.filePath??O0(),Z=vR(Q),W=Z.mcpServers,j=aX(W,$);if(!j)throw Error(`Unknown MCP server: ${$}`);let X=cR(j.oauth)??{},H=sf(f(X));if(H)j.oauth=H;else delete j.oauth;return lX(rX(Q),{recursive:!0}),pX(Q,`${JSON.stringify(Z,null,2)}
5
- `,"utf8"),H??{}}function e8($={}){return Q$($).map((J)=>{let Q=J.transport.type!=="stdio",Z=J.oauth?.tokens?.access_token;return{serverName:J.name,oauthSupported:Q,oauthConfigured:Q&&typeof Z==="string"&&Z.trim().length>0,lastError:J.oauth?.lastError,lastAuthenticatedAt:J.oauth?.lastAuthenticatedAt}}).sort((J,Q)=>J.serverName.localeCompare(Q.serverName))}async function l1($,f={}){let J=Q$(f);for(let Q of J)await $.registerServer(Q);return J}var o8,iX,R7,qR,wR,SR,CR,ER,hR,nX,bR,kR,IR,xR;var RJ=F1(()=>{o8=S.record(S.string(),S.string()),iX=S.record(S.string(),S.unknown()),R7=S.object({clientInformation:S.record(S.string(),S.unknown()).optional(),tokens:S.record(S.string(),S.unknown()).optional(),codeVerifier:S.string().optional(),discoveryState:S.record(S.string(),S.unknown()).optional(),redirectUrl:S.string().url().optional(),lastError:S.string().optional(),lastAuthenticatedAt:S.number().int().positive().optional()}).strip(),qR=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:o8.optional()}),wR=S.object({type:S.literal("sse"),url:S.string().url(),headers:o8.optional()}),SR=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:o8.optional()}),CR=S.discriminatedUnion("type",[qR,wR,SR]),ER=S.object({transport:CR,disabled:S.boolean().optional(),metadata:iX.optional(),oauth:R7.optional()}),hR=S.enum(["stdio","sse","http","streamableHttp"]).optional(),nX=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:hR,disabled:S.boolean().optional(),metadata:iX.optional(),oauth:R7.optional()});bR=nX.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:o8.optional()}).superRefine(($,f)=>{let J=$.type??F7($.transportType);if(J&&J!=="stdio")f.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth})),kR=nX.extend({url:S.string().url(),headers:o8.optional()}).superRefine(($,f)=>{let J=$.type??F7($.transportType)??"sse";if(J!=="sse"&&J!=="streamableHttp")f.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??F7($.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}}),IR=S.union([ER,bR,kR]),xR=S.object({mcpServers:S.record(S.string(),IR)}).passthrough()});import{existsSync as qz,mkdirSync as wz,readFileSync as Sz,writeFileSync as Cz}from"node:fs";import{resolve as Ez}from"node:path";import{resolveSessionDataDir as hz}from"@cline/shared/storage";import{nanoid as bz}from"nanoid";import*as kz from"node-machine-id";function e1($){let f=$?.trim();if(f)return f;let J=gz();if(J)return J;return mz()}function xz(){let $=kz;return $.machineIdSync??$.default?.machineIdSync}function gz(){try{let $=xz();if(!$)return;return $().trim()||void 0}catch{return}}function mz(){let $=hz(),f=Ez($,Iz);try{if(qz(f)){let Q=Sz(f,"utf8").trim();if(Q.length>0)return Q}}catch{}let J=`cl-${bz()}`;try{wz($,{recursive:!0}),Cz(f,J,"utf8")}catch{}return J}var Iz="machine-id";var cJ=()=>{};class M4{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($,f){if(!this.isEnabled())return;this.emitLog($,f,!1)}emitRequired($,f){this.emitLog($,f,!0)}recordCounter($,f,J,Q,Z=!1){if(!this.meter||!Z&&!this.isEnabled())return;let W=this.counters.get($);if(!W)W=this.meter.createCounter($,Q?{description:Q}:void 0),this.counters.set($,W);W.add(f,this.flattenProperties(this.buildAttributes(J)))}recordHistogram($,f,J,Q,Z=!1){if(!this.meter||!Z&&!this.isEnabled())return;let W=this.histograms.get($);if(!W)W=this.meter.createHistogram($,Q?{description:Q}:void 0),this.histograms.set($,W);W.record(f,this.flattenProperties(this.buildAttributes(J)))}recordGauge($,f,J,Q,Z=!1){if(!this.meter||!Z&&!this.isEnabled())return;let W=this.buildAttributes(J),j=JSON.stringify(W),X=this.gaugeValues.get($);if(f===null){if(X){if(X.delete(j),X.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let H=X;if(!H)H=new Map,this.gaugeValues.set($,H);if(!this.gauges.has($)){let Y=this.meter.createObservableGauge($,Q?{description:Q}:void 0);Y.addCallback((V)=>{for(let A of this.snapshotGaugeSeries($))V.observe(A.value,this.flattenProperties(A.attributes))}),this.gauges.set($,Y)}H.set(j,{value:f,attributes:W})}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($,f,J){if(!this.logger)return;let Q=this.flattenProperties(this.buildAttributes(f,J));this.logger.emit({severityText:"INFO",body:$,attributes:Q})}buildAttributes($,f=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...f?{_required:!0}:{}}}snapshotGaugeSeries($){let f=this.gaugeValues.get($);if(!f)return[];return Array.from(f.values(),(J)=>({value:J.value,attributes:J.attributes?{...J.attributes}:void 0}))}flattenProperties($,f="",J=new WeakSet,Q=0){if(!$)return{};let Z={},W=100,j=10;for(let[X,H]of Object.entries($)){if(X==="__proto__"||X==="constructor"||X==="prototype")continue;let Y=f?`${f}.${X}`:X;if(H===null||H===void 0){Z[Y]=String(H);continue}if(Array.isArray(H)){let V=H.length>W?H.slice(0,W):H;try{Z[Y]=JSON.stringify(V)}catch{Z[Y]="[UnserializableArray]"}if(H.length>W)Z[`${Y}_truncated`]=!0,Z[`${Y}_original_length`]=H.length;continue}if(typeof H==="object"){if(H instanceof Date){Z[Y]=H.toISOString();continue}if(H instanceof Error){Z[Y]=H.message;continue}if(J.has(H)){Z[Y]="[Circular]";continue}if(Q>=j){Z[Y]="[MaxDepthExceeded]";continue}J.add(H),Object.assign(Z,this.flattenProperties(H,Y,J,Q+1));continue}if(h_(H)){Z[Y]=H;continue}try{Z[Y]=JSON.stringify(H)}catch{Z[Y]=String(H)}}return Z}}function h_($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class q4{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,f){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:f})}emitRequired($,f){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:f})}recordCounter($,f,J,Q,Z){if(!Z&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:f,attributes:J,description:Q,required:Z===!0})}recordHistogram($,f,J,Q,Z){if(!Z&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:f,attributes:J,description:Q,required:Z===!0})}recordGauge($,f,J,Q,Z){if(!Z&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:f,attributes:J,description:Q,required:Z===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class P2{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new q4({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 f=this.buildAttributes($.properties);for(let J of this.adapters)J.emit($.event,f)}captureRequired($,f){let J=this.buildAttributes(f);for(let Q of this.adapters)Q.emitRequired($,J)}recordCounter($,f,J,Q,Z=!1){let W=this.buildAttributes(J);for(let j of this.adapters)j.recordCounter($,f,W,Q,Z)}recordHistogram($,f,J,Q,Z=!1){let W=this.buildAttributes(J);for(let j of this.adapters)j.recordHistogram($,f,W,Q,Z)}recordGauge($,f,J,Q,Z=!1){let W=this.buildAttributes(J);for(let j of this.adapters)j.recordGauge($,f,W,Q,Z)}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 TQ=()=>{};import{metrics as b_,trace as k_}from"@opentelemetry/api";import{logs as I_}from"@opentelemetry/api-logs";import{OTLPLogExporter as x_}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as g_}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as m_}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as v_}from"@opentelemetry/resources";import{BatchLogRecordProcessor as c_,ConsoleLogRecordExporter as u_,LoggerProvider as d_}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as l_,MeterProvider as p_,PeriodicExportingMetricReader as fV}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as r_,ConsoleSpanExporter as i_,SimpleSpanProcessor as n_}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as a_}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as t_,ATTR_SERVICE_VERSION as s_}from"@opentelemetry/semantic-conventions";class JV{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($,f){this.resolveProperties(f)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class F2{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let f=v_({[t_]:$.serviceName??"cline",...$.serviceVersion?{[s_]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(f),this.loggerProvider=this.createLoggerProvider(f),this.tracerProvider=this.createTracerProvider(f),this.meterProvider)b_.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)I_.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",f){return k_.getTracer($,f??this.options.serviceVersion)}createAdapter($){return new M4({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let f=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new P2({...$,adapters:[f],distinctId:e1($.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 f=NQ(this.options.metricsExporter);if(f.length===0)return null;let J=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),Q=Math.min(30000,Math.floor(J*0.8)),Z=f.map((W)=>$y(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:J,timeout:Q})).filter((W)=>W!==null);if(Z.length===0)return null;return new p_({resource:$,readers:Z})}createTracerProvider($){let f=NQ(this.options.tracesExporter);if(f.length===0)return null;let J=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,Q=this.options.otlpTracesHeaders??this.options.otlpHeaders,Z=[];for(let W of f){let j=e_(W,{endpoint:J,headers:Q,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(j)Z.push(j)}if(Z.length===0)return null;return new a_({resource:$,spanProcessors:Z})}createLoggerProvider($){let f=NQ(this.options.logsExporter);if(f.length===0)return null;let J=f.map((Q)=>{let Z=o_(Q,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!Z)return null;return new c_(Z,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((Q)=>Q!==null);if(J.length===0)return null;return new d_({resource:$,processors:J})}}function w4($){let f=new F2($),J=f.createTelemetryService($);return J.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:f,telemetry:J}}function b$($){if(O6())return{telemetry:new JV($)};if($.enabled!==!0)return{telemetry:new P2({...$,distinctId:e1($.distinctId)})};return w4($)}function D2($){let{telemetry:f,provider:J}=b$($);return{telemetry:f,provider:J,flush:async()=>{let W=J;if(W&&typeof W.forceFlush==="function")try{await W.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([f.dispose(),J?.dispose()])}}}function NQ($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((J)=>J.trim()).filter((J)=>J==="console"||J==="otlp")}function o_($,f){if($==="console")return new u_;if(!f.endpoint)return null;let J=MQ(f.endpoint,"/v1/logs");return new x_({url:J,headers:f.headers})}function e_($,f){if($==="console")return new n_(new i_);if(!f.endpoint)return null;let J=MQ(f.endpoint,"/v1/traces");return new r_(new m_({url:J,headers:f.headers}))}function $y($,f){if($==="console")return new fV({exporter:new l_,exportIntervalMillis:f.interval,exportTimeoutMillis:f.timeout});if(!f.endpoint)return null;let J=MQ(f.endpoint,"/v1/metrics");return new fV({exporter:new g_({url:J,headers:f.headers}),exportIntervalMillis:f.interval,exportTimeoutMillis:f.timeout})}function MQ($,f){let J=new URL($),Q=J.pathname.endsWith("/")?J.pathname.slice(0,-1):J.pathname;return J.pathname=Q.endsWith(f)?Q:`${Q}${f}`,J.toString()}var aJ=F1(()=>{T$();cJ();TQ()});var fA={};q(fA,{createOpenTelemetryTelemetryService:()=>w4,createConfiguredTelemetryService:()=>b$,createConfiguredTelemetryHandle:()=>D2,OpenTelemetryProvider:()=>F2,OpenTelemetryAdapter:()=>M4});var rQ=F1(()=>{aJ()});import{initVcr as Xq}from"@cline/shared";import{normalizeProviderId as Zq}from"@cline/llms";var nA={};q(nA,{LocalRuntimeHost:()=>A$});import{readdirSync as aM}from"node:fs";import{homedir as tM}from"node:os";import{isAbsolute as sM,join as mZ,resolve as vZ}from"node:path";import{captureSdkError as Hf,createSessionId as oM,isLikelyAuthError as eM,normalizeUserInput as $q}from"@cline/shared";import{setHomeDirIfUnset as fq}from"@cline/shared/storage";var D3={};q(D3,{createContextCompactionPrepareTurn:()=>C2});import{createHandlerAsync as BB}from"@cline/llms";import{estimateTokens as M5}from"@cline/shared";var nZ=200000,q5=0.9,aZ=16384,w5=20000,rZ=1024,iZ=2000,tZ=2000,sZ=8;function x$($,f){if($.length<=f)return $;return`${$.slice(0,f)}
5
+ `,"utf8"),H??{}}function e8($={}){return Q$($).map((J)=>{let Q=J.transport.type!=="stdio",Z=J.oauth?.tokens?.access_token;return{serverName:J.name,oauthSupported:Q,oauthConfigured:Q&&typeof Z==="string"&&Z.trim().length>0,lastError:J.oauth?.lastError,lastAuthenticatedAt:J.oauth?.lastAuthenticatedAt}}).sort((J,Q)=>J.serverName.localeCompare(Q.serverName))}async function l1($,f={}){let J=Q$(f);for(let Q of J)await $.registerServer(Q);return J}var o8,iX,R7,qR,wR,SR,CR,ER,hR,nX,bR,kR,IR,xR;var RJ=F1(()=>{o8=S.record(S.string(),S.string()),iX=S.record(S.string(),S.unknown()),R7=S.object({clientInformation:S.record(S.string(),S.unknown()).optional(),tokens:S.record(S.string(),S.unknown()).optional(),codeVerifier:S.string().optional(),discoveryState:S.record(S.string(),S.unknown()).optional(),redirectUrl:S.string().url().optional(),lastError:S.string().optional(),lastAuthenticatedAt:S.number().int().positive().optional()}).strip(),qR=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:o8.optional()}),wR=S.object({type:S.literal("sse"),url:S.string().url(),headers:o8.optional()}),SR=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:o8.optional()}),CR=S.discriminatedUnion("type",[qR,wR,SR]),ER=S.object({transport:CR,disabled:S.boolean().optional(),metadata:iX.optional(),oauth:R7.optional()}),hR=S.enum(["stdio","sse","http","streamableHttp"]).optional(),nX=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:hR,disabled:S.boolean().optional(),metadata:iX.optional(),oauth:R7.optional()});bR=nX.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:o8.optional()}).superRefine(($,f)=>{let J=$.type??F7($.transportType);if(J&&J!=="stdio")f.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth})),kR=nX.extend({url:S.string().url(),headers:o8.optional()}).superRefine(($,f)=>{let J=$.type??F7($.transportType)??"sse";if(J!=="sse"&&J!=="streamableHttp")f.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??F7($.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}}),IR=S.union([ER,bR,kR]),xR=S.object({mcpServers:S.record(S.string(),IR)}).passthrough()});import{existsSync as qz,mkdirSync as wz,readFileSync as Sz,writeFileSync as Cz}from"node:fs";import{resolve as Ez}from"node:path";import{resolveSessionDataDir as hz}from"@cline/shared/storage";import{nanoid as bz}from"nanoid";import*as kz from"node-machine-id";function e1($){let f=$?.trim();if(f)return f;let J=gz();if(J)return J;return mz()}function xz(){let $=kz;return $.machineIdSync??$.default?.machineIdSync}function gz(){try{let $=xz();if(!$)return;return $().trim()||void 0}catch{return}}function mz(){let $=hz(),f=Ez($,Iz);try{if(qz(f)){let Q=Sz(f,"utf8").trim();if(Q.length>0)return Q}}catch{}let J=`cl-${bz()}`;try{wz($,{recursive:!0}),Cz(f,J,"utf8")}catch{}return J}var Iz="machine-id";var cJ=()=>{};class M4{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($,f){if(!this.isEnabled())return;this.emitLog($,f,!1)}emitRequired($,f){this.emitLog($,f,!0)}recordCounter($,f,J,Q,Z=!1){if(!this.meter||!Z&&!this.isEnabled())return;let W=this.counters.get($);if(!W)W=this.meter.createCounter($,Q?{description:Q}:void 0),this.counters.set($,W);W.add(f,this.flattenProperties(this.buildAttributes(J)))}recordHistogram($,f,J,Q,Z=!1){if(!this.meter||!Z&&!this.isEnabled())return;let W=this.histograms.get($);if(!W)W=this.meter.createHistogram($,Q?{description:Q}:void 0),this.histograms.set($,W);W.record(f,this.flattenProperties(this.buildAttributes(J)))}recordGauge($,f,J,Q,Z=!1){if(!this.meter||!Z&&!this.isEnabled())return;let W=this.buildAttributes(J),j=JSON.stringify(W),X=this.gaugeValues.get($);if(f===null){if(X){if(X.delete(j),X.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let H=X;if(!H)H=new Map,this.gaugeValues.set($,H);if(!this.gauges.has($)){let Y=this.meter.createObservableGauge($,Q?{description:Q}:void 0);Y.addCallback((V)=>{for(let A of this.snapshotGaugeSeries($))V.observe(A.value,this.flattenProperties(A.attributes))}),this.gauges.set($,Y)}H.set(j,{value:f,attributes:W})}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($,f,J){if(!this.logger)return;let Q=this.flattenProperties(this.buildAttributes(f,J));this.logger.emit({severityText:"INFO",body:$,attributes:Q})}buildAttributes($,f=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...f?{_required:!0}:{}}}snapshotGaugeSeries($){let f=this.gaugeValues.get($);if(!f)return[];return Array.from(f.values(),(J)=>({value:J.value,attributes:J.attributes?{...J.attributes}:void 0}))}flattenProperties($,f="",J=new WeakSet,Q=0){if(!$)return{};let Z={},W=100,j=10;for(let[X,H]of Object.entries($)){if(X==="__proto__"||X==="constructor"||X==="prototype")continue;let Y=f?`${f}.${X}`:X;if(H===null||H===void 0){Z[Y]=String(H);continue}if(Array.isArray(H)){let V=H.length>W?H.slice(0,W):H;try{Z[Y]=JSON.stringify(V)}catch{Z[Y]="[UnserializableArray]"}if(H.length>W)Z[`${Y}_truncated`]=!0,Z[`${Y}_original_length`]=H.length;continue}if(typeof H==="object"){if(H instanceof Date){Z[Y]=H.toISOString();continue}if(H instanceof Error){Z[Y]=H.message;continue}if(J.has(H)){Z[Y]="[Circular]";continue}if(Q>=j){Z[Y]="[MaxDepthExceeded]";continue}J.add(H),Object.assign(Z,this.flattenProperties(H,Y,J,Q+1));continue}if(h_(H)){Z[Y]=H;continue}try{Z[Y]=JSON.stringify(H)}catch{Z[Y]=String(H)}}return Z}}function h_($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class q4{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,f){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:f})}emitRequired($,f){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:f})}recordCounter($,f,J,Q,Z){if(!Z&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:f,attributes:J,description:Q,required:Z===!0})}recordHistogram($,f,J,Q,Z){if(!Z&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:f,attributes:J,description:Q,required:Z===!0})}recordGauge($,f,J,Q,Z){if(!Z&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:f,attributes:J,description:Q,required:Z===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class P2{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new q4({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 f=this.buildAttributes($.properties);for(let J of this.adapters)J.emit($.event,f)}captureRequired($,f){let J=this.buildAttributes(f);for(let Q of this.adapters)Q.emitRequired($,J)}recordCounter($,f,J,Q,Z=!1){let W=this.buildAttributes(J);for(let j of this.adapters)j.recordCounter($,f,W,Q,Z)}recordHistogram($,f,J,Q,Z=!1){let W=this.buildAttributes(J);for(let j of this.adapters)j.recordHistogram($,f,W,Q,Z)}recordGauge($,f,J,Q,Z=!1){let W=this.buildAttributes(J);for(let j of this.adapters)j.recordGauge($,f,W,Q,Z)}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 NQ=()=>{};import{metrics as b_,trace as k_}from"@opentelemetry/api";import{logs as I_}from"@opentelemetry/api-logs";import{OTLPLogExporter as x_}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as g_}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as m_}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as v_}from"@opentelemetry/resources";import{BatchLogRecordProcessor as c_,ConsoleLogRecordExporter as u_,LoggerProvider as d_}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as l_,MeterProvider as p_,PeriodicExportingMetricReader as fV}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as r_,ConsoleSpanExporter as i_,SimpleSpanProcessor as n_}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as a_}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as t_,ATTR_SERVICE_VERSION as s_}from"@opentelemetry/semantic-conventions";class JV{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($,f){this.resolveProperties(f)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class F2{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let f=v_({[t_]:$.serviceName??"cline",...$.serviceVersion?{[s_]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(f),this.loggerProvider=this.createLoggerProvider(f),this.tracerProvider=this.createTracerProvider(f),this.meterProvider)b_.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)I_.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",f){return k_.getTracer($,f??this.options.serviceVersion)}createAdapter($){return new M4({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let f=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new P2({...$,adapters:[f],distinctId:e1($.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 f=TQ(this.options.metricsExporter);if(f.length===0)return null;let J=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),Q=Math.min(30000,Math.floor(J*0.8)),Z=f.map((W)=>$y(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:J,timeout:Q})).filter((W)=>W!==null);if(Z.length===0)return null;return new p_({resource:$,readers:Z})}createTracerProvider($){let f=TQ(this.options.tracesExporter);if(f.length===0)return null;let J=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,Q=this.options.otlpTracesHeaders??this.options.otlpHeaders,Z=[];for(let W of f){let j=e_(W,{endpoint:J,headers:Q,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(j)Z.push(j)}if(Z.length===0)return null;return new a_({resource:$,spanProcessors:Z})}createLoggerProvider($){let f=TQ(this.options.logsExporter);if(f.length===0)return null;let J=f.map((Q)=>{let Z=o_(Q,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!Z)return null;return new c_(Z,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((Q)=>Q!==null);if(J.length===0)return null;return new d_({resource:$,processors:J})}}function w4($){let f=new F2($),J=f.createTelemetryService($);return J.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:f,telemetry:J}}function b$($){if(O6())return{telemetry:new JV($)};if($.enabled!==!0)return{telemetry:new P2({...$,distinctId:e1($.distinctId)})};return w4($)}function D2($){let{telemetry:f,provider:J}=b$($);return{telemetry:f,provider:J,flush:async()=>{let W=J;if(W&&typeof W.forceFlush==="function")try{await W.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([f.dispose(),J?.dispose()])}}}function TQ($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((J)=>J.trim()).filter((J)=>J==="console"||J==="otlp")}function o_($,f){if($==="console")return new u_;if(!f.endpoint)return null;let J=MQ(f.endpoint,"/v1/logs");return new x_({url:J,headers:f.headers})}function e_($,f){if($==="console")return new n_(new i_);if(!f.endpoint)return null;let J=MQ(f.endpoint,"/v1/traces");return new r_(new m_({url:J,headers:f.headers}))}function $y($,f){if($==="console")return new fV({exporter:new l_,exportIntervalMillis:f.interval,exportTimeoutMillis:f.timeout});if(!f.endpoint)return null;let J=MQ(f.endpoint,"/v1/metrics");return new fV({exporter:new g_({url:J,headers:f.headers}),exportIntervalMillis:f.interval,exportTimeoutMillis:f.timeout})}function MQ($,f){let J=new URL($),Q=J.pathname.endsWith("/")?J.pathname.slice(0,-1):J.pathname;return J.pathname=Q.endsWith(f)?Q:`${Q}${f}`,J.toString()}var aJ=F1(()=>{N$();cJ();NQ()});var fA={};q(fA,{createOpenTelemetryTelemetryService:()=>w4,createConfiguredTelemetryService:()=>b$,createConfiguredTelemetryHandle:()=>D2,OpenTelemetryProvider:()=>F2,OpenTelemetryAdapter:()=>M4});var rQ=F1(()=>{aJ()});import{initVcr as Xq}from"@cline/shared";import{normalizeProviderId as Zq}from"@cline/llms";var nA={};q(nA,{LocalRuntimeHost:()=>A$});import{readdirSync as aM}from"node:fs";import{homedir as tM}from"node:os";import{isAbsolute as sM,join as mZ,resolve as vZ}from"node:path";import{captureSdkError as Hf,createSessionId as oM,isLikelyAuthError as eM,normalizeUserInput as $q}from"@cline/shared";import{setHomeDirIfUnset as fq}from"@cline/shared/storage";var D3={};q(D3,{createContextCompactionPrepareTurn:()=>C2});import{createHandlerAsync as BB}from"@cline/llms";import{estimateTokens as M5}from"@cline/shared";var nZ=200000,q5=0.9,aZ=16384,w5=20000,rZ=1024,iZ=2000,tZ=2000,sZ=8;function x$($,f){if($.length<=f)return $;return`${$.slice(0,f)}
6
6
  ...[truncated ${$.length-f} chars]`}function HB($){let f=S5($);if(typeof f==="string")return f;return f.map((J)=>{switch(J.type){case"text":return J.text;case"file":return`<file path="${J.path}">
7
7
  ${J.content}
8
8
  </file>`;case"image":return`[image:${J.mediaType}]`;default:return""}}).join(`
9
9
  `)}function S5($){if(typeof $==="string")return x$($,iZ);return $.map((f)=>{switch(f.type){case"text":return{...f,text:x$(f.text,iZ)};case"file":return{...f,content:x$(f.content,tZ)};case"image":return f;default:return f}})}function YB($){return Object.entries($).map(([f,J])=>`${f}=${JSON.stringify(J)}`).join(", ")}function oZ($){if(typeof $.content==="string")return`[${$.role==="user"?"User":"Bot"}]: ${$.content}`;let f=[];for(let J of $.content)switch(J.type){case"text":f.push(`[${$.role==="user"?"User":"Bot"}]: ${J.text}`);break;case"thinking":f.push(`[Bot thinking]: ${x$(J.thinking,2000)}`);break;case"redacted_thinking":f.push("[Bot thinking]: [redacted]");break;case"tool_use":f.push(`[Bot tool calls]: ${J.name}(${YB(J.input)})`);break;case"tool_result":f.push(`[Tool result]: ${HB(J.content)}`);break;case"file":f.push(`[${$.role==="user"?"User":"Bot"} file ${J.path}]: ${x$(J.content,tZ)}`);break;case"image":f.push(`[${$.role==="user"?"User":"Bot"} image]: ${J.mediaType}`);break}return f.join(`
10
10
  `)}function eZ($){return $.map(oZ).join(`
11
11
 
12
- `).trim()}function $3(){let $=new WeakMap;return(f)=>{let J=f,Q=$.get(J);if(typeof Q==="number")return Q;let Z;try{Z=JSON.stringify(f)}catch{Z=oZ(f)}let W=M5(Z.length);return $.set(J,W),W}}function q2($){return $.metadata?.kind==="compaction_summary"}function C5($){if(!q2($))return;let f=$.metadata;if(!f)return;let J=f.details;return{kind:"compaction_summary",summary:String(f.summary??""),details:{readFiles:Array.isArray(J?.readFiles)?J.readFiles.filter((Q)=>typeof Q==="string").map((Q)=>Q.trim()).filter((Q)=>Q.length>0):[],modifiedFiles:Array.isArray(J?.modifiedFiles)?J.modifiedFiles.filter((Q)=>typeof Q==="string").map((Q)=>Q.trim()).filter((Q)=>Q.length>0):[]},tokensBefore:Number(f.tokensBefore??0),generatedAt:Number(f.generatedAt??0)}}function VB($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((f)=>f.type==="tool_result")}function w2($){return $.role==="user"&&!VB($)&&!q2($)}function f3($){for(let f=0;f<$.length;f+=1)if(w2($[f]))return f;return-1}function u4($){for(let f=$.length-1;f>=0;f-=1)if(w2($[f]))return f;return 0}function J3($){for(let f=$.length-1;f>=0;f-=1)if($[f].role==="assistant")return f;return-1}function Q3($){for(let f=$.length-1;f>=0;f-=1)if(q2($[f]))return f;return-1}function Z3($,f,J){let Q=u4($);if(Q<=0)return 0;let Z=0,W=$.length;for(let X=$.length-1;X>=0;X-=1)if(Z+=J($[X]),W=X,Z>=f)break;if(W<=0)return 0;let j=Math.min(W,Q);while(j>0&&!w2($[j]))j-=1;return j}function M2($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((f)=>M2(f));if($&&typeof $==="object"){let f=$,J=[];for(let Q of["path","file_path","target_file","new_file_path","old_file_path"])J.push(...M2(f[Q]));if(Array.isArray(f.files)){for(let Q of f.files)if(Q&&typeof Q==="object")J.push(...M2(Q.path))}if(Array.isArray(f.file_paths))J.push(...M2(f.file_paths));return J}return[]}function N2($,f){let J=new Set($);for(let Q of f){let Z=Q.trim();if(!Z)continue;J.add(Z)}return[...J].sort((Q,Z)=>Q.localeCompare(Z))}function W3($){let f=[],J=[];for(let Q of $){let Z=C5(Q);if(Z){f=N2(f,Z.details.readFiles),J=N2(J,Z.details.modifiedFiles);continue}if(!Array.isArray(Q.content))continue;for(let W of Q.content){if(W.type==="file"){f=N2(f,[W.path]);continue}if(W.type!=="tool_use")continue;let j=M2(W.input);if(W.name==="read_files"){f=N2(f,j);continue}if(W.name==="editor"||W.name==="apply_patch")J=N2(J,j)}}return{readFiles:f,modifiedFiles:J}}function AB($){let f=$.readFiles.length>0?$.readFiles.map((Q)=>`- ${Q}`).join(`
12
+ `).trim()}function $3(){let $=new WeakMap;return(f)=>{let J=f,Q=$.get(J);if(typeof Q==="number")return Q;let Z;try{Z=JSON.stringify(f)}catch{Z=oZ(f)}let W=M5(Z.length);return $.set(J,W),W}}function q2($){return $.metadata?.kind==="compaction_summary"}function C5($){if(!q2($))return;let f=$.metadata;if(!f)return;let J=f.details;return{kind:"compaction_summary",summary:String(f.summary??""),details:{readFiles:Array.isArray(J?.readFiles)?J.readFiles.filter((Q)=>typeof Q==="string").map((Q)=>Q.trim()).filter((Q)=>Q.length>0):[],modifiedFiles:Array.isArray(J?.modifiedFiles)?J.modifiedFiles.filter((Q)=>typeof Q==="string").map((Q)=>Q.trim()).filter((Q)=>Q.length>0):[]},tokensBefore:Number(f.tokensBefore??0),generatedAt:Number(f.generatedAt??0)}}function VB($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((f)=>f.type==="tool_result")}function w2($){return $.role==="user"&&!VB($)&&!q2($)}function f3($){for(let f=0;f<$.length;f+=1)if(w2($[f]))return f;return-1}function u4($){for(let f=$.length-1;f>=0;f-=1)if(w2($[f]))return f;return 0}function J3($){for(let f=$.length-1;f>=0;f-=1)if($[f].role==="assistant")return f;return-1}function Q3($){for(let f=$.length-1;f>=0;f-=1)if(q2($[f]))return f;return-1}function Z3($,f,J){let Q=u4($);if(Q<=0)return 0;let Z=0,W=$.length;for(let X=$.length-1;X>=0;X-=1)if(Z+=J($[X]),W=X,Z>=f)break;if(W<=0)return 0;let j=Math.min(W,Q);while(j>0&&!w2($[j]))j-=1;return j}function M2($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((f)=>M2(f));if($&&typeof $==="object"){let f=$,J=[];for(let Q of["path","file_path","target_file","new_file_path","old_file_path"])J.push(...M2(f[Q]));if(Array.isArray(f.files)){for(let Q of f.files)if(Q&&typeof Q==="object")J.push(...M2(Q.path))}if(Array.isArray(f.file_paths))J.push(...M2(f.file_paths));return J}return[]}function T2($,f){let J=new Set($);for(let Q of f){let Z=Q.trim();if(!Z)continue;J.add(Z)}return[...J].sort((Q,Z)=>Q.localeCompare(Z))}function W3($){let f=[],J=[];for(let Q of $){let Z=C5(Q);if(Z){f=T2(f,Z.details.readFiles),J=T2(J,Z.details.modifiedFiles);continue}if(!Array.isArray(Q.content))continue;for(let W of Q.content){if(W.type==="file"){f=T2(f,[W.path]);continue}if(W.type!=="tool_use")continue;let j=M2(W.input);if(W.name==="read_files"){f=T2(f,j);continue}if(W.name==="editor"||W.name==="apply_patch")J=T2(J,j)}}return{readFiles:f,modifiedFiles:J}}function AB($){let f=$.readFiles.length>0?$.readFiles.map((Q)=>`- ${Q}`).join(`
13
13
  `):"- none",J=$.modifiedFiles.length>0?$.modifiedFiles.map((Q)=>`- ${Q}`).join(`
14
14
  `):"- none";return`## Files
15
15
  Read:
@@ -41,9 +41,9 @@ ${$.conversationText||"(empty)"}`),f.join(`
41
41
 
42
42
  `)}function H3($){let f=$.summarizer,J=(Z)=>{if(Z.providerId==="openai-codex"){let{maxOutputTokens:W,...j}=Z;return{...j,thinking:!1}}return{...Z,maxOutputTokens:Z.maxOutputTokens??rZ,thinking:!1}};if(!f)return J($.activeProviderConfig);let Q=f.providerConfig?.providerId===f.providerId?f.providerConfig:void 0;return J({...Q??{},providerId:f.providerId,modelId:f.modelId,apiKey:f.apiKey??Q?.apiKey,baseUrl:f.baseUrl??Q?.baseUrl,headers:f.headers??Q?.headers,knownModels:f.knownModels??Q?.knownModels,maxOutputTokens:f.maxOutputTokens??rZ})}function Y3($){return{role:"user",content:`Context summary:
43
43
 
44
- ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}async function KB($){let f=await BB($.providerConfig),J="";for await(let Q of f.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(Q.type==="text"){J+=Q.text;continue}if(Q.type==="done"&&!Q.success&&Q.error)throw Error(Q.error)}return $.logger?.debug("Generated compaction summary",{outputChars:J.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),J.trim()}function GB($){try{return JSON.stringify($).length}catch{return String($).length}}async function V3($){let f=$.context.messages;if(f.length<2)return;let J=Z3(f,$.preserveRecentTokens,$.estimateMessageTokens);if(J<=0||J>=f.length)return;let Q=f.slice(0,J),Z=Q3(Q),W=Z>=0?C5(Q[Z])?.summary:void 0,j=Z>=0?Q.slice(Z+1):Q;if(j.length===0)return;let X=W3(Q),H=eZ(j),Y=X3({previousSummary:W,conversationText:H,fileOps:X});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:Q.length,newMessagesToFold:j.length,preservedMessages:f.length-J,previousSummaryChars:W?.length??0,conversationTextChars:H.length,summaryRequestChars:Y.length,summaryRequestEstimatedTokens:M5(Y.length),newMessagesJsonChars:GB(j),maxInputTokens:$.context.maxInputTokens,triggerTokens:$.context.triggerTokens});let V=await KB({providerConfig:H3({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),request:Y,logger:$.logger});if(!V.trim())return;let A=j3(V,X),B=f.reduce((R,F)=>R+$.estimateMessageTokens(F),0),K=[Y3({summary:A,fileOps:X,tokensBefore:B}),...f.slice(J)],G=K.reduce((R,F)=>R+$.estimateMessageTokens(F),0);return $.logger?.debug("Performed agentic compaction",{messagesBefore:f.length,messagesAfter:K.length,messagesSummarized:J,messagesPreserved:f.length-J,tokensBefore:B,tokensAfter:G,maxInputTokens:$.context.maxInputTokens}),{messages:K}}function K3($){if(q2($))return;if(typeof $.content==="string"){let J=$.content.trim();return J?{...$,content:J}:void 0}let f=$.content.filter((J)=>J.type!=="text"||J.text.trim());if(f.length===0)return;return{...$,content:f.map((J)=>J.type==="text"?{...J,text:J.text.trim()}:J.type==="tool_result"?{...J,content:S5(J.content)}:J)}}function S2($,f){return $.reduce((J,Q)=>J+f(Q),0)}function A3($,f){let J=Math.max(1,f),Q=Math.max(16,J*4);if(typeof $.content==="string"){let j=x$($.content,Q).trim();return{...$,content:j||"..."}}let Z=Q,W=$.content.map((j)=>{if(j.type!=="text"||Z<=0)return j;let X=x$(j.text,Z).trim();return Z-=X.length,{...j,text:X||"..."}});return{...$,content:W}}function PB($,f){let J=f3($),Q=u4($),Z=J3($),W=[];for(let j=0;j<$.length;j+=1){let X=K3($[j]);if(!X)continue;W.push({index:j,message:X,estimatedTokens:f(X),isFirstUser:j===J,isLastUser:j===Q,isLastAssistant:j===Z})}return W}function B3($,f,J,Q){let Z=$[f];Z.message=J,Z.estimatedTokens=Q(J)}function FB($){let f=new Set;if(!Array.isArray($.content))return f;for(let J of $.content)if(J.type==="tool_use")f.add(J.id);return f}function DB($){let f=new Set;if(!Array.isArray($.content))return f;for(let J of $.content)if(J.type==="tool_result")f.add(J.tool_use_id);return f}function G3($){return new Set([...FB($.message),...DB($.message)])}function RB($){let f=new Map;for(let J=0;J<$.length;J+=1)for(let Q of G3($[J])){let Z=f.get(Q);if(Z)Z.add(J);else f.set(Q,new Set([J]))}return f}function UB($,f){let J=RB($),Q=new Set,Z=[f];while(Z.length>0){let W=Z.shift();if(W===void 0||Q.has(W))continue;Q.add(W);for(let j of G3($[W]))for(let X of J.get(j)??[])if(!Q.has(X))Z.push(X)}return Q}function d4($,f,J,Q){let Z=S2($.map((W)=>W.message),Q);for(let W=0;W<$.length&&Z>J;){if(!f($[W])){W+=1;continue}let j=UB($,W);Z-=Array.from(j).reduce((X,H)=>X+$[H].estimatedTokens,0);for(let X of Array.from(j).sort((H,Y)=>Y-H))$.splice(X,1)}}function LB($,f,J){let Q=S2($.map((W)=>W.message),J);if(Q<=f)return;for(let W=$.length-1;W>=0&&Q>f;W-=1){let j=$[W];if(j.isFirstUser)continue;let X=Math.max(sZ,j.estimatedTokens-(Q-f));if(X>=j.estimatedTokens)continue;B3($,W,A3(j.message,X),J),Q=S2($.map((H)=>H.message),J)}if(Q<=f)return;let Z=$.findIndex((W)=>W.isFirstUser);if(Z>=0){let W=Math.max(1,$[Z].estimatedTokens-(Q-f));B3($,Z,A3($[Z].message,W),J)}}function OB($,f){return JSON.stringify($)!==JSON.stringify(f)}function zB($){let f=u4($);if(f<0||f===0&&!w2($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,f),protectedTail:$.slice(f)}}function P3($){let f=Math.max(1,Math.min($.context.triggerTokens,$.context.maxInputTokens)),{compactable:J,protectedTail:Q}=zB($.context.messages);if(J.length===0)return;let Z=PB(J,$.estimateMessageTokens);if(Z.length===0)return;d4(Z,(H)=>H.message.role==="assistant"&&!H.isLastAssistant,f,$.estimateMessageTokens),d4(Z,(H)=>H.message.role==="user"&&!H.isFirstUser&&!H.isLastUser,f,$.estimateMessageTokens),d4(Z,(H)=>H.message.role==="assistant"&&H.isLastAssistant,f,$.estimateMessageTokens),d4(Z,(H)=>H.message.role==="user"&&H.isLastUser&&!H.isFirstUser,f,$.estimateMessageTokens),LB(Z,f,$.estimateMessageTokens);let W=[...Z.map((H)=>H.message),...Q];if(!OB($.context.messages,W))return;let j=S2([...J.map((H)=>K3(H)??H),...Q],$.estimateMessageTokens),X=S2(W,$.estimateMessageTokens);return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:W.length,messagesRemoved:$.context.messages.length-W.length,tokensBefore:j,tokensAfter:X,targetTokens:f,maxInputTokens:$.context.maxInputTokens}),{messages:W}}function F3($){try{return JSON.stringify($).length}catch{return String($).length}}function _B($){let f=0,J=0,Q=0;for(let Z of $){if(!Array.isArray(Z.content))continue;for(let W of Z.content){if(W.type!=="tool_result")continue;let j=F3(W.content);f+=1,J+=j,Q=Math.max(Q,j)}}return{toolResultCount:f,toolResultSerializedChars:J,maxToolResultSerializedChars:Q}}var yB={basic:({context:$,estimateMessageTokens:f,logger:J})=>P3({context:$,estimateMessageTokens:f,logger:J}),agentic:({context:$,providerConfig:f,compaction:J,mode:Q,estimateMessageTokens:Z,logger:W})=>V3({context:$,providerConfig:f,summarizer:J?.summarizer,preserveRecentTokens:Q==="manual"?Math.min(J?.preserveRecentTokens??w5,$.triggerTokens):J?.preserveRecentTokens??w5,estimateMessageTokens:Z,logger:W})};function TB($){if(typeof $.config.reserveTokens==="number"){let Q=Math.max(0,$.config.reserveTokens),Z=Math.max(0,$.maxInputTokens-Q);return{shouldCompact:$.inputTokens>Z,triggerTokens:Z,thresholdRatio:$.maxInputTokens>0?Z/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio!=="number"){let Q=Math.max(0,Math.min($.maxInputTokens-aZ,$.maxInputTokens*q5));return{shouldCompact:$.inputTokens>Q,triggerTokens:Q,thresholdRatio:$.maxInputTokens>0?Q/$.maxInputTokens:0}}let f=$.config.thresholdRatio??q5,J=$.maxInputTokens*f;return{shouldCompact:$.inputTokens>J,triggerTokens:J,thresholdRatio:f}}function NB($){let f=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,J=Math.min(0.95,Math.max(0.05,f)),Q=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*J)));return{triggerTokens:Q,thresholdRatio:$.maxInputTokens>0?Q/$.maxInputTokens:0}}function C2($,f={}){let J=$.compaction;if(J?.enabled!==!0)return;let Q=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},Z=$3(),W=J?.strategy??"basic",j=yB[W],X=f.mode??"auto";return async(H)=>{let Y=H.apiMessages.reduce((P,D)=>P+Z(D),0),V=J?.maxInputTokens??H.model.info?.maxInputTokens??H.model.info?.contextWindow??nZ;if(typeof V!=="number"||!Number.isFinite(V)||V<=0)return;let A=TB({inputTokens:Y,maxInputTokens:V,config:{reserveTokens:J?.reserveTokens,thresholdRatio:J?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:X,strategy:W,iteration:H.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:Y,maxInputTokens:V,triggerTokens:A.triggerTokens,thresholdRatio:A.thresholdRatio,shouldCompact:A.shouldCompact,messageCount:H.messages.length,apiMessageCount:H.apiMessages.length,apiMessagesJsonChars:F3(H.apiMessages),..._B(H.apiMessages)}),X==="auto"&&!A.shouldCompact)return;let B=X==="manual"?NB({inputTokens:Y,maxInputTokens:V,autoTriggerTokens:A.triggerTokens,manualTargetRatio:f.manualTargetRatio}):A,K={agentId:H.agentId,conversationId:H.conversationId,parentAgentId:H.parentAgentId,iteration:H.iteration,messages:H.messages,model:H.model,maxInputTokens:V,triggerTokens:B.triggerTokens,thresholdRatio:B.thresholdRatio,utilizationRatio:V>0?Y/V:0},G=X==="manual"?"manual_compaction":"auto_compaction";H.emitStatusNotice?.(X==="manual"?"compacting":"auto-compacting",{kind:G,reason:G,iteration:H.iteration,triggerTokens:B.triggerTokens,maxInputTokens:V});let R=H.messages.length,F=J?.compact?await J.compact(K):await j({context:K,providerConfig:{...Q,abortSignal:H.abortSignal},compaction:J,mode:X,estimateMessageTokens:Z,logger:$.logger});if(F?.messages){let P=F.messages.reduce((D,O)=>D+Z(O),0);$.logger?.log("Context compaction completed",{severity:"info",strategy:W,maxInputTokens:V,inputTokens:Y,afterTokens:P,tokensSaved:Y-P,utilizationBefore:`${(Y/V*100).toFixed(1)}%`,utilizationAfter:`${(P/V*100).toFixed(1)}%`,thresholdTrigger:`${(B.thresholdRatio*100).toFixed(1)}%`,messagesBefore:R,messagesAfter:F.messages.length,messagesRemoved:R-F.messages.length})}return F}}var SW={};q(SW,{zodToJsonSchema:()=>vG,validateWithZod:()=>mG,resolveToolRoutingConfig:()=>Ff,resolveToolPresetName:()=>R$,resolveCoreSelectedToolIds:()=>$6,getCoreHeadlessToolNames:()=>a2,getCoreDefaultEnabledToolIds:()=>e4,getCoreBuiltinToolCatalog:()=>T1,getCoreAcpToolNames:()=>f6,createWindowsShellTool:()=>v5,createWebFetchTool:()=>c5,createWebFetchExecutor:()=>r2,createToolPoliciesWithPreset:()=>n4,createSubmitAndExitTool:()=>p5,createSkillsTool:()=>R1,createSearchTool:()=>g5,createSearchExecutor:()=>p2,createReadFilesTool:()=>x5,createFileReadExecutor:()=>l2,createEditorTool:()=>d5,createEditorExecutor:()=>u2,createDefaultToolsWithPreset:()=>a4,createDefaultTools:()=>d$,createDefaultExecutors:()=>Gf,createBuiltinTools:()=>N1,createBashTool:()=>m5,createBashExecutor:()=>c2,createAskQuestionTool:()=>l5,createApplyPatchTool:()=>u5,createApplyPatchExecutor:()=>v2,WebFetchRequestSchema:()=>k5,ToolPresets:()=>b0,TEAM_TOOL_NAMES:()=>Lf,SubmitInputSchema:()=>m2,SkillsInputSchema:()=>x2,SearchCodebaseInputSchema:()=>h2,RunCommandsInputSchema:()=>Af,ReadFilesInputSchema:()=>E2,ReadFileRequestSchema:()=>m$,FetchWebContentInputSchema:()=>b2,EditFileInputSchema:()=>k2,DefaultToolNames:()=>J0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>Pf,AskQuestionInputSchema:()=>g2,ApplyPatchInputSchema:()=>I2,ALL_DEFAULT_TOOL_NAMES:()=>g$});import{validateWithZod as mG,zodToJsonSchema as vG}from"@cline/shared";var J0={READ_FILES:"read_files",SEARCH_CODEBASE:"search_codebase",RUN_COMMANDS:"run_commands",FETCH_WEB_CONTENT:"fetch_web_content",APPLY_PATCH:"apply_patch",EDITOR:"editor",SKILLS:"skills",ASK:"ask_question",SUBMIT_AND_EXIT:"submit_and_exit"},g$=[J0.READ_FILES,J0.SEARCH_CODEBASE,J0.RUN_COMMANDS,J0.FETCH_WEB_CONTENT,J0.APPLY_PATCH,J0.EDITOR,J0.SKILLS,J0.ASK,J0.SUBMIT_AND_EXIT];import{createTool as F$,validateWithZod as u$,zodToJsonSchema as f$}from"@cline/shared";import{validateWithZod as T3}from"@cline/shared";import{z as U}from"zod";var v$=6000,E5=U.string().describe("The absolute file path of a text file to read content from"),R3=U.object({start_line:U.number().int().positive().nullable().optional().describe("Optional one-based starting line number to read from; use null or omit for the start of the file"),end_line:U.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit for the end of the file")}).describe("Optional inclusive one-based file line range"),m$=U.object({path:E5,start_line:R3.shape.start_line,end_line:R3.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),E2=U.object({files:U.array(m$).describe("Array of file read requests. Omit start_line/end_line or set them to null to return the full file content boundaries; provide integers to return only that inclusive one-based line range. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),U3=U.union([E2,m$,U.array(m$),U.array(U.string()),U.string(),U.object({files:m$}),U.object({file_paths:U.array(E5)}),U.object({file_paths:U.string()}),U.object({paths:U.array(U.union([E5,m$]))}),U.object({paths:m$}),U.object({paths:U.string()})]),h2=U.object({queries:U.array(U.string()).describe("Array of regex search queries to execute")}),L3=U.union([h2,U.array(U.string()),U.string(),U.object({queries:U.string()})]),D1=U.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${v$*2} characters) to avoid timeouts.`),Af=U.object({commands:U.array(D1).describe("Array of shell commands to execute")}),O3=U.union([Af,U.object({commands:D1}),U.object({command:D1}),U.object({cmd:D1}),U.array(U.string()),U.string()]),h5=U.object({command:U.string().min(1).describe("The executable to run directly without shell parsing."),args:U.array(U.string()).optional().describe("Optional argv list passed directly to the executable.")}),z3=U.union([D1,h5]),b5=U.object({commands:U.array(z3).describe("Array of commands to execute. Prefer structured { command, args } entries for portability; plain strings are still supported and are interpreted by the active shell.")}),_3=U.union([Af,b5,U.object({commands:z3}),U.array(h5),h5,U.object({command:D1}),U.object({cmd:D1}),U.array(U.string()),U.string()]),k5=U.object({url:U.string().describe("The URL to fetch"),prompt:U.string().min(2).describe("Analysis prompt for the fetched content")}),b2=U.object({requests:U.array(k5).describe("Array of the URLs for the web fetch requests")}),k2=U.object({path:U.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:U.string().nullable().optional().describe(`Exact text to replace (must match exactly once). Omit this when creating a missing file or inserting via insert_line. Keep this at or below ${v$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:U.string().describe(`The new content to write when creating a missing file, the replacement text for edits, or the inserted text when insert_line is provided. Keep this at or below ${v$} characters when possible; for large edits, use multiple calls with small chunks of old_text and new_text to iteratively edit the file.`),insert_line:U.number().int().nullable().optional().describe("Optional positive one-based boundary line. When provided, the tool inserts new_text before that line instead of performing a replacement edit; use line_count + 1 to append at EOF.")}).describe("Edit a text file by replacing old_text with new_text, create the file with new_text if it does not exist, or insert new_text at insert_line when insert_line is provided. Prefer using this tool for file edits over shell commands. IMPORTANT: large edits can time out, so use small chunks and multiple calls when possible."),I2=U.object({input:U.string().min(1).describe("The freeform apply_patch payload in the canonical patch grammar (e.g *** Begin Patch, *** Update File:, @@, and *** End Patch).")}).describe("Modify or create a text file by applying patches using the canonical apply_patch diff grammar. Prefer sending the patch body directly rather than wrapping it in shell syntax. IMPORTANT: large patches can time out, so use small chunks and multiple calls when possible."),y3=U.union([I2,U.string()]),x2=U.object({skill:U.string().min(1).describe("Name of the skill to execute."),args:U.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),g2=U.object({question:U.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:U.array(U.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),m2=U.object({summary:U.string().min(10).describe("Summarization of the investigation, steps taken, and resolution status to submit at the end of the session. Before submitting, read the problem again along with any provided test's assertions carefully and confirm your fix produces the expected output."),verified:U.boolean().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and taken all necessary steps to resolve the issue.
44
+ ${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}async function KB($){let f=await BB($.providerConfig),J="";for await(let Q of f.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(Q.type==="text"){J+=Q.text;continue}if(Q.type==="done"&&!Q.success&&Q.error)throw Error(Q.error)}return $.logger?.debug("Generated compaction summary",{outputChars:J.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),J.trim()}function GB($){try{return JSON.stringify($).length}catch{return String($).length}}async function V3($){let f=$.context.messages;if(f.length<2)return;let J=Z3(f,$.preserveRecentTokens,$.estimateMessageTokens);if(J<=0||J>=f.length)return;let Q=f.slice(0,J),Z=Q3(Q),W=Z>=0?C5(Q[Z])?.summary:void 0,j=Z>=0?Q.slice(Z+1):Q;if(j.length===0)return;let X=W3(Q),H=eZ(j),Y=X3({previousSummary:W,conversationText:H,fileOps:X});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:Q.length,newMessagesToFold:j.length,preservedMessages:f.length-J,previousSummaryChars:W?.length??0,conversationTextChars:H.length,summaryRequestChars:Y.length,summaryRequestEstimatedTokens:M5(Y.length),newMessagesJsonChars:GB(j),maxInputTokens:$.context.maxInputTokens,triggerTokens:$.context.triggerTokens});let V=await KB({providerConfig:H3({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),request:Y,logger:$.logger});if(!V.trim())return;let A=j3(V,X),B=f.reduce((R,F)=>R+$.estimateMessageTokens(F),0),K=[Y3({summary:A,fileOps:X,tokensBefore:B}),...f.slice(J)],G=K.reduce((R,F)=>R+$.estimateMessageTokens(F),0);return $.logger?.debug("Performed agentic compaction",{messagesBefore:f.length,messagesAfter:K.length,messagesSummarized:J,messagesPreserved:f.length-J,tokensBefore:B,tokensAfter:G,maxInputTokens:$.context.maxInputTokens}),{messages:K}}function K3($){if(q2($))return;if(typeof $.content==="string"){let J=$.content.trim();return J?{...$,content:J}:void 0}let f=$.content.filter((J)=>J.type!=="text"||J.text.trim());if(f.length===0)return;return{...$,content:f.map((J)=>J.type==="text"?{...J,text:J.text.trim()}:J.type==="tool_result"?{...J,content:S5(J.content)}:J)}}function S2($,f){return $.reduce((J,Q)=>J+f(Q),0)}function A3($,f){let J=Math.max(1,f),Q=Math.max(16,J*4);if(typeof $.content==="string"){let j=x$($.content,Q).trim();return{...$,content:j||"..."}}let Z=Q,W=$.content.map((j)=>{if(j.type!=="text"||Z<=0)return j;let X=x$(j.text,Z).trim();return Z-=X.length,{...j,text:X||"..."}});return{...$,content:W}}function PB($,f){let J=f3($),Q=u4($),Z=J3($),W=[];for(let j=0;j<$.length;j+=1){let X=K3($[j]);if(!X)continue;W.push({index:j,message:X,estimatedTokens:f(X),isFirstUser:j===J,isLastUser:j===Q,isLastAssistant:j===Z})}return W}function B3($,f,J,Q){let Z=$[f];Z.message=J,Z.estimatedTokens=Q(J)}function FB($){let f=new Set;if(!Array.isArray($.content))return f;for(let J of $.content)if(J.type==="tool_use")f.add(J.id);return f}function DB($){let f=new Set;if(!Array.isArray($.content))return f;for(let J of $.content)if(J.type==="tool_result")f.add(J.tool_use_id);return f}function G3($){return new Set([...FB($.message),...DB($.message)])}function RB($){let f=new Map;for(let J=0;J<$.length;J+=1)for(let Q of G3($[J])){let Z=f.get(Q);if(Z)Z.add(J);else f.set(Q,new Set([J]))}return f}function UB($,f){let J=RB($),Q=new Set,Z=[f];while(Z.length>0){let W=Z.shift();if(W===void 0||Q.has(W))continue;Q.add(W);for(let j of G3($[W]))for(let X of J.get(j)??[])if(!Q.has(X))Z.push(X)}return Q}function d4($,f,J,Q){let Z=S2($.map((W)=>W.message),Q);for(let W=0;W<$.length&&Z>J;){if(!f($[W])){W+=1;continue}let j=UB($,W);Z-=Array.from(j).reduce((X,H)=>X+$[H].estimatedTokens,0);for(let X of Array.from(j).sort((H,Y)=>Y-H))$.splice(X,1)}}function LB($,f,J){let Q=S2($.map((W)=>W.message),J);if(Q<=f)return;for(let W=$.length-1;W>=0&&Q>f;W-=1){let j=$[W];if(j.isFirstUser)continue;let X=Math.max(sZ,j.estimatedTokens-(Q-f));if(X>=j.estimatedTokens)continue;B3($,W,A3(j.message,X),J),Q=S2($.map((H)=>H.message),J)}if(Q<=f)return;let Z=$.findIndex((W)=>W.isFirstUser);if(Z>=0){let W=Math.max(1,$[Z].estimatedTokens-(Q-f));B3($,Z,A3($[Z].message,W),J)}}function OB($,f){return JSON.stringify($)!==JSON.stringify(f)}function zB($){let f=u4($);if(f<0||f===0&&!w2($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,f),protectedTail:$.slice(f)}}function P3($){let f=Math.max(1,Math.min($.context.triggerTokens,$.context.maxInputTokens)),{compactable:J,protectedTail:Q}=zB($.context.messages);if(J.length===0)return;let Z=PB(J,$.estimateMessageTokens);if(Z.length===0)return;d4(Z,(H)=>H.message.role==="assistant"&&!H.isLastAssistant,f,$.estimateMessageTokens),d4(Z,(H)=>H.message.role==="user"&&!H.isFirstUser&&!H.isLastUser,f,$.estimateMessageTokens),d4(Z,(H)=>H.message.role==="assistant"&&H.isLastAssistant,f,$.estimateMessageTokens),d4(Z,(H)=>H.message.role==="user"&&H.isLastUser&&!H.isFirstUser,f,$.estimateMessageTokens),LB(Z,f,$.estimateMessageTokens);let W=[...Z.map((H)=>H.message),...Q];if(!OB($.context.messages,W))return;let j=S2([...J.map((H)=>K3(H)??H),...Q],$.estimateMessageTokens),X=S2(W,$.estimateMessageTokens);return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:W.length,messagesRemoved:$.context.messages.length-W.length,tokensBefore:j,tokensAfter:X,targetTokens:f,maxInputTokens:$.context.maxInputTokens}),{messages:W}}function F3($){try{return JSON.stringify($).length}catch{return String($).length}}function _B($){let f=0,J=0,Q=0;for(let Z of $){if(!Array.isArray(Z.content))continue;for(let W of Z.content){if(W.type!=="tool_result")continue;let j=F3(W.content);f+=1,J+=j,Q=Math.max(Q,j)}}return{toolResultCount:f,toolResultSerializedChars:J,maxToolResultSerializedChars:Q}}var yB={basic:({context:$,estimateMessageTokens:f,logger:J})=>P3({context:$,estimateMessageTokens:f,logger:J}),agentic:({context:$,providerConfig:f,compaction:J,mode:Q,estimateMessageTokens:Z,logger:W})=>V3({context:$,providerConfig:f,summarizer:J?.summarizer,preserveRecentTokens:Q==="manual"?Math.min(J?.preserveRecentTokens??w5,$.triggerTokens):J?.preserveRecentTokens??w5,estimateMessageTokens:Z,logger:W})};function NB($){if(typeof $.config.reserveTokens==="number"){let Q=Math.max(0,$.config.reserveTokens),Z=Math.max(0,$.maxInputTokens-Q);return{shouldCompact:$.inputTokens>Z,triggerTokens:Z,thresholdRatio:$.maxInputTokens>0?Z/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio!=="number"){let Q=Math.max(0,Math.min($.maxInputTokens-aZ,$.maxInputTokens*q5));return{shouldCompact:$.inputTokens>Q,triggerTokens:Q,thresholdRatio:$.maxInputTokens>0?Q/$.maxInputTokens:0}}let f=$.config.thresholdRatio??q5,J=$.maxInputTokens*f;return{shouldCompact:$.inputTokens>J,triggerTokens:J,thresholdRatio:f}}function TB($){let f=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,J=Math.min(0.95,Math.max(0.05,f)),Q=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*J)));return{triggerTokens:Q,thresholdRatio:$.maxInputTokens>0?Q/$.maxInputTokens:0}}function C2($,f={}){let J=$.compaction;if(J?.enabled!==!0)return;let Q=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},Z=$3(),W=J?.strategy??"basic",j=yB[W],X=f.mode??"auto";return async(H)=>{let Y=H.apiMessages.reduce((P,D)=>P+Z(D),0),V=J?.maxInputTokens??H.model.info?.maxInputTokens??H.model.info?.contextWindow??nZ;if(typeof V!=="number"||!Number.isFinite(V)||V<=0)return;let A=NB({inputTokens:Y,maxInputTokens:V,config:{reserveTokens:J?.reserveTokens,thresholdRatio:J?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:X,strategy:W,iteration:H.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:Y,maxInputTokens:V,triggerTokens:A.triggerTokens,thresholdRatio:A.thresholdRatio,shouldCompact:A.shouldCompact,messageCount:H.messages.length,apiMessageCount:H.apiMessages.length,apiMessagesJsonChars:F3(H.apiMessages),..._B(H.apiMessages)}),X==="auto"&&!A.shouldCompact)return;let B=X==="manual"?TB({inputTokens:Y,maxInputTokens:V,autoTriggerTokens:A.triggerTokens,manualTargetRatio:f.manualTargetRatio}):A,K={agentId:H.agentId,conversationId:H.conversationId,parentAgentId:H.parentAgentId,iteration:H.iteration,messages:H.messages,model:H.model,maxInputTokens:V,triggerTokens:B.triggerTokens,thresholdRatio:B.thresholdRatio,utilizationRatio:V>0?Y/V:0},G=X==="manual"?"manual_compaction":"auto_compaction";H.emitStatusNotice?.(X==="manual"?"compacting":"auto-compacting",{kind:G,reason:G,iteration:H.iteration,triggerTokens:B.triggerTokens,maxInputTokens:V});let R=H.messages.length,F=J?.compact?await J.compact(K):await j({context:K,providerConfig:{...Q,abortSignal:H.abortSignal},compaction:J,mode:X,estimateMessageTokens:Z,logger:$.logger});if(F?.messages){let P=F.messages.reduce((D,O)=>D+Z(O),0);$.logger?.log("Context compaction completed",{severity:"info",strategy:W,maxInputTokens:V,inputTokens:Y,afterTokens:P,tokensSaved:Y-P,utilizationBefore:`${(Y/V*100).toFixed(1)}%`,utilizationAfter:`${(P/V*100).toFixed(1)}%`,thresholdTrigger:`${(B.thresholdRatio*100).toFixed(1)}%`,messagesBefore:R,messagesAfter:F.messages.length,messagesRemoved:R-F.messages.length})}return F}}var SW={};q(SW,{zodToJsonSchema:()=>vG,validateWithZod:()=>mG,resolveToolRoutingConfig:()=>Ff,resolveToolPresetName:()=>R$,resolveCoreSelectedToolIds:()=>$6,getCoreHeadlessToolNames:()=>a2,getCoreDefaultEnabledToolIds:()=>e4,getCoreBuiltinToolCatalog:()=>N1,getCoreAcpToolNames:()=>f6,createWindowsShellTool:()=>v5,createWebFetchTool:()=>c5,createWebFetchExecutor:()=>r2,createToolPoliciesWithPreset:()=>n4,createSubmitAndExitTool:()=>p5,createSkillsTool:()=>R1,createSearchTool:()=>g5,createSearchExecutor:()=>p2,createReadFilesTool:()=>x5,createFileReadExecutor:()=>l2,createEditorTool:()=>d5,createEditorExecutor:()=>u2,createDefaultToolsWithPreset:()=>a4,createDefaultTools:()=>d$,createDefaultExecutors:()=>Gf,createBuiltinTools:()=>T1,createBashTool:()=>m5,createBashExecutor:()=>c2,createAskQuestionTool:()=>l5,createApplyPatchTool:()=>u5,createApplyPatchExecutor:()=>v2,WebFetchRequestSchema:()=>k5,ToolPresets:()=>b0,TEAM_TOOL_NAMES:()=>Lf,SubmitInputSchema:()=>m2,SkillsInputSchema:()=>x2,SearchCodebaseInputSchema:()=>h2,RunCommandsInputSchema:()=>Af,ReadFilesInputSchema:()=>E2,ReadFileRequestSchema:()=>m$,FetchWebContentInputSchema:()=>b2,EditFileInputSchema:()=>k2,DefaultToolNames:()=>J0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>Pf,AskQuestionInputSchema:()=>g2,ApplyPatchInputSchema:()=>I2,ALL_DEFAULT_TOOL_NAMES:()=>g$});import{validateWithZod as mG,zodToJsonSchema as vG}from"@cline/shared";var J0={READ_FILES:"read_files",SEARCH_CODEBASE:"search_codebase",RUN_COMMANDS:"run_commands",FETCH_WEB_CONTENT:"fetch_web_content",APPLY_PATCH:"apply_patch",EDITOR:"editor",SKILLS:"skills",ASK:"ask_question",SUBMIT_AND_EXIT:"submit_and_exit"},g$=[J0.READ_FILES,J0.SEARCH_CODEBASE,J0.RUN_COMMANDS,J0.FETCH_WEB_CONTENT,J0.APPLY_PATCH,J0.EDITOR,J0.SKILLS,J0.ASK,J0.SUBMIT_AND_EXIT];import{createTool as F$,validateWithZod as u$,zodToJsonSchema as f$}from"@cline/shared";import{validateWithZod as N3}from"@cline/shared";import{z as U}from"zod";var v$=6000,E5=U.string().describe("The absolute file path of a text file to read content from"),R3=U.object({start_line:U.number().int().positive().nullable().optional().describe("Optional one-based starting line number to read from; use null or omit for the start of the file"),end_line:U.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit for the end of the file")}).describe("Optional inclusive one-based file line range"),m$=U.object({path:E5,start_line:R3.shape.start_line,end_line:R3.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),E2=U.object({files:U.array(m$).describe("Array of file read requests. Omit start_line/end_line or set them to null to return the full file content boundaries; provide integers to return only that inclusive one-based line range. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),U3=U.union([E2,m$,U.array(m$),U.array(U.string()),U.string(),U.object({files:m$}),U.object({file_paths:U.array(E5)}),U.object({file_paths:U.string()}),U.object({paths:U.array(U.union([E5,m$]))}),U.object({paths:m$}),U.object({paths:U.string()})]),h2=U.object({queries:U.array(U.string()).describe("Array of regex search queries to execute")}),L3=U.union([h2,U.array(U.string()),U.string(),U.object({queries:U.string()})]),D1=U.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${v$*2} characters) to avoid timeouts.`),Af=U.object({commands:U.array(D1).describe("Array of shell commands to execute")}),O3=U.union([Af,U.object({commands:D1}),U.object({command:D1}),U.object({cmd:D1}),U.array(U.string()),U.string()]),h5=U.object({command:U.string().min(1).describe("The executable to run directly without shell parsing."),args:U.array(U.string()).optional().describe("Optional argv list passed directly to the executable.")}),z3=U.union([D1,h5]),b5=U.object({commands:U.array(z3).describe("Array of commands to execute. Prefer structured { command, args } entries for portability; plain strings are still supported and are interpreted by the active shell.")}),_3=U.union([Af,b5,U.object({commands:z3}),U.array(h5),h5,U.object({command:D1}),U.object({cmd:D1}),U.array(U.string()),U.string()]),k5=U.object({url:U.string().describe("The URL to fetch"),prompt:U.string().min(2).describe("Analysis prompt for the fetched content")}),b2=U.object({requests:U.array(k5).describe("Array of the URLs for the web fetch requests")}),k2=U.object({path:U.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:U.string().nullable().optional().describe(`Exact text to replace (must match exactly once). Omit this when creating a missing file or inserting via insert_line. Keep this at or below ${v$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:U.string().describe(`The new content to write when creating a missing file, the replacement text for edits, or the inserted text when insert_line is provided. Keep this at or below ${v$} characters when possible; for large edits, use multiple calls with small chunks of old_text and new_text to iteratively edit the file.`),insert_line:U.number().int().nullable().optional().describe("Optional positive one-based boundary line. When provided, the tool inserts new_text before that line instead of performing a replacement edit; use line_count + 1 to append at EOF.")}).describe("Edit a text file by replacing old_text with new_text, create the file with new_text if it does not exist, or insert new_text at insert_line when insert_line is provided. Prefer using this tool for file edits over shell commands. IMPORTANT: large edits can time out, so use small chunks and multiple calls when possible."),I2=U.object({input:U.string().min(1).describe("The freeform apply_patch payload in the canonical patch grammar (e.g *** Begin Patch, *** Update File:, @@, and *** End Patch).")}).describe("Modify or create a text file by applying patches using the canonical apply_patch diff grammar. Prefer sending the patch body directly rather than wrapping it in shell syntax. IMPORTANT: large patches can time out, so use small chunks and multiple calls when possible."),y3=U.union([I2,U.string()]),x2=U.object({skill:U.string().min(1).describe("Name of the skill to execute."),args:U.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),g2=U.object({question:U.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:U.array(U.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),m2=U.object({summary:U.string().min(10).describe("Summarization of the investigation, steps taken, and resolution status to submit at the end of the session. Before submitting, read the problem again along with any provided test's assertions carefully and confirm your fix produces the expected output."),verified:U.boolean().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and taken all necessary steps to resolve the issue.
45
45
  'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
46
- IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function c$($){if($ instanceof Error)return $.message;return String($)}function N3($){if(typeof $.old_text==="string"&&$.old_text.length>v$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${v$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>v$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${v$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}function $$($,f,J){return Promise.race([$,new Promise((Q,Z)=>{setTimeout(()=>Z(Error(J)),f)})])}function M3($){let f=T3(U3,$);if(typeof f==="string")return[{path:f}];if(Array.isArray(f))return f.map((J)=>typeof J==="string"?{path:J}:J);if("files"in f)return Array.isArray(f.files)?f.files:[f.files];if("file_paths"in f)return(Array.isArray(f.file_paths)?f.file_paths:[f.file_paths]).map((Q)=>({path:Q}));if("paths"in f)return(Array.isArray(f.paths)?f.paths:[f.paths]).map((Q)=>typeof Q==="string"?{path:Q}:Q);return[f]}function l4($){let{path:f,start_line:J,end_line:Q}=$;if(J==null&&Q==null)return f;return`${f}:${J??1}-${Q??"EOF"}`}function q3($){let{start_line:f,end_line:J}=$;if(f==null||J==null||f<=J)return null;return`start_line must be less than or equal to end_line (received start_line: ${f}, end_line: ${J})`}function w3($){let f=T3(_3,$);if(typeof f==="string")return[f];if(Array.isArray(f))return f;if("commands"in f)return Array.isArray(f.commands)?f.commands:[f.commands];if("command"in f)return"args"in f?[f]:[f.command];if("cmd"in f)return[f.cmd];return[f]}function I5($){if(typeof $==="string")return $;let f=$.args??[];if(f.length===0)return $.command;let J=f.map((Q)=>/[\s"]/u.test(Q)?JSON.stringify(Q):Q);return`${$.command} ${J.join(" ")}`}function x5($,f={}){let J=f.fileReadTimeoutMs??1e4;return F$({name:"read_files",description:"Read the full 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. Returns file contents or error messages for each path.",inputSchema:f$(E2),timeoutMs:J*2,retryable:!0,maxRetries:1,execute:async(Q,Z)=>{let W=M3(Q);return Promise.all(W.map(async(j)=>{let X=q3(j);if(X)return{query:l4(j),result:"",error:`Invalid file range: ${X}`,success:!1};try{let H=await $$($(j,Z),J,`File read timed out after ${J}ms`);return{query:l4(j),result:H,success:!0}}catch(H){let Y=c$(H);return{query:l4(j),result:"",error:`Error reading file: ${Y}`,success:!1}}}))}})}function g5($,f={}){let J=f.searchTimeoutMs??30000,Q=f.cwd??process.cwd();return F$({name:"search_codebase",description:"Perform regex pattern searches across the codebase. Supports multiple parallel searches. Use for finding code patterns, function definitions, class names, imports, etc.",inputSchema:f$(h2),timeoutMs:J*2,retryable:!0,maxRetries:1,execute:async(Z,W)=>{let j=u$(L3,Z),X=Array.isArray(j)?j:typeof j==="object"?Array.isArray(j.queries)?j.queries:[j.queries]:[j];return Promise.all(X.map(async(H)=>{try{let Y=await $$($(H,Q,W),J,`Search timed out after ${J}ms`),V=Y.length>0&&!Y.includes("No results found");return{query:H,result:Y,success:V}}catch(Y){let V=c$(Y);return{query:H,result:"",error:`Search failed: ${V}`,success:!1}}}))}})}function m5($,f={}){let J=f.bashTimeoutMs??30000,Q=f.cwd??process.cwd();return F$({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.",inputSchema:f$(Af),timeoutMs:J*2,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=u$(O3,Z),X;if(typeof j==="string")X=[j];else if(Array.isArray(j))X=j;else if("commands"in j)X=Array.isArray(j.commands)?j.commands:[j.commands];else if("command"in j)X=[j.command];else X=[j.cmd];return Promise.all(X.map(async(H)=>{try{let Y=await $$($(H,Q,W),J,`Command timed out after ${J}ms`);return{query:H,result:Y,success:!0}}catch(Y){let V=c$(Y);return{query:H,result:"",error:`Command failed: ${V}`,success:!1}}}))}})}function v5($,f={}){let J=f.bashTimeoutMs??30000,Q=f.cwd??process.cwd();return F$({name:"run_commands",description:"Run shell commands from the root of the workspacein Windows environment. Use for listing files, checking git status, running builds, executing tests, etc. Prefer structured { command, args } entries for portability; plain string commands should be properly shell-escaped.",inputSchema:f$(b5),timeoutMs:J*2,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=w3(Z);return Promise.all(j.map(async(X)=>{try{let H=await $$($(X,Q,W),J,`Command timed out after ${J}ms`);return{query:I5(X),result:H,success:!0}}catch(H){let Y=c$(H);return{query:I5(X),result:"",error:`Command failed: ${Y}`,success:!1}}}))}})}function c5($,f={}){let J=f.webFetchTimeoutMs??30000;return F$({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.",inputSchema:f$(b2),timeoutMs:J*2,retryable:!0,maxRetries:2,execute:async(Q,Z)=>{let W=u$(b2,Q);return Promise.all(W.requests.map(async(j)=>{try{let X=await $$($(j.url,j.prompt,Z),J,`Web fetch timed out after ${J}ms`);return{query:j.url,result:X,success:!0}}catch(X){let H=c$(X);return{query:j.url,result:"",error:`Error fetching web content: ${H}`,success:!1}}}))}})}var MB=`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:
46
+ IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function c$($){if($ instanceof Error)return $.message;return String($)}function T3($){if(typeof $.old_text==="string"&&$.old_text.length>v$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${v$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>v$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${v$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}function $$($,f,J){return Promise.race([$,new Promise((Q,Z)=>{setTimeout(()=>Z(Error(J)),f)})])}function M3($){let f=N3(U3,$);if(typeof f==="string")return[{path:f}];if(Array.isArray(f))return f.map((J)=>typeof J==="string"?{path:J}:J);if("files"in f)return Array.isArray(f.files)?f.files:[f.files];if("file_paths"in f)return(Array.isArray(f.file_paths)?f.file_paths:[f.file_paths]).map((Q)=>({path:Q}));if("paths"in f)return(Array.isArray(f.paths)?f.paths:[f.paths]).map((Q)=>typeof Q==="string"?{path:Q}:Q);return[f]}function l4($){let{path:f,start_line:J,end_line:Q}=$;if(J==null&&Q==null)return f;return`${f}:${J??1}-${Q??"EOF"}`}function q3($){let{start_line:f,end_line:J}=$;if(f==null||J==null||f<=J)return null;return`start_line must be less than or equal to end_line (received start_line: ${f}, end_line: ${J})`}function w3($){let f=N3(_3,$);if(typeof f==="string")return[f];if(Array.isArray(f))return f;if("commands"in f)return Array.isArray(f.commands)?f.commands:[f.commands];if("command"in f)return"args"in f?[f]:[f.command];if("cmd"in f)return[f.cmd];return[f]}function I5($){if(typeof $==="string")return $;let f=$.args??[];if(f.length===0)return $.command;let J=f.map((Q)=>/[\s"]/u.test(Q)?JSON.stringify(Q):Q);return`${$.command} ${J.join(" ")}`}function x5($,f={}){let J=f.fileReadTimeoutMs??1e4;return F$({name:"read_files",description:"Read the full 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. Returns file contents or error messages for each path.",inputSchema:f$(E2),timeoutMs:J*2,retryable:!0,maxRetries:1,execute:async(Q,Z)=>{let W=M3(Q);return Promise.all(W.map(async(j)=>{let X=q3(j);if(X)return{query:l4(j),result:"",error:`Invalid file range: ${X}`,success:!1};try{let H=await $$($(j,Z),J,`File read timed out after ${J}ms`);return{query:l4(j),result:H,success:!0}}catch(H){let Y=c$(H);return{query:l4(j),result:"",error:`Error reading file: ${Y}`,success:!1}}}))}})}function g5($,f={}){let J=f.searchTimeoutMs??30000,Q=f.cwd??process.cwd();return F$({name:"search_codebase",description:"Perform regex pattern searches across the codebase. Supports multiple parallel searches. Use for finding code patterns, function definitions, class names, imports, etc.",inputSchema:f$(h2),timeoutMs:J*2,retryable:!0,maxRetries:1,execute:async(Z,W)=>{let j=u$(L3,Z),X=Array.isArray(j)?j:typeof j==="object"?Array.isArray(j.queries)?j.queries:[j.queries]:[j];return Promise.all(X.map(async(H)=>{try{let Y=await $$($(H,Q,W),J,`Search timed out after ${J}ms`),V=Y.length>0&&!Y.includes("No results found");return{query:H,result:Y,success:V}}catch(Y){let V=c$(Y);return{query:H,result:"",error:`Search failed: ${V}`,success:!1}}}))}})}function m5($,f={}){let J=f.bashTimeoutMs??30000,Q=f.cwd??process.cwd();return F$({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.",inputSchema:f$(Af),timeoutMs:J*2,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=u$(O3,Z),X;if(typeof j==="string")X=[j];else if(Array.isArray(j))X=j;else if("commands"in j)X=Array.isArray(j.commands)?j.commands:[j.commands];else if("command"in j)X=[j.command];else X=[j.cmd];return Promise.all(X.map(async(H)=>{try{let Y=await $$($(H,Q,W),J,`Command timed out after ${J}ms`);return{query:H,result:Y,success:!0}}catch(Y){let V=c$(Y);return{query:H,result:"",error:`Command failed: ${V}`,success:!1}}}))}})}function v5($,f={}){let J=f.bashTimeoutMs??30000,Q=f.cwd??process.cwd();return F$({name:"run_commands",description:"Run shell commands from the root of the workspacein Windows environment. Use for listing files, checking git status, running builds, executing tests, etc. Prefer structured { command, args } entries for portability; plain string commands should be properly shell-escaped.",inputSchema:f$(b5),timeoutMs:J*2,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=w3(Z);return Promise.all(j.map(async(X)=>{try{let H=await $$($(X,Q,W),J,`Command timed out after ${J}ms`);return{query:I5(X),result:H,success:!0}}catch(H){let Y=c$(H);return{query:I5(X),result:"",error:`Command failed: ${Y}`,success:!1}}}))}})}function c5($,f={}){let J=f.webFetchTimeoutMs??30000;return F$({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.",inputSchema:f$(b2),timeoutMs:J*2,retryable:!0,maxRetries:2,execute:async(Q,Z)=>{let W=u$(b2,Q);return Promise.all(W.requests.map(async(j)=>{try{let X=await $$($(j.url,j.prompt,Z),J,`Web fetch timed out after ${J}ms`);return{query:j.url,result:X,success:!0}}catch(X){let H=c$(X);return{query:j.url,result:"",error:`Error fetching web content: ${H}`,success:!1}}}))}})}var MB=`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:
47
47
 
48
48
  *** Begin Patch
49
49
  *** Update File: path/to/file.ts
@@ -79,7 +79,7 @@ Example:
79
79
  </div>
80
80
  );
81
81
  }
82
- *** End Patch`;function u5($,f={}){let J=f.applyPatchTimeoutMs??30000,Q=f.cwd??process.cwd();return F$({name:"apply_patch",description:MB,inputSchema:f$(I2),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=u$(y3,Z),X=typeof j==="string"?j:j.input;try{return{query:"apply_patch",result:await $$($({input:X},Q,W),J,`apply_patch timed out after ${J}ms`),success:!0}}catch(H){return{query:"apply_patch",result:"",error:`apply_patch failed: ${c$(H)}`,success:!1}}}})}function d5($,f={}){let J=f.editorTimeoutMs??30000,Q=f.cwd??process.cwd();return F$({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 tools for making small, precise edits to existing files or creating new files over shell commands.",inputSchema:f$(k2),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=u$(k2,Z),X=j.insert_line==null?"edit":"insert",H=N3(j);if(H)return{query:`${X}:${j.path}`,result:"",error:H,success:!1};try{let Y=await $$($(j,Q,W),J,`Editor operation timed out after ${J}ms`);return{query:`${X}:${j.path}`,result:Y,success:!0}}catch(Y){let V=c$(Y);return{query:`${X}:${j.path}`,result:"",error:`Editor operation failed: ${V}`,success:!1}}}})}function R1($,f={}){let J=f.skillsTimeoutMs??15000,Q='Execute a skill within the main conversation. When users ask you to perform tasks, check if any available skills match. When users reference a slash command, invoke it with this tool. Input: `skill` (required) and optional `args`. Example: `skill: "pdf"`, `skill: "commit", args: "-m \\"Fix bug\\""`, `skill: "review-pr", args: "123"`, `skill: "ms-office-suite:pdf"`. When a skill matches the user\'s request, invoking this tool is a blocking requirement before any other response. Never mention a skill without invoking this tool.',Z=F$({name:"skills",description:Q,inputSchema:f$(x2),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(W,j)=>{let X=u$(x2,W);return $$($(X.skill,X.args||void 0,j),J,`Skills operation timed out after ${J}ms`)}});return Object.defineProperty(Z,"description",{get(){let W=$.configuredSkills?.filter((j)=>!j.disabled).map((j)=>j.name);if(W&&W.length>0)return`${Q} Available skills: ${W.join(", ")}.`;return Q},enumerable:!0,configurable:!0}),Z}function l5($){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:f$(g2),retryable:!1,maxRetries:0,execute:async(f,J)=>{let Q=u$(g2,f);return $(Q.question,Q.options,J)}}}function p5($,f={}){let J=f.submitTimeoutMs??15000;return F$({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. Provide a summary of the investigation and confirm the issue is resolved.",inputSchema:f$(m2),lifecycle:{completesRun:!0},timeoutMs:J,retryable:!1,maxRetries:0,execute:async(Q,Z)=>{let W=u$(m2,Q);return $$($(W.summary,W.verified,Z),J,`submit_and_exit timed out after ${J}ms`)}})}function d$($){let{executors:f,enableReadFiles:J=!0,enableSearch:Q=!0,enableBash:Z=!0,enableWebFetch:W=!0,enableApplyPatch:j=!1,enableEditor:X=!0,enableSkills:H=!0,enableAskQuestion:Y=!0,enableSubmitAndExit:V=!1,...A}=$,B=[];if(J&&f.readFile)B.push(x5(f.readFile,A));if(Q&&f.search)B.push(g5(f.search,A));if(Z&&f.bash)if(process.platform==="win32")B.push(v5(f.bash,A));else B.push(m5(f.bash,A));if(W&&f.webFetch)B.push(c5(f.webFetch,A));if(X&&f.editor)B.push(d5(f.editor,A));else if(j&&f.applyPatch)B.push(u5(f.applyPatch,A));if(H&&f.skills)B.push(R1(f.skills,A));let K=V?f.submit:void 0;if(Y&&f.askQuestion&&!K)B.push(l5(f.askQuestion));if(K)B.push(p5(K,A));return B}import*as E0 from"node:fs/promises";import*as h0 from"node:path";var g={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},C3=["%%bash","apply_patch","EOF","```"];class W0 extends Error{constructor($){super($);this.name="DiffError"}}function C0($){let f={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(J)=>f[J]??J).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class r5{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor($,f){this.lines=$;this.currentFiles=f}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(g.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(g.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(g.UPDATE)){this.parseUpdate($.substring(g.UPDATE.length).trim());return}if($?.startsWith(g.DELETE)){this.parseDelete($.substring(g.DELETE.length).trim());return}if($?.startsWith(g.ADD)){this.parseAdd($.substring(g.ADD.length).trim());return}throw new W0(`Unknown line while parsing: ${$}`)}checkDuplicate($,f){if($ in this.patch.actions)throw new W0(`Duplicate ${f} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let f=this.lines[this.index]?.startsWith(g.MOVE)?(this.lines[this.index++]??"").substring(g.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new W0(`Update File Error: Missing File: ${$}`);let J=this.currentFiles[$]??"",Q=this.parseUpdateFile(J,$);Q.movePath=f,this.patch.actions[$]=Q,this.currentPath=void 0}parseUpdateFile($,f){let J={type:"update",chunks:[]},Q=$.split(`
82
+ *** End Patch`;function u5($,f={}){let J=f.applyPatchTimeoutMs??30000,Q=f.cwd??process.cwd();return F$({name:"apply_patch",description:MB,inputSchema:f$(I2),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=u$(y3,Z),X=typeof j==="string"?j:j.input;try{return{query:"apply_patch",result:await $$($({input:X},Q,W),J,`apply_patch timed out after ${J}ms`),success:!0}}catch(H){return{query:"apply_patch",result:"",error:`apply_patch failed: ${c$(H)}`,success:!1}}}})}function d5($,f={}){let J=f.editorTimeoutMs??30000,Q=f.cwd??process.cwd();return F$({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 tools for making small, precise edits to existing files or creating new files over shell commands.",inputSchema:f$(k2),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=u$(k2,Z),X=j.insert_line==null?"edit":"insert",H=T3(j);if(H)return{query:`${X}:${j.path}`,result:"",error:H,success:!1};try{let Y=await $$($(j,Q,W),J,`Editor operation timed out after ${J}ms`);return{query:`${X}:${j.path}`,result:Y,success:!0}}catch(Y){let V=c$(Y);return{query:`${X}:${j.path}`,result:"",error:`Editor operation failed: ${V}`,success:!1}}}})}function R1($,f={}){let J=f.skillsTimeoutMs??15000,Q='Execute a skill within the main conversation. When users ask you to perform tasks, check if any available skills match. When users reference a slash command, invoke it with this tool. Input: `skill` (required) and optional `args`. Example: `skill: "pdf"`, `skill: "commit", args: "-m \\"Fix bug\\""`, `skill: "review-pr", args: "123"`, `skill: "ms-office-suite:pdf"`. When a skill matches the user\'s request, invoking this tool is a blocking requirement before any other response. Never mention a skill without invoking this tool.',Z=F$({name:"skills",description:Q,inputSchema:f$(x2),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(W,j)=>{let X=u$(x2,W);return $$($(X.skill,X.args||void 0,j),J,`Skills operation timed out after ${J}ms`)}});return Object.defineProperty(Z,"description",{get(){let W=$.configuredSkills?.filter((j)=>!j.disabled).map((j)=>j.name);if(W&&W.length>0)return`${Q} Available skills: ${W.join(", ")}.`;return Q},enumerable:!0,configurable:!0}),Z}function l5($){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:f$(g2),retryable:!1,maxRetries:0,execute:async(f,J)=>{let Q=u$(g2,f);return $(Q.question,Q.options,J)}}}function p5($,f={}){let J=f.submitTimeoutMs??15000;return F$({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. Provide a summary of the investigation and confirm the issue is resolved.",inputSchema:f$(m2),lifecycle:{completesRun:!0},timeoutMs:J,retryable:!1,maxRetries:0,execute:async(Q,Z)=>{let W=u$(m2,Q);return $$($(W.summary,W.verified,Z),J,`submit_and_exit timed out after ${J}ms`)}})}function d$($){let{executors:f,enableReadFiles:J=!0,enableSearch:Q=!0,enableBash:Z=!0,enableWebFetch:W=!0,enableApplyPatch:j=!1,enableEditor:X=!0,enableSkills:H=!0,enableAskQuestion:Y=!0,enableSubmitAndExit:V=!1,...A}=$,B=[];if(J&&f.readFile)B.push(x5(f.readFile,A));if(Q&&f.search)B.push(g5(f.search,A));if(Z&&f.bash)if(process.platform==="win32")B.push(v5(f.bash,A));else B.push(m5(f.bash,A));if(W&&f.webFetch)B.push(c5(f.webFetch,A));if(X&&f.editor)B.push(d5(f.editor,A));else if(j&&f.applyPatch)B.push(u5(f.applyPatch,A));if(H&&f.skills)B.push(R1(f.skills,A));let K=V?f.submit:void 0;if(Y&&f.askQuestion&&!K)B.push(l5(f.askQuestion));if(K)B.push(p5(K,A));return B}import*as E0 from"node:fs/promises";import*as h0 from"node:path";var g={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},C3=["%%bash","apply_patch","EOF","```"];class W0 extends Error{constructor($){super($);this.name="DiffError"}}function C0($){let f={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(J)=>f[J]??J).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class r5{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor($,f){this.lines=$;this.currentFiles=f}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(g.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(g.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(g.UPDATE)){this.parseUpdate($.substring(g.UPDATE.length).trim());return}if($?.startsWith(g.DELETE)){this.parseDelete($.substring(g.DELETE.length).trim());return}if($?.startsWith(g.ADD)){this.parseAdd($.substring(g.ADD.length).trim());return}throw new W0(`Unknown line while parsing: ${$}`)}checkDuplicate($,f){if($ in this.patch.actions)throw new W0(`Duplicate ${f} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let f=this.lines[this.index]?.startsWith(g.MOVE)?(this.lines[this.index++]??"").substring(g.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new W0(`Update File Error: Missing File: ${$}`);let J=this.currentFiles[$]??"",Q=this.parseUpdateFile(J,$);Q.movePath=f,this.patch.actions[$]=Q,this.currentPath=void 0}parseUpdateFile($,f){let J={type:"update",chunks:[]},Q=$.split(`
83
83
  `),Z=0,W=[g.END,g.UPDATE,g.DELETE,g.ADD,g.END_FILE];while(!W.some((j)=>this.lines[this.index]?.startsWith(j.trim()))){let j=this.lines[this.index],X=j?.startsWith("@@ ")?j.substring(3):void 0;if(X!==void 0||(j==="@@"?j:void 0)!==void 0)this.index++;else if(Z!==0)throw new W0(`Invalid Line:
84
84
  ${this.lines[this.index]}`);if(X?.trim()){let F=C0(X.trim());for(let P=Z;P<Q.length;P++){let D=Q[P];if(D&&(C0(D)===F||C0(D.trim())===F)){if(Z=P+1,C0(D.trim())===F&&C0(D)!==F)this.fuzz++;break}}}let[Y,V,A,B]=SB(this.lines,this.index),[K,G,R]=wB(Q,Y,Z,B);if(K===-1){let F=Y.join(`
85
85
  `);this.addWarning({path:this.currentPath||f,chunkIndex:J.chunks.length,message:`Could not find matching context (similarity: ${R.toFixed(2)}). Chunk skipped.`,context:F.length>200?`${F.substring(0,200)}...`:F}),this.index=A}else{this.fuzz+=G;for(let F of V)F.origIndex+=K,J.chunks.push(F);Z=K+Y.length,this.index=A}}return J}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 f=[],J=[g.END,g.UPDATE,g.DELETE,g.ADD];while(this.hasMoreLines()&&!J.some((Q)=>this.lines[this.index]?.startsWith(Q.trim()))){let Q=this.lines[this.index++];if(Q===void 0)break;if(!Q.startsWith("+"))throw new W0(`Invalid Add File line (missing '+'): ${Q}`);f.push(Q.substring(1))}this.patch.actions[$]={type:"add",newFile:f.join(`
@@ -120,7 +120,7 @@ Searched ${R} files.`;let P=[`Found ${G.length} result${G.length===1?"":"s"} for
120
120
 
121
121
  `).trim()}function r2($={}){let{timeoutMs:f=30000,maxResponseBytes:J=5000000,userAgent:Q="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:Z={},followRedirects:W=!0}=$;return async(j,X,H)=>{let Y;try{Y=new URL(j)}catch{throw Error(`Invalid URL: ${j}`)}if(!["http:","https:"].includes(Y.protocol))throw Error(`Invalid protocol: ${Y.protocol}. Only http and https are supported.`);let V=new AbortController,A=setTimeout(()=>V.abort(),f),B;if(H.signal)B=()=>V.abort(),H.signal.addEventListener("abort",B);try{let K=await fetch(j,{method:"GET",headers:{"User-Agent":Q,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...Z},redirect:W?"follow":"manual",signal:V.signal});if(clearTimeout(A),!W&&K.status>=300&&K.status<400)return`Redirect to: ${K.headers.get("location")}`;if(!K.ok)throw Error(`HTTP ${K.status}: ${K.statusText}`);let G=K.headers.get("content-type")||"",R=K.body?.getReader();if(!R)throw Error("Failed to read response body");let F=[],P=0;while(!0){let{done:y,value:w}=await R.read();if(y)break;if(P+=w.length,P>J)throw R.cancel(),Error(`Response too large: exceeded ${J} bytes`);F.push(w)}let D=new Uint8Array(P),O=0;for(let y of F)D.set(y,O),O+=y.length;let _=new TextDecoder("utf-8").decode(D),L;if(G.includes("text/html")||G.includes("application/xhtml"))L=OK(_);else if(G.includes("application/json"))try{let y=JSON.parse(_);L=JSON.stringify(y,null,2)}catch{L=_}else L=_;let z=[`URL: ${j}`,`Content-Type: ${G}`,`Size: ${P} bytes`,"","--- Content ---",L.slice(0,50000)];if(L.length>50000)z.push(`
122
122
  [Content truncated: showing first 50000 of ${L.length} characters]`);return z.push("","--- Analysis Request ---",`Prompt: ${X}`),z.join(`
123
- `)}catch(K){if(clearTimeout(A),K instanceof Error){if(K.name==="AbortError")throw Error(`Request timed out after ${f}ms`);throw K}throw Error(`Fetch failed: ${String(K)}`)}finally{if(H.signal&&B)H.signal.removeEventListener("abort",B)}}}function Gf($={}){return{readFile:l2($.fileRead),search:p2($.search),bash:c2($.bash),webFetch:r2($.webFetch),applyPatch:v2($.applyPatch),editor:u2($.editor)}}var zK={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion",submit_and_exit:"enableSubmitAndExit"},Pf=[{name:"openai-native-use-apply-patch",mode:"act",providerIdIncludes:["openai-native"],enableTools:["apply_patch"],disableTools:["editor"]},{name:"codex-and-gpt-use-apply-patch",mode:"act",modelIdIncludes:["codex","gpt"],enableTools:["apply_patch"],disableTools:["editor"]}];function u3($,f){if(!f||f.length===0)return!0;let J=$.toLowerCase();return f.some((Q)=>J.includes(Q.toLowerCase()))}function _K($,f,J,Q){if($.mode&&$.mode!=="any"&&$.mode!==Q)return!1;return u3(f,$.providerIdIncludes)&&u3(J,$.modelIdIncludes)}function Ff($,f,J,Q){if(!Q||Q.length===0)return{};let Z=new Map;for(let j of Q){if(!_K(j,$,f,J))continue;for(let X of j.disableTools??[])Z.set(X,!1);for(let X of j.enableTools??[])Z.set(X,!0)}let W={};for(let[j,X]of Z.entries())W[zK[j]]=X;return W}var b0={act:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!0,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},plan:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!1,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},search:{enableReadFiles:!0,enableSearch:!0,enableBash:!1,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},minimal:{enableReadFiles:!1,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!1},yolo:{enableReadFiles:!0,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!0,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!0,enableSpawnAgent:!1,enableAgentTeams:!1}};function R$($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function n4($){if($!=="yolo")return{};let f={enabled:!0,autoApprove:!0},J={"*":f};for(let Q of g$)J[Q]=f;return J}function a4($,f){let J=b0[$],{enableSpawnAgent:Q,enableAgentTeams:Z,...W}=J;return d$({...W,...f})}import{createTool as FG,zodToJsonSchema as DG}from"@cline/shared";import{z as W9}from"zod";import{createAgentRuntime as XG}from"@cline/agents";import{createContributionRegistry as HG}from"@cline/shared";import{createGateway as yK,MODEL_COLLECTIONS_BY_PROVIDER_ID as TK}from"@cline/llms";function t5($){let f=$.providerConfig;if(f?.knownModels)return f.knownModels;if($.knownModels)return $.knownModels;return TK[$.providerId]?.models??void 0}function NK($){if(!$?.length)return;let f=new Set;for(let J of $)switch(J){case"tools":case"reasoning":case"prompt-cache":case"images":f.add(J);break;case"structured_output":f.add("structured-output");break;default:f.add("text")}return f.add("text"),[...f]}function MK($,f){return{id:$,name:f.name??$,description:f.description,contextWindow:f.contextWindow,maxInputTokens:f.maxInputTokens,maxOutputTokens:f.maxTokens,capabilities:NK(f.capabilities),metadata:{family:f.family,pricing:f.pricing,status:f.status,releaseDate:f.releaseDate}}}function d3($,f,J){let Q=$.providerConfig,Z=Q?.providerId===$.providerId?Q:void 0,W={...Z??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??Z?.apiKey,baseUrl:$.baseUrl??Z?.baseUrl,headers:$.headers??Z?.headers,knownModels:t5($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:f,extensionContext:$.extensionContext};return yK({providerConfigs:[{providerId:W.providerId,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,models:W.knownModels?Object.entries(W.knownModels).map(([j,X])=>MK(j,X)):void 0}],logger:f,telemetry:J??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:W.providerId,modelId:W.modelId},{maxTokens:W.maxOutputTokens})}import{normalizeUserInput as l3}from"@cline/shared";var qK=50000,wK=6000000,p3=8000,SK=new Set(["read","read_files","search","search_codebase","bash","run_commands"]),CK=new Set(["read","read_files"]),O1="[outdated - see the latest file content]",r3="Tool execution was interrupted before a result was produced.",EK=($)=>`
123
+ `)}catch(K){if(clearTimeout(A),K instanceof Error){if(K.name==="AbortError")throw Error(`Request timed out after ${f}ms`);throw K}throw Error(`Fetch failed: ${String(K)}`)}finally{if(H.signal&&B)H.signal.removeEventListener("abort",B)}}}function Gf($={}){return{readFile:l2($.fileRead),search:p2($.search),bash:c2($.bash),webFetch:r2($.webFetch),applyPatch:v2($.applyPatch),editor:u2($.editor)}}var zK={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion",submit_and_exit:"enableSubmitAndExit"},Pf=[{name:"openai-native-use-apply-patch",mode:"act",providerIdIncludes:["openai-native"],enableTools:["apply_patch"],disableTools:["editor"]},{name:"codex-and-gpt-use-apply-patch",mode:"act",modelIdIncludes:["codex","gpt"],enableTools:["apply_patch"],disableTools:["editor"]}];function u3($,f){if(!f||f.length===0)return!0;let J=$.toLowerCase();return f.some((Q)=>J.includes(Q.toLowerCase()))}function _K($,f,J,Q){if($.mode&&$.mode!=="any"&&$.mode!==Q)return!1;return u3(f,$.providerIdIncludes)&&u3(J,$.modelIdIncludes)}function Ff($,f,J,Q){if(!Q||Q.length===0)return{};let Z=new Map;for(let j of Q){if(!_K(j,$,f,J))continue;for(let X of j.disableTools??[])Z.set(X,!1);for(let X of j.enableTools??[])Z.set(X,!0)}let W={};for(let[j,X]of Z.entries())W[zK[j]]=X;return W}var b0={act:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!0,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},plan:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!1,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},search:{enableReadFiles:!0,enableSearch:!0,enableBash:!1,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},minimal:{enableReadFiles:!1,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!1},yolo:{enableReadFiles:!0,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!0,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!0,enableSpawnAgent:!1,enableAgentTeams:!1}};function R$($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function n4($){if($!=="yolo")return{};let f={enabled:!0,autoApprove:!0},J={"*":f};for(let Q of g$)J[Q]=f;return J}function a4($,f){let J=b0[$],{enableSpawnAgent:Q,enableAgentTeams:Z,...W}=J;return d$({...W,...f})}import{createTool as FG,zodToJsonSchema as DG}from"@cline/shared";import{z as W9}from"zod";import{createAgentRuntime as XG}from"@cline/agents";import{createContributionRegistry as HG}from"@cline/shared";import{createGateway as yK,MODEL_COLLECTIONS_BY_PROVIDER_ID as NK}from"@cline/llms";function t5($){let f=$.providerConfig;if(f?.knownModels)return f.knownModels;if($.knownModels)return $.knownModels;return NK[$.providerId]?.models??void 0}function TK($){if(!$?.length)return;let f=new Set;for(let J of $)switch(J){case"tools":case"reasoning":case"prompt-cache":case"images":f.add(J);break;case"structured_output":f.add("structured-output");break;default:f.add("text")}return f.add("text"),[...f]}function MK($,f){return{id:$,name:f.name??$,description:f.description,contextWindow:f.contextWindow,maxInputTokens:f.maxInputTokens,maxOutputTokens:f.maxTokens,capabilities:TK(f.capabilities),metadata:{family:f.family,pricing:f.pricing,status:f.status,releaseDate:f.releaseDate}}}function d3($,f,J){let Q=$.providerConfig,Z=Q?.providerId===$.providerId?Q:void 0,W={...Z??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??Z?.apiKey,baseUrl:$.baseUrl??Z?.baseUrl,headers:$.headers??Z?.headers,knownModels:t5($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:f,extensionContext:$.extensionContext};return yK({providerConfigs:[{providerId:W.providerId,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,models:W.knownModels?Object.entries(W.knownModels).map(([j,X])=>MK(j,X)):void 0}],logger:f,telemetry:J??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:W.providerId,modelId:W.modelId},{maxTokens:W.maxOutputTokens})}import{normalizeUserInput as l3}from"@cline/shared";var qK=50000,wK=6000000,p3=8000,SK=new Set(["read","read_files","search","search_codebase","bash","run_commands"]),CK=new Set(["read","read_files"]),O1="[outdated - see the latest file content]",r3="Tool execution was interrupted before a result was produced.",EK=($)=>`
124
124
 
125
125
  ...[truncated ${$} chars]...
126
126
 
@@ -133,14 +133,14 @@ Searched ${R} files.`;let P=[`Found ${G.length} result${G.length===1?"":"s"} for
133
133
  `);if(J&&Q)return`${J}
134
134
 
135
135
  ${Q}`;return J||Q}function BG($){let f=$.filter((J)=>J!==void 0);if(f.length===0)return{};return{beforeRun:async(J)=>{for(let Q of f){let Z=await Q.beforeRun?.(J);if(Z?.stop)return Z}return},afterRun:async(J)=>{for(let Q of f)await Q.afterRun?.(J)},beforeModel:async(J)=>{let Q=J.request,Z;for(let W of f){let j=await W.beforeModel?.({...J,request:Q});if(!j)continue;if(j.stop)return j;Z={...Z,...j,options:{...Z?.options??{},...j.options??{}}},Q={...Q,...j.messages?{messages:j.messages}:{},...j.tools?{tools:j.tools}:{},...j.options?{options:{...Q.options??{},...j.options}}:{}}}return Z},afterModel:async(J)=>{for(let Q of f){let Z=await Q.afterModel?.(J);if(Z?.stop)return Z}return},beforeTool:async(J)=>{let Q=J.input,Z;for(let W of f){let j=await W.beforeTool?.({...J,input:Q});if(!j)continue;if(j.stop||j.skip)return j;if(Z={...Z,...j},Object.hasOwn(j,"input"))Q=j.input}return Z},afterTool:async(J)=>{let Q=J.result,Z;for(let W of f){let j=await W.afterTool?.({...J,result:Q});if(!j)continue;if(j.stop)return j;if(Z={...Z,...j},j.result)Q=j.result}return Z},onEvent:async(J)=>{for(let Q of f)await Q.onEvent?.(J)}}}class p${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 Z9;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($,f={}){this.config=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=f.logger??$.logger,this.telemetry=f.telemetry??$.telemetry,this.createAgentRuntimeImpl=f.createAgentRuntimeImpl??XG,this.conversation=new $9($.initialMessages),this.messageBuilder=new o5,this.contributionRegistry=HG({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 J=$.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new Q9({maxConsecutiveMistakes:J,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(W)=>this.emitLegacyEvent(W),log:(W,j,X)=>KG(this.logger,W,j,X),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(W,j)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:W}]})}});let Q=$.execution?.loopDetection;this.loopDetectionDisabled=Q===!1;let Z=Q===!1||Q===void 0?void 0:Q;this.loopTracker=new J9(Z)}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 f=new Set(this.config.tools.map((Q)=>Q.name)),J=[...this.config.tools];for(let Q of $)if(!f.has(Q.name))J.push(Q),f.add(Q.name);this.config={...this.config,tools:J}}updateConnection($){let f={...this.config};if($.providerId!==void 0)f.providerId=$.providerId;if($.modelId!==void 0)f.modelId=$.modelId;if($.apiKey!==void 0)f.apiKey=$.apiKey;if($.baseUrl!==void 0)f.baseUrl=$.baseUrl;if($.headers!==void 0)f.headers=$.headers;if($.providerConfig!==void 0)f.providerConfig=$.providerConfig;if($.reasoningEffort!==void 0)f.reasoningEffort=$.reasoningEffort;if($.thinking!==void 0)f.thinking=$.thinking;if($.thinkingBudgetTokens!==void 0)f.thinkingBudgetTokens=$.thinkingBudgetTokens;this.config=f}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 f=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=f,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(f)}async shutdown($,f){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($,f,J){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:$,userImages:f,userFiles:J,isContinue:!1})}continue($,f,J){return this.executeRun({userMessage:$,userImages:f,userFiles:J,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let f of this.contributionRegistry.getRegisteredRules()){let J=await VG(f);if(J)$.push(J)}return AG(this.config.systemPrompt,$)}executeRun($){let f;return f=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===f)this.activeRunPromise=null}),this.activeRunPromise=f,f}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 f=new Date,J=$.userMessage;if(J!==void 0){let P=await PG(J,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:P})}let Q=await this.composeSystemPrompt(),Z=d3(this.config,this.logger,this.telemetry),W=this.contributionRegistry.getRegisteredTools(),j=new Map;for(let P of W)j.set(P.name,P);for(let P of this.config.tools)j.set(P.name,P);let X=this.conversation.getConversationId(),H=fW(this.config),Y=Array.from(j.values()),V=t4(this.conversation.getMessages()),A=o3({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:X,parentAgentId:this.parentAgentId,model:Z,logger:this.logger,telemetry:this.telemetry,tools:Y,toolContextMetadata:{modelSupportsImages:H?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(H,Y),initialMessages:V,systemPrompt:Q}),B=this.createAgentRuntimeImpl(A);if(this.activeRuntime=B,this.abortRequested)B.abort(this.abortReason);let K=B.subscribe((P)=>{this.handleRuntimeEvent(P)}),G,R;try{if($.isContinue)G=await B.continue(void 0);else G=await B.run("")}catch(P){R=P instanceof Error?P:Error(String(P))}finally{K();try{await this.activeTrackerWork}catch(P){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:P})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(G&&G.messages.length>0){let P=Df(G.messages);this.conversation.replaceMessages(P)}let F=new Date;try{return this.buildLegacyResult({runResult:G,thrownError:R,startedAt:f,endedAt:F})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize()}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 $=BG([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((f)=>f.hooks)]);return{...$,beforeModel:async(f)=>{let J=await $.beforeModel?.(f);if(J?.stop)return J;let Q=J?.messages??f.request.messages,Z=await this.prepareMessagesForModelRequest(Q);return{...J,messages:Z}}}}createRuntimePrepareTurn($,f){let J=this.config.prepareTurn;if(!J)return;return async(Q)=>{let Z=Df(Q.messages),W=await this.prepareProviderMessagesForApi(Z),j=await J({agentId:Q.agentId,conversationId:Q.conversationId??this.conversation.getConversationId(),parentAgentId:Q.parentAgentId??null,iteration:Q.iteration,messages:Z,apiMessages:W,abortSignal:Q.signal??new AbortController().signal,systemPrompt:Q.systemPrompt??"",tools:f,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:Q.emitStatusNotice});if(!j)return;return{...j.messages?{messages:t4(j.messages)}:{},...j.systemPrompt!==void 0?{systemPrompt:j.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let f=await this.prepareProviderMessagesForApi(a3($));return t4(f)}async prepareProviderMessagesForApi($){let f=$,J=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let Q of J)f=await Q.build(f);return this.messageBuilder.buildForApi(f)}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 f=this.toolStartedAt.get($.toolCall.toolCallId),J=new Date,Q=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let Z=$.message.content.find((H)=>H.type==="tool-result"),W=Z?.type==="tool-result"&&Z.isError===!0,j=W?YG(Z?.type==="tool-result"?Z.output:void 0):void 0,X={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:Q,output:Z?.type==="tool-result"?Z.output:void 0,error:j,durationMs:f===void 0?0:J.getTime()-f.getTime(),startedAt:f??J,endedAt:J};if(this.currentRunToolCalls.push(X),W){if(this.currentTurnFailedTools+=1,j)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${j}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let f=this.currentTurnFailedTools,J=this.currentTurnSuccessfulTools;if(f>0&&J===0){let Q=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${f} tool call(s) failed${Q?`: ${Q}`:""}`})}else if(J>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 f of this.eventAdapter.translate($))this.emitLegacyEvent(f)}syncConversationFromRuntimeMessage($,f){if($.length>0){this.conversation.replaceMessages(Df($));return}if(f.length===0)return;let J=new Set(this.conversation.getMessages().map((Z)=>Z.id).filter((Z)=>typeof Z==="string")),Q=Df(f).filter((Z)=>!Z.id||!J.has(Z.id));if(Q.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...Q])}emitLegacyEvent($){for(let f of this.listeners)try{f($)}catch(J){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:J})}}inspectLoopForToolCall($,f,J){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let Q=this.loopTracker.inspect({name:$,input:f});if(Q.kind==="ok")return;if(Q.kind==="soft"){if(Q.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:Q.message}]});return}this.enqueueMistakeRecord({iteration:J,reason:"tool_execution_failed",forceAtLimit:!0,details:Q.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let f=await this.mistakeTracker.record($);if(f.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:f.message}]}),this.activeRuntime?.abort(f.reason??f.message)})}buildLegacyResult($){let{runResult:f,thrownError:J,startedAt:Q,endedAt:Z}=$,W=Z.getTime()-Q.getTime(),j=J?"error":GG(f),X=f?.outputText||(f?.status==="failed"?f.error?.message:void 0)||"",H=f?{inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,cacheReadTokens:f.usage.cacheReadTokens>0?f.usage.cacheReadTokens:void 0,cacheWriteTokens:f.usage.cacheWriteTokens>0?f.usage.cacheWriteTokens:void 0,totalCost:f.usage.totalCost}:this.currentRunUsage,Y=f?Df(f.messages):this.conversation.getMessages(),V=fW(this.config);if(J)throw J;return{text:X,usage:H,messages:Y,toolCalls:this.currentRunToolCalls,iterations:f?.iterations??0,finishReason:j,model:{id:this.config.modelId,provider:this.config.providerId,info:V},startedAt:Q,endedAt:Z,durationMs:W}}}function KG($,f,J,Q){if(!$)return;if(f==="debug"){$.debug(J,Q);return}if(f==="error"&&$.error){$.error(J,Q);return}let Z=f==="warn"?"warn":f==="error"?"error":"info";$.log(J,{...Q,severity:Z})}function GG($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function PG($,f,J,Q){let{buildInitialUserContent:Z}=await Promise.resolve().then(() => $W);return Z($,f,J,Q)}function fW($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let f=t5($);if(f?.[$.modelId])return f[$.modelId];return}import{buildClineSystemPrompt as JW}from"@cline/shared";function QW($,f){let J=$.trim();if(f.providerId.toLowerCase()!=="cline")return J;return JW({ide:f.clineIdeName?.trim()||"Terminal",workspaceRoot:f.cwd?.trim()||"/",providerId:f.providerId,rules:`# Team Teammate Role
136
- ${J}`,platform:f.clinePlatform,metadata:f.workspaceMetadata})}function ZW($,f){let J=$.trim();if(f.providerId.toLowerCase()!=="cline")return J;return JW({ide:f.clineIdeName||"Terminal",workspaceRoot:f.cwd?.trim()||"/",providerId:f.providerId,overridePrompt:J,metadata:f.workspaceMetadata,platform:f.clinePlatform})}function Rf($){let f={...$};return{getRuntimeConfig:()=>f,getConnectionConfig:()=>({providerId:f.providerId,modelId:f.modelId,apiKey:f.apiKey,baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking}),updateConnectionDefaults:(J)=>{f={...f,...J}}}}function z1($){let f=$.configProvider.getRuntimeConfig(),J=$.kind==="teammate"?QW($.prompt,f):ZW($.prompt,f);return{...$.configProvider.getConnectionConfig(),systemPrompt:J,tools:$.tools,maxIterations:$.maxIterations??f.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:f.hooks,extensions:f.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:f.logger,role:$.role}}function Uf($){let f=z1($),J=new p$(f);if(f.onEvent)J.subscribeEvents(f.onEvent);return J}var RG=W9.object({systemPrompt:W9.string().describe("System prompt defining the sub-agent's behavior"),task:W9.string().describe("Task for the sub-agent to complete")});function r$($){return FG({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:DG(RG),execute:async(f,J)=>{let Q=$.createSubAgentTools?await $.createSubAgentTools(f,J):$.subAgentTools??[],Z=Uf({kind:"subagent",prompt:f.systemPrompt,configProvider:$.configProvider,tools:Q,maxIterations:$.defaultMaxIterations,parentAgentId:J.agentId,abortSignal:J.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),W=Z.getAgentId(),j=Z.getConversationId(),X=J.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:W,conversationId:j,parentAgentId:X,input:f})}catch{}try{let H=await Z.run(f.task),Y={text:H.text,iterations:H.iterations,finishReason:H.finishReason,usage:{inputTokens:H.usage.inputTokens,outputTokens:H.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:W,conversationId:j,parentAgentId:X,input:f,result:Y,agentResult:H})}catch{}return Y}catch(H){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:W,conversationId:j,parentAgentId:X,input:f,error:H instanceof Error?H:Error(String(H))})}catch{}throw H}},timeoutMs:300000,retryable:!1})}import{createTool as j0,TEAM_AWAIT_TIMEOUT_MS as UG,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as LG,TEAM_RUN_TEXT_PREVIEW_LIMIT as OG,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as zG,TeamAttachOutcomeFragmentInputSchema as WW,TeamAwaitRunsInputSchema as jW,TeamBroadcastInputSchema as XW,TeamBroadcastToolResultSchema as _G,TeamCancelRunInputSchema as HW,TeamCancelRunToolResultSchema as yG,TeamCleanupInputSchema as YW,TeamCleanupToolResultSchema as TG,TeamCreateOutcomeInputSchema as VW,TeamCreateOutcomeToolResultSchema as NG,TeamFinalizeOutcomeInputSchema as AW,TeamFinalizeOutcomeToolResultSchema as MG,TeamListOutcomesInputSchema as BW,TeamListRunsInputSchema as KW,TeamMailboxMessageToolResultSchema as qG,TeamMissionLogInputSchema as GW,TeamMissionLogToolResultSchema as wG,TeamOutcomeFragmentToolResultSchema as PW,TeamOutcomeToolResultSchema as SG,TeamReadMailboxInputSchema as FW,TeamReviewOutcomeFragmentInputSchema as DW,TeamRunTaskInputSchema as RW,TeamRunTaskToolResultSchema as j9,TeamRunToolSummarySchema as X9,TeamSendMessageInputSchema as UW,TeamSendMessageToolResultSchema as CG,TeamShutdownTeammateInputSchema as LW,TeamSimpleAgentStatusToolResultSchema as OW,TeamSpawnTeammateInputSchema as zW,TeamStatusInputSchema as _W,TeamStatusToolResultSchema as EG,TeamTaskInputSchema as yW,TeamTaskToolResultSchema as n2,validateWithZod as E,zodToJsonSchema as X0}from"@cline/shared";function TW($,f){let J=$.replace(/\s+/g," ").trim();if(J.length<=f)return J;return`${J.slice(0,Math.max(0,f-3)).trimEnd()}...`}function _1($,f){if($===void 0)throw Error(`Missing required field: ${f}`);return $}function hG($){let f=$.result;if(!f)return;return{textPreview:TW(f.text,OG),iterations:f.iterations,finishReason:f.finishReason,durationMs:f.durationMs,usage:{inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,cacheReadTokens:f.usage.cacheReadTokens,cacheWriteTokens:f.usage.cacheWriteTokens,totalCost:f.usage.totalCost}}}function s4($){return $?.toISOString()}function H9($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:TW($.message,LG),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:s4($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:s4($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:s4($.heartbeatAt),lastProgressAt:s4($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:hG($)}}function bG($){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 Lf=["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 NW($){let f=[];if($.createBaseTools)f.push(...$.createBaseTools());f.push(...y1({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:z1({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:f,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function Of($){let f=$.leadAgentId??"lead",J=$.restoredFromPersistence===!0,Q=y1({runtime:$.runtime,requesterId:f,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),Z=[];for(let W of $.restoredTeammates??[]){if($.runtime.isTeammateActive(W.agentId))continue;NW({runtime:$.runtime,requesterId:f,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:W}),Z.push(W.agentId)}return{tools:Q,restoredFromPersistence:J,restoredTeammates:Z}}function y1($){let f=$.allowSpawn??!0,J=$.includeSpawnTool??!0,Q=$.includeManagementTools??!0,Z=[];if(J)Z.push(j0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:X0(zW),execute:async(j)=>{let X=E(zW,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!f)throw Error("Spawning teammates is disabled in this context.");let H={agentId:X.agentId,rolePrompt:X.rolePrompt};if(NW({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:H}),!Q)$.onLeadToolsUnlocked?.(y1({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return E(OW,{agentId:X.agentId,status:"spawned"})}}));if(!Q)return Z;Z.push(j0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:X0(LW),execute:async(j)=>{let X=E(LW,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(X.agentId,X.reason),E(OW,{agentId:X.agentId,status:"stopped"})}})),Z.push(j0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:X0(_W),execute:async(j)=>{return E(_W,j),E(EG,$.runtime.getSnapshot())}})),Z.push(j0({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:X0(yW),execute:async(j)=>{let X=E(yW,j);switch(X.action){case"create":{let H=new Set(zG.create??[]),Y=Object.entries(j).filter(([A,B])=>H.has(A)&&B!=null).map(([A])=>A),V=$.runtime.createTask({title:_1(X.title,"title"),description:_1(X.description,"description"),dependsOn:X.dependsOn,assignee:X.assignee,createdBy:$.requesterId});return E(n2,{action:"create",taskId:V.id,status:V.status,...Y.length>0?{ignoredFields:Y,note:`Ignored fields for action=create: ${Y.join(", ")}`}:{}})}case"list":return E(n2,{action:"list",tasks:$.runtime.listTaskItems({status:X.status,assignee:X.assignee})});case"claim":{let H=$.runtime.claimTask(_1(X.taskId,"taskId"),$.requesterId);return E(n2,{action:"claim",taskId:H.id,status:H.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 H=$.runtime.completeTask(_1(X.taskId,"taskId"),$.requesterId,_1(X.summary,"summary"));return E(n2,{action:"complete",taskId:H.id,status:H.status})}case"block":{let H=$.runtime.blockTask(_1(X.taskId,"taskId"),$.requesterId,_1(X.reason,"reason"));return E(n2,{action:"block",taskId:H.id,status:H.status})}}}}));let W=new Map;return Z.push(j0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:X0(RW),execute:async(j)=>{let X=E(RW,j);if(X.runMode==="async"){let V=$.runtime.startTeammateRun(X.agentId,X.task,{taskId:X.taskId||void 0,fromAgentId:$.requesterId,continueConversation:X.continueConversation||void 0});return E(j9,{agentId:X.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${X.agentId} and queued as ${V.id}.`,runId:V.id})}let H=W.get(X.agentId);if(H){let V=await H;return E(j9,{...V,status:"joined",deduped:!0,message:`Task for ${X.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let Y=$.runtime.routeToTeammate(X.agentId,X.task,{taskId:X.taskId||void 0,fromAgentId:$.requesterId,continueConversation:X.continueConversation||void 0}).then((V)=>E(j9,{agentId:X.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${X.agentId} and completed in sync mode.`,text:V.text,iterations:V.iterations})).finally(()=>{W.delete(X.agentId)});return W.set(X.agentId,Y),await Y}})),Z.push(j0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:X0(HW),execute:async(j)=>{let X=E(HW,j),H=$.runtime.cancelRun(X.runId,X.reason);return E(yG,{runId:H.id,status:H.status})}})),Z.push(j0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:X0(KW),execute:async(j)=>E(X9.array(),$.runtime.listRuns(E(KW,j)).map(H9))})),Z.push(j0({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:X0(jW),timeoutMs:UG,execute:async(j)=>{let X=E(jW,j);if(X.runId){let V=await $.runtime.awaitRun(X.runId);return bG(V),E(X9,H9(V))}let H=await $.runtime.awaitAllRuns(),Y=H.filter((V)=>["failed","cancelled","interrupted"].includes(V.status));if(Y.length>0){let V=Y.map((A)=>`${A.id}:${A.status}${A.error?`(${A.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${V}`)}return E(X9.array(),H.map(H9))}})),Z.push(j0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:X0(UW),execute:async(j)=>{let X=E(UW,j),H=$.runtime.sendMessage($.requesterId,X.toAgentId,X.subject,X.body,X.taskId??void 0);return E(CG,{id:H.id,toAgentId:H.toAgentId})}})),Z.push(j0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:X0(XW),execute:async(j)=>{let X=E(XW,j),H=$.runtime.broadcast($.requesterId,X.subject,X.body,{taskId:X.taskId??void 0});return E(_G,{delivered:H.length})}})),Z.push(j0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:X0(FW),execute:async(j)=>{let X=E(FW,j);return E(qG.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:X.unreadOnly,markRead:!0}))}})),Z.push(j0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:X0(GW),execute:async(j)=>{let X=E(GW,j),H=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:X.taskId||void 0,kind:X.kind,summary:X.summary,evidence:X.evidence?.length?X.evidence:void 0,nextAction:X.nextAction||void 0});return E(wG,{id:H.id})}})),Z.push(j0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:X0(YW),execute:async(j)=>{if(E(YW,j),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),E(TG,{status:"cleaned"})}})),Z.push(j0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:X0(VW),execute:async(j)=>{let X=E(VW,j),H=$.runtime.createOutcome({title:X.title,requiredSections:X.requiredSections,createdBy:$.requesterId});return E(NG,{outcomeId:H.id,status:H.status,requiredSections:H.requiredSections})}})),Z.push(j0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:X0(WW),execute:async(j)=>{let X=E(WW,j),H=$.runtime.attachOutcomeFragment({outcomeId:X.outcomeId,section:X.section,sourceAgentId:$.requesterId,sourceRunId:X.sourceRunId||void 0,content:X.content});return E(PW,{fragmentId:H.id,status:H.status})}})),Z.push(j0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:X0(DW),execute:async(j)=>{let X=E(DW,j),H=$.runtime.reviewOutcomeFragment({fragmentId:X.fragmentId,reviewedBy:$.requesterId,approved:X.approved});return E(PW,{fragmentId:H.id,status:H.status})}})),Z.push(j0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:X0(AW),execute:async(j)=>{let X=E(AW,j),H=$.runtime.finalizeOutcome(X.outcomeId);return E(MG,{outcomeId:H.id,status:H.status})}})),Z.push(j0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:X0(BW),execute:async(j)=>{return E(BW,j),E(SG.array(),$.runtime.listOutcomes())}})),Z}function o4($){return{...$,tasks:$.tasks.map((f)=>({...f,createdAt:new Date(f.createdAt),updatedAt:new Date(f.updatedAt)})),mailbox:$.mailbox.map((f)=>({...f,sentAt:new Date(f.sentAt),readAt:f.readAt?new Date(f.readAt):void 0})),missionLog:$.missionLog.map((f)=>({...f,ts:new Date(f.ts)})),runs:($.runs??[]).map((f)=>({...f,startedAt:new Date(f.startedAt),endedAt:f.endedAt?new Date(f.endedAt):void 0,nextAttemptAt:f.nextAttemptAt?new Date(f.nextAttemptAt):void 0,heartbeatAt:f.heartbeatAt?new Date(f.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),finalizedAt:f.finalizedAt?new Date(f.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),reviewedAt:f.reviewedAt?new Date(f.reviewedAt):void 0}))}}function MW($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var kG=[{id:"read_files",description:"Read the full 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.",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:r$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...Lf]}],IG={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function xG($){return $==="plan"||$==="yolo"?$:"act"}function wW($){let f=xG($.mode),J=b0[R$({mode:f})],Q=Ff($.providerId??"",$.modelId??"",f,Pf);return{mode:f,flags:{...J,...Q,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function qW($,f){if(f.disabledToolIds?.has($))return!1;let{flags:J}=wW(f);if($==="spawn_agent")return J.enableSpawnAgent===!0;if($==="teams")return J.enableAgentTeams===!0;if($==="editor")return J.enableEditor===!0||J.enableApplyPatch===!0;let Q=IG[$];return Q?J[Q]===!0:!1}function gG($,f){if($.id==="editor"){let{flags:J}=wW(f),Q=J.enableApplyPatch===!0&&J.enableEditor!==!0;return{...$,defaultEnabled:qW($.id,f),headlessToolNames:[Q?"apply_patch":"editor"]}}return{...$,defaultEnabled:qW($.id,f)}}function T1($={}){return kG.map((f)=>gG(f,$))}function e4($={}){return T1($).filter((f)=>f.defaultEnabled).map((f)=>f.id)}function $6($){if(!$.enabled)return new Set;let f=T1($.availabilityContext),J=new Set(f.map((Q)=>Q.id));if(!$.allowlist||$.allowlist.length===0)return new Set(f.filter((Q)=>Q.defaultEnabled).map((Q)=>Q.id));for(let Q of $.allowlist)if(!J.has(Q))throw Error(`Unknown tool "${Q}". Available tools: ${f.map((Z)=>Z.id).join(", ")}`);return new Set($.allowlist)}function a2($,f={}){return T1(f).filter((J)=>$.has(J.id)).flatMap((J)=>J.headlessToolNames)}function f6($,f={}){return a2($,f)}function N1($={}){let{executorOptions:f={},executors:J,...Q}=$,Z={...Gf(f),...J??{}};return d$({...Q,executors:Z})}import{mkdirSync as lG,writeFileSync as pG}from"node:fs";import{dirname as rG}from"node:path";import{normalizeUserInput as iG}from"@cline/shared";import{nanoid as nG}from"nanoid";var CW={};q(CW,{sanitizeSessionToken:()=>M1,parseTeamTaskSubSessionId:()=>_f,parseSubSessionId:()=>s2,makeTeamTaskSubSessionId:()=>t2,makeSubSessionId:()=>zf,deriveSubsessionStatus:()=>o2});import{nanoid as cG}from"nanoid";function M1($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function zf($,f){let J=M1($),Q=M1(f),Z=`${J}__${Q}`;return Z.length>180?Z.slice(0,180):Z}function t2($,f){let J=M1($),Q=M1(f);return`${J}__teamtask__${Q}__${cG(6)}`}function _f($){let J=$.indexOf("__teamtask__");if(J<=0)return null;let Q=$.slice(0,J),Z=$.slice(J+12),W=Z.lastIndexOf("__");if(W<=0)return null;let j=Z.slice(0,W),X=Z.slice(W+2);if(!Q||!j||!X)return null;return{rootSessionId:Q,agentId:j,teamTaskId:X}}function s2($){if(_f($))return null;let f="__",J=$.indexOf(f);if(J<=0)return null;let Q=$.slice(0,J),Z=$.slice(J+f.length);if(!Q||!Z)return null;return{rootSessionId:Q,agentId:Z}}function o2($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let f=String($.reason??"").toLowerCase();if(f.includes("cancel")||f.includes("abort")||f.includes("interrupt"))return"cancelled";if(f.includes("fail")||f.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as a}from"zod";var EW={};q(EW,{SessionSource:()=>K0,SESSION_STATUSES:()=>e2});import{SESSION_STATUS_VALUES as uG}from"@cline/shared";var e2=uG,K0={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 dG=a.enum(e2),y0=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:dG,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 hW($){if(!$)return!1;return Object.values($).some((f)=>typeof f==="function")}function V9($,f){let J=[...$??[],...f??[]];if(J.length===0)return;let Q=[],Z=new Set;for(let W of J){if(Z.has(W.name))continue;Z.add(W.name),Q.push(W)}return Q}function bW($){return JSON.stringify($,(f,J)=>{if(J instanceof Error)return{name:J.name,message:J.message,stack:J.stack};return J})}function U$($){return typeof $==="string"&&$.trim()?$.trim():void 0}function Y9($,f){let J={...$};J.id=U$(J.id)??nG();let Q=J.modelInfo&&typeof J.modelInfo==="object"?{...J.modelInfo}:void 0,Z={id:U$(Q?.id)??U$(J.modelId)??U$(f?.id),provider:U$(Q?.provider)??U$(J.providerId)??U$(f?.provider),family:U$(Q?.family)??U$(f?.family)};if(delete J.providerId,delete J.modelId,Z.id&&Z.provider)J.modelInfo={id:Z.id,provider:Z.provider,...Z.family?{family:Z.family}:{}};else delete J.modelInfo;return J}function J6($){return $.map((f)=>Y9(f))}function Q6($,f,J=[]){let Q=$.map((X,H)=>{let Y=J[H],A=Y?.role===X.role&&JSON.stringify(Y.content)===JSON.stringify(X.content)?{...Y,...X}:{...X};return Y9(A)}),Z=J.length,W=[];for(let X=Z;X<Q.length;X+=1)if(Q[X]?.role==="assistant")W.push(X);if(W.length===0){let X=[...Q].reverse().findIndex((H)=>H.role==="assistant");if(X===-1)return Q;W.push(Q.length-1-X)}let j=W[W.length-1];for(let X of W){let H=Q[X],Y=H.metrics;if(!Y&&X===j){let V=f.usage;Y={inputTokens:V.inputTokens,outputTokens:V.outputTokens,cacheReadTokens:V.cacheReadTokens??0,cacheWriteTokens:V.cacheWriteTokens??0,cost:V.totalCost}}Q[X]={...Y9(H,{id:f.model.id,provider:f.model.provider,family:f.model.info?.family}),...Y?{metrics:Y}:{},ts:H.ts??f.endedAt.getTime()}}return Q}function $8($){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 aG=120;function q1($){let f=$?.trim();return f?f.slice(0,aG):void 0}function A9($){let f=iG($??"").trim();if(!f)return;return q1(f.split(`
136
+ ${J}`,platform:f.clinePlatform,metadata:f.workspaceMetadata})}function ZW($,f){let J=$.trim();if(f.providerId.toLowerCase()!=="cline")return J;return JW({ide:f.clineIdeName||"Terminal",workspaceRoot:f.cwd?.trim()||"/",providerId:f.providerId,overridePrompt:J,metadata:f.workspaceMetadata,platform:f.clinePlatform})}function Rf($){let f={...$};return{getRuntimeConfig:()=>f,getConnectionConfig:()=>({providerId:f.providerId,modelId:f.modelId,apiKey:f.apiKey,baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking}),updateConnectionDefaults:(J)=>{f={...f,...J}}}}function z1($){let f=$.configProvider.getRuntimeConfig(),J=$.kind==="teammate"?QW($.prompt,f):ZW($.prompt,f);return{...$.configProvider.getConnectionConfig(),systemPrompt:J,tools:$.tools,maxIterations:$.maxIterations??f.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:f.hooks,extensions:f.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:f.logger,role:$.role}}function Uf($){let f=z1($),J=new p$(f);if(f.onEvent)J.subscribeEvents(f.onEvent);return J}var RG=W9.object({systemPrompt:W9.string().describe("System prompt defining the sub-agent's behavior"),task:W9.string().describe("Task for the sub-agent to complete")});function r$($){return FG({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:DG(RG),execute:async(f,J)=>{let Q=$.createSubAgentTools?await $.createSubAgentTools(f,J):$.subAgentTools??[],Z=Uf({kind:"subagent",prompt:f.systemPrompt,configProvider:$.configProvider,tools:Q,maxIterations:$.defaultMaxIterations,parentAgentId:J.agentId,abortSignal:J.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),W=Z.getAgentId(),j=Z.getConversationId(),X=J.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:W,conversationId:j,parentAgentId:X,input:f})}catch{}try{let H=await Z.run(f.task),Y={text:H.text,iterations:H.iterations,finishReason:H.finishReason,usage:{inputTokens:H.usage.inputTokens,outputTokens:H.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:W,conversationId:j,parentAgentId:X,input:f,result:Y,agentResult:H})}catch{}return Y}catch(H){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:W,conversationId:j,parentAgentId:X,input:f,error:H instanceof Error?H:Error(String(H))})}catch{}throw H}},timeoutMs:300000,retryable:!1})}import{createTool as j0,TEAM_AWAIT_TIMEOUT_MS as UG,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as LG,TEAM_RUN_TEXT_PREVIEW_LIMIT as OG,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as zG,TeamAttachOutcomeFragmentInputSchema as WW,TeamAwaitRunsInputSchema as jW,TeamBroadcastInputSchema as XW,TeamBroadcastToolResultSchema as _G,TeamCancelRunInputSchema as HW,TeamCancelRunToolResultSchema as yG,TeamCleanupInputSchema as YW,TeamCleanupToolResultSchema as NG,TeamCreateOutcomeInputSchema as VW,TeamCreateOutcomeToolResultSchema as TG,TeamFinalizeOutcomeInputSchema as AW,TeamFinalizeOutcomeToolResultSchema as MG,TeamListOutcomesInputSchema as BW,TeamListRunsInputSchema as KW,TeamMailboxMessageToolResultSchema as qG,TeamMissionLogInputSchema as GW,TeamMissionLogToolResultSchema as wG,TeamOutcomeFragmentToolResultSchema as PW,TeamOutcomeToolResultSchema as SG,TeamReadMailboxInputSchema as FW,TeamReviewOutcomeFragmentInputSchema as DW,TeamRunTaskInputSchema as RW,TeamRunTaskToolResultSchema as j9,TeamRunToolSummarySchema as X9,TeamSendMessageInputSchema as UW,TeamSendMessageToolResultSchema as CG,TeamShutdownTeammateInputSchema as LW,TeamSimpleAgentStatusToolResultSchema as OW,TeamSpawnTeammateInputSchema as zW,TeamStatusInputSchema as _W,TeamStatusToolResultSchema as EG,TeamTaskInputSchema as yW,TeamTaskToolResultSchema as n2,validateWithZod as E,zodToJsonSchema as X0}from"@cline/shared";function NW($,f){let J=$.replace(/\s+/g," ").trim();if(J.length<=f)return J;return`${J.slice(0,Math.max(0,f-3)).trimEnd()}...`}function _1($,f){if($===void 0)throw Error(`Missing required field: ${f}`);return $}function hG($){let f=$.result;if(!f)return;return{textPreview:NW(f.text,OG),iterations:f.iterations,finishReason:f.finishReason,durationMs:f.durationMs,usage:{inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,cacheReadTokens:f.usage.cacheReadTokens,cacheWriteTokens:f.usage.cacheWriteTokens,totalCost:f.usage.totalCost}}}function s4($){return $?.toISOString()}function H9($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:NW($.message,LG),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:s4($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:s4($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:s4($.heartbeatAt),lastProgressAt:s4($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:hG($)}}function bG($){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 Lf=["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 TW($){let f=[];if($.createBaseTools)f.push(...$.createBaseTools());f.push(...y1({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:z1({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:f,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function Of($){let f=$.leadAgentId??"lead",J=$.restoredFromPersistence===!0,Q=y1({runtime:$.runtime,requesterId:f,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),Z=[];for(let W of $.restoredTeammates??[]){if($.runtime.isTeammateActive(W.agentId))continue;TW({runtime:$.runtime,requesterId:f,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:W}),Z.push(W.agentId)}return{tools:Q,restoredFromPersistence:J,restoredTeammates:Z}}function y1($){let f=$.allowSpawn??!0,J=$.includeSpawnTool??!0,Q=$.includeManagementTools??!0,Z=[];if(J)Z.push(j0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:X0(zW),execute:async(j)=>{let X=E(zW,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!f)throw Error("Spawning teammates is disabled in this context.");let H={agentId:X.agentId,rolePrompt:X.rolePrompt};if(TW({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:H}),!Q)$.onLeadToolsUnlocked?.(y1({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return E(OW,{agentId:X.agentId,status:"spawned"})}}));if(!Q)return Z;Z.push(j0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:X0(LW),execute:async(j)=>{let X=E(LW,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(X.agentId,X.reason),E(OW,{agentId:X.agentId,status:"stopped"})}})),Z.push(j0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:X0(_W),execute:async(j)=>{return E(_W,j),E(EG,$.runtime.getSnapshot())}})),Z.push(j0({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:X0(yW),execute:async(j)=>{let X=E(yW,j);switch(X.action){case"create":{let H=new Set(zG.create??[]),Y=Object.entries(j).filter(([A,B])=>H.has(A)&&B!=null).map(([A])=>A),V=$.runtime.createTask({title:_1(X.title,"title"),description:_1(X.description,"description"),dependsOn:X.dependsOn,assignee:X.assignee,createdBy:$.requesterId});return E(n2,{action:"create",taskId:V.id,status:V.status,...Y.length>0?{ignoredFields:Y,note:`Ignored fields for action=create: ${Y.join(", ")}`}:{}})}case"list":return E(n2,{action:"list",tasks:$.runtime.listTaskItems({status:X.status,assignee:X.assignee})});case"claim":{let H=$.runtime.claimTask(_1(X.taskId,"taskId"),$.requesterId);return E(n2,{action:"claim",taskId:H.id,status:H.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 H=$.runtime.completeTask(_1(X.taskId,"taskId"),$.requesterId,_1(X.summary,"summary"));return E(n2,{action:"complete",taskId:H.id,status:H.status})}case"block":{let H=$.runtime.blockTask(_1(X.taskId,"taskId"),$.requesterId,_1(X.reason,"reason"));return E(n2,{action:"block",taskId:H.id,status:H.status})}}}}));let W=new Map;return Z.push(j0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:X0(RW),execute:async(j)=>{let X=E(RW,j);if(X.runMode==="async"){let V=$.runtime.startTeammateRun(X.agentId,X.task,{taskId:X.taskId||void 0,fromAgentId:$.requesterId,continueConversation:X.continueConversation||void 0});return E(j9,{agentId:X.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${X.agentId} and queued as ${V.id}.`,runId:V.id})}let H=W.get(X.agentId);if(H){let V=await H;return E(j9,{...V,status:"joined",deduped:!0,message:`Task for ${X.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let Y=$.runtime.routeToTeammate(X.agentId,X.task,{taskId:X.taskId||void 0,fromAgentId:$.requesterId,continueConversation:X.continueConversation||void 0}).then((V)=>E(j9,{agentId:X.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${X.agentId} and completed in sync mode.`,text:V.text,iterations:V.iterations})).finally(()=>{W.delete(X.agentId)});return W.set(X.agentId,Y),await Y}})),Z.push(j0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:X0(HW),execute:async(j)=>{let X=E(HW,j),H=$.runtime.cancelRun(X.runId,X.reason);return E(yG,{runId:H.id,status:H.status})}})),Z.push(j0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:X0(KW),execute:async(j)=>E(X9.array(),$.runtime.listRuns(E(KW,j)).map(H9))})),Z.push(j0({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:X0(jW),timeoutMs:UG,execute:async(j)=>{let X=E(jW,j);if(X.runId){let V=await $.runtime.awaitRun(X.runId);return bG(V),E(X9,H9(V))}let H=await $.runtime.awaitAllRuns(),Y=H.filter((V)=>["failed","cancelled","interrupted"].includes(V.status));if(Y.length>0){let V=Y.map((A)=>`${A.id}:${A.status}${A.error?`(${A.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${V}`)}return E(X9.array(),H.map(H9))}})),Z.push(j0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:X0(UW),execute:async(j)=>{let X=E(UW,j),H=$.runtime.sendMessage($.requesterId,X.toAgentId,X.subject,X.body,X.taskId??void 0);return E(CG,{id:H.id,toAgentId:H.toAgentId})}})),Z.push(j0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:X0(XW),execute:async(j)=>{let X=E(XW,j),H=$.runtime.broadcast($.requesterId,X.subject,X.body,{taskId:X.taskId??void 0});return E(_G,{delivered:H.length})}})),Z.push(j0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:X0(FW),execute:async(j)=>{let X=E(FW,j);return E(qG.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:X.unreadOnly,markRead:!0}))}})),Z.push(j0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:X0(GW),execute:async(j)=>{let X=E(GW,j),H=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:X.taskId||void 0,kind:X.kind,summary:X.summary,evidence:X.evidence?.length?X.evidence:void 0,nextAction:X.nextAction||void 0});return E(wG,{id:H.id})}})),Z.push(j0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:X0(YW),execute:async(j)=>{if(E(YW,j),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),E(NG,{status:"cleaned"})}})),Z.push(j0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:X0(VW),execute:async(j)=>{let X=E(VW,j),H=$.runtime.createOutcome({title:X.title,requiredSections:X.requiredSections,createdBy:$.requesterId});return E(TG,{outcomeId:H.id,status:H.status,requiredSections:H.requiredSections})}})),Z.push(j0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:X0(WW),execute:async(j)=>{let X=E(WW,j),H=$.runtime.attachOutcomeFragment({outcomeId:X.outcomeId,section:X.section,sourceAgentId:$.requesterId,sourceRunId:X.sourceRunId||void 0,content:X.content});return E(PW,{fragmentId:H.id,status:H.status})}})),Z.push(j0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:X0(DW),execute:async(j)=>{let X=E(DW,j),H=$.runtime.reviewOutcomeFragment({fragmentId:X.fragmentId,reviewedBy:$.requesterId,approved:X.approved});return E(PW,{fragmentId:H.id,status:H.status})}})),Z.push(j0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:X0(AW),execute:async(j)=>{let X=E(AW,j),H=$.runtime.finalizeOutcome(X.outcomeId);return E(MG,{outcomeId:H.id,status:H.status})}})),Z.push(j0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:X0(BW),execute:async(j)=>{return E(BW,j),E(SG.array(),$.runtime.listOutcomes())}})),Z}function o4($){return{...$,tasks:$.tasks.map((f)=>({...f,createdAt:new Date(f.createdAt),updatedAt:new Date(f.updatedAt)})),mailbox:$.mailbox.map((f)=>({...f,sentAt:new Date(f.sentAt),readAt:f.readAt?new Date(f.readAt):void 0})),missionLog:$.missionLog.map((f)=>({...f,ts:new Date(f.ts)})),runs:($.runs??[]).map((f)=>({...f,startedAt:new Date(f.startedAt),endedAt:f.endedAt?new Date(f.endedAt):void 0,nextAttemptAt:f.nextAttemptAt?new Date(f.nextAttemptAt):void 0,heartbeatAt:f.heartbeatAt?new Date(f.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),finalizedAt:f.finalizedAt?new Date(f.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),reviewedAt:f.reviewedAt?new Date(f.reviewedAt):void 0}))}}function MW($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var kG=[{id:"read_files",description:"Read the full 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.",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:r$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...Lf]}],IG={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function xG($){return $==="plan"||$==="yolo"?$:"act"}function wW($){let f=xG($.mode),J=b0[R$({mode:f})],Q=Ff($.providerId??"",$.modelId??"",f,Pf);return{mode:f,flags:{...J,...Q,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function qW($,f){if(f.disabledToolIds?.has($))return!1;let{flags:J}=wW(f);if($==="spawn_agent")return J.enableSpawnAgent===!0;if($==="teams")return J.enableAgentTeams===!0;if($==="editor")return J.enableEditor===!0||J.enableApplyPatch===!0;let Q=IG[$];return Q?J[Q]===!0:!1}function gG($,f){if($.id==="editor"){let{flags:J}=wW(f),Q=J.enableApplyPatch===!0&&J.enableEditor!==!0;return{...$,defaultEnabled:qW($.id,f),headlessToolNames:[Q?"apply_patch":"editor"]}}return{...$,defaultEnabled:qW($.id,f)}}function N1($={}){return kG.map((f)=>gG(f,$))}function e4($={}){return N1($).filter((f)=>f.defaultEnabled).map((f)=>f.id)}function $6($){if(!$.enabled)return new Set;let f=N1($.availabilityContext),J=new Set(f.map((Q)=>Q.id));if(!$.allowlist||$.allowlist.length===0)return new Set(f.filter((Q)=>Q.defaultEnabled).map((Q)=>Q.id));for(let Q of $.allowlist)if(!J.has(Q))throw Error(`Unknown tool "${Q}". Available tools: ${f.map((Z)=>Z.id).join(", ")}`);return new Set($.allowlist)}function a2($,f={}){return N1(f).filter((J)=>$.has(J.id)).flatMap((J)=>J.headlessToolNames)}function f6($,f={}){return a2($,f)}function T1($={}){let{executorOptions:f={},executors:J,...Q}=$,Z={...Gf(f),...J??{}};return d$({...Q,executors:Z})}import{mkdirSync as lG,writeFileSync as pG}from"node:fs";import{dirname as rG}from"node:path";import{normalizeUserInput as iG}from"@cline/shared";import{nanoid as nG}from"nanoid";var CW={};q(CW,{sanitizeSessionToken:()=>M1,parseTeamTaskSubSessionId:()=>_f,parseSubSessionId:()=>s2,makeTeamTaskSubSessionId:()=>t2,makeSubSessionId:()=>zf,deriveSubsessionStatus:()=>o2});import{nanoid as cG}from"nanoid";function M1($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function zf($,f){let J=M1($),Q=M1(f),Z=`${J}__${Q}`;return Z.length>180?Z.slice(0,180):Z}function t2($,f){let J=M1($),Q=M1(f);return`${J}__teamtask__${Q}__${cG(6)}`}function _f($){let J=$.indexOf("__teamtask__");if(J<=0)return null;let Q=$.slice(0,J),Z=$.slice(J+12),W=Z.lastIndexOf("__");if(W<=0)return null;let j=Z.slice(0,W),X=Z.slice(W+2);if(!Q||!j||!X)return null;return{rootSessionId:Q,agentId:j,teamTaskId:X}}function s2($){if(_f($))return null;let f="__",J=$.indexOf(f);if(J<=0)return null;let Q=$.slice(0,J),Z=$.slice(J+f.length);if(!Q||!Z)return null;return{rootSessionId:Q,agentId:Z}}function o2($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let f=String($.reason??"").toLowerCase();if(f.includes("cancel")||f.includes("abort")||f.includes("interrupt"))return"cancelled";if(f.includes("fail")||f.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as a}from"zod";var EW={};q(EW,{SessionSource:()=>K0,SESSION_STATUSES:()=>e2});import{SESSION_STATUS_VALUES as uG}from"@cline/shared";var e2=uG,K0={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 dG=a.enum(e2),y0=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:dG,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 hW($){if(!$)return!1;return Object.values($).some((f)=>typeof f==="function")}function V9($,f){let J=[...$??[],...f??[]];if(J.length===0)return;let Q=[],Z=new Set;for(let W of J){if(Z.has(W.name))continue;Z.add(W.name),Q.push(W)}return Q}function bW($){return JSON.stringify($,(f,J)=>{if(J instanceof Error)return{name:J.name,message:J.message,stack:J.stack};return J})}function U$($){return typeof $==="string"&&$.trim()?$.trim():void 0}function Y9($,f){let J={...$};J.id=U$(J.id)??nG();let Q=J.modelInfo&&typeof J.modelInfo==="object"?{...J.modelInfo}:void 0,Z={id:U$(Q?.id)??U$(J.modelId)??U$(f?.id),provider:U$(Q?.provider)??U$(J.providerId)??U$(f?.provider),family:U$(Q?.family)??U$(f?.family)};if(delete J.providerId,delete J.modelId,Z.id&&Z.provider)J.modelInfo={id:Z.id,provider:Z.provider,...Z.family?{family:Z.family}:{}};else delete J.modelInfo;return J}function J6($){return $.map((f)=>Y9(f))}function Q6($,f,J=[]){let Q=$.map((H,Y)=>{let V=J[Y],B=V?.role===H.role&&JSON.stringify(V.content)===JSON.stringify(H.content)?{...V,...H}:{...H};return Y9(B)}),Z=J.length,W=[];for(let H=Z;H<Q.length;H+=1)if(Q[H]?.role==="assistant")W.push(H);if(W.length===0){let H=[...Q].reverse().findIndex((Y)=>Y.role==="assistant");if(H===-1)return Q;W.push(Q.length-1-H)}let j=W[W.length-1],X=W.some((H)=>Q[H]?.metrics);for(let H of W){let Y=Q[H],V=Y.metrics;if(!V&&H===j&&!X){let A=f.usage;V={inputTokens:A.inputTokens,outputTokens:A.outputTokens,cacheReadTokens:A.cacheReadTokens??0,cacheWriteTokens:A.cacheWriteTokens??0,cost:A.totalCost}}Q[H]={...Y9(Y,{id:f.model.id,provider:f.model.provider,family:f.model.info?.family}),...V?{metrics:V}:{},ts:Y.ts??f.endedAt.getTime()}}return Q}function $8($){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 aG=120;function q1($){let f=$?.trim();return f?f.slice(0,aG):void 0}function A9($){let f=iG($??"").trim();if(!f)return;return q1(f.split(`
137
137
  `)[0]?.trim())}function i$($){if(!$)return;let f={...$},J=q1(typeof f.title==="string"?f.title:void 0);if(J)f.title=J;else delete f.title;return Object.keys(f).length>0?f:void 0}function f8($){let f=i$($.metadata)??{},J=$.title!==void 0?q1($.title):A9($.prompt);if(J)f.title=J;return Object.keys(f).length>0?f:void 0}function B9($){let f=_f($);if(f)return{agent:"teammate",sessionId:f.rootSessionId,taskType:"team"};let J=s2($);if(J)return{agent:"subagent",sessionId:J.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function K9($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:J6($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function kW($,f,J){lG(rG($),{recursive:!0}),pG($,`${JSON.stringify(K9({updatedAt:f,context:J,messages:[]}),null,2)}
138
- `,"utf8")}function IW($,f){return y0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:f?.endedAt??$.endedAt??void 0,exit_code:f?.exitCode??$.exitCode??void 0,status:f?.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:f?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function xW($,f,J){let Q=0;while(!0){let Z=await $();if(Z===void 0)return{updated:!1};let W=await f(Z);if(typeof W==="object"&&W!==null&&"updated"in W&&W.updated===!1){if(Q+=1,Q>=J)return W;continue}return W}}T0();var uW={};q(uW,{summarizeUsageFromMessages:()=>Nf,sumUsageTotals:()=>W8,getCurrentContextSize:()=>G9,createInitialAccumulatedUsage:()=>V0,accumulateUsageTotals:()=>H0});function V0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function H0($,f){return{inputTokens:$.inputTokens+Math.max(0,f.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,f.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,f.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,f.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,f.totalCost??0)}}function W8($){let f=V0();for(let J of $)f=H0(f,J);return f}function Tf($){return typeof $==="number"&&Number.isFinite($)?$:0}function Nf($){let f=V0();for(let J of $){let Q=J.metrics;if(!Q)continue;f=H0(f,{inputTokens:Tf(Q.inputTokens),outputTokens:Tf(Q.outputTokens),cacheReadTokens:Tf(Q.cacheReadTokens),cacheWriteTokens:Tf(Q.cacheWriteTokens),totalCost:Tf(Q.cost)})}return f}function G9($){for(let f=$.length-1;f>=0;f-=1){let J=$[f];if(J?.role!=="assistant")continue;let Q=Tf(J.metrics?.inputTokens);return Q>0?Q:void 0}return}function $P($){if(!$||typeof $!=="object")return;let f=$,J=f.skill??f.skill_name??f.skillName;if(typeof J!=="string")return;let Q=J.trim();return Q.length>0?Q:void 0}function P9($){if(!$||typeof $!=="object")return{};let f=$;return{agentId:typeof f.agentId==="string"?f.agentId:void 0,conversationId:typeof f.conversationId==="string"?f.conversationId:void 0,parentAgentId:typeof f.parentAgentId==="string"?f.parentAgentId:void 0}}function y$($){let f=$.agentId?.trim();if(!f)return;let J=$.parentAgentId?.trim()||void 0,Q=$.teamRole,Z="root";if(Q==="teammate")Z="team_teammate";else if(Q==="lead")Z="team_lead";else if(J)Z="subagent";return{agentId:f,agentKind:Z,conversationId:$.conversationId?.trim()||void 0,parentAgentId:J,createdByAgentId:$.createdByAgentId?.trim()||J||void 0,isSubagent:Boolean(J),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:Q,teamAgentId:$.teamAgentId?.trim()||void 0}}function fP($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function JP($){let f=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let J of f){let Q=J?.trim();if(Q)return Q}return $.isPrimaryAgentEvent?"root":"unknown"}function F9($,f,J){let{sessionId:Q,config:Z,liveSession:W,emit:j}=$,X=Z.telemetry,H=W?.runtime.teamRuntime,Y=J?.isPrimaryAgentEvent??!0,V=P9(f),A=y$({agentId:J?.agentId??V.agentId,conversationId:J?.conversationId??V.conversationId,parentAgentId:J?.parentAgentId??V.parentAgentId,createdByAgentId:J?.createdByAgentId,teamId:J?.teamId??H?.getTeamId(),teamName:J?.teamName??H?.getTeamName(),teamRole:J?.teamRole,teamAgentId:J?.teamAgentId});if(f.type==="content_start"&&f.contentType==="tool"&&f.toolName==="skills"){let B=$P(f.input);if(B)B6(X,{ulid:Q,skillName:B,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:Z.providerId,modelId:Z.modelId,...A})}if(f.type==="content_end"&&f.contentType==="tool"){let B=f.toolName??"unknown",K=!f.error;if(A6(X,{ulid:Q,tool:B,autoApproved:void 0,success:K,modelId:Z.modelId,provider:Z.providerId,...A}),!K&&(B==="editor"||B==="apply_patch"))K6(X,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,errorType:f.error,...A})}if(f.type==="notice"&&f.reason==="api_error")Q8(X,{ulid:Q,model:Z.modelId,provider:Z.providerId,errorMessage:f.message,...A});if(f.type==="error")Q8(X,{ulid:Q,model:Z.modelId,provider:Z.providerId,errorMessage:f.error?.message??"unknown error",...A});if(f.type==="usage"&&W?.turnUsageBaseline){let B=fP(f);if(Y){W.turnPrimaryUsage=H0(W.turnPrimaryUsage??V0(),B);let G=H0(W.turnUsageBaseline,W.turnPrimaryUsage);$.usageBySession.set(Q,G),yf(X,{ulid:Q,provider:Z.providerId,model:Z.modelId,source:"assistant",mode:Z.mode,...A}),Y6(X,{ulid:Q,tokensIn:f.inputTokens,tokensOut:f.outputTokens,cacheWriteTokens:f.cacheWriteTokens,cacheReadTokens:f.cacheReadTokens,totalCost:f.cost,model:Z.modelId,...A})}else{let G=JP({isPrimaryAgentEvent:Y,overrides:J,eventMetadata:V}),R=W.turnUsageByAgent??new Map;W.turnUsageByAgent=R,R.set(G,H0(R.get(G)??V0(),B))}let K=H0(W.turnPrimaryUsage??V0(),W8(W.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(Q,H0(W.turnAggregateUsageBaseline??W.turnUsageBaseline,K))}if(f.type==="iteration_end"&&Y)$.persistMessages(Q,W?.agent.getMessages()??[],W?.config.systemPrompt);j({type:"agent_event",payload:{sessionId:Q,event:f,teamAgentId:J?.teamAgentId,teamRole:J!==void 0?J.teamRole??(Y?"lead":void 0):void 0}}),j({type:"chunk",payload:{sessionId:Q,stream:"agent",chunk:bW(f),ts:Date.now()}})}function t$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as OD}from"@cline/shared";function dW($){let f="";for(let J=0;J<$.length;J+=1)f+=String.fromCharCode($[J]??0);return btoa(f).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function QP($){let J=new TextEncoder().encode($),Q=await crypto.subtle.digest("SHA-256",J);return new Uint8Array(Q)}function ZP($=32){let f=new Uint8Array($);return crypto.getRandomValues(f),dW(f)}async function U6(){let $=ZP(),f=dW(await QP($));return{verifier:$,challenge:f}}function L6($){return $.endsWith("/")?$.slice(0,-1):$}function w1($,f){return new URL(f,`${L6($)}/`).toString()}function Mf($,f={}){let J=$.trim();if(!J)return{};try{let Q=new URL(J);return{code:Q.searchParams.get("code")??void 0,state:Q.searchParams.get("state")??void 0,provider:f.includeProvider?Q.searchParams.get("provider")??void 0:void 0}}catch{}if(f.allowHashCodeState&&J.includes("#")){let[Q,Z]=J.split("#",2);return{code:Q||void 0,state:Z||void 0}}if(J.includes("code=")){let Q=new URLSearchParams(J);return{code:Q.get("code")??void 0,state:Q.get("state")??void 0,provider:f.includeProvider?Q.get("provider")??void 0:void 0}}return{code:J}}function WP($){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 G0($){if(!$)return null;try{let f=$.split(".");if(f.length!==3)return null;let J=f[1];if(!J)return null;let Q=J.replace(/-/g,"+").replace(/_/g,"/"),Z=Q.padEnd(Q.length+(4-Q.length%4)%4,"="),W=WP(Z);if(!W)return null;return JSON.parse(W)}catch{return null}}function qf($){try{let f=JSON.parse($),J=f.error,Q=typeof J==="string"?J:J&&typeof J==="object"&&typeof J.type==="string"?J.type:void 0,Z=typeof f.error_description==="string"?f.error_description:typeof f.message==="string"?f.message:J&&typeof J==="object"&&typeof J.message==="string"?J.message:void 0;return{code:Q,message:Z}}catch{return{}}}function S1($,f){return Date.now()>=$.expires-f}async function wf($){if(!$.onManualCodeInput){let W=await $.waitForCallback();return{code:W?.code,state:W?.state,provider:W?.provider,error:W?.error}}let f,J,Q=$.onManualCodeInput().then((W)=>{f=W,$.cancelWait()}).catch((W)=>{J=W instanceof Error?W:Error(String(W)),$.cancelWait()}),Z=await $.waitForCallback();if(J)throw J;if(Z?.code||Z?.error)return{code:Z.code,state:Z.state,provider:Z.provider,error:Z.error};if(f)return Mf(f,$.parseOptions);if(await Q,J)throw J;if(f)return Mf(f,$.parseOptions);return{}}T$();import{existsSync as rP}from"node:fs";import{discoverPluginModulePaths as iP,resolveConfiguredPluginModulePaths as nP,resolvePluginConfigSearchPaths as aP}from"@cline/shared/storage";import{resolve as NP}from"node:path";import{normalizePluginManifest as MP}from"@cline/shared";import{existsSync as L0,readFileSync as Cf}from"node:fs";import{builtinModules as VP,createRequire as eW}from"node:module";import{dirname as V8,extname as N6,isAbsolute as AP,resolve as l}from"node:path";import{fileURLToPath as $j}from"node:url";import{PLUGIN_FILE_EXTENSIONS as BP}from"@cline/shared";var fj=V8($j(import.meta.url)),KP=eW(import.meta.url),GP=l(fj,"..","..","..","..",".."),R9=DP(GP),PP=["@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"],O9=new Set(VP.flatMap(($)=>[$,$.replace(/^node:/,"")])),Y8=new Set(BP),FP=["development","node","import","require","default"];function DP($){let f={},J={"@cline/agents":l($,"packages/agents/src/index.ts"),"@cline/core":l($,"packages/core/src/index.ts"),"@cline/llms":l($,"packages/llms/src/index.ts"),"@cline/shared":l($,"packages/shared/src/index.ts"),"@cline/shared/storage":l($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":l($,"packages/shared/src/db/index.ts")};for(let[Q,Z]of Object.entries(J))if(L0(Z))f[Q]=Z;for(let Q of["agents","core","llms","shared"]){let Z=l($,"packages",Q),W=l(Z,"package.json");if(!L0(W))continue;try{let j=JSON.parse(Cf(W,"utf8"));if(typeof j.name!=="string"||!j.exports)continue;if(typeof j.exports==="string"){let X=l(Z,j.exports);if(L0(X))f[j.name]=X;continue}if(typeof j.exports!=="object")continue;for(let[X,H]of Object.entries(j.exports)){let Y=RP(Z,H);if(!Y)continue;let V=X==="."?j.name:`${j.name}/${X.replace(/^\.\//,"")}`;f[V]=Y}}catch{}}return f}function RP($,f){let J=z9(f);if(!J)return null;let Q=Jj($,J);for(let Z of Q)if(L0(Z))return Z;return null}function z9($,f=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(f.has($))return null;f.add($);let J=$;for(let Q of FP){let Z=z9(J[Q],f);if(Z)return Z}return null}function Jj($,f){let J=f.replace(/^\.\//,""),Q=[l($,f)];if(J.startsWith("dist/")){let Z=J.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[l($,`${Z}.ts`),l($,`${Z}.tsx`),l($,`${Z}.mts`),l($,`${Z}.cts`),...Q]}return Q}function UP($){return Object.fromEntries(Object.entries($).sort(([f],[J])=>J.length-f.length))}function T6($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function Sf($){if($.startsWith("@")){let[f,J]=$.split("/",3);return J?`${f}/${J}`:$}return $.split("/",1)[0]??$}function LP($){let f=Sf($);if($===f)return".";return`.${$.slice(f.length)}`}function Qj($){return Sf($).startsWith("@cline/")}function U9($,f){let J=Sf(f),Q=V8($);while(!0){let Z=l(Q,"node_modules",J);if(L0(Z)||L0(l(Z,"package.json")))return!0;let W=l(Q,"..");if(W===Q)return!1;Q=W}}function oW($){return L9($)!==null}function L9($){try{return KP.resolve($)}catch{}return OP($)}function OP($){let f=Sf($),J=zP(f);if(!J)return null;let Q=l(J,"package.json");try{let Z=JSON.parse(Cf(Q,"utf8")),W=LP($),j=W==="."&&typeof Z.exports==="string"?Z.exports:Z.exports&&typeof Z.exports==="object"&&Object.hasOwn(Z.exports,W)?Z.exports[W]:void 0,X=z9(j)??(W==="."&&typeof Z.main==="string"?Z.main:null);if(!X)return null;let H=l(J,X),Y=[H,...Jj(J,X).filter((V)=>V!==H)];for(let V of Y)if(L0(V))return V;return null}catch{return null}}function zP($){let f=fj;while(!0){let J=l(f,"package.json");if(L0(J))try{if(JSON.parse(Cf(J,"utf8")).name===$)return f}catch{}let Q=l(f,"node_modules",$,"package.json");if(L0(Q))return V8(Q);let Z=l(f,"..");if(Z===f)return null;f=Z}}function _P($){let J=V8($);for(let Q=0;Q<4;Q++){let Z=l(J,"package.json");if(L0(Z))try{let j=JSON.parse(Cf(Z,"utf8"));return j!=null&&typeof j==="object"&&"cline"in j}catch{return!1}let W=l(J,"..");if(W===J)return!1;J=W}return!1}function Zj($,f){let J=f.startsWith("file:")?$j(f):AP(f)?f:l(V8($),f);if(L0(J)&&Y8.has(N6(J)))return J;for(let Q of Y8){let Z=`${J}${Q}`;if(L0(Z))return Z}for(let Q of Y8){let Z=l(J,`index${Q}`);if(L0(Z))return Z}return null}function Wj($){let f=new Set,J=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let Q of J)for(let Z of $.matchAll(Q)){let W=Z[1];if(W)f.add(W)}return[...f]}function yP($){return N6($)!==".ts"}function jj($,f,J=new Set){if(J.has($)||!L0($))return;if(J.add($),!Y8.has(N6($)))return;let Q=Cf($,"utf8"),Z=yP($);for(let W of Wj(Q)){if(W.startsWith("node:")||O9.has(W))continue;if(T6(W)){if(!Z)continue;if(Object.hasOwn(R9,W)||Object.hasOwn(R9,Sf(W))||U9($,W)||Qj(W)&&oW(W)||f&&oW(W))continue;throw Error(`Cannot find module '${Sf(W)}'`)}let j=Zj($,W);if(j)jj(j,f,J)}}function Xj($,f=new Set,J=new Set){if(f.has($)||!L0($))return J;if(f.add($),!Y8.has(N6($)))return J;let Q=Cf($,"utf8");for(let Z of Wj(Q)){if(J.add(Z),T6(Z))continue;let W=Zj($,Z);if(W)Xj(W,f,J)}return J}function TP($,f){let J=eW($),Q={},Z=Xj($),W=new Set(PP);for(let[j,X]of Object.entries(R9)){try{J.resolve(j);continue}catch{}Q[j]=X}for(let j of Z)if(T6(j)&&(Qj(j)||f))W.add(j);for(let j of W){if(Object.hasOwn(Q,j)||U9($,j))continue;let X=L9(j);if(X)Q[j]=X}if(!f)return Q;for(let j of Z){if(!T6(j)||Object.hasOwn(Q,j)||U9($,j)||j.startsWith("node:")||O9.has(j))continue;let X=L9(j);if(X)Q[j]=X}return Q}async function Hj($,f={}){let J=!_P($);jj($,J);let Q=TP($,J),Z=UP(Q),W=await import("jiti"),j=typeof W==="function"?W:typeof W.default==="function"?W.default:void 0;if(!j)throw Error("Unable to load jiti");return await j($,{alias:Z,cache:f.useCache,requireCache:f.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...O9],transformModules:Object.keys(Z)}).import($,{})}function Yj($,f){if(!$)return!0;if($.providerIds?.length){if(!f?.providerId||!$.providerIds.includes(f.providerId))return!1}if($.modelIds?.length){if(!f?.modelId||!$.modelIds.includes(f.modelId))return!1}return!0}function Vj($){return typeof $==="object"&&$!==null}function _9($){return Array.isArray($)&&$.every((f)=>typeof f==="string")}function qP($,f){if(!Vj($.manifest))throw Error(`Invalid plugin module at ${f}: missing required "manifest"`);if(!_9($.manifest.capabilities))throw Error(`Invalid plugin module at ${f}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${f}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!_9($.manifest.providerIds))throw Error(`Invalid plugin module at ${f}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!_9($.manifest.modelIds))throw Error(`Invalid plugin module at ${f}: manifest.modelIds must be a string array when provided`)}function wP($,f){if(!Vj($))throw Error(`Invalid plugin module at ${f}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${f}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${f}: missing required "manifest"`);qP($,f)}async function A8($,f={}){let J=NP(f.cwd??process.cwd(),$),Q=await Hj(J,{useCache:f.useCache}),Z=f.exportName??"plugin",W=Q.default??Q[Z];wP(W,J);let j=W,X=j.setup,H=X?(Y,V)=>{let A={...f.session,...V.session},B={...V,session:Object.keys(A).length>0?A:void 0,client:f.client??V.client,user:f.user??V.user,workspaceInfo:f.workspaceInfo??V.workspaceInfo,automation:f.automation??V.automation,logger:f.logger??V.logger,telemetry:f.telemetry??V.telemetry};return X(Y,B)}:void 0;return{...j,manifest:MP(j.manifest),setup:H}}async function M6($,f={}){return(await N$($,f)).plugins}async function N$($,f={}){let J=[],Q=[],Z=new Map,W=0;for(let j of $)try{let X=await A8(j,f);if(!Yj(X.manifest,f))continue;let H=Z.get(X.name);if(H)Q.push({type:"duplicate_plugin_override",pluginName:X.name,pluginPath:j,overriddenPluginPath:H.pluginPath,message:`Plugin "${X.name}" from ${j} overrides ${H.pluginPath}`});Z.set(X.name,{plugin:X,pluginPath:j,order:W++})}catch(X){let H=X instanceof Error?X.message:String(X);J.push({pluginPath:j,phase:"load",message:H,stack:X instanceof Error?X.stack:void 0})}return{plugins:[...Z.values()].sort((j,X)=>j.order-X.order).map((j)=>j.plugin),failures:J,warnings:Q}}import{existsSync as bP}from"node:fs";import{createRequire as kP}from"node:module";import{dirname as IP,join as q6}from"node:path";import{fileURLToPath as xP}from"node:url";var Pj={};q(Pj,{resolveSubprocessRuntimeExecutable:()=>y9,buildSubprocessSandboxCommand:()=>Gj,SubprocessSandbox:()=>Ef,CLINE_JS_RUNTIME_PATH_ENV:()=>Kj});import{spawn as SP}from"node:child_process";import{basename as CP}from"node:path";import{augmentNodeCommandForDebug as EP,withResolvedClineBuildEnv as hP}from"@cline/shared";function Aj($){if($ instanceof Error)return $;return Error(String($))}var Kj="CLINE_JS_RUNTIME_PATH";function Bj($){let f=$?.trim();if(!f)return!1;let J=CP(f).toLowerCase();return J==="node"||J==="node.exe"||J==="bun"||J==="bun.exe"}function y9($={}){let f=$.env??process.env,J=$.runtimeExecutable?.trim()||f[Kj]?.trim();if(J)return J;let Q=$.execPath?.trim()||process.execPath;if(Bj(Q))return Q;for(let Z of[f.BUN_EXEC_PATH,f.npm_node_execpath,f.NODE]){let W=Z?.trim();if(W&&Bj(W))return W}return"node"}function Gj($,f={}){let J=y9({env:f.env,execPath:f.execPath,runtimeExecutable:f.runtimeExecutable});return EP([J,...$],{env:f.env,execArgv:f.execArgv,debugRole:f.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class Ef{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let f=this.pending.get($);if(!f)return;if(this.pending.delete($),f.timeout)clearTimeout(f.timeout);return f}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],f=Gj($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),J=SP(f[0]??y9(this.options),f.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:hP(process.env)});this.process=J;let Q="",Z=(W)=>{let j=Q+W;Q=j.length>4000?j.slice(-4000):j};J.stderr?.setEncoding("utf8"),J.stderr?.on("data",(W)=>{Z(W)}),J.on("message",(W)=>{this.onMessage(W)}),J.on("error",(W)=>{this.failPending(Error(`${this.processLabel} process error: ${Aj(W).message}`))}),J.on("exit",(W,j)=>{this.process=null;let X=Q.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(W)}, signal=${String(j)})${X?`: ${X}`:""}`))})}async call($,f,J={}){this.start();let Q=this.process;if(!Q||Q.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let Z=`req_${++this.requestCounter}`,W={type:"call",id:Z,method:$,args:f};return await new Promise((j,X)=>{let H={resolve:(Y)=>j(Y),reject:X};if((J.timeoutMs??0)>0)H.timeout=setTimeout(()=>{this.clearPendingRequest(Z),this.shutdown().catch(()=>{}),X(Error(`${this.processLabel} call timed out after ${J.timeoutMs}ms: ${$}`))},J.timeoutMs);this.pending.set(Z,H),Q.send(W,(Y)=>{if(!Y)return;let V=this.clearPendingRequest(Z);if(!V)return;V.reject(Error(`${this.processLabel} failed to send call "${$}": ${Aj(Y).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((f)=>{let J=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}f()},300);$.once("exit",()=>{clearTimeout(J),f()});try{$.kill("SIGTERM")}catch{clearTimeout(J),f()}}),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 f=this.clearPendingRequest($.id);if(!f)return;if($.ok){f.resolve($.result);return}f.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[f,J]of this.pending.entries()){if(this.pending.delete(f),J.timeout)clearTimeout(J.timeout);J.reject($)}}}function gP($){return{...$,contributions:{tools:$.contributions?.tools??[],commands:$.contributions?.commands??[],messageBuilders:$.contributions?.messageBuilders??[],providers:$.contributions?.providers??[],automationEventTypes:$.contributions?.automationEventTypes??[],shortcuts:$.contributions?.shortcuts??[],flags:$.contributions?.flags??[]}}}function w6($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function mP(){let $=IP(xP(import.meta.url)),f=kP(import.meta.url),J=[q6($,"plugin-sandbox-bootstrap.js"),q6($,"extensions","plugin-sandbox-bootstrap.js"),q6($,"agents","plugin-sandbox-bootstrap.js")];for(let W of J)if(bP(W))return{file:W};let Q=q6($,"plugin-sandbox-bootstrap.ts"),Z="jiti";try{Z=f.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(Z)});`,`const jiti = createJiti(${JSON.stringify(Q)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(Q)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
139
- `)}}var T9=mP();function N9($,f){return typeof $==="number"&&$>0?$:f}async function Dj($){let f=new Ef({name:"plugin-sandbox",..."file"in T9?{bootstrapFile:T9.file}:{bootstrapScript:T9.script},onEvent:$.onEvent}),J=N9($.importTimeoutMs,4000),Q=N9($.hookTimeoutMs,3000),Z=N9($.contributionTimeoutMs,60000),W={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},j,X=()=>{return j??=f.call("initialize",W,{timeoutMs:J}).finally(()=>{j=void 0}),j},H;try{H=await f.call("initialize",W,{timeoutMs:J})}catch(A){throw await f.shutdown().catch(()=>{}),A}return{extensions:H.plugins.map(gP).map((A)=>{let B={name:A.name,manifest:A.manifest,setup:(K)=>{vP(K,f,A,Z,X),cP(K,f,A,Z,X),dP(K,f,A,Z,X),uP(K,A)}};return B.hooks=pP(f,A,Q,X),B}),failures:H.failures,shutdown:async()=>{await f.shutdown()},warnings:H.warnings}}function vP($,f,J,Q,Z){for(let W of J.contributions?.tools??[]){let j={name:W.name,description:W.description??"",inputSchema:W.inputSchema??{type:"object",properties:{}},timeoutMs:W.timeoutMs,retryable:W.retryable,execute:async(X,H)=>{try{return await f.call("executeTool",{pluginId:J.pluginId,contributionId:W.id,input:X,context:H},{timeoutMs:Q})}catch(Y){if(!w6(Y))throw Y;return await Z(),await f.call("executeTool",{pluginId:J.pluginId,contributionId:W.id,input:X,context:H},{timeoutMs:Q})}}};$.registerTool(j)}}function cP($,f,J,Q,Z){for(let W of J.contributions?.commands??[])$.registerCommand({name:W.name,description:W.description,handler:async(j)=>{try{return await f.call("executeCommand",{pluginId:J.pluginId,contributionId:W.id,input:j},{timeoutMs:Q})}catch(X){if(!w6(X))throw X;return await Z(),await f.call("executeCommand",{pluginId:J.pluginId,contributionId:W.id,input:j},{timeoutMs:Q})}}})}function uP($,f){for(let J of f.contributions?.providers??[])$.registerProvider({name:J.name,description:J.description,metadata:J.metadata});for(let J of f.contributions?.automationEventTypes??[])$.registerAutomationEventType({eventType:J.eventType,source:J.source,description:J.description,attributesSchema:J.attributesSchema,payloadSchema:J.payloadSchema,examples:J.examples,metadata:J.metadata})}function dP($,f,J,Q,Z){for(let W of J.contributions?.messageBuilders??[])$.registerMessageBuilder({name:W.name,async build(j){try{let X=await f.call("buildMessages",{pluginId:J.pluginId,contributionId:W.id,messages:j},{timeoutMs:Q});return Fj(X)?X:j}catch(X){if(!w6(X))throw X;await Z();let H=await f.call("buildMessages",{pluginId:J.pluginId,contributionId:W.id,messages:j},{timeoutMs:Q});return Fj(H)?H:j}}})}function Fj($){return Array.isArray($)&&$.every((f)=>typeof f==="object"&&f!==null&&("role"in f)&&("content"in f))}function lP($,f,J,Q,Z){return async(W)=>{try{return await $.call("invokeHook",{pluginId:f,hookName:J,payload:W},{timeoutMs:Q})}catch(j){if(!w6(j))throw j;return await Z(),await $.call("invokeHook",{pluginId:f,hookName:J,payload:W},{timeoutMs:Q})}}}function pP($,f,J,Q){let Z={};for(let W of f.hooks??[])Z[W]=lP($,f.pluginId,W,J,Q);return Object.keys(Z).length>0?Z:void 0}function B8($){return aP($)}function K8($){return iP($)}function h1($={}){let f=$.cwd??process.cwd(),J=B8($.workspacePath).flatMap((j)=>K8(j)).filter((j)=>rP(j)),Q=nP($.pluginPaths??[],f),Z=[],W=new Set;for(let j of[...Q,...J]){if(W.has(j))continue;W.add(j),Z.push(j)}return _6(Z)}async function hf($={}){let f=h1($);if(f.length===0)return{extensions:[],failures:[],warnings:[]};if($.mode==="in_process"){let Q=await N$(f,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:Q.plugins,failures:Q.failures,warnings:Q.warnings}}let J=await Dj({pluginPaths:f,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:J.extensions??[],shutdown:J.shutdown,failures:J.failures,warnings:J.warnings}}import{execFile as tP}from"node:child_process";import{promisify as sP}from"node:util";var oP=sP(tP);function M9($,f){$?.log(f,{severity:"warn"})}function eP($){let f=$?.checkpoint;if(!f||typeof f!=="object"||Array.isArray(f))return;let J=f;if(!J.latest||!Array.isArray(J.history))return;let Q=J.latest,Z=J.history.filter((W)=>!!W&&typeof W==="object"&&typeof W.ref==="string"&&typeof W.createdAt==="number"&&typeof W.runCount==="number");if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")return;return{latest:Q,history:Z}}async function b1($,f){let J=await oP("git",["-C",$,...f],{windowsHide:!0});return{stdout:J.stdout.trim(),stderr:J.stderr.trim()}}async function q9($,f){if(!$)return;let J=`refs/cline/checkpoints/${f}/`;try{let{stdout:Q}=await b1($,["for-each-ref","--format=%(refname)",J]),Z=Q.trim().split(`
138
+ `,"utf8")}function IW($,f){return y0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:f?.endedAt??$.endedAt??void 0,exit_code:f?.exitCode??$.exitCode??void 0,status:f?.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:f?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function xW($,f,J){let Q=0;while(!0){let Z=await $();if(Z===void 0)return{updated:!1};let W=await f(Z);if(typeof W==="object"&&W!==null&&"updated"in W&&W.updated===!1){if(Q+=1,Q>=J)return W;continue}return W}}N0();var uW={};q(uW,{summarizeUsageFromMessages:()=>Tf,sumUsageTotals:()=>W8,getCurrentContextSize:()=>G9,createInitialAccumulatedUsage:()=>V0,accumulateUsageTotals:()=>H0});function V0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function H0($,f){return{inputTokens:$.inputTokens+Math.max(0,f.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,f.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,f.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,f.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,f.totalCost??0)}}function W8($){let f=V0();for(let J of $)f=H0(f,J);return f}function Nf($){return typeof $==="number"&&Number.isFinite($)?$:0}function Tf($){let f=V0();for(let J of $){let Q=J.metrics;if(!Q)continue;f=H0(f,{inputTokens:Nf(Q.inputTokens),outputTokens:Nf(Q.outputTokens),cacheReadTokens:Nf(Q.cacheReadTokens),cacheWriteTokens:Nf(Q.cacheWriteTokens),totalCost:Nf(Q.cost)})}return f}function G9($){for(let f=$.length-1;f>=0;f-=1){let J=$[f];if(J?.role!=="assistant")continue;let Q=Nf(J.metrics?.inputTokens);return Q>0?Q:void 0}return}function $P($){if(!$||typeof $!=="object")return;let f=$,J=f.skill??f.skill_name??f.skillName;if(typeof J!=="string")return;let Q=J.trim();return Q.length>0?Q:void 0}function P9($){if(!$||typeof $!=="object")return{};let f=$;return{agentId:typeof f.agentId==="string"?f.agentId:void 0,conversationId:typeof f.conversationId==="string"?f.conversationId:void 0,parentAgentId:typeof f.parentAgentId==="string"?f.parentAgentId:void 0}}function y$($){let f=$.agentId?.trim();if(!f)return;let J=$.parentAgentId?.trim()||void 0,Q=$.teamRole,Z="root";if(Q==="teammate")Z="team_teammate";else if(Q==="lead")Z="team_lead";else if(J)Z="subagent";return{agentId:f,agentKind:Z,conversationId:$.conversationId?.trim()||void 0,parentAgentId:J,createdByAgentId:$.createdByAgentId?.trim()||J||void 0,isSubagent:Boolean(J),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:Q,teamAgentId:$.teamAgentId?.trim()||void 0}}function fP($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function JP($){let f=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let J of f){let Q=J?.trim();if(Q)return Q}return $.isPrimaryAgentEvent?"root":"unknown"}function F9($,f,J){let{sessionId:Q,config:Z,liveSession:W,emit:j}=$,X=Z.telemetry,H=W?.runtime.teamRuntime,Y=J?.isPrimaryAgentEvent??!0,V=P9(f),A=y$({agentId:J?.agentId??V.agentId,conversationId:J?.conversationId??V.conversationId,parentAgentId:J?.parentAgentId??V.parentAgentId,createdByAgentId:J?.createdByAgentId,teamId:J?.teamId??H?.getTeamId(),teamName:J?.teamName??H?.getTeamName(),teamRole:J?.teamRole,teamAgentId:J?.teamAgentId});if(f.type==="content_start"&&f.contentType==="tool"&&f.toolName==="skills"){let B=$P(f.input);if(B)B6(X,{ulid:Q,skillName:B,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:Z.providerId,modelId:Z.modelId,...A})}if(f.type==="content_end"&&f.contentType==="tool"){let B=f.toolName??"unknown",K=!f.error;if(A6(X,{ulid:Q,tool:B,autoApproved:void 0,success:K,modelId:Z.modelId,provider:Z.providerId,...A}),!K&&(B==="editor"||B==="apply_patch"))K6(X,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,errorType:f.error,...A})}if(f.type==="notice"&&f.reason==="api_error")Q8(X,{ulid:Q,model:Z.modelId,provider:Z.providerId,errorMessage:f.message,...A});if(f.type==="error")Q8(X,{ulid:Q,model:Z.modelId,provider:Z.providerId,errorMessage:f.error?.message??"unknown error",...A});if(f.type==="usage"&&W?.turnUsageBaseline){let B=fP(f);if(Y){W.turnPrimaryUsage=H0(W.turnPrimaryUsage??V0(),B);let G=H0(W.turnUsageBaseline,W.turnPrimaryUsage);$.usageBySession.set(Q,G),yf(X,{ulid:Q,provider:Z.providerId,model:Z.modelId,source:"assistant",mode:Z.mode,...A}),Y6(X,{ulid:Q,tokensIn:f.inputTokens,tokensOut:f.outputTokens,cacheWriteTokens:f.cacheWriteTokens,cacheReadTokens:f.cacheReadTokens,totalCost:f.cost,model:Z.modelId,...A})}else{let G=JP({isPrimaryAgentEvent:Y,overrides:J,eventMetadata:V}),R=W.turnUsageByAgent??new Map;W.turnUsageByAgent=R,R.set(G,H0(R.get(G)??V0(),B))}let K=H0(W.turnPrimaryUsage??V0(),W8(W.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(Q,H0(W.turnAggregateUsageBaseline??W.turnUsageBaseline,K))}if(f.type==="iteration_end"&&Y)$.persistMessages(Q,W?.agent.getMessages()??[],W?.config.systemPrompt);j({type:"agent_event",payload:{sessionId:Q,event:f,teamAgentId:J?.teamAgentId,teamRole:J!==void 0?J.teamRole??(Y?"lead":void 0):void 0}}),j({type:"chunk",payload:{sessionId:Q,stream:"agent",chunk:bW(f),ts:Date.now()}})}function t$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as OD}from"@cline/shared";function dW($){let f="";for(let J=0;J<$.length;J+=1)f+=String.fromCharCode($[J]??0);return btoa(f).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function QP($){let J=new TextEncoder().encode($),Q=await crypto.subtle.digest("SHA-256",J);return new Uint8Array(Q)}function ZP($=32){let f=new Uint8Array($);return crypto.getRandomValues(f),dW(f)}async function U6(){let $=ZP(),f=dW(await QP($));return{verifier:$,challenge:f}}function L6($){return $.endsWith("/")?$.slice(0,-1):$}function w1($,f){return new URL(f,`${L6($)}/`).toString()}function Mf($,f={}){let J=$.trim();if(!J)return{};try{let Q=new URL(J);return{code:Q.searchParams.get("code")??void 0,state:Q.searchParams.get("state")??void 0,provider:f.includeProvider?Q.searchParams.get("provider")??void 0:void 0}}catch{}if(f.allowHashCodeState&&J.includes("#")){let[Q,Z]=J.split("#",2);return{code:Q||void 0,state:Z||void 0}}if(J.includes("code=")){let Q=new URLSearchParams(J);return{code:Q.get("code")??void 0,state:Q.get("state")??void 0,provider:f.includeProvider?Q.get("provider")??void 0:void 0}}return{code:J}}function WP($){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 G0($){if(!$)return null;try{let f=$.split(".");if(f.length!==3)return null;let J=f[1];if(!J)return null;let Q=J.replace(/-/g,"+").replace(/_/g,"/"),Z=Q.padEnd(Q.length+(4-Q.length%4)%4,"="),W=WP(Z);if(!W)return null;return JSON.parse(W)}catch{return null}}function qf($){try{let f=JSON.parse($),J=f.error,Q=typeof J==="string"?J:J&&typeof J==="object"&&typeof J.type==="string"?J.type:void 0,Z=typeof f.error_description==="string"?f.error_description:typeof f.message==="string"?f.message:J&&typeof J==="object"&&typeof J.message==="string"?J.message:void 0;return{code:Q,message:Z}}catch{return{}}}function S1($,f){return Date.now()>=$.expires-f}async function wf($){if(!$.onManualCodeInput){let W=await $.waitForCallback();return{code:W?.code,state:W?.state,provider:W?.provider,error:W?.error}}let f,J,Q=$.onManualCodeInput().then((W)=>{f=W,$.cancelWait()}).catch((W)=>{J=W instanceof Error?W:Error(String(W)),$.cancelWait()}),Z=await $.waitForCallback();if(J)throw J;if(Z?.code||Z?.error)return{code:Z.code,state:Z.state,provider:Z.provider,error:Z.error};if(f)return Mf(f,$.parseOptions);if(await Q,J)throw J;if(f)return Mf(f,$.parseOptions);return{}}N$();import{existsSync as rP}from"node:fs";import{discoverPluginModulePaths as iP,resolveConfiguredPluginModulePaths as nP,resolvePluginConfigSearchPaths as aP}from"@cline/shared/storage";import{resolve as TP}from"node:path";import{normalizePluginManifest as MP}from"@cline/shared";import{existsSync as L0,readFileSync as Cf}from"node:fs";import{builtinModules as VP,createRequire as eW}from"node:module";import{dirname as V8,extname as T6,isAbsolute as AP,resolve as l}from"node:path";import{fileURLToPath as $j}from"node:url";import{PLUGIN_FILE_EXTENSIONS as BP}from"@cline/shared";var fj=V8($j(import.meta.url)),KP=eW(import.meta.url),GP=l(fj,"..","..","..","..",".."),R9=DP(GP),PP=["@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"],O9=new Set(VP.flatMap(($)=>[$,$.replace(/^node:/,"")])),Y8=new Set(BP),FP=["development","node","import","require","default"];function DP($){let f={},J={"@cline/agents":l($,"packages/agents/src/index.ts"),"@cline/core":l($,"packages/core/src/index.ts"),"@cline/llms":l($,"packages/llms/src/index.ts"),"@cline/shared":l($,"packages/shared/src/index.ts"),"@cline/shared/storage":l($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":l($,"packages/shared/src/db/index.ts")};for(let[Q,Z]of Object.entries(J))if(L0(Z))f[Q]=Z;for(let Q of["agents","core","llms","shared"]){let Z=l($,"packages",Q),W=l(Z,"package.json");if(!L0(W))continue;try{let j=JSON.parse(Cf(W,"utf8"));if(typeof j.name!=="string"||!j.exports)continue;if(typeof j.exports==="string"){let X=l(Z,j.exports);if(L0(X))f[j.name]=X;continue}if(typeof j.exports!=="object")continue;for(let[X,H]of Object.entries(j.exports)){let Y=RP(Z,H);if(!Y)continue;let V=X==="."?j.name:`${j.name}/${X.replace(/^\.\//,"")}`;f[V]=Y}}catch{}}return f}function RP($,f){let J=z9(f);if(!J)return null;let Q=Jj($,J);for(let Z of Q)if(L0(Z))return Z;return null}function z9($,f=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(f.has($))return null;f.add($);let J=$;for(let Q of FP){let Z=z9(J[Q],f);if(Z)return Z}return null}function Jj($,f){let J=f.replace(/^\.\//,""),Q=[l($,f)];if(J.startsWith("dist/")){let Z=J.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[l($,`${Z}.ts`),l($,`${Z}.tsx`),l($,`${Z}.mts`),l($,`${Z}.cts`),...Q]}return Q}function UP($){return Object.fromEntries(Object.entries($).sort(([f],[J])=>J.length-f.length))}function N6($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function Sf($){if($.startsWith("@")){let[f,J]=$.split("/",3);return J?`${f}/${J}`:$}return $.split("/",1)[0]??$}function LP($){let f=Sf($);if($===f)return".";return`.${$.slice(f.length)}`}function Qj($){return Sf($).startsWith("@cline/")}function U9($,f){let J=Sf(f),Q=V8($);while(!0){let Z=l(Q,"node_modules",J);if(L0(Z)||L0(l(Z,"package.json")))return!0;let W=l(Q,"..");if(W===Q)return!1;Q=W}}function oW($){return L9($)!==null}function L9($){try{return KP.resolve($)}catch{}return OP($)}function OP($){let f=Sf($),J=zP(f);if(!J)return null;let Q=l(J,"package.json");try{let Z=JSON.parse(Cf(Q,"utf8")),W=LP($),j=W==="."&&typeof Z.exports==="string"?Z.exports:Z.exports&&typeof Z.exports==="object"&&Object.hasOwn(Z.exports,W)?Z.exports[W]:void 0,X=z9(j)??(W==="."&&typeof Z.main==="string"?Z.main:null);if(!X)return null;let H=l(J,X),Y=[H,...Jj(J,X).filter((V)=>V!==H)];for(let V of Y)if(L0(V))return V;return null}catch{return null}}function zP($){let f=fj;while(!0){let J=l(f,"package.json");if(L0(J))try{if(JSON.parse(Cf(J,"utf8")).name===$)return f}catch{}let Q=l(f,"node_modules",$,"package.json");if(L0(Q))return V8(Q);let Z=l(f,"..");if(Z===f)return null;f=Z}}function _P($){let J=V8($);for(let Q=0;Q<4;Q++){let Z=l(J,"package.json");if(L0(Z))try{let j=JSON.parse(Cf(Z,"utf8"));return j!=null&&typeof j==="object"&&"cline"in j}catch{return!1}let W=l(J,"..");if(W===J)return!1;J=W}return!1}function Zj($,f){let J=f.startsWith("file:")?$j(f):AP(f)?f:l(V8($),f);if(L0(J)&&Y8.has(T6(J)))return J;for(let Q of Y8){let Z=`${J}${Q}`;if(L0(Z))return Z}for(let Q of Y8){let Z=l(J,`index${Q}`);if(L0(Z))return Z}return null}function Wj($){let f=new Set,J=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let Q of J)for(let Z of $.matchAll(Q)){let W=Z[1];if(W)f.add(W)}return[...f]}function yP($){return T6($)!==".ts"}function jj($,f,J=new Set){if(J.has($)||!L0($))return;if(J.add($),!Y8.has(T6($)))return;let Q=Cf($,"utf8"),Z=yP($);for(let W of Wj(Q)){if(W.startsWith("node:")||O9.has(W))continue;if(N6(W)){if(!Z)continue;if(Object.hasOwn(R9,W)||Object.hasOwn(R9,Sf(W))||U9($,W)||Qj(W)&&oW(W)||f&&oW(W))continue;throw Error(`Cannot find module '${Sf(W)}'`)}let j=Zj($,W);if(j)jj(j,f,J)}}function Xj($,f=new Set,J=new Set){if(f.has($)||!L0($))return J;if(f.add($),!Y8.has(T6($)))return J;let Q=Cf($,"utf8");for(let Z of Wj(Q)){if(J.add(Z),N6(Z))continue;let W=Zj($,Z);if(W)Xj(W,f,J)}return J}function NP($,f){let J=eW($),Q={},Z=Xj($),W=new Set(PP);for(let[j,X]of Object.entries(R9)){try{J.resolve(j);continue}catch{}Q[j]=X}for(let j of Z)if(N6(j)&&(Qj(j)||f))W.add(j);for(let j of W){if(Object.hasOwn(Q,j)||U9($,j))continue;let X=L9(j);if(X)Q[j]=X}if(!f)return Q;for(let j of Z){if(!N6(j)||Object.hasOwn(Q,j)||U9($,j)||j.startsWith("node:")||O9.has(j))continue;let X=L9(j);if(X)Q[j]=X}return Q}async function Hj($,f={}){let J=!_P($);jj($,J);let Q=NP($,J),Z=UP(Q),W=await import("jiti"),j=typeof W==="function"?W:typeof W.default==="function"?W.default:void 0;if(!j)throw Error("Unable to load jiti");return await j($,{alias:Z,cache:f.useCache,requireCache:f.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...O9],transformModules:Object.keys(Z)}).import($,{})}function Yj($,f){if(!$)return!0;if($.providerIds?.length){if(!f?.providerId||!$.providerIds.includes(f.providerId))return!1}if($.modelIds?.length){if(!f?.modelId||!$.modelIds.includes(f.modelId))return!1}return!0}function Vj($){return typeof $==="object"&&$!==null}function _9($){return Array.isArray($)&&$.every((f)=>typeof f==="string")}function qP($,f){if(!Vj($.manifest))throw Error(`Invalid plugin module at ${f}: missing required "manifest"`);if(!_9($.manifest.capabilities))throw Error(`Invalid plugin module at ${f}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${f}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!_9($.manifest.providerIds))throw Error(`Invalid plugin module at ${f}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!_9($.manifest.modelIds))throw Error(`Invalid plugin module at ${f}: manifest.modelIds must be a string array when provided`)}function wP($,f){if(!Vj($))throw Error(`Invalid plugin module at ${f}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${f}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${f}: missing required "manifest"`);qP($,f)}async function A8($,f={}){let J=TP(f.cwd??process.cwd(),$),Q=await Hj(J,{useCache:f.useCache}),Z=f.exportName??"plugin",W=Q.default??Q[Z];wP(W,J);let j=W,X=j.setup,H=X?(Y,V)=>{let A={...f.session,...V.session},B={...V,session:Object.keys(A).length>0?A:void 0,client:f.client??V.client,user:f.user??V.user,workspaceInfo:f.workspaceInfo??V.workspaceInfo,automation:f.automation??V.automation,logger:f.logger??V.logger,telemetry:f.telemetry??V.telemetry};return X(Y,B)}:void 0;return{...j,manifest:MP(j.manifest),setup:H}}async function M6($,f={}){return(await T$($,f)).plugins}async function T$($,f={}){let J=[],Q=[],Z=new Map,W=0;for(let j of $)try{let X=await A8(j,f);if(!Yj(X.manifest,f))continue;let H=Z.get(X.name);if(H)Q.push({type:"duplicate_plugin_override",pluginName:X.name,pluginPath:j,overriddenPluginPath:H.pluginPath,message:`Plugin "${X.name}" from ${j} overrides ${H.pluginPath}`});Z.set(X.name,{plugin:X,pluginPath:j,order:W++})}catch(X){let H=X instanceof Error?X.message:String(X);J.push({pluginPath:j,phase:"load",message:H,stack:X instanceof Error?X.stack:void 0})}return{plugins:[...Z.values()].sort((j,X)=>j.order-X.order).map((j)=>j.plugin),failures:J,warnings:Q}}import{existsSync as bP}from"node:fs";import{createRequire as kP}from"node:module";import{dirname as IP,join as q6}from"node:path";import{fileURLToPath as xP}from"node:url";var Pj={};q(Pj,{resolveSubprocessRuntimeExecutable:()=>y9,buildSubprocessSandboxCommand:()=>Gj,SubprocessSandbox:()=>Ef,CLINE_JS_RUNTIME_PATH_ENV:()=>Kj});import{spawn as SP}from"node:child_process";import{basename as CP}from"node:path";import{augmentNodeCommandForDebug as EP,withResolvedClineBuildEnv as hP}from"@cline/shared";function Aj($){if($ instanceof Error)return $;return Error(String($))}var Kj="CLINE_JS_RUNTIME_PATH";function Bj($){let f=$?.trim();if(!f)return!1;let J=CP(f).toLowerCase();return J==="node"||J==="node.exe"||J==="bun"||J==="bun.exe"}function y9($={}){let f=$.env??process.env,J=$.runtimeExecutable?.trim()||f[Kj]?.trim();if(J)return J;let Q=$.execPath?.trim()||process.execPath;if(Bj(Q))return Q;for(let Z of[f.BUN_EXEC_PATH,f.npm_node_execpath,f.NODE]){let W=Z?.trim();if(W&&Bj(W))return W}return"node"}function Gj($,f={}){let J=y9({env:f.env,execPath:f.execPath,runtimeExecutable:f.runtimeExecutable});return EP([J,...$],{env:f.env,execArgv:f.execArgv,debugRole:f.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class Ef{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let f=this.pending.get($);if(!f)return;if(this.pending.delete($),f.timeout)clearTimeout(f.timeout);return f}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],f=Gj($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),J=SP(f[0]??y9(this.options),f.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:hP(process.env)});this.process=J;let Q="",Z=(W)=>{let j=Q+W;Q=j.length>4000?j.slice(-4000):j};J.stderr?.setEncoding("utf8"),J.stderr?.on("data",(W)=>{Z(W)}),J.on("message",(W)=>{this.onMessage(W)}),J.on("error",(W)=>{this.failPending(Error(`${this.processLabel} process error: ${Aj(W).message}`))}),J.on("exit",(W,j)=>{this.process=null;let X=Q.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(W)}, signal=${String(j)})${X?`: ${X}`:""}`))})}async call($,f,J={}){this.start();let Q=this.process;if(!Q||Q.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let Z=`req_${++this.requestCounter}`,W={type:"call",id:Z,method:$,args:f};return await new Promise((j,X)=>{let H={resolve:(Y)=>j(Y),reject:X};if((J.timeoutMs??0)>0)H.timeout=setTimeout(()=>{this.clearPendingRequest(Z),this.shutdown().catch(()=>{}),X(Error(`${this.processLabel} call timed out after ${J.timeoutMs}ms: ${$}`))},J.timeoutMs);this.pending.set(Z,H),Q.send(W,(Y)=>{if(!Y)return;let V=this.clearPendingRequest(Z);if(!V)return;V.reject(Error(`${this.processLabel} failed to send call "${$}": ${Aj(Y).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((f)=>{let J=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}f()},300);$.once("exit",()=>{clearTimeout(J),f()});try{$.kill("SIGTERM")}catch{clearTimeout(J),f()}}),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 f=this.clearPendingRequest($.id);if(!f)return;if($.ok){f.resolve($.result);return}f.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[f,J]of this.pending.entries()){if(this.pending.delete(f),J.timeout)clearTimeout(J.timeout);J.reject($)}}}function gP($){return{...$,contributions:{tools:$.contributions?.tools??[],commands:$.contributions?.commands??[],messageBuilders:$.contributions?.messageBuilders??[],providers:$.contributions?.providers??[],automationEventTypes:$.contributions?.automationEventTypes??[],shortcuts:$.contributions?.shortcuts??[],flags:$.contributions?.flags??[]}}}function w6($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function mP(){let $=IP(xP(import.meta.url)),f=kP(import.meta.url),J=[q6($,"plugin-sandbox-bootstrap.js"),q6($,"extensions","plugin-sandbox-bootstrap.js"),q6($,"agents","plugin-sandbox-bootstrap.js")];for(let W of J)if(bP(W))return{file:W};let Q=q6($,"plugin-sandbox-bootstrap.ts"),Z="jiti";try{Z=f.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(Z)});`,`const jiti = createJiti(${JSON.stringify(Q)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(Q)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
139
+ `)}}var N9=mP();function T9($,f){return typeof $==="number"&&$>0?$:f}async function Dj($){let f=new Ef({name:"plugin-sandbox",..."file"in N9?{bootstrapFile:N9.file}:{bootstrapScript:N9.script},onEvent:$.onEvent}),J=T9($.importTimeoutMs,4000),Q=T9($.hookTimeoutMs,3000),Z=T9($.contributionTimeoutMs,60000),W={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},j,X=()=>{return j??=f.call("initialize",W,{timeoutMs:J}).finally(()=>{j=void 0}),j},H;try{H=await f.call("initialize",W,{timeoutMs:J})}catch(A){throw await f.shutdown().catch(()=>{}),A}return{extensions:H.plugins.map(gP).map((A)=>{let B={name:A.name,manifest:A.manifest,setup:(K)=>{vP(K,f,A,Z,X),cP(K,f,A,Z,X),dP(K,f,A,Z,X),uP(K,A)}};return B.hooks=pP(f,A,Q,X),B}),failures:H.failures,shutdown:async()=>{await f.shutdown()},warnings:H.warnings}}function vP($,f,J,Q,Z){for(let W of J.contributions?.tools??[]){let j={name:W.name,description:W.description??"",inputSchema:W.inputSchema??{type:"object",properties:{}},timeoutMs:W.timeoutMs,retryable:W.retryable,execute:async(X,H)=>{try{return await f.call("executeTool",{pluginId:J.pluginId,contributionId:W.id,input:X,context:H},{timeoutMs:Q})}catch(Y){if(!w6(Y))throw Y;return await Z(),await f.call("executeTool",{pluginId:J.pluginId,contributionId:W.id,input:X,context:H},{timeoutMs:Q})}}};$.registerTool(j)}}function cP($,f,J,Q,Z){for(let W of J.contributions?.commands??[])$.registerCommand({name:W.name,description:W.description,handler:async(j)=>{try{return await f.call("executeCommand",{pluginId:J.pluginId,contributionId:W.id,input:j},{timeoutMs:Q})}catch(X){if(!w6(X))throw X;return await Z(),await f.call("executeCommand",{pluginId:J.pluginId,contributionId:W.id,input:j},{timeoutMs:Q})}}})}function uP($,f){for(let J of f.contributions?.providers??[])$.registerProvider({name:J.name,description:J.description,metadata:J.metadata});for(let J of f.contributions?.automationEventTypes??[])$.registerAutomationEventType({eventType:J.eventType,source:J.source,description:J.description,attributesSchema:J.attributesSchema,payloadSchema:J.payloadSchema,examples:J.examples,metadata:J.metadata})}function dP($,f,J,Q,Z){for(let W of J.contributions?.messageBuilders??[])$.registerMessageBuilder({name:W.name,async build(j){try{let X=await f.call("buildMessages",{pluginId:J.pluginId,contributionId:W.id,messages:j},{timeoutMs:Q});return Fj(X)?X:j}catch(X){if(!w6(X))throw X;await Z();let H=await f.call("buildMessages",{pluginId:J.pluginId,contributionId:W.id,messages:j},{timeoutMs:Q});return Fj(H)?H:j}}})}function Fj($){return Array.isArray($)&&$.every((f)=>typeof f==="object"&&f!==null&&("role"in f)&&("content"in f))}function lP($,f,J,Q,Z){return async(W)=>{try{return await $.call("invokeHook",{pluginId:f,hookName:J,payload:W},{timeoutMs:Q})}catch(j){if(!w6(j))throw j;return await Z(),await $.call("invokeHook",{pluginId:f,hookName:J,payload:W},{timeoutMs:Q})}}}function pP($,f,J,Q){let Z={};for(let W of f.hooks??[])Z[W]=lP($,f.pluginId,W,J,Q);return Object.keys(Z).length>0?Z:void 0}function B8($){return aP($)}function K8($){return iP($)}function h1($={}){let f=$.cwd??process.cwd(),J=B8($.workspacePath).flatMap((j)=>K8(j)).filter((j)=>rP(j)),Q=nP($.pluginPaths??[],f),Z=[],W=new Set;for(let j of[...Q,...J]){if(W.has(j))continue;W.add(j),Z.push(j)}return _6(Z)}async function hf($={}){let f=h1($);if(f.length===0)return{extensions:[],failures:[],warnings:[]};if($.mode==="in_process"){let Q=await T$(f,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:Q.plugins,failures:Q.failures,warnings:Q.warnings}}let J=await Dj({pluginPaths:f,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:J.extensions??[],shutdown:J.shutdown,failures:J.failures,warnings:J.warnings}}import{execFile as tP}from"node:child_process";import{promisify as sP}from"node:util";var oP=sP(tP);function M9($,f){$?.log(f,{severity:"warn"})}function eP($){let f=$?.checkpoint;if(!f||typeof f!=="object"||Array.isArray(f))return;let J=f;if(!J.latest||!Array.isArray(J.history))return;let Q=J.latest,Z=J.history.filter((W)=>!!W&&typeof W==="object"&&typeof W.ref==="string"&&typeof W.createdAt==="number"&&typeof W.runCount==="number");if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")return;return{latest:Q,history:Z}}async function b1($,f){let J=await oP("git",["-C",$,...f],{windowsHide:!0});return{stdout:J.stdout.trim(),stderr:J.stderr.trim()}}async function q9($,f){if(!$)return;let J=`refs/cline/checkpoints/${f}/`;try{let{stdout:Q}=await b1($,["for-each-ref","--format=%(refname)",J]),Z=Q.trim().split(`
140
140
  `).filter(Boolean);await Promise.allSettled(Z.map((W)=>b1($,["update-ref","-d",W])))}catch{}}async function Rj($,f,J){if(!$||J.length===0)return;await Promise.allSettled(J.map((Q)=>b1($,["update-ref",`refs/cline/checkpoints/${f}/${Q.runCount}`,Q.ref])))}function $F($,f){let J=$.findIndex((Q)=>Q.runCount===f.runCount);if(J<0)return[...$,f];return $.map((Q,Z)=>Z===J?f:Q)}function Uj($){let f=$.initialRunCount??0,J,Q=async()=>{if(J!==void 0)return J;try{J=(await b1($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{J=!1}return J},Z=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:f});if(!await Q())return;let W=async(Y)=>{try{let A=(await b1($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!A)return;return{ref:A,createdAt:Date.now(),runCount:f,kind:"commit"}}catch(V){M9($.logger,`${Y}: ${V instanceof Error?V.message:String(V)}`);return}},j=`cline checkpoint session=${$.sessionId} run=${f}`,X="";try{X=(await b1($.cwd,["stash","create",j])).stdout.trim()}catch(Y){return M9($.logger,`Checkpoint snapshot failed: ${Y instanceof Error?Y.message:String(Y)}`),W("Checkpoint HEAD fallback failed")}if(!X)return W("Checkpoint HEAD fallback failed");let H=`refs/cline/checkpoints/${$.sessionId}/${f}`;try{await b1($.cwd,["update-ref",H,X])}catch(Y){M9($.logger,`Checkpoint store failed: ${Y instanceof Error?Y.message:String(Y)}`);return}return{ref:X,createdAt:Date.now(),runCount:f,kind:"stash"}};return{beforeRun:async({snapshot:W})=>{if(W.parentAgentId!=null)return;f+=1;return},beforeModel:async({snapshot:W})=>{if(W.parentAgentId!=null||W.iteration!==1||f<1)return;let j=await Z();if(!j)return;let X=await $.readSessionMetadata(),H=eP(X);if(H?.latest.ref===j.ref)return;let Y=$F(H?.history??[],j);await $.writeSessionMetadata({...X??{},checkpoint:{latest:j,history:Y}});return}}}import{spawn as YF}from"node:child_process";import{appendFileSync as VF,readFileSync as AF}from"node:fs";import{join as BF}from"node:path";import{augmentNodeCommandForDebug as zj,withResolvedClineBuildEnv as C9}from"@cline/shared";import{ensureHookLogDir as Lj}from"@cline/shared/storage";function bf($,f){if(!f)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:f}}import{existsSync as fF,readdirSync as JF}from"node:fs";import{basename as QF,extname as ZF,join as WF}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as S6,resolveHooksConfigSearchPaths as jF}from"@cline/shared/storage";function G8($){return jF($)}var kf;((V)=>{V.TaskStart="TaskStart";V.TaskResume="TaskResume";V.TaskCancel="TaskCancel";V.TaskComplete="TaskComplete";V.TaskError="TaskError";V.PreToolUse="PreToolUse";V.PostToolUse="PostToolUse";V.UserPromptSubmit="UserPromptSubmit";V.PreCompact="PreCompact";V.SessionShutdown="SessionShutdown"})(kf||={});var P8={["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"},XF=new Map(Object.values(kf).map(($)=>[$.toLowerCase(),$])),HF=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function F8($){let f=ZF($).toLowerCase();if(!HF.has(f))return;let J=QF($,f).trim().toLowerCase();return XF.get(J)}function s$($){let f=[],J=new Set,Q=G8($).filter((Z)=>fF(Z));for(let Z of Q)try{for(let W of JF(Z,{withFileTypes:!0})){if(!W.isFile())continue;let j=F8(W.name);if(!j)continue;let X=WF(Z,W.name);if(J.has(X))continue;J.add(X),f.push({fileName:j,hookEventName:P8[j],path:X})}}catch{}return f.sort((Z,W)=>Z.path.localeCompare(W.path))}function E6($){if(!$||typeof $!=="object")return{};let f={};for(let[J,Q]of Object.entries($))f[J]=typeof Q==="string"?Q:JSON.stringify(Q);return f}function C6($,f,J){let Q=J instanceof Error?`: ${J.message}`:"",Z=`${f}${Q}`;if($){try{$.log(Z,{severity:"warn",...J!==void 0?{error:J}:{}})}catch{}return}console.warn(Z)}function KF($,f){if(!f)return $;if(!$)return{...f};let J=[$.context,f.context].filter((Z)=>typeof Z==="string"&&Z.length>0).join(`
141
141
  `),Q=[...$.appendMessages??[],...f.appendMessages??[]];return{cancel:$.cancel===!0||f.cancel===!0?!0:void 0,review:$.review===!0||f.review===!0?!0:void 0,context:J||void 0,overrideInput:f.overrideInput!==void 0?f.overrideInput:$.overrideInput,systemPrompt:f.systemPrompt!==void 0?f.systemPrompt:$.systemPrompt,appendMessages:Q.length>0?Q:void 0}}function GF($){if(!$||typeof $!=="object")return;let f=$,J=typeof f.context==="string"?f.context:typeof f.contextModification==="string"?f.contextModification:typeof f.errorMessage==="string"?f.errorMessage:void 0;return{cancel:typeof f.cancel==="boolean"?f.cancel:void 0,review:typeof f.review==="boolean"?f.review:void 0,context:J,overrideInput:Object.hasOwn(f,"overrideInput")?f.overrideInput:void 0}}function w9($){let f=String($??"").toLowerCase();return f.includes("cancel")||f.includes("abort")||f.includes("interrupt")}function P0($,f){let J=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",Q={rootSessionId:f.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:Q,workspaceRoots:f.workspacePath?[f.workspacePath]:[],workspaceInfo:f.workspaceInfo,userId:J,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function PF($){let f=$.trim();if(!f)return{};let Q=f.split(`
142
- `).map((W)=>W.trim()).filter(Boolean).filter((W)=>W.startsWith("HOOK_CONTROL\t")).map((W)=>W.slice(13)),Z=Q.length>0?Q[Q.length-1]:f;try{return{parsedJson:JSON.parse(Z)}}catch(W){return{parseError:W instanceof Error?W.message:"Failed to parse hook stdout JSON"}}}async function FF($,f){let J=$.stdin;if(!J)throw Error("hook command failed to create stdin");await new Promise((Q,Z)=>{let W=!1,j=()=>{J.off("error",H),J.off("finish",Y),$.off("close",V)},X=(A)=>{if(W)return;if(W=!0,j(),A){let B=A.code;if(B==="EPIPE"||B==="ERR_STREAM_DESTROYED"){Q();return}Z(A);return}Q()},H=(A)=>X(A),Y=()=>X(),V=()=>X();J.on("error",H),J.once("finish",Y),$.once("close",V);try{J.end(f)}catch(A){X(A)}})}async function _j($,f){if(f.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await Oj($,f)}catch(J){let Q=UF(f.command,process.platform,J);if(!Q)throw J;return await Oj($,{...f,command:Q})}}async function Oj($,f){let J=zj(f.command,{env:f.env,debugRole:"hook"}),Q=YF(J[0],J.slice(1),{cwd:f.cwd,env:C9(f.env),stdio:f.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:f.detached}),Z=new Promise((B)=>{Q.once("spawn",()=>B())}),W=new Promise((B,K)=>{Q.once("error",(G)=>K(G))}),j=JSON.stringify($);if(await Promise.race([Z,W]),await FF(Q,j),f.detached){Q.unref();return}if(!Q.stdout||!Q.stderr)throw Error("hook command failed to create stdout/stderr");let X="",H="",Y=!1,V;Q.stdout.on("data",(B)=>{X+=B.toString()}),Q.stderr.on("data",(B)=>{H+=B.toString()});let A=new Promise((B)=>{if((f.timeoutMs??0)>0)V=setTimeout(()=>{Y=!0,Q.kill("SIGKILL")},f.timeoutMs);Q.once("close",(K)=>{if(V)clearTimeout(V);let{parsedJson:G,parseError:R}=PF(X);B({exitCode:K,stdout:X,stderr:H,parsedJson:G,parseError:R,timedOut:Y})})});return await Promise.race([A,W])}function DF($){try{let J=AF($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!J?.startsWith("#!"))return;let Q=J.slice(2).trim();if(!Q)return;let Z=Q.split(/\s+/).filter(Boolean);return Z.length>0?Z:void 0}catch{return}}function RF($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function UF($,f=process.platform,J){if(f!=="win32"||!RF(J))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function yj($){if($.length===0)return;let[f,...J]=$,Q=f.replace(/\\/g,"/").toLowerCase(),Z=Q.split("/").at(-1)??Q;if(Z==="env")return yj(J);if(Z==="bash"||Z==="sh"||Z==="zsh")return[Z,...J];if(Z==="python3"||Z==="python")return process.platform==="win32"?["py","-3",...J]:[Z,...J];return $}function LF($){let f=DF($);if(f&&f.length>0)return[...yj(f)??f,$];let J=$.toLowerCase();if(J.endsWith(".sh")||J.endsWith(".bash")||J.endsWith(".zsh"))return["bash",$];if(J.endsWith(".js")||J.endsWith(".mjs")||J.endsWith(".cjs"))return zj(["node",$],{debugRole:"hook"});if(J.endsWith(".ts")||J.endsWith(".mts")||J.endsWith(".cts"))return["bun","run",$];if(J.endsWith(".py"))return process.platform==="win32"?["py","-3",$]:["python3",$];if(J.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",$];return["bash",$]}function OF($){let f={};for(let J of s$($)){if(!J.hookEventName)continue;let Q=J.hookEventName,Z=f[Q]??[];Z.push(LF(J.path)),f[Q]=Z}return f}async function zF($){let f;for(let J of $.commands){let Q=J.join(" ");try{let Z=await _j($.payload,{command:J,cwd:$.cwd,env:C9(process.env),detached:!1,timeoutMs:$.timeoutMs});if(Z?.timedOut){C6($.logger,`hook command timed out: ${Q}`);continue}if(Z?.parseError){C6($.logger,`hook command returned invalid JSON control output: ${Q} (${Z.parseError})`);continue}f=KF(f,GF(Z?.parsedJson))}catch(Z){C6($.logger,`hook command failed: ${Q}`,Z)}}return f}function k1($){for(let f of $.commands){let J=f.join(" ");_j($.payload,{command:f,cwd:$.cwd,env:C9(process.env),detached:!0}).catch((Q)=>{C6($.logger,`hook command failed: ${J}`,Q)})}}function o$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function S9($,f){return{...o$($.snapshot),userMessage:f}}function Tj($){return{...o$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function Nj($){return{...o$($.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 Mj($){return $.filter((f)=>f.type==="text"&&typeof f.text==="string").map((f)=>f.text).join("")}function _F($){if(!$)return;let f={};if($.cancel===!0)f.stop=!0;if($.overrideInput!==void 0)f.input=$.overrideInput;return Object.keys(f).length>0?f:void 0}function If($){let f={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},J=(Q)=>{let Z=`${JSON.stringify({ts:new Date().toISOString(),...Q})}
143
- `,j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??BF(Lj(),"hooks.jsonl");Lj(j),VF(j,Z,"utf8")};return{beforeRun:async(Q)=>{let Z=S9(Q,"");J({...P0(Z,f),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Q)=>{let Z=Tj(Q);J({...P0(Z,f),hookName:"tool_call",iteration:Z.iteration,tool_call:{id:Z.call.id,name:Z.call.name,input:Z.call.input},preToolUse:{toolName:Z.call.name,parameters:E6(Z.call.input)}});return},afterTool:async(Q)=>{let Z=Nj(Q);J({...P0(Z,f),hookName:"tool_result",iteration:Z.iteration,tool_result:Z.record,postToolUse:{toolName:Z.record.name,parameters:E6(Z.record.input),result:typeof Z.record.output==="string"?Z.record.output:JSON.stringify(Z.record.output),success:!Z.record.error,executionTimeMs:Z.record.durationMs}});return},afterRun:async({snapshot:Q,result:Z})=>{let W=o$(Q);if(Z.status==="completed"){J({...P0(W,f),hookName:"agent_end",iteration:Z.iterations,turn:{outputText:Z.outputText,status:Z.status},taskComplete:{taskMetadata:{}}});return}if(Z.status==="aborted"||w9(Z.error?.message)){J({...P0(W,f),hookName:"agent_abort",reason:Z.error?.message,taskCancel:{taskMetadata:{}}});return}if(Z.error)J({...P0(W,f),hookName:"agent_error",iteration:Z.iterations,error:{name:Z.error.name,message:Z.error.message,stack:Z.error.stack}})},onEvent:async(Q)=>{if(Q.type!=="message-added"||Q.message.role!=="user")return;let Z=S9({snapshot:Q.snapshot},Mj(Q.message.content));J({...P0(Z,f),hookName:"prompt_submit",userPromptSubmit:{prompt:Z.userMessage,attachments:[]}})}}}function D8($){let f=OF($.workspacePath);if(!Object.values(f).some((A)=>A.length>0))return;let Q=async(A,B)=>{let K=f[B]??[];if(K.length===0)return;k1({commands:K,cwd:$.cwd,logger:$.logger,payload:B==="agent_resume"?{...P0(A,$),hookName:B,taskResume:{taskMetadata:{},previousState:{}}}:{...P0(A,$),hookName:B,taskStart:{taskMetadata:{}}}})},Z=async(A)=>{let B=f.prompt_submit??[];if(B.length>0)k1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...P0(A,$),hookName:"prompt_submit",userPromptSubmit:{prompt:A.userMessage,attachments:[]}}})},W=async(A)=>{let B=f.tool_call??[];if(B.length===0)return;return zF({commands:B,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...P0(A,$),hookName:"tool_call",iteration:A.iteration,tool_call:{id:A.call.id,name:A.call.name,input:A.call.input},preToolUse:{toolName:A.call.name,parameters:E6(A.call.input)}}})},j=async(A)=>{let B=f.tool_result??[];if(B.length===0)return;k1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...P0(A,$),hookName:"tool_result",iteration:A.iteration,tool_result:A.record,postToolUse:{toolName:A.record.name,parameters:E6(A.record.input),result:typeof A.record.output==="string"?A.record.output:JSON.stringify(A.record.output),success:!A.record.error,executionTimeMs:A.record.durationMs}}})},X=async(A)=>{let B=f.agent_end??[];if(B.length===0)return;k1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...P0(A,$),hookName:"agent_end",iteration:A.iteration,turn:A.turn,taskComplete:{taskMetadata:{}}}})},H=async(A)=>{let B=f.agent_error??[];if(B.length===0)return;k1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...P0(A,$),hookName:"agent_error",iteration:A.iteration,error:{name:A.error.name,message:A.error.message,stack:A.error.stack}}})},Y=async(A)=>{if(w9(A.reason)){let K=f.agent_abort??[];if(K.length>0)k1({commands:K,cwd:$.cwd,logger:$.logger,payload:{...P0(A,$),hookName:"agent_abort",reason:A.reason,taskCancel:{taskMetadata:{}}}})}let B=f.session_shutdown??[];if(B.length===0)return;k1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...P0(A,$),hookName:"session_shutdown",reason:A.reason}})},V={};if((f.agent_start?.length??0)>0||(f.agent_resume?.length??0)>0||(f.prompt_submit?.length??0)>0){if((f.agent_start?.length??0)>0||(f.agent_resume?.length??0)>0)V.beforeRun=async(A)=>{let B=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await Q(o$(A.snapshot),B);return};if((f.prompt_submit?.length??0)>0)V.onEvent=async(A)=>{if(A.type!=="message-added"||A.message.role!=="user")return;await Z(S9({snapshot:A.snapshot},Mj(A.message.content)))}}if((f.tool_call?.length??0)>0)V.beforeTool=async(A)=>{let B=await W(Tj(A));return _F(B)};if((f.tool_result?.length??0)>0)V.afterTool=async(A)=>{await j(Nj(A));return};if((f.agent_end?.length??0)>0)V.afterRun=async({snapshot:A,result:B})=>{if(B.status!=="completed")return;await X({...o$(A),iteration:B.iterations,turn:{outputText:B.outputText,status:B.status}})};if((f.agent_error?.length??0)>0||(f.agent_abort?.length??0)>0||(f.session_shutdown?.length??0)>0){let A=V.afterRun;V.afterRun=async(B)=>{await A?.(B);let{snapshot:K,result:G}=B;if(G.status==="aborted"||w9(G.error?.message)){await Y({...o$(K),reason:G.error?.message});return}if(G.error)await H({...o$(K),iteration:G.iterations,error:G.error})}}return V}function xf($){return bf("core.hook_config_files",D8($))}function I1($,f){let J=$.map((Q)=>Q[f]).filter((Q)=>typeof Q==="function");if(J.length===0)return;return async(Q)=>{let Z;for(let W of J){let j=await W(Q);if(!j||typeof j!=="object")continue;let X=j;Z={...Z??{},...X,stop:Z?.stop===!0||X.stop===!0?!0:X.stop,options:Z?.options||X.options?{...Z?.options??{},...X.options??{}}:void 0}}return Z}}function x1($){let f=$.filter((J)=>J!==void 0);if(f.length===0)return;return{beforeRun:I1(f,"beforeRun"),afterRun:I1(f,"afterRun"),beforeModel:I1(f,"beforeModel"),afterModel:I1(f,"afterModel"),beforeTool:I1(f,"beforeTool"),afterTool:I1(f,"afterTool"),onEvent:I1(f,"onEvent")}}var qj={};q(qj,{normalizeRuntimeCapabilities:()=>F0});function F0(...$){let f,J;for(let Z of $){if(!Z)continue;if(Z.toolExecutors)f={...f??{},...Z.toolExecutors};if(Z.requestToolApproval)J=Z.requestToolApproval}let Q=f&&Object.keys(f).length>0;if(!Q&&!J)return;return{...Q?{toolExecutors:f}:{},...J?{requestToolApproval:J}:{}}}var oj={};q(oj,{toProviderConfig:()=>I0,emptyStoredProviderSettings:()=>J1,StoredProviderSettingsSchema:()=>cf,StoredProviderSettingsEntrySchema:()=>JJ,ProviderSettingsSchemaTyped:()=>M8});import{z as f1}from"zod";var sj={};q(sj,{toProviderConfig:()=>I0,safeParseSettings:()=>fJ,safeCreateProviderConfig:()=>n9,parseSettings:()=>$J,normalizeProviderId:()=>vf,isBuiltInProviderId:()=>r9,createProviderConfig:()=>i9,SapSettingsSchema:()=>s6,ReasoningSettingsSchema:()=>i6,ProviderSettingsSchema:()=>$1,ProviderProtocolSchema:()=>l6,ProviderIdSchema:()=>N8,ProviderClientSchema:()=>p6,OcaSettingsSchema:()=>o6,ModelCatalogSettingsSchema:()=>e6,GcpSettingsSchema:()=>a6,BUILT_IN_PROVIDER_IDS:()=>p9,BUILT_IN_PROVIDER:()=>T8,AzureSettingsSchema:()=>t6,AwsSettingsSchema:()=>n6,AuthSettingsSchema:()=>r6});import*as k0 from"@cline/llms";import{z as T}from"zod";T0();var lj={};q(lj,{refreshOcaToken:()=>U8,loginOcaOAuth:()=>gf,getValidOcaCredentials:()=>L8,generateOcaOpcRequestId:()=>I6,createOcaRequestHeaders:()=>k9,createOcaOAuthProvider:()=>b9,OCI_HEADER_OPC_REQUEST_ID:()=>xj,DEFAULT_INTERNAL_OCA_BASE_URL:()=>h6,DEFAULT_INTERNAL_IDCS_URL:()=>Ej,DEFAULT_INTERNAL_IDCS_SCOPES:()=>hj,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>Cj,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>b6,DEFAULT_EXTERNAL_IDCS_URL:()=>kj,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>Ij,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>bj});import{nanoid as Sj}from"nanoid";class E9{ttlMs;maxEntries;entries=new Map;constructor($,f){this.ttlMs=$;this.maxEntries=f}get($,f=Date.now()){this.pruneExpired(f);let J=this.entries.get($);if(!J)return;return this.entries.delete($),this.entries.set($,J),J.value}set($,f,J=Date.now(),Q=this.ttlMs){this.pruneExpired(J),this.entries.delete($);while(this.entries.size>=this.maxEntries){let Z=this.entries.keys().next().value;if(Z===void 0)break;this.entries.delete(Z)}this.entries.set($,{value:f,expiresAt:J+Q})}pruneExpired($){for(let[f,J]of this.entries)if(J.expiresAt<=$)this.entries.delete(f)}}var wj={};q(wj,{startLocalOAuthServer:()=>a0});function yF(){let $;return{promise:new Promise((J)=>{$=J}),resolve:$}}async function a0($){let f=await import("node:http"),J=$.host??"127.0.0.1",Q=$.timeoutMs??300000,Z=$.successHtml??TF,W=yF(),j=!1,X=null,H=null,Y=null,V=(K)=>{if(j)return;j=!0,W.resolve(K)},A=()=>{if(X)clearTimeout(X),X=null;let K=Y;if(Y=null,H)H.close(),H=null;if(K!==null&&$.onClose)Promise.resolve($.onClose({host:J,port:K})).catch(()=>{})},B=async()=>{return X=setTimeout(()=>{A(),V(null)},Q),W.promise};for(let K of $.ports){let G=f.createServer((F,P)=>{try{let D=new URL(F.url||"",`http://${J}:${K}`);if(D.pathname!==$.callbackPath){P.statusCode=404,P.end("Not found");return}let O={url:D,code:D.searchParams.get("code")??void 0,state:D.searchParams.get("state")??void 0,provider:D.searchParams.get("provider")??void 0,error:D.searchParams.get("error")??void 0};if(O.error){P.statusCode=400,P.end(`Authentication failed: ${O.error}`),A(),V(O);return}if(!O.code){P.statusCode=400,P.end("Missing authorization code");return}if($.expectedState&&O.state!==$.expectedState){P.statusCode=400,P.end("State mismatch");return}P.statusCode=200,P.setHeader("Content-Type","text/html; charset=utf-8"),P.end(Z),A(),V(O)}catch{P.statusCode=500,P.end("Internal error")}}),R=await new Promise((F)=>{let P=(D)=>{G.off("error",P),F({bound:!1,error:D})};G.once("error",P),G.listen(K,J,()=>{G.off("error",P),H=G,F({bound:!0})})});if(R.error){if(R.error.code==="EADDRINUSE")continue;throw A(),R.error}if(R.bound){Y=K;let F=`http://${J}:${K}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:J,port:K,callbackUrl:F})).catch(()=>{});return{callbackUrl:F,waitForCallback:B,cancelWait:()=>{A(),V(null)},close:()=>{A(),V(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var TF=`<!DOCTYPE html>
142
+ `).map((W)=>W.trim()).filter(Boolean).filter((W)=>W.startsWith("HOOK_CONTROL\t")).map((W)=>W.slice(13)),Z=Q.length>0?Q[Q.length-1]:f;try{return{parsedJson:JSON.parse(Z)}}catch(W){return{parseError:W instanceof Error?W.message:"Failed to parse hook stdout JSON"}}}async function FF($,f){let J=$.stdin;if(!J)throw Error("hook command failed to create stdin");await new Promise((Q,Z)=>{let W=!1,j=()=>{J.off("error",H),J.off("finish",Y),$.off("close",V)},X=(A)=>{if(W)return;if(W=!0,j(),A){let B=A.code;if(B==="EPIPE"||B==="ERR_STREAM_DESTROYED"){Q();return}Z(A);return}Q()},H=(A)=>X(A),Y=()=>X(),V=()=>X();J.on("error",H),J.once("finish",Y),$.once("close",V);try{J.end(f)}catch(A){X(A)}})}async function _j($,f){if(f.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await Oj($,f)}catch(J){let Q=UF(f.command,process.platform,J);if(!Q)throw J;return await Oj($,{...f,command:Q})}}async function Oj($,f){let J=zj(f.command,{env:f.env,debugRole:"hook"}),Q=YF(J[0],J.slice(1),{cwd:f.cwd,env:C9(f.env),stdio:f.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:f.detached}),Z=new Promise((B)=>{Q.once("spawn",()=>B())}),W=new Promise((B,K)=>{Q.once("error",(G)=>K(G))}),j=JSON.stringify($);if(await Promise.race([Z,W]),await FF(Q,j),f.detached){Q.unref();return}if(!Q.stdout||!Q.stderr)throw Error("hook command failed to create stdout/stderr");let X="",H="",Y=!1,V;Q.stdout.on("data",(B)=>{X+=B.toString()}),Q.stderr.on("data",(B)=>{H+=B.toString()});let A=new Promise((B)=>{if((f.timeoutMs??0)>0)V=setTimeout(()=>{Y=!0,Q.kill("SIGKILL")},f.timeoutMs);Q.once("close",(K)=>{if(V)clearTimeout(V);let{parsedJson:G,parseError:R}=PF(X);B({exitCode:K,stdout:X,stderr:H,parsedJson:G,parseError:R,timedOut:Y})})});return await Promise.race([A,W])}function DF($){try{let J=AF($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!J?.startsWith("#!"))return;let Q=J.slice(2).trim();if(!Q)return;let Z=Q.split(/\s+/).filter(Boolean);return Z.length>0?Z:void 0}catch{return}}function RF($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function UF($,f=process.platform,J){if(f!=="win32"||!RF(J))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function yj($){if($.length===0)return;let[f,...J]=$,Q=f.replace(/\\/g,"/").toLowerCase(),Z=Q.split("/").at(-1)??Q;if(Z==="env")return yj(J);if(Z==="bash"||Z==="sh"||Z==="zsh")return[Z,...J];if(Z==="python3"||Z==="python")return process.platform==="win32"?["py","-3",...J]:[Z,...J];return $}function LF($){let f=DF($);if(f&&f.length>0)return[...yj(f)??f,$];let J=$.toLowerCase();if(J.endsWith(".sh")||J.endsWith(".bash")||J.endsWith(".zsh"))return["bash",$];if(J.endsWith(".js")||J.endsWith(".mjs")||J.endsWith(".cjs"))return zj(["node",$],{debugRole:"hook"});if(J.endsWith(".ts")||J.endsWith(".mts")||J.endsWith(".cts"))return["bun","run",$];if(J.endsWith(".py"))return process.platform==="win32"?["py","-3",$]:["python3",$];if(J.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",$];return["bash",$]}function OF($){let f={};for(let J of s$($)){if(!J.hookEventName)continue;let Q=J.hookEventName,Z=f[Q]??[];Z.push(LF(J.path)),f[Q]=Z}return f}async function zF($){let f;for(let J of $.commands){let Q=J.join(" ");try{let Z=await _j($.payload,{command:J,cwd:$.cwd,env:C9(process.env),detached:!1,timeoutMs:$.timeoutMs});if(Z?.timedOut){C6($.logger,`hook command timed out: ${Q}`);continue}if(Z?.parseError){C6($.logger,`hook command returned invalid JSON control output: ${Q} (${Z.parseError})`);continue}f=KF(f,GF(Z?.parsedJson))}catch(Z){C6($.logger,`hook command failed: ${Q}`,Z)}}return f}function k1($){for(let f of $.commands){let J=f.join(" ");_j($.payload,{command:f,cwd:$.cwd,env:C9(process.env),detached:!0}).catch((Q)=>{C6($.logger,`hook command failed: ${J}`,Q)})}}function o$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function S9($,f){return{...o$($.snapshot),userMessage:f}}function Nj($){return{...o$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function Tj($){return{...o$($.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 Mj($){return $.filter((f)=>f.type==="text"&&typeof f.text==="string").map((f)=>f.text).join("")}function _F($){if(!$)return;let f={};if($.cancel===!0)f.stop=!0;if($.overrideInput!==void 0)f.input=$.overrideInput;return Object.keys(f).length>0?f:void 0}function If($){let f={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},J=(Q)=>{let Z=`${JSON.stringify({ts:new Date().toISOString(),...Q})}
143
+ `,j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??BF(Lj(),"hooks.jsonl");Lj(j),VF(j,Z,"utf8")};return{beforeRun:async(Q)=>{let Z=S9(Q,"");J({...P0(Z,f),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Q)=>{let Z=Nj(Q);J({...P0(Z,f),hookName:"tool_call",iteration:Z.iteration,tool_call:{id:Z.call.id,name:Z.call.name,input:Z.call.input},preToolUse:{toolName:Z.call.name,parameters:E6(Z.call.input)}});return},afterTool:async(Q)=>{let Z=Tj(Q);J({...P0(Z,f),hookName:"tool_result",iteration:Z.iteration,tool_result:Z.record,postToolUse:{toolName:Z.record.name,parameters:E6(Z.record.input),result:typeof Z.record.output==="string"?Z.record.output:JSON.stringify(Z.record.output),success:!Z.record.error,executionTimeMs:Z.record.durationMs}});return},afterRun:async({snapshot:Q,result:Z})=>{let W=o$(Q);if(Z.status==="completed"){J({...P0(W,f),hookName:"agent_end",iteration:Z.iterations,turn:{outputText:Z.outputText,status:Z.status},taskComplete:{taskMetadata:{}}});return}if(Z.status==="aborted"||w9(Z.error?.message)){J({...P0(W,f),hookName:"agent_abort",reason:Z.error?.message,taskCancel:{taskMetadata:{}}});return}if(Z.error)J({...P0(W,f),hookName:"agent_error",iteration:Z.iterations,error:{name:Z.error.name,message:Z.error.message,stack:Z.error.stack}})},onEvent:async(Q)=>{if(Q.type!=="message-added"||Q.message.role!=="user")return;let Z=S9({snapshot:Q.snapshot},Mj(Q.message.content));J({...P0(Z,f),hookName:"prompt_submit",userPromptSubmit:{prompt:Z.userMessage,attachments:[]}})}}}function D8($){let f=OF($.workspacePath);if(!Object.values(f).some((A)=>A.length>0))return;let Q=async(A,B)=>{let K=f[B]??[];if(K.length===0)return;k1({commands:K,cwd:$.cwd,logger:$.logger,payload:B==="agent_resume"?{...P0(A,$),hookName:B,taskResume:{taskMetadata:{},previousState:{}}}:{...P0(A,$),hookName:B,taskStart:{taskMetadata:{}}}})},Z=async(A)=>{let B=f.prompt_submit??[];if(B.length>0)k1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...P0(A,$),hookName:"prompt_submit",userPromptSubmit:{prompt:A.userMessage,attachments:[]}}})},W=async(A)=>{let B=f.tool_call??[];if(B.length===0)return;return zF({commands:B,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...P0(A,$),hookName:"tool_call",iteration:A.iteration,tool_call:{id:A.call.id,name:A.call.name,input:A.call.input},preToolUse:{toolName:A.call.name,parameters:E6(A.call.input)}}})},j=async(A)=>{let B=f.tool_result??[];if(B.length===0)return;k1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...P0(A,$),hookName:"tool_result",iteration:A.iteration,tool_result:A.record,postToolUse:{toolName:A.record.name,parameters:E6(A.record.input),result:typeof A.record.output==="string"?A.record.output:JSON.stringify(A.record.output),success:!A.record.error,executionTimeMs:A.record.durationMs}}})},X=async(A)=>{let B=f.agent_end??[];if(B.length===0)return;k1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...P0(A,$),hookName:"agent_end",iteration:A.iteration,turn:A.turn,taskComplete:{taskMetadata:{}}}})},H=async(A)=>{let B=f.agent_error??[];if(B.length===0)return;k1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...P0(A,$),hookName:"agent_error",iteration:A.iteration,error:{name:A.error.name,message:A.error.message,stack:A.error.stack}}})},Y=async(A)=>{if(w9(A.reason)){let K=f.agent_abort??[];if(K.length>0)k1({commands:K,cwd:$.cwd,logger:$.logger,payload:{...P0(A,$),hookName:"agent_abort",reason:A.reason,taskCancel:{taskMetadata:{}}}})}let B=f.session_shutdown??[];if(B.length===0)return;k1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...P0(A,$),hookName:"session_shutdown",reason:A.reason}})},V={};if((f.agent_start?.length??0)>0||(f.agent_resume?.length??0)>0||(f.prompt_submit?.length??0)>0){if((f.agent_start?.length??0)>0||(f.agent_resume?.length??0)>0)V.beforeRun=async(A)=>{let B=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await Q(o$(A.snapshot),B);return};if((f.prompt_submit?.length??0)>0)V.onEvent=async(A)=>{if(A.type!=="message-added"||A.message.role!=="user")return;await Z(S9({snapshot:A.snapshot},Mj(A.message.content)))}}if((f.tool_call?.length??0)>0)V.beforeTool=async(A)=>{let B=await W(Nj(A));return _F(B)};if((f.tool_result?.length??0)>0)V.afterTool=async(A)=>{await j(Tj(A));return};if((f.agent_end?.length??0)>0)V.afterRun=async({snapshot:A,result:B})=>{if(B.status!=="completed")return;await X({...o$(A),iteration:B.iterations,turn:{outputText:B.outputText,status:B.status}})};if((f.agent_error?.length??0)>0||(f.agent_abort?.length??0)>0||(f.session_shutdown?.length??0)>0){let A=V.afterRun;V.afterRun=async(B)=>{await A?.(B);let{snapshot:K,result:G}=B;if(G.status==="aborted"||w9(G.error?.message)){await Y({...o$(K),reason:G.error?.message});return}if(G.error)await H({...o$(K),iteration:G.iterations,error:G.error})}}return V}function xf($){return bf("core.hook_config_files",D8($))}function I1($,f){let J=$.map((Q)=>Q[f]).filter((Q)=>typeof Q==="function");if(J.length===0)return;return async(Q)=>{let Z;for(let W of J){let j=await W(Q);if(!j||typeof j!=="object")continue;let X=j;Z={...Z??{},...X,stop:Z?.stop===!0||X.stop===!0?!0:X.stop,options:Z?.options||X.options?{...Z?.options??{},...X.options??{}}:void 0}}return Z}}function x1($){let f=$.filter((J)=>J!==void 0);if(f.length===0)return;return{beforeRun:I1(f,"beforeRun"),afterRun:I1(f,"afterRun"),beforeModel:I1(f,"beforeModel"),afterModel:I1(f,"afterModel"),beforeTool:I1(f,"beforeTool"),afterTool:I1(f,"afterTool"),onEvent:I1(f,"onEvent")}}var qj={};q(qj,{normalizeRuntimeCapabilities:()=>F0});function F0(...$){let f,J;for(let Z of $){if(!Z)continue;if(Z.toolExecutors)f={...f??{},...Z.toolExecutors};if(Z.requestToolApproval)J=Z.requestToolApproval}let Q=f&&Object.keys(f).length>0;if(!Q&&!J)return;return{...Q?{toolExecutors:f}:{},...J?{requestToolApproval:J}:{}}}var oj={};q(oj,{toProviderConfig:()=>I0,emptyStoredProviderSettings:()=>J1,StoredProviderSettingsSchema:()=>cf,StoredProviderSettingsEntrySchema:()=>JJ,ProviderSettingsSchemaTyped:()=>M8});import{z as f1}from"zod";var sj={};q(sj,{toProviderConfig:()=>I0,safeParseSettings:()=>fJ,safeCreateProviderConfig:()=>n9,parseSettings:()=>$J,normalizeProviderId:()=>vf,isBuiltInProviderId:()=>r9,createProviderConfig:()=>i9,SapSettingsSchema:()=>s6,ReasoningSettingsSchema:()=>i6,ProviderSettingsSchema:()=>$1,ProviderProtocolSchema:()=>l6,ProviderIdSchema:()=>T8,ProviderClientSchema:()=>p6,OcaSettingsSchema:()=>o6,ModelCatalogSettingsSchema:()=>e6,GcpSettingsSchema:()=>a6,BUILT_IN_PROVIDER_IDS:()=>p9,BUILT_IN_PROVIDER:()=>N8,AzureSettingsSchema:()=>t6,AwsSettingsSchema:()=>n6,AuthSettingsSchema:()=>r6});import*as k0 from"@cline/llms";import{z as N}from"zod";N0();var lj={};q(lj,{refreshOcaToken:()=>U8,loginOcaOAuth:()=>gf,getValidOcaCredentials:()=>L8,generateOcaOpcRequestId:()=>I6,createOcaRequestHeaders:()=>k9,createOcaOAuthProvider:()=>b9,OCI_HEADER_OPC_REQUEST_ID:()=>xj,DEFAULT_INTERNAL_OCA_BASE_URL:()=>h6,DEFAULT_INTERNAL_IDCS_URL:()=>Ej,DEFAULT_INTERNAL_IDCS_SCOPES:()=>hj,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>Cj,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>b6,DEFAULT_EXTERNAL_IDCS_URL:()=>kj,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>Ij,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>bj});import{nanoid as Sj}from"nanoid";class E9{ttlMs;maxEntries;entries=new Map;constructor($,f){this.ttlMs=$;this.maxEntries=f}get($,f=Date.now()){this.pruneExpired(f);let J=this.entries.get($);if(!J)return;return this.entries.delete($),this.entries.set($,J),J.value}set($,f,J=Date.now(),Q=this.ttlMs){this.pruneExpired(J),this.entries.delete($);while(this.entries.size>=this.maxEntries){let Z=this.entries.keys().next().value;if(Z===void 0)break;this.entries.delete(Z)}this.entries.set($,{value:f,expiresAt:J+Q})}pruneExpired($){for(let[f,J]of this.entries)if(J.expiresAt<=$)this.entries.delete(f)}}var wj={};q(wj,{startLocalOAuthServer:()=>a0});function yF(){let $;return{promise:new Promise((J)=>{$=J}),resolve:$}}async function a0($){let f=await import("node:http"),J=$.host??"127.0.0.1",Q=$.timeoutMs??300000,Z=$.successHtml??NF,W=yF(),j=!1,X=null,H=null,Y=null,V=(K)=>{if(j)return;j=!0,W.resolve(K)},A=()=>{if(X)clearTimeout(X),X=null;let K=Y;if(Y=null,H)H.close(),H=null;if(K!==null&&$.onClose)Promise.resolve($.onClose({host:J,port:K})).catch(()=>{})},B=async()=>{return X=setTimeout(()=>{A(),V(null)},Q),W.promise};for(let K of $.ports){let G=f.createServer((F,P)=>{try{let D=new URL(F.url||"",`http://${J}:${K}`);if(D.pathname!==$.callbackPath){P.statusCode=404,P.end("Not found");return}let O={url:D,code:D.searchParams.get("code")??void 0,state:D.searchParams.get("state")??void 0,provider:D.searchParams.get("provider")??void 0,error:D.searchParams.get("error")??void 0};if(O.error){P.statusCode=400,P.end(`Authentication failed: ${O.error}`),A(),V(O);return}if(!O.code){P.statusCode=400,P.end("Missing authorization code");return}if($.expectedState&&O.state!==$.expectedState){P.statusCode=400,P.end("State mismatch");return}P.statusCode=200,P.setHeader("Content-Type","text/html; charset=utf-8"),P.end(Z),A(),V(O)}catch{P.statusCode=500,P.end("Internal error")}}),R=await new Promise((F)=>{let P=(D)=>{G.off("error",P),F({bound:!1,error:D})};G.once("error",P),G.listen(K,J,()=>{G.off("error",P),H=G,F({bound:!0})})});if(R.error){if(R.error.code==="EADDRINUSE")continue;throw A(),R.error}if(R.bound){Y=K;let F=`http://${J}:${K}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:J,port:K,callbackUrl:F})).catch(()=>{});return{callbackUrl:F,waitForCallback:B,cancelWait:()=>{A(),V(null)},close:()=>{A(),V(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var NF=`<!DOCTYPE html>
144
144
  <html lang="en">
145
145
  <head>
146
146
  <meta charset="utf-8">
@@ -181,7 +181,7 @@ ${J}`,platform:f.clinePlatform,metadata:f.workspaceMetadata})}function ZW($,f){l
181
181
  </div>
182
182
  <script>setTimeout(() => window.close(), 3000);</script>
183
183
  </body>
184
- </html>`;var Cj="a8331954c0cf48ba99b5dd223a14c6ea",Ej="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",hj="openid offline_access",h6="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",bj="c1aba3deed5740659981a752714eba33",kj="https://login-ext.identity.oraclecloud.com",Ij="openid offline_access",b6="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",xj="opc-request-id",NF="/auth/oca",MF=Array.from({length:11},($,f)=>48801+f),qF=300000,wF=30000,gj=30000,SF=600000;class k6 extends Error{status;errorCode;constructor($,f){super($);this.name="OcaOAuthTokenError",this.status=f?.status,this.errorCode=f?.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 e$={internal:{clientId:Cj,idcsUrl:Ej,scopes:hj,baseUrl:h6},external:{clientId:bj,idcsUrl:kj,scopes:Ij,baseUrl:b6}},R8=new Map,CF=86400000,EF=300000,hF=32,h9=new E9(CF,hF);function mj($){if(typeof $==="function")return $();return $??"internal"}function vj($){return{internal:{clientId:$?.internal?.clientId??e$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??e$.internal.idcsUrl,scopes:$?.internal?.scopes??e$.internal.scopes,baseUrl:$?.internal?.baseUrl??e$.internal.baseUrl},external:{clientId:$?.external?.clientId??e$.external.clientId,idcsUrl:$?.external?.idcsUrl??e$.external.idcsUrl,scopes:$?.external?.scopes??e$.external.scopes,baseUrl:$?.external?.baseUrl??e$.external.baseUrl}}}function bF($=Date.now()){let f=$-SF;for(let[J,Q]of R8.entries())if(Q.createdAt<f)R8.delete(J)}function kF($,f,J){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let Z=G0(f)?.exp;if(typeof Z==="number"&&Z>0)return Z*1000;let j=G0(J)?.exp;if(typeof j==="number"&&j>0)return j*1000;return Date.now()+3600000}function cj($,f,J){let Q=$.access_token;if(!Q)throw Error("Token response did not include an access token");let Z=$.refresh_token??J?.refresh;if(!Z)throw Error("Token response did not include a refresh token");let W=G0($.id_token),j=G0(Q),X=W?.sub??j?.sub,H=W?.email??j?.email;return{access:Q,refresh:Z,expires:kF($,Q,$.id_token),accountId:X??J?.accountId,email:H??J?.email,metadata:{...J?.metadata??{},provider:"oca",mode:f,subject:X,idToken:$.id_token}}}async function uj($,f){let J=L6($),Q=h9.get(J);if(Q)return Q;let Z=`${J}/.well-known/openid-configuration`,W=await fetch(Z,{method:"GET",signal:AbortSignal.timeout(f)});if(!W.ok){let H=`${J}/oauth2/v1/token`;return h9.set(J,H,Date.now(),EF),H}let X=(await W.json()).token_endpoint||`${J}/oauth2/v1/token`;return h9.set(J,X),X}function dj($){return{code:$.error,message:$.error_description}}async function IF($){let f=R8.get($.state);if(!f)throw Error("No PKCE verifier found for this state");R8.delete($.state);let J=$.mode==="external"?$.config.external:$.config.internal,Q=await uj(J.idcsUrl,$.requestTimeoutMs),Z=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:f.redirectUri,client_id:J.clientId,code_verifier:f.verifier}),W=await fetch(Q,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:Z,signal:AbortSignal.timeout($.requestTimeoutMs)}),j=await W.json();if(!W.ok){let H=dj(j);throw new k6(`Token exchange failed: ${W.status}${H.message?` - ${H.message}`:""}`,{status:W.status,errorCode:H.code})}let X=G0(j.id_token);if(!j.id_token||!X)throw Error("No ID token received from OCA");if(X.nonce!==f.nonce)throw Error("OIDC nonce verification failed");return cj(j,$.mode)}function xF($){let f=$.mode==="external"?$.config.external:$.config.internal,J=new URL(`${L6(f.idcsUrl)}/oauth2/v1/authorize`);return J.searchParams.set("client_id",f.clientId),J.searchParams.set("response_type","code"),J.searchParams.set("scope",f.scopes),J.searchParams.set("code_challenge",$.challenge),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("redirect_uri",$.callbackUrl),J.searchParams.set("state",$.state),J.searchParams.set("nonce",$.nonce),J.toString()}async function gf($){L$($.telemetry,"oca");let f=vj($.config),J=mj($.mode),Q=$.callbackPorts?.length?$.callbackPorts:MF,Z=$.callbackPath??NF,W=$.requestTimeoutMs??gj,j=await a0({ports:Q,callbackPath:Z,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=j.callbackUrl;if(!X)throw Error("Unable to bind local OAuth callback server");let H=Sj(16),Y=Sj(16),{verifier:V,challenge:A}=await U6();bF(),R8.set(H,{verifier:V,nonce:Y,mode:J,redirectUri:X,createdAt:Date.now()});let B=xF({callbackUrl:X,mode:J,state:H,nonce:Y,challenge:A,config:f});$.callbacks.onAuth({url:B,instructions:"Continue the authentication process in your browser."});try{let K=await wf({waitForCallback:j.waitForCallback,cancelWait:j.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!==H)throw Error("State mismatch");let F=await IF({code:G,state:R,mode:J,config:f,requestTimeoutMs:W});return O$($.telemetry,"oca"),_$($.telemetry,{id:F.accountId,email:F.email,provider:"oca"}),F}catch(K){throw z$($.telemetry,"oca",K instanceof Error?K.message:String(K)),K}finally{j.close()}}async function U8($,f={}){let J=vj(f.config),Q=f.requestTimeoutMs??gj,Z=$.metadata?.mode,W=Z==="internal"||Z==="external"?Z:mj(f.mode),j=W==="external"?J.external:J.internal,X=await uj(j.idcsUrl,Q),H=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:j.clientId}),Y=await fetch(X,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:H,signal:AbortSignal.timeout(Q)}),V=await Y.json();if(!Y.ok){let A=dj(V);throw new k6(`Token refresh failed: ${Y.status}${A.message?` - ${A.message}`:""}`,{status:Y.status,errorCode:A.code})}return cj(V,W,$)}async function L8($,f,J){if(!$)return null;let Q=f?.refreshBufferMs??J?.refreshBufferMs??qF,Z=f?.retryableTokenGraceMs??J?.retryableTokenGraceMs??wF;if(f?.forceRefresh!==!0&&!S1($,Q))return $;try{return await U8($,J)}catch(j){if(j instanceof k6&&j.isLikelyInvalidGrant())return n$(J?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>Z)return $;return null}}function b9($={}){return{id:"oca",name:"Oracle Code Assist",usesCallbackServer:!0,async login(f){return gf({...$,callbacks:f})},async refreshToken(f){return U8(f,$)},getApiKey(f){return f.access}}}async function I6($,f){let J=new TextEncoder,Q=async(Y)=>{let V=await crypto.subtle.digest("SHA-256",J.encode(Y));return Array.from(new Uint8Array(V).slice(0,4),(A)=>A.toString(16).padStart(2,"0")).join("")},[Z,W]=await Promise.all([Q(f),Q($)]),j=Math.floor(Date.now()/1000).toString(16).padStart(8,"0"),X=new Uint32Array(1);crypto.getRandomValues(X);let H=(X[0]??0).toString(16).padStart(8,"0");return Z+W+j+H}async function k9($){let f=await I6($.taskId,$.accessToken);return{Authorization:`Bearer ${$.accessToken}`,"Content-Type":"application/json",client:$.metadata?.client??"Cline","client-version":$.metadata?.clientVersion??"unknown","client-ide":$.metadata?.clientIde??"unknown","client-ide-version":$.metadata?.clientIdeVersion??"unknown",[xj]:f}}var tj={};q(tj,{resolveProviderConfig:()=>y8,getProviderConfig:()=>d6,getLiveModelsCatalog:()=>mf,clearPublicModelsCatalogCache:()=>jD,clearPrivateModelsCatalogCache:()=>l9,clearLiveModelsCatalogCache:()=>d9,OPENAI_COMPATIBLE_PROVIDERS:()=>_8,DEFAULT_MODELS_CATALOG_URL:()=>u6});import*as $0 from"@cline/llms";function I9($){if(!Array.isArray($))return[];return $.map((f)=>{if(typeof f==="string")return f.trim();if(f&&typeof f==="object"){let J=f;for(let Q of[J.id,J.name,J.model])if(typeof Q==="string"&&Q.trim())return Q.trim()}return""}).filter((f)=>f.length>0)}function gF($,f){let J=I9($);if(J.length>0)return J;if(!$||typeof $!=="object")return[];let Q=$,Z=I9(Q.data??Q.models);if(Z.length>0)return Z;if(Q.models&&typeof Q.models==="object"&&!Array.isArray(Q.models)){let j=Object.keys(Q.models).filter((X)=>X.trim().length>0);if(j.length>0)return j}let W=Q.providers?.[f];if(W&&typeof W==="object"){let X=I9(W.models??W);if(X.length>0)return X}return[]}async function x6($,f){let J=await fetch($,{method:"GET"});if(!J.ok)throw Error(`failed to fetch models from ${$}: HTTP ${J.status}`);return gF(await J.json(),f)}function pj($){return $.replace(/\/+$/,"")}function g6($,f,J){let Q=J?.trim();if(!Q)return;let Z=$?.trim();if(!Z||!f?.trim())return Q;try{let W=new URL(Q),j=new URL(f),X=new URL(Z);if(W.origin!==j.origin)return Q;let H=pj(j.pathname),Y=pj(X.pathname);if(H&&W.pathname.startsWith(`${H}/`)){let V=W.pathname.slice(H.length);X.pathname=`${Y}${V}`}else X.pathname=W.pathname;return X.search=W.search,X.hash=W.hash,X.toString()}catch{return Q}}function mF($){return Object.fromEntries(Object.entries($).map(([f,J])=>[f,{...J}]))}function vF($){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 cF=Object.values($0.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:mF($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),rj=Object.fromEntries(cF.map(($)=>[$.id,$]));function uF($){return rj[$]}function dF(){return Object.fromEntries(Object.entries(rj).filter(([,$])=>vF($)))}function ij($=[]){let f=$.flatMap((J)=>{switch(J){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[J];default:return[]}});return f.length>0?f:void 0}var u6="https://models.dev/api.json",lF=600000,nj=300000,pF=5000,c6=new Map,O8=new Map,g9=new Map,m6=new Map;async function rF(){return $0.getGeneratedProviderModels()}async function iF($,f={},J={},Q={},Z={},W={}){let j=await rF(),X=$0.resolveProviderModelCatalogKeys($),H=Object.assign({},...X.map((B)=>j[B]??{})),Y=Boolean($0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),V=Object.keys(Z).length>0;if(Y&&V)return $0.sortModelsByReleaseDate({...Z,...W});let A=Object.keys(Q).length>0;if($==="openai-codex"&&A)return $0.sortModelsByReleaseDate({...Q,...W});return $0.sortModelsByReleaseDate({...H,...f,...J,...Q,...Z,...W})}function nF($,f){let J=$0.resolveProviderModelCatalogKeys($);return Object.assign({},...J.map((Q)=>f[Q]??{}))}function v9($){let f=$?.trim();return f&&f.length>0?f:""}function c9($){let f=$.apiKey?.trim()||$.accessToken?.trim();return f&&f.length>0?f:void 0}function aF($){let f=2166136261;for(let J=0;J<$.length;J+=1)f^=$.charCodeAt(J),f+=(f<<1)+(f<<4)+(f<<7)+(f<<8)+(f<<24);return(f>>>0).toString(16)}function tF($,f){return`${$}:${v9(f.baseUrl)}:${aF(c9(f)??"")}`}function sF($){let f=$?.trim();if(!f)return;let J=G0(f),Q=J?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof Q==="string"&&Q.length>0)return Q;let Z=J?.organizations?.[0]?.id;if(typeof Z==="string"&&Z.length>0)return Z;let W=J?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;return}async function u9($,f,J=pF){let Q=new AbortController,Z=setTimeout(()=>Q.abort(),J);try{return await fetch($,{...f,signal:Q.signal})}finally{clearTimeout(Z)}}function x9($,f,J){if(J&&!$.includes(f))$.push(f)}function z8($,f){let J=["streaming","tools"];return x9(J,"images",Boolean(f.supportsImages)),x9(J,"prompt-cache",Boolean(f.supportsPromptCache)),x9(J,"reasoning",Boolean(f.supportsReasoning)),{id:$,name:f.name??$,contextWindow:f.contextWindow,maxInputTokens:f.maxInputTokens,maxTokens:f.maxTokens,capabilities:J,releaseDate:f.releaseDate,status:"active"}}function oF($){let f=$0.getGeneratedModelsForProvider("openai-native")[$.id];if(f)return{...f,id:$.id,name:$.name??f.name??$.id};return z8($.id,{name:$.name??$.id})}async function eF($,f){let J=await u9("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${f}`,"Content-Type":"application/json"}});if(!J.ok)throw Error(`Baseten model refresh failed: HTTP ${J.status}`);let Z=(await J.json())?.data??[],W={};for(let j of Z){let X=j.id?.trim();if(!X)continue;if(X.includes("whisper")||X.includes("tts")||X.includes("embedding"))continue;let H=j.supported_features??[];W[X]=z8(X,{name:X,contextWindow:j.context_length,maxInputTokens:j.context_length,maxTokens:j.max_completion_tokens,supportsReasoning:H.includes("reasoning")||H.includes("reasoning_effort"),supportsImages:!1})}return W}async function $D($,f){let J=await u9("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":f}});if(!J.ok)throw Error(`Hicap model refresh failed: HTTP ${J.status}`);let Z=(await J.json())?.data??[],W={};for(let j of Z){let X=j.id?.trim();if(!X)continue;W[X]=z8(X,{name:X,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return W}function fD($){let f=v9($);if(!f)return"http://localhost:4000";return f.endsWith("/v1")?f.slice(0,-3):f}async function JD($,f){let Q=`${fD($.baseUrl)}/v1/model/info`,Z=async(Y)=>u9(Q,{method:"GET",headers:{accept:"application/json",...Y}}),W=await Z({"x-litellm-api-key":f});if(!W.ok)W=await Z({Authorization:`Bearer ${f}`});if(!W.ok)throw Error(`LiteLLM model refresh failed: HTTP ${W.status}`);let X=(await W.json())?.data??[],H={};for(let Y of X){let V=Y.model_name?.trim(),B=Y.litellm_params?.model?.trim()||V;if(!B)continue;let K=Y.model_info,G=z8(B,{name:V??B,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(H[B]=G,V)H[V]={...G,id:V,name:V}}return H}async function QD($,f){let J=await $0.listOpenAICodexModels({accessToken:f,accountId:$.accountId??sF(f),cwd:typeof $.codex?.defaultSettings?.cwd==="string"?$.codex.defaultSettings.cwd:void 0,codexPath:typeof $.codex?.defaultSettings?.codexPath==="string"?$.codex.defaultSettings.codexPath:void 0,env:$.codex?.defaultSettings?.env&&typeof $.codex.defaultSettings.env==="object"&&!Array.isArray($.codex.defaultSettings.env)?$.codex.defaultSettings.env:void 0});return Object.fromEntries(J.map((Q)=>[Q.id,oF(Q)]))}var aj={baseten:eF,hicap:$D,litellm:JD,"openai-codex":QD},m9=new Map,v6=new Map;function ZD($,f){return`${$}:${v9(f.baseUrl)}`}async function WD($,f,J){let Q=$0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],Z=g6(J.baseUrl,Q?.provider.baseUrl,Q?.provider.modelsSourceUrl);if(!Z)return{};let W=f?.cacheTtlMs??nj,j=ZD($,J),X=Date.now(),H=m9.get(j);if(H&&H.expiresAt>X)return H.data;let Y=v6.get(j);if(Y)return Y;let V=x6(Z,$).then((A)=>{let B=Object.fromEntries(A.map((K)=>[K,z8(K,{name:K})]));return m9.set(j,{data:B,expiresAt:X+W}),B}).finally(()=>{v6.delete(j)});return v6.set(j,V),V}function jD(){m9.clear(),v6.clear()}async function XD($,f){let J=c9(f);if(!J)return{};let Q=aj[$];if(!Q)return{};return Q(f,J)}function HD($,f,J){if(!J)return!1;if(!aj[$])return!1;if(f?.loadPrivateOnAuth===!1)return!1;return Boolean(c9(J))}async function YD($,f,J){let Q=f?.cacheTtlMs??nj,Z=tF($,J),W=Date.now(),j=g9.get(Z);if(j&&j.expiresAt>W)return j.data;let X=m6.get(Z);if(X)return X;let H=XD($,J).then((Y)=>{return g9.set(Z,{data:Y,expiresAt:W+Q}),Y}).finally(()=>{m6.delete(Z)});return m6.set(Z,H),H}async function VD($){return $0.fetchModelsDevProviderModels($)}async function mf($={}){let f=$.url??u6,J=$.cacheTtlMs??lF,Q=Date.now(),Z=c6.get(f);if(Z&&Z.expiresAt>Q)return Z.data;let W=O8.get(f);if(W)return W;let j=VD(f).then((X)=>{return c6.set(f,{data:X,expiresAt:Q+J}),X}).finally(()=>{O8.delete(f)});return O8.set(f,j),j}function d9($){if($){c6.delete($),O8.delete($);return}c6.clear(),O8.clear()}function l9(){g9.clear(),m6.clear()}function AD($){return Object.fromEntries(Object.entries($).map(([f,J])=>[f,{baseUrl:J.baseUrl,modelId:J.modelId,capabilities:ij(J.capabilities)}]))}var _8=AD(dF());function d6($){let f=uF($);if(!f||!f.baseUrl)return;return{baseUrl:f.baseUrl,modelId:f.modelId,knownModels:f.knownModels,capabilities:ij(f.capabilities)}}async function y8($,f,J){let Q=d6($);if(!Q)return;try{let Z=f?.loadLatestOnInit?await mf(f):void 0,W=Z?nF($,Z):{},j=J&&HD($,f,J)?await YD($,f,J):{},H=Boolean($0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?J??{providerId:$,modelId:Q.modelId,baseUrl:Q.baseUrl}:J,Y=H?await WD($,f,H).catch(()=>({})):{},V=await iF($,Q.knownModels,W,j,Y,J?.knownModels);return{...Q,knownModels:V}}catch(Z){if(f?.failOnError)throw Z;return Q}}var T8=k0.BUILT_IN_PROVIDER,p9=k0.BUILT_IN_PROVIDER_IDS,r9=k0.isBuiltInProviderId,vf=k0.normalizeProviderId,N8=T.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),l6=T.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),p6=T.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),r6=T.object({apiKey:T.string().optional(),accessToken:T.string().optional(),refreshToken:T.string().optional(),expiresAt:T.number().int().positive().optional(),accountId:T.string().optional()}),BD=T.enum(["none","low","medium","high","xhigh"]),i6=T.object({enabled:T.boolean().optional(),effort:BD.optional(),budgetTokens:T.number().int().positive().optional()}),n6=T.object({accessKey:T.string().optional(),secretKey:T.string().optional(),sessionToken:T.string().optional(),region:T.string().optional(),profile:T.string().optional(),authentication:T.enum(["iam","api-key","profile"]).optional(),usePromptCache:T.boolean().optional(),useCrossRegionInference:T.boolean().optional(),useGlobalInference:T.boolean().optional(),endpoint:T.string().url().optional(),customModelBaseId:T.string().optional()}),a6=T.object({projectId:T.string().optional(),region:T.string().optional()}),t6=T.object({apiVersion:T.string().optional(),useIdentity:T.boolean().optional()}),s6=T.object({clientId:T.string().optional(),clientSecret:T.string().optional(),tokenUrl:T.string().url().optional(),resourceGroup:T.string().optional(),deploymentId:T.string().optional(),useOrchestrationMode:T.boolean().optional(),api:T.enum(["orchestration","foundation-models"]).optional(),defaultSettings:T.record(T.string(),T.unknown()).optional()}),o6=T.object({mode:T.enum(["internal","external"]).optional(),usePromptCache:T.boolean().optional()}),e6=T.object({loadLatestOnInit:T.boolean().optional(),loadPrivateOnAuth:T.boolean().optional(),url:T.string().url().optional(),cacheTtlMs:T.number().int().positive().optional(),failOnError:T.boolean().optional()}),$1=T.object({provider:N8,apiKey:T.string().optional(),auth:r6.optional(),model:T.string().optional(),protocol:l6.optional(),client:p6.optional(),routingProviderId:N8.optional(),maxTokens:T.number().int().positive().optional(),contextWindow:T.number().int().positive().optional(),baseUrl:T.string().url().optional(),headers:T.record(T.string(),T.string()).optional(),timeout:T.number().int().positive().optional(),reasoning:i6.optional(),aws:n6.optional(),gcp:a6.optional(),azure:t6.optional(),sap:s6.optional(),oca:o6.optional(),region:T.string().optional(),apiLine:T.enum(["china","international"]).optional(),capabilities:T.array(T.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:e6.optional()});function $J($){return $1.parse($)}function fJ($){return $1.safeParse($)}function KD($){return $.protocol==="openai-responses"||$.client==="openai"}function I0($,f={}){let J=$.provider,Q=vf(J),Z=f.includeKnownModels!==!1,W=$.reasoning?.effort||"none",j=W==="none"?void 0:W,X=_8[Q],H=Object.assign({},...k0.resolveProviderModelCatalogKeys(Q).map((R)=>k0.getGeneratedModelsForProvider(R))),Y=Object.keys(H)[0],V=$.auth?.accessToken??$.apiKey??$.auth?.apiKey,A=$.baseUrl??(Q==="oca"?$.oca?.mode==="internal"?h6:b6:X?.baseUrl),B=$.routingProviderId??(KD($)&&Q!==T8.OPENAI_NATIVE?T8.OPENAI_NATIVE:void 0),K=Z?X?.knownModels??(Object.keys(H).length>0?H:void 0):void 0,G={providerId:J,clientType:$.client,routingProviderId:B,modelId:$.model??X?.modelId??Y??"default",...Z?{knownModels:K}:{},apiKey:V,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:A,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:j,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??X?.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,F])=>F!==void 0))}function i9($){let f=$J($);return I0(f)}function n9($){let f=fJ($);if(f.success)return{success:!0,config:I0(f.data)};return{success:!1,error:f.error}}var M8=$1;var JJ=f1.object({settings:$1,updatedAt:f1.string().datetime(),tokenSource:f1.enum(["manual","oauth","migration"]).default("manual")}),cf=f1.object({version:f1.literal(1),lastUsedProvider:f1.string().min(1).optional(),providers:f1.record(f1.string(),JJ)});function J1(){return{version:1,providers:{}}}T$();var JX={};q(JX,{InMemoryWorkspaceManager:()=>df});import{upsertWorkspaceInfo as DD,WorkspaceManifestSchema as t9}from"@cline/shared";var fX={};q(fX,{normalizeWorkspacePath:()=>M$,generateWorkspaceInfoWithDiagnostics:()=>q8,generateWorkspaceInfo:()=>uf,buildWorkspaceMetadataWithInfo:()=>a9,buildWorkspaceMetadata:()=>w8});import{basename as GD,resolve as PD}from"node:path";import{performance as ej}from"node:perf_hooks";import{processWorkspaceInfo as $X}from"@cline/shared";import FD from"simple-git";function M$($){return PD($)}async function uf($){return(await q8($)).info}function QJ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function q8($){let f=M$($),J={rootPath:f,hint:GD(f)},Q;try{let Z=FD({baseDir:f});if(!await Z.checkIsRepo())return{info:J,vcsType:"none"};try{let j=await Z.getRemotes(!0);if(j.length>0){let X=j.map((H)=>{let Y=H.refs.fetch||H.refs.push;return`${H.name}: ${Y}`});J.associatedRemoteUrls=X}}catch(j){Q??=QJ(j)}try{let j=(await Z.revparse(["HEAD"])).trim();if(j.length>0)J.latestGitCommitHash=j}catch(j){Q??=QJ(j)}try{let j=(await Z.branch()).current.trim();if(j.length>0)J.latestGitBranchName=j}catch(j){Q??=QJ(j)}return{info:J,vcsType:"git",error:Q}}catch(Z){return{info:J,vcsType:"none",error:QJ(Z)}}}async function w8($){let f=await uf($);return $X(f)}async function a9($){let f=ej.now(),J=await q8($),Q=ej.now()-f,Z=J.info;return{workspaceInfo:Z,workspaceMetadata:$X(Z),durationMs:Q,vcsType:J.vcsType,initError:J.error}}class df{manifest;listeners=new Set;constructor($){this.manifest=t9.parse($??{workspaces:{}})}async addWorkspacePath($){let f=await uf($);return this.manifest=DD(this.manifest,f),this.emit({type:"workspace_added",workspace:f}),f}async switchWorkspace($){let f=M$($),J=this.manifest.workspaces[f];if(J)return this.manifest=t9.parse({...this.manifest,currentWorkspacePath:f}),this.emit({type:"workspace_switched",workspace:J}),J;let Q=await this.addWorkspacePath(f);return this.manifest=t9.parse({...this.manifest,currentWorkspacePath:Q.rootPath}),this.emit({type:"workspace_switched",workspace:Q}),Q}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let f=M$($);return this.manifest.workspaces[f]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let f of this.listeners)f($)}}T0();import{createHash as RD}from"node:crypto";var QX=new Set,ZX=new Set;function UD($){return RD("sha256").update($).digest("hex")}function LD($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function WX($){if(!$.telemetry)return;let f=UD($.rootPath),J=$.rootCount??1;if(!QX.has(f))QX.add(f),W6($.telemetry,{root_count:J,vcs_types:LD($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!ZX.has(f)){ZX.add(f);let Q=Error($.initError.message);Q.name=$.initError.errorType||"Error",j6($.telemetry,Q,{fallback_to_single_root:!0,workspace_count:J})}}function zD($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function _D($,f,J){if(f.length>0)for(let W of f)J?.log(W.message,{severity:"warn"});if($.length===0)return;let Q=$.slice(0,3).map(zD).join("; "),Z=$.length>3?`; and ${$.length-3} more`:"";J?.log(`Some plugins failed to initialize. ${Q}${Z}. Use --verbose for more details.`,{severity:"warn"});for(let W of $)J?.log(`Plugin initialization failed (${W.phase}) for ${W.pluginPath}`,{severity:"warn",stack:W.stack,pluginPath:W.pluginPath,pluginName:W.pluginName})}function yD($,f){let J=typeof $.thinking==="boolean",Q=typeof $.reasoningEffort==="string";if(!J&&!Q)return f;return{...f??{},...J?{enabled:$.thinking}:{},...Q?{effort:$.reasoningEffort}:{}}}function TD($,f){return OD($,f)}function ND($){let f=0;for(let J of $??[]){if(J.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"&&!Array.isArray(J.metadata)?J.metadata:void 0)?.kind==="recovery_notice")continue;f+=1}return f}function MD($){let f={...$.storedHeaders??{},...$.configHeaders??{}},J=$.accountId?.trim()||qD($.accessToken);if(f.originator="cline",f.session_id=$.sessionId,f["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,J)f["ChatGPT-Account-Id"]=J;return f}function qD($){let f=$?.trim();if(!f)return;let J=G0(f),Q=J?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof Q==="string"&&Q.length>0)return Q;let Z=J?.organizations?.[0]?.id;if(typeof Z==="string"&&Z.length>0)return Z;let W=J?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;return}function wD($,f,J,Q,Z){let W=J.getProviderSettings($.providerId),j=Q||W?.modelCatalog?{...Q??{},...W?.modelCatalog??{}}:void 0,X={...W??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??W?.apiKey,baseUrl:$.baseUrl??W?.baseUrl,headers:$.providerId==="openai-codex"?MD({sessionId:f,configHeaders:$.headers,storedHeaders:W?.headers,accountId:W?.auth?.accountId,accessToken:$.apiKey??W?.auth?.accessToken??W?.apiKey}):$.headers??W?.headers,reasoning:yD($,W?.reasoning),modelCatalog:j},H=I0(X);if($.knownModels)H.knownModels=$.knownModels;if($.extensionContext)H.extensionContext=$.extensionContext;let V=$.fetch??H.fetch??Z;if(V)H.fetch=V;return H}async function jX($){let{input:f,sessionId:J,providerSettingsManager:Q,defaultTelemetry:Z,defaultCapabilities:W,defaultToolPolicies:j,defaultFetch:X,onPluginEvent:H,onTeamEvent:Y,createSpawnTool:V,localRuntime:A,readSessionMetadata:B,writeSessionMetadata:K}=$,G=t$(f.config),{modelCatalogDefaults:R,userInstructionService:F,configExtensions:P,onTeamRestored:D,...O}=A??{},_=Object.keys(O).length>0?O:void 0,{workspaceInfo:L,workspaceMetadata:z,durationMs:y,vcsType:w,initError:Q0}=await a9(G),Z0=_?.extensionContext,o={...Z0??{},workspace:{...L,...Z0?.workspace??{}},session:{...Z0?.session??{},sessionId:J},logger:Z0?.logger??_?.logger,telemetry:Z0?.telemetry??_?.telemetry??Z};WX({telemetry:o.telemetry,rootPath:L.rootPath,workspaceInfo:L,rootCount:1,vcsType:w,durationMs:y,initError:Q0,featureFlagEnabled:!0});let u=xf({cwd:f.config.cwd,workspacePath:G,rootSessionId:J,logger:_?.logger,workspaceInfo:L}),U0=hW(_?.hooks)?void 0:If({rootSessionId:J,workspacePath:G,workspaceInfo:L}),k$=x1([_?.hooks,U0]),d;if(TD(P,"plugins"))try{d=await hf({pluginPaths:_?.pluginPaths,workspacePath:G,cwd:f.config.cwd,onEvent:H,providerId:f.config.providerId,modelId:f.config.modelId,workspaceInfo:L,session:o.session,client:o.client,user:o.user,logger:o.logger,telemetry:o.telemetry,automation:o.automation}),_D(d.failures,d.warnings,_?.logger)}catch(T2){let p=T2 instanceof Error?T2.message:String(T2);_?.logger?.log?.(`plugin loading failed; continuing without plugins (${p})`)}let k=V9(u?[u]:void 0,V9(_?.extensions,y6(d?.extensions))),n={...f.config,..._??{},sessionId:J,hooks:k$,extensions:k,extensionContext:o,telemetry:o.telemetry},G$=wD(n,J,Q,R,X),e0=x1([n.hooks,n.checkpoint?.enabled===!0?Uj({cwd:n.cwd,sessionId:J,logger:n.logger,createCheckpoint:n.checkpoint?.createCheckpoint,initialRunCount:ND(f.initialMessages),readSessionMetadata:B,writeSessionMetadata:K}):void 0]),P1={...n,providerConfig:G$,workspaceMetadata:z,hooks:e0},Yf=f.toolPolicies??n.toolPolicies??j,y2=F0(W,f.capabilities),c4=y2?.requestToolApproval,y5=y2?.toolExecutors,Vf=new df({currentWorkspacePath:L.rootPath,workspaces:{[L.rootPath]:L}});return{effectiveInput:f,config:P1,providerConfig:G$,workspaceMetadata:z,workspaceInfo:L,extensions:k,hooks:e0,toolPolicies:Yf,requestToolApproval:c4,pluginSandboxShutdown:d?.shutdown,runtimeBuilderInput:{config:P1,hooks:e0,extensions:k,onTeamEvent:Y,createSpawnTool:V,onTeamRestored:D,userInstructionService:F,configExtensions:P,toolExecutors:y5,workspaceManager:Vf,logger:P1.logger,telemetry:P1.telemetry}}}import{existsSync as WJ,mkdirSync as SD,readdirSync as CD,rmdirSync as ED,rmSync as hD,unlinkSync as bD}from"node:fs";import{dirname as XX,join as ZJ}from"node:path";function s(){return new Date().toISOString()}function S8($){if(!$||!WJ($))return;try{bD($)}catch{}}function kD($){let f=_f($);if(f)return{rootSessionId:f.rootSessionId,fileStem:`${f.agentId}__${f.teamTaskId}`};let J=s2($);if(J)return{rootSessionId:J.rootSessionId,fileStem:J.agentId};return{rootSessionId:$,fileStem:$}}class s9{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return ZJ(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let f=this.sessionArtifactsDir($);if(!WJ(f))SD(f,{recursive:!0});return f}sessionMessagesPath($){return ZJ(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,f=!1){let J=f?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return ZJ(J,`${$}.json`)}removeSessionDirIfEmpty($){let f=this.sessionArtifactsDir($),J=this.ensureSessionsDir();while(f.startsWith(J)&&f!==J){if(!WJ(f)){f=XX(f);continue}try{if(CD(f).length>0)break;ED(f)}catch{break}f=XX(f)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!WJ($))return;try{hD($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,f,J){let{rootSessionId:Q,fileStem:Z}=kD($),W=this.sessionArtifactsDir(Q);return{messagesPath:ZJ(W,`${Z}.messages.json`)}}}import{resolveDocumentsExtensionPath as ID}from"@cline/shared/storage";T0();function HX($,f,J,Q,Z){if(J)H6($.telemetry,{ulid:f,apiProvider:$.providerId,...Z});else X6($.telemetry,{ulid:f,apiProvider:$.providerId,...Z});xD($.telemetry,{workspacePath:Q})}function xD($,f){let J=ID("Hooks"),Q=s$(f.workspacePath),Z=new Map;for(let W of Q){let j=W.hookEventName??"unknown",X=Z.get(j)??{global:0,workspace:0};if(W.path===J||W.path.startsWith(`${J}/`))X.global+=1;else X.workspace+=1;Z.set(j,X)}for(let[W,j]of Z.entries())R6($,W,j.global,j.workspace)}function YX($,f){for(let J of f.mentions)F6($,J,f.matchedFiles.includes(J)?1:0,"file",!f.matchedFiles.includes(J));for(let J of f.matchedFiles)G6($,"file",J.length);for(let J of f.ignoredMentions)P6($,"file","not_found",J)}var iA={};q(iA,{ProviderSettingsManager:()=>B$});import{chmodSync as aA,existsSync as wZ,mkdirSync as wM,readFileSync as SM,writeFileSync as CM}from"node:fs";import{basename as tA,dirname as SZ}from"node:path";import{resolveProviderSettingsPath as EM}from"@cline/shared/storage";var N={};q(N,{writeHubDiscovery:()=>hJ,writeGlobalSettings:()=>C1,withHubStartupLock:()=>bJ,verifyHubConnection:()=>W$,updateMcpServerOAuthState:()=>d1,updateLocalProvider:()=>K5,truncateNotificationBody:()=>S4,toggleDisabledTool:()=>z6,toTeamProgressLifecycleEvent:()=>j2,toProviderConfig:()=>I0,toHubHealthUrl:()=>i7,toHookConfigFileName:()=>F8,summarizeUsageFromMessages:()=>Nf,stopLocalHubServerGracefully:()=>WQ,startLocalOAuthServer:()=>a0,startHubWebSocketServer:()=>Wf,startHubServer:()=>oV,startClineDeviceAuth:()=>Q7,splitCoreSessionConfig:()=>Q4,spawnDetachedHubServerWithRetry:()=>f2,spawnDetachedHubServer:()=>e7,setTelemetryOptOutGlobally:()=>iW,setMcpServerDisabled:()=>c1,setDisabledTools:()=>D9,setDisabledPlugin:()=>sW,sendHubCommand:()=>ZV,saveLocalProviderSettings:()=>AZ,saveLocalProviderOAuthCredentials:()=>PZ,sanitizeSessionToken:()=>M1,safeParseSettings:()=>fJ,safeCreateProviderConfig:()=>n9,runSubprocessEvent:()=>V2,runHook:()=>B2,reviveTeamStateDates:()=>o4,restartLocalHubIfIdleAfterStartupTimeout:()=>xJ,resolveWorkspaceHubOwnerContext:()=>QY,resolveWorkflowsConfigSearchPaths:()=>r8,resolveSkillsConfigSearchPaths:()=>l8,resolveSharedHubOwnerContext:()=>Y0,resolveSessionBackend:()=>yQ,resolveRulesConfigSearchPaths:()=>p8,resolveProviderConfig:()=>y8,resolvePluginConfigSearchPaths:()=>B8,resolveMcpServerRegistrations:()=>Q$,resolveLocalClineAuthToken:()=>FZ,resolveHubUrl:()=>qQ,resolveHubOwnerContext:()=>w$,resolveHubEndpointOptions:()=>c0,resolveHubBuildId:()=>Y1,resolveHooksConfigSearchPaths:()=>G8,resolveDisabledToolNames:()=>n0,resolveDisabledPluginPaths:()=>H8,resolveDefaultMcpSettingsPath:()=>O0,resolveDefaultHubPort:()=>$2,resolveDefaultHubPathname:()=>o7,resolveDefaultHubHost:()=>s7,resolveCoreSelectedToolIds:()=>$6,resolveCompatibleLocalHubUrl:()=>R4,resolveClineDir:()=>eH,resolveClineDataDir:()=>G4,resolveAndLoadAgentPlugins:()=>hf,resolveAgentPluginPaths:()=>h1,requestHubShutdown:()=>D4,requestDesktopToolApproval:()=>QZ,rememberRecoverableLocalHubUrl:()=>V1,registerRemoteConfigSessionBlobUpload:()=>j5,registerMcpServersFromSettingsFile:()=>l1,registerDisposable:()=>TM,refreshProviderModelsFromSource:()=>BZ,refreshOpenAICodexToken:()=>I8,refreshOcaToken:()=>U8,refreshClineToken:()=>b8,readSessionCheckpointHistory:()=>C4,readRemoteConfigSessionBlobUploadMetadata:()=>iQ,readHubDiscovery:()=>A0,readGlobalSettings:()=>J$,probeHubServer:()=>R0,probeHubConnection:()=>QV,prewarmFileIndex:()=>r4,prewarmDetachedHubServer:()=>kJ,prepareRemoteConfigCoreIntegration:()=>aQ,parseWorkflowConfigFromMarkdown:()=>d8,parseUserCommandEnvelope:()=>yM,parseSkillConfigFromMarkdown:()=>c8,parseSettings:()=>$J,parseRuleConfigFromMarkdown:()=>u8,parseHookEventPayload:()=>A2,openaiCodexOAuthProvider:()=>H7,normalizeWorkspacePath:()=>M$,normalizeUserInput:()=>_M,normalizeSdkError:()=>zM,normalizeRuntimeCapabilities:()=>F0,normalizeProviderId:()=>vf,normalizeOpenAICodexCredentials:()=>X7,normalizeOAuthProvider:()=>KZ,normalizeHubWebSocketUrl:()=>A1,noopBasicLogger:()=>OM,migrateLegacyProviderSettings:()=>g4,mergeRulesForSystemPrompt:()=>tf,mergeAgentHooks:()=>x1,makeTeamTaskSubSessionId:()=>t2,makeSubSessionId:()=>zf,loginOpenAICodex:()=>rf,loginOcaOAuth:()=>gf,loginLocalProvider:()=>GZ,loginClineOAuth:()=>pf,loadOpenTelemetryAdapter:()=>YM,loadMcpSettingsFile:()=>v1,loadLlmsConfigFromFile:()=>NZ,loadAgentPluginsFromPathsWithDiagnostics:()=>N$,loadAgentPluginsFromPaths:()=>M6,loadAgentPluginFromPath:()=>A8,listSessionHistoryFromBackend:()=>d7,listPluginTools:()=>f4,listMcpServerOAuthStatuses:()=>e8,listLocalProviders:()=>YZ,listHookConfigFiles:()=>s$,isToolDisabledGlobally:()=>nW,isTelemetryOptedOutGlobally:()=>O6,isRuleEnabled:()=>FJ,isPluginDisabledGlobally:()=>tW,isOpenAICodexTokenExpired:()=>j7,isHubReconnectableTransportError:()=>QQ,isHubCommandTimeoutError:()=>IJ,isDiscoveryFilePresent:()=>fY,isClineAccountActionRequest:()=>jJ,isBuiltInProviderId:()=>r9,identifyAccount:()=>_$,hasMcpSettingsFile:()=>q$,getValidOpenAICodexCredentials:()=>x8,getValidOcaCredentials:()=>L8,getValidClineCredentials:()=>k8,getProviderConfigFields:()=>DZ,getProviderConfig:()=>d6,getMcpServerOAuthState:()=>u1,getLocalProviderModels:()=>VZ,getLiveModelsCatalog:()=>mf,getFileIndex:()=>D$,getCurrentContextSize:()=>G9,getCoreHeadlessToolNames:()=>a2,getCoreDefaultEnabledToolIds:()=>e4,getCoreBuiltinToolCatalog:()=>T1,getCoreAcpToolNames:()=>f6,getClineDefaultSystemPrompt:()=>AM,generateWorkspaceInfoWithDiagnostics:()=>q8,generateWorkspaceInfo:()=>uf,generateOcaOpcRequestId:()=>I6,formatRulesForSystemPrompt:()=>af,formatDisplayUserInput:()=>LM,filterExtensionToolRegistrations:()=>y6,filterDisabledTools:()=>E1,filterDisabledPluginPaths:()=>_6,fetchClineRecommendedModels:()=>yZ,executeClineAccountAction:()=>XJ,ensureHubWebSocketServer:()=>J5,ensureHubServer:()=>eV,ensureDetachedHubServer:()=>WY,ensureCustomProvidersLoaded:()=>B5,ensureCompatibleLocalHubUrl:()=>t1,enrichPromptWithMentions:()=>Kf,emptyWorkspaceManifest:()=>UM,emptyStoredProviderSettings:()=>J1,discoverPluginModulePaths:()=>K8,deriveSubsessionStatus:()=>o2,deleteLocalProvider:()=>G5,defineLlmsConfig:()=>TZ,createWorkflowsConfigDefinition:()=>a8,createUserInstructionConfigService:()=>Z1,createToolPoliciesWithPreset:()=>n4,createTool:()=>RM,createTeamName:()=>X5,createSubprocessHooks:()=>rJ,createSpawnAgentTool:()=>r$,createSkillsConfigDefinition:()=>i8,createSessionHost:()=>Y2,createRuntimeHost:()=>Y2,createRulesConfigDefinition:()=>n8,createRemoteConfigSessionMessagesArtifactUploader:()=>nQ,createProviderConfig:()=>i9,createOpenTelemetryTelemetryService:()=>w4,createOcaRequestHeaders:()=>k9,createOcaOAuthProvider:()=>b9,createOAuthClientCallbacks:()=>h8,createMcpTools:()=>ef,createLocalHubScheduleRuntimeHandlers:()=>Q5,createLlmsSdk:()=>qZ,createInitialAccumulatedUsage:()=>V0,createInMemoryHubOwnerContext:()=>$Y,createHubServerUrl:()=>t0,createHubAuthToken:()=>EJ,createHookConfigFileHooks:()=>D8,createHookConfigFileExtension:()=>xf,createHookAuditHooks:()=>If,createDisabledMcpToolPolicy:()=>$4,createDisabledMcpToolPolicies:()=>yJ,createDelegatedAgentConfigProvider:()=>Rf,createDelegatedAgent:()=>Uf,createDefaultToolsWithPreset:()=>a4,createDefaultTools:()=>d$,createDefaultMcpServerClientFactory:()=>of,createDefaultExecutors:()=>Gf,createCoreSettingsService:()=>r1,createCoreSessionSnapshot:()=>j$,createContributionRegistry:()=>DM,createContextCompactionPrepareTurn:()=>C2,createConfiguredTelemetryService:()=>b$,createConfiguredTelemetryHandle:()=>D2,createClineTelemetryServiceMetadata:()=>FM,createClineTelemetryServiceConfig:()=>PM,createClineOAuthProvider:()=>W7,createBuiltinTools:()=>N1,createAgentTeamsTools:()=>y1,createAgentRuntime:()=>qM,createAgentHooksExtension:()=>bf,connectToHub:()=>tJ,completeClineDeviceAuth:()=>Z7,clearPrivateModelsCatalogCache:()=>l9,clearLiveModelsCatalogCache:()=>d9,clearHubDiscovery:()=>v0,captureWorkspacePathResolved:()=>vW,captureWorkspaceInitialized:()=>W6,captureWorkspaceInitError:()=>j6,captureToolUsage:()=>A6,captureTokenUsage:()=>Y6,captureTaskRestarted:()=>H6,captureTaskCreated:()=>X6,captureTaskCompleted:()=>J8,captureSubagentExecution:()=>Z8,captureSkillUsed:()=>B6,captureSdkError:()=>GM,captureProviderApiError:()=>Q8,captureModeSwitch:()=>V6,captureMentionUsed:()=>G6,captureMentionSearchResults:()=>F6,captureMentionFailed:()=>P6,captureHookDiscovery:()=>R6,captureExtensionActivated:()=>mW,captureDiffEditFailure:()=>K6,captureConversationTurnEvent:()=>yf,captureAuthSucceeded:()=>O$,captureAuthStarted:()=>L$,captureAuthLoggedOut:()=>n$,captureAuthFailed:()=>z$,captureAgentTeamCreated:()=>D6,captureAgentCreated:()=>a$,buildWorkspaceMetadata:()=>w8,buildTeamProgressSummary:()=>W2,buildSdkErrorProperties:()=>BM,buildRemoteConfigSessionBlobUploadMetadata:()=>Z5,buildDelegatedAgentConfig:()=>z1,bootstrapAgentTeams:()=>Of,authorizeMcpServerOAuth:()=>OJ,addLocalProvider:()=>HZ,accumulateUsageTotals:()=>H0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>v8,UnifiedConfigFileWatcher:()=>g1,ToolPresets:()=>b0,TelemetryService:()=>P2,TelemetryLoggerSink:()=>q4,TEAM_TOOL_NAMES:()=>Lf,SubprocessSandbox:()=>Ef,StoredProviderSettingsSchema:()=>cf,StoredProviderSettingsEntrySchema:()=>JJ,SqliteTeamStore:()=>jf,SqliteSessionStore:()=>H$,SessionVersioningService:()=>G1,SessionVersioningError:()=>q0,SessionSource:()=>K0,SapSettingsSchema:()=>s6,SKILLS_CONFIG_DIRECTORY_NAME:()=>m8,SESSION_STATUSES:()=>e2,SDK_ERROR_TELEMETRY_EVENT:()=>NM,RpcClineAccountService:()=>E8,RemoteRuntimeHost:()=>Z2,ReasoningSettingsSchema:()=>i6,RULES_CONFIG_DIRECTORY_NAME:()=>PJ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>W5,ProviderSettingsSchema:()=>$1,ProviderSettingsManager:()=>B$,ProviderProtocolSchema:()=>l6,ProviderIdSchema:()=>N8,ProviderClientSchema:()=>p6,OpenTelemetryProvider:()=>F2,OcaSettingsSchema:()=>o6,OPENAI_COMPATIBLE_PROVIDERS:()=>_8,NodeHubClient:()=>s0,NativeHubTransportAdapter:()=>k4,ModelCatalogSettingsSchema:()=>e6,LocalRuntimeHost:()=>A$,Llms:()=>VM,InMemoryWorkspaceManager:()=>df,InMemoryMcpManager:()=>p1,HubUIClient:()=>SQ,HubTransportError:()=>z0,HubSessionClient:()=>wQ,HubServerTransport:()=>U2,HubScheduleService:()=>G2,HubScheduleCommandService:()=>K2,HubRuntimeHost:()=>S$,HubCommandError:()=>J2,HookEventPayloadSchema:()=>pJ,HookEventNameSchema:()=>lJ,HookConfigFileName:()=>kf,HOOK_CONFIG_FILE_EVENT_MAP:()=>P8,HOOKS_CONFIG_DIRECTORY_NAME:()=>S6,GlobalSettingsSchema:()=>X8,GcpSettingsSchema:()=>a6,FileTeamPersistenceStore:()=>P5,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>O5,DefaultToolNames:()=>J0,DefaultRuntimeBuilder:()=>z2,DefaultLlmsSdk:()=>m4,DEFAULT_MODELS_CATALOG_URL:()=>u6,DEFAULT_HUB_PORT:()=>a7,DEFAULT_HUB_PATHNAME:()=>t7,DEFAULT_HUB_HOST:()=>n7,CoreSettingsService:()=>W1,CoreSessionService:()=>V$,ContributionRegistry:()=>KM,ClineCore:()=>N4,ClineAccountService:()=>C8,ChatViewStateSchema:()=>zZ,ChatSummarySchema:()=>L5,ChatSessionStatusSchema:()=>D5,ChatSessionConfigSchema:()=>F5,ChatMessageSchema:()=>U5,ChatMessageRoleSchema:()=>R5,CORE_TELEMETRY_EVENTS:()=>v,CORE_BUILD_VERSION:()=>_Z,BrowserWebSocketHubAdapter:()=>b4,BUILT_IN_PROVIDER_IDS:()=>p9,BUILT_IN_PROVIDER:()=>T8,AzureSettingsSchema:()=>t6,AwsSettingsSchema:()=>n6,AuthSettingsSchema:()=>r6,AgentTeamsRuntime:()=>$f,AgentTeam:()=>H2,Agent:()=>MM,ALL_DEFAULT_TOOL_NAMES:()=>g$});M(N,gc);import*as VM from"@cline/llms";import{buildClineSystemPrompt as AM,buildSdkErrorProperties as BM,ContributionRegistry as KM,captureSdkError as GM,createClineTelemetryServiceConfig as PM,createClineTelemetryServiceMetadata as FM,createContributionRegistry as DM,createTool as RM,emptyWorkspaceManifest as UM,formatDisplayUserInput as LM,noopBasicLogger as OM,normalizeSdkError as zM,normalizeUserInput as _M,parseUserCommandEnvelope as yM,registerDisposable as TM,SDK_ERROR_TELEMETRY_EVENT as NM}from"@cline/shared";import"@cline/shared/storage";var AX={};q(AX,{isClineAccountActionRequest:()=>jJ,executeClineAccountAction:()=>XJ,RpcClineAccountService:()=>E8,ClineAccountService:()=>C8});function gD($){if(typeof $!=="object"||$===null||!("error"in $))return;let f=$.error;return typeof f==="string"&&f.trim()?f:void 0}function VX($,f,J){let Q=gD(J);if(Q)return Q;let Z=f.trim();if(Z){let W=Z.length>200?`${Z.slice(0,200)}...`:Z;return`Cline account request failed with status ${$}: ${W}`}return`Cline account request failed with status ${$}`}class C8{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let f=$.apiBaseUrl.trim();if(!f)throw Error("apiBaseUrl is required");this.apiBaseUrl=f,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 f=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(f)}/balance`)}async fetchUsageTransactions($){let f=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(f)}/usages`)).items??[]}async fetchPaymentTransactions($){let f=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(f)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchOrganization($){let f=$.trim();if(!f)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(f)}`)}async fetchOrganizationBalance($){let f=$.trim();if(!f)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(f)}/balance`)}async fetchOrganizationUsageTransactions($){let f=$.organizationId.trim();if(!f)throw Error("organizationId is required");let J=await this.resolveOrganizationMemberId(f,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(f)}/members/${encodeURIComponent(J)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let f=$?.trim();if(f)return f;let Q=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(Q)return Q;let Z=await this.fetchMe();if(!Z.id?.trim())throw Error("Unable to resolve current user id");return Z.id}async resolveOrganizationMemberId($,f){let J=f?.trim();if(J)return J;let Z=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(Z)return Z;let j=(await this.fetchUserOrganizations()).find((X)=>X.organizationId===$)?.memberId;if(!j?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return j}async request($,f){let J=(await this.getAuthTokenFn())?.trim();if(!J)throw Error("No Cline account auth token found");let Q=this.getHeadersFn?await this.getHeadersFn():{},Z=new AbortController,W=setTimeout(()=>Z.abort(),this.requestTimeoutMs);try{let j=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:f?.method??"GET",headers:{Authorization:`Bearer ${J}`,"Content-Type":"application/json",...Q??{}},body:f?.body!==void 0?JSON.stringify(f.body):void 0,signal:Z.signal});if(j.status===204||f?.expectNoContent){if(!j.ok)throw Error(`Cline account request failed with status ${j.status}`);return}let X=await j.text(),H;if(X.trim())try{H=JSON.parse(X)}catch{if(!j.ok)throw Error(VX(j.status,X,void 0));throw Error("Cline account response was not valid JSON")}if(!j.ok)throw Error(VX(j.status,X,H));if(typeof H==="object"&&H!==null){let Y=H;if(typeof Y.success==="boolean"){if(!Y.success)throw Error(Y.error||"Cline account request failed");if(Y.data!==void 0)return Y.data}}if(H===void 0||H===null)throw Error("Cline account response payload was empty");return H}finally{clearTimeout(W)}}}function jJ($){return $.action==="clineAccount"}async function XJ($,f){switch($.operation){case"fetchMe":return f.fetchMe();case"fetchBalance":return f.fetchBalance($.userId);case"fetchUsageTransactions":return f.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return f.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return f.fetchUserOrganizations();case"fetchOrganizationBalance":return f.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return f.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await f.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return f.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class E8{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 f=$.trim();if(!f)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:f})}async fetchOrganizationUsageTransactions($){let f=$.organizationId.trim();if(!f)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:f,...$.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 BX={};q(BX,{createOAuthClientCallbacks:()=>h8});function h8($){return{onAuth:({url:f,instructions:J})=>{if($.onOutput?.(J??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(f)).catch((Q)=>{$.onOpenUrlError?.({url:f,error:Q})})}catch(Q){$.onOpenUrlError?.({url:f,error:Q})}$.onOutput?.(f)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}T0();var LX={};q(LX,{startClineDeviceAuth:()=>Q7,refreshClineToken:()=>b8,loginClineOAuth:()=>pf,getValidClineCredentials:()=>k8,createClineOAuthProvider:()=>W7,completeClineDeviceAuth:()=>Z7});import{getClineEnvironmentConfig as o9}from"@cline/shared";var HJ={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},FX={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},e9="https://api.workos.com",mD="/auth",KX=Array.from({length:11},($,f)=>48801+f),vD=300000,cD=30000,lf=30000,uD=300,dD=5;class Q1 extends Error{status;errorCode;constructor($,f){super($);this.name="ClineOAuthTokenError",this.status=f?.status,this.errorCode=f?.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 lD($){let f=Date.parse($);if(Number.isNaN(f))throw Error(`Invalid expiresAt value: ${$}`);return f}function $7($,f,J={}){let Q=$.userInfo.clineUserId??J.accountId,Z=$.refreshToken??J.refresh;if(!Z)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:Z,expires:lD($.expiresAt),accountId:Q??void 0,email:$.userInfo.email||J.email,metadata:{provider:f,tokenType:$.tokenType,userInfo:$.userInfo}}}async function f7($){if(!$)return{};return typeof $==="function"?await $():$}function GX($,f){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return f;return Math.floor($)}async function PX($){await new Promise((f)=>setTimeout(f,$))}function J7($,f){if(!$.success||!$.data?.accessToken)throw Error(f);return $.data}async function DX($,f){let J=await fetch(w1(e9,FX.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(f?.requestTimeoutMs??lf)}),Q=await J.json().catch(()=>({}));if(!J.ok)throw new Q1(`Device authorization failed: ${J.status}${Q.error_description?` - ${Q.error_description}`:""}`,{status:J.status,errorCode:Q.error});if(!Q.device_code||!Q.user_code||!Q.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:Q.device_code,userCode:Q.user_code,verificationUri:Q.verification_uri,verificationUriComplete:Q.verification_uri_complete,expiresInSeconds:GX(Q.expires_in,uD),pollIntervalSeconds:GX(Q.interval,dD)}}async function RX($){let f=Date.now()+$.expiresInSeconds*1000,J=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=f){let Q=await fetch(w1($.workosApiBaseUrl,FX.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)}),Z=await Q.json().catch(()=>({}));if(Q.ok){if(!Z.access_token||!Z.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:Z.access_token,refreshToken:Z.refresh_token,tokenType:Z.token_type??"Bearer"}}switch(Z.error){case"authorization_pending":{await PX(J*1000);break}case"slow_down":{J+=1,await PX(J*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new Q1(Z.error_description||"WorkOS authorization failed",{status:Q.status,errorCode:Z.error});default:throw new Q1(`WorkOS token polling failed: ${Q.status}${Z.error_description?` - ${Z.error_description}`:""}`,{status:Q.status,errorCode:Z.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function UX($,f,J){let Q={accessToken:$.accessToken,refreshToken:$.refreshToken},Z=await fetch(w1(f.apiBaseUrl,HJ.register),{method:"POST",headers:{"Content-Type":"application/json",...await f7(f.headers)},body:JSON.stringify(Q),signal:AbortSignal.timeout(f.requestTimeoutMs??lf)});if(!Z.ok){let j=await Z.text().catch(()=>""),X=qf(j);throw new Q1(`Token registration failed: ${Z.status}${X.message?` - ${X.message}`:""}`,{status:Z.status,errorCode:X.code})}let W=await Z.json();return $7(J7(W,"Invalid token exchange response"),J??f.provider)}async function pD($,f,J,Q){let Z={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:f,provider:Q??J.provider},W=await fetch(w1(J.apiBaseUrl,HJ.token),{method:"POST",headers:{"Content-Type":"application/json",...await f7(J.headers)},body:JSON.stringify(Z),signal:AbortSignal.timeout(J.requestTimeoutMs??lf)});if(!W.ok){let X=await W.text().catch(()=>""),H=qf(X);throw new Q1(`Token exchange failed: ${W.status}${H.message?` - ${H.message}`:""}`,{status:W.status,errorCode:H.code})}let j=await W.json();return $7(J7(j,"Invalid token exchange response"),Q??J.provider)}async function pf($){L$($.telemetry,$.provider??"cline");let f=$.useWorkOSDeviceAuth??!0,J=$.callbackPorts?.length?$.callbackPorts:KX,Q=$.callbackPath??mD,Z=f?null:await a0({ports:J,callbackPath:Q,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),W=Z?.callbackUrl||`http://127.0.0.1:${J[0]??KX[0]}${Q}`;try{let j;if(f){let X=o9().workOsClientId,H=await DX(X,$);$.callbacks.onAuth({url:H.verificationUriComplete??H.verificationUri,instructions:`Enter this code in your browser: ${H.userCode}`});let Y=await RX({clientId:X,deviceCode:H.deviceCode,expiresInSeconds:H.expiresInSeconds,initialPollIntervalSeconds:H.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??lf,workosApiBaseUrl:e9,onProgress:$.callbacks.onProgress});j=await UX(Y,$,$.provider)}else{let X=new URL(w1($.apiBaseUrl,HJ.authorize));X.searchParams.set("client_type","extension"),X.searchParams.set("callback_url",W),X.searchParams.set("redirect_uri",W),$.callbacks.onAuth({url:X.toString(),instructions:"Continue the authentication process in your browser."});let H,Y=$.provider,V=await wf({waitForCallback:Z?.waitForCallback??(async()=>null),cancelWait:Z?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(V.error)throw Error(`OAuth error: ${V.error}`);if(H=V.code,Y=V.provider??Y,!H){let A=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),B=Mf(A,{includeProvider:!0});H=B.code,Y=B.provider??Y}if(!H)throw Error("Missing authorization code");j=await pD(H,W,$,Y)}return O$($.telemetry,$.provider??"cline"),_$($.telemetry,{id:j.accountId,email:j.email,provider:$.provider??"cline"}),j}catch(j){throw z$($.telemetry,$.provider??"cline",j instanceof Error?j.message:String(j)),j}finally{Z?.close()}}async function Q7($){return await DX(o9().workOsClientId,$)}async function Z7($){let f=$.provider??"cline";L$($.telemetry,f);try{let J=await RX({clientId:o9().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??lf,workosApiBaseUrl:e9}),Q=await UX(J,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return O$($.telemetry,f),_$($.telemetry,{id:Q.accountId,email:Q.email,provider:f}),Q}catch(J){throw z$($.telemetry,f,J instanceof Error?J.message:String(J)),J}}async function b8($,f){let J=await fetch(w1(f.apiBaseUrl,HJ.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await f7(f.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(f.requestTimeoutMs??lf)});if(!J.ok){let W=await J.text().catch(()=>""),j=qf(W);throw new Q1(`Token refresh failed: ${J.status}${j.message?` - ${j.message}`:""}`,{status:J.status,errorCode:j.code})}let Q=await J.json(),Z=$.metadata?.provider??f.provider;return $7(J7(Q,"Invalid token refresh response"),Z,$)}async function k8($,f,J){if(!$)return null;let Q=J?.refreshBufferMs??vD,Z=J?.retryableTokenGraceMs??cD;if(J?.forceRefresh!==!0&&!S1($,Q))return $;try{return await b8($,f)}catch(j){if(j instanceof Q1&&j.isLikelyInvalidGrant())return n$(f.telemetry,f.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>Z)return $;return null}}function W7($){return{id:"cline",name:"Cline Account",usesCallbackServer:!($.useWorkOSDeviceAuth??!0),async login(f){return pf({...$,callbacks:f})},async refreshToken(f){return b8(f,$)},getApiKey(f){return`workos:${f.access}`}}}T0();var _X={};q(_X,{refreshOpenAICodexToken:()=>I8,openaiCodexOAuthProvider:()=>H7,normalizeOpenAICodexCredentials:()=>X7,loginOpenAICodex:()=>rf,isOpenAICodexTokenExpired:()=>j7,getValidOpenAICodexCredentials:()=>x8,OPENAI_CODEX_OAUTH_CONFIG:()=>e});import{nanoid as rD}from"nanoid";var e={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 YJ extends Error{status;errorCode;constructor($,f){super($);this.name="OpenAICodexOAuthTokenError",this.status=f?.status,this.errorCode=f?.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 iD($,f,J=e.redirectUri){let Q=await fetch(e.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:e.clientId,code:$,code_verifier:f,redirect_uri:J}),signal:AbortSignal.timeout(e.httpTimeoutMs)});if(!Q.ok)return{type:"failed"};let Z=await Q.json();if(!Z.access_token||!Z.refresh_token||typeof Z.expires_in!=="number")return{type:"failed"};return{type:"success",access:Z.access_token,refresh:Z.refresh_token,expires:Date.now()+Z.expires_in*1000,email:Z.email,idToken:Z.id_token}}async function nD($){try{let f=await fetch(e.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:e.clientId}),signal:AbortSignal.timeout(e.httpTimeoutMs)});if(!f.ok){let Q=await f.text().catch(()=>""),Z=qf(Q);throw new YJ(`Token refresh failed: ${f.status}${Z.message?` - ${Z.message}`:""}`,{status:f.status,errorCode:Z.code})}let J=await f.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}catch(f){if(f instanceof YJ)throw f;return{type:"failed"}}}async function aD($="pi"){let{verifier:f,challenge:J}=await U6(),Q=rD(32),Z=new URL(e.authorizationEndpoint);return Z.searchParams.set("response_type","code"),Z.searchParams.set("client_id",e.clientId),Z.searchParams.set("redirect_uri",e.redirectUri),Z.searchParams.set("scope",e.scopes),Z.searchParams.set("code_challenge",J),Z.searchParams.set("code_challenge_method","S256"),Z.searchParams.set("state",Q),Z.searchParams.set("id_token_add_organizations","true"),Z.searchParams.set("codex_cli_simplified_flow","true"),Z.searchParams.set("originator",$),{verifier:f,state:Q,url:Z.toString()}}function tD(){try{let $=new URL(e.redirectUri),f=$.port.length>0?Number.parseInt($.port,10):e.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(f)?f:e.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:e.callbackPort,callbackPath:"/auth/callback",redirectUri:e.redirectUri}}}function OX($,f){let J=f?G0(f):G0($),Q=J?J:G0($),W=Q?.[e.jwtClaimPath]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let j=Q?.organizations;if(Array.isArray(j)&&j.length>0){let H=j[0];if(typeof H?.id==="string"&&H.id.length>0)return H.id}let X=Q?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;return null}function zX($,f){let J=OX($.access,$.idToken)??f?.accountId;if(!J)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||f?.refresh||"",expires:$.expires,accountId:J,email:$.email??f?.email,metadata:{...f?.metadata??{},provider:"openai-codex"}}}async function rf($){L$($.telemetry,"openai-codex");let f=tD(),{verifier:J,state:Q,url:Z}=await aD($.originator),W=await a0({host:f.host,ports:[f.port],callbackPath:f.callbackPath,expectedState:Q});$.onAuth({url:Z,instructions:"Continue the authentication process in your browser."});let j;try{let X=await wf({waitForCallback:W.waitForCallback,cancelWait:W.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(X.state&&X.state!==Q)throw Error("State mismatch");if(j=X.code,!j){let V=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),A=Mf(V,{allowHashCodeState:!0});if(A.state&&A.state!==Q)throw Error("State mismatch");j=A.code}if(!j)throw Error("Missing authorization code");let H=await iD(j,J,f.redirectUri);if(H.type!=="success")throw Error("Token exchange failed");let Y=zX(H);return O$($.telemetry,"openai-codex"),_$($.telemetry,{id:Y.accountId,email:Y.email,provider:"openai-codex"}),Y}catch(X){throw z$($.telemetry,"openai-codex",X instanceof Error?X.message:String(X)),X}finally{W.close()}}async function I8($,f){let J=await nD($);if(J.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let Q=zX(J,f);if(!Q.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return Q}async function x8($,f){if(!$)return null;let J=f?.refreshBufferMs??e.refreshBufferMs,Q=f?.retryableTokenGraceMs??e.retryableTokenGraceMs;if(f?.forceRefresh!==!0&&!S1($,J))return $;try{return await I8($.refresh,$)}catch(W){if(W instanceof YJ&&W.isLikelyInvalidGrant())return n$(f?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>Q)return $;return null}}function j7($,f=e.refreshBufferMs){return S1($,f)}function X7($){let f=$.accountId??OX($.access);if(!f)throw Error("Failed to extract accountId from token");return{...$,accountId:f,metadata:{...$.metadata??{},provider:"openai-codex"}}}var H7={id:"openai-codex",name:"ChatGPT Plus/Pro (ChatGPT Subscription)",usesCallbackServer:!0,async login($){return rf({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput})},async refreshToken($){return I8($.refresh,$)},getApiKey($){return $.access}};var nY={};q(nY,{ClineCore:()=>N4});function yX($){if($===!0)return{};if(!$)return;return $}function TX($){if($==="user")return"global";return $}class Y7{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let f=this.getService().ingestEvent($);return{event:f.event,duplicate:f.duplicate,matchedSpecIds:f.matchedSpecs.map((J)=>J.specId),queuedRuns:f.queuedRuns,suppressions:f.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function NX($){let{host:f}=$;return{async startSession(J){let Q=(J.cwd?.trim()||J.workspaceRoot).trim(),Z=await f.startSession({source:J.source?.trim()||K0.CLI,interactive:!1,config:{providerId:vf(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:eD(J),maxIterations:J.maxIterations,enableTools:J.enableTools!==!1,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},toolPolicies:J.toolPolicies??{"*":{autoApprove:J.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:J.configExtensions}});return{sessionId:Z.sessionId,startResult:{sessionId:Z.sessionId,manifestPath:Z.manifestPath,messagesPath:Z.messagesPath}}},async sendSession(J,Q){let Z=await f.runTurn({sessionId:J,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((W)=>W.content),delivery:Q.delivery});if(!Z)throw Error("ClineCore automation runtime returned no result");return{result:oD(Z)}},async abortSession(J){return await f.abort(J,Error("ClineCore automation abort")),{applied:!0}},async stopSession(J){return await f.stopSession(J),{applied:!0}}}}function VJ($){let f=sD($.automationService,$.automation),J=$.context?.client??($.clientName?{name:$.clientName}:void 0),Q=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),Z=$.context?.logger??$.logger,W=$.context?.telemetry??$.telemetry;if(!f&&!J&&!Q&&!Z&&!W)return $.context;return{...$.context??{},...J?{client:J}:{},...Q?{user:Q}:{},...Z?{logger:Z}:{},...W?{telemetry:W}:{},...f?{automation:f}:{}}}function sD($,f){if(!$)return;return{ingestEvent:(J)=>{f.ingestEvent(J)}}}function oD($){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((f)=>({name:f.name,input:f.input,output:f.output,error:f.error,durationMs:f.durationMs}))}}function eD($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var BH={};q(BH,{createCoreSettingsService:()=>r1,CoreSettingsService:()=>W1});import{existsSync as TJ}from"node:fs";import{basename as YH,isAbsolute as KU,relative as GU}from"node:path";var vX={};q(vX,{resolveWorkflowsConfigSearchPaths:()=>r8,resolveSkillsConfigSearchPaths:()=>l8,resolveRulesConfigSearchPaths:()=>p8,parseWorkflowConfigFromMarkdown:()=>d8,parseSkillConfigFromMarkdown:()=>c8,parseRuleConfigFromMarkdown:()=>u8,createWorkflowsConfigDefinition:()=>a8,createUserInstructionConfigService:()=>Z1,createSkillsConfigDefinition:()=>i8,createRulesConfigDefinition:()=>n8,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>v8,UnifiedConfigFileWatcher:()=>g1,SKILLS_CONFIG_DIRECTORY_NAME:()=>m8,RULES_CONFIG_DIRECTORY_NAME:()=>PJ});import{createHash as $R}from"node:crypto";import{watch as fR}from"node:fs";import{readdir as JR,readFile as QR}from"node:fs/promises";import{join as ZR}from"node:path";function WR($){return $R("sha1").update($).digest("hex")}function wX($){return Boolean($&&typeof $==="object"&&"code"in $)}function MX($){return wX($)&&$.code==="ENOENT"}function qX($){return wX($)&&($.code==="EACCES"||$.code==="EPERM")}class g1{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($,f){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=f?.debounceMs??75,this.emitParseErrors=f?.emitParseErrors??!1;for(let J of $){if(this.definitionsByType.has(J.type))throw Error(`Duplicate unified config definition type '${J.type}'.`);this.definitionsByType.set(J.type,J),this.recordsByType.set(J.type,new Map),this.discoveredDirectoriesByType.set(J.type,new Set);for(let Q of J.directories){let Z=this.baseTypesByDirectory.get(Q);if(Z)Z.add(J.type);else this.baseTypesByDirectory.set(Q,new Set([J.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 f=this.definitionsByType.get($);if(!f)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(f)})}getSnapshot($){let f=this.recordsByType.get($);return new Map([...f?.entries()??[]].map(([J,Q])=>[J,{...Q}]))}getAllSnapshots(){let $=new Map;for(let[f,J]of this.recordsByType.entries())$.set(f,new Map([...J.entries()].map(([Q,Z])=>[Q,{...Z}])));return $}emit($){for(let f of this.listeners)f($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[f,J]of this.watchersByDirectory.entries()){if($.has(f))continue;J.close(),this.watchersByDirectory.delete(f)}this.watchedTypesByDirectory=$;for(let f of $.keys()){if(this.watchersByDirectory.has(f))continue;try{let J=fR(f,()=>{let Q=this.watchedTypesByDirectory.get(f);if(!Q)return;for(let Z of Q)this.pendingTypes.add(Z);this.scheduleFlush()});this.watchersByDirectory.set(f,J),J.on("error",(Q)=>{let Z=this.watchedTypesByDirectory.get(f);if(!Z)return;for(let W of Z)this.emit({kind:"error",type:W,error:Q,filePath:f})})}catch(J){if(!MX(J)&&!qX(J)){let Q=$.get(f);if(!Q)continue;for(let Z of Q)this.emit({kind:"error",type:Z,error:J,filePath:f})}}}}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 f of $){let J=this.definitionsByType.get(f);if(!J)continue;await this.refreshTypeInternal(J)}})},this.debounceMs)}async refreshTypeInternal($){let{records:f,discoveredDirectories:J}=await this.loadDefinition($),Q=this.recordsByType.get($.type)??new Map;for(let[Z,W]of Q.entries()){if(f.has(Z))continue;this.emit({kind:"remove",type:$.type,id:Z,filePath:W.filePath})}for(let[Z,W]of f.entries()){let j=Q.get(Z);if(j&&j.filePath===W.filePath&&j.fingerprint===W.fingerprint)continue;this.emit({kind:"upsert",record:{type:W.type,id:Z,item:W.item,filePath:W.filePath}})}if(this.recordsByType.set($.type,f),this.discoveredDirectoriesByType.set($.type,J),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let f=new Map,J=new Set;for(let Q of $.directories){J.add(Q);let Z=$.discoverFiles?await $.discoverFiles(Q):await this.readDirectoryFileCandidates(Q);for(let W of Z){let{fileName:j,filePath:X}=W;if(J.add(W.directoryPath),$.includeFile&&!$.includeFile(j,X))continue;try{let H=await QR(X,"utf8"),Y={type:$.type,directoryPath:W.directoryPath,fileName:j,filePath:X,content:H},V=$.parseFile(Y),A=$.resolveId(V,Y).trim();if(!A)continue;f.set(A,{type:$.type,id:A,item:V,filePath:X,fingerprint:WR(H)})}catch(H){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:H,filePath:X})}}}return{records:f,discoveredDirectories:J}}buildDesiredTypesByDirectory(){let $=new Map;for(let[f,J]of this.baseTypesByDirectory.entries())$.set(f,new Set(J));for(let[f,J]of this.discoveredDirectoriesByType.entries())for(let Q of J){let Z=$.get(Q);if(Z)Z.add(f);else $.set(Q,new Set([f]))}return $}async readDirectoryFileCandidates($){try{return(await JR($,{withFileTypes:!0})).filter((J)=>J.isFile()).map((J)=>({directoryPath:$,fileName:J.name,filePath:ZR($,J.name)})).sort((J,Q)=>J.fileName.localeCompare(Q.fileName))}catch(f){if(MX(f)||qX(f))return[];throw f}}}import{readdir as V7,readFile as jR,stat as SX}from"node:fs/promises";import{basename as m1,dirname as XR,extname as A7,join as N0}from"node:path";import{RULES_CONFIG_DIRECTORY_NAME as PJ,resolveRulesConfigSearchPaths as HR,resolveSkillsConfigSearchPaths as YR,resolveWorkflowsConfigSearchPaths as VR,SKILLS_CONFIG_DIRECTORY_NAME as m8,WORKFLOWS_CONFIG_DIRECTORY_NAME as v8}from"@cline/shared/storage";import AR from"yaml";var AJ="SKILL.md",BR="managed.json",KR=new Set([".md",".markdown",".txt"]);function B7($){return $.trim().toLowerCase()}function g8($){let f=$;return f?.code==="ENOENT"||f?.code==="EACCES"||f?.code==="EPERM"}function BJ($){return KR.has(A7($).toLowerCase())}async function K7($){try{let f=await V7($,{withFileTypes:!0}),J=[];for(let Q of f){if(!Q.isDirectory())continue;let Z=N0($,Q.name),W=N0(Z,BR);try{let j=await jR(W,"utf8"),X=JSON.parse(j);if(X&&typeof X==="object")J.push(Z)}catch(j){if(g8(j))continue;if(j?.name==="SyntaxError")continue;throw j}}return J.sort((Q,Z)=>Q.localeCompare(Z))}catch(f){if(g8(f))return[];throw f}}function G7($){let f=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=$.match(f);if(!J)return{data:{},body:$,hadFrontmatter:!1};let[,Q,Z]=J;try{let W=AR.parse(Q);return{data:W&&typeof W==="object"&&!Array.isArray(W)?W:{},body:Z,hadFrontmatter:!0}}catch(W){let j=W instanceof Error?W.message:String(W);return{data:{},body:$,hadFrontmatter:!0,parseError:j}}}function KJ($,f,J){if($===void 0||$===null){if(J)throw Error(`Missing required frontmatter field '${f}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${f}' must be a string.`);let Q=$.trim();if(!Q&&J)throw Error(`Frontmatter field '${f}' cannot be empty.`);return Q||void 0}function nf($,f){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${f}' must be a boolean.`);return $}function c8($,f){let{data:J,body:Q,parseError:Z}=G7($);if(Z)throw Error(`Failed to parse YAML frontmatter: ${Z}`);let W=Q.trim();if(!W)throw Error("Missing instructions body in skill file.");let X=KJ(J.name,"name",!1)??f.trim();if(!X)throw Error("Missing skill name.");return{name:X,description:KJ(J.description,"description",!1),disabled:nf(J.disabled,"disabled")??(nf(J.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:J}}function u8($,f){let{data:J,body:Q,parseError:Z}=G7($);if(Z)throw Error(`Failed to parse YAML frontmatter: ${Z}`);let W=Q.trim();if(!W)throw Error("Missing instructions body in rule file.");let j=KJ(J.name,"name",!1)??f.trim();if(!j)throw Error("Missing rule name.");return{name:j,disabled:nf(J.disabled,"disabled")??(nf(J.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:J}}function d8($,f){let{data:J,body:Q,parseError:Z}=G7($);if(Z)throw Error(`Failed to parse YAML frontmatter: ${Z}`);let W=Q.trim();if(!W)throw Error("Missing instructions body in workflow file.");let j=KJ(J.name,"name",!1)??f.trim();if(!j)throw Error("Missing workflow name.");return{name:j,disabled:nf(J.disabled,"disabled")??(nf(J.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:J}}function l8($){return YR($)}function p8($){return HR($)}function r8($){return VR($)}async function CX($){if(m1($)===".cline"){let f=await K7($);return(await Promise.all(f.map((Q)=>CX(N0(Q,m8))))).flat()}try{let f=await V7($,{withFileTypes:!0}),J=[];for(let Q of f){if(Q.isFile()&&Q.name===AJ){J.push({directoryPath:$,fileName:Q.name,filePath:N0($,Q.name)});continue}if(Q.isDirectory())J.push({directoryPath:N0($,Q.name),fileName:AJ,filePath:N0($,Q.name,AJ)})}return J}catch(f){if(g8(f))return[];throw f}}async function GJ($){if(m1($)===".cline"){let f=await K7($);return(await Promise.all(f.map((Q)=>GJ(N0(Q,"rules.md"))))).flat()}try{if((await SX($)).isFile())return[{directoryPath:XR($),fileName:m1($),filePath:$}]}catch(f){if(!g8(f))throw f}try{let J=(await V7($,{withFileTypes:!0})).filter((Z)=>Z.isFile()&&BJ(Z.name)).map((Z)=>({directoryPath:$,fileName:Z.name,filePath:N0($,Z.name)})),Q=N0($,"AGENTS.md");try{if((await SX(Q)).isFile()){if(!J.some((j)=>j.fileName==="AGENTS.md"))J.push({directoryPath:$,fileName:"AGENTS.md",filePath:Q})}}catch{}return J}catch(f){if(g8(f))return[];throw f}}async function GR($){if(m1($)===".cline"){let f=await K7($);return(await Promise.all(f.map((Q)=>GJ(N0(Q,v8))))).flat()}return GJ($)}function i8($){let f=$?.directories??l8($?.workspacePath),J=$?.workspacePath?N0($.workspacePath,".cline"):void 0;return{type:"skill",directories:J?[...f,J]:f,discoverFiles:CX,includeFile:(Q)=>Q===AJ,parseFile:(Q)=>c8(Q.content,m1(Q.directoryPath)),resolveId:(Q)=>B7(Q.name)}}function n8($){let f=$?.directories??p8($?.workspacePath),J=$?.workspacePath?N0($.workspacePath,".cline"):void 0;return{type:"rule",directories:J?[...f,J]:f,discoverFiles:GJ,includeFile:(Q,Z)=>Q===".clinerules"||BJ(Q)||BJ(Z),parseFile:(Q)=>u8(Q.content,m1(Q.filePath,A7(Q.filePath))),resolveId:(Q)=>B7(Q.name)}}function a8($){let f=$?.directories??r8($?.workspacePath),J=$?.workspacePath?N0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:J?[...f,J]:f,discoverFiles:GR,includeFile:(Q)=>BJ(Q),parseFile:(Q)=>d8(Q.content,m1(Q.filePath,A7(Q.filePath))),resolveId:(Q)=>B7(Q.name)}}function EX($){let f=[i8($?.skills),n8($?.rules),a8($?.workflows)];return new g1(f,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as hX}from"@cline/shared";function PR($,f){if($.description?.trim())return hX($.description,".");if(f==="workflow")return;return hX($.instructions,".")}function FR($){return $.disabled!==!0}function bX($,f){return[...$.getSnapshot(f).entries()].map(([J,Q])=>({id:J,record:Q})).filter(({record:J})=>FR(J.item)).map(({id:J,record:Q})=>({id:J,name:Q.item.name,instructions:Q.item.instructions,description:PR(Q.item,f),kind:f})).sort((J,Q)=>J.name.localeCompare(Q.name))}function t8($){let f=new Map;for(let J of[...bX($,"workflow"),...bX($,"skill")])if(!f.has(J.name))f.set(J.name,J);return[...f.values()].sort((J,Q)=>J.name.localeCompare(Q.name))}function kX($,f){if(!$.startsWith("/")||$.length<2)return $;let J=$.match(/^\/(\S+)/);if(!J)return $;let Q=J[1];if(!Q)return $;let Z=Q.length+1,W=$.slice(Z),j=t8(f).find((X)=>X.name===Q);return j?`${j.instructions}${W}`:$}var xX={};q(xX,{mergeRulesForSystemPrompt:()=>tf,loadRulesForSystemPromptFromWatcher:()=>P7,listEnabledRulesFromWatcher:()=>IX,isRuleEnabled:()=>FJ,formatRulesForSystemPrompt:()=>af});function FJ($){return $.disabled!==!0}function af($){if($.length===0)return"";return`
184
+ </html>`;var Cj="a8331954c0cf48ba99b5dd223a14c6ea",Ej="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",hj="openid offline_access",h6="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",bj="c1aba3deed5740659981a752714eba33",kj="https://login-ext.identity.oraclecloud.com",Ij="openid offline_access",b6="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",xj="opc-request-id",TF="/auth/oca",MF=Array.from({length:11},($,f)=>48801+f),qF=300000,wF=30000,gj=30000,SF=600000;class k6 extends Error{status;errorCode;constructor($,f){super($);this.name="OcaOAuthTokenError",this.status=f?.status,this.errorCode=f?.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 e$={internal:{clientId:Cj,idcsUrl:Ej,scopes:hj,baseUrl:h6},external:{clientId:bj,idcsUrl:kj,scopes:Ij,baseUrl:b6}},R8=new Map,CF=86400000,EF=300000,hF=32,h9=new E9(CF,hF);function mj($){if(typeof $==="function")return $();return $??"internal"}function vj($){return{internal:{clientId:$?.internal?.clientId??e$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??e$.internal.idcsUrl,scopes:$?.internal?.scopes??e$.internal.scopes,baseUrl:$?.internal?.baseUrl??e$.internal.baseUrl},external:{clientId:$?.external?.clientId??e$.external.clientId,idcsUrl:$?.external?.idcsUrl??e$.external.idcsUrl,scopes:$?.external?.scopes??e$.external.scopes,baseUrl:$?.external?.baseUrl??e$.external.baseUrl}}}function bF($=Date.now()){let f=$-SF;for(let[J,Q]of R8.entries())if(Q.createdAt<f)R8.delete(J)}function kF($,f,J){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let Z=G0(f)?.exp;if(typeof Z==="number"&&Z>0)return Z*1000;let j=G0(J)?.exp;if(typeof j==="number"&&j>0)return j*1000;return Date.now()+3600000}function cj($,f,J){let Q=$.access_token;if(!Q)throw Error("Token response did not include an access token");let Z=$.refresh_token??J?.refresh;if(!Z)throw Error("Token response did not include a refresh token");let W=G0($.id_token),j=G0(Q),X=W?.sub??j?.sub,H=W?.email??j?.email;return{access:Q,refresh:Z,expires:kF($,Q,$.id_token),accountId:X??J?.accountId,email:H??J?.email,metadata:{...J?.metadata??{},provider:"oca",mode:f,subject:X,idToken:$.id_token}}}async function uj($,f){let J=L6($),Q=h9.get(J);if(Q)return Q;let Z=`${J}/.well-known/openid-configuration`,W=await fetch(Z,{method:"GET",signal:AbortSignal.timeout(f)});if(!W.ok){let H=`${J}/oauth2/v1/token`;return h9.set(J,H,Date.now(),EF),H}let X=(await W.json()).token_endpoint||`${J}/oauth2/v1/token`;return h9.set(J,X),X}function dj($){return{code:$.error,message:$.error_description}}async function IF($){let f=R8.get($.state);if(!f)throw Error("No PKCE verifier found for this state");R8.delete($.state);let J=$.mode==="external"?$.config.external:$.config.internal,Q=await uj(J.idcsUrl,$.requestTimeoutMs),Z=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:f.redirectUri,client_id:J.clientId,code_verifier:f.verifier}),W=await fetch(Q,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:Z,signal:AbortSignal.timeout($.requestTimeoutMs)}),j=await W.json();if(!W.ok){let H=dj(j);throw new k6(`Token exchange failed: ${W.status}${H.message?` - ${H.message}`:""}`,{status:W.status,errorCode:H.code})}let X=G0(j.id_token);if(!j.id_token||!X)throw Error("No ID token received from OCA");if(X.nonce!==f.nonce)throw Error("OIDC nonce verification failed");return cj(j,$.mode)}function xF($){let f=$.mode==="external"?$.config.external:$.config.internal,J=new URL(`${L6(f.idcsUrl)}/oauth2/v1/authorize`);return J.searchParams.set("client_id",f.clientId),J.searchParams.set("response_type","code"),J.searchParams.set("scope",f.scopes),J.searchParams.set("code_challenge",$.challenge),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("redirect_uri",$.callbackUrl),J.searchParams.set("state",$.state),J.searchParams.set("nonce",$.nonce),J.toString()}async function gf($){L$($.telemetry,"oca");let f=vj($.config),J=mj($.mode),Q=$.callbackPorts?.length?$.callbackPorts:MF,Z=$.callbackPath??TF,W=$.requestTimeoutMs??gj,j=await a0({ports:Q,callbackPath:Z,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=j.callbackUrl;if(!X)throw Error("Unable to bind local OAuth callback server");let H=Sj(16),Y=Sj(16),{verifier:V,challenge:A}=await U6();bF(),R8.set(H,{verifier:V,nonce:Y,mode:J,redirectUri:X,createdAt:Date.now()});let B=xF({callbackUrl:X,mode:J,state:H,nonce:Y,challenge:A,config:f});$.callbacks.onAuth({url:B,instructions:"Continue the authentication process in your browser."});try{let K=await wf({waitForCallback:j.waitForCallback,cancelWait:j.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!==H)throw Error("State mismatch");let F=await IF({code:G,state:R,mode:J,config:f,requestTimeoutMs:W});return O$($.telemetry,"oca"),_$($.telemetry,{id:F.accountId,email:F.email,provider:"oca"}),F}catch(K){throw z$($.telemetry,"oca",K instanceof Error?K.message:String(K)),K}finally{j.close()}}async function U8($,f={}){let J=vj(f.config),Q=f.requestTimeoutMs??gj,Z=$.metadata?.mode,W=Z==="internal"||Z==="external"?Z:mj(f.mode),j=W==="external"?J.external:J.internal,X=await uj(j.idcsUrl,Q),H=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:j.clientId}),Y=await fetch(X,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:H,signal:AbortSignal.timeout(Q)}),V=await Y.json();if(!Y.ok){let A=dj(V);throw new k6(`Token refresh failed: ${Y.status}${A.message?` - ${A.message}`:""}`,{status:Y.status,errorCode:A.code})}return cj(V,W,$)}async function L8($,f,J){if(!$)return null;let Q=f?.refreshBufferMs??J?.refreshBufferMs??qF,Z=f?.retryableTokenGraceMs??J?.retryableTokenGraceMs??wF;if(f?.forceRefresh!==!0&&!S1($,Q))return $;try{return await U8($,J)}catch(j){if(j instanceof k6&&j.isLikelyInvalidGrant())return n$(J?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>Z)return $;return null}}function b9($={}){return{id:"oca",name:"Oracle Code Assist",usesCallbackServer:!0,async login(f){return gf({...$,callbacks:f})},async refreshToken(f){return U8(f,$)},getApiKey(f){return f.access}}}async function I6($,f){let J=new TextEncoder,Q=async(Y)=>{let V=await crypto.subtle.digest("SHA-256",J.encode(Y));return Array.from(new Uint8Array(V).slice(0,4),(A)=>A.toString(16).padStart(2,"0")).join("")},[Z,W]=await Promise.all([Q(f),Q($)]),j=Math.floor(Date.now()/1000).toString(16).padStart(8,"0"),X=new Uint32Array(1);crypto.getRandomValues(X);let H=(X[0]??0).toString(16).padStart(8,"0");return Z+W+j+H}async function k9($){let f=await I6($.taskId,$.accessToken);return{Authorization:`Bearer ${$.accessToken}`,"Content-Type":"application/json",client:$.metadata?.client??"Cline","client-version":$.metadata?.clientVersion??"unknown","client-ide":$.metadata?.clientIde??"unknown","client-ide-version":$.metadata?.clientIdeVersion??"unknown",[xj]:f}}var tj={};q(tj,{resolveProviderConfig:()=>y8,getProviderConfig:()=>d6,getLiveModelsCatalog:()=>mf,clearPublicModelsCatalogCache:()=>jD,clearPrivateModelsCatalogCache:()=>l9,clearLiveModelsCatalogCache:()=>d9,OPENAI_COMPATIBLE_PROVIDERS:()=>_8,DEFAULT_MODELS_CATALOG_URL:()=>u6});import*as $0 from"@cline/llms";function I9($){if(!Array.isArray($))return[];return $.map((f)=>{if(typeof f==="string")return f.trim();if(f&&typeof f==="object"){let J=f;for(let Q of[J.id,J.name,J.model])if(typeof Q==="string"&&Q.trim())return Q.trim()}return""}).filter((f)=>f.length>0)}function gF($,f){let J=I9($);if(J.length>0)return J;if(!$||typeof $!=="object")return[];let Q=$,Z=I9(Q.data??Q.models);if(Z.length>0)return Z;if(Q.models&&typeof Q.models==="object"&&!Array.isArray(Q.models)){let j=Object.keys(Q.models).filter((X)=>X.trim().length>0);if(j.length>0)return j}let W=Q.providers?.[f];if(W&&typeof W==="object"){let X=I9(W.models??W);if(X.length>0)return X}return[]}async function x6($,f){let J=await fetch($,{method:"GET"});if(!J.ok)throw Error(`failed to fetch models from ${$}: HTTP ${J.status}`);return gF(await J.json(),f)}function pj($){return $.replace(/\/+$/,"")}function g6($,f,J){let Q=J?.trim();if(!Q)return;let Z=$?.trim();if(!Z||!f?.trim())return Q;try{let W=new URL(Q),j=new URL(f),X=new URL(Z);if(W.origin!==j.origin)return Q;let H=pj(j.pathname),Y=pj(X.pathname);if(H&&W.pathname.startsWith(`${H}/`)){let V=W.pathname.slice(H.length);X.pathname=`${Y}${V}`}else X.pathname=W.pathname;return X.search=W.search,X.hash=W.hash,X.toString()}catch{return Q}}function mF($){return Object.fromEntries(Object.entries($).map(([f,J])=>[f,{...J}]))}function vF($){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 cF=Object.values($0.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:mF($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),rj=Object.fromEntries(cF.map(($)=>[$.id,$]));function uF($){return rj[$]}function dF(){return Object.fromEntries(Object.entries(rj).filter(([,$])=>vF($)))}function ij($=[]){let f=$.flatMap((J)=>{switch(J){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[J];default:return[]}});return f.length>0?f:void 0}var u6="https://models.dev/api.json",lF=600000,nj=300000,pF=5000,c6=new Map,O8=new Map,g9=new Map,m6=new Map;async function rF(){return $0.getGeneratedProviderModels()}async function iF($,f={},J={},Q={},Z={},W={}){let j=await rF(),X=$0.resolveProviderModelCatalogKeys($),H=Object.assign({},...X.map((B)=>j[B]??{})),Y=Boolean($0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),V=Object.keys(Z).length>0;if(Y&&V)return $0.sortModelsByReleaseDate({...Z,...W});let A=Object.keys(Q).length>0;if($==="openai-codex"&&A)return $0.sortModelsByReleaseDate({...Q,...W});return $0.sortModelsByReleaseDate({...H,...f,...J,...Q,...Z,...W})}function nF($,f){let J=$0.resolveProviderModelCatalogKeys($);return Object.assign({},...J.map((Q)=>f[Q]??{}))}function v9($){let f=$?.trim();return f&&f.length>0?f:""}function c9($){let f=$.apiKey?.trim()||$.accessToken?.trim();return f&&f.length>0?f:void 0}function aF($){let f=2166136261;for(let J=0;J<$.length;J+=1)f^=$.charCodeAt(J),f+=(f<<1)+(f<<4)+(f<<7)+(f<<8)+(f<<24);return(f>>>0).toString(16)}function tF($,f){return`${$}:${v9(f.baseUrl)}:${aF(c9(f)??"")}`}function sF($){let f=$?.trim();if(!f)return;let J=G0(f),Q=J?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof Q==="string"&&Q.length>0)return Q;let Z=J?.organizations?.[0]?.id;if(typeof Z==="string"&&Z.length>0)return Z;let W=J?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;return}async function u9($,f,J=pF){let Q=new AbortController,Z=setTimeout(()=>Q.abort(),J);try{return await fetch($,{...f,signal:Q.signal})}finally{clearTimeout(Z)}}function x9($,f,J){if(J&&!$.includes(f))$.push(f)}function z8($,f){let J=["streaming","tools"];return x9(J,"images",Boolean(f.supportsImages)),x9(J,"prompt-cache",Boolean(f.supportsPromptCache)),x9(J,"reasoning",Boolean(f.supportsReasoning)),{id:$,name:f.name??$,contextWindow:f.contextWindow,maxInputTokens:f.maxInputTokens,maxTokens:f.maxTokens,capabilities:J,releaseDate:f.releaseDate,status:"active"}}function oF($){let f=$0.getGeneratedModelsForProvider("openai-native")[$.id];if(f)return{...f,id:$.id,name:$.name??f.name??$.id};return z8($.id,{name:$.name??$.id})}async function eF($,f){let J=await u9("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${f}`,"Content-Type":"application/json"}});if(!J.ok)throw Error(`Baseten model refresh failed: HTTP ${J.status}`);let Z=(await J.json())?.data??[],W={};for(let j of Z){let X=j.id?.trim();if(!X)continue;if(X.includes("whisper")||X.includes("tts")||X.includes("embedding"))continue;let H=j.supported_features??[];W[X]=z8(X,{name:X,contextWindow:j.context_length,maxInputTokens:j.context_length,maxTokens:j.max_completion_tokens,supportsReasoning:H.includes("reasoning")||H.includes("reasoning_effort"),supportsImages:!1})}return W}async function $D($,f){let J=await u9("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":f}});if(!J.ok)throw Error(`Hicap model refresh failed: HTTP ${J.status}`);let Z=(await J.json())?.data??[],W={};for(let j of Z){let X=j.id?.trim();if(!X)continue;W[X]=z8(X,{name:X,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return W}function fD($){let f=v9($);if(!f)return"http://localhost:4000";return f.endsWith("/v1")?f.slice(0,-3):f}async function JD($,f){let Q=`${fD($.baseUrl)}/v1/model/info`,Z=async(Y)=>u9(Q,{method:"GET",headers:{accept:"application/json",...Y}}),W=await Z({"x-litellm-api-key":f});if(!W.ok)W=await Z({Authorization:`Bearer ${f}`});if(!W.ok)throw Error(`LiteLLM model refresh failed: HTTP ${W.status}`);let X=(await W.json())?.data??[],H={};for(let Y of X){let V=Y.model_name?.trim(),B=Y.litellm_params?.model?.trim()||V;if(!B)continue;let K=Y.model_info,G=z8(B,{name:V??B,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(H[B]=G,V)H[V]={...G,id:V,name:V}}return H}async function QD($,f){let J=await $0.listOpenAICodexModels({accessToken:f,accountId:$.accountId??sF(f),cwd:typeof $.codex?.defaultSettings?.cwd==="string"?$.codex.defaultSettings.cwd:void 0,codexPath:typeof $.codex?.defaultSettings?.codexPath==="string"?$.codex.defaultSettings.codexPath:void 0,env:$.codex?.defaultSettings?.env&&typeof $.codex.defaultSettings.env==="object"&&!Array.isArray($.codex.defaultSettings.env)?$.codex.defaultSettings.env:void 0});return Object.fromEntries(J.map((Q)=>[Q.id,oF(Q)]))}var aj={baseten:eF,hicap:$D,litellm:JD,"openai-codex":QD},m9=new Map,v6=new Map;function ZD($,f){return`${$}:${v9(f.baseUrl)}`}async function WD($,f,J){let Q=$0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],Z=g6(J.baseUrl,Q?.provider.baseUrl,Q?.provider.modelsSourceUrl);if(!Z)return{};let W=f?.cacheTtlMs??nj,j=ZD($,J),X=Date.now(),H=m9.get(j);if(H&&H.expiresAt>X)return H.data;let Y=v6.get(j);if(Y)return Y;let V=x6(Z,$).then((A)=>{let B=Object.fromEntries(A.map((K)=>[K,z8(K,{name:K})]));return m9.set(j,{data:B,expiresAt:X+W}),B}).finally(()=>{v6.delete(j)});return v6.set(j,V),V}function jD(){m9.clear(),v6.clear()}async function XD($,f){let J=c9(f);if(!J)return{};let Q=aj[$];if(!Q)return{};return Q(f,J)}function HD($,f,J){if(!J)return!1;if(!aj[$])return!1;if(f?.loadPrivateOnAuth===!1)return!1;return Boolean(c9(J))}async function YD($,f,J){let Q=f?.cacheTtlMs??nj,Z=tF($,J),W=Date.now(),j=g9.get(Z);if(j&&j.expiresAt>W)return j.data;let X=m6.get(Z);if(X)return X;let H=XD($,J).then((Y)=>{return g9.set(Z,{data:Y,expiresAt:W+Q}),Y}).finally(()=>{m6.delete(Z)});return m6.set(Z,H),H}async function VD($){return $0.fetchModelsDevProviderModels($)}async function mf($={}){let f=$.url??u6,J=$.cacheTtlMs??lF,Q=Date.now(),Z=c6.get(f);if(Z&&Z.expiresAt>Q)return Z.data;let W=O8.get(f);if(W)return W;let j=VD(f).then((X)=>{return c6.set(f,{data:X,expiresAt:Q+J}),X}).finally(()=>{O8.delete(f)});return O8.set(f,j),j}function d9($){if($){c6.delete($),O8.delete($);return}c6.clear(),O8.clear()}function l9(){g9.clear(),m6.clear()}function AD($){return Object.fromEntries(Object.entries($).map(([f,J])=>[f,{baseUrl:J.baseUrl,modelId:J.modelId,capabilities:ij(J.capabilities)}]))}var _8=AD(dF());function d6($){let f=uF($);if(!f||!f.baseUrl)return;return{baseUrl:f.baseUrl,modelId:f.modelId,knownModels:f.knownModels,capabilities:ij(f.capabilities)}}async function y8($,f,J){let Q=d6($);if(!Q)return;try{let Z=f?.loadLatestOnInit?await mf(f):void 0,W=Z?nF($,Z):{},j=J&&HD($,f,J)?await YD($,f,J):{},H=Boolean($0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?J??{providerId:$,modelId:Q.modelId,baseUrl:Q.baseUrl}:J,Y=H?await WD($,f,H).catch(()=>({})):{},V=await iF($,Q.knownModels,W,j,Y,J?.knownModels);return{...Q,knownModels:V}}catch(Z){if(f?.failOnError)throw Z;return Q}}var N8=k0.BUILT_IN_PROVIDER,p9=k0.BUILT_IN_PROVIDER_IDS,r9=k0.isBuiltInProviderId,vf=k0.normalizeProviderId,T8=N.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),l6=N.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),p6=N.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),r6=N.object({apiKey:N.string().optional(),accessToken:N.string().optional(),refreshToken:N.string().optional(),expiresAt:N.number().int().positive().optional(),accountId:N.string().optional()}),BD=N.enum(["none","low","medium","high","xhigh"]),i6=N.object({enabled:N.boolean().optional(),effort:BD.optional(),budgetTokens:N.number().int().positive().optional()}),n6=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","profile"]).optional(),usePromptCache:N.boolean().optional(),useCrossRegionInference:N.boolean().optional(),useGlobalInference:N.boolean().optional(),endpoint:N.string().url().optional(),customModelBaseId:N.string().optional()}),a6=N.object({projectId:N.string().optional(),region:N.string().optional()}),t6=N.object({apiVersion:N.string().optional(),useIdentity:N.boolean().optional()}),s6=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()}),o6=N.object({mode:N.enum(["internal","external"]).optional(),usePromptCache:N.boolean().optional()}),e6=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()}),$1=N.object({provider:T8,apiKey:N.string().optional(),auth:r6.optional(),model:N.string().optional(),protocol:l6.optional(),client:p6.optional(),routingProviderId:T8.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:i6.optional(),aws:n6.optional(),gcp:a6.optional(),azure:t6.optional(),sap:s6.optional(),oca:o6.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:e6.optional()});function $J($){return $1.parse($)}function fJ($){return $1.safeParse($)}function KD($){return $.protocol==="openai-responses"||$.client==="openai"}function I0($,f={}){let J=$.provider,Q=vf(J),Z=f.includeKnownModels!==!1,W=$.reasoning?.effort||"none",j=W==="none"?void 0:W,X=_8[Q],H=Object.assign({},...k0.resolveProviderModelCatalogKeys(Q).map((R)=>k0.getGeneratedModelsForProvider(R))),Y=Object.keys(H)[0],V=$.auth?.accessToken??$.apiKey??$.auth?.apiKey,A=$.baseUrl??(Q==="oca"?$.oca?.mode==="internal"?h6:b6:X?.baseUrl),B=$.routingProviderId??(KD($)&&Q!==N8.OPENAI_NATIVE?N8.OPENAI_NATIVE:void 0),K=Z?X?.knownModels??(Object.keys(H).length>0?H:void 0):void 0,G={providerId:J,clientType:$.client,routingProviderId:B,modelId:$.model??X?.modelId??Y??"default",...Z?{knownModels:K}:{},apiKey:V,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:A,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:j,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??X?.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,F])=>F!==void 0))}function i9($){let f=$J($);return I0(f)}function n9($){let f=fJ($);if(f.success)return{success:!0,config:I0(f.data)};return{success:!1,error:f.error}}var M8=$1;var JJ=f1.object({settings:$1,updatedAt:f1.string().datetime(),tokenSource:f1.enum(["manual","oauth","migration"]).default("manual")}),cf=f1.object({version:f1.literal(1),lastUsedProvider:f1.string().min(1).optional(),providers:f1.record(f1.string(),JJ)});function J1(){return{version:1,providers:{}}}N$();var JX={};q(JX,{InMemoryWorkspaceManager:()=>df});import{upsertWorkspaceInfo as DD,WorkspaceManifestSchema as t9}from"@cline/shared";var fX={};q(fX,{normalizeWorkspacePath:()=>M$,generateWorkspaceInfoWithDiagnostics:()=>q8,generateWorkspaceInfo:()=>uf,buildWorkspaceMetadataWithInfo:()=>a9,buildWorkspaceMetadata:()=>w8});import{basename as GD,resolve as PD}from"node:path";import{performance as ej}from"node:perf_hooks";import{processWorkspaceInfo as $X}from"@cline/shared";import FD from"simple-git";function M$($){return PD($)}async function uf($){return(await q8($)).info}function QJ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function q8($){let f=M$($),J={rootPath:f,hint:GD(f)},Q;try{let Z=FD({baseDir:f});if(!await Z.checkIsRepo())return{info:J,vcsType:"none"};try{let j=await Z.getRemotes(!0);if(j.length>0){let X=j.map((H)=>{let Y=H.refs.fetch||H.refs.push;return`${H.name}: ${Y}`});J.associatedRemoteUrls=X}}catch(j){Q??=QJ(j)}try{let j=(await Z.revparse(["HEAD"])).trim();if(j.length>0)J.latestGitCommitHash=j}catch(j){Q??=QJ(j)}try{let j=(await Z.branch()).current.trim();if(j.length>0)J.latestGitBranchName=j}catch(j){Q??=QJ(j)}return{info:J,vcsType:"git",error:Q}}catch(Z){return{info:J,vcsType:"none",error:QJ(Z)}}}async function w8($){let f=await uf($);return $X(f)}async function a9($){let f=ej.now(),J=await q8($),Q=ej.now()-f,Z=J.info;return{workspaceInfo:Z,workspaceMetadata:$X(Z),durationMs:Q,vcsType:J.vcsType,initError:J.error}}class df{manifest;listeners=new Set;constructor($){this.manifest=t9.parse($??{workspaces:{}})}async addWorkspacePath($){let f=await uf($);return this.manifest=DD(this.manifest,f),this.emit({type:"workspace_added",workspace:f}),f}async switchWorkspace($){let f=M$($),J=this.manifest.workspaces[f];if(J)return this.manifest=t9.parse({...this.manifest,currentWorkspacePath:f}),this.emit({type:"workspace_switched",workspace:J}),J;let Q=await this.addWorkspacePath(f);return this.manifest=t9.parse({...this.manifest,currentWorkspacePath:Q.rootPath}),this.emit({type:"workspace_switched",workspace:Q}),Q}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let f=M$($);return this.manifest.workspaces[f]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let f of this.listeners)f($)}}N0();import{createHash as RD}from"node:crypto";var QX=new Set,ZX=new Set;function UD($){return RD("sha256").update($).digest("hex")}function LD($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function WX($){if(!$.telemetry)return;let f=UD($.rootPath),J=$.rootCount??1;if(!QX.has(f))QX.add(f),W6($.telemetry,{root_count:J,vcs_types:LD($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!ZX.has(f)){ZX.add(f);let Q=Error($.initError.message);Q.name=$.initError.errorType||"Error",j6($.telemetry,Q,{fallback_to_single_root:!0,workspace_count:J})}}function zD($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function _D($,f,J){if(f.length>0)for(let W of f)J?.log(W.message,{severity:"warn"});if($.length===0)return;let Q=$.slice(0,3).map(zD).join("; "),Z=$.length>3?`; and ${$.length-3} more`:"";J?.log(`Some plugins failed to initialize. ${Q}${Z}. Use --verbose for more details.`,{severity:"warn"});for(let W of $)J?.log(`Plugin initialization failed (${W.phase}) for ${W.pluginPath}`,{severity:"warn",stack:W.stack,pluginPath:W.pluginPath,pluginName:W.pluginName})}function yD($,f){let J=typeof $.thinking==="boolean",Q=typeof $.reasoningEffort==="string";if(!J&&!Q)return f;return{...f??{},...J?{enabled:$.thinking}:{},...Q?{effort:$.reasoningEffort}:{}}}function ND($,f){return OD($,f)}function TD($){let f=0;for(let J of $??[]){if(J.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"&&!Array.isArray(J.metadata)?J.metadata:void 0)?.kind==="recovery_notice")continue;f+=1}return f}function MD($){let f={...$.storedHeaders??{},...$.configHeaders??{}},J=$.accountId?.trim()||qD($.accessToken);if(f.originator="cline",f.session_id=$.sessionId,f["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,J)f["ChatGPT-Account-Id"]=J;return f}function qD($){let f=$?.trim();if(!f)return;let J=G0(f),Q=J?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof Q==="string"&&Q.length>0)return Q;let Z=J?.organizations?.[0]?.id;if(typeof Z==="string"&&Z.length>0)return Z;let W=J?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;return}function wD($,f,J,Q,Z){let W=J.getProviderSettings($.providerId),j=Q||W?.modelCatalog?{...Q??{},...W?.modelCatalog??{}}:void 0,X={...W??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??W?.apiKey,baseUrl:$.baseUrl??W?.baseUrl,headers:$.providerId==="openai-codex"?MD({sessionId:f,configHeaders:$.headers,storedHeaders:W?.headers,accountId:W?.auth?.accountId,accessToken:$.apiKey??W?.auth?.accessToken??W?.apiKey}):$.headers??W?.headers,reasoning:yD($,W?.reasoning),modelCatalog:j},H=I0(X);if($.knownModels)H.knownModels=$.knownModels;if($.extensionContext)H.extensionContext=$.extensionContext;let V=$.fetch??H.fetch??Z;if(V)H.fetch=V;return H}async function jX($){let{input:f,sessionId:J,providerSettingsManager:Q,defaultTelemetry:Z,defaultCapabilities:W,defaultToolPolicies:j,defaultFetch:X,onPluginEvent:H,onTeamEvent:Y,createSpawnTool:V,localRuntime:A,readSessionMetadata:B,writeSessionMetadata:K}=$,G=t$(f.config),{modelCatalogDefaults:R,userInstructionService:F,configExtensions:P,onTeamRestored:D,...O}=A??{},_=Object.keys(O).length>0?O:void 0,{workspaceInfo:L,workspaceMetadata:z,durationMs:y,vcsType:w,initError:Q0}=await a9(G),Z0=_?.extensionContext,o={...Z0??{},workspace:{...L,...Z0?.workspace??{}},session:{...Z0?.session??{},sessionId:J},logger:Z0?.logger??_?.logger,telemetry:Z0?.telemetry??_?.telemetry??Z};WX({telemetry:o.telemetry,rootPath:L.rootPath,workspaceInfo:L,rootCount:1,vcsType:w,durationMs:y,initError:Q0,featureFlagEnabled:!0});let u=xf({cwd:f.config.cwd,workspacePath:G,rootSessionId:J,logger:_?.logger,workspaceInfo:L}),U0=hW(_?.hooks)?void 0:If({rootSessionId:J,workspacePath:G,workspaceInfo:L}),k$=x1([_?.hooks,U0]),d;if(ND(P,"plugins"))try{d=await hf({pluginPaths:_?.pluginPaths,workspacePath:G,cwd:f.config.cwd,onEvent:H,providerId:f.config.providerId,modelId:f.config.modelId,workspaceInfo:L,session:o.session,client:o.client,user:o.user,logger:o.logger,telemetry:o.telemetry,automation:o.automation}),_D(d.failures,d.warnings,_?.logger)}catch(N2){let p=N2 instanceof Error?N2.message:String(N2);_?.logger?.log?.(`plugin loading failed; continuing without plugins (${p})`)}let k=V9(u?[u]:void 0,V9(_?.extensions,y6(d?.extensions))),n={...f.config,..._??{},sessionId:J,hooks:k$,extensions:k,extensionContext:o,telemetry:o.telemetry},G$=wD(n,J,Q,R,X),e0=x1([n.hooks,n.checkpoint?.enabled===!0?Uj({cwd:n.cwd,sessionId:J,logger:n.logger,createCheckpoint:n.checkpoint?.createCheckpoint,initialRunCount:TD(f.initialMessages),readSessionMetadata:B,writeSessionMetadata:K}):void 0]),P1={...n,providerConfig:G$,workspaceMetadata:z,hooks:e0},Yf=f.toolPolicies??n.toolPolicies??j,y2=F0(W,f.capabilities),c4=y2?.requestToolApproval,y5=y2?.toolExecutors,Vf=new df({currentWorkspacePath:L.rootPath,workspaces:{[L.rootPath]:L}});return{effectiveInput:f,config:P1,providerConfig:G$,workspaceMetadata:z,workspaceInfo:L,extensions:k,hooks:e0,toolPolicies:Yf,requestToolApproval:c4,pluginSandboxShutdown:d?.shutdown,runtimeBuilderInput:{config:P1,hooks:e0,extensions:k,onTeamEvent:Y,createSpawnTool:V,onTeamRestored:D,userInstructionService:F,configExtensions:P,toolExecutors:y5,workspaceManager:Vf,logger:P1.logger,telemetry:P1.telemetry}}}import{existsSync as WJ,mkdirSync as SD,readdirSync as CD,rmdirSync as ED,rmSync as hD,unlinkSync as bD}from"node:fs";import{dirname as XX,join as ZJ}from"node:path";function s(){return new Date().toISOString()}function S8($){if(!$||!WJ($))return;try{bD($)}catch{}}function kD($){let f=_f($);if(f)return{rootSessionId:f.rootSessionId,fileStem:`${f.agentId}__${f.teamTaskId}`};let J=s2($);if(J)return{rootSessionId:J.rootSessionId,fileStem:J.agentId};return{rootSessionId:$,fileStem:$}}class s9{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return ZJ(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let f=this.sessionArtifactsDir($);if(!WJ(f))SD(f,{recursive:!0});return f}sessionMessagesPath($){return ZJ(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,f=!1){let J=f?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return ZJ(J,`${$}.json`)}removeSessionDirIfEmpty($){let f=this.sessionArtifactsDir($),J=this.ensureSessionsDir();while(f.startsWith(J)&&f!==J){if(!WJ(f)){f=XX(f);continue}try{if(CD(f).length>0)break;ED(f)}catch{break}f=XX(f)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!WJ($))return;try{hD($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,f,J){let{rootSessionId:Q,fileStem:Z}=kD($),W=this.sessionArtifactsDir(Q);return{messagesPath:ZJ(W,`${Z}.messages.json`)}}}import{resolveDocumentsExtensionPath as ID}from"@cline/shared/storage";N0();function HX($,f,J,Q,Z){if(J)H6($.telemetry,{ulid:f,apiProvider:$.providerId,...Z});else X6($.telemetry,{ulid:f,apiProvider:$.providerId,...Z});xD($.telemetry,{workspacePath:Q})}function xD($,f){let J=ID("Hooks"),Q=s$(f.workspacePath),Z=new Map;for(let W of Q){let j=W.hookEventName??"unknown",X=Z.get(j)??{global:0,workspace:0};if(W.path===J||W.path.startsWith(`${J}/`))X.global+=1;else X.workspace+=1;Z.set(j,X)}for(let[W,j]of Z.entries())R6($,W,j.global,j.workspace)}function YX($,f){for(let J of f.mentions)F6($,J,f.matchedFiles.includes(J)?1:0,"file",!f.matchedFiles.includes(J));for(let J of f.matchedFiles)G6($,"file",J.length);for(let J of f.ignoredMentions)P6($,"file","not_found",J)}var iA={};q(iA,{ProviderSettingsManager:()=>B$});import{chmodSync as aA,existsSync as wZ,mkdirSync as wM,readFileSync as SM,writeFileSync as CM}from"node:fs";import{basename as tA,dirname as SZ}from"node:path";import{resolveProviderSettingsPath as EM}from"@cline/shared/storage";var T={};q(T,{writeHubDiscovery:()=>hJ,writeGlobalSettings:()=>C1,withHubStartupLock:()=>bJ,verifyHubConnection:()=>W$,updateMcpServerOAuthState:()=>d1,updateLocalProvider:()=>K5,truncateNotificationBody:()=>S4,toggleDisabledTool:()=>z6,toTeamProgressLifecycleEvent:()=>j2,toProviderConfig:()=>I0,toHubHealthUrl:()=>i7,toHookConfigFileName:()=>F8,summarizeUsageFromMessages:()=>Tf,stopLocalHubServerGracefully:()=>WQ,startLocalOAuthServer:()=>a0,startHubWebSocketServer:()=>Wf,startHubServer:()=>oV,startClineDeviceAuth:()=>Q7,splitCoreSessionConfig:()=>Q4,spawnDetachedHubServerWithRetry:()=>f2,spawnDetachedHubServer:()=>e7,setTelemetryOptOutGlobally:()=>iW,setMcpServerDisabled:()=>c1,setDisabledTools:()=>D9,setDisabledPlugin:()=>sW,sendHubCommand:()=>ZV,saveLocalProviderSettings:()=>AZ,saveLocalProviderOAuthCredentials:()=>PZ,sanitizeSessionToken:()=>M1,safeParseSettings:()=>fJ,safeCreateProviderConfig:()=>n9,runSubprocessEvent:()=>V2,runHook:()=>B2,reviveTeamStateDates:()=>o4,restartLocalHubIfIdleAfterStartupTimeout:()=>xJ,resolveWorkspaceHubOwnerContext:()=>QY,resolveWorkflowsConfigSearchPaths:()=>r8,resolveSkillsConfigSearchPaths:()=>l8,resolveSharedHubOwnerContext:()=>Y0,resolveSessionBackend:()=>yQ,resolveRulesConfigSearchPaths:()=>p8,resolveProviderConfig:()=>y8,resolvePluginConfigSearchPaths:()=>B8,resolveMcpServerRegistrations:()=>Q$,resolveLocalClineAuthToken:()=>FZ,resolveHubUrl:()=>qQ,resolveHubOwnerContext:()=>w$,resolveHubEndpointOptions:()=>c0,resolveHubBuildId:()=>Y1,resolveHooksConfigSearchPaths:()=>G8,resolveDisabledToolNames:()=>n0,resolveDisabledPluginPaths:()=>H8,resolveDefaultMcpSettingsPath:()=>O0,resolveDefaultHubPort:()=>$2,resolveDefaultHubPathname:()=>o7,resolveDefaultHubHost:()=>s7,resolveCoreSelectedToolIds:()=>$6,resolveCompatibleLocalHubUrl:()=>R4,resolveClineDir:()=>eH,resolveClineDataDir:()=>G4,resolveAndLoadAgentPlugins:()=>hf,resolveAgentPluginPaths:()=>h1,requestHubShutdown:()=>D4,requestDesktopToolApproval:()=>QZ,rememberRecoverableLocalHubUrl:()=>V1,registerRemoteConfigSessionBlobUpload:()=>j5,registerMcpServersFromSettingsFile:()=>l1,registerDisposable:()=>NM,refreshProviderModelsFromSource:()=>BZ,refreshOpenAICodexToken:()=>I8,refreshOcaToken:()=>U8,refreshClineToken:()=>b8,readSessionCheckpointHistory:()=>C4,readRemoteConfigSessionBlobUploadMetadata:()=>iQ,readHubDiscovery:()=>A0,readGlobalSettings:()=>J$,probeHubServer:()=>R0,probeHubConnection:()=>QV,prewarmFileIndex:()=>r4,prewarmDetachedHubServer:()=>kJ,prepareRemoteConfigCoreIntegration:()=>aQ,parseWorkflowConfigFromMarkdown:()=>d8,parseUserCommandEnvelope:()=>yM,parseSkillConfigFromMarkdown:()=>c8,parseSettings:()=>$J,parseRuleConfigFromMarkdown:()=>u8,parseHookEventPayload:()=>A2,openaiCodexOAuthProvider:()=>H7,normalizeWorkspacePath:()=>M$,normalizeUserInput:()=>_M,normalizeSdkError:()=>zM,normalizeRuntimeCapabilities:()=>F0,normalizeProviderId:()=>vf,normalizeOpenAICodexCredentials:()=>X7,normalizeOAuthProvider:()=>KZ,normalizeHubWebSocketUrl:()=>A1,noopBasicLogger:()=>OM,migrateLegacyProviderSettings:()=>g4,mergeRulesForSystemPrompt:()=>tf,mergeAgentHooks:()=>x1,makeTeamTaskSubSessionId:()=>t2,makeSubSessionId:()=>zf,loginOpenAICodex:()=>rf,loginOcaOAuth:()=>gf,loginLocalProvider:()=>GZ,loginClineOAuth:()=>pf,loadOpenTelemetryAdapter:()=>YM,loadMcpSettingsFile:()=>v1,loadLlmsConfigFromFile:()=>TZ,loadAgentPluginsFromPathsWithDiagnostics:()=>T$,loadAgentPluginsFromPaths:()=>M6,loadAgentPluginFromPath:()=>A8,listSessionHistoryFromBackend:()=>d7,listPluginTools:()=>f4,listMcpServerOAuthStatuses:()=>e8,listLocalProviders:()=>YZ,listHookConfigFiles:()=>s$,isToolDisabledGlobally:()=>nW,isTelemetryOptedOutGlobally:()=>O6,isRuleEnabled:()=>FJ,isPluginDisabledGlobally:()=>tW,isOpenAICodexTokenExpired:()=>j7,isHubReconnectableTransportError:()=>QQ,isHubCommandTimeoutError:()=>IJ,isDiscoveryFilePresent:()=>fY,isClineAccountActionRequest:()=>jJ,isBuiltInProviderId:()=>r9,identifyAccount:()=>_$,hasMcpSettingsFile:()=>q$,getValidOpenAICodexCredentials:()=>x8,getValidOcaCredentials:()=>L8,getValidClineCredentials:()=>k8,getProviderConfigFields:()=>DZ,getProviderConfig:()=>d6,getMcpServerOAuthState:()=>u1,getLocalProviderModels:()=>VZ,getLiveModelsCatalog:()=>mf,getFileIndex:()=>D$,getCurrentContextSize:()=>G9,getCoreHeadlessToolNames:()=>a2,getCoreDefaultEnabledToolIds:()=>e4,getCoreBuiltinToolCatalog:()=>N1,getCoreAcpToolNames:()=>f6,getClineDefaultSystemPrompt:()=>AM,generateWorkspaceInfoWithDiagnostics:()=>q8,generateWorkspaceInfo:()=>uf,generateOcaOpcRequestId:()=>I6,formatRulesForSystemPrompt:()=>af,formatDisplayUserInput:()=>LM,filterExtensionToolRegistrations:()=>y6,filterDisabledTools:()=>E1,filterDisabledPluginPaths:()=>_6,fetchClineRecommendedModels:()=>yZ,executeClineAccountAction:()=>XJ,ensureHubWebSocketServer:()=>J5,ensureHubServer:()=>eV,ensureDetachedHubServer:()=>WY,ensureCustomProvidersLoaded:()=>B5,ensureCompatibleLocalHubUrl:()=>t1,enrichPromptWithMentions:()=>Kf,emptyWorkspaceManifest:()=>UM,emptyStoredProviderSettings:()=>J1,discoverPluginModulePaths:()=>K8,deriveSubsessionStatus:()=>o2,deleteLocalProvider:()=>G5,defineLlmsConfig:()=>NZ,createWorkflowsConfigDefinition:()=>a8,createUserInstructionConfigService:()=>Z1,createToolPoliciesWithPreset:()=>n4,createTool:()=>RM,createTeamName:()=>X5,createSubprocessHooks:()=>rJ,createSpawnAgentTool:()=>r$,createSkillsConfigDefinition:()=>i8,createSessionHost:()=>Y2,createRuntimeHost:()=>Y2,createRulesConfigDefinition:()=>n8,createRemoteConfigSessionMessagesArtifactUploader:()=>nQ,createProviderConfig:()=>i9,createOpenTelemetryTelemetryService:()=>w4,createOcaRequestHeaders:()=>k9,createOcaOAuthProvider:()=>b9,createOAuthClientCallbacks:()=>h8,createMcpTools:()=>ef,createLocalHubScheduleRuntimeHandlers:()=>Q5,createLlmsSdk:()=>qZ,createInitialAccumulatedUsage:()=>V0,createInMemoryHubOwnerContext:()=>$Y,createHubServerUrl:()=>t0,createHubAuthToken:()=>EJ,createHookConfigFileHooks:()=>D8,createHookConfigFileExtension:()=>xf,createHookAuditHooks:()=>If,createDisabledMcpToolPolicy:()=>$4,createDisabledMcpToolPolicies:()=>yJ,createDelegatedAgentConfigProvider:()=>Rf,createDelegatedAgent:()=>Uf,createDefaultToolsWithPreset:()=>a4,createDefaultTools:()=>d$,createDefaultMcpServerClientFactory:()=>of,createDefaultExecutors:()=>Gf,createCoreSettingsService:()=>r1,createCoreSessionSnapshot:()=>j$,createContributionRegistry:()=>DM,createContextCompactionPrepareTurn:()=>C2,createConfiguredTelemetryService:()=>b$,createConfiguredTelemetryHandle:()=>D2,createClineTelemetryServiceMetadata:()=>FM,createClineTelemetryServiceConfig:()=>PM,createClineOAuthProvider:()=>W7,createBuiltinTools:()=>T1,createAgentTeamsTools:()=>y1,createAgentRuntime:()=>qM,createAgentHooksExtension:()=>bf,connectToHub:()=>tJ,completeClineDeviceAuth:()=>Z7,clearPrivateModelsCatalogCache:()=>l9,clearLiveModelsCatalogCache:()=>d9,clearHubDiscovery:()=>v0,captureWorkspacePathResolved:()=>vW,captureWorkspaceInitialized:()=>W6,captureWorkspaceInitError:()=>j6,captureToolUsage:()=>A6,captureTokenUsage:()=>Y6,captureTaskRestarted:()=>H6,captureTaskCreated:()=>X6,captureTaskCompleted:()=>J8,captureSubagentExecution:()=>Z8,captureSkillUsed:()=>B6,captureSdkError:()=>GM,captureProviderApiError:()=>Q8,captureModeSwitch:()=>V6,captureMentionUsed:()=>G6,captureMentionSearchResults:()=>F6,captureMentionFailed:()=>P6,captureHookDiscovery:()=>R6,captureExtensionActivated:()=>mW,captureDiffEditFailure:()=>K6,captureConversationTurnEvent:()=>yf,captureAuthSucceeded:()=>O$,captureAuthStarted:()=>L$,captureAuthLoggedOut:()=>n$,captureAuthFailed:()=>z$,captureAgentTeamCreated:()=>D6,captureAgentCreated:()=>a$,buildWorkspaceMetadata:()=>w8,buildTeamProgressSummary:()=>W2,buildSdkErrorProperties:()=>BM,buildRemoteConfigSessionBlobUploadMetadata:()=>Z5,buildDelegatedAgentConfig:()=>z1,bootstrapAgentTeams:()=>Of,authorizeMcpServerOAuth:()=>OJ,addLocalProvider:()=>HZ,accumulateUsageTotals:()=>H0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>v8,UnifiedConfigFileWatcher:()=>g1,ToolPresets:()=>b0,TelemetryService:()=>P2,TelemetryLoggerSink:()=>q4,TEAM_TOOL_NAMES:()=>Lf,SubprocessSandbox:()=>Ef,StoredProviderSettingsSchema:()=>cf,StoredProviderSettingsEntrySchema:()=>JJ,SqliteTeamStore:()=>jf,SqliteSessionStore:()=>H$,SessionVersioningService:()=>G1,SessionVersioningError:()=>q0,SessionSource:()=>K0,SapSettingsSchema:()=>s6,SKILLS_CONFIG_DIRECTORY_NAME:()=>m8,SESSION_STATUSES:()=>e2,SDK_ERROR_TELEMETRY_EVENT:()=>TM,RpcClineAccountService:()=>E8,RemoteRuntimeHost:()=>Z2,ReasoningSettingsSchema:()=>i6,RULES_CONFIG_DIRECTORY_NAME:()=>PJ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>W5,ProviderSettingsSchema:()=>$1,ProviderSettingsManager:()=>B$,ProviderProtocolSchema:()=>l6,ProviderIdSchema:()=>T8,ProviderClientSchema:()=>p6,OpenTelemetryProvider:()=>F2,OcaSettingsSchema:()=>o6,OPENAI_COMPATIBLE_PROVIDERS:()=>_8,NodeHubClient:()=>s0,NativeHubTransportAdapter:()=>k4,ModelCatalogSettingsSchema:()=>e6,LocalRuntimeHost:()=>A$,Llms:()=>VM,InMemoryWorkspaceManager:()=>df,InMemoryMcpManager:()=>p1,HubUIClient:()=>SQ,HubTransportError:()=>z0,HubSessionClient:()=>wQ,HubServerTransport:()=>U2,HubScheduleService:()=>G2,HubScheduleCommandService:()=>K2,HubRuntimeHost:()=>S$,HubCommandError:()=>J2,HookEventPayloadSchema:()=>pJ,HookEventNameSchema:()=>lJ,HookConfigFileName:()=>kf,HOOK_CONFIG_FILE_EVENT_MAP:()=>P8,HOOKS_CONFIG_DIRECTORY_NAME:()=>S6,GlobalSettingsSchema:()=>X8,GcpSettingsSchema:()=>a6,FileTeamPersistenceStore:()=>P5,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>O5,DefaultToolNames:()=>J0,DefaultRuntimeBuilder:()=>z2,DefaultLlmsSdk:()=>m4,DEFAULT_MODELS_CATALOG_URL:()=>u6,DEFAULT_HUB_PORT:()=>a7,DEFAULT_HUB_PATHNAME:()=>t7,DEFAULT_HUB_HOST:()=>n7,CoreSettingsService:()=>W1,CoreSessionService:()=>V$,ContributionRegistry:()=>KM,ClineCore:()=>T4,ClineAccountService:()=>C8,ChatViewStateSchema:()=>zZ,ChatSummarySchema:()=>L5,ChatSessionStatusSchema:()=>D5,ChatSessionConfigSchema:()=>F5,ChatMessageSchema:()=>U5,ChatMessageRoleSchema:()=>R5,CORE_TELEMETRY_EVENTS:()=>v,CORE_BUILD_VERSION:()=>_Z,BrowserWebSocketHubAdapter:()=>b4,BUILT_IN_PROVIDER_IDS:()=>p9,BUILT_IN_PROVIDER:()=>N8,AzureSettingsSchema:()=>t6,AwsSettingsSchema:()=>n6,AuthSettingsSchema:()=>r6,AgentTeamsRuntime:()=>$f,AgentTeam:()=>H2,Agent:()=>MM,ALL_DEFAULT_TOOL_NAMES:()=>g$});M(T,gc);import*as VM from"@cline/llms";import{buildClineSystemPrompt as AM,buildSdkErrorProperties as BM,ContributionRegistry as KM,captureSdkError as GM,createClineTelemetryServiceConfig as PM,createClineTelemetryServiceMetadata as FM,createContributionRegistry as DM,createTool as RM,emptyWorkspaceManifest as UM,formatDisplayUserInput as LM,noopBasicLogger as OM,normalizeSdkError as zM,normalizeUserInput as _M,parseUserCommandEnvelope as yM,registerDisposable as NM,SDK_ERROR_TELEMETRY_EVENT as TM}from"@cline/shared";import"@cline/shared/storage";var AX={};q(AX,{isClineAccountActionRequest:()=>jJ,executeClineAccountAction:()=>XJ,RpcClineAccountService:()=>E8,ClineAccountService:()=>C8});function gD($){if(typeof $!=="object"||$===null||!("error"in $))return;let f=$.error;return typeof f==="string"&&f.trim()?f:void 0}function VX($,f,J){let Q=gD(J);if(Q)return Q;let Z=f.trim();if(Z){let W=Z.length>200?`${Z.slice(0,200)}...`:Z;return`Cline account request failed with status ${$}: ${W}`}return`Cline account request failed with status ${$}`}class C8{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let f=$.apiBaseUrl.trim();if(!f)throw Error("apiBaseUrl is required");this.apiBaseUrl=f,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 f=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(f)}/balance`)}async fetchUsageTransactions($){let f=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(f)}/usages`)).items??[]}async fetchPaymentTransactions($){let f=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(f)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchOrganization($){let f=$.trim();if(!f)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(f)}`)}async fetchOrganizationBalance($){let f=$.trim();if(!f)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(f)}/balance`)}async fetchOrganizationUsageTransactions($){let f=$.organizationId.trim();if(!f)throw Error("organizationId is required");let J=await this.resolveOrganizationMemberId(f,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(f)}/members/${encodeURIComponent(J)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let f=$?.trim();if(f)return f;let Q=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(Q)return Q;let Z=await this.fetchMe();if(!Z.id?.trim())throw Error("Unable to resolve current user id");return Z.id}async resolveOrganizationMemberId($,f){let J=f?.trim();if(J)return J;let Z=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(Z)return Z;let j=(await this.fetchUserOrganizations()).find((X)=>X.organizationId===$)?.memberId;if(!j?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return j}async request($,f){let J=(await this.getAuthTokenFn())?.trim();if(!J)throw Error("No Cline account auth token found");let Q=this.getHeadersFn?await this.getHeadersFn():{},Z=new AbortController,W=setTimeout(()=>Z.abort(),this.requestTimeoutMs);try{let j=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:f?.method??"GET",headers:{Authorization:`Bearer ${J}`,"Content-Type":"application/json",...Q??{}},body:f?.body!==void 0?JSON.stringify(f.body):void 0,signal:Z.signal});if(j.status===204||f?.expectNoContent){if(!j.ok)throw Error(`Cline account request failed with status ${j.status}`);return}let X=await j.text(),H;if(X.trim())try{H=JSON.parse(X)}catch{if(!j.ok)throw Error(VX(j.status,X,void 0));throw Error("Cline account response was not valid JSON")}if(!j.ok)throw Error(VX(j.status,X,H));if(typeof H==="object"&&H!==null){let Y=H;if(typeof Y.success==="boolean"){if(!Y.success)throw Error(Y.error||"Cline account request failed");if(Y.data!==void 0)return Y.data}}if(H===void 0||H===null)throw Error("Cline account response payload was empty");return H}finally{clearTimeout(W)}}}function jJ($){return $.action==="clineAccount"}async function XJ($,f){switch($.operation){case"fetchMe":return f.fetchMe();case"fetchBalance":return f.fetchBalance($.userId);case"fetchUsageTransactions":return f.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return f.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return f.fetchUserOrganizations();case"fetchOrganizationBalance":return f.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return f.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await f.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return f.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class E8{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 f=$.trim();if(!f)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:f})}async fetchOrganizationUsageTransactions($){let f=$.organizationId.trim();if(!f)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:f,...$.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 BX={};q(BX,{createOAuthClientCallbacks:()=>h8});function h8($){return{onAuth:({url:f,instructions:J})=>{if($.onOutput?.(J??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(f)).catch((Q)=>{$.onOpenUrlError?.({url:f,error:Q})})}catch(Q){$.onOpenUrlError?.({url:f,error:Q})}$.onOutput?.(f)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}N0();var LX={};q(LX,{startClineDeviceAuth:()=>Q7,refreshClineToken:()=>b8,loginClineOAuth:()=>pf,getValidClineCredentials:()=>k8,createClineOAuthProvider:()=>W7,completeClineDeviceAuth:()=>Z7});import{getClineEnvironmentConfig as o9}from"@cline/shared";var HJ={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},FX={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},e9="https://api.workos.com",mD="/auth",KX=Array.from({length:11},($,f)=>48801+f),vD=300000,cD=30000,lf=30000,uD=300,dD=5;class Q1 extends Error{status;errorCode;constructor($,f){super($);this.name="ClineOAuthTokenError",this.status=f?.status,this.errorCode=f?.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 lD($){let f=Date.parse($);if(Number.isNaN(f))throw Error(`Invalid expiresAt value: ${$}`);return f}function $7($,f,J={}){let Q=$.userInfo.clineUserId??J.accountId,Z=$.refreshToken??J.refresh;if(!Z)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:Z,expires:lD($.expiresAt),accountId:Q??void 0,email:$.userInfo.email||J.email,metadata:{provider:f,tokenType:$.tokenType,userInfo:$.userInfo}}}async function f7($){if(!$)return{};return typeof $==="function"?await $():$}function GX($,f){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return f;return Math.floor($)}async function PX($){await new Promise((f)=>setTimeout(f,$))}function J7($,f){if(!$.success||!$.data?.accessToken)throw Error(f);return $.data}async function DX($,f){let J=await fetch(w1(e9,FX.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(f?.requestTimeoutMs??lf)}),Q=await J.json().catch(()=>({}));if(!J.ok)throw new Q1(`Device authorization failed: ${J.status}${Q.error_description?` - ${Q.error_description}`:""}`,{status:J.status,errorCode:Q.error});if(!Q.device_code||!Q.user_code||!Q.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:Q.device_code,userCode:Q.user_code,verificationUri:Q.verification_uri,verificationUriComplete:Q.verification_uri_complete,expiresInSeconds:GX(Q.expires_in,uD),pollIntervalSeconds:GX(Q.interval,dD)}}async function RX($){let f=Date.now()+$.expiresInSeconds*1000,J=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=f){let Q=await fetch(w1($.workosApiBaseUrl,FX.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)}),Z=await Q.json().catch(()=>({}));if(Q.ok){if(!Z.access_token||!Z.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:Z.access_token,refreshToken:Z.refresh_token,tokenType:Z.token_type??"Bearer"}}switch(Z.error){case"authorization_pending":{await PX(J*1000);break}case"slow_down":{J+=1,await PX(J*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new Q1(Z.error_description||"WorkOS authorization failed",{status:Q.status,errorCode:Z.error});default:throw new Q1(`WorkOS token polling failed: ${Q.status}${Z.error_description?` - ${Z.error_description}`:""}`,{status:Q.status,errorCode:Z.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function UX($,f,J){let Q={accessToken:$.accessToken,refreshToken:$.refreshToken},Z=await fetch(w1(f.apiBaseUrl,HJ.register),{method:"POST",headers:{"Content-Type":"application/json",...await f7(f.headers)},body:JSON.stringify(Q),signal:AbortSignal.timeout(f.requestTimeoutMs??lf)});if(!Z.ok){let j=await Z.text().catch(()=>""),X=qf(j);throw new Q1(`Token registration failed: ${Z.status}${X.message?` - ${X.message}`:""}`,{status:Z.status,errorCode:X.code})}let W=await Z.json();return $7(J7(W,"Invalid token exchange response"),J??f.provider)}async function pD($,f,J,Q){let Z={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:f,provider:Q??J.provider},W=await fetch(w1(J.apiBaseUrl,HJ.token),{method:"POST",headers:{"Content-Type":"application/json",...await f7(J.headers)},body:JSON.stringify(Z),signal:AbortSignal.timeout(J.requestTimeoutMs??lf)});if(!W.ok){let X=await W.text().catch(()=>""),H=qf(X);throw new Q1(`Token exchange failed: ${W.status}${H.message?` - ${H.message}`:""}`,{status:W.status,errorCode:H.code})}let j=await W.json();return $7(J7(j,"Invalid token exchange response"),Q??J.provider)}async function pf($){L$($.telemetry,$.provider??"cline");let f=$.useWorkOSDeviceAuth??!0,J=$.callbackPorts?.length?$.callbackPorts:KX,Q=$.callbackPath??mD,Z=f?null:await a0({ports:J,callbackPath:Q,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),W=Z?.callbackUrl||`http://127.0.0.1:${J[0]??KX[0]}${Q}`;try{let j;if(f){let X=o9().workOsClientId,H=await DX(X,$);$.callbacks.onAuth({url:H.verificationUriComplete??H.verificationUri,instructions:`Enter this code in your browser: ${H.userCode}`});let Y=await RX({clientId:X,deviceCode:H.deviceCode,expiresInSeconds:H.expiresInSeconds,initialPollIntervalSeconds:H.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??lf,workosApiBaseUrl:e9,onProgress:$.callbacks.onProgress});j=await UX(Y,$,$.provider)}else{let X=new URL(w1($.apiBaseUrl,HJ.authorize));X.searchParams.set("client_type","extension"),X.searchParams.set("callback_url",W),X.searchParams.set("redirect_uri",W),$.callbacks.onAuth({url:X.toString(),instructions:"Continue the authentication process in your browser."});let H,Y=$.provider,V=await wf({waitForCallback:Z?.waitForCallback??(async()=>null),cancelWait:Z?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(V.error)throw Error(`OAuth error: ${V.error}`);if(H=V.code,Y=V.provider??Y,!H){let A=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),B=Mf(A,{includeProvider:!0});H=B.code,Y=B.provider??Y}if(!H)throw Error("Missing authorization code");j=await pD(H,W,$,Y)}return O$($.telemetry,$.provider??"cline"),_$($.telemetry,{id:j.accountId,email:j.email,provider:$.provider??"cline"}),j}catch(j){throw z$($.telemetry,$.provider??"cline",j instanceof Error?j.message:String(j)),j}finally{Z?.close()}}async function Q7($){return await DX(o9().workOsClientId,$)}async function Z7($){let f=$.provider??"cline";L$($.telemetry,f);try{let J=await RX({clientId:o9().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??lf,workosApiBaseUrl:e9}),Q=await UX(J,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return O$($.telemetry,f),_$($.telemetry,{id:Q.accountId,email:Q.email,provider:f}),Q}catch(J){throw z$($.telemetry,f,J instanceof Error?J.message:String(J)),J}}async function b8($,f){let J=await fetch(w1(f.apiBaseUrl,HJ.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await f7(f.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(f.requestTimeoutMs??lf)});if(!J.ok){let W=await J.text().catch(()=>""),j=qf(W);throw new Q1(`Token refresh failed: ${J.status}${j.message?` - ${j.message}`:""}`,{status:J.status,errorCode:j.code})}let Q=await J.json(),Z=$.metadata?.provider??f.provider;return $7(J7(Q,"Invalid token refresh response"),Z,$)}async function k8($,f,J){if(!$)return null;let Q=J?.refreshBufferMs??vD,Z=J?.retryableTokenGraceMs??cD;if(J?.forceRefresh!==!0&&!S1($,Q))return $;try{return await b8($,f)}catch(j){if(j instanceof Q1&&j.isLikelyInvalidGrant())return n$(f.telemetry,f.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>Z)return $;return null}}function W7($){return{id:"cline",name:"Cline Account",usesCallbackServer:!($.useWorkOSDeviceAuth??!0),async login(f){return pf({...$,callbacks:f})},async refreshToken(f){return b8(f,$)},getApiKey(f){return`workos:${f.access}`}}}N0();var _X={};q(_X,{refreshOpenAICodexToken:()=>I8,openaiCodexOAuthProvider:()=>H7,normalizeOpenAICodexCredentials:()=>X7,loginOpenAICodex:()=>rf,isOpenAICodexTokenExpired:()=>j7,getValidOpenAICodexCredentials:()=>x8,OPENAI_CODEX_OAUTH_CONFIG:()=>e});import{nanoid as rD}from"nanoid";var e={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 YJ extends Error{status;errorCode;constructor($,f){super($);this.name="OpenAICodexOAuthTokenError",this.status=f?.status,this.errorCode=f?.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 iD($,f,J=e.redirectUri){let Q=await fetch(e.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:e.clientId,code:$,code_verifier:f,redirect_uri:J}),signal:AbortSignal.timeout(e.httpTimeoutMs)});if(!Q.ok)return{type:"failed"};let Z=await Q.json();if(!Z.access_token||!Z.refresh_token||typeof Z.expires_in!=="number")return{type:"failed"};return{type:"success",access:Z.access_token,refresh:Z.refresh_token,expires:Date.now()+Z.expires_in*1000,email:Z.email,idToken:Z.id_token}}async function nD($){try{let f=await fetch(e.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:e.clientId}),signal:AbortSignal.timeout(e.httpTimeoutMs)});if(!f.ok){let Q=await f.text().catch(()=>""),Z=qf(Q);throw new YJ(`Token refresh failed: ${f.status}${Z.message?` - ${Z.message}`:""}`,{status:f.status,errorCode:Z.code})}let J=await f.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}catch(f){if(f instanceof YJ)throw f;return{type:"failed"}}}async function aD($="pi"){let{verifier:f,challenge:J}=await U6(),Q=rD(32),Z=new URL(e.authorizationEndpoint);return Z.searchParams.set("response_type","code"),Z.searchParams.set("client_id",e.clientId),Z.searchParams.set("redirect_uri",e.redirectUri),Z.searchParams.set("scope",e.scopes),Z.searchParams.set("code_challenge",J),Z.searchParams.set("code_challenge_method","S256"),Z.searchParams.set("state",Q),Z.searchParams.set("id_token_add_organizations","true"),Z.searchParams.set("codex_cli_simplified_flow","true"),Z.searchParams.set("originator",$),{verifier:f,state:Q,url:Z.toString()}}function tD(){try{let $=new URL(e.redirectUri),f=$.port.length>0?Number.parseInt($.port,10):e.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(f)?f:e.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:e.callbackPort,callbackPath:"/auth/callback",redirectUri:e.redirectUri}}}function OX($,f){let J=f?G0(f):G0($),Q=J?J:G0($),W=Q?.[e.jwtClaimPath]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let j=Q?.organizations;if(Array.isArray(j)&&j.length>0){let H=j[0];if(typeof H?.id==="string"&&H.id.length>0)return H.id}let X=Q?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;return null}function zX($,f){let J=OX($.access,$.idToken)??f?.accountId;if(!J)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||f?.refresh||"",expires:$.expires,accountId:J,email:$.email??f?.email,metadata:{...f?.metadata??{},provider:"openai-codex"}}}async function rf($){L$($.telemetry,"openai-codex");let f=tD(),{verifier:J,state:Q,url:Z}=await aD($.originator),W=await a0({host:f.host,ports:[f.port],callbackPath:f.callbackPath,expectedState:Q});$.onAuth({url:Z,instructions:"Continue the authentication process in your browser."});let j;try{let X=await wf({waitForCallback:W.waitForCallback,cancelWait:W.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(X.state&&X.state!==Q)throw Error("State mismatch");if(j=X.code,!j){let V=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),A=Mf(V,{allowHashCodeState:!0});if(A.state&&A.state!==Q)throw Error("State mismatch");j=A.code}if(!j)throw Error("Missing authorization code");let H=await iD(j,J,f.redirectUri);if(H.type!=="success")throw Error("Token exchange failed");let Y=zX(H);return O$($.telemetry,"openai-codex"),_$($.telemetry,{id:Y.accountId,email:Y.email,provider:"openai-codex"}),Y}catch(X){throw z$($.telemetry,"openai-codex",X instanceof Error?X.message:String(X)),X}finally{W.close()}}async function I8($,f){let J=await nD($);if(J.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let Q=zX(J,f);if(!Q.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return Q}async function x8($,f){if(!$)return null;let J=f?.refreshBufferMs??e.refreshBufferMs,Q=f?.retryableTokenGraceMs??e.retryableTokenGraceMs;if(f?.forceRefresh!==!0&&!S1($,J))return $;try{return await I8($.refresh,$)}catch(W){if(W instanceof YJ&&W.isLikelyInvalidGrant())return n$(f?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>Q)return $;return null}}function j7($,f=e.refreshBufferMs){return S1($,f)}function X7($){let f=$.accountId??OX($.access);if(!f)throw Error("Failed to extract accountId from token");return{...$,accountId:f,metadata:{...$.metadata??{},provider:"openai-codex"}}}var H7={id:"openai-codex",name:"ChatGPT Plus/Pro (ChatGPT Subscription)",usesCallbackServer:!0,async login($){return rf({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput})},async refreshToken($){return I8($.refresh,$)},getApiKey($){return $.access}};var nY={};q(nY,{ClineCore:()=>T4});function yX($){if($===!0)return{};if(!$)return;return $}function NX($){if($==="user")return"global";return $}class Y7{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let f=this.getService().ingestEvent($);return{event:f.event,duplicate:f.duplicate,matchedSpecIds:f.matchedSpecs.map((J)=>J.specId),queuedRuns:f.queuedRuns,suppressions:f.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function TX($){let{host:f}=$;return{async startSession(J){let Q=(J.cwd?.trim()||J.workspaceRoot).trim(),Z=await f.startSession({source:J.source?.trim()||K0.CLI,interactive:!1,config:{providerId:vf(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:eD(J),maxIterations:J.maxIterations,enableTools:J.enableTools!==!1,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},toolPolicies:J.toolPolicies??{"*":{autoApprove:J.autoApproveTools!==!1}},localRuntime:{extensionContext:$.getExtensionContext(),configExtensions:J.configExtensions}});return{sessionId:Z.sessionId,startResult:{sessionId:Z.sessionId,manifestPath:Z.manifestPath,messagesPath:Z.messagesPath}}},async sendSession(J,Q){let Z=await f.runTurn({sessionId:J,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((W)=>W.content),delivery:Q.delivery});if(!Z)throw Error("ClineCore automation runtime returned no result");return{result:oD(Z)}},async abortSession(J){return await f.abort(J,Error("ClineCore automation abort")),{applied:!0}},async stopSession(J){return await f.stopSession(J),{applied:!0}}}}function VJ($){let f=sD($.automationService,$.automation),J=$.context?.client??($.clientName?{name:$.clientName}:void 0),Q=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),Z=$.context?.logger??$.logger,W=$.context?.telemetry??$.telemetry;if(!f&&!J&&!Q&&!Z&&!W)return $.context;return{...$.context??{},...J?{client:J}:{},...Q?{user:Q}:{},...Z?{logger:Z}:{},...W?{telemetry:W}:{},...f?{automation:f}:{}}}function sD($,f){if(!$)return;return{ingestEvent:(J)=>{f.ingestEvent(J)}}}function oD($){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((f)=>({name:f.name,input:f.input,output:f.output,error:f.error,durationMs:f.durationMs}))}}function eD($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var BH={};q(BH,{createCoreSettingsService:()=>r1,CoreSettingsService:()=>W1});import{existsSync as NJ}from"node:fs";import{basename as YH,isAbsolute as KU,relative as GU}from"node:path";var vX={};q(vX,{resolveWorkflowsConfigSearchPaths:()=>r8,resolveSkillsConfigSearchPaths:()=>l8,resolveRulesConfigSearchPaths:()=>p8,parseWorkflowConfigFromMarkdown:()=>d8,parseSkillConfigFromMarkdown:()=>c8,parseRuleConfigFromMarkdown:()=>u8,createWorkflowsConfigDefinition:()=>a8,createUserInstructionConfigService:()=>Z1,createSkillsConfigDefinition:()=>i8,createRulesConfigDefinition:()=>n8,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>v8,UnifiedConfigFileWatcher:()=>g1,SKILLS_CONFIG_DIRECTORY_NAME:()=>m8,RULES_CONFIG_DIRECTORY_NAME:()=>PJ});import{createHash as $R}from"node:crypto";import{watch as fR}from"node:fs";import{readdir as JR,readFile as QR}from"node:fs/promises";import{join as ZR}from"node:path";function WR($){return $R("sha1").update($).digest("hex")}function wX($){return Boolean($&&typeof $==="object"&&"code"in $)}function MX($){return wX($)&&$.code==="ENOENT"}function qX($){return wX($)&&($.code==="EACCES"||$.code==="EPERM")}class g1{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($,f){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=f?.debounceMs??75,this.emitParseErrors=f?.emitParseErrors??!1;for(let J of $){if(this.definitionsByType.has(J.type))throw Error(`Duplicate unified config definition type '${J.type}'.`);this.definitionsByType.set(J.type,J),this.recordsByType.set(J.type,new Map),this.discoveredDirectoriesByType.set(J.type,new Set);for(let Q of J.directories){let Z=this.baseTypesByDirectory.get(Q);if(Z)Z.add(J.type);else this.baseTypesByDirectory.set(Q,new Set([J.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 f=this.definitionsByType.get($);if(!f)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(f)})}getSnapshot($){let f=this.recordsByType.get($);return new Map([...f?.entries()??[]].map(([J,Q])=>[J,{...Q}]))}getAllSnapshots(){let $=new Map;for(let[f,J]of this.recordsByType.entries())$.set(f,new Map([...J.entries()].map(([Q,Z])=>[Q,{...Z}])));return $}emit($){for(let f of this.listeners)f($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[f,J]of this.watchersByDirectory.entries()){if($.has(f))continue;J.close(),this.watchersByDirectory.delete(f)}this.watchedTypesByDirectory=$;for(let f of $.keys()){if(this.watchersByDirectory.has(f))continue;try{let J=fR(f,()=>{let Q=this.watchedTypesByDirectory.get(f);if(!Q)return;for(let Z of Q)this.pendingTypes.add(Z);this.scheduleFlush()});this.watchersByDirectory.set(f,J),J.on("error",(Q)=>{let Z=this.watchedTypesByDirectory.get(f);if(!Z)return;for(let W of Z)this.emit({kind:"error",type:W,error:Q,filePath:f})})}catch(J){if(!MX(J)&&!qX(J)){let Q=$.get(f);if(!Q)continue;for(let Z of Q)this.emit({kind:"error",type:Z,error:J,filePath:f})}}}}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 f of $){let J=this.definitionsByType.get(f);if(!J)continue;await this.refreshTypeInternal(J)}})},this.debounceMs)}async refreshTypeInternal($){let{records:f,discoveredDirectories:J}=await this.loadDefinition($),Q=this.recordsByType.get($.type)??new Map;for(let[Z,W]of Q.entries()){if(f.has(Z))continue;this.emit({kind:"remove",type:$.type,id:Z,filePath:W.filePath})}for(let[Z,W]of f.entries()){let j=Q.get(Z);if(j&&j.filePath===W.filePath&&j.fingerprint===W.fingerprint)continue;this.emit({kind:"upsert",record:{type:W.type,id:Z,item:W.item,filePath:W.filePath}})}if(this.recordsByType.set($.type,f),this.discoveredDirectoriesByType.set($.type,J),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let f=new Map,J=new Set;for(let Q of $.directories){J.add(Q);let Z=$.discoverFiles?await $.discoverFiles(Q):await this.readDirectoryFileCandidates(Q);for(let W of Z){let{fileName:j,filePath:X}=W;if(J.add(W.directoryPath),$.includeFile&&!$.includeFile(j,X))continue;try{let H=await QR(X,"utf8"),Y={type:$.type,directoryPath:W.directoryPath,fileName:j,filePath:X,content:H},V=$.parseFile(Y),A=$.resolveId(V,Y).trim();if(!A)continue;f.set(A,{type:$.type,id:A,item:V,filePath:X,fingerprint:WR(H)})}catch(H){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:H,filePath:X})}}}return{records:f,discoveredDirectories:J}}buildDesiredTypesByDirectory(){let $=new Map;for(let[f,J]of this.baseTypesByDirectory.entries())$.set(f,new Set(J));for(let[f,J]of this.discoveredDirectoriesByType.entries())for(let Q of J){let Z=$.get(Q);if(Z)Z.add(f);else $.set(Q,new Set([f]))}return $}async readDirectoryFileCandidates($){try{return(await JR($,{withFileTypes:!0})).filter((J)=>J.isFile()).map((J)=>({directoryPath:$,fileName:J.name,filePath:ZR($,J.name)})).sort((J,Q)=>J.fileName.localeCompare(Q.fileName))}catch(f){if(MX(f)||qX(f))return[];throw f}}}import{readdir as V7,readFile as jR,stat as SX}from"node:fs/promises";import{basename as m1,dirname as XR,extname as A7,join as T0}from"node:path";import{RULES_CONFIG_DIRECTORY_NAME as PJ,resolveRulesConfigSearchPaths as HR,resolveSkillsConfigSearchPaths as YR,resolveWorkflowsConfigSearchPaths as VR,SKILLS_CONFIG_DIRECTORY_NAME as m8,WORKFLOWS_CONFIG_DIRECTORY_NAME as v8}from"@cline/shared/storage";import AR from"yaml";var AJ="SKILL.md",BR="managed.json",KR=new Set([".md",".markdown",".txt"]);function B7($){return $.trim().toLowerCase()}function g8($){let f=$;return f?.code==="ENOENT"||f?.code==="EACCES"||f?.code==="EPERM"}function BJ($){return KR.has(A7($).toLowerCase())}async function K7($){try{let f=await V7($,{withFileTypes:!0}),J=[];for(let Q of f){if(!Q.isDirectory())continue;let Z=T0($,Q.name),W=T0(Z,BR);try{let j=await jR(W,"utf8"),X=JSON.parse(j);if(X&&typeof X==="object")J.push(Z)}catch(j){if(g8(j))continue;if(j?.name==="SyntaxError")continue;throw j}}return J.sort((Q,Z)=>Q.localeCompare(Z))}catch(f){if(g8(f))return[];throw f}}function G7($){let f=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=$.match(f);if(!J)return{data:{},body:$,hadFrontmatter:!1};let[,Q,Z]=J;try{let W=AR.parse(Q);return{data:W&&typeof W==="object"&&!Array.isArray(W)?W:{},body:Z,hadFrontmatter:!0}}catch(W){let j=W instanceof Error?W.message:String(W);return{data:{},body:$,hadFrontmatter:!0,parseError:j}}}function KJ($,f,J){if($===void 0||$===null){if(J)throw Error(`Missing required frontmatter field '${f}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${f}' must be a string.`);let Q=$.trim();if(!Q&&J)throw Error(`Frontmatter field '${f}' cannot be empty.`);return Q||void 0}function nf($,f){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${f}' must be a boolean.`);return $}function c8($,f){let{data:J,body:Q,parseError:Z}=G7($);if(Z)throw Error(`Failed to parse YAML frontmatter: ${Z}`);let W=Q.trim();if(!W)throw Error("Missing instructions body in skill file.");let X=KJ(J.name,"name",!1)??f.trim();if(!X)throw Error("Missing skill name.");return{name:X,description:KJ(J.description,"description",!1),disabled:nf(J.disabled,"disabled")??(nf(J.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:J}}function u8($,f){let{data:J,body:Q,parseError:Z}=G7($);if(Z)throw Error(`Failed to parse YAML frontmatter: ${Z}`);let W=Q.trim();if(!W)throw Error("Missing instructions body in rule file.");let j=KJ(J.name,"name",!1)??f.trim();if(!j)throw Error("Missing rule name.");return{name:j,disabled:nf(J.disabled,"disabled")??(nf(J.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:J}}function d8($,f){let{data:J,body:Q,parseError:Z}=G7($);if(Z)throw Error(`Failed to parse YAML frontmatter: ${Z}`);let W=Q.trim();if(!W)throw Error("Missing instructions body in workflow file.");let j=KJ(J.name,"name",!1)??f.trim();if(!j)throw Error("Missing workflow name.");return{name:j,disabled:nf(J.disabled,"disabled")??(nf(J.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:J}}function l8($){return YR($)}function p8($){return HR($)}function r8($){return VR($)}async function CX($){if(m1($)===".cline"){let f=await K7($);return(await Promise.all(f.map((Q)=>CX(T0(Q,m8))))).flat()}try{let f=await V7($,{withFileTypes:!0}),J=[];for(let Q of f){if(Q.isFile()&&Q.name===AJ){J.push({directoryPath:$,fileName:Q.name,filePath:T0($,Q.name)});continue}if(Q.isDirectory())J.push({directoryPath:T0($,Q.name),fileName:AJ,filePath:T0($,Q.name,AJ)})}return J}catch(f){if(g8(f))return[];throw f}}async function GJ($){if(m1($)===".cline"){let f=await K7($);return(await Promise.all(f.map((Q)=>GJ(T0(Q,"rules.md"))))).flat()}try{if((await SX($)).isFile())return[{directoryPath:XR($),fileName:m1($),filePath:$}]}catch(f){if(!g8(f))throw f}try{let J=(await V7($,{withFileTypes:!0})).filter((Z)=>Z.isFile()&&BJ(Z.name)).map((Z)=>({directoryPath:$,fileName:Z.name,filePath:T0($,Z.name)})),Q=T0($,"AGENTS.md");try{if((await SX(Q)).isFile()){if(!J.some((j)=>j.fileName==="AGENTS.md"))J.push({directoryPath:$,fileName:"AGENTS.md",filePath:Q})}}catch{}return J}catch(f){if(g8(f))return[];throw f}}async function GR($){if(m1($)===".cline"){let f=await K7($);return(await Promise.all(f.map((Q)=>GJ(T0(Q,v8))))).flat()}return GJ($)}function i8($){let f=$?.directories??l8($?.workspacePath),J=$?.workspacePath?T0($.workspacePath,".cline"):void 0;return{type:"skill",directories:J?[...f,J]:f,discoverFiles:CX,includeFile:(Q)=>Q===AJ,parseFile:(Q)=>c8(Q.content,m1(Q.directoryPath)),resolveId:(Q)=>B7(Q.name)}}function n8($){let f=$?.directories??p8($?.workspacePath),J=$?.workspacePath?T0($.workspacePath,".cline"):void 0;return{type:"rule",directories:J?[...f,J]:f,discoverFiles:GJ,includeFile:(Q,Z)=>Q===".clinerules"||BJ(Q)||BJ(Z),parseFile:(Q)=>u8(Q.content,m1(Q.filePath,A7(Q.filePath))),resolveId:(Q)=>B7(Q.name)}}function a8($){let f=$?.directories??r8($?.workspacePath),J=$?.workspacePath?T0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:J?[...f,J]:f,discoverFiles:GR,includeFile:(Q)=>BJ(Q),parseFile:(Q)=>d8(Q.content,m1(Q.filePath,A7(Q.filePath))),resolveId:(Q)=>B7(Q.name)}}function EX($){let f=[i8($?.skills),n8($?.rules),a8($?.workflows)];return new g1(f,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as hX}from"@cline/shared";function PR($,f){if($.description?.trim())return hX($.description,".");if(f==="workflow")return;return hX($.instructions,".")}function FR($){return $.disabled!==!0}function bX($,f){return[...$.getSnapshot(f).entries()].map(([J,Q])=>({id:J,record:Q})).filter(({record:J})=>FR(J.item)).map(({id:J,record:Q})=>({id:J,name:Q.item.name,instructions:Q.item.instructions,description:PR(Q.item,f),kind:f})).sort((J,Q)=>J.name.localeCompare(Q.name))}function t8($){let f=new Map;for(let J of[...bX($,"workflow"),...bX($,"skill")])if(!f.has(J.name))f.set(J.name,J);return[...f.values()].sort((J,Q)=>J.name.localeCompare(Q.name))}function kX($,f){if(!$.startsWith("/")||$.length<2)return $;let J=$.match(/^\/(\S+)/);if(!J)return $;let Q=J[1];if(!Q)return $;let Z=Q.length+1,W=$.slice(Z),j=t8(f).find((X)=>X.name===Q);return j?`${j.instructions}${W}`:$}var xX={};q(xX,{mergeRulesForSystemPrompt:()=>tf,loadRulesForSystemPromptFromWatcher:()=>P7,listEnabledRulesFromWatcher:()=>IX,isRuleEnabled:()=>FJ,formatRulesForSystemPrompt:()=>af});function FJ($){return $.disabled!==!0}function af($){if($.length===0)return"";return`
185
185
 
186
186
  # Rules
187
187
  ${$.map((J)=>`## ${J.name}
@@ -200,13 +200,13 @@ ${B}${Y.instructions}
200
200
  ${j}`:Z.instructions}})}}}class mX{watcher;ready;stopped=!1;constructor($){this.watcher=EX($)}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(([f,J])=>({type:$,id:f,filePath:J.filePath,item:J.item}))}listRuntimeCommands(){return t8(this.watcher)}resolveRuntimeSlashCommand($){return kX($,this.watcher)}hasConfiguredSkills($){return s8(this.watcher,$).length>0}createExtension($){return gX({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function Z1($){return new mX($)}import{readFile as zR,writeFile as _R}from"node:fs/promises";import uX from"yaml";function yR($){let f=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=$.match(f);if(!J)return{data:{},body:$,hadFrontmatter:!1};let[,Q,Z]=J,W=uX.parse(Q);return{data:W&&typeof W==="object"&&!Array.isArray(W)?W:{},body:Z,hadFrontmatter:!0}}function cX($,f){return`---
201
201
  ${uX.stringify($).trimEnd()}
202
202
  ---
203
- ${f}`}function TR($,f){let{data:J,body:Q,hadFrontmatter:Z}=yR($);if(!Z&&f)return $;if(f){if(delete J.disabled,J.enabled===!1)delete J.enabled;if(Object.keys(J).length===0)return Q;return cX(J,Q)}return J.disabled=!0,cX(J,Q)}async function dX({filePath:$,enabled:f}){let J=await zR($,"utf8"),Q=TR(J,f);return await _R($,Q),{filePath:$,enabled:f,disabled:!f}}var XH={};q(XH,{updateMcpServerOAuthState:()=>d1,setMcpServerDisabled:()=>c1,resolveMcpServerRegistrations:()=>Q$,resolveDefaultMcpSettingsPath:()=>O0,registerMcpServersFromSettingsFile:()=>l1,loadMcpSettingsFile:()=>v1,listMcpServerOAuthStatuses:()=>e8,hasMcpSettingsFile:()=>q$,getMcpServerOAuthState:()=>u1,createMcpTools:()=>ef,createDisabledMcpToolPolicy:()=>$4,createDisabledMcpToolPolicies:()=>yJ,createDefaultMcpServerClientFactory:()=>of,authorizeMcpServerOAuth:()=>OJ,InMemoryMcpManager:()=>p1});import{spawn as oR}from"node:child_process";import{StringDecoder as JH}from"node:string_decoder";import{UnauthorizedError as oX}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as eR}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as uR}from"node:crypto";import{UnauthorizedError as dR}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as lR}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as pR}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as rR}from"@modelcontextprotocol/sdk/client/streamableHttp.js";RJ();var iR="/mcp/oauth/callback",nR=[1456,1457,1458],aR=300000;function tR($){if($ instanceof Error){let f=$.message.trim();if(f.length>0)return f}return String($)}function sR($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function LJ($){let f={};try{f=u1($.serverName,{filePath:$.settingsPath})??{}}catch{f={}}let J,Q,Z=async(j)=>{let X=sf(j(f))??{};try{f=d1($.serverName,()=>X,{filePath:$.settingsPath})}catch{f=X}};return{provider:{get redirectUrl(){return f.redirectUrl??$.redirectUrl},get clientMetadata(){return sR(f.redirectUrl??$.redirectUrl)},state:()=>{return Q=uR(),Q},clientInformation:()=>f.clientInformation,saveClientInformation:async(j)=>{await Z((X)=>({...X,clientInformation:j,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>f.tokens,saveTokens:async(j)=>{await Z((X)=>({...X,tokens:j,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:Date.now()}))},redirectToAuthorization:async(j)=>{J=j.toString(),await $.onAuthorizationUrl?.(J)},saveCodeVerifier:async(j)=>{await Z((X)=>({...X,codeVerifier:j,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!f.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return f.codeVerifier},invalidateCredentials:async(j)=>{await Z((X)=>{if(j==="all")return{lastError:X.lastError,redirectUrl:X.redirectUrl};return{...X,...j==="client"?{clientInformation:void 0}:{},...j==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...j==="verifier"?{codeVerifier:void 0}:{},...j==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(j)=>{await Z((X)=>({...X,discoveryState:j}))},discoveryState:()=>f.discoveryState},getLastAuthorizationUrl:()=>J,getLastOAuthState:()=>Q,resetInteractiveState:async()=>{await Z((j)=>({...j,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(j)=>{await Z((X)=>({...X,lastError:j}))},clearError:async()=>{await Z((j)=>({...j,lastError:void 0}))}}}function UJ($){let f=$.registration.transport;if(f.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let J=f.headers?{headers:f.headers}:void 0;if(f.type==="sse")return new pR(new URL(f.url),{authProvider:$.oauthProvider,requestInit:J,fetch:$.fetch});return new rR(new URL(f.url),{authProvider:$.oauthProvider,requestInit:J,fetch:$.fetch})}function sX($){return new lR({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function OJ($){let f=$.serverName.trim();if(!f)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:J}=await Promise.resolve().then(() => (RJ(),tX)),Q=J({filePath:$.filePath}).find((H)=>H.name===f);if(!Q)throw Error(`MCP server "${f}" is not configured.`);if(Q.disabled)throw Error(`MCP server "${f}" is disabled. Enable it before running OAuth.`);if(Q.transport.type==="stdio")throw Error(`MCP server "${f}" uses stdio transport and does not support OAuth browser flow.`);let Z=await a0({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:nR,callbackPath:$.callbackPath??iR,timeoutMs:$.timeoutMs??aR,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!Z.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let W=LJ({settingsPath:$.filePath,serverName:f,redirectUrl:Z.callbackUrl,onAuthorizationUrl:async(H)=>{await $.openUrl?.(H)}});await W.resetInteractiveState();let j=sX($),X;try{let H=UJ({registration:Q,oauthProvider:W.provider,fetch:$.fetch});try{return await j.connect(H),await j.listTools(),await W.clearError(),{serverName:f,authorized:!0,message:`MCP server "${f}" is already authorized.`}}catch(Y){if(!(Y instanceof dR))throw Y;if(!W.getLastAuthorizationUrl())throw Error(`MCP server "${f}" did not provide an authorization URL.`);let A=await Z.waitForCallback();if(!A)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(A.error)throw Error(`OAuth authorization failed: ${A.error}`);if(!A.code)throw Error("OAuth callback did not include an authorization code.");let B=W.getLastOAuthState();if(!B)throw Error(`MCP server "${f}" did not start an OAuth stateful authorization flow.`);if(A.state!==B)throw Error("OAuth authorization failed: state mismatch.");await H.finishAuth(A.code),X=sX($);let K=UJ({registration:Q,oauthProvider:W.provider,fetch:$.fetch});return await X.connect(K),await X.listTools(),await W.clearError(),{serverName:f,authorized:!0,message:`MCP server "${f}" OAuth authorization completed.`}}}catch(H){let Y=tR(H);throw await W.markError(Y),Error(Y)}finally{await j.close().catch(()=>{return}),await X?.close().catch(()=>{return}),Z.close()}}var $U="2024-11-05",fU=5000,JU=1500,eX="http://127.0.0.1:1456/mcp/oauth/callback";function zJ($){return $ instanceof Error?$.message:String($)}function $H($){let f=Buffer.from(JSON.stringify($),"utf8"),J=Buffer.from(`Content-Length: ${f.byteLength}\r
203
+ ${f}`}function NR($,f){let{data:J,body:Q,hadFrontmatter:Z}=yR($);if(!Z&&f)return $;if(f){if(delete J.disabled,J.enabled===!1)delete J.enabled;if(Object.keys(J).length===0)return Q;return cX(J,Q)}return J.disabled=!0,cX(J,Q)}async function dX({filePath:$,enabled:f}){let J=await zR($,"utf8"),Q=NR(J,f);return await _R($,Q),{filePath:$,enabled:f,disabled:!f}}var XH={};q(XH,{updateMcpServerOAuthState:()=>d1,setMcpServerDisabled:()=>c1,resolveMcpServerRegistrations:()=>Q$,resolveDefaultMcpSettingsPath:()=>O0,registerMcpServersFromSettingsFile:()=>l1,loadMcpSettingsFile:()=>v1,listMcpServerOAuthStatuses:()=>e8,hasMcpSettingsFile:()=>q$,getMcpServerOAuthState:()=>u1,createMcpTools:()=>ef,createDisabledMcpToolPolicy:()=>$4,createDisabledMcpToolPolicies:()=>yJ,createDefaultMcpServerClientFactory:()=>of,authorizeMcpServerOAuth:()=>OJ,InMemoryMcpManager:()=>p1});import{spawn as oR}from"node:child_process";import{StringDecoder as JH}from"node:string_decoder";import{UnauthorizedError as oX}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as eR}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as uR}from"node:crypto";import{UnauthorizedError as dR}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as lR}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as pR}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as rR}from"@modelcontextprotocol/sdk/client/streamableHttp.js";RJ();var iR="/mcp/oauth/callback",nR=[1456,1457,1458],aR=300000;function tR($){if($ instanceof Error){let f=$.message.trim();if(f.length>0)return f}return String($)}function sR($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function LJ($){let f={};try{f=u1($.serverName,{filePath:$.settingsPath})??{}}catch{f={}}let J,Q,Z=async(j)=>{let X=sf(j(f))??{};try{f=d1($.serverName,()=>X,{filePath:$.settingsPath})}catch{f=X}};return{provider:{get redirectUrl(){return f.redirectUrl??$.redirectUrl},get clientMetadata(){return sR(f.redirectUrl??$.redirectUrl)},state:()=>{return Q=uR(),Q},clientInformation:()=>f.clientInformation,saveClientInformation:async(j)=>{await Z((X)=>({...X,clientInformation:j,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>f.tokens,saveTokens:async(j)=>{await Z((X)=>({...X,tokens:j,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:Date.now()}))},redirectToAuthorization:async(j)=>{J=j.toString(),await $.onAuthorizationUrl?.(J)},saveCodeVerifier:async(j)=>{await Z((X)=>({...X,codeVerifier:j,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!f.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return f.codeVerifier},invalidateCredentials:async(j)=>{await Z((X)=>{if(j==="all")return{lastError:X.lastError,redirectUrl:X.redirectUrl};return{...X,...j==="client"?{clientInformation:void 0}:{},...j==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...j==="verifier"?{codeVerifier:void 0}:{},...j==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(j)=>{await Z((X)=>({...X,discoveryState:j}))},discoveryState:()=>f.discoveryState},getLastAuthorizationUrl:()=>J,getLastOAuthState:()=>Q,resetInteractiveState:async()=>{await Z((j)=>({...j,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(j)=>{await Z((X)=>({...X,lastError:j}))},clearError:async()=>{await Z((j)=>({...j,lastError:void 0}))}}}function UJ($){let f=$.registration.transport;if(f.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let J=f.headers?{headers:f.headers}:void 0;if(f.type==="sse")return new pR(new URL(f.url),{authProvider:$.oauthProvider,requestInit:J,fetch:$.fetch});return new rR(new URL(f.url),{authProvider:$.oauthProvider,requestInit:J,fetch:$.fetch})}function sX($){return new lR({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function OJ($){let f=$.serverName.trim();if(!f)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:J}=await Promise.resolve().then(() => (RJ(),tX)),Q=J({filePath:$.filePath}).find((H)=>H.name===f);if(!Q)throw Error(`MCP server "${f}" is not configured.`);if(Q.disabled)throw Error(`MCP server "${f}" is disabled. Enable it before running OAuth.`);if(Q.transport.type==="stdio")throw Error(`MCP server "${f}" uses stdio transport and does not support OAuth browser flow.`);let Z=await a0({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:nR,callbackPath:$.callbackPath??iR,timeoutMs:$.timeoutMs??aR,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!Z.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let W=LJ({settingsPath:$.filePath,serverName:f,redirectUrl:Z.callbackUrl,onAuthorizationUrl:async(H)=>{await $.openUrl?.(H)}});await W.resetInteractiveState();let j=sX($),X;try{let H=UJ({registration:Q,oauthProvider:W.provider,fetch:$.fetch});try{return await j.connect(H),await j.listTools(),await W.clearError(),{serverName:f,authorized:!0,message:`MCP server "${f}" is already authorized.`}}catch(Y){if(!(Y instanceof dR))throw Y;if(!W.getLastAuthorizationUrl())throw Error(`MCP server "${f}" did not provide an authorization URL.`);let A=await Z.waitForCallback();if(!A)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(A.error)throw Error(`OAuth authorization failed: ${A.error}`);if(!A.code)throw Error("OAuth callback did not include an authorization code.");let B=W.getLastOAuthState();if(!B)throw Error(`MCP server "${f}" did not start an OAuth stateful authorization flow.`);if(A.state!==B)throw Error("OAuth authorization failed: state mismatch.");await H.finishAuth(A.code),X=sX($);let K=UJ({registration:Q,oauthProvider:W.provider,fetch:$.fetch});return await X.connect(K),await X.listTools(),await W.clearError(),{serverName:f,authorized:!0,message:`MCP server "${f}" OAuth authorization completed.`}}}catch(H){let Y=tR(H);throw await W.markError(Y),Error(Y)}finally{await j.close().catch(()=>{return}),await X?.close().catch(()=>{return}),Z.close()}}var $U="2024-11-05",fU=5000,JU=1500,eX="http://127.0.0.1:1456/mcp/oauth/callback";function zJ($){return $ instanceof Error?$.message:String($)}function $H($){let f=Buffer.from(JSON.stringify($),"utf8"),J=Buffer.from(`Content-Length: ${f.byteLength}\r
204
204
  \r
205
205
  `,"utf8");return Buffer.concat([J,f])}function fH($){return Buffer.from(`${JSON.stringify($)}
206
206
  `,"utf8")}class U7{buffer="";decoder=new JH("utf8");push($){this.buffer+=this.decoder.write($);let f=[];while(!0){let J=this.buffer.indexOf(`\r
207
207
  \r
208
208
  `);if(J<0)break;let Z=this.buffer.slice(0,J).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!Z)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let W=Number.parseInt(Z[1],10),j=J+4,X=j+W;if(this.buffer.length<X)break;f.push(this.buffer.slice(j,X)),this.buffer=this.buffer.slice(X)}return f}}class L7{buffer="";decoder=new JH("utf8");push($){this.buffer+=this.decoder.write($);let f=[];while(!0){let J=this.buffer.indexOf(`
209
- `);if(J<0)break;let Q=this.buffer.slice(0,J).trim();if(this.buffer=this.buffer.slice(J+1),Q.length>0)f.push(Q)}return f}}class QH{registration;process;nextRequestId=1;pending=new Map;framedParser=new U7;newlineParser=new L7;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"],f;for(let J of $){await this.disconnect().catch(()=>{}),this.spawnProcess(J);try{await this.request("initialize",{protocolVersion:$U,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},JU),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=J;return}catch(Q){f=Q instanceof Error?Q:Error(String(Q))}}throw f??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((f)=>typeof f?.name==="string"&&typeof f.inputSchema==="object"&&f.inputSchema!==null).map((f)=>({name:f.name,description:f.description,inputSchema:f.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let f=this.registration.transport;if(f.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${f.type}`);this.framedParser=new U7,this.newlineParser=new L7,this.stderrBuffer="",this.protocolMode=$;let J=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},Q=oR(f.command,f.args??[],{cwd:f.cwd,env:{...process.env,...f.env??{}},stdio:["pipe","pipe","pipe"],...J});this.process=Q,Q.stdout.on("data",(Z)=>this.handleStdout(Z)),Q.stderr.on("data",(Z)=>{if(this.process!==Q)return;if(this.stderrBuffer+=Z.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),Q.once("error",(Z)=>{if(this.process!==Q)return;this.failAllPending(Error(`MCP process error: ${zJ(Z)}`))}),Q.once("exit",(Z,W)=>{if(this.process!==Q)return;this.connected=!1,this.process=void 0;let j=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${Z??"null"}, signal=${W??"null"}).${j}`))})}handleStdout($){try{let f=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let J of f){let Q=JSON.parse(J);if(typeof Q.id!=="number")continue;let Z=this.pending.get(Q.id);if(!Z)continue;if(this.pending.delete(Q.id),clearTimeout(Z.timeout),Q.error){let W=Q.error.message||`MCP request failed with code ${Q.error.code??"unknown"}`;Z.reject(Error(W));continue}Z.resolve(Q.result)}}catch(f){this.handleProtocolFailure(f)}}handleProtocolFailure($){let f=this.process;if(!f)return;this.connected=!1,this.process=void 0;let J=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${zJ($)}.${J}`)),f.kill()}async request($,f,J=fU){let Q=this.process;if(!Q?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let Z=this.nextRequestId++,W={jsonrpc:"2.0",id:Z,method:$,...f?{params:f}:{}},j=new Promise((X,H)=>{let Y=setTimeout(()=>{this.pending.delete(Z),H(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},J);this.pending.set(Z,{resolve:X,reject:H,timeout:Y})});try{Q.stdin.write(this.protocolMode==="framed"?$H(W):fH(W))}catch(X){let H=this.pending.get(Z);if(H)clearTimeout(H.timeout),this.pending.delete(Z);throw X}return j}notify($,f){let J=this.process;if(!J?.stdin.writable)return;let Q={jsonrpc:"2.0",method:$,...f?{params:f}:{}};J.stdin.write(this.protocolMode==="framed"?$H(Q):fH(Q))}failAllPending($){for(let[f,J]of this.pending)clearTimeout(J.timeout),this.pending.delete(f),J.reject($)}}class ZH{registration;options;client;authContext;constructor($,f){this.registration=$;this.options=f}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 $=LJ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??eX});this.authContext=$;try{let f=new eR({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),J=UJ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await f.connect(J),await $.clearError(),this.client=f}catch(f){let J=f instanceof oX?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):zJ(f);throw await $.markError(J),Error(J)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema&&typeof J.inputSchema==="object"&&!Array.isArray(J.inputSchema)?J.inputSchema:{}}))}catch(f){return await this.handleOperationError(f)}}async callTool($){let f=await this.ensureConnectedClient();try{return await f.callTool({name:$.name,arguments:$.arguments??{}})}catch(J){return await this.handleOperationError(J)}}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 f=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${f} Run authorizeMcpServerOAuth for this server.`;return`${f} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let f=this.authContext??LJ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??eX}),J=$ instanceof oX?this.formatUnauthorizedMessage(f.getLastAuthorizationUrl()):zJ($);throw await f.markError(J),Error(J)}}function of($={}){return(f)=>f.transport.type==="stdio"?new QH(f):new ZH(f,$)}RJ();function x0(){return Date.now()}function QU($){return $.map((f)=>({name:f.name,description:f.description,inputSchema:f.inputSchema}))}class p1{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let f=this.servers.get($.name);if(!f){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:x0()});return}let J=JSON.stringify(f.registration.transport)!==JSON.stringify($.transport);if(f.registration={...$},f.updatedAt=x0(),J)await this.disconnectState(f),f.client=void 0,f.toolCache=void 0,f.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let f=this.requireServer($);await this.disconnectState(f),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let f=this.requireServer($);await this.connectState(f)})}async disconnectServer($){await this.runExclusive($,async()=>{let f=this.requireServer($);await this.disconnectState(f)})}async setServerDisabled($,f){await this.runExclusive($,async()=>{let J=this.requireServer($);if(J.registration={...J.registration,disabled:f},J.updatedAt=x0(),f)await this.disconnectState(J)})}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(($,f)=>$.name.localeCompare(f.name))}async listTools($){let f=this.requireServer($),J=f.toolCacheUpdatedAt??0;if(f.toolCache&&x0()-J<=this.toolsCacheTtlMs)return f.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let f=this.requireServer($),Q=await(await this.ensureConnectedClient(f)).listTools(),Z=QU(Q);return f.toolCache=Z,f.toolCacheUpdatedAt=x0(),f.updatedAt=x0(),Z})}async callTool($){return this.runExclusive($.serverName,async()=>{let f=this.requireServer($.serverName),J=await this.ensureConnectedClient(f);return f.updatedAt=x0(),J.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let f of $)await this.unregisterServer(f)}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=x0();try{let f=$.client??await this.clientFactory($.registration);await f.connect(),$.client=f,$.status="connected",$.lastError=void 0,$.updatedAt=x0()}catch(f){throw $.status="disconnected",$.lastError=f instanceof Error?f.message:String(f),$.updatedAt=x0(),f}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=x0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=x0()}}requireServer($){let f=this.servers.get($);if(!f)throw Error(`Unknown MCP server: ${$}`);return f}async runExclusive($,f){let J=this.operationLocks.get($)??Promise.resolve(),Q,Z=new Promise((j)=>{Q=j}),W=J.catch(()=>{return}).then(()=>Z);this.operationLocks.set($,W),await J.catch(()=>{return});try{return await f()}finally{if(Q?.(),this.operationLocks.get($)===W)this.operationLocks.delete($)}}}import{createHash as ZU}from"node:crypto";var WH=128,WU=/[^a-zA-Z0-9_-]+/g,jH=8,jU=1,XU="mcp_tool";function HU($){return ZU("sha1").update($).digest("hex").slice(0,jH)}function YU($){return $.replace(WU,"_")}var _J=({serverName:$,toolName:f})=>{let J=`${$}__${f}`,Q=YU(J);if(Q===J&&J.length<=WH)return J;let Z=HU(J),W=WH-jU-jH;return`${Q.slice(0,W)||XU}_${Z}`};function $4($){return{[($.nameTransform??_J)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function yJ($){let f={};for(let J of $.toolNames)Object.assign(f,$4({serverName:$.serverName,toolName:J,nameTransform:$.nameTransform}));return f}import{createTool as VU}from"@cline/shared";function AU($,f){let J=f.description?.trim();if(J)return J;return`Execute MCP tool "${f.name}" from server "${$}".`}async function ef($){let f=await $.provider.listTools($.serverName),J=$.nameTransform??_J;return f.map((Q)=>{let Z=J({serverName:$.serverName,toolName:Q.name});return VU({name:Z,description:AU($.serverName,Q),inputSchema:Q.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(W,j)=>$.provider.callTool({serverName:$.serverName,toolName:Q.name,arguments:W&&typeof W==="object"&&!Array.isArray(W)?W:void 0,context:j})})})}T$();var HH={};q(HH,{listPluginTools:()=>f4});T$();function BU($,f){if(!$.setup)return[];let J=[],Q={registerTool:(Z)=>J.push(Z),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{}};return $.setup(Q,{workspaceInfo:f}),J}async function f4($){let f=h1({workspacePath:$.workspacePath,cwd:$.cwd}),J=n0($.disabledToolNames),Q=[];for(let Z of f){let W=await N$([Z],{cwd:$.cwd,providerId:$.providerId,modelId:$.modelId});for(let j of W.plugins)for(let X of BU(j,{rootPath:$.workspacePath}))Q.push({name:X.name,pluginName:j.name,path:Z,source:Z.startsWith($.workspacePath)?"workspace-plugin":"global-plugin",enabled:!J.has(X.name),description:X.description?.trim()||void 0})}return Q.sort((Z,W)=>{let j=Z.name.localeCompare(W.name);if(j!==0)return j;return Z.path.localeCompare(W.path)})}function NJ($,f){if(!f)return"global";let J=GU(f,$);return!J.startsWith("..")&&!KU(J)?"workspace":"global"}function J4($){return[...$].sort((f,J)=>{let Q=(Z)=>{switch(Z){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(f.source!==J.source)return Q(f.source)-Q(J.source);return f.name.localeCompare(J.name)})}function AH($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}async function VH($,f){if($.userInstructionService)return await f($.userInstructionService);let J=AH($);if(!J)return await f(void 0);let Q=Z1({skills:{workspacePath:J},rules:{workspacePath:J},workflows:{workspacePath:J}});try{return await Q.start(),await f(Q)}finally{Q.stop()}}function PU($,f){if(!$)return;let J=$.listRecords("skill");if(f.id){let Q=J.find((Z)=>Z.id===f.id);if(Q)return Q}for(let Q of J)if(Q.filePath===f.path||Q.item.name===f.name||Q.id===f.name)return Q;return}class W1{async list($={}){return await VH($,async(f)=>{let J=AH($),Q=[],Z=[],W=[],j=[],X=[];if(f){for(let Y of f.listRecords("workflow")){let V=Y.item;Q.push({id:Y.id,name:V.name,path:Y.filePath,enabled:V.disabled!==!0,kind:"workflow",source:NJ(Y.filePath,J),description:V.instructions,toggleable:!1})}for(let Y of f.listRecords("rule")){let V=Y.item;Z.push({id:Y.id,name:V.name,path:Y.filePath,enabled:V.disabled!==!0,kind:"rule",source:NJ(Y.filePath,J),description:V.instructions,toggleable:!1})}for(let Y of f.listRecords("skill")){let V=Y.item;W.push({id:Y.id,name:V.name,path:Y.filePath,enabled:V.disabled!==!0,kind:"skill",source:NJ(Y.filePath,J),description:V.description,toggleable:!0})}}if(J)try{for(let Y of await f4({workspacePath:J,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))j.push({id:`${Y.pluginName}:${Y.name}:${Y.path}`,name:Y.name,path:Y.path,enabled:Y.enabled,kind:"tool",source:Y.source,description:Y.description,toggleable:!0})}catch{}let H=O0();if(q$({filePath:H}))try{for(let Y of Q$({filePath:H}))X.push({id:Y.name,name:Y.name,path:H,enabled:Y.disabled!==!0,kind:"mcp",source:NJ(H,J),description:Y.transport.type,toggleable:!0})}catch{}return{workflows:J4(Q.filter((Y)=>TJ(Y.path))),rules:J4(Z.filter((Y)=>TJ(Y.path))),skills:J4(W.filter((Y)=>TJ(Y.path))),tools:J4(j),mcp:J4(X.filter((Y)=>TJ(Y.path)))}})}async toggle($){if($.type==="skills")return await VH($,async(f)=>{let J=PU(f,$),Q=J?.filePath;if(!Q)throw Error(`Unable to resolve skill setting '${$.id??$.name??YH($.path??"")}'.`);let Z=J?.item&&"disabled"in J.item?J.item.disabled!==!0:void 0,W=$.enabled??(Z!==void 0?!Z:void 0);if(W===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??YH($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await dX({filePath:Q,enabled:W}),await f?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:f}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)z6($.name);else aW($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let f=$.name?.trim()||$.id?.trim();if(!f)throw Error("MCP server settings toggle requires a server name.");let J=$.path?.trim()||O0(),Q=$.enabled;if(Q===void 0){let Z=Q$({filePath:J}).find((W)=>W.name===f);if(!Z)throw Error(`Unknown MCP server: ${f}`);Q=Z.disabled===!0}return c1({filePath:J,name:f,disabled:!Q}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function r1(){return new W1}function KH($){return{async list(f){let J=$;if(J.listSettings)return await J.listSettings(f);return await r1().list(f)},async toggle(f){let J=$;if(J.toggleSetting)return await J.toggleSetting(f);return await r1().toggle(f)}}}function GH($){function f(){let J=$.pendingPrompts;if(!J)throw Error("Pending prompt service is not available.");return J}return{list(J){return f().list(J)},update(J){return f().update(J)},delete(J){return f().delete(J)}}}var PH={};q(PH,{splitCoreSessionConfig:()=>Q4});function Q4($){let{hooks:f,logger:J,telemetry:Q,extensionContext:Z,extraTools:W,extensions:j,onTeamEvent:X,onConsecutiveMistakeLimitReached:H,checkpoint:Y,compaction:V,...A}=$,B={};if(f)B.hooks=f;if(J)B.logger=J;if(Q)B.telemetry=Q;if(Z)B.extensionContext=Z;if(W)B.extraTools=W;if(j)B.extensions=j;if(X)B.onTeamEvent=X;if(H)B.onConsecutiveMistakeLimitReached=H;if(Y?.createCheckpoint)B.checkpoint=Y;if(V?.compact)B.compaction=V;let K=Object.keys(B).length>0?B:void 0;return{config:{...A,...Y?{checkpoint:{enabled:Y.enabled}}:{},...V?{compaction:{enabled:V.enabled,strategy:V.strategy,thresholdRatio:V.thresholdRatio,reserveTokens:V.reserveTokens,preserveRecentTokens:V.preserveRecentTokens,maxInputTokens:V.maxInputTokens,summarizer:V.summarizer}}:{}},...K?{localRuntime:K}:{}}}function FH($){let f=$.config;return"providerId"in f?{...$,config:{...f,...FU($.localRuntime)},localRuntime:$.localRuntime}:$}function O7($,f={}){let J=Q4($.config),Q=F0(f.defaultCapabilities,$.capabilities),Z=DU(J.localRuntime,$.localRuntime),W=f.withExtensionContext?.(Z?.extensionContext);if(W)Z={...Z??{},extensionContext:W};return{...$,...J,...Z?{localRuntime:Z}:{},...Q?{capabilities:Q}:{}}}function FU($){if(!$)return{};let{modelCatalogDefaults:f,userInstructionService:J,configExtensions:Q,onTeamRestored:Z,...W}=$;return W}function DU(...$){let f={};for(let J of $)if(J)Object.assign(f,J);return Object.keys(f).length>0?f:void 0}T0();function DH($){let f=$.input.config.telemetry??$.telemetry;if(!f)return;f.capture({event:v.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??K0.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 Z4($){return!!$&&typeof $==="object"&&!Array.isArray($)}function z7($){let f=$?.trim();return f?f:void 0}function RU($,f){let J=$?.trim();if(!J)return f;let Q=Date.parse(J);if(!Number.isFinite(Q))return f;return new Date(Q).toISOString()}function RH($,f){return new Date(new Date($).getTime()+Math.max(0,Math.floor(f))*1000).toISOString()}function UH($,f){return new Date(new Date($).getTime()-Math.max(0,Math.floor(f))*1000).toISOString()}function UU($,f){if(!$)return f;return new Date($).getTime()>=new Date(f).getTime()?$:f}function LU($,f){let J=$.eventId.trim(),Q=$.eventType.trim(),Z=$.source.trim(),W=z7($.subject),j=z7($.dedupeKey)??`${Q}:${Z}:${W??J}`;return{eventId:J,eventType:Q,source:Z,subject:W,occurredAt:RU($.occurredAt,f),workspaceRoot:z7($.workspaceRoot),payload:Z4($.payload)?$.payload:void 0,attributes:Z4($.attributes)?$.attributes:void 0,dedupeKey:j}}function _7($,f){if(!f)return;let J=f.split("."),Q=$;for(let Z of J){if(!Z4(Q))return;Q=Q[Z]}return Q}function OU($,f){if($.attributes&&Object.hasOwn($.attributes,f))return $.attributes[f];if($.payload&&Object.hasOwn($.payload,f))return $.payload[f];let J={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},Q=_7(J,f);if(Q!==void 0)return Q;if($.attributes){let Z=_7($.attributes,f);if(Z!==void 0)return Z}if($.payload)return _7($.payload,f);return}function MJ($,f){if(Array.isArray(f))return f.some((J)=>MJ($,J));if(Array.isArray($))return $.some((J)=>MJ(J,f));if(Z4(f)){if(!Z4($))return!1;return Object.entries(f).every(([J,Q])=>MJ($[J],Q))}return Object.is($,f)}function zU($,f){if(!f||Object.keys(f).length===0)return!0;return Object.entries(f).every(([J,Q])=>MJ(OU($,J),Q))}class y7{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let f=new Date(this.nowFn()).toISOString(),J=LU($,f),Q=this.store.insertEventLog(J,{receivedAtIso:f});if(!Q.created)return this.logger?.debug("cron.event.duplicate",{eventId:Q.record.eventId,eventType:Q.record.eventType,source:Q.record.source}),{event:Q.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:Q.record.dedupeKey}]};try{let Z=this.store.listEventSpecsForType(J.eventType),W=[],j=[],X=[];for(let V of Z){if(!zU(J,V.filters)){W.push({specId:V.specId,externalId:V.externalId,reason:"filter_mismatch",dedupeKey:J.dedupeKey});continue}j.push(V);let A=this.materializeForSpec(V,J,Q.record.receivedAt);if(A.run)X.push(A.run);else W.push({specId:V.specId,externalId:V.externalId,reason:A.reason,dedupeKey:J.dedupeKey})}let H=j.length===0?"unmatched":X.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(Q.record.eventId,{status:H,matchedSpecCount:j.length,queuedRunCount:X.length,suppressedCount:W.filter((V)=>V.reason!=="filter_mismatch").length});let Y=this.store.getEventLog(Q.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:Q.record.eventId,eventType:Q.record.eventType,status:H,matchedSpecCount:j.length,queuedRunCount:X.length}),{event:Y??Q.record,duplicate:!1,matchedSpecs:j,queuedRuns:X,suppressions:W}}catch(Z){if(this.store.updateEventLogProcessing(Q.record.eventId,{status:"failed",error:Z instanceof Error?Z.message:String(Z)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:Q.record.eventId,eventType:Q.record.eventType,error:Z});throw Z}}materializeForSpec($,f,J){let Q=f.dedupeKey??f.eventId,Z=$.debounceSeconds??0;if(Z>0){let H=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:Q});if(H){let Y=UU(H.scheduledFor,RH(J,Z)),V=this.store.updateQueuedEventRunForDebounce({runId:H.runId,triggerEventId:f.eventId,scheduledFor:Y});if(V)return{run:V,reason:"dedupe_window"}}}let W=$.dedupeWindowSeconds??0;if(W>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:Q,sinceIso:UH(J,W)}))return{reason:"dedupe_window"};let j=$.cooldownSeconds??0;if(j>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:UH(J,j)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:f.eventId,scheduledFor:Z>0?RH(J,Z):J}),reason:"dedupe_window"}}}class W4{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},f=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let Q of f)if(this.materializeOneOff(Q))$.oneOffQueued+=1;let J=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Q of J)try{if(this.materializeSchedule(Q))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as wU}from"node:path";import{buildClineSystemPrompt as SU}from"@cline/shared";import{nowIso as LH}from"@cline/shared/db";import{mkdirSync as _U,writeFileSync as yU}from"node:fs";import{join as TU}from"node:path";import{resolveCronReportsDir as NU}from"@cline/shared/storage";function j1($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function i1($,f){if(f===void 0||f===null)return;return`${$}: ${j1(f)}`}function MU($,f,J){let Q=[`runId: ${j1($.runId)}`,`specId: ${j1(f.specId)}`,`externalId: ${j1(f.externalId)}`,`title: ${j1(f.title)}`,`triggerKind: ${j1($.triggerKind)}`,`status: ${j1($.status)}`,`sourcePath: ${j1(f.sourcePath)}`],Z=[i1("sessionId",$.sessionId),i1("startedAt",$.startedAt),i1("completedAt",$.completedAt),i1("triggerEventId",$.triggerEventId),i1("triggerEventType",J?.eventType),i1("triggerEventSource",J?.source),i1("triggerEventSubject",J?.subject)];for(let W of Z)if(W)Q.push(W);return`---
209
+ `);if(J<0)break;let Q=this.buffer.slice(0,J).trim();if(this.buffer=this.buffer.slice(J+1),Q.length>0)f.push(Q)}return f}}class QH{registration;process;nextRequestId=1;pending=new Map;framedParser=new U7;newlineParser=new L7;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"],f;for(let J of $){await this.disconnect().catch(()=>{}),this.spawnProcess(J);try{await this.request("initialize",{protocolVersion:$U,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},JU),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=J;return}catch(Q){f=Q instanceof Error?Q:Error(String(Q))}}throw f??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((f)=>typeof f?.name==="string"&&typeof f.inputSchema==="object"&&f.inputSchema!==null).map((f)=>({name:f.name,description:f.description,inputSchema:f.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let f=this.registration.transport;if(f.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${f.type}`);this.framedParser=new U7,this.newlineParser=new L7,this.stderrBuffer="",this.protocolMode=$;let J=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},Q=oR(f.command,f.args??[],{cwd:f.cwd,env:{...process.env,...f.env??{}},stdio:["pipe","pipe","pipe"],...J});this.process=Q,Q.stdout.on("data",(Z)=>this.handleStdout(Z)),Q.stderr.on("data",(Z)=>{if(this.process!==Q)return;if(this.stderrBuffer+=Z.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),Q.once("error",(Z)=>{if(this.process!==Q)return;this.failAllPending(Error(`MCP process error: ${zJ(Z)}`))}),Q.once("exit",(Z,W)=>{if(this.process!==Q)return;this.connected=!1,this.process=void 0;let j=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${Z??"null"}, signal=${W??"null"}).${j}`))})}handleStdout($){try{let f=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let J of f){let Q=JSON.parse(J);if(typeof Q.id!=="number")continue;let Z=this.pending.get(Q.id);if(!Z)continue;if(this.pending.delete(Q.id),clearTimeout(Z.timeout),Q.error){let W=Q.error.message||`MCP request failed with code ${Q.error.code??"unknown"}`;Z.reject(Error(W));continue}Z.resolve(Q.result)}}catch(f){this.handleProtocolFailure(f)}}handleProtocolFailure($){let f=this.process;if(!f)return;this.connected=!1,this.process=void 0;let J=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${zJ($)}.${J}`)),f.kill()}async request($,f,J=fU){let Q=this.process;if(!Q?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let Z=this.nextRequestId++,W={jsonrpc:"2.0",id:Z,method:$,...f?{params:f}:{}},j=new Promise((X,H)=>{let Y=setTimeout(()=>{this.pending.delete(Z),H(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},J);this.pending.set(Z,{resolve:X,reject:H,timeout:Y})});try{Q.stdin.write(this.protocolMode==="framed"?$H(W):fH(W))}catch(X){let H=this.pending.get(Z);if(H)clearTimeout(H.timeout),this.pending.delete(Z);throw X}return j}notify($,f){let J=this.process;if(!J?.stdin.writable)return;let Q={jsonrpc:"2.0",method:$,...f?{params:f}:{}};J.stdin.write(this.protocolMode==="framed"?$H(Q):fH(Q))}failAllPending($){for(let[f,J]of this.pending)clearTimeout(J.timeout),this.pending.delete(f),J.reject($)}}class ZH{registration;options;client;authContext;constructor($,f){this.registration=$;this.options=f}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 $=LJ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??eX});this.authContext=$;try{let f=new eR({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),J=UJ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await f.connect(J),await $.clearError(),this.client=f}catch(f){let J=f instanceof oX?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):zJ(f);throw await $.markError(J),Error(J)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema&&typeof J.inputSchema==="object"&&!Array.isArray(J.inputSchema)?J.inputSchema:{}}))}catch(f){return await this.handleOperationError(f)}}async callTool($){let f=await this.ensureConnectedClient();try{return await f.callTool({name:$.name,arguments:$.arguments??{}})}catch(J){return await this.handleOperationError(J)}}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 f=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${f} Run authorizeMcpServerOAuth for this server.`;return`${f} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let f=this.authContext??LJ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??eX}),J=$ instanceof oX?this.formatUnauthorizedMessage(f.getLastAuthorizationUrl()):zJ($);throw await f.markError(J),Error(J)}}function of($={}){return(f)=>f.transport.type==="stdio"?new QH(f):new ZH(f,$)}RJ();function x0(){return Date.now()}function QU($){return $.map((f)=>({name:f.name,description:f.description,inputSchema:f.inputSchema}))}class p1{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let f=this.servers.get($.name);if(!f){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:x0()});return}let J=JSON.stringify(f.registration.transport)!==JSON.stringify($.transport);if(f.registration={...$},f.updatedAt=x0(),J)await this.disconnectState(f),f.client=void 0,f.toolCache=void 0,f.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let f=this.requireServer($);await this.disconnectState(f),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let f=this.requireServer($);await this.connectState(f)})}async disconnectServer($){await this.runExclusive($,async()=>{let f=this.requireServer($);await this.disconnectState(f)})}async setServerDisabled($,f){await this.runExclusive($,async()=>{let J=this.requireServer($);if(J.registration={...J.registration,disabled:f},J.updatedAt=x0(),f)await this.disconnectState(J)})}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(($,f)=>$.name.localeCompare(f.name))}async listTools($){let f=this.requireServer($),J=f.toolCacheUpdatedAt??0;if(f.toolCache&&x0()-J<=this.toolsCacheTtlMs)return f.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let f=this.requireServer($),Q=await(await this.ensureConnectedClient(f)).listTools(),Z=QU(Q);return f.toolCache=Z,f.toolCacheUpdatedAt=x0(),f.updatedAt=x0(),Z})}async callTool($){return this.runExclusive($.serverName,async()=>{let f=this.requireServer($.serverName),J=await this.ensureConnectedClient(f);return f.updatedAt=x0(),J.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let f of $)await this.unregisterServer(f)}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=x0();try{let f=$.client??await this.clientFactory($.registration);await f.connect(),$.client=f,$.status="connected",$.lastError=void 0,$.updatedAt=x0()}catch(f){throw $.status="disconnected",$.lastError=f instanceof Error?f.message:String(f),$.updatedAt=x0(),f}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=x0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=x0()}}requireServer($){let f=this.servers.get($);if(!f)throw Error(`Unknown MCP server: ${$}`);return f}async runExclusive($,f){let J=this.operationLocks.get($)??Promise.resolve(),Q,Z=new Promise((j)=>{Q=j}),W=J.catch(()=>{return}).then(()=>Z);this.operationLocks.set($,W),await J.catch(()=>{return});try{return await f()}finally{if(Q?.(),this.operationLocks.get($)===W)this.operationLocks.delete($)}}}import{createHash as ZU}from"node:crypto";var WH=128,WU=/[^a-zA-Z0-9_-]+/g,jH=8,jU=1,XU="mcp_tool";function HU($){return ZU("sha1").update($).digest("hex").slice(0,jH)}function YU($){return $.replace(WU,"_")}var _J=({serverName:$,toolName:f})=>{let J=`${$}__${f}`,Q=YU(J);if(Q===J&&J.length<=WH)return J;let Z=HU(J),W=WH-jU-jH;return`${Q.slice(0,W)||XU}_${Z}`};function $4($){return{[($.nameTransform??_J)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function yJ($){let f={};for(let J of $.toolNames)Object.assign(f,$4({serverName:$.serverName,toolName:J,nameTransform:$.nameTransform}));return f}import{createTool as VU}from"@cline/shared";function AU($,f){let J=f.description?.trim();if(J)return J;return`Execute MCP tool "${f.name}" from server "${$}".`}async function ef($){let f=await $.provider.listTools($.serverName),J=$.nameTransform??_J;return f.map((Q)=>{let Z=J({serverName:$.serverName,toolName:Q.name});return VU({name:Z,description:AU($.serverName,Q),inputSchema:Q.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(W,j)=>$.provider.callTool({serverName:$.serverName,toolName:Q.name,arguments:W&&typeof W==="object"&&!Array.isArray(W)?W:void 0,context:j})})})}N$();var HH={};q(HH,{listPluginTools:()=>f4});N$();function BU($,f){if(!$.setup)return[];let J=[],Q={registerTool:(Z)=>J.push(Z),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{}};return $.setup(Q,{workspaceInfo:f}),J}async function f4($){let f=h1({workspacePath:$.workspacePath,cwd:$.cwd}),J=n0($.disabledToolNames),Q=[];for(let Z of f){let W=await T$([Z],{cwd:$.cwd,providerId:$.providerId,modelId:$.modelId});for(let j of W.plugins)for(let X of BU(j,{rootPath:$.workspacePath}))Q.push({name:X.name,pluginName:j.name,path:Z,source:Z.startsWith($.workspacePath)?"workspace-plugin":"global-plugin",enabled:!J.has(X.name),description:X.description?.trim()||void 0})}return Q.sort((Z,W)=>{let j=Z.name.localeCompare(W.name);if(j!==0)return j;return Z.path.localeCompare(W.path)})}function TJ($,f){if(!f)return"global";let J=GU(f,$);return!J.startsWith("..")&&!KU(J)?"workspace":"global"}function J4($){return[...$].sort((f,J)=>{let Q=(Z)=>{switch(Z){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(f.source!==J.source)return Q(f.source)-Q(J.source);return f.name.localeCompare(J.name)})}function AH($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}async function VH($,f){if($.userInstructionService)return await f($.userInstructionService);let J=AH($);if(!J)return await f(void 0);let Q=Z1({skills:{workspacePath:J},rules:{workspacePath:J},workflows:{workspacePath:J}});try{return await Q.start(),await f(Q)}finally{Q.stop()}}function PU($,f){if(!$)return;let J=$.listRecords("skill");if(f.id){let Q=J.find((Z)=>Z.id===f.id);if(Q)return Q}for(let Q of J)if(Q.filePath===f.path||Q.item.name===f.name||Q.id===f.name)return Q;return}class W1{async list($={}){return await VH($,async(f)=>{let J=AH($),Q=[],Z=[],W=[],j=[],X=[];if(f){for(let Y of f.listRecords("workflow")){let V=Y.item;Q.push({id:Y.id,name:V.name,path:Y.filePath,enabled:V.disabled!==!0,kind:"workflow",source:TJ(Y.filePath,J),description:V.instructions,toggleable:!1})}for(let Y of f.listRecords("rule")){let V=Y.item;Z.push({id:Y.id,name:V.name,path:Y.filePath,enabled:V.disabled!==!0,kind:"rule",source:TJ(Y.filePath,J),description:V.instructions,toggleable:!1})}for(let Y of f.listRecords("skill")){let V=Y.item;W.push({id:Y.id,name:V.name,path:Y.filePath,enabled:V.disabled!==!0,kind:"skill",source:TJ(Y.filePath,J),description:V.description,toggleable:!0})}}if(J)try{for(let Y of await f4({workspacePath:J,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))j.push({id:`${Y.pluginName}:${Y.name}:${Y.path}`,name:Y.name,path:Y.path,enabled:Y.enabled,kind:"tool",source:Y.source,description:Y.description,toggleable:!0})}catch{}let H=O0();if(q$({filePath:H}))try{for(let Y of Q$({filePath:H}))X.push({id:Y.name,name:Y.name,path:H,enabled:Y.disabled!==!0,kind:"mcp",source:TJ(H,J),description:Y.transport.type,toggleable:!0})}catch{}return{workflows:J4(Q.filter((Y)=>NJ(Y.path))),rules:J4(Z.filter((Y)=>NJ(Y.path))),skills:J4(W.filter((Y)=>NJ(Y.path))),tools:J4(j),mcp:J4(X.filter((Y)=>NJ(Y.path)))}})}async toggle($){if($.type==="skills")return await VH($,async(f)=>{let J=PU(f,$),Q=J?.filePath;if(!Q)throw Error(`Unable to resolve skill setting '${$.id??$.name??YH($.path??"")}'.`);let Z=J?.item&&"disabled"in J.item?J.item.disabled!==!0:void 0,W=$.enabled??(Z!==void 0?!Z:void 0);if(W===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??YH($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await dX({filePath:Q,enabled:W}),await f?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:f}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)z6($.name);else aW($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let f=$.name?.trim()||$.id?.trim();if(!f)throw Error("MCP server settings toggle requires a server name.");let J=$.path?.trim()||O0(),Q=$.enabled;if(Q===void 0){let Z=Q$({filePath:J}).find((W)=>W.name===f);if(!Z)throw Error(`Unknown MCP server: ${f}`);Q=Z.disabled===!0}return c1({filePath:J,name:f,disabled:!Q}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function r1(){return new W1}function KH($){return{async list(f){let J=$;if(J.listSettings)return await J.listSettings(f);return await r1().list(f)},async toggle(f){let J=$;if(J.toggleSetting)return await J.toggleSetting(f);return await r1().toggle(f)}}}function GH($){function f(){let J=$.pendingPrompts;if(!J)throw Error("Pending prompt service is not available.");return J}return{list(J){return f().list(J)},update(J){return f().update(J)},delete(J){return f().delete(J)}}}var PH={};q(PH,{splitCoreSessionConfig:()=>Q4});function Q4($){let{hooks:f,logger:J,telemetry:Q,extensionContext:Z,extraTools:W,extensions:j,onTeamEvent:X,onConsecutiveMistakeLimitReached:H,checkpoint:Y,compaction:V,...A}=$,B={};if(f)B.hooks=f;if(J)B.logger=J;if(Q)B.telemetry=Q;if(Z)B.extensionContext=Z;if(W)B.extraTools=W;if(j)B.extensions=j;if(X)B.onTeamEvent=X;if(H)B.onConsecutiveMistakeLimitReached=H;if(Y?.createCheckpoint)B.checkpoint=Y;if(V?.compact)B.compaction=V;let K=Object.keys(B).length>0?B:void 0;return{config:{...A,...Y?{checkpoint:{enabled:Y.enabled}}:{},...V?{compaction:{enabled:V.enabled,strategy:V.strategy,thresholdRatio:V.thresholdRatio,reserveTokens:V.reserveTokens,preserveRecentTokens:V.preserveRecentTokens,maxInputTokens:V.maxInputTokens,summarizer:V.summarizer}}:{}},...K?{localRuntime:K}:{}}}function FH($){let f=$.config;return"providerId"in f?{...$,config:{...f,...FU($.localRuntime)},localRuntime:$.localRuntime}:$}function O7($,f={}){let J=Q4($.config),Q=F0(f.defaultCapabilities,$.capabilities),Z=DU(J.localRuntime,$.localRuntime),W=f.withExtensionContext?.(Z?.extensionContext);if(W)Z={...Z??{},extensionContext:W};return{...$,...J,...Z?{localRuntime:Z}:{},...Q?{capabilities:Q}:{}}}function FU($){if(!$)return{};let{modelCatalogDefaults:f,userInstructionService:J,configExtensions:Q,onTeamRestored:Z,...W}=$;return W}function DU(...$){let f={};for(let J of $)if(J)Object.assign(f,J);return Object.keys(f).length>0?f:void 0}N0();function DH($){let f=$.input.config.telemetry??$.telemetry;if(!f)return;f.capture({event:v.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??K0.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 Z4($){return!!$&&typeof $==="object"&&!Array.isArray($)}function z7($){let f=$?.trim();return f?f:void 0}function RU($,f){let J=$?.trim();if(!J)return f;let Q=Date.parse(J);if(!Number.isFinite(Q))return f;return new Date(Q).toISOString()}function RH($,f){return new Date(new Date($).getTime()+Math.max(0,Math.floor(f))*1000).toISOString()}function UH($,f){return new Date(new Date($).getTime()-Math.max(0,Math.floor(f))*1000).toISOString()}function UU($,f){if(!$)return f;return new Date($).getTime()>=new Date(f).getTime()?$:f}function LU($,f){let J=$.eventId.trim(),Q=$.eventType.trim(),Z=$.source.trim(),W=z7($.subject),j=z7($.dedupeKey)??`${Q}:${Z}:${W??J}`;return{eventId:J,eventType:Q,source:Z,subject:W,occurredAt:RU($.occurredAt,f),workspaceRoot:z7($.workspaceRoot),payload:Z4($.payload)?$.payload:void 0,attributes:Z4($.attributes)?$.attributes:void 0,dedupeKey:j}}function _7($,f){if(!f)return;let J=f.split("."),Q=$;for(let Z of J){if(!Z4(Q))return;Q=Q[Z]}return Q}function OU($,f){if($.attributes&&Object.hasOwn($.attributes,f))return $.attributes[f];if($.payload&&Object.hasOwn($.payload,f))return $.payload[f];let J={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},Q=_7(J,f);if(Q!==void 0)return Q;if($.attributes){let Z=_7($.attributes,f);if(Z!==void 0)return Z}if($.payload)return _7($.payload,f);return}function MJ($,f){if(Array.isArray(f))return f.some((J)=>MJ($,J));if(Array.isArray($))return $.some((J)=>MJ(J,f));if(Z4(f)){if(!Z4($))return!1;return Object.entries(f).every(([J,Q])=>MJ($[J],Q))}return Object.is($,f)}function zU($,f){if(!f||Object.keys(f).length===0)return!0;return Object.entries(f).every(([J,Q])=>MJ(OU($,J),Q))}class y7{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let f=new Date(this.nowFn()).toISOString(),J=LU($,f),Q=this.store.insertEventLog(J,{receivedAtIso:f});if(!Q.created)return this.logger?.debug("cron.event.duplicate",{eventId:Q.record.eventId,eventType:Q.record.eventType,source:Q.record.source}),{event:Q.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:Q.record.dedupeKey}]};try{let Z=this.store.listEventSpecsForType(J.eventType),W=[],j=[],X=[];for(let V of Z){if(!zU(J,V.filters)){W.push({specId:V.specId,externalId:V.externalId,reason:"filter_mismatch",dedupeKey:J.dedupeKey});continue}j.push(V);let A=this.materializeForSpec(V,J,Q.record.receivedAt);if(A.run)X.push(A.run);else W.push({specId:V.specId,externalId:V.externalId,reason:A.reason,dedupeKey:J.dedupeKey})}let H=j.length===0?"unmatched":X.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(Q.record.eventId,{status:H,matchedSpecCount:j.length,queuedRunCount:X.length,suppressedCount:W.filter((V)=>V.reason!=="filter_mismatch").length});let Y=this.store.getEventLog(Q.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:Q.record.eventId,eventType:Q.record.eventType,status:H,matchedSpecCount:j.length,queuedRunCount:X.length}),{event:Y??Q.record,duplicate:!1,matchedSpecs:j,queuedRuns:X,suppressions:W}}catch(Z){if(this.store.updateEventLogProcessing(Q.record.eventId,{status:"failed",error:Z instanceof Error?Z.message:String(Z)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:Q.record.eventId,eventType:Q.record.eventType,error:Z});throw Z}}materializeForSpec($,f,J){let Q=f.dedupeKey??f.eventId,Z=$.debounceSeconds??0;if(Z>0){let H=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:Q});if(H){let Y=UU(H.scheduledFor,RH(J,Z)),V=this.store.updateQueuedEventRunForDebounce({runId:H.runId,triggerEventId:f.eventId,scheduledFor:Y});if(V)return{run:V,reason:"dedupe_window"}}}let W=$.dedupeWindowSeconds??0;if(W>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:Q,sinceIso:UH(J,W)}))return{reason:"dedupe_window"};let j=$.cooldownSeconds??0;if(j>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:UH(J,j)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:f.eventId,scheduledFor:Z>0?RH(J,Z):J}),reason:"dedupe_window"}}}class W4{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},f=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let Q of f)if(this.materializeOneOff(Q))$.oneOffQueued+=1;let J=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Q of J)try{if(this.materializeSchedule(Q))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as wU}from"node:path";import{buildClineSystemPrompt as SU}from"@cline/shared";import{nowIso as LH}from"@cline/shared/db";import{mkdirSync as _U,writeFileSync as yU}from"node:fs";import{join as NU}from"node:path";import{resolveCronReportsDir as TU}from"@cline/shared/storage";function j1($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function i1($,f){if(f===void 0||f===null)return;return`${$}: ${j1(f)}`}function MU($,f,J){let Q=[`runId: ${j1($.runId)}`,`specId: ${j1(f.specId)}`,`externalId: ${j1(f.externalId)}`,`title: ${j1(f.title)}`,`triggerKind: ${j1($.triggerKind)}`,`status: ${j1($.status)}`,`sourcePath: ${j1(f.sourcePath)}`],Z=[i1("sessionId",$.sessionId),i1("startedAt",$.startedAt),i1("completedAt",$.completedAt),i1("triggerEventId",$.triggerEventId),i1("triggerEventType",J?.eventType),i1("triggerEventSource",J?.source),i1("triggerEventSubject",J?.subject)];for(let W of Z)if(W)Q.push(W);return`---
210
210
  ${Q.join(`
211
211
  `)}
212
212
  ---
@@ -229,12 +229,12 @@ ${Q.join(`
229
229
  ${J.join(`
230
230
  `)}
231
231
  `)}return f.join(`
232
- `)}function T7($){let f=NU($.specs);_U(f,{recursive:!0});let J=TU(f,`${$.run.runId}.md`),Q=`${MU($.run,$.spec,$.data.triggerEvent)}
233
- ${qU($.data)}`;return yU(J,Q,"utf8"),J}class N7{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,f,J){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let Q=Math.max(1,Math.floor(J)),Z=this.activeExecutions.get($)??new Set;if(Z.size>=Q)return!1;return Z.add(f),this.activeExecutions.set($,Z),!0}release($,f){let J=this.activeExecutions.get($);if(!J)return;if(J.delete(f),J.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let f of this.activeExecutions.values())$+=f.size;return $}}var CU=15000,EU=90,OH=["rules","skills","plugins"];function hU($,f){return new Set($.extensions??OH).has(f)}function bU($,f){if($.tools===void 0)return{"*":{autoApprove:!0}};let J={"*":{enabled:!1,autoApprove:!0}};for(let Q of $.tools)J[Q]={enabled:!0,autoApprove:!0};if(f==="yolo")J[J0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return J}function kU($){let f=$?.trim();if(!f)return;return["# Notes Directory",`Use ${f} 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(`
234
- `)}class M7 extends Error{constructor($){super($);this.name="TimeoutError"}}async function IU($,f){if(f<=0)return $;let J,Q=new Promise((Z,W)=>{J=setTimeout(()=>{W(new M7("cron run timed out"))},f)});try{return await Promise.race([$,Q])}finally{if(J)clearTimeout(J)}}class j4{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 N7($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??EU)*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??CU);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 f=[...this.activeRuns.entries()];await Promise.all(f.map(async([J,Q])=>{if(Q.sessionId)try{await this.options.runtimeHandlers.abortSession(Q.sessionId)}catch{}try{this.store.requeueRun({runId:J,claimToken:Q.claimToken,error:"runner stopped before completion"})}catch{}}))}async dispose(){if(this.disposed)return;this.disposed=!0,await this.stop()}async tick(){if(this.ticking)return;this.ticking=!0;try{this.materializer.materializeAll();let $=this.store.claimDueRuns({nowIso:LH(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((f)=>this.executeClaim(f)))}catch($){let f=this.options.logger;if(f)if(f.error)f.error("cron.runner.tick.failed",{error:$});else f.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,f])=>{let J=this.store.getRun($);return J?[{...J,...f}]:[]})}async executeClaim($){let f=$.run,J=this.store.getSpec(f.specId);if(!J){this.store.completeRun(f.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!J.enabled||J.removed){this.store.completeRun(f.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let Q=J.maxParallel&&J.maxParallel>0?J.maxParallel:1;if(!this.limiter.acquire(J.specId,f.runId,Q)){this.store.requeueRun({runId:f.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(J.specId,f.runId),this.store.requeueRun({runId:f.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(f.runId,{claimToken:$.claimToken});let W=f.triggerEventId?this.store.getEventLog(f.triggerEventId):void 0,j,X,H=Date.now(),Y;if(J.timeoutSeconds&&J.timeoutSeconds>0)Y=H+J.timeoutSeconds*1000;try{X=this.startClaimLeaseHeartbeat($);let V=await this.buildStartRequest(J);if(j=(await this.options.runtimeHandlers.startSession(V)).sessionId.trim(),!j)throw Error("runtime returned empty sessionId");this.activeRuns.set(f.runId,{claimToken:$.claimToken,sessionId:j}),this.store.attachSessionIdToRun(f.runId,j);let B={config:V,prompt:this.buildPrompt(J,W)},K=this.options.runtimeHandlers.sendSession(j,B),G=Y?Math.max(1,Y-Date.now()):0,F=(await IU(K,G)).result,P=Date.now(),D=T7({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...f,sessionId:j,status:"done"},spec:J,data:{finalText:F.text,usage:F.usage,toolCalls:F.toolCalls,durationMs:P-H,triggerEvent:W}});this.store.completeRun(f.runId,{status:"done",sessionId:j,reportPath:D,claimToken:$.claimToken}),this.store.updateSpecLastRunAt(J.specId,LH())}catch(V){let A=V instanceof M7;if(j&&A)try{await this.options.runtimeHandlers.abortSession(j)}catch{}let B=V instanceof Error?V.message:String(V),K=Date.now(),G=T7({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...f,sessionId:j,status:"failed"},spec:J,data:{error:B,durationMs:K-H,triggerEvent:W}});this.store.completeRun(f.runId,{status:"failed",sessionId:j,reportPath:G,error:B,claimToken:$.claimToken})}finally{if(X?.(),j)try{await this.options.runtimeHandlers.stopSession(j)}catch{}this.activeRuns.delete(f.runId),this.limiter.release(J.specId,f.runId)}}buildPrompt($,f){let J=$.prompt??"";if(!f)return J;let Q={eventId:f.eventId,eventType:f.eventType,source:f.source,subject:f.subject,occurredAt:f.occurredAt,workspaceRoot:f.workspaceRoot,dedupeKey:f.dedupeKey,attributes:f.attributes,payload:f.payload};return`${J}
232
+ `)}function N7($){let f=TU($.specs);_U(f,{recursive:!0});let J=NU(f,`${$.run.runId}.md`),Q=`${MU($.run,$.spec,$.data.triggerEvent)}
233
+ ${qU($.data)}`;return yU(J,Q,"utf8"),J}class T7{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,f,J){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let Q=Math.max(1,Math.floor(J)),Z=this.activeExecutions.get($)??new Set;if(Z.size>=Q)return!1;return Z.add(f),this.activeExecutions.set($,Z),!0}release($,f){let J=this.activeExecutions.get($);if(!J)return;if(J.delete(f),J.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let f of this.activeExecutions.values())$+=f.size;return $}}var CU=15000,EU=90,OH=["rules","skills","plugins"];function hU($,f){return new Set($.extensions??OH).has(f)}function bU($,f){if($.tools===void 0)return{"*":{autoApprove:!0}};let J={"*":{enabled:!1,autoApprove:!0}};for(let Q of $.tools)J[Q]={enabled:!0,autoApprove:!0};if(f==="yolo")J[J0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return J}function kU($){let f=$?.trim();if(!f)return;return["# Notes Directory",`Use ${f} 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(`
234
+ `)}class M7 extends Error{constructor($){super($);this.name="TimeoutError"}}async function IU($,f){if(f<=0)return $;let J,Q=new Promise((Z,W)=>{J=setTimeout(()=>{W(new M7("cron run timed out"))},f)});try{return await Promise.race([$,Q])}finally{if(J)clearTimeout(J)}}class j4{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 T7($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??EU)*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??CU);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 f=[...this.activeRuns.entries()];await Promise.all(f.map(async([J,Q])=>{if(Q.sessionId)try{await this.options.runtimeHandlers.abortSession(Q.sessionId)}catch{}try{this.store.requeueRun({runId:J,claimToken:Q.claimToken,error:"runner stopped before completion"})}catch{}}))}async dispose(){if(this.disposed)return;this.disposed=!0,await this.stop()}async tick(){if(this.ticking)return;this.ticking=!0;try{this.materializer.materializeAll();let $=this.store.claimDueRuns({nowIso:LH(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((f)=>this.executeClaim(f)))}catch($){let f=this.options.logger;if(f)if(f.error)f.error("cron.runner.tick.failed",{error:$});else f.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,f])=>{let J=this.store.getRun($);return J?[{...J,...f}]:[]})}async executeClaim($){let f=$.run,J=this.store.getSpec(f.specId);if(!J){this.store.completeRun(f.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!J.enabled||J.removed){this.store.completeRun(f.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let Q=J.maxParallel&&J.maxParallel>0?J.maxParallel:1;if(!this.limiter.acquire(J.specId,f.runId,Q)){this.store.requeueRun({runId:f.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(J.specId,f.runId),this.store.requeueRun({runId:f.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(f.runId,{claimToken:$.claimToken});let W=f.triggerEventId?this.store.getEventLog(f.triggerEventId):void 0,j,X,H=Date.now(),Y;if(J.timeoutSeconds&&J.timeoutSeconds>0)Y=H+J.timeoutSeconds*1000;try{X=this.startClaimLeaseHeartbeat($);let V=await this.buildStartRequest(J);if(j=(await this.options.runtimeHandlers.startSession(V)).sessionId.trim(),!j)throw Error("runtime returned empty sessionId");this.activeRuns.set(f.runId,{claimToken:$.claimToken,sessionId:j}),this.store.attachSessionIdToRun(f.runId,j);let B={config:V,prompt:this.buildPrompt(J,W)},K=this.options.runtimeHandlers.sendSession(j,B),G=Y?Math.max(1,Y-Date.now()):0,F=(await IU(K,G)).result,P=Date.now(),D=N7({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...f,sessionId:j,status:"done"},spec:J,data:{finalText:F.text,usage:F.usage,toolCalls:F.toolCalls,durationMs:P-H,triggerEvent:W}});this.store.completeRun(f.runId,{status:"done",sessionId:j,reportPath:D,claimToken:$.claimToken}),this.store.updateSpecLastRunAt(J.specId,LH())}catch(V){let A=V instanceof M7;if(j&&A)try{await this.options.runtimeHandlers.abortSession(j)}catch{}let B=V instanceof Error?V.message:String(V),K=Date.now(),G=N7({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...f,sessionId:j,status:"failed"},spec:J,data:{error:B,durationMs:K-H,triggerEvent:W}});this.store.completeRun(f.runId,{status:"failed",sessionId:j,reportPath:G,error:B,claimToken:$.claimToken})}finally{if(X?.(),j)try{await this.options.runtimeHandlers.stopSession(j)}catch{}this.activeRuns.delete(f.runId),this.limiter.release(J.specId,f.runId)}}buildPrompt($,f){let J=$.prompt??"";if(!f)return J;let Q={eventId:f.eventId,eventType:f.eventType,source:f.source,subject:f.subject,occurredAt:f.occurredAt,workspaceRoot:f.workspaceRoot,dedupeKey:f.dedupeKey,attributes:f.attributes,payload:f.payload};return`${J}
235
235
 
236
236
  Trigger event:
237
- ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let f=Math.max(1000,Math.floor(this.claimLeaseMs/2)),J=setInterval(()=>{let Q=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,Q))clearInterval(J)},f);return()=>clearInterval(J)}async buildSystemPrompt($,f,J,Q){let Z=kU($.notesDirectory),W=tf(void 0,Z),j=await w8(f),X=SU({ide:"Cline Cron",workspaceRoot:f,workspaceName:wU(f),metadata:j,rules:$.systemPrompt?void 0:W,mode:J,providerId:Q,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?tf(X,W)??X:X}async buildStartRequest($){let f=($.workspaceRoot??"").trim(),J=($.providerId??"").trim(),Q=($.modelId??"").trim(),Z=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,W=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():f;if(!f)throw Error("cron spec requires workspaceRoot");let j=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:f,cwd:W,provider:J,model:Q,mode:j,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,f,j,J),maxIterations:$.maxIterations,enableTools:Z?.enableTools??!0,enableSpawn:Z?.enableSpawn??!0,enableTeams:Z?.enableTeams??!0,autoApproveTools:Z?.autoApproveTools??!0,toolPolicies:bU($,j),configExtensions:OH.filter((X)=>hU($,X))}}}import{existsSync as WL,readdirSync as jL,readFileSync as XL,statSync as HL}from"node:fs";import{relative as YL}from"node:path";import{resolveCronSpecsDir as VL}from"@cline/shared/storage";function X4($,f,J,Q){let Z=new Set;function W(j){let X=j.toLowerCase();if(Q){let Y=Q.indexOf(X);if(Y!==-1)return Y+f}let H=Number(j);if(!Number.isInteger(H)||H<f||H>J)throw Error(`Invalid cron value "${j}" for range [${f}-${J}]`);return H}for(let j of $.split(",")){if(j==="*"){for(let Y=f;Y<=J;Y+=1)Z.add(Y);continue}let X=j.indexOf("/");if(X!==-1){let Y=j.slice(0,X),V=Number(j.slice(X+1));if(!Number.isInteger(V)||V<1)throw Error(`Invalid step "${j.slice(X+1)}"`);let A=f,B=J;if(Y!=="*"){let K=Y.indexOf("-");if(K!==-1)A=W(Y.slice(0,K)),B=W(Y.slice(K+1));else A=W(Y)}if(A>B)throw Error(`Invalid cron range "${Y}"`);for(let K=A;K<=B;K+=V)Z.add(K);continue}let H=j.indexOf("-");if(H!==-1){let Y=W(j.slice(0,H)),V=W(j.slice(H+1));if(Y>V)throw Error(`Invalid cron range "${j}"`);for(let A=Y;A<=V;A+=1)Z.add(A);continue}Z.add(W(j))}return[...Z].sort((j,X)=>j-X)}var xU=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],_H=["sun","mon","tue","wed","thu","fri","sat"];function H4($,f,J){let Q=$[f];if(typeof Q!=="string")throw Error(`Invalid cron pattern "${J}": missing field ${f+1}`);return Q}function q7($,f){let J=$[0];if(typeof J!=="number")throw Error(`Invalid cron pattern: no values parsed for ${f}`);return J}function w7($){let f=$.trim().split(/\s+/);if(f.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${f.length}`);return{minutes:X4(H4(f,0,$),0,59),hours:X4(H4(f,1,$),0,23),daysOfMonth:X4(H4(f,2,$),1,31),months:X4(H4(f,3,$),1,12,xU),daysOfWeek:X4(H4(f,4,$),0,6,_H)}}function S7($){w7($)}function yH($,f,J=Date.now()){n1($,J,f)}var zH=new Map,gU=new Map(_H.map(($,f)=>[$,f]));function TH($){let f=$?.trim();return f?f:void 0}function NH($){let f=zH.get($);if(f)return f;let J=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 zH.set($,J),J}function mU($){let f=TH($);if(!f)return;NH(f).format(new Date)}function vU($,f){let J=NH(f).formatToParts(new Date($)),Q=new Map(J.map((j)=>[j.type,j.value])),Z=Q.get("weekday")?.toLowerCase().slice(0,3)??"",W=gU.get(Z);if(W===void 0)throw Error(`Unable to resolve weekday for timezone "${f}"`);return{month:Number(Q.get("month")),dayOfMonth:Number(Q.get("day")),dayOfWeek:W,hour:Number(Q.get("hour")),minute:Number(Q.get("minute"))}}function cU($){let f=new Date($);return{month:f.getMonth()+1,dayOfMonth:f.getDate(),dayOfWeek:f.getDay(),hour:f.getHours(),minute:f.getMinutes()}}function uU($,f){return $.months.includes(f.month)&&$.daysOfMonth.includes(f.dayOfMonth)&&$.daysOfWeek.includes(f.dayOfWeek)&&$.hours.includes(f.hour)&&$.minutes.includes(f.minute)}function dU($,f,J){let Q=w7($),Z=new Date(f);Z.setSeconds(0,0);let W=Z.getTime()+60000,j=new Date(f);j.setFullYear(j.getFullYear()+4);let X=j.getTime();while(W<=X){if(uU(Q,vU(W,J)))return W;W+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${J}"`)}function n1($,f,J){let Q=TH(J);if(Q)return mU(Q),dU($,f,Q);let Z=w7($),W=new Date(f);W.setSeconds(0,0),W=new Date(W.getTime()+60000);let j=new Date(f);j.setFullYear(j.getFullYear()+4);while(W<=j){let{month:X,dayOfMonth:H,dayOfWeek:Y,hour:V,minute:A}=cU(W.getTime());if(!Z.months.includes(X)){let B=Z.months.find((G)=>G>X)??q7(Z.months,"months"),K=B<=X?1:0;W=new Date(W.getFullYear()+K,B-1,1,0,0,0,0);continue}if(!Z.daysOfMonth.includes(H)||!Z.daysOfWeek.includes(Y)){W=new Date(W.getFullYear(),W.getMonth(),H+1,0,0,0,0);continue}if(!Z.hours.includes(V)){let B=Z.hours.find((G)=>G>V)??q7(Z.hours,"hours"),K=B<=V?1:0;W=new Date(W.getFullYear(),W.getMonth(),W.getDate()+K,B,0,0,0);continue}if(!Z.minutes.includes(A)){let B=Z.minutes.find((G)=>G>A)??q7(Z.minutes,"minutes"),K=B<=A?1:0;W=new Date(W.getFullYear(),W.getMonth(),W.getDate(),W.getHours()+K,B,0,0);continue}return W.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{createHash as lU}from"node:crypto";import pU from"yaml";function rU($){let f=$.replace(/\\/g,"/");if(f.startsWith("events/")&&f.endsWith(".event.md"))return"event";if(f.endsWith(".cron.md"))return"schedule";return"one_off"}function iU($){let f=$.replace(/\r\n/g,`
237
+ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let f=Math.max(1000,Math.floor(this.claimLeaseMs/2)),J=setInterval(()=>{let Q=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,Q))clearInterval(J)},f);return()=>clearInterval(J)}async buildSystemPrompt($,f,J,Q){let Z=kU($.notesDirectory),W=tf(void 0,Z),j=await w8(f),X=SU({ide:"Cline Cron",workspaceRoot:f,workspaceName:wU(f),metadata:j,rules:$.systemPrompt?void 0:W,mode:J,providerId:Q,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?tf(X,W)??X:X}async buildStartRequest($){let f=($.workspaceRoot??"").trim(),J=($.providerId??"").trim(),Q=($.modelId??"").trim(),Z=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,W=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():f;if(!f)throw Error("cron spec requires workspaceRoot");let j=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:f,cwd:W,provider:J,model:Q,mode:j,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,f,j,J),maxIterations:$.maxIterations,enableTools:Z?.enableTools??!0,enableSpawn:Z?.enableSpawn??!0,enableTeams:Z?.enableTeams??!0,autoApproveTools:Z?.autoApproveTools??!0,toolPolicies:bU($,j),configExtensions:OH.filter((X)=>hU($,X))}}}import{existsSync as WL,readdirSync as jL,readFileSync as XL,statSync as HL}from"node:fs";import{relative as YL}from"node:path";import{resolveCronSpecsDir as VL}from"@cline/shared/storage";function X4($,f,J,Q){let Z=new Set;function W(j){let X=j.toLowerCase();if(Q){let Y=Q.indexOf(X);if(Y!==-1)return Y+f}let H=Number(j);if(!Number.isInteger(H)||H<f||H>J)throw Error(`Invalid cron value "${j}" for range [${f}-${J}]`);return H}for(let j of $.split(",")){if(j==="*"){for(let Y=f;Y<=J;Y+=1)Z.add(Y);continue}let X=j.indexOf("/");if(X!==-1){let Y=j.slice(0,X),V=Number(j.slice(X+1));if(!Number.isInteger(V)||V<1)throw Error(`Invalid step "${j.slice(X+1)}"`);let A=f,B=J;if(Y!=="*"){let K=Y.indexOf("-");if(K!==-1)A=W(Y.slice(0,K)),B=W(Y.slice(K+1));else A=W(Y)}if(A>B)throw Error(`Invalid cron range "${Y}"`);for(let K=A;K<=B;K+=V)Z.add(K);continue}let H=j.indexOf("-");if(H!==-1){let Y=W(j.slice(0,H)),V=W(j.slice(H+1));if(Y>V)throw Error(`Invalid cron range "${j}"`);for(let A=Y;A<=V;A+=1)Z.add(A);continue}Z.add(W(j))}return[...Z].sort((j,X)=>j-X)}var xU=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],_H=["sun","mon","tue","wed","thu","fri","sat"];function H4($,f,J){let Q=$[f];if(typeof Q!=="string")throw Error(`Invalid cron pattern "${J}": missing field ${f+1}`);return Q}function q7($,f){let J=$[0];if(typeof J!=="number")throw Error(`Invalid cron pattern: no values parsed for ${f}`);return J}function w7($){let f=$.trim().split(/\s+/);if(f.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${f.length}`);return{minutes:X4(H4(f,0,$),0,59),hours:X4(H4(f,1,$),0,23),daysOfMonth:X4(H4(f,2,$),1,31),months:X4(H4(f,3,$),1,12,xU),daysOfWeek:X4(H4(f,4,$),0,6,_H)}}function S7($){w7($)}function yH($,f,J=Date.now()){n1($,J,f)}var zH=new Map,gU=new Map(_H.map(($,f)=>[$,f]));function NH($){let f=$?.trim();return f?f:void 0}function TH($){let f=zH.get($);if(f)return f;let J=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 zH.set($,J),J}function mU($){let f=NH($);if(!f)return;TH(f).format(new Date)}function vU($,f){let J=TH(f).formatToParts(new Date($)),Q=new Map(J.map((j)=>[j.type,j.value])),Z=Q.get("weekday")?.toLowerCase().slice(0,3)??"",W=gU.get(Z);if(W===void 0)throw Error(`Unable to resolve weekday for timezone "${f}"`);return{month:Number(Q.get("month")),dayOfMonth:Number(Q.get("day")),dayOfWeek:W,hour:Number(Q.get("hour")),minute:Number(Q.get("minute"))}}function cU($){let f=new Date($);return{month:f.getMonth()+1,dayOfMonth:f.getDate(),dayOfWeek:f.getDay(),hour:f.getHours(),minute:f.getMinutes()}}function uU($,f){return $.months.includes(f.month)&&$.daysOfMonth.includes(f.dayOfMonth)&&$.daysOfWeek.includes(f.dayOfWeek)&&$.hours.includes(f.hour)&&$.minutes.includes(f.minute)}function dU($,f,J){let Q=w7($),Z=new Date(f);Z.setSeconds(0,0);let W=Z.getTime()+60000,j=new Date(f);j.setFullYear(j.getFullYear()+4);let X=j.getTime();while(W<=X){if(uU(Q,vU(W,J)))return W;W+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${J}"`)}function n1($,f,J){let Q=NH(J);if(Q)return mU(Q),dU($,f,Q);let Z=w7($),W=new Date(f);W.setSeconds(0,0),W=new Date(W.getTime()+60000);let j=new Date(f);j.setFullYear(j.getFullYear()+4);while(W<=j){let{month:X,dayOfMonth:H,dayOfWeek:Y,hour:V,minute:A}=cU(W.getTime());if(!Z.months.includes(X)){let B=Z.months.find((G)=>G>X)??q7(Z.months,"months"),K=B<=X?1:0;W=new Date(W.getFullYear()+K,B-1,1,0,0,0,0);continue}if(!Z.daysOfMonth.includes(H)||!Z.daysOfWeek.includes(Y)){W=new Date(W.getFullYear(),W.getMonth(),H+1,0,0,0,0);continue}if(!Z.hours.includes(V)){let B=Z.hours.find((G)=>G>V)??q7(Z.hours,"hours"),K=B<=V?1:0;W=new Date(W.getFullYear(),W.getMonth(),W.getDate()+K,B,0,0,0);continue}if(!Z.minutes.includes(A)){let B=Z.minutes.find((G)=>G>A)??q7(Z.minutes,"minutes"),K=B<=A?1:0;W=new Date(W.getFullYear(),W.getMonth(),W.getDate(),W.getHours()+K,B,0,0);continue}return W.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{createHash as lU}from"node:crypto";import pU from"yaml";function rU($){let f=$.replace(/\\/g,"/");if(f.startsWith("events/")&&f.endsWith(".event.md"))return"event";if(f.endsWith(".cron.md"))return"schedule";return"one_off"}function iU($){let f=$.replace(/\r\n/g,`
238
238
  `);if(!f.startsWith(`---
239
239
  `))return{frontmatter:void 0,body:$};let J=f.slice(4),Q=J.indexOf(`
240
240
  ---`);if(Q===-1)return{frontmatter:void 0,body:$};let Z=J.slice(0,Q),W=J.slice(Q+4);if(W.startsWith(`
@@ -330,7 +330,7 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let f=Math.max(1000,Mat
330
330
  ON cron_specs(trigger_kind, enabled, next_run_at);`,`CREATE INDEX IF NOT EXISTS cron_specs_event_match_idx
331
331
  ON cron_specs(trigger_kind, event_type, enabled);`,`CREATE INDEX IF NOT EXISTS cron_specs_parse_status_idx
332
332
  ON cron_specs(parse_status, updated_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_source_path_idx
333
- ON cron_specs(source_path);`];function CH($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let f of UL)$.exec(f)}function qJ($){if(!$)return;try{let f=JSON.parse($);if(f&&typeof f==="object"&&!Array.isArray(f))return f}catch{}return}function x7($,f={}){if(!$)return;try{let J=JSON.parse($);if(!Array.isArray(J))return;let Q=J.map((Z)=>typeof Z==="string"?Z.trim():"").filter((Z)=>Z.length>0);if(f.preserveEmpty)return Q;return Q.length>0?Q:void 0}catch{return}}function a1($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function X1($){return{specId:t($.spec_id),externalId:t($.external_id),sourcePath:t($.source_path),triggerKind:t($.trigger_kind),sourceMtimeMs:a1($.source_mtime_ms),sourceHash:I($.source_hash),parseStatus:t($.parse_status)==="invalid"?"invalid":"valid",parseError:I($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:t($.title),prompt:I($.prompt),workspaceRoot:I($.workspace_root),scheduleExpr:I($.schedule_expr),timezone:I($.timezone),eventType:I($.event_type),filters:qJ(I($.filters_json)),debounceSeconds:a1($.debounce_seconds),dedupeWindowSeconds:a1($.dedupe_window_seconds),cooldownSeconds:a1($.cooldown_seconds),mode:I($.mode),systemPrompt:I($.system_prompt),providerId:I($.provider_id),modelId:I($.model_id),maxIterations:a1($.max_iterations),timeoutSeconds:a1($.timeout_seconds),maxParallel:a1($.max_parallel),tools:x7(I($.tools_json),{preserveEmpty:!0}),notesDirectory:I($.notes_directory),extensions:x7(I($.extensions_json),{preserveEmpty:!0}),source:I($.source),tags:x7(I($.tags_json)),metadata:qJ(I($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:I($.last_materialized_run_id),lastRunAt:I($.last_run_at),nextRunAt:I($.next_run_at),createdAt:t($.created_at),updatedAt:t($.updated_at)}}function g7($){return{runId:t($.run_id),specId:t($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:t($.trigger_kind),status:t($.status),claimToken:I($.claim_token),claimStartedAt:I($.claim_started_at),claimUntilAt:I($.claim_until_at),scheduledFor:I($.scheduled_for),triggerEventId:I($.trigger_event_id),startedAt:I($.started_at),completedAt:I($.completed_at),sessionId:I($.session_id),reportPath:I($.report_path),error:I($.error),attemptCount:Number($.attempt_count??0),createdAt:t($.created_at),updatedAt:t($.updated_at)}}function EH($){return{eventId:t($.event_id),eventType:t($.event_type),source:t($.source),subject:I($.subject),occurredAt:t($.occurred_at),receivedAt:t($.received_at),workspaceRoot:I($.workspace_root),dedupeKey:I($.dedupe_key),payload:qJ(I($.payload_json)),attributes:qJ(I($.attributes_json)),processingStatus:t($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:I($.error),createdAt:t($.created_at),updatedAt:t($.updated_at)}}function hH($){return $?JSON.stringify($):null}var zL=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function bH($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function _L($,f,J,Q){for(let Z of zL){let W=$[Z],j=f[Z];if(bH(W)!==bH(j))return!0}if(J===!1&&Q===!0)return!0;return!1}function yL($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function TL($){return`hub/schedules/${$}.cron.md`}function NL($){let f={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(f).length>0?f:void 0}function m7($){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((f)=>f.trim().length>0),enabled:$.enabled!==!1,metadata:NL($)}}function kH($){return JSON.stringify(m7($))}function ML($,f){let J=$.metadata?{...$.metadata}:{},Q=f.createdBy===null?void 0:f.createdBy!==void 0?f.createdBy:typeof J.__hubScheduleCreatedBy==="string"?J.__hubScheduleCreatedBy:void 0,Z=f.cwd!==void 0?f.cwd:typeof J.__hubScheduleCwd==="string"?J.__hubScheduleCwd:void 0,W=f.runtimeOptions!==void 0?f.runtimeOptions:J.__hubRuntimeOptions&&typeof J.__hubRuntimeOptions==="object"&&!Array.isArray(J.__hubRuntimeOptions)?J.__hubRuntimeOptions:void 0;return delete J.__hubScheduleCreatedBy,delete J.__hubScheduleCwd,delete J.__hubRuntimeOptions,{name:f.name??$.title,cronPattern:f.cronPattern??$.scheduleExpr??"",prompt:f.prompt??$.prompt??"",workspaceRoot:f.workspaceRoot??$.workspaceRoot??"",cwd:Z,modelSelection:f.modelSelection!==void 0?f.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:f.enabled??$.enabled,mode:f.mode??($.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"),systemPrompt:f.systemPrompt===null?void 0:f.systemPrompt!==void 0?f.systemPrompt:$.systemPrompt,maxIterations:f.maxIterations===null?void 0:f.maxIterations!==void 0?f.maxIterations:$.maxIterations,timeoutSeconds:f.timeoutSeconds===null?void 0:f.timeoutSeconds!==void 0?f.timeoutSeconds:$.timeoutSeconds,maxParallel:f.maxParallel??$.maxParallel??1,createdBy:Q,tags:f.tags??$.tags,runtimeOptions:W,metadata:f.metadata!==void 0?f.metadata:Object.keys(J).length>0?J:void 0}}class V4{db;constructor($={}){let f=$.dbPath??OL();this.db=LL(f),CH(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let f=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return f?X1(f):void 0}getSpec($){let f=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return f?X1(f):void 0}getSpecByExternalId($){let f=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return f?X1(f):void 0}listSpecs($={}){let f=[],J=[];if($.triggerKind)f.push("trigger_kind = ?"),J.push($.triggerKind);if(typeof $.enabled==="boolean")f.push("enabled = ?"),J.push($.enabled?1:0);if($.parseStatus)f.push("parse_status = ?"),J.push($.parseStatus);if(!$.includeRemoved)f.push("removed = 0");let Q=f.length>0?`WHERE ${f.join(" AND ")}`:"",Z=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${Q} ORDER BY created_at DESC LIMIT ?`).all(...J,Z).map((j)=>X1(j))}createHubSchedule($){let f=`sched_${Y4()}`,J=this.upsertSpec({externalId:f,sourcePath:TL(f),triggerKind:"schedule",sourceHash:kH($),parseStatus:"valid",spec:m7($)});this.initializeScheduleNextRun(J.record.specId);let Q=this.getSpec(J.record.specId);if(!Q)throw Error("failed to create hub schedule");return Q}getHubSchedule($){let f=this.db.prepare(`SELECT * FROM cron_specs
333
+ ON cron_specs(source_path);`];function CH($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let f of UL)$.exec(f)}function qJ($){if(!$)return;try{let f=JSON.parse($);if(f&&typeof f==="object"&&!Array.isArray(f))return f}catch{}return}function x7($,f={}){if(!$)return;try{let J=JSON.parse($);if(!Array.isArray(J))return;let Q=J.map((Z)=>typeof Z==="string"?Z.trim():"").filter((Z)=>Z.length>0);if(f.preserveEmpty)return Q;return Q.length>0?Q:void 0}catch{return}}function a1($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function X1($){return{specId:t($.spec_id),externalId:t($.external_id),sourcePath:t($.source_path),triggerKind:t($.trigger_kind),sourceMtimeMs:a1($.source_mtime_ms),sourceHash:I($.source_hash),parseStatus:t($.parse_status)==="invalid"?"invalid":"valid",parseError:I($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:t($.title),prompt:I($.prompt),workspaceRoot:I($.workspace_root),scheduleExpr:I($.schedule_expr),timezone:I($.timezone),eventType:I($.event_type),filters:qJ(I($.filters_json)),debounceSeconds:a1($.debounce_seconds),dedupeWindowSeconds:a1($.dedupe_window_seconds),cooldownSeconds:a1($.cooldown_seconds),mode:I($.mode),systemPrompt:I($.system_prompt),providerId:I($.provider_id),modelId:I($.model_id),maxIterations:a1($.max_iterations),timeoutSeconds:a1($.timeout_seconds),maxParallel:a1($.max_parallel),tools:x7(I($.tools_json),{preserveEmpty:!0}),notesDirectory:I($.notes_directory),extensions:x7(I($.extensions_json),{preserveEmpty:!0}),source:I($.source),tags:x7(I($.tags_json)),metadata:qJ(I($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:I($.last_materialized_run_id),lastRunAt:I($.last_run_at),nextRunAt:I($.next_run_at),createdAt:t($.created_at),updatedAt:t($.updated_at)}}function g7($){return{runId:t($.run_id),specId:t($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:t($.trigger_kind),status:t($.status),claimToken:I($.claim_token),claimStartedAt:I($.claim_started_at),claimUntilAt:I($.claim_until_at),scheduledFor:I($.scheduled_for),triggerEventId:I($.trigger_event_id),startedAt:I($.started_at),completedAt:I($.completed_at),sessionId:I($.session_id),reportPath:I($.report_path),error:I($.error),attemptCount:Number($.attempt_count??0),createdAt:t($.created_at),updatedAt:t($.updated_at)}}function EH($){return{eventId:t($.event_id),eventType:t($.event_type),source:t($.source),subject:I($.subject),occurredAt:t($.occurred_at),receivedAt:t($.received_at),workspaceRoot:I($.workspace_root),dedupeKey:I($.dedupe_key),payload:qJ(I($.payload_json)),attributes:qJ(I($.attributes_json)),processingStatus:t($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:I($.error),createdAt:t($.created_at),updatedAt:t($.updated_at)}}function hH($){return $?JSON.stringify($):null}var zL=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function bH($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function _L($,f,J,Q){for(let Z of zL){let W=$[Z],j=f[Z];if(bH(W)!==bH(j))return!0}if(J===!1&&Q===!0)return!0;return!1}function yL($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function NL($){return`hub/schedules/${$}.cron.md`}function TL($){let f={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(f).length>0?f:void 0}function m7($){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((f)=>f.trim().length>0),enabled:$.enabled!==!1,metadata:TL($)}}function kH($){return JSON.stringify(m7($))}function ML($,f){let J=$.metadata?{...$.metadata}:{},Q=f.createdBy===null?void 0:f.createdBy!==void 0?f.createdBy:typeof J.__hubScheduleCreatedBy==="string"?J.__hubScheduleCreatedBy:void 0,Z=f.cwd!==void 0?f.cwd:typeof J.__hubScheduleCwd==="string"?J.__hubScheduleCwd:void 0,W=f.runtimeOptions!==void 0?f.runtimeOptions:J.__hubRuntimeOptions&&typeof J.__hubRuntimeOptions==="object"&&!Array.isArray(J.__hubRuntimeOptions)?J.__hubRuntimeOptions:void 0;return delete J.__hubScheduleCreatedBy,delete J.__hubScheduleCwd,delete J.__hubRuntimeOptions,{name:f.name??$.title,cronPattern:f.cronPattern??$.scheduleExpr??"",prompt:f.prompt??$.prompt??"",workspaceRoot:f.workspaceRoot??$.workspaceRoot??"",cwd:Z,modelSelection:f.modelSelection!==void 0?f.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:f.enabled??$.enabled,mode:f.mode??($.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"),systemPrompt:f.systemPrompt===null?void 0:f.systemPrompt!==void 0?f.systemPrompt:$.systemPrompt,maxIterations:f.maxIterations===null?void 0:f.maxIterations!==void 0?f.maxIterations:$.maxIterations,timeoutSeconds:f.timeoutSeconds===null?void 0:f.timeoutSeconds!==void 0?f.timeoutSeconds:$.timeoutSeconds,maxParallel:f.maxParallel??$.maxParallel??1,createdBy:Q,tags:f.tags??$.tags,runtimeOptions:W,metadata:f.metadata!==void 0?f.metadata:Object.keys(J).length>0?J:void 0}}class V4{db;constructor($={}){let f=$.dbPath??OL();this.db=LL(f),CH(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let f=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return f?X1(f):void 0}getSpec($){let f=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return f?X1(f):void 0}getSpecByExternalId($){let f=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return f?X1(f):void 0}listSpecs($={}){let f=[],J=[];if($.triggerKind)f.push("trigger_kind = ?"),J.push($.triggerKind);if(typeof $.enabled==="boolean")f.push("enabled = ?"),J.push($.enabled?1:0);if($.parseStatus)f.push("parse_status = ?"),J.push($.parseStatus);if(!$.includeRemoved)f.push("removed = 0");let Q=f.length>0?`WHERE ${f.join(" AND ")}`:"",Z=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${Q} ORDER BY created_at DESC LIMIT ?`).all(...J,Z).map((j)=>X1(j))}createHubSchedule($){let f=`sched_${Y4()}`,J=this.upsertSpec({externalId:f,sourcePath:NL(f),triggerKind:"schedule",sourceHash:kH($),parseStatus:"valid",spec:m7($)});this.initializeScheduleNextRun(J.record.specId);let Q=this.getSpec(J.record.specId);if(!Q)throw Error("failed to create hub schedule");return Q}getHubSchedule($){let f=this.db.prepare(`SELECT * FROM cron_specs
334
334
  WHERE external_id = ? AND source = 'hub-schedule' AND removed = 0
335
335
  ORDER BY created_at ASC LIMIT 1`).get($);return f?X1(f):void 0}listHubSchedules($={}){let f=["source = 'hub-schedule'","trigger_kind = 'schedule'","removed = 0"],J=[];if(typeof $.enabled==="boolean")f.push("enabled = ?"),J.push($.enabled?1:0);if($.tags&&$.tags.length>0)for(let W of $.tags)f.push("tags_json LIKE ?"),J.push(`%"${W.trim()}"%`);let Q=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_specs
336
336
  WHERE ${f.join(" AND ")}
@@ -477,9 +477,9 @@ ${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let f=Math.max(1000,Mat
477
477
  updated_at = ?
478
478
  WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,f,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,f){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(f,D0(),$)}attachReportPathToRun($,f){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(f,D0(),$)}}class A4{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new V4({dbPath:$.dbPath});let f=$.specs;this.reconciler=new k7({store:this.store,specs:f}),this.materializer=new W4({store:this.store}),this.eventIngress=new y7({store:this.store,logger:$.logger}),this.runner=new j4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:f,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new I7({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(J)=>{let Q=$.logger;if(Q)if(Q.error)Q.error("cron.watcher.failed",{error:J});else Q.log("cron.watcher.failed",{error:J})}})}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 lH={};q(lH,{manifestToSessionRecord:()=>SJ,listSessionHistoryFromBackend:()=>d7,listSessionHistory:()=>CJ,hydrateSessionHistory:()=>dH});import{readdir as CL,readFile as vH}from"node:fs/promises";import{join as cH}from"node:path";import{formatDisplayUserInput as EL,normalizeUserInput as hL}from"@cline/shared";import{resolveSessionDataDir as uH}from"@cline/shared/storage";import{existsSync as qL}from"node:fs";import{readFile as wL}from"node:fs/promises";import{formatDisplayUserInput as IH}from"@cline/shared";class B4{listeners=new Set;subscribe($,f){let J={listener:$,sessionId:f?.sessionId?.trim()||void 0};return this.listeners.add(J),()=>{this.listeners.delete(J)}}emit($){let f=$.payload.sessionId?.trim();for(let J of this.listeners){if(J.sessionId&&J.sessionId!==f)continue;J.listener($)}}get size(){return this.listeners.size}}async function H1($){let f=$?.trim();if(!f||!qL(f))return[];try{let J=(await wL(f,"utf8")).trim();if(!J)return[];let Q=JSON.parse(J);if(Array.isArray(Q))return xH(Q);if(Q&&typeof Q==="object"&&!Array.isArray(Q)){let Z=Q.messages;if(Array.isArray(Z))return xH(Z)}return[]}catch{return[]}}function SL($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:IH($.content)};return{...$,content:$.content.map((f)=>{if(f.type!=="text"||typeof f.text!=="string")return f;return{...f,text:IH(f.text)}})}}function xH($){return $.map(SL)}function v7($){return $?{...$}:void 0}async function gH($,f){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await f.queueSpawnRequest($);let Q=await f.upsertSubagentSessionFromHook($);if(!Q)return;await f.appendSubagentHookAudit(Q,$),await f.applySubagentStatus(Q,$)}function K4($){if(typeof $!=="string")return;let f=$.trim();return f.length>0?f:void 0}function m0($){let f=K4($);if(!f)return;return f.toLowerCase()==="unknown"?void 0:f}function wJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function bL($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function u7($){let f=$??200;return Number.isFinite(f)?Math.max(0,Math.floor(f)):200}function kL($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function IL($){return $.isSubagent!==!0&&!K4($.parentSessionId)}function xL($){let f=$.match(/\d{13,}/g);if(!f||f.length===0)return 0;let J=0;for(let Q of f){let Z=Number.parseInt(Q,10);if(Number.isFinite(Z)&&Z>J)J=Z}return J}function SJ($){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 gL($){let f=u7($);if(f===0)return[];let J=uH(),Z=(await CL(J,{withFileTypes:!0}).catch(()=>[])).filter((j)=>j.isDirectory()).map((j)=>({entry:j,recency:xL(j.name.trim())})).sort((j,X)=>X.recency-j.recency||X.entry.name.localeCompare(j.entry.name));return(await Promise.all(Z.map(async({entry:j})=>{let X=j.name.trim();if(!X)return;let H=cH(J,X,`${X}.json`),Y=await vH(H,"utf8").catch(()=>{return});if(!Y)return;let V;try{V=JSON.parse(Y)}catch{return}let A=y0.safeParse(V);if(!A.success)return;return SJ(A.data)}))).filter((j)=>Boolean(j)).sort((j,X)=>X.startedAt.localeCompare(j.startedAt)).slice(0,f)}async function mL($,f,J){let Q=u7(f);if(Q===0)return await $.listSessions(0),[];let Z=J.includeSubagents?Q:kL(Q),W=await $.listSessions(Z);return(J.includeSubagents?W:W.filter(IL)).slice(0,Q)}function vL($){if(typeof $==="string")return $.trim();let f=[];for(let J of $){if(!J||typeof J!=="object")continue;let Q=J;if(Q.type!=="text")continue;let Z=Q.text?.trim();if(Z)f.push(Z)}return f.join(`
479
479
  `).trim()}function mH($){return $.replace(/\s+/g," ").trim()}function cL($,f){if($.length<=f)return $;return`${$.slice(0,Math.max(0,f-3)).trimEnd()}...`}function uL($){for(let f of["user","assistant"])for(let J of $){if(J.role!==f)continue;let Q=mH(vL(J.content));if(!Q)continue;let Z=f==="user"?mH(EL(Q)):Q,W=hL(Z.split(`
480
- `)[0]??Z);return cL(W,50)}return}function dL($){let f=0;for(let J of $)f+=wJ(J.metrics?.cost)??0;return f}function lL($){let f,J;for(let Q=$.length-1;Q>=0;Q-=1){let Z=$[Q];if(!f)f=m0(Z.modelInfo?.provider);if(!J)J=m0(Z.modelInfo?.id);if(f&&J)break}return{provider:f,model:J}}function pL($){return m0($?.provider)??m0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function rL($){return m0($?.model)??m0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function c7($,f){let J=bL($.metadata),Q=K4(f?.title)??K4(J?.title),Z=wJ(f?.totalCost)??wJ(J?.totalCost),W=J||Q!==void 0||Z!==void 0?{...J??{},...Q!==void 0?{title:Q}:{},...Z!==void 0?{totalCost:Z}:{}}:void 0;return{...$,provider:m0(f?.provider)??m0($.provider)??pL(J)??"",model:m0(f?.model)??m0($.model)??rL(J)??"",metadata:W}}async function dH($,f){return await Promise.all(f.map(async(J)=>{let Q=c7(J),Z=Boolean(K4(Q.metadata?.title)),W=Boolean(m0(Q.provider)),j=Boolean(m0(Q.model)),X=wJ(Q.metadata?.totalCost),H=X!==void 0&&X>0;if(Z&&W&&j&&H)return Q;let Y=await $.readSessionMessages(J.sessionId);if(Y.length===0)return Q;let V=lL(Y),A=dL(Y);return c7(J,{title:Z?void 0:uL(Y),provider:W?void 0:V.provider,model:j?void 0:V.model,totalCost:H||A<=0?void 0:A})}))}async function CJ($,f={}){let J=u7(f.limit),Q=f.includeSubagents===!0,Z=await mL($,J,{includeSubagents:Q}),W=f.includeManifestFallback===!0&&Z.length<J?await gL(Math.min(Math.max(J*2,100),500)):[],j=new Map;for(let H of[...Z,...W]){if(j.has(H.sessionId))continue;j.set(H.sessionId,H)}let X=W.length===0?Z:Array.from(j.values()).sort((H,Y)=>Y.startedAt.localeCompare(H.startedAt)).slice(0,J);if(f.hydrate===!1)return X.map((H)=>c7(H));return await dH($,X)}async function iL($){let f=$.trim();if(!f)return;let J=cH(uH(),f,`${f}.json`),Q=await vH(J,"utf8").catch(()=>{return});if(!Q)return;try{let Z=y0.safeParse(JSON.parse(Q));return Z.success?Z.data.messages_path:void 0}catch{return}}async function d7($,f={}){let J=new Map;return await CJ({listSessions:async(Z)=>{let W=await $.listSessions(Z);J.clear();for(let j of W)J.set(j.sessionId,j);return W.map($8)},readSessionMessages:async(Z)=>{let W=J.get(Z)?.messagesPath??await iL(Z);return await H1(W)}},f)}var iY={};q(iY,{resolveSessionBackend:()=>yQ,createRuntimeHost:()=>Y2});import{captureSdkError as pY}from"@cline/shared";import{createSessionId as xO,resolveHubCommandTimeoutMs as gO}from"@cline/shared";import{spawn as PO}from"node:child_process";import{closeSync as FO,mkdirSync as DO,openSync as RO}from"node:fs";import{basename as UO,dirname as LO,join as OO}from"node:path";import{fileURLToPath as zO}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as _O,isHubDaemonProcess as ZY,withResolvedClineBuildEnv as yO}from"@cline/shared";import{createHash as nL,randomBytes as aL}from"node:crypto";import{existsSync as tL}from"node:fs";import{chmod as sL,mkdir as l7,readFile as tH,rm as p7,writeFile as sH}from"node:fs/promises";import{dirname as oH,join as r7}from"node:path";import{resolveClineDataDir as G4,resolveClineDir as eH}from"@cline/shared/storage";var rH="0.0.40";var iH={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:rH,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"}},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:"^1.21.7","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"^3.32.3",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},devDependencies:{"@types/ws":"^8.18.1"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var oL="CLINE_HUB_DISCOVERY_PATH",eL="CLINE_HUB_BUILD_ID",nH=30000,$O=15000,fO=100;function JO($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function QO($){return nL("sha256").update($).digest("hex").slice(0,12)}function ZO($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(f){return f instanceof Error&&"code"in f?String(f.code)==="EPERM":!1}}function EJ(){return aL(32).toString("hex")}function WO($){return new Promise((f)=>setTimeout(f,$))}function jO($){return`${$}.lock`}async function XO($){try{let f=JSON.parse(await tH(r7($,"owner.json"),"utf8"));if(typeof f.pid!=="number"||typeof f.acquiredAt!=="string")return;return{pid:f.pid,acquiredAt:f.acquiredAt}}catch{return}}async function aH($){await p7($,{recursive:!0,force:!0}).catch(()=>{return})}function Y1(){return process.env[eL]?.trim()||String(iH.version)}function w$($=process.argv[1]?.trim()||process.cwd()){let f=`hub-${QO($)}`,J=process.env[oL]?.trim()||r7(G4(),"locks","hub","owners",`${JO(f)}.json`);return{ownerId:f,discoveryPath:J}}function $Y($=`hub-${Date.now().toString(36)}`){return w$($)}async function A0($){try{let f=JSON.parse(await tH($,"utf8"));if(typeof f.hubId!=="string"||typeof f.protocolVersion!=="string"||typeof f.authToken!=="string"||typeof f.host!=="string"||typeof f.port!=="number"||typeof f.url!=="string"||typeof f.startedAt!=="string"||typeof f.updatedAt!=="string")return;return{hubId:f.hubId,protocolVersion:f.protocolVersion,buildId:typeof f.buildId==="string"?f.buildId:void 0,authToken:f.authToken,host:f.host,port:f.port,url:f.url,pid:typeof f.pid==="number"?f.pid:void 0,startedAt:f.startedAt,updatedAt:f.updatedAt}}catch{return}}async function hJ($,f){await l7(oH($),{recursive:!0}),await p7($,{force:!0}).catch(()=>{return}),await sH($,`${JSON.stringify(f,null,2)}
480
+ `)[0]??Z);return cL(W,50)}return}function dL($){let f=0;for(let J of $)f+=wJ(J.metrics?.cost)??0;return f}function lL($){let f,J;for(let Q=$.length-1;Q>=0;Q-=1){let Z=$[Q];if(!f)f=m0(Z.modelInfo?.provider);if(!J)J=m0(Z.modelInfo?.id);if(f&&J)break}return{provider:f,model:J}}function pL($){return m0($?.provider)??m0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function rL($){return m0($?.model)??m0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function c7($,f){let J=bL($.metadata),Q=K4(f?.title)??K4(J?.title),Z=wJ(f?.totalCost)??wJ(J?.totalCost),W=J||Q!==void 0||Z!==void 0?{...J??{},...Q!==void 0?{title:Q}:{},...Z!==void 0?{totalCost:Z}:{}}:void 0;return{...$,provider:m0(f?.provider)??m0($.provider)??pL(J)??"",model:m0(f?.model)??m0($.model)??rL(J)??"",metadata:W}}async function dH($,f){return await Promise.all(f.map(async(J)=>{let Q=c7(J),Z=Boolean(K4(Q.metadata?.title)),W=Boolean(m0(Q.provider)),j=Boolean(m0(Q.model)),X=wJ(Q.metadata?.totalCost),H=X!==void 0&&X>0;if(Z&&W&&j&&H)return Q;let Y=await $.readSessionMessages(J.sessionId);if(Y.length===0)return Q;let V=lL(Y),A=dL(Y);return c7(J,{title:Z?void 0:uL(Y),provider:W?void 0:V.provider,model:j?void 0:V.model,totalCost:H||A<=0?void 0:A})}))}async function CJ($,f={}){let J=u7(f.limit),Q=f.includeSubagents===!0,Z=await mL($,J,{includeSubagents:Q}),W=f.includeManifestFallback===!0&&Z.length<J?await gL(Math.min(Math.max(J*2,100),500)):[],j=new Map;for(let H of[...Z,...W]){if(j.has(H.sessionId))continue;j.set(H.sessionId,H)}let X=W.length===0?Z:Array.from(j.values()).sort((H,Y)=>Y.startedAt.localeCompare(H.startedAt)).slice(0,J);if(f.hydrate===!1)return X.map((H)=>c7(H));return await dH($,X)}async function iL($){let f=$.trim();if(!f)return;let J=cH(uH(),f,`${f}.json`),Q=await vH(J,"utf8").catch(()=>{return});if(!Q)return;try{let Z=y0.safeParse(JSON.parse(Q));return Z.success?Z.data.messages_path:void 0}catch{return}}async function d7($,f={}){let J=new Map;return await CJ({listSessions:async(Z)=>{let W=await $.listSessions(Z);J.clear();for(let j of W)J.set(j.sessionId,j);return W.map($8)},readSessionMessages:async(Z)=>{let W=J.get(Z)?.messagesPath??await iL(Z);return await H1(W)}},f)}var iY={};q(iY,{resolveSessionBackend:()=>yQ,createRuntimeHost:()=>Y2});import{captureSdkError as pY}from"@cline/shared";import{createSessionId as xO,resolveHubCommandTimeoutMs as gO}from"@cline/shared";import{spawn as PO}from"node:child_process";import{closeSync as FO,mkdirSync as DO,openSync as RO}from"node:fs";import{basename as UO,dirname as LO,join as OO}from"node:path";import{fileURLToPath as zO}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as _O,isHubDaemonProcess as ZY,withResolvedClineBuildEnv as yO}from"@cline/shared";import{createHash as nL,randomBytes as aL}from"node:crypto";import{existsSync as tL}from"node:fs";import{chmod as sL,mkdir as l7,readFile as tH,rm as p7,writeFile as sH}from"node:fs/promises";import{dirname as oH,join as r7}from"node:path";import{resolveClineDataDir as G4,resolveClineDir as eH}from"@cline/shared/storage";var rH="0.0.41";var iH={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:rH,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"}},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:"^1.21.7","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"^3.32.3",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},devDependencies:{"@types/ws":"^8.18.1"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var oL="CLINE_HUB_DISCOVERY_PATH",eL="CLINE_HUB_BUILD_ID",nH=30000,$O=15000,fO=100;function JO($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function QO($){return nL("sha256").update($).digest("hex").slice(0,12)}function ZO($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(f){return f instanceof Error&&"code"in f?String(f.code)==="EPERM":!1}}function EJ(){return aL(32).toString("hex")}function WO($){return new Promise((f)=>setTimeout(f,$))}function jO($){return`${$}.lock`}async function XO($){try{let f=JSON.parse(await tH(r7($,"owner.json"),"utf8"));if(typeof f.pid!=="number"||typeof f.acquiredAt!=="string")return;return{pid:f.pid,acquiredAt:f.acquiredAt}}catch{return}}async function aH($){await p7($,{recursive:!0,force:!0}).catch(()=>{return})}function Y1(){return process.env[eL]?.trim()||String(iH.version)}function w$($=process.argv[1]?.trim()||process.cwd()){let f=`hub-${QO($)}`,J=process.env[oL]?.trim()||r7(G4(),"locks","hub","owners",`${JO(f)}.json`);return{ownerId:f,discoveryPath:J}}function $Y($=`hub-${Date.now().toString(36)}`){return w$($)}async function A0($){try{let f=JSON.parse(await tH($,"utf8"));if(typeof f.hubId!=="string"||typeof f.protocolVersion!=="string"||typeof f.authToken!=="string"||typeof f.host!=="string"||typeof f.port!=="number"||typeof f.url!=="string"||typeof f.startedAt!=="string"||typeof f.updatedAt!=="string")return;return{hubId:f.hubId,protocolVersion:f.protocolVersion,buildId:typeof f.buildId==="string"?f.buildId:void 0,authToken:f.authToken,host:f.host,port:f.port,url:f.url,pid:typeof f.pid==="number"?f.pid:void 0,startedAt:f.startedAt,updatedAt:f.updatedAt}}catch{return}}async function hJ($,f){await l7(oH($),{recursive:!0}),await p7($,{force:!0}).catch(()=>{return}),await sH($,`${JSON.stringify(f,null,2)}
481
481
  `,{encoding:"utf8",mode:384}),await sL($,384)}async function v0($){await p7($,{force:!0}).catch(()=>{return})}async function bJ($,f){let J=jO($);await l7(oH(J),{recursive:!0});let Q=Date.now()+$O;while(!0)try{await l7(J,{recursive:!1}),await sH(r7(J,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
482
- `,"utf8");try{return await f()}finally{await aH(J)}}catch(Z){if((Z instanceof Error&&"code"in Z?String(Z.code):"")!=="EEXIST")throw Z;let j=await XO(J),X=j?Date.now()-Date.parse(j.acquiredAt):nH+1;if(!j||!ZO(j.pid)||X>nH){await aH(J);continue}if(Date.now()>=Q)throw Error(`Timed out waiting for hub startup lock ${J}`);await WO(fO)}}async function R0($){try{let f=await fetch(i7($));if(!f.ok)return;return await f.json()}catch{return}}function t0($,f,J="/hub"){return new URL(`ws://${$}:${f}${J}`).toString()}function i7($){let f=new URL($);return f.protocol=f.protocol==="wss:"?"https:":"http:",f.pathname="/health",f.search="",f.toString()}function fY($){return tL($)}import{CLINE_HUB_DEV_PORT as HO,CLINE_HUB_PORT as YO,resolveClineBuildEnv as VO}from"@cline/shared";var AO="CLINE_HUB_HOST",BO="CLINE_HUB_PORT",KO="CLINE_HUB_PATHNAME",n7="127.0.0.1",a7=YO,t7="/hub";function JY($){return VO($)==="development"?HO:a7}function s7($={}){return($.env??process.env)[AO]?.trim()||n7}function $2($={}){let J=($.env??process.env)[BO]?.trim();if(!J)return JY($);let Q=Number.parseInt(J,10);if(!Number.isInteger(Q)||Q<1||Q>65535)return JY($);return Q}function o7($={}){return($.env??process.env)[KO]?.trim()||t7}function c0($={},f={}){return{host:$.host??s7(f),port:$.port??$2(f),pathname:$.pathname??o7(f)}}var GO="shared:cline";function QY($){let f=M$($.trim());return w$(`workspace:${f||$.trim()}`)}function Y0($=GO){return w$($)}var TO=8000,NO=200,MO=3000,qO=100,wO=[100,250,500,1000,2000],SO="--cline-hub-daemon";function CO($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function EO(){try{let $=OO(G4(),"logs","hub-daemon.log");return DO(LO($),{recursive:!0}),{fd:RO($,"a"),logPath:$}}catch{return}}function P4($){let f=$.buildId?.trim();return!!f&&f===Y1()}async function hO($,f){let J=Date.now()+f;while(Date.now()<J){if(!(await R0($).catch(()=>{return}))?.url)return!0;await new Promise((Z)=>setTimeout(Z,qO))}return!1}async function F4($,f){if(P4($))return;if(await D4($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}await hO($.url,MO),await v0(f).catch(()=>{return})}function bO(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return zO(new URL(`./entry.${$}`,import.meta.url))}function kO($,f){let J=bO(),Q=process.execPath?.trim();if(!Q)throw Error("unable to resolve runtime executable for hub daemon");let Z=UO(Q).toLowerCase().includes("bun"),W=J.startsWith("/$bunfs/"),j=Z&&J.toLowerCase().endsWith(".ts"),X=W?[SO]:[...j?["--conditions=development"]:[],J];return{launcher:Q,args:[...X,"--cwd",$,...CO(f)],cwd:$,env:{...yO(process.env),CLINE_NO_INTERACTIVE:"1",[_O]:"1"}}}function IO($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let J="message"in $?$.message:void 0;return typeof J==="string"&&J.includes("ETXTBSY")}function e7($,f={}){if(ZY())return;let J=kO($,f),Q=EO();try{PO(J.launcher,J.args,{detached:!0,stdio:Q?["ignore",Q.fd,Q.fd]:"ignore",env:J.env,cwd:J.cwd}).unref()}finally{if(Q)FO(Q.fd)}}async function f2($,f={}){for(let J=0;;J++)try{e7($,f);return}catch(Q){let Z=wO[J];if(!IO(Q)||Z===void 0)throw Q;await new Promise((W)=>setTimeout(W,Z))}}function kJ($,f={}){if(ZY())return;let J=Y0(),Q=f.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=c0(f),W=t0(Z.host,Z.port,Z.pathname);A0(J.discoveryPath).then(async(j)=>{if(j?.url){let V=await R0(j.url);if(V?.url&&P4(V)&&await W$(V.url,{authToken:j.authToken}))return;if(V?.url)await F4({...V,authToken:j.authToken},J.discoveryPath);else await v0(J.discoveryPath).catch(()=>{return})}let X=await R0(W);if(X?.url)await F4(X,J.discoveryPath);let Y=!Q&&Z.port!==0?{...Z,port:0}:Z;await f2($,Y)}).catch(()=>{})}async function WY($,f={}){let J=Y0(),Q=f.host!==void 0||f.port!==void 0||f.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=f.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=c0(f),j=t0(W.host,W.port,W.pathname),X=(K)=>{if(!Q)V1(K.url,K.authToken);return K},H=await A0(J.discoveryPath);if(H?.url){let K=await R0(H.url);if(K?.url&&P4(K)&&await W$(K.url,{authToken:H.authToken}))return X({url:K.url,authToken:H.authToken});if(K?.url)await F4({...K,authToken:H.authToken},J.discoveryPath);else await v0(J.discoveryPath).catch(()=>{return})}let Y=await R0(j);if(Y?.url)await F4(Y,J.discoveryPath);let A=!Z&&W.port!==0?{...W,port:0}:W;await f2($,A);let B=Date.now()+TO;while(Date.now()<B){let K=await A0(J.discoveryPath);if(K?.url){let R=await R0(K.url);if(R?.url&&P4(R)&&await W$(R.url,{authToken:K.authToken}))return X({url:R.url,authToken:K.authToken})}let G=await R0(j);if(G?.url&&!P4(G))await F4(G,J.discoveryPath);await new Promise((R)=>setTimeout(R,NO))}throw Error("Timed out waiting for detached hub startup.")}function mO(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function VY($){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((f)=>Buffer.from(f))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return VY($.data);return String($)}function vO($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function jY($){let f=$,J=vO(f.reason);return new z0("hub_connection_closed",f.code||J?`Hub connection closed (code=${f.code??0}${J?`, reason=${J}`:""})`:$Q,{closeCode:f.code,closeReason:J||void 0})}function cO($,f){if($ instanceof z0)return $;if($ instanceof Error)return new z0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new z0("hub_connect_failed",$.error.message);let J=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(J)return new z0("hub_connect_failed",J);let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new z0("hub_connect_failed",Q?`Failed to connect to hub at ${f.toString()} (${Q} event before socket open).`:`Failed to connect to hub at ${f.toString()}.`)}var uO=8000,dO=200,XY="*",HY=8000,lO="cline-hub-auth.",AY=new Map,BY=new Set,pO=3000,rO=3000,iO=100,$Q="Hub connection closed",nO=250,aO=5000,YY=0.5;class z0 extends Error{code;details;constructor($,f,J){super(f);this.code=$;this.details=J;this.name="HubTransportError"}}function QQ($){return $ instanceof z0}class J2 extends Error{command;code;constructor($,f,J){super(J);this.command=$;this.code=f;this.name="HubCommandError"}}function IJ($,f){return $ instanceof J2&&$.code==="hub_command_timeout"&&(f===void 0||$.command===f)}function KY($){let f=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),f)return f;let J=ZQ($.toString());return J?AY.get(J):void 0}function tO($){try{let J=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return J==="localhost"||J==="127.0.0.1"||J==="::1"}catch{return!1}}function ZQ($){if(!tO($))return;let f=new URL(A1($));return f.search="",f.hash="",f.toString()}function fQ($){let f=ZQ($);return!!f&&BY.has(f)}function V1($,f){let J=ZQ($);if(J){if(BY.add(J),f?.trim())AY.set(J,f)}return $}class s0{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new z0("hub_connection_closed",$Q);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),f=this.options.authToken?.trim()||KY($);$.hash="";let Q=new(mO())($.toString(),f?[`${lO}${f}`]:void 0);this.socket=Q;let Z=!1;this.connectPromise=new Promise((W,j)=>{let X=!1,H=setTimeout(()=>{if(X)return;X=!0,Z=!0,this.lastCloseError=new z0("hub_connect_timeout",`Timed out connecting to hub after ${HY}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Q.close()}catch{}j(this.lastCloseError)},HY);Q.addEventListener("open",()=>{if(X)return;X=!0,clearTimeout(H),W()}),Q.addEventListener("error",(Y)=>{if(X)return;X=!0,clearTimeout(H),this.lastCloseError=cO(Y,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)}),Q.addEventListener("close",(Y)=>{if(X)return;if(X=!0,clearTimeout(H),!Z)this.lastCloseError=jY(Y),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)})}),Q.addEventListener("message",(W)=>{this.handleFrame(JSON.parse(VY(W)))}),Q.addEventListener("close",(W)=>{if(this.socket!==Q)return;if(!Z)this.lastCloseError=jY(W),this.sawSocketClose=!0;this.registered=!1;for(let j of this.pendingReplies.values())j.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 W of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(W));this.reconnectAttempt=0}subscribe($,f){let J=f?.sessionId?.trim()||void 0,Q={listener:$,sessionId:J};return this.listeners.add(Q),this.adjustSubscriptionCount(J,1),()=>{if(!this.listeners.delete(Q))return;this.adjustSubscriptionCount(J,-1)}}async command($,f,J,Q){let Z=0,W=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,f,J,Q)}catch(j){if(!W||Z>=1||!await this.recoverLocalHubTransport(j))throw j;Z+=1}}async commandOnce($,f,J,Q){await this.connect();let Z=xO("hubreq_"),W=gO($,Q?.timeoutMs),j=new Promise((H,Y)=>{let V=W===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(Z))return;Y(new J2($,"hub_command_timeout",`Hub command ${$} timed out after ${W}ms (hub=${this.currentUrl}, requestId=${Z}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},W);this.pendingReplies.set(Z,{resolve:(A)=>{if(V)clearTimeout(V);H(A)},reject:(A)=>{if(V)clearTimeout(V);Y(A)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:Z,clientId:this.clientId,sessionId:J,timeoutMs:W,payload:f}})}catch(H){throw this.pendingReplies.delete(Z),H}let X=await j;if(!X.ok)throw new J2($,X.error?.code,X.error?.message??`Hub command ${$} failed`);return X}async recoverLocalHubTransport($){if(!fQ(this.currentUrl)||!QQ($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let f=await t1({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!f)return!1;return this.currentUrl=f,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(nO*2**this.reconnectAttempt,aO),f=Math.round($*(1-YY)+Math.random()*$*YY);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},f)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!fQ(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await t1({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 z0("hub_connection_closed",$Q),this.sawSocketClose=!1;for(let f of this.pendingReplies.values())f.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 z0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,f){this.sendFrame({kind:$,clientId:this.clientId,...f?{sessionId:f}:{}})}adjustSubscriptionCount($,f){let J=this.subscriptionKeyForSessionId($),Q=(this.subscriptionCounts.get(J)??0)+f;if(Q<=0){if(this.subscriptionCounts.delete(J),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(f<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(J,Q),f>0&&Q===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??XY}subscriptionSessionIdFromKey($){return $===XY?void 0:$}handleFrame($){switch($.kind){case"reply":{let f=$.envelope.requestId;if(!f)return;let J=this.pendingReplies.get(f);if(!J)return;this.pendingReplies.delete(f),J.resolve($.envelope);return}case"event":for(let f of this.listeners){if(f.sessionId&&f.sessionId!==$.envelope.sessionId?.trim())continue;f.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function A1($){let f=new URL($);if(f.protocol==="http:")f.protocol="ws:";else if(f.protocol==="https:")f.protocol="wss:";return f.toString()}async function W$($,f){let J=new s0({url:$,authToken:f?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:f?.workspaceRoot,cwd:f?.cwd});try{return await J.connect(),!0}catch{return!1}finally{J.close()}}async function JQ($,f){let J=A1($),Q=await R0(J);if(!Q)return{status:"unreachable",url:J};let Z=Y1(),W=Q.buildId?.trim();if(!W||W!==Z)return{status:"build_mismatch",url:J};if(f?.verifyConnection===!0&&!await W$(J,{workspaceRoot:f.workspaceRoot,cwd:f.cwd,authToken:f.authToken}))return{status:"unreachable",url:J};return{status:"compatible",url:J}}async function sO($){let f=Date.now()+uO;while(Date.now()<f){let J=await A0($.discoveryPath);if(J?.url){let Q=await JQ(J.url,{verifyConnection:!0,authToken:J.authToken});if(Q.status==="compatible")return V1(Q.url,J.authToken)}await new Promise((Q)=>setTimeout(Q,dO))}return}async function oO($){let f=Date.now()+rO;while(Date.now()<f){if(!(await R0($).catch(()=>{return}))?.url)return!0;await new Promise((Q)=>setTimeout(Q,iO))}return!1}function eO($,f){try{return A1($)===A1(f)}catch{return!1}}function $z($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((J)=>{if(!J||typeof J!=="object")return!1;let Q=J;if(Q.status==="running"||Q.status==="idle")return!0;return Array.isArray(Q.participants)&&Q.participants.length>0})}async function fz($,f,J){let Q=new s0({url:$,authToken:f,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd});try{let Z=await Q.command("session.list",{limit:500},void 0,{timeoutMs:pO});return!$z(Z.payload)}catch{return!1}finally{await Q.dispose().catch(()=>{return})}}async function R4($={}){if($.endpoint?.trim()){let Z=await JQ($.endpoint);return Z.status==="compatible"?Z.url:void 0}let f=Y0(),J=await A0(f.discoveryPath);if(!J?.url)return;let Q=await JQ(J.url);if(Q.status==="compatible")return V1(Q.url,J.authToken);if(Q.status==="build_mismatch")await v0(f.discoveryPath).catch(()=>{return});return}async function t1($={}){let f=await R4($);if(f&&await W$(f,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return f;if($.endpoint?.trim())return;let J=Y0();return await f2($.workspaceRoot??process.cwd()),await sO(J)}async function D4($,f){let J=new URL($),Q=f?.trim()||KY(J);if(J.protocol==="ws:")J.protocol="http:";else if(J.protocol==="wss:")J.protocol="https:";return J.pathname="/shutdown",J.hash="",(await fetch(J,{method:"POST",headers:Q?{authorization:`Bearer ${Q}`}:void 0})).ok}async function WQ(){let $=Y0(),f=await A0($.discoveryPath);if(!f?.url)return!1;try{if(await D4(f.url,f.authToken))return!0}catch{}return!1}async function xJ($){if(!fQ($.url))return;let f=Y0(),J=await A0(f.discoveryPath);if(!J?.url||!eO(J.url,$.url))return;if(!await fz(J.url,J.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await WQ())return;if(!await oO(J.url))return;return await v0(f.discoveryPath).catch(()=>{return}),await t1({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var yY={};q(yY,{HubRuntimeHost:()=>S$});import{captureSdkError as Wz,createSessionId as PY,HUB_CHECKPOINT_CAPABILITY as jz,HUB_COMPACTION_CAPABILITY as Xz,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Hz,HUB_HOOK_CAPABILITY_PREFIX as Yz,HUB_MISTAKE_LIMIT_CAPABILITY as Vz,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Az,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Bz,isHubToolExecutorName as Kz}from"@cline/shared";var GY={};q(GY,{createCoreSessionSnapshot:()=>j$,coreSessionSnapshotToRecord:()=>gJ});function Jz($){return $?JSON.parse(JSON.stringify($)):void 0}function Qz($){return $?JSON.parse(JSON.stringify($)):void 0}function Zz($){let f=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,Q=(Array.isArray(f?.history)?f.history:[]).filter((j)=>!!j&&typeof j==="object"&&!Array.isArray(j)).flatMap((j)=>{let X=typeof j.ref==="string"?j.ref.trim():"",H=Number(j.createdAt),Y=Number(j.runCount);if(!X||!Number.isFinite(H)||!Number.isInteger(Y))return[];return[{ref:X,createdAt:H,runCount:Y,...j.kind==="stash"||j.kind==="commit"?{kind:j.kind}:{}}]}),Z=Q.at(-1),W=$?.checkpointEnabled===!0?!0:void 0;if(!W&&Q.length===0)return;return{...W?{enabled:W}:{},...Z?{latest:Z}:{},history:Q}}function j$($){let{session:f}=$,J=Jz(f.metadata);return{version:1,sessionId:f.sessionId,source:f.source,status:f.status,createdAt:f.startedAt,updatedAt:f.updatedAt,endedAt:f.endedAt??null,exitCode:f.exitCode??null,interactive:f.interactive,workspace:{cwd:f.cwd,root:f.workspaceRoot},model:{providerId:f.provider,modelId:f.model},capabilities:{enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams},lineage:{...f.parentSessionId?{parentSessionId:f.parentSessionId}:{},...f.parentAgentId?{parentAgentId:f.parentAgentId}:{},...f.agentId?{agentId:f.agentId}:{},...f.conversationId?{conversationId:f.conversationId}:{},isSubagent:f.isSubagent},...f.teamName?{team:{name:f.teamName}}:{},...f.prompt?{prompt:f.prompt}:{},...J?{metadata:J}:{},...f.messagesPath?{artifacts:{messagesPath:f.messagesPath}}:{},...$.messages?{messages:Qz($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Q=Zz(J);return Q?{checkpoint:Q}:{}})()}}function gJ($){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 Q2($){if(!$)return;return JSON.parse(JSON.stringify($))}var Gz=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function FY($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function DY($){if(!$)return;let{userInstructionService:f,...J}=$;return JSON.parse(JSON.stringify(J))}function RY($){let f=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof f.agentId==="string"?f.agentId:"",conversationId:typeof f.conversationId==="string"?f.conversationId:"",iteration:typeof f.iteration==="number"?f.iteration:0,metadata:f.metadata&&typeof f.metadata==="object"&&!Array.isArray(f.metadata)?f.metadata:void 0}}function s1($,f,J){$.manifest.push(f),$.handlers.set(f.capabilityName,J)}function UY($,f){let J={manifest:[],handlers:new Map};for(let Z of Object.keys(f.toolExecutors??{}).filter(Kz)){let W=f.toolExecutors?.[Z];if(typeof W!=="function")continue;s1(J,{kind:"toolExecutor",executor:Z,capabilityName:`${Az}${Z}`},async({payload:j,abortSignal:X})=>{let H=Array.isArray(j.args)?[...j.args]:[],Y={...RY(j.context),signal:X};return{result:await W(...H,Y)}})}for(let Z of $?.extraTools??[])s1(J,{kind:"tool",name:Z.name,description:Z.description,inputSchema:Q2(Z.inputSchema)??{},...Z.lifecycle?{lifecycle:Q2(Z.lifecycle)}:{},capabilityName:`${Hz}${Z.name}`},async({payload:W,abortSignal:j,progress:X})=>{let H={...RY(W.context),signal:j};return{result:await Z.execute(W.input,{...H,emitUpdate:(V)=>{X({update:V})}})}});let Q=$?.hooks;if(Q)for(let Z of Gz){let W=Q[Z];if(typeof W!=="function")continue;s1(J,{kind:"hook",name:Z,capabilityName:`${Yz}${Z}`},async({payload:j})=>({control:await W(j.context)}))}if($?.compaction?.compact){let Z=$.compaction.compact;s1(J,{kind:"compaction",capabilityName:Xz,config:FY($.compaction)},async({payload:W})=>({result:await Z(W.context)}))}if($?.checkpoint?.createCheckpoint){let Z=$.checkpoint.createCheckpoint;s1(J,{kind:"checkpoint",capabilityName:jz,config:FY($.checkpoint)},async({payload:W})=>({result:await Z(W.context)}))}if($?.onConsecutiveMistakeLimitReached){let Z=$.onConsecutiveMistakeLimitReached;s1(J,{kind:"mistakeLimit",capabilityName:Vz},async({payload:W})=>({result:await Z(W.context)}))}if($?.userInstructionService){let Z=$.userInstructionService;s1(J,{kind:"userInstructionService",capabilityName:Bz},async()=>{return await Z.start().catch(()=>{}),{snapshot:{records:{skill:Z.listRecords("skill"),rule:Z.listRecords("rule"),workflow:Z.listRecords("workflow")},runtimeCommands:Z.listRuntimeCommands()}}})}return J}function Pz($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message;if($&&typeof $==="object"&&"message"in $){let f=$.message;if(typeof f==="string"&&f.trim())return f.trim()}return"Capability request was cancelled."}function Fz($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function Dz($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function Rz($){if(!$||typeof $!=="object"||Array.isArray($))return;let f=$,J=typeof f.inputTokens==="number"?f.inputTokens:void 0,Q=typeof f.outputTokens==="number"?f.outputTokens:void 0;if(J===void 0||Q===void 0)return;return{inputTokens:J,outputTokens:Q,cacheReadTokens:typeof f.cacheReadTokens==="number"?f.cacheReadTokens:0,cacheWriteTokens:typeof f.cacheWriteTokens==="number"?f.cacheWriteTokens:0,totalCost:typeof f.totalCost==="number"?f.totalCost:0}}function LY($){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 jQ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function B1($,f){return jQ($?.[f])??0}function Uz($){let f=$?.delta&&typeof $.delta==="object"?$.delta:void 0,J=$?.totals&&typeof $.totals==="object"?$.totals:void 0,Q=$?.agent&&typeof $.agent==="object"?$.agent:void 0,Z=Q?.teamRole==="teammate"||Q?.teamRole==="lead"?Q.teamRole:void 0;return{event:{type:"usage",agentId:typeof Q?.agentId==="string"?Q.agentId:void 0,conversationId:typeof Q?.conversationId==="string"?Q.conversationId:void 0,parentAgentId:typeof Q?.parentAgentId==="string"?Q.parentAgentId:void 0,inputTokens:B1(f,"inputTokens"),outputTokens:B1(f,"outputTokens"),cacheReadTokens:B1(f,"cacheReadTokens"),cacheWriteTokens:B1(f,"cacheWriteTokens"),cost:jQ(f?.totalCost),totalInputTokens:B1(J,"inputTokens"),totalOutputTokens:B1(J,"outputTokens"),totalCacheReadTokens:B1(J,"cacheReadTokens"),totalCacheWriteTokens:B1(J,"cacheWriteTokens"),totalCost:jQ(J?.totalCost)},teamAgentId:typeof Q?.teamAgentId==="string"?Q.teamAgentId:void 0,teamRole:Z}}function Lz($){let f=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,J=$?.reason??f?.finishReason,Q=Dz(J)?J:J==="failed"?"error":"completed",Z=Rz($?.usage??f?.usage);return{type:"done",reason:Q,text:typeof $?.text==="string"?$.text:typeof f?.text==="string"?f.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof f?.iterations==="number"?f.iterations:0,usage:Z}}function mJ($,f){return $.error?.message??`hub command failed: ${f}`}function U4($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function _Y($){let f=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof f?.parentSessionId==="string"?f.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof f?.agentId==="string"?f.agentId:void 0),parentAgentId:typeof f?.parentAgentId==="string"?f.parentAgentId:void 0,conversationId:typeof f?.conversationId==="string"?f.conversationId:void 0,isSubagent:typeof f?.isSubagent==="boolean"?f.isSubagent:!1,source:typeof f?.source==="string"?f.source:K0.CORE,pid:typeof f?.pid==="number"?f.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:U4($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:U4($.status)==="completed"?0:U4($.status)==="failed"?1:void 0,status:U4($.status),interactive:f?.interactive===!0,provider:typeof f?.provider==="string"?f.provider:"hub",model:typeof f?.model==="string"?f.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof f?.teamName==="string"?f.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??f?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??f?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??f?.enableTeams===!0,prompt:typeof f?.prompt==="string"?f.prompt:void 0,metadata:f,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof f?.messagesPath==="string"?f.messagesPath:void 0,hookPath:typeof f?.hookPath==="string"?f.hookPath:void 0}}function o1($){if(!$||typeof $!=="object"||Array.isArray($))return;let f=$;return f.version===1&&typeof f.sessionId==="string"?JSON.parse(JSON.stringify(f)):void 0}function Oz($){let f=o1($?.snapshot);if(f)return gJ(f);let J=$?.session;return J?_Y(J):void 0}function OY($,f,J){let Q=J?.workspaceRoot?.trim()||f.config.workspaceRoot||f.config.cwd;return y0.parse({version:1,session_id:$,source:f.source??K0.CORE,pid:process.pid,started_at:new Date(J?.createdAt??Date.now()).toISOString(),status:U4(J?.status),interactive:f.interactive===!0,provider:f.config.providerId,model:f.config.modelId,cwd:J?.cwd?.trim()||f.config.cwd,workspace_root:Q,team_name:f.config.teamName,enable_tools:f.config.enableTools,enable_spawn:f.config.enableSpawnAgent,enable_teams:f.config.enableAgentTeams,prompt:f.prompt?.trim()||void 0,metadata:f.sessionMetadata&&Object.keys(f.sessionMetadata).length>0?f.sessionMetadata:void 0})}function zY($,f){return y0.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??f.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class S${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new B4;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,f){this.clientContext=f,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:f?.workspaceRoot,cwd:f?.cwd},this.defaultCapabilities=F0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(J)=>this.requestPendingPromptsList(J),update:(J)=>this.requestPendingPromptUpdate(J),delete:(J)=>this.requestPendingPromptDelete(J)},this.client=this.createClient($.url)}createClient($){return new s0({...this.clientOptions,url:$})}async replaceClient($){let f=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(f.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!IJ($,"session.create"))return!1;let f=await xJ({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!f)return!1;return await this.replaceClient(f),!0}registerPlannedSession($,f,J){if(this.sessionCapabilities.set($,f),J.size>0)this.sessionClientContributionHandlers.set($,J);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let f=this.resolveCapabilities($),J=UY($.localRuntime,f),Q=$.config.sessionId?.trim()||PY(),Z=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:Q2({...$.config,sessionId:Q}),metadata:{...$.sessionMetadata??{},source:$.source??K0.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:{...J.manifest.length>0?{clientContributions:J.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:Q2($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(Q,f,J.handlers);let W;try{W=await Z()}catch(Y){if(this.cleanupPlannedSession(Q),await this.recoverLocalHubStartupDeadlock(Y)){this.registerPlannedSession(Q,f,J.handlers);try{W=await Z()}catch(V){throw this.cleanupPlannedSession(Q),V}}else throw Y}let j=o1(W.payload?.snapshot),X=W.payload?.session,H=(j?.sessionId??X?.sessionId)?.trim();if(!H)throw this.cleanupPlannedSession(Q),Error("Hub runtime did not return a session id.");if(H!==Q)this.cleanupPlannedSession(Q),this.registerPlannedSession(H,f,J.handlers);return{sessionId:H,manifest:j?zY(j,$):OY(H,$,X),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let f=$.sessionId.trim();if(!f)throw Error("sessionId is required");let J=$.restore?.messages!==!1;if(J&&!$.start)throw Error("start is required when restore.messages is true");let Q=$.start,Z=Q?this.resolveCapabilities(Q):void 0,W=Q?UY(Q.localRuntime,Z??{}):{manifest:[],handlers:new Map},j=Q?Q.config.sessionId?.trim()||PY():void 0;if(j&&Z)this.sessionCapabilities.set(j,Z);if(j&&W.handlers.size>0)this.sessionClientContributionHandlers.set(j,W.handlers),this.ensureSessionSubscription(j);let X;try{X=await this.client.command("session.restore",{sessionId:f,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Q?{workspaceRoot:Q.config.workspaceRoot?.trim()||Q.config.cwd,cwd:Q.config.cwd??$.cwd,sessionConfig:Q2({...Q.config,sessionId:j}),metadata:{...Q.sessionMetadata??{},source:Q.source??K0.CORE,provider:Q.config.providerId,model:Q.config.modelId,enableTools:Q.config.enableTools,enableSpawn:Q.config.enableSpawnAgent,enableTeams:Q.config.enableAgentTeams,teamName:Q.config.teamName,prompt:Q.prompt,interactive:Q.interactive===!0},runtimeOptions:{...W.manifest.length>0?{clientContributions:W.manifest}:{},...Q.localRuntime?.configExtensions?{configExtensions:Q.localRuntime.configExtensions}:{}},toolPolicies:Q2(Q.toolPolicies)}:{}},f)}catch(K){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw K}if(!X.ok){let K=typeof X.payload?.error==="string"?X.payload.error:"session.restore failed";if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error(K)}let H=o1(X.payload?.snapshot),Y=X.payload?.session,V=(H?.sessionId??Y?.sessionId)?.trim();if(J&&!V){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error("Hub checkpoint restore returned no session id")}if(V&&j&&V!==j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);if(V&&Z)this.sessionCapabilities.set(V,Z);if(V&&W.handlers.size>0)this.sessionClientContributionHandlers.set(V,W.handlers);if(V)this.ensureSessionSubscription(V);let A=Array.isArray(X.payload?.messages)?X.payload.messages:void 0,B=X.payload?.checkpoint;if(!B)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:V,startResult:V?{sessionId:V,manifest:H?zY(H,Q??{}):OY(V,Q??{},Y),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:A,checkpoint:B}}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 f=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(f.payload?.prompts)?f.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let f=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(f.payload?.prompts)?f.payload.prompts:[],prompt:f.payload?.prompt,updated:f.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let f=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(f.payload?.prompts)?f.payload.prompts:[],prompt:f.payload?.prompt,removed:f.payload?.removed===!0}}async getAccumulatedUsage($){let f=await this.client.command("session.get",{includeSnapshot:!0},$),J=o1(f.payload?.snapshot);if(J){let j=J.usage?{...J.usage}:void 0,X=J.aggregateUsage?{...J.aggregateUsage}:void 0;return j||X?{usage:j,aggregateUsage:X}:void 0}let Q=f.payload?.session,Z=LY(Q?.usage),W=LY(Q?.aggregateUsage);return Z||W?{usage:Z,aggregateUsage:W}:void 0}async abort($,f){await this.client.command("run.abort",{sessionId:$,reason:typeof f==="string"?f:void 0},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,f]of this.sessionSubscriptions){f();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 f=await this.client.command("session.get",void 0,$);return Oz(f.payload)}async listSessions($=100){let f=await this.client.command("session.list",{limit:$}),J=Array.isArray(f.payload?.snapshots)?f.payload.snapshots.flatMap((Z)=>{let W=o1(Z);return W?[gJ(W)]:[]}):[];if(J.length>0)return J;return(f.payload?.sessions??[]).map(_Y)}async listSettings($){let f=await this.client.command("settings.list",DY($));if(!f.ok)throw Error(mJ(f,"settings.list"));return f.payload?.snapshot}async toggleSetting($){let f=await this.client.command("settings.toggle",DY($));if(!f.ok)throw Error(mJ(f,"settings.toggle"));return{snapshot:f.payload?.snapshot,changedTypes:Array.isArray(f.payload?.changedTypes)?f.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,f){let J={...f.metadata??{}};if(typeof f.prompt==="string")J.prompt=f.prompt;if(typeof f.title==="string")J.title=f.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:J})).ok}}async readSessionMessages($){let f=$.trim();if(!f)return[];let J=await this.client.command("session.messages",{sessionId:f},f);if(!J.ok)throw Wz(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(mJ(J,"session.messages")),severity:J.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:f,errorCode:J.error?.code,runtimeAddress:this.runtimeAddress}}),Error(mJ(J,"session.messages"));let Q=J.payload?.messages;return Array.isArray(Q)?Q:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,f){return this.events.subscribe($,f)}ensureSessionSubscription($){let f=$.trim();if(!f||this.sessionSubscriptions.has(f))return;let J=this.client.subscribe((Q)=>{this.handleHubEvent(Q)},{sessionId:f});this.sessionSubscriptions.set(f,typeof J==="function"?J:()=>{})}disposeSessionSubscription($){let f=$.trim();if(!f)return;this.sessionSubscriptions.get(f)?.(),this.sessionSubscriptions.delete(f),this.agentDoneEmittedForCurrentRunBySession.delete(f)}resolveCapabilities($){return F0(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:Lz($.payload)}})}handleHubEvent($){let f=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($);return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($);return}if(!f)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(f);let J=o1($.payload?.snapshot),Q=$.payload?.session;if(J)this.events.emit({type:"session_snapshot",payload:{sessionId:f,snapshot:J}});this.events.emit({type:"status",payload:{sessionId:f,status:Q?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,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 J=typeof $.payload?.text==="string"?$.payload.text:"";if(!J)return;this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_start",contentType:"text",text:J}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let J=typeof $.payload?.text==="string"?$.payload.text:"",Q=$.payload?.redacted===!0;if(!J&&!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_start",contentType:"reasoning",reasoning:J,redacted:Q}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:f,payload:$.payload});return}case"usage.updated":{let J=Uz($.payload);this.events.emit({type:"agent_event",payload:{sessionId:f,event:J.event,teamAgentId:J.teamAgentId,teamRole:J.teamRole}});return}case"tool.started":{let J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(J&&this.pendingApprovalToolCallIds.delete(J))return;this.emitToolCallContentStart({sessionId:f,toolCallId:J,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(J)this.pendingApprovalToolCallIds.delete(J);this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"tool",toolCallId:J,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 J=o1($.payload?.snapshot),Q=$.payload?.session;if(J)this.events.emit({type:"session_snapshot",payload:{sessionId:f,snapshot:J}});this.events.emit({type:"status",payload:{sessionId:f,status:Q?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:f,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let J=$.payload?.prompt;if(!J)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:f,id:J.id,prompt:J.prompt,delivery:J.delivery,attachmentCount:J.attachmentCount}});return}case"run.completed":case"run.failed":case"run.aborted":{let J=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";this.emitAgentDoneIfNeeded({sessionId:f,payload:{...$.payload,reason:J}}),this.events.emit({type:"ended",payload:{sessionId:f,reason:J,ts:$.timestamp??Date.now()}});return}default:return}}async handleCapabilityRequest($){let f=$.sessionId?.trim();if(!f)return;let J=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(J&&J!==this.client.getClientId())return;let Q=typeof $.payload?.requestId==="string"?$.payload.requestId:"",Z=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!Q)return;let W=this.sessionClientContributionHandlers.get(f)?.get(Z);if(!W){await this.client.command("capability.respond",{requestId:Q,ok:!1,error:`No client contribution handler registered for capability ${Z} in session ${f}.`},f).catch(()=>{});return}let j=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},X=new AbortController;this.activeCapabilityAbortControllers.set(Q,X);let H=(Y)=>{this.client.command("capability.progress",{requestId:Q,payload:Y},f)};try{let Y=await W({payload:j,abortSignal:X.signal,progress:H});if(X.signal.aborted)return;await this.client.command("capability.respond",{requestId:Q,ok:!0,payload:Y},f)}catch(Y){if(X.signal.aborted)return;await this.client.command("capability.respond",{requestId:Q,ok:!1,error:Y instanceof Error?Y.message:String(Y)},f)}finally{this.activeCapabilityAbortControllers.delete(Q)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let f=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!f)return;let J=this.activeCapabilityAbortControllers.get(f);if(!J)return;J.abort(Pz($.payload.error))}async handleApprovalRequested($){let f=$.sessionId?.trim();if(!f)return;let J=this.sessionCapabilities.get(f)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!J)return;let Q=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",Z=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",W=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!Q||!Z||!W)return;let j=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},X=Fz($.payload?.inputJson);this.pendingApprovalToolCallIds.add(Z),this.emitToolCallContentStart({sessionId:f,toolCallId:Z,toolName:W,toolInput:X});let H=await Promise.resolve(J({sessionId:f,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:f,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:Z,toolName:W,input:X,policy:j})).catch((Y)=>({approved:!1,reason:Y instanceof Error?Y.message:`Tool approval request failed: ${String(Y)}`}));await this.client.command("approval.respond",{approvalId:Q,approved:H.approved,reason:H.reason},f).catch(()=>{})}}var TY={};q(TY,{RemoteRuntimeHost:()=>Z2});class Z2 extends S${constructor($){super({url:A1($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var NY={};q(NY,{SqliteSessionStore:()=>H$});import{existsSync as zz,mkdirSync as _z}from"node:fs";import{join as yz}from"node:path";import{asBool as L4,asOptionalString as X$,asString as C$,ensureSessionSchema as Tz,loadSqliteDb as Nz,nowIso as vJ,toBoolInt as O4}from"@cline/shared/db";import{resolveDbDataDir as Mz}from"@cline/shared/storage";class H${sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??Mz()}init(){this.getRawDb()}ensureSessionsDir(){if(!zz(this.sessionsDirPath))_z(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return yz(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=Nz(this.sessionDbPath());return Tz($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,f=[]){return this.getRawDb().prepare($).run(...f)}queryOne($,f=[]){return this.getRawDb().prepare($).get(...f)??void 0}queryAll($,f=[]){return this.getRawDb().prepare($).all(...f)}create($){let f=vJ();this.run(`INSERT OR REPLACE INTO sessions (
482
+ `,"utf8");try{return await f()}finally{await aH(J)}}catch(Z){if((Z instanceof Error&&"code"in Z?String(Z.code):"")!=="EEXIST")throw Z;let j=await XO(J),X=j?Date.now()-Date.parse(j.acquiredAt):nH+1;if(!j||!ZO(j.pid)||X>nH){await aH(J);continue}if(Date.now()>=Q)throw Error(`Timed out waiting for hub startup lock ${J}`);await WO(fO)}}async function R0($){try{let f=await fetch(i7($));if(!f.ok)return;return await f.json()}catch{return}}function t0($,f,J="/hub"){return new URL(`ws://${$}:${f}${J}`).toString()}function i7($){let f=new URL($);return f.protocol=f.protocol==="wss:"?"https:":"http:",f.pathname="/health",f.search="",f.toString()}function fY($){return tL($)}import{CLINE_HUB_DEV_PORT as HO,CLINE_HUB_PORT as YO,resolveClineBuildEnv as VO}from"@cline/shared";var AO="CLINE_HUB_HOST",BO="CLINE_HUB_PORT",KO="CLINE_HUB_PATHNAME",n7="127.0.0.1",a7=YO,t7="/hub";function JY($){return VO($)==="development"?HO:a7}function s7($={}){return($.env??process.env)[AO]?.trim()||n7}function $2($={}){let J=($.env??process.env)[BO]?.trim();if(!J)return JY($);let Q=Number.parseInt(J,10);if(!Number.isInteger(Q)||Q<1||Q>65535)return JY($);return Q}function o7($={}){return($.env??process.env)[KO]?.trim()||t7}function c0($={},f={}){return{host:$.host??s7(f),port:$.port??$2(f),pathname:$.pathname??o7(f)}}var GO="shared:cline";function QY($){let f=M$($.trim());return w$(`workspace:${f||$.trim()}`)}function Y0($=GO){return w$($)}var NO=8000,TO=200,MO=3000,qO=100,wO=[100,250,500,1000,2000],SO="--cline-hub-daemon";function CO($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function EO(){try{let $=OO(G4(),"logs","hub-daemon.log");return DO(LO($),{recursive:!0}),{fd:RO($,"a"),logPath:$}}catch{return}}function P4($){let f=$.buildId?.trim();return!!f&&f===Y1()}async function hO($,f){let J=Date.now()+f;while(Date.now()<J){if(!(await R0($).catch(()=>{return}))?.url)return!0;await new Promise((Z)=>setTimeout(Z,qO))}return!1}async function F4($,f){if(P4($))return;if(await D4($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}await hO($.url,MO),await v0(f).catch(()=>{return})}function bO(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return zO(new URL(`./entry.${$}`,import.meta.url))}function kO($,f){let J=bO(),Q=process.execPath?.trim();if(!Q)throw Error("unable to resolve runtime executable for hub daemon");let Z=UO(Q).toLowerCase().includes("bun"),W=J.startsWith("/$bunfs/"),j=Z&&J.toLowerCase().endsWith(".ts"),X=W?[SO]:[...j?["--conditions=development"]:[],J];return{launcher:Q,args:[...X,"--cwd",$,...CO(f)],cwd:$,env:{...yO(process.env),CLINE_NO_INTERACTIVE:"1",[_O]:"1"}}}function IO($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let J="message"in $?$.message:void 0;return typeof J==="string"&&J.includes("ETXTBSY")}function e7($,f={}){if(ZY())return;let J=kO($,f),Q=EO();try{PO(J.launcher,J.args,{detached:!0,stdio:Q?["ignore",Q.fd,Q.fd]:"ignore",env:J.env,cwd:J.cwd}).unref()}finally{if(Q)FO(Q.fd)}}async function f2($,f={}){for(let J=0;;J++)try{e7($,f);return}catch(Q){let Z=wO[J];if(!IO(Q)||Z===void 0)throw Q;await new Promise((W)=>setTimeout(W,Z))}}function kJ($,f={}){if(ZY())return;let J=Y0(),Q=f.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=c0(f),W=t0(Z.host,Z.port,Z.pathname);A0(J.discoveryPath).then(async(j)=>{if(j?.url){let V=await R0(j.url);if(V?.url&&P4(V)&&await W$(V.url,{authToken:j.authToken}))return;if(V?.url)await F4({...V,authToken:j.authToken},J.discoveryPath);else await v0(J.discoveryPath).catch(()=>{return})}let X=await R0(W);if(X?.url)await F4(X,J.discoveryPath);let Y=!Q&&Z.port!==0?{...Z,port:0}:Z;await f2($,Y)}).catch(()=>{})}async function WY($,f={}){let J=Y0(),Q=f.host!==void 0||f.port!==void 0||f.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=f.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=c0(f),j=t0(W.host,W.port,W.pathname),X=(K)=>{if(!Q)V1(K.url,K.authToken);return K},H=await A0(J.discoveryPath);if(H?.url){let K=await R0(H.url);if(K?.url&&P4(K)&&await W$(K.url,{authToken:H.authToken}))return X({url:K.url,authToken:H.authToken});if(K?.url)await F4({...K,authToken:H.authToken},J.discoveryPath);else await v0(J.discoveryPath).catch(()=>{return})}let Y=await R0(j);if(Y?.url)await F4(Y,J.discoveryPath);let A=!Z&&W.port!==0?{...W,port:0}:W;await f2($,A);let B=Date.now()+NO;while(Date.now()<B){let K=await A0(J.discoveryPath);if(K?.url){let R=await R0(K.url);if(R?.url&&P4(R)&&await W$(R.url,{authToken:K.authToken}))return X({url:R.url,authToken:K.authToken})}let G=await R0(j);if(G?.url&&!P4(G))await F4(G,J.discoveryPath);await new Promise((R)=>setTimeout(R,TO))}throw Error("Timed out waiting for detached hub startup.")}function mO(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function VY($){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((f)=>Buffer.from(f))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return VY($.data);return String($)}function vO($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function jY($){let f=$,J=vO(f.reason);return new z0("hub_connection_closed",f.code||J?`Hub connection closed (code=${f.code??0}${J?`, reason=${J}`:""})`:$Q,{closeCode:f.code,closeReason:J||void 0})}function cO($,f){if($ instanceof z0)return $;if($ instanceof Error)return new z0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new z0("hub_connect_failed",$.error.message);let J=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(J)return new z0("hub_connect_failed",J);let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new z0("hub_connect_failed",Q?`Failed to connect to hub at ${f.toString()} (${Q} event before socket open).`:`Failed to connect to hub at ${f.toString()}.`)}var uO=8000,dO=200,XY="*",HY=8000,lO="cline-hub-auth.",AY=new Map,BY=new Set,pO=3000,rO=3000,iO=100,$Q="Hub connection closed",nO=250,aO=5000,YY=0.5;class z0 extends Error{code;details;constructor($,f,J){super(f);this.code=$;this.details=J;this.name="HubTransportError"}}function QQ($){return $ instanceof z0}class J2 extends Error{command;code;constructor($,f,J){super(J);this.command=$;this.code=f;this.name="HubCommandError"}}function IJ($,f){return $ instanceof J2&&$.code==="hub_command_timeout"&&(f===void 0||$.command===f)}function KY($){let f=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),f)return f;let J=ZQ($.toString());return J?AY.get(J):void 0}function tO($){try{let J=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return J==="localhost"||J==="127.0.0.1"||J==="::1"}catch{return!1}}function ZQ($){if(!tO($))return;let f=new URL(A1($));return f.search="",f.hash="",f.toString()}function fQ($){let f=ZQ($);return!!f&&BY.has(f)}function V1($,f){let J=ZQ($);if(J){if(BY.add(J),f?.trim())AY.set(J,f)}return $}class s0{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new z0("hub_connection_closed",$Q);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),f=this.options.authToken?.trim()||KY($);$.hash="";let Q=new(mO())($.toString(),f?[`${lO}${f}`]:void 0);this.socket=Q;let Z=!1;this.connectPromise=new Promise((W,j)=>{let X=!1,H=setTimeout(()=>{if(X)return;X=!0,Z=!0,this.lastCloseError=new z0("hub_connect_timeout",`Timed out connecting to hub after ${HY}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Q.close()}catch{}j(this.lastCloseError)},HY);Q.addEventListener("open",()=>{if(X)return;X=!0,clearTimeout(H),W()}),Q.addEventListener("error",(Y)=>{if(X)return;X=!0,clearTimeout(H),this.lastCloseError=cO(Y,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)}),Q.addEventListener("close",(Y)=>{if(X)return;if(X=!0,clearTimeout(H),!Z)this.lastCloseError=jY(Y),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)})}),Q.addEventListener("message",(W)=>{this.handleFrame(JSON.parse(VY(W)))}),Q.addEventListener("close",(W)=>{if(this.socket!==Q)return;if(!Z)this.lastCloseError=jY(W),this.sawSocketClose=!0;this.registered=!1;for(let j of this.pendingReplies.values())j.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 W of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(W));this.reconnectAttempt=0}subscribe($,f){let J=f?.sessionId?.trim()||void 0,Q={listener:$,sessionId:J};return this.listeners.add(Q),this.adjustSubscriptionCount(J,1),()=>{if(!this.listeners.delete(Q))return;this.adjustSubscriptionCount(J,-1)}}async command($,f,J,Q){let Z=0,W=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,f,J,Q)}catch(j){if(!W||Z>=1||!await this.recoverLocalHubTransport(j))throw j;Z+=1}}async commandOnce($,f,J,Q){await this.connect();let Z=xO("hubreq_"),W=gO($,Q?.timeoutMs),j=new Promise((H,Y)=>{let V=W===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(Z))return;Y(new J2($,"hub_command_timeout",`Hub command ${$} timed out after ${W}ms (hub=${this.currentUrl}, requestId=${Z}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},W);this.pendingReplies.set(Z,{resolve:(A)=>{if(V)clearTimeout(V);H(A)},reject:(A)=>{if(V)clearTimeout(V);Y(A)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:Z,clientId:this.clientId,sessionId:J,timeoutMs:W,payload:f}})}catch(H){throw this.pendingReplies.delete(Z),H}let X=await j;if(!X.ok)throw new J2($,X.error?.code,X.error?.message??`Hub command ${$} failed`);return X}async recoverLocalHubTransport($){if(!fQ(this.currentUrl)||!QQ($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let f=await t1({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!f)return!1;return this.currentUrl=f,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(nO*2**this.reconnectAttempt,aO),f=Math.round($*(1-YY)+Math.random()*$*YY);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},f)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!fQ(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await t1({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 z0("hub_connection_closed",$Q),this.sawSocketClose=!1;for(let f of this.pendingReplies.values())f.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 z0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,f){this.sendFrame({kind:$,clientId:this.clientId,...f?{sessionId:f}:{}})}adjustSubscriptionCount($,f){let J=this.subscriptionKeyForSessionId($),Q=(this.subscriptionCounts.get(J)??0)+f;if(Q<=0){if(this.subscriptionCounts.delete(J),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(f<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(J,Q),f>0&&Q===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??XY}subscriptionSessionIdFromKey($){return $===XY?void 0:$}handleFrame($){switch($.kind){case"reply":{let f=$.envelope.requestId;if(!f)return;let J=this.pendingReplies.get(f);if(!J)return;this.pendingReplies.delete(f),J.resolve($.envelope);return}case"event":for(let f of this.listeners){if(f.sessionId&&f.sessionId!==$.envelope.sessionId?.trim())continue;f.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function A1($){let f=new URL($);if(f.protocol==="http:")f.protocol="ws:";else if(f.protocol==="https:")f.protocol="wss:";return f.toString()}async function W$($,f){let J=new s0({url:$,authToken:f?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:f?.workspaceRoot,cwd:f?.cwd});try{return await J.connect(),!0}catch{return!1}finally{J.close()}}async function JQ($,f){let J=A1($),Q=await R0(J);if(!Q)return{status:"unreachable",url:J};let Z=Y1(),W=Q.buildId?.trim();if(!W||W!==Z)return{status:"build_mismatch",url:J};if(f?.verifyConnection===!0&&!await W$(J,{workspaceRoot:f.workspaceRoot,cwd:f.cwd,authToken:f.authToken}))return{status:"unreachable",url:J};return{status:"compatible",url:J}}async function sO($){let f=Date.now()+uO;while(Date.now()<f){let J=await A0($.discoveryPath);if(J?.url){let Q=await JQ(J.url,{verifyConnection:!0,authToken:J.authToken});if(Q.status==="compatible")return V1(Q.url,J.authToken)}await new Promise((Q)=>setTimeout(Q,dO))}return}async function oO($){let f=Date.now()+rO;while(Date.now()<f){if(!(await R0($).catch(()=>{return}))?.url)return!0;await new Promise((Q)=>setTimeout(Q,iO))}return!1}function eO($,f){try{return A1($)===A1(f)}catch{return!1}}function $z($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((J)=>{if(!J||typeof J!=="object")return!1;let Q=J;if(Q.status==="running"||Q.status==="idle")return!0;return Array.isArray(Q.participants)&&Q.participants.length>0})}async function fz($,f,J){let Q=new s0({url:$,authToken:f,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd});try{let Z=await Q.command("session.list",{limit:500},void 0,{timeoutMs:pO});return!$z(Z.payload)}catch{return!1}finally{await Q.dispose().catch(()=>{return})}}async function R4($={}){if($.endpoint?.trim()){let Z=await JQ($.endpoint);return Z.status==="compatible"?Z.url:void 0}let f=Y0(),J=await A0(f.discoveryPath);if(!J?.url)return;let Q=await JQ(J.url);if(Q.status==="compatible")return V1(Q.url,J.authToken);if(Q.status==="build_mismatch")await v0(f.discoveryPath).catch(()=>{return});return}async function t1($={}){let f=await R4($);if(f&&await W$(f,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return f;if($.endpoint?.trim())return;let J=Y0();return await f2($.workspaceRoot??process.cwd()),await sO(J)}async function D4($,f){let J=new URL($),Q=f?.trim()||KY(J);if(J.protocol==="ws:")J.protocol="http:";else if(J.protocol==="wss:")J.protocol="https:";return J.pathname="/shutdown",J.hash="",(await fetch(J,{method:"POST",headers:Q?{authorization:`Bearer ${Q}`}:void 0})).ok}async function WQ(){let $=Y0(),f=await A0($.discoveryPath);if(!f?.url)return!1;try{if(await D4(f.url,f.authToken))return!0}catch{}return!1}async function xJ($){if(!fQ($.url))return;let f=Y0(),J=await A0(f.discoveryPath);if(!J?.url||!eO(J.url,$.url))return;if(!await fz(J.url,J.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await WQ())return;if(!await oO(J.url))return;return await v0(f.discoveryPath).catch(()=>{return}),await t1({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var yY={};q(yY,{HubRuntimeHost:()=>S$});import{captureSdkError as Wz,createSessionId as PY,HUB_CHECKPOINT_CAPABILITY as jz,HUB_COMPACTION_CAPABILITY as Xz,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Hz,HUB_HOOK_CAPABILITY_PREFIX as Yz,HUB_MISTAKE_LIMIT_CAPABILITY as Vz,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Az,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Bz,isHubToolExecutorName as Kz}from"@cline/shared";var GY={};q(GY,{createCoreSessionSnapshot:()=>j$,coreSessionSnapshotToRecord:()=>gJ});function Jz($){return $?JSON.parse(JSON.stringify($)):void 0}function Qz($){return $?JSON.parse(JSON.stringify($)):void 0}function Zz($){let f=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,Q=(Array.isArray(f?.history)?f.history:[]).filter((j)=>!!j&&typeof j==="object"&&!Array.isArray(j)).flatMap((j)=>{let X=typeof j.ref==="string"?j.ref.trim():"",H=Number(j.createdAt),Y=Number(j.runCount);if(!X||!Number.isFinite(H)||!Number.isInteger(Y))return[];return[{ref:X,createdAt:H,runCount:Y,...j.kind==="stash"||j.kind==="commit"?{kind:j.kind}:{}}]}),Z=Q.at(-1),W=$?.checkpointEnabled===!0?!0:void 0;if(!W&&Q.length===0)return;return{...W?{enabled:W}:{},...Z?{latest:Z}:{},history:Q}}function j$($){let{session:f}=$,J=Jz(f.metadata);return{version:1,sessionId:f.sessionId,source:f.source,status:f.status,createdAt:f.startedAt,updatedAt:f.updatedAt,endedAt:f.endedAt??null,exitCode:f.exitCode??null,interactive:f.interactive,workspace:{cwd:f.cwd,root:f.workspaceRoot},model:{providerId:f.provider,modelId:f.model},capabilities:{enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams},lineage:{...f.parentSessionId?{parentSessionId:f.parentSessionId}:{},...f.parentAgentId?{parentAgentId:f.parentAgentId}:{},...f.agentId?{agentId:f.agentId}:{},...f.conversationId?{conversationId:f.conversationId}:{},isSubagent:f.isSubagent},...f.teamName?{team:{name:f.teamName}}:{},...f.prompt?{prompt:f.prompt}:{},...J?{metadata:J}:{},...f.messagesPath?{artifacts:{messagesPath:f.messagesPath}}:{},...$.messages?{messages:Qz($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Q=Zz(J);return Q?{checkpoint:Q}:{}})()}}function gJ($){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 Q2($){if(!$)return;return JSON.parse(JSON.stringify($))}var Gz=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function FY($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function DY($){if(!$)return;let{userInstructionService:f,...J}=$;return JSON.parse(JSON.stringify(J))}function RY($){let f=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof f.agentId==="string"?f.agentId:"",conversationId:typeof f.conversationId==="string"?f.conversationId:"",iteration:typeof f.iteration==="number"?f.iteration:0,metadata:f.metadata&&typeof f.metadata==="object"&&!Array.isArray(f.metadata)?f.metadata:void 0}}function s1($,f,J){$.manifest.push(f),$.handlers.set(f.capabilityName,J)}function UY($,f){let J={manifest:[],handlers:new Map};for(let Z of Object.keys(f.toolExecutors??{}).filter(Kz)){let W=f.toolExecutors?.[Z];if(typeof W!=="function")continue;s1(J,{kind:"toolExecutor",executor:Z,capabilityName:`${Az}${Z}`},async({payload:j,abortSignal:X})=>{let H=Array.isArray(j.args)?[...j.args]:[],Y={...RY(j.context),signal:X};return{result:await W(...H,Y)}})}for(let Z of $?.extraTools??[])s1(J,{kind:"tool",name:Z.name,description:Z.description,inputSchema:Q2(Z.inputSchema)??{},...Z.lifecycle?{lifecycle:Q2(Z.lifecycle)}:{},capabilityName:`${Hz}${Z.name}`},async({payload:W,abortSignal:j,progress:X})=>{let H={...RY(W.context),signal:j};return{result:await Z.execute(W.input,{...H,emitUpdate:(V)=>{X({update:V})}})}});let Q=$?.hooks;if(Q)for(let Z of Gz){let W=Q[Z];if(typeof W!=="function")continue;s1(J,{kind:"hook",name:Z,capabilityName:`${Yz}${Z}`},async({payload:j})=>({control:await W(j.context)}))}if($?.compaction?.compact){let Z=$.compaction.compact;s1(J,{kind:"compaction",capabilityName:Xz,config:FY($.compaction)},async({payload:W})=>({result:await Z(W.context)}))}if($?.checkpoint?.createCheckpoint){let Z=$.checkpoint.createCheckpoint;s1(J,{kind:"checkpoint",capabilityName:jz,config:FY($.checkpoint)},async({payload:W})=>({result:await Z(W.context)}))}if($?.onConsecutiveMistakeLimitReached){let Z=$.onConsecutiveMistakeLimitReached;s1(J,{kind:"mistakeLimit",capabilityName:Vz},async({payload:W})=>({result:await Z(W.context)}))}if($?.userInstructionService){let Z=$.userInstructionService;s1(J,{kind:"userInstructionService",capabilityName:Bz},async()=>{return await Z.start().catch(()=>{}),{snapshot:{records:{skill:Z.listRecords("skill"),rule:Z.listRecords("rule"),workflow:Z.listRecords("workflow")},runtimeCommands:Z.listRuntimeCommands()}}})}return J}function Pz($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message;if($&&typeof $==="object"&&"message"in $){let f=$.message;if(typeof f==="string"&&f.trim())return f.trim()}return"Capability request was cancelled."}function Fz($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function Dz($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function Rz($){if(!$||typeof $!=="object"||Array.isArray($))return;let f=$,J=typeof f.inputTokens==="number"?f.inputTokens:void 0,Q=typeof f.outputTokens==="number"?f.outputTokens:void 0;if(J===void 0||Q===void 0)return;return{inputTokens:J,outputTokens:Q,cacheReadTokens:typeof f.cacheReadTokens==="number"?f.cacheReadTokens:0,cacheWriteTokens:typeof f.cacheWriteTokens==="number"?f.cacheWriteTokens:0,totalCost:typeof f.totalCost==="number"?f.totalCost:0}}function LY($){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 jQ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function B1($,f){return jQ($?.[f])??0}function Uz($){let f=$?.delta&&typeof $.delta==="object"?$.delta:void 0,J=$?.totals&&typeof $.totals==="object"?$.totals:void 0,Q=$?.agent&&typeof $.agent==="object"?$.agent:void 0,Z=Q?.teamRole==="teammate"||Q?.teamRole==="lead"?Q.teamRole:void 0;return{event:{type:"usage",agentId:typeof Q?.agentId==="string"?Q.agentId:void 0,conversationId:typeof Q?.conversationId==="string"?Q.conversationId:void 0,parentAgentId:typeof Q?.parentAgentId==="string"?Q.parentAgentId:void 0,inputTokens:B1(f,"inputTokens"),outputTokens:B1(f,"outputTokens"),cacheReadTokens:B1(f,"cacheReadTokens"),cacheWriteTokens:B1(f,"cacheWriteTokens"),cost:jQ(f?.totalCost),totalInputTokens:B1(J,"inputTokens"),totalOutputTokens:B1(J,"outputTokens"),totalCacheReadTokens:B1(J,"cacheReadTokens"),totalCacheWriteTokens:B1(J,"cacheWriteTokens"),totalCost:jQ(J?.totalCost)},teamAgentId:typeof Q?.teamAgentId==="string"?Q.teamAgentId:void 0,teamRole:Z}}function Lz($){let f=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,J=$?.reason??f?.finishReason,Q=Dz(J)?J:J==="failed"?"error":"completed",Z=Rz($?.usage??f?.usage);return{type:"done",reason:Q,text:typeof $?.text==="string"?$.text:typeof f?.text==="string"?f.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof f?.iterations==="number"?f.iterations:0,usage:Z}}function mJ($,f){return $.error?.message??`hub command failed: ${f}`}function U4($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function _Y($){let f=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof f?.parentSessionId==="string"?f.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof f?.agentId==="string"?f.agentId:void 0),parentAgentId:typeof f?.parentAgentId==="string"?f.parentAgentId:void 0,conversationId:typeof f?.conversationId==="string"?f.conversationId:void 0,isSubagent:typeof f?.isSubagent==="boolean"?f.isSubagent:!1,source:typeof f?.source==="string"?f.source:K0.CORE,pid:typeof f?.pid==="number"?f.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:U4($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:U4($.status)==="completed"?0:U4($.status)==="failed"?1:void 0,status:U4($.status),interactive:f?.interactive===!0,provider:typeof f?.provider==="string"?f.provider:"hub",model:typeof f?.model==="string"?f.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof f?.teamName==="string"?f.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??f?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??f?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??f?.enableTeams===!0,prompt:typeof f?.prompt==="string"?f.prompt:void 0,metadata:f,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof f?.messagesPath==="string"?f.messagesPath:void 0,hookPath:typeof f?.hookPath==="string"?f.hookPath:void 0}}function o1($){if(!$||typeof $!=="object"||Array.isArray($))return;let f=$;return f.version===1&&typeof f.sessionId==="string"?JSON.parse(JSON.stringify(f)):void 0}function Oz($){let f=o1($?.snapshot);if(f)return gJ(f);let J=$?.session;return J?_Y(J):void 0}function OY($,f,J){let Q=J?.workspaceRoot?.trim()||f.config.workspaceRoot||f.config.cwd;return y0.parse({version:1,session_id:$,source:f.source??K0.CORE,pid:process.pid,started_at:new Date(J?.createdAt??Date.now()).toISOString(),status:U4(J?.status),interactive:f.interactive===!0,provider:f.config.providerId,model:f.config.modelId,cwd:J?.cwd?.trim()||f.config.cwd,workspace_root:Q,team_name:f.config.teamName,enable_tools:f.config.enableTools,enable_spawn:f.config.enableSpawnAgent,enable_teams:f.config.enableAgentTeams,prompt:f.prompt?.trim()||void 0,metadata:f.sessionMetadata&&Object.keys(f.sessionMetadata).length>0?f.sessionMetadata:void 0})}function zY($,f){return y0.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??f.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class S${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new B4;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,f){this.clientContext=f,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:f?.workspaceRoot,cwd:f?.cwd},this.defaultCapabilities=F0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(J)=>this.requestPendingPromptsList(J),update:(J)=>this.requestPendingPromptUpdate(J),delete:(J)=>this.requestPendingPromptDelete(J)},this.client=this.createClient($.url)}createClient($){return new s0({...this.clientOptions,url:$})}async replaceClient($){let f=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(f.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!IJ($,"session.create"))return!1;let f=await xJ({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!f)return!1;return await this.replaceClient(f),!0}registerPlannedSession($,f,J){if(this.sessionCapabilities.set($,f),J.size>0)this.sessionClientContributionHandlers.set($,J);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let f=this.resolveCapabilities($),J=UY($.localRuntime,f),Q=$.config.sessionId?.trim()||PY(),Z=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:Q2({...$.config,sessionId:Q}),metadata:{...$.sessionMetadata??{},source:$.source??K0.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:{...J.manifest.length>0?{clientContributions:J.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:Q2($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(Q,f,J.handlers);let W;try{W=await Z()}catch(Y){if(this.cleanupPlannedSession(Q),await this.recoverLocalHubStartupDeadlock(Y)){this.registerPlannedSession(Q,f,J.handlers);try{W=await Z()}catch(V){throw this.cleanupPlannedSession(Q),V}}else throw Y}let j=o1(W.payload?.snapshot),X=W.payload?.session,H=(j?.sessionId??X?.sessionId)?.trim();if(!H)throw this.cleanupPlannedSession(Q),Error("Hub runtime did not return a session id.");if(H!==Q)this.cleanupPlannedSession(Q),this.registerPlannedSession(H,f,J.handlers);return{sessionId:H,manifest:j?zY(j,$):OY(H,$,X),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let f=$.sessionId.trim();if(!f)throw Error("sessionId is required");let J=$.restore?.messages!==!1;if(J&&!$.start)throw Error("start is required when restore.messages is true");let Q=$.start,Z=Q?this.resolveCapabilities(Q):void 0,W=Q?UY(Q.localRuntime,Z??{}):{manifest:[],handlers:new Map},j=Q?Q.config.sessionId?.trim()||PY():void 0;if(j&&Z)this.sessionCapabilities.set(j,Z);if(j&&W.handlers.size>0)this.sessionClientContributionHandlers.set(j,W.handlers),this.ensureSessionSubscription(j);let X;try{X=await this.client.command("session.restore",{sessionId:f,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Q?{workspaceRoot:Q.config.workspaceRoot?.trim()||Q.config.cwd,cwd:Q.config.cwd??$.cwd,sessionConfig:Q2({...Q.config,sessionId:j}),metadata:{...Q.sessionMetadata??{},source:Q.source??K0.CORE,provider:Q.config.providerId,model:Q.config.modelId,enableTools:Q.config.enableTools,enableSpawn:Q.config.enableSpawnAgent,enableTeams:Q.config.enableAgentTeams,teamName:Q.config.teamName,prompt:Q.prompt,interactive:Q.interactive===!0},runtimeOptions:{...W.manifest.length>0?{clientContributions:W.manifest}:{},...Q.localRuntime?.configExtensions?{configExtensions:Q.localRuntime.configExtensions}:{}},toolPolicies:Q2(Q.toolPolicies)}:{}},f)}catch(K){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw K}if(!X.ok){let K=typeof X.payload?.error==="string"?X.payload.error:"session.restore failed";if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error(K)}let H=o1(X.payload?.snapshot),Y=X.payload?.session,V=(H?.sessionId??Y?.sessionId)?.trim();if(J&&!V){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error("Hub checkpoint restore returned no session id")}if(V&&j&&V!==j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);if(V&&Z)this.sessionCapabilities.set(V,Z);if(V&&W.handlers.size>0)this.sessionClientContributionHandlers.set(V,W.handlers);if(V)this.ensureSessionSubscription(V);let A=Array.isArray(X.payload?.messages)?X.payload.messages:void 0,B=X.payload?.checkpoint;if(!B)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:V,startResult:V?{sessionId:V,manifest:H?zY(H,Q??{}):OY(V,Q??{},Y),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:A,checkpoint:B}}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 f=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(f.payload?.prompts)?f.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let f=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(f.payload?.prompts)?f.payload.prompts:[],prompt:f.payload?.prompt,updated:f.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let f=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(f.payload?.prompts)?f.payload.prompts:[],prompt:f.payload?.prompt,removed:f.payload?.removed===!0}}async getAccumulatedUsage($){let f=await this.client.command("session.get",{includeSnapshot:!0},$),J=o1(f.payload?.snapshot);if(J){let j=J.usage?{...J.usage}:void 0,X=J.aggregateUsage?{...J.aggregateUsage}:void 0;return j||X?{usage:j,aggregateUsage:X}:void 0}let Q=f.payload?.session,Z=LY(Q?.usage),W=LY(Q?.aggregateUsage);return Z||W?{usage:Z,aggregateUsage:W}:void 0}async abort($,f){await this.client.command("run.abort",{sessionId:$,reason:typeof f==="string"?f:void 0},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,f]of this.sessionSubscriptions){f();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 f=await this.client.command("session.get",void 0,$);return Oz(f.payload)}async listSessions($=100){let f=await this.client.command("session.list",{limit:$}),J=Array.isArray(f.payload?.snapshots)?f.payload.snapshots.flatMap((Z)=>{let W=o1(Z);return W?[gJ(W)]:[]}):[];if(J.length>0)return J;return(f.payload?.sessions??[]).map(_Y)}async listSettings($){let f=await this.client.command("settings.list",DY($));if(!f.ok)throw Error(mJ(f,"settings.list"));return f.payload?.snapshot}async toggleSetting($){let f=await this.client.command("settings.toggle",DY($));if(!f.ok)throw Error(mJ(f,"settings.toggle"));return{snapshot:f.payload?.snapshot,changedTypes:Array.isArray(f.payload?.changedTypes)?f.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,f){let J={...f.metadata??{}};if(typeof f.prompt==="string")J.prompt=f.prompt;if(typeof f.title==="string")J.title=f.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:J})).ok}}async readSessionMessages($){let f=$.trim();if(!f)return[];let J=await this.client.command("session.messages",{sessionId:f},f);if(!J.ok)throw Wz(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(mJ(J,"session.messages")),severity:J.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:f,errorCode:J.error?.code,runtimeAddress:this.runtimeAddress}}),Error(mJ(J,"session.messages"));let Q=J.payload?.messages;return Array.isArray(Q)?Q:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,f){return this.events.subscribe($,f)}ensureSessionSubscription($){let f=$.trim();if(!f||this.sessionSubscriptions.has(f))return;let J=this.client.subscribe((Q)=>{this.handleHubEvent(Q)},{sessionId:f});this.sessionSubscriptions.set(f,typeof J==="function"?J:()=>{})}disposeSessionSubscription($){let f=$.trim();if(!f)return;this.sessionSubscriptions.get(f)?.(),this.sessionSubscriptions.delete(f),this.agentDoneEmittedForCurrentRunBySession.delete(f)}resolveCapabilities($){return F0(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:Lz($.payload)}})}handleHubEvent($){let f=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($);return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($);return}if(!f)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(f);let J=o1($.payload?.snapshot),Q=$.payload?.session;if(J)this.events.emit({type:"session_snapshot",payload:{sessionId:f,snapshot:J}});this.events.emit({type:"status",payload:{sessionId:f,status:Q?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,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 J=typeof $.payload?.text==="string"?$.payload.text:"";if(!J)return;this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_start",contentType:"text",text:J}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let J=typeof $.payload?.text==="string"?$.payload.text:"",Q=$.payload?.redacted===!0;if(!J&&!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_start",contentType:"reasoning",reasoning:J,redacted:Q}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:f,payload:$.payload});return}case"usage.updated":{let J=Uz($.payload);this.events.emit({type:"agent_event",payload:{sessionId:f,event:J.event,teamAgentId:J.teamAgentId,teamRole:J.teamRole}});return}case"tool.started":{let J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(J&&this.pendingApprovalToolCallIds.delete(J))return;this.emitToolCallContentStart({sessionId:f,toolCallId:J,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(J)this.pendingApprovalToolCallIds.delete(J);this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"tool",toolCallId:J,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 J=o1($.payload?.snapshot),Q=$.payload?.session;if(J)this.events.emit({type:"session_snapshot",payload:{sessionId:f,snapshot:J}});this.events.emit({type:"status",payload:{sessionId:f,status:Q?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:f,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let J=$.payload?.prompt;if(!J)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:f,id:J.id,prompt:J.prompt,delivery:J.delivery,attachmentCount:J.attachmentCount}});return}case"run.completed":case"run.failed":case"run.aborted":{let J=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";this.emitAgentDoneIfNeeded({sessionId:f,payload:{...$.payload,reason:J}}),this.events.emit({type:"ended",payload:{sessionId:f,reason:J,ts:$.timestamp??Date.now()}});return}default:return}}async handleCapabilityRequest($){let f=$.sessionId?.trim();if(!f)return;let J=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(J&&J!==this.client.getClientId())return;let Q=typeof $.payload?.requestId==="string"?$.payload.requestId:"",Z=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!Q)return;let W=this.sessionClientContributionHandlers.get(f)?.get(Z);if(!W){await this.client.command("capability.respond",{requestId:Q,ok:!1,error:`No client contribution handler registered for capability ${Z} in session ${f}.`},f).catch(()=>{});return}let j=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},X=new AbortController;this.activeCapabilityAbortControllers.set(Q,X);let H=(Y)=>{this.client.command("capability.progress",{requestId:Q,payload:Y},f)};try{let Y=await W({payload:j,abortSignal:X.signal,progress:H});if(X.signal.aborted)return;await this.client.command("capability.respond",{requestId:Q,ok:!0,payload:Y},f)}catch(Y){if(X.signal.aborted)return;await this.client.command("capability.respond",{requestId:Q,ok:!1,error:Y instanceof Error?Y.message:String(Y)},f)}finally{this.activeCapabilityAbortControllers.delete(Q)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let f=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!f)return;let J=this.activeCapabilityAbortControllers.get(f);if(!J)return;J.abort(Pz($.payload.error))}async handleApprovalRequested($){let f=$.sessionId?.trim();if(!f)return;let J=this.sessionCapabilities.get(f)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!J)return;let Q=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",Z=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",W=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!Q||!Z||!W)return;let j=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},X=Fz($.payload?.inputJson);this.pendingApprovalToolCallIds.add(Z),this.emitToolCallContentStart({sessionId:f,toolCallId:Z,toolName:W,toolInput:X});let H=await Promise.resolve(J({sessionId:f,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:f,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:Z,toolName:W,input:X,policy:j})).catch((Y)=>({approved:!1,reason:Y instanceof Error?Y.message:`Tool approval request failed: ${String(Y)}`}));await this.client.command("approval.respond",{approvalId:Q,approved:H.approved,reason:H.reason},f).catch(()=>{})}}var NY={};q(NY,{RemoteRuntimeHost:()=>Z2});class Z2 extends S${constructor($){super({url:A1($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var TY={};q(TY,{SqliteSessionStore:()=>H$});import{existsSync as zz,mkdirSync as _z}from"node:fs";import{join as yz}from"node:path";import{asBool as L4,asOptionalString as X$,asString as C$,ensureSessionSchema as Nz,loadSqliteDb as Tz,nowIso as vJ,toBoolInt as O4}from"@cline/shared/db";import{resolveDbDataDir as Mz}from"@cline/shared/storage";class H${sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??Mz()}init(){this.getRawDb()}ensureSessionsDir(){if(!zz(this.sessionsDirPath))_z(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return yz(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=Tz(this.sessionDbPath());return Nz($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,f=[]){return this.getRawDb().prepare($).run(...f)}queryOne($,f=[]){return this.getRawDb().prepare($).get(...f)??void 0}queryAll($,f=[]){return this.getRawDb().prepare($).all(...f)}create($){let f=vJ();this.run(`INSERT OR REPLACE INTO sessions (
483
483
  session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
484
484
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
485
485
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
@@ -556,9 +556,9 @@ ${Z}`,$.config.mode)}function _4($,f){return f_($,f==="plan"?"plan":f==="yolo"?"
556
556
  provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
557
557
  parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
558
558
  metadata_json, transcript_path, hook_path, messages_path, updated_at
559
- ) 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,s()])}}function A_($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let f=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(f==="local"||f==="hub"||f==="remote")return f;return"auto"}var y4,T4;function B_($,f){if($!=="auto"&&$!=="hub")return;if(f.hub?.endpoint?.trim())return;kJ(f.hub?.workspaceRoot?.trim()||f.hub?.cwd?.trim()||process.cwd())}async function K_($){await $.reconcileDeadSessions?.().catch(()=>{})}function rY($){try{let f=new H$;return f.init(),new V$(f,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(f){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),pY($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:f,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new LQ(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function lY($,f,J){return new A$({sessionService:J??$.sessionService??rY($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:f,fetch:$.fetch})}async function yQ($){if(y4)return y4;if(T4)return await T4;return T4=(async()=>{return y4=rY($),await K_(y4),y4})().finally(()=>{T4=void 0}),await T4}async function Y2($){let f=e1($.distinctId);$.telemetry?.setDistinctId(f);let J=A_($);if(B_(J,$),J==="remote"){let Q=$.remote?.endpoint?.trim();if(!Q)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:Q}),new Z2({endpoint:Q,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(J==="hub"){let Q=$.hub?.endpoint?.trim(),Z=Q||await t1({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!Z)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:Z,explicitEndpoint:Q||void 0}),new S$({url:Z,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(J==="auto"){let Q=await R4({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(Q){$.logger?.log("Using discovered local hub runtime host",{url:Q});let Z=new S$({url:Q,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await Z.connect(),Z}catch(W){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:W}),pY($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:W,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),lY($,f)}return lY($,f)}class N4{clientName;runtimeAddress;automation;settings;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,f,J,Q,Z,W,j,X,H){this.clientName=f,this.runtimeAddress=J,this.host=$,this.prepare=Q,this.capabilities=Z,this.logger=W,this.telemetry=j,this.distinctId=X,this.settings=KH($),this.pendingPrompts=GH($),this.automation=new Y7(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=H?new A4({workspaceRoot:H.workspaceRoot??process.cwd(),specs:{cronSpecsDir:H.cronSpecsDir??H.cronDir,scope:TX(H.cronScope),workspaceRoot:H.workspaceRoot},runtimeHandlers:NX({host:$,getExtensionContext:()=>VJ({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:H.dbPath,logger:H.logger,pollIntervalMs:H.pollIntervalMs,claimLeaseSeconds:H.claimLeaseSeconds,globalMaxConcurrency:H.globalMaxConcurrency,watcherDebounceMs:H.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((Y)=>{if(Y.type!=="ended")return;this.disposeSessionBootstrap(Y.payload.sessionId)})}static async create($={}){let f=F0($.capabilities),J=await Y2({...$,capabilities:f}),Q=yX($.automation),Z=new N4(J,$.clientName,J.runtimeAddress,$.prepare,f,$.logger,$.telemetry,$.distinctId,Q?{...Q,logger:$.logger}:void 0);if(Q&&Q.autoStart!==!1)await Z.automation.start();return Z}async disposeSessionBootstrap($){let f=this.activeSessionBootstraps.get($);if(!f)return;this.activeSessionBootstraps.delete($),await Promise.resolve(f.dispose?.())}async start($){let f=FH($),J=await this.prepare?.(f);try{let Q=J?await J.applyToStartSessionInput(f):f,Z=await this.host.startSession(O7(Q,{defaultCapabilities:this.capabilities,withExtensionContext:(W)=>VJ({automationService:this.automationService,automation:this.automation,context:W,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(J)if(await this.host.getSession(Z.sessionId))this.activeSessionBootstraps.set(Z.sessionId,J);else await Promise.resolve(J.dispose?.());return DH({input:Q,sessionId:Z.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),Z}catch(Q){throw await Promise.resolve(J?.dispose?.()),Q}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let f=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(f.map((J)=>this.disposeSessionBootstrap(J)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await CJ(this.host,$);list=async($=200,f={})=>await this.listHistory({...f,limit:$});delete=async($)=>{let f=await this.host.deleteSession($);if(f)await this.disposeSessionBootstrap($);return f};update=(...$)=>this.host.updateSession(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let f=$.start?O7($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(J)=>VJ({automationService:this.automationService,automation:this.automation,context:J,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:f})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,f){return this.host.subscribe($,f)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}var aY={};q(aY,{resolvePluginConfigSearchPaths:()=>B8,resolveAndLoadAgentPlugins:()=>hf,resolveAgentPluginPaths:()=>h1,loadAgentPluginsFromPathsWithDiagnostics:()=>N$,loadAgentPluginsFromPaths:()=>M6,loadAgentPluginFromPath:()=>A8,discoverPluginModulePaths:()=>K8});var oY={};q(oY,{toHookConfigFileName:()=>F8,runSubprocessEvent:()=>V2,runHook:()=>B2,resolveHooksConfigSearchPaths:()=>G8,parseHookEventPayload:()=>A2,mergeAgentHooks:()=>x1,listHookConfigFiles:()=>s$,createSubprocessHooks:()=>rJ,createHookConfigFileHooks:()=>D8,createHookConfigFileExtension:()=>xf,createHookAuditHooks:()=>If,createAgentHooksExtension:()=>bf,HookEventPayloadSchema:()=>pJ,HookEventNameSchema:()=>lJ,HookConfigFileName:()=>kf,HOOK_CONFIG_FILE_EVENT_MAP:()=>P8,HOOKS_CONFIG_DIRECTORY_NAME:()=>S6});import{HookEventNameSchema as lJ,HookEventPayloadSchema as pJ,parseHookEventPayload as A2,resolveHookSessionContext as L_}from"@cline/shared";import{z as ff}from"zod";import{spawn as G_}from"node:child_process";import{augmentNodeCommandForDebug as P_,withResolvedClineBuildEnv as F_}from"@cline/shared";function D_($){let f=$.trim();if(!f)return{};let Q=f.split(`
560
- `).map((W)=>W.trim()).filter(Boolean).filter((W)=>W.startsWith("HOOK_CONTROL\t")).map((W)=>W.slice(13)),Z=Q.length>0?Q[Q.length-1]:f;try{return{parsedJson:JSON.parse(Z)}}catch(W){return{parseError:W instanceof Error?W.message:"Failed to parse subprocess stdout JSON"}}}function R_($,f){let J=$ instanceof Error?$:Error(String($)),Q=J,Z=f.join(" ");if(Q.code==="EACCES")return Error(`Failed to execute hook command "${Z}" (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 "${Z}": ${J.message}`)}async function U_($,f){let J=$.stdin;if(!J)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((Q,Z)=>{let W=(j)=>{J.off("error",W);let X=j.code;if(X==="EPIPE"||X==="ERR_STREAM_DESTROYED"){Q();return}Z(j)};J.once("error",W),J.end(f,(j)=>{if(J.off("error",W),j){let X=j.code;if(X==="EPIPE"||X==="ERR_STREAM_DESTROYED"){Q();return}Z(j);return}Q()})})}async function V2($,f){let J=P_(f.command,{env:f.env,debugRole:"hook"});if(!Array.isArray(J)||J.length===0)throw Error("runSubprocessEvent requires a non-empty command");let Q=!!f.detached,Z=G_(J[0],J.slice(1),{cwd:f.cwd,env:F_(f.env),stdio:Q?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Q}),W=new Promise((B)=>{Z.once("spawn",()=>{try{f.onSpawn?.({command:J,pid:Z.pid??void 0,detached:Q})}catch{}B()})}),j=new Promise((B,K)=>{Z.once("error",(G)=>{K(R_(G,J))})});if(await U_(Z,JSON.stringify($)),Q){await Promise.race([W,j]),Z.unref();return}if(!Z.stdout||!Z.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let X="",H="",Y=!1,V;Z.stdout.on("data",(B)=>{X+=B.toString()}),Z.stderr.on("data",(B)=>{H+=B.toString()});let A=new Promise((B)=>{if((f.timeoutMs??0)>0)V=setTimeout(()=>{Y=!0,Z.kill("SIGKILL")},f.timeoutMs);Z.once("close",(K)=>{if(V)clearTimeout(V);let{parsedJson:G,parseError:R}=D_(X);B({exitCode:K,stdout:X,stderr:H,parsedJson:G,parseError:R,timedOut:Y})})});return await Promise.race([A,j])}var O_=ff.object({contextModification:ff.string().optional(),cancel:ff.boolean().optional(),review:ff.boolean().optional(),errorMessage:ff.string().optional(),context:ff.string().optional(),overrideInput:ff.unknown().optional()}).passthrough();var z_=["agent","hook"];async function B2($,f={}){let J=f.command??z_;return await V2($,{command:J,cwd:f.cwd,env:f.env,detached:f.detached,timeoutMs:f.timeoutMs,onSpawn:f.onSpawn})}function sY($){return $ instanceof Error?$:Error(String($))}function __($){if(!$||typeof $!=="object")return;let f=O_.safeParse($);if(!f.success)return;let J=f.data;if(!(("cancel"in J)||("review"in J)||("context"in J)||("contextModification"in J)||("overrideInput"in J)||("errorMessage"in J)))return;let Z=typeof J.context==="string"?J.context:typeof J.contextModification==="string"?J.contextModification:typeof J.errorMessage==="string"&&J.errorMessage.length>0?J.errorMessage:void 0;return{cancel:typeof J.cancel==="boolean"?J.cancel:void 0,review:typeof J.review==="boolean"?J.review:void 0,context:Z,overrideInput:Object.hasOwn(J,"overrideInput")?J.overrideInput:void 0}}function tY($){if(!$||typeof $!=="object")return{};let f={};for(let[J,Q]of Object.entries($))if(typeof Q==="string")f[J]=Q;else f[J]=JSON.stringify(Q);return f}function h$($,f,J){let Q=J.env??process.env,Z=Q.CLINE_USER_ID?.trim()||Q.USER?.trim()||"unknown",W=J.cwd||process.cwd();return{clineVersion:Q.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:f.conversationId,sessionContext:L_(J.sessionContext,{hookName:$,conversationId:f.conversationId,agentId:f.agentId,parentAgentId:f.parentAgentId}),workspaceRoots:W?[W]:[],workspaceInfo:J.workspaceInfo,userId:Z,agent_id:f.agentId,parent_agent_id:f.parentAgentId}}function y_($){return{name:$.name,message:$.message,stack:$.stack}}function T_($){let f=String($??"").toLowerCase();return f.includes("cancel")||f.includes("abort")||f.includes("interrupt")}function N_($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function M_($){return $.filter((f)=>f.type==="text"&&typeof f.text==="string").map((f)=>f.text).join("")}function q_($){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 w_($){if(!$)return;let f={};if($.cancel===!0)f.stop=!0;if($.overrideInput!==void 0)f.input=$.overrideInput;return Object.keys(f).length>0?f:void 0}async function Jf($,f){try{let J=await B2($,{command:f.command,cwd:f.cwd,env:f.env,detached:!0,onSpawn:f.onSpawn});f.onDispatch?.({payload:$,result:J,detached:!0})}catch(J){f.onDispatchError?.(sY(J),$)}}function rJ($={}){return{hooks:{beforeRun:async(X)=>{let H=N_(X);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let V={...h$("agent_resume",H,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await Jf(V,$)}else{let V={...h$("agent_start",H,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await Jf(V,$)}return},beforeTool:async(X)=>{let H={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},Y={...h$("tool_call",H,$),hookName:"tool_call",iteration:X.snapshot.iteration,tool_call:{id:X.toolCall.toolCallId,name:X.toolCall.toolName,input:X.input},preToolUse:{toolName:X.toolCall.toolName,parameters:tY(X.input)}};try{let V=await B2(Y,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:Y,result:V,detached:!1}),V?.timedOut)throw Error("tool_call hook command timed out");if(V?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${V.parseError}`);return w_(__(V?.parsedJson))}catch(V){$.onDispatchError?.(sY(V),Y);return}},afterTool:async(X)=>{let H=q_(X),Y={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},V={...h$("tool_result",Y,$),hookName:"tool_result",iteration:X.snapshot.iteration,tool_result:H,postToolUse:{toolName:H.name,parameters:tY(H.input),result:typeof H.output==="string"?H.output:JSON.stringify(H.output),success:!H.error,executionTimeMs:H.durationMs}};await Jf(V,$);return},afterRun:async({snapshot:X,result:H})=>{let Y={agentId:X.agentId,conversationId:X.conversationId??X.runId??X.agentId,parentAgentId:X.parentAgentId??null};if(H.status==="completed"){let B={...h$("agent_end",Y,$),hookName:"agent_end",iteration:H.iterations,turn:{outputText:H.outputText,status:H.status},taskComplete:{taskMetadata:{}}};await Jf(B,$);return}let V=H.status==="aborted"||T_(H.error?.message)?"agent_abort":"agent_error",A=V==="agent_error"?{...h$(V,Y,$),hookName:V,iteration:H.iterations,error:y_(H.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...h$(V,Y,$),hookName:V,reason:H.error?.message,taskCancel:{taskMetadata:{}}};await Jf(A,$)},onEvent:async(X)=>{if(X.type!=="message-added"||X.message.role!=="user")return;let H={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},Y={...h$("prompt_submit",H,$),hookName:"prompt_submit",userPromptSubmit:{prompt:M_(X.message.content),attachments:[]}};await Jf(Y,$)}},shutdown:async({agentId:X,conversationId:H,parentAgentId:Y,reason:V})=>{let A={...h$("session_shutdown",{agentId:X,conversationId:H,parentAgentId:Y},$),hookName:"session_shutdown",reason:V};await Jf(A,$)}}}var $A={};q($A,{writeHubDiscovery:()=>hJ,withHubStartupLock:()=>bJ,verifyHubConnection:()=>W$,truncateNotificationBody:()=>S4,toHubHealthUrl:()=>i7,stopLocalHubServerGracefully:()=>WQ,startHubWebSocketServer:()=>Wf,startHubServer:()=>oV,spawnDetachedHubServerWithRetry:()=>f2,spawnDetachedHubServer:()=>e7,sendHubCommand:()=>ZV,restartLocalHubIfIdleAfterStartupTimeout:()=>xJ,resolveWorkspaceHubOwnerContext:()=>QY,resolveSharedHubOwnerContext:()=>Y0,resolveHubUrl:()=>qQ,resolveHubOwnerContext:()=>w$,resolveHubEndpointOptions:()=>c0,resolveHubBuildId:()=>Y1,resolveDefaultHubPort:()=>$2,resolveDefaultHubPathname:()=>o7,resolveDefaultHubHost:()=>s7,resolveCompatibleLocalHubUrl:()=>R4,resolveClineDir:()=>eH,resolveClineDataDir:()=>G4,requestHubShutdown:()=>D4,rememberRecoverableLocalHubUrl:()=>V1,readHubDiscovery:()=>A0,probeHubServer:()=>R0,probeHubConnection:()=>QV,prewarmDetachedHubServer:()=>kJ,normalizeHubWebSocketUrl:()=>A1,isHubReconnectableTransportError:()=>QQ,isHubCommandTimeoutError:()=>IJ,isDiscoveryFilePresent:()=>fY,ensureHubWebSocketServer:()=>J5,ensureHubServer:()=>eV,ensureDetachedHubServer:()=>WY,ensureCompatibleLocalHubUrl:()=>t1,createLocalHubScheduleRuntimeHandlers:()=>Q5,createInMemoryHubOwnerContext:()=>$Y,createHubServerUrl:()=>t0,createHubAuthToken:()=>EJ,createConfiguredTelemetryService:()=>b$,createConfiguredTelemetryHandle:()=>D2,connectToHub:()=>tJ,clearHubDiscovery:()=>v0,NodeHubClient:()=>s0,NativeHubTransportAdapter:()=>k4,HubUIClient:()=>SQ,HubTransportError:()=>z0,HubSessionClient:()=>wQ,HubServerTransport:()=>U2,HubScheduleService:()=>G2,HubScheduleCommandService:()=>K2,HubCommandError:()=>J2,DEFAULT_HUB_PORT:()=>a7,DEFAULT_HUB_PATHNAME:()=>t7,DEFAULT_HUB_HOST:()=>n7,BrowserWebSocketHubAdapter:()=>b4});import{createSessionId as S_}from"@cline/shared";function u0($,f){return{version:$.version,requestId:$.requestId,ok:!0,payload:f}}function eY($,f,J){return{version:$.version,requestId:$.requestId??S_("hubreq_"),ok:!1,error:{code:f,message:J}}}class K2{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return u0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return u0($,{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 u0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return u0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return u0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return u0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return u0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return u0($,{execution:await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return u0($,{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 u0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return u0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return u0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return eY($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(f){return eY($,"schedule_command_failed",f instanceof Error?f.message:String(f))}}toCreateInput($){let f=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:f}}toUpdateInput($){let f=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:f}}}function nJ($){return $?new Date($).getTime():void 0}function C_($){let f=$.metadata?{...$.metadata}:void 0;if(f)delete f.__hubScheduleCreatedBy,delete f.__hubScheduleCwd,delete f.__hubRuntimeOptions;return f}function iJ($){let f=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof f?.__hubScheduleCwd==="string"?f.__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:nJ($.nextRunAt),lastRunAt:nJ($.lastRunAt),createdBy:typeof f?.__hubScheduleCreatedBy==="string"?f.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:f?.__hubRuntimeOptions&&typeof f.__hubRuntimeOptions==="object"&&!Array.isArray(f.__hubRuntimeOptions)?f.__hubRuntimeOptions:void 0,metadata:C_($)}}function E_($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function $V($,f){return{executionId:$.runId,scheduleId:f,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:nJ($.startedAt),endedAt:nJ($.completedAt),status:E_($.status),errorMessage:$.error}}class G2{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new V4({dbPath:$.dbPath}),this.materializer=new W4({store:this.store}),this.runner=new j4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,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(S7($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return iJ(this.store.createHubSchedule($))}getSchedule($){let f=this.store.getHubSchedule($);return f?iJ(f):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((f)=>iJ(f))}updateSchedule($,f){if(f.cronPattern!==void 0)S7(f.cronPattern);let J=this.store.getHubSchedule($);if(!J)return;let Q=f.workspaceRoot!==void 0?f.workspaceRoot.trim():J.workspaceRoot;if((f.enabled??J.enabled)&&!Q)throw Error("workspaceRoot is required for enabled schedules");let W=this.store.updateHubSchedule($,{...f,scheduleId:$});return W?iJ(W):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let f=this.store.enqueueHubScheduleRun($,"manual");if(!f)return;await this.runner.tick();let J=this.store.getRun(f.runId)??f;return $V(J,$)}listScheduleExecutions($){let f=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,J={specId:f?.specId,limit:$.limit};return this.store.listRuns(J).map((Z)=>{let W=f??this.store.getSpec(Z.specId);if(!W||W.source!=="hub-schedule")return;return $V(Z,W.externalId)}).filter((Z)=>{if(!Z)return!1;return!$.status||Z.status===$.status})}getScheduleStats($){let f=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(f.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let J=0,Q=0,Z=0,W;for(let j of f){if(j.status==="success"||j.status==="completed")J+=1;if(!W&&j.status!=="success"&&j.status!=="completed")W=j;if(j.startedAt&&j.endedAt)Z+=j.endedAt-j.startedAt,Q+=1}return{totalRuns:f.length,successRate:J/f.length,avgDurationSeconds:Q>0?Z/Q/1000:0,lastFailure:W}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let f=this.store.getSpec($.specId);if(!f||f.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:f.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:f.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+f.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let f={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(f).flatMap((J)=>J.source==="hub-schedule"&&J.nextRunAt?[{spec:J,nextRunAt:J.nextRunAt}]:[]).sort((J,Q)=>String(J.nextRunAt).localeCompare(String(Q.nextRunAt))).slice(0,$).map(({spec:J,nextRunAt:Q})=>({scheduleId:J.externalId,name:J.title,nextRunAt:Q}))}}aJ();function fy($,f){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let J=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(J?`Failed to connect to hub at ${f} (${J} event before socket open).`:`Failed to connect to hub at ${f}.`)}var Jy="cline-hub-auth.";function Qy($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function Zy($,f){let J=new URL($),Q=new URL(f);return J.search="",J.hash="",Q.search="",Q.hash="",J.toString()===Q.toString()}async function Wy($){let f=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),f)return f;let J=Y0(),Q=await A0(J.discoveryPath);if(Q?.url&&Zy($.toString(),Q.url))return Q.authToken;return}async function qQ($={}){let f=c0($);if(!Qy($)){let J=Y0(),Q=await A0(J.discoveryPath);if(Q?.url)return Q.url}return t0(f.host,f.port,f.pathname)}async function tJ($){return await new Promise((f,J)=>{(async()=>{let Q=new URL($),Z=await Wy(Q);Q.hash="";let W=new WebSocket(Q.toString(),Z?[`${Jy}${Z}`]:void 0),j=new Map,X=0;W.addEventListener("open",()=>{f({send(H){let Y=H.requestId??`hub-client-${++X}`;return new Promise((V,A)=>{j.set(Y,{resolve:V,reject:A});let B={kind:"command",envelope:{...H,requestId:Y}};W.send(JSON.stringify(B))})},close(){W.close()}})}),W.addEventListener("message",(H)=>{let Y=JSON.parse(String(H.data));if(Y.kind==="reply"&&Y.envelope.requestId){let V=j.get(Y.envelope.requestId);if(V)j.delete(Y.envelope.requestId),V.resolve(Y.envelope)}}),W.addEventListener("close",()=>{for(let H of j.values())H.reject(Error("Hub connection closed"));j.clear()}),W.addEventListener("error",(H)=>{J(fy(H,$))})})().catch(J)})}async function QV($){try{return(await tJ($)).close(),!0}catch{return!1}}async function ZV($,f){let J=await qQ($),Q=await tJ(J);try{return await Q.send({version:f.version??"v1",clientId:f.clientId??"hub-client",...f})}finally{Q.close()}}function o0($){return $?JSON.parse(JSON.stringify($)):{}}function sJ($){let f=$?.session&&typeof $.session==="object"?$.session:void 0;if(!f)return;let J=f.metadata&&typeof f.metadata==="object"?o0(f.metadata):void 0;return{sessionId:typeof f.sessionId==="string"?f.sessionId:"",parentSessionId:typeof J?.parentSessionId==="string"?J.parentSessionId:void 0,messagesPath:typeof J?.messagesPath==="string"?J.messagesPath:void 0,metadata:J}}function WV($,f){return $.error?.message??`hub command failed: ${f}`}function jy($){let f=o0($);if(typeof f.error==="string"&&f.error.trim())return{...f,error:f.error.trim()};let J=f.result&&typeof f.result==="object"?f.result:void 0;if(typeof J?.text==="string"&&J.text.trim())return{...f,error:J.text.trim()};let Q=J?.error&&typeof J.error==="object"?J.error:void 0;if(typeof Q?.message==="string"&&Q.message.trim())return{...f,error:Q.message.trim()};return f}function Xy($){let f=$?.checkpoint;if(!f||typeof f!=="object"||Array.isArray(f))throw Error("hub checkpoint restore returned no checkpoint");let J=f;if(typeof J.ref!=="string"||typeof J.createdAt!=="number"||typeof J.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return J}function Hy($){let f=$.sessionId?.trim();if(!f)return;switch($.event){case"iteration.started":return{sessionId:f,eventType:"runtime.chat.iteration_start",payload:o0($.payload)};case"iteration.finished":return{sessionId:f,eventType:"runtime.chat.iteration_end",payload:o0($.payload)};case"assistant.delta":return{sessionId:f,eventType:"runtime.chat.text_delta",payload:o0($.payload)};case"usage.updated":return{sessionId:f,eventType:"runtime.chat.usage",payload:o0($.payload)};case"tool.started":return{sessionId:f,eventType:"runtime.chat.tool_call_start",payload:o0($.payload)};case"tool.finished":return{sessionId:f,eventType:"runtime.chat.tool_call_end",payload:o0($.payload)};case"approval.requested":return{sessionId:f,eventType:"approval.requested",payload:o0($.payload)};case"run.aborted":return{sessionId:f,eventType:"runtime.chat.aborted",payload:o0($.payload)};case"run.failed":return{sessionId:f,eventType:"runtime.chat.failed",payload:jy($.payload)};case"run.completed":return{sessionId:f,eventType:"runtime.chat.completed",payload:o0($.payload)};default:return}}class wQ{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new s0({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 f=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}),J=sJ(f.payload);if(!J?.sessionId)throw Error("hub session create returned no session id");return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:"",messagesPath:J.messagesPath??""}}}async sendRuntimeSession($,f,J){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:f.prompt,mode:f.config.mode,attachments:f.attachments,delivery:f.delivery,timeoutSeconds:f.config.timeoutSeconds},$,J)).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 f=await this.client.command("session.get",void 0,$);return sJ(f.payload)}async readMessages($){let f=$.trim();if(!f)return[];await this.ensureMetadataApplied();let J=await this.client.command("session.messages",{sessionId:f},f);if(!J.ok)throw Error(WV(J,"session.messages"));let Q=J.payload?.messages;return Array.isArray(Q)?Q:[]}async restore($){let f=$.sessionId.trim();if(!f)throw Error("sessionId is required");let J=$.restore?.messages!==!1;if(J&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let Q=$.config,Z=await this.client.command("session.restore",{sessionId:f,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Q?{workspaceRoot:Q.workspaceRoot,cwd:Q.cwd,sessionConfig:{providerId:Q.provider,modelId:Q.model,apiKey:Q.apiKey,cwd:Q.cwd??Q.workspaceRoot,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:Q.mode??"act",rules:Q.rules,maxIterations:Q.maxIterations,enableTools:Q.enableTools,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},metadata:{source:Q.source??"cli",provider:Q.provider,model:Q.model,enableTools:Q.enableTools,enableSpawn:Q.enableSpawn,enableTeams:Q.enableTeams,prompt:void 0,interactive:Q.interactive!==!1},runtimeOptions:{mode:Q.mode,systemPrompt:Q.systemPrompt,maxIterations:Q.maxIterations,enableTools:Q.enableTools,enableSpawn:Q.enableSpawn,enableTeams:Q.enableTeams,autoApproveTools:Q.autoApproveTools,configExtensions:Q.configExtensions},modelSelection:{provider:Q.provider,model:Q.model,apiKey:Q.apiKey},toolPolicies:Q.toolPolicies}:{}},f);if(!Z.ok)throw Error(WV(Z,"session.restore"));let W=sJ(Z.payload);if(J&&!W?.sessionId)throw Error("hub checkpoint restore returned no session id");let j=Array.isArray(Z.payload?.messages)?Z.payload.messages:void 0,X=Xy(Z.payload);return{sessionId:W?.sessionId,startResult:W?.sessionId?{sessionId:W.sessionId,manifestPath:"",messagesPath:W.messagesPath??""}:void 0,...j?{messages:j}:{},checkpoint:X}}async listSessions($){await this.ensureMetadataApplied();let f=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(f.payload?.sessions)?f.payload?.sessions:[]).map((Q)=>sJ({session:Q})).filter((Q)=>Boolean(Q?.sessionId))}async deleteSession($,f=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:f})).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($,f){let J=new Set(($.sessionIds??[]).map((Z)=>Z.trim()).filter(Boolean)),Q=this.client.subscribe((Z)=>{let W=Hy(Z);if(!W)return;if(J.size>0&&!J.has(W.sessionId))return;f.onEvent?.(W)});return this.ensureMetadataApplied().catch((Z)=>{f.onError?.(Z instanceof Error?Z:Error(String(Z)))}),Q}streamTeamProgress($,f){let J=this.client.subscribe((Q)=>{if(Q.event!=="team.progress"||!Q.payload)return;f.onProjection?.(Q.payload)});return this.ensureMetadataApplied().catch((Q)=>{f.onError?.(Q instanceof Error?Q:Error(String(Q)))}),J}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let f=await this.client.command("schedule.list");return Array.isArray(f.payload?.schedules)?f.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...f})).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($,f){await this.ensureMetadataApplied();let J=await this.client.command("schedule.list_executions",{scheduleId:$,limit:f});return Array.isArray(J.payload?.executions)?J.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 f=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(f.payload?.upcoming)?f.payload?.upcoming:[]}}class SQ{client;constructor($){this.client=new s0({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 f=await this.client.command("session.list",{limit:$});return Array.isArray(f.payload?.sessions)?f.payload.sessions:[]}subscribeUI($){return this.client.subscribe((f)=>{switch(f.event){case"ui.notify":$.onNotify?.(f.payload);break;case"ui.show_window":$.onShowWindow?.(f.payload);break;case"hub.client.registered":$.onClientRegistered?.(f.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(f.payload??{});break;case"session.created":$.onSessionCreated?.(f.payload??{});break;case"session.updated":$.onSessionUpdated?.(f.payload??{});break;case"session.detached":$.onSessionDetached?.(f.payload??{});break}})}}function Yy($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((J)=>{if(J&&typeof J==="object"&&"type"in J&&J.type==="text"&&"text"in J&&typeof J.text==="string")return J.text.trim();return""}).filter(Boolean).join(`
561
- `).trim()||void 0}var jV=120,CQ="...";function S4($){let f=$.trim();if(!f)return"";if(Buffer.byteLength(f,"utf8")<=jV)return f;let J=jV-Buffer.byteLength(CQ,"utf8");if(J<=0)return CQ;let Q="";for(let Z of f){if(Buffer.byteLength(Q+Z,"utf8")>J)break;Q+=Z}return`${Q}${CQ}`}async function XV($){let f=$?.sessionId?.trim()||"unknown",J=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,Z=[...await H1(J)].reverse().find((H)=>H.role==="assistant"),W=Z?Yy(Z.content):void 0,j=$?.workspaceRoot?.trim()||"workspace",X=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():j;return{title:`Task completed (${f})`,body:S4(W&&W.length>0?W:X.length>0?X:j),severity:"info"}}import{captureSdkError as f5,createSessionId as uy}from"@cline/shared";import{createSessionId as Ky}from"@cline/shared";import{createSessionId as By}from"@cline/shared";function Vy($){switch($){case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function Ay($){let f=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())f.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())f.parentAgentId=$.parentAgentId;if($.agentId?.trim())f.agentId=$.agentId;if($.conversationId?.trim())f.conversationId=$.conversationId;if($.messagesPath?.trim())f.messagesPath=$.messagesPath;if($.prompt?.trim())f.prompt=$.prompt;if($.provider?.trim())f.provider=$.provider;if($.model?.trim())f.model=$.model;if($.source?.trim())f.source=$.source;if(typeof $.pid==="number")f.pid=$.pid;return Object.keys(f).length>0?f:void 0}function oJ($,f,J,Q){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:f?.createdByClientId??"hub",status:Vy($.status),participants:f?[...f.participants.values()]:[],metadata:Ay($),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,...J?{usage:{...J}}:{},...Q?{aggregateUsage:{...Q}}:{}}}function c($,f){return{version:$.version,requestId:$.requestId,ok:!0,...f!==void 0?{payload:f}:{}}}function x($,f,J){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:f,message:J}}}function eJ($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function M0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function Qf($,f,J){return{version:"v1",event:$,eventId:By("hevt_"),sessionId:J,timestamp:Date.now(),payload:f}}async function d0($,f){let J=await $.sessionHost.getSession(f);if(!J)return;let Q=await $.sessionHost.getAccumulatedUsage?.(f);return oJ(J,$.sessionState.get(f),Q?.usage,Q?.aggregateUsage)}async function l0($,f){let J=await $.sessionHost.getSession(f);if(!J)return;let[Q,Z]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(f):[],$.sessionHost.getAccumulatedUsage?.(f)]);return j$({session:J,messages:Q,usage:Z?.usage,aggregateUsage:Z?.aggregateUsage})}function $5($,f,J,Q,Z={}){let W=$.sessionState.get(f);if(W){if(Z.interactive!==void 0)W.interactive=Z.interactive;if(!W.participants.has(J))W.participants.set(J,{clientId:J,attachedAt:Date.now(),role:Q});return W}let j={createdByClientId:J,interactive:Z.interactive??!0,participants:new Map([[J,{clientId:J,attachedAt:Date.now(),role:Q}]])};return $.sessionState.set(f,j),j}async function EQ($,f){let J=Ky("approval_"),Q=f.sessionId;if($.sessionState.get(Q)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((W)=>{$.pendingApprovals.set(J,{sessionId:Q,resolve:W}),$.publish($.buildEvent("approval.requested",{approvalId:J,sessionId:f.sessionId,agentId:f.agentId,conversationId:f.conversationId,iteration:f.iteration,toolCallId:f.toolCallId,toolName:f.toolName,inputJson:JSON.stringify(f.input??null),policy:f.policy},Q))})}function hQ($,f,J){let Q=$.pendingApprovals.get(f);if(!Q)return;return $.pendingApprovals.delete(f),Q.resolve(J),{sessionId:Q.sessionId}}function bQ($,f,J){let Q=0;for(let[Z,W]of[...$.pendingApprovals.entries()]){if(!f({approvalId:Z,sessionId:W.sessionId}))continue;$.pendingApprovals.delete(Z),W.resolve({approved:!1,reason:J}),$.publish($.buildEvent("approval.resolved",{approvalId:Z,approved:!1,cancelled:!0,reason:J},W.sessionId)),Q+=1}return Q}async function HV($,f){let J=typeof f.payload?.approvalId==="string"?f.payload.approvalId.trim():"";if(!$.pendingApprovals.get(J))return x(f,"approval_not_found",`Unknown approval: ${J}`);let Z=typeof f.payload?.reason==="string"?f.payload.reason:f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)&&typeof f.payload.payload.reason==="string"?f.payload.payload.reason:void 0,W=f.payload?.approved===!0,j=hQ($,J,{approved:W,reason:Z});if(!j)return x(f,"approval_not_found",`Unknown approval: ${J}`);return $.publish($.buildEvent("approval.resolved",{approvalId:J,approved:W,reason:Z},j.sessionId)),c(f,{approvalId:J,approved:W})}import{createSessionId as Fy}from"@cline/shared";function Gy($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var YV={debug:10,info:20,warn:30,error:40,silent:50};function Py(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function m($,f,J={}){if(YV[$]<YV[Py()])return;let Q=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:f,...Object.fromEntries(Object.entries(J).map(([Z,W])=>[Z,Gy(W)]).filter(([,Z])=>Z!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${Q}`);return}console.log(`[hub] ${Q}`)}function kQ($,f){let J=f instanceof Error?f.stack||f.message:String(f);m("error",$,{error:J})}async function VV($,f,J,Q,Z,W){let j=Fy("capreq_"),X=performance.now();return m("info","capability.request.start",{requestId:j,sessionId:f,capabilityName:J,targetClientId:Z}),await new Promise((H,Y)=>{$.pendingCapabilityRequests.set(j,{sessionId:f,targetClientId:Z,capabilityName:J,onProgress:W,resolve:(V)=>{if(m(V.ok?"info":"warn","capability.request.end",{requestId:j,sessionId:f,capabilityName:J,targetClientId:Z,ok:V.ok,error:V.error,durationMs:Math.round(performance.now()-X)}),!V.ok){Y(Error(V.error||`Capability ${J} was rejected by ${Z}.`));return}H(V.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:j,targetClientId:Z,capabilityName:J,payload:Q},f)),m("info","capability.request.published",{requestId:j,sessionId:f,capabilityName:J,targetClientId:Z})})}function AV($,f){let J=typeof f.payload?.requestId==="string"?f.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(J);if(!Q)return x(f,"capability_not_found",`Unknown capability request: ${J}`);if((f.clientId?.trim()||"")!==Q.targetClientId)return x(f,"capability_wrong_client",`Capability request ${J} is owned by ${Q.targetClientId}`);if(f.sessionId?.trim()&&f.sessionId.trim()!==Q.sessionId)return x(f,"capability_wrong_session",`Capability request ${J} belongs to session ${Q.sessionId}`);let W=f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)?f.payload.payload:{};return Q.onProgress?.(W),c(f,{requestId:J})}function K1($,f,J){let Q=0;for(let[Z,W]of[...$.pendingCapabilityRequests.entries()]){if(!f({requestId:Z,...W}))continue;$.pendingCapabilityRequests.delete(Z),m("warn","capability.request.cancelled",{requestId:Z,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,reason:J}),W.resolve({ok:!1,error:J}),$.publish($.buildEvent("capability.resolved",{requestId:Z,capabilityName:W.capabilityName,targetClientId:W.targetClientId,ok:!1,cancelled:!0,error:J},W.sessionId)),Q+=1}return Q}async function BV($,f){let J=typeof f.payload?.sessionId==="string"?f.payload.sessionId.trim():f.sessionId?.trim()||"",Q=typeof f.payload?.capabilityName==="string"?f.payload.capabilityName.trim():"",Z=typeof f.payload?.targetClientId==="string"?f.payload.targetClientId.trim():"";if(!J||!Q||!Z)return x(f,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let W=f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)?f.payload.payload:{},j=await $.requestCapability(J,Q,W,Z);return c(f,j)}catch(W){return x(f,"capability_request_failed",W instanceof Error?W.message:String(W))}}function KV($,f){let J=typeof f.payload?.requestId==="string"?f.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(J);if(!Q)return x(f,"capability_not_found",`Unknown capability request: ${J}`);let Z=f.clientId?.trim()||"";if(Z!==Q.targetClientId)return x(f,"capability_wrong_client",`Capability request ${J} is owned by ${Q.targetClientId}`);if(f.sessionId?.trim()&&f.sessionId.trim()!==Q.sessionId)return x(f,"capability_wrong_session",`Capability request ${J} belongs to session ${Q.sessionId}`);$.pendingCapabilityRequests.delete(J);let W=f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)?f.payload.payload:void 0,j=typeof f.payload?.error==="string"?f.payload.error:void 0,X=f.payload?.ok===!0;return m(X?"info":"warn","capability.respond",{requestId:J,sessionId:Q.sessionId,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,respondedByClientId:Z,ok:X,error:j}),Q.resolve({ok:X,payload:W,error:j}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,respondedByClientId:Z,ok:X,payload:W,error:j},Q.sessionId)),c(f,{requestId:J,ok:X})}import{createSessionId as Dy}from"@cline/shared";function GV($,f){let J=f.payload,Q=J?.clientId?.trim()||f.clientId?.trim()||Dy("client_");return $.clients.set(Q,{clientId:Q,clientType:J?.clientType??"unknown",displayName:J?.displayName,actorKind:J?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:J?.transport??"native",capabilities:J?.capabilities??[],metadata:J?.metadata,workspaceContext:J?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:Q,clientType:J?.clientType??"unknown",displayName:J?.displayName,connectedAt:Date.now()})),c(f,{clientId:Q})}function PV($,f){let J=f.clientId?.trim(),Q=J?$.clients.get(J):void 0;if(!J||!Q)return x(f,"client_not_found","Client is not registered with this hub.");let Z=eJ(f.payload?.metadata);if(Q.lastSeenAt=Date.now(),Z)Q.metadata=JSON.parse(JSON.stringify(Z));return c(f)}function FV($,f,J){let Q=f.clientId?.trim();if(Q)$.clients.delete(Q),J(Q),$.publish($.buildEvent("hub.client.disconnected",{clientId:Q}));return c(f)}function DV($,f){return c(f,{clients:[...$.clients.values()]})}var Ry=30000;function Uy($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function Ly($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function Oy($){return $?$:void 0}function zy($){let f=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(f&&Number.isFinite(f)&&f>0)return Math.floor(f);let J=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(J&&Number.isFinite(J)&&J>0)return Math.floor(J*1000);return}async function _y($,f,J,Q){let Z=performance.now(),W=!1,j={command:f.command,requestId:f.requestId,clientId:f.clientId,sessionId:J.sessionId,timeoutMs:Q},X=setInterval(()=>{if(W)return;let V=Math.round(performance.now()-Z);m("warn","run.heartbeat",{...j,elapsedMs:V}),$.publish($.buildEvent("run.heartbeat",{requestId:f.requestId,elapsedMs:V,...Q?{timeoutMs:Q}:{}},J.sessionId))},Ry),H=$.sessionHost.runTurn(J);H.then((V)=>{if(!W)return;m("warn","run.late_end",{...j,elapsedMs:Math.round(performance.now()-Z),finishReason:V?.finishReason})},(V)=>{if(!W)return;m("error","run.late_error",{...j,elapsedMs:Math.round(performance.now()-Z),error:V})});let Y;try{if(!Q)return await H;return await Promise.race([H,new Promise((V,A)=>{Y=setTimeout(()=>{let B=`Hub run ${f.command} timed out after ${Q}ms.`;W=!0,clearInterval(X),A(Error(B)),m("error","run.timeout",{...j,elapsedMs:Math.round(performance.now()-Z)}),bQ($,(K)=>K.sessionId===J.sessionId,B),K1($,(K)=>K.sessionId===J.sessionId,B),$.sessionHost.abort(J.sessionId,B).catch((K)=>{m("error","run.timeout_abort_failed",{...j,error:K})})},Q)})])}finally{if(W=!0,clearInterval(X),Y)clearTimeout(Y)}}async function RV($,f){let J=M0(f),Q=f.payload&&typeof f.payload==="object"?f.payload:{},Z=typeof Q.prompt==="string"?Q.prompt:typeof Q.input==="string"?Q.input:"";if(!Z.trim())return x(f,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,J));let W=Q.attachments&&typeof Q.attachments==="object"&&!Array.isArray(Q.attachments)?Q.attachments:void 0,j=Array.isArray(W?.userFiles)?W.userFiles.filter((V)=>typeof V==="string"):void 0,X=zy(Q);$.suppressNextTerminalEventBySession.set(J,"run.start.reply");let H;try{H=await _y($,f,{sessionId:J,prompt:Z,mode:Oy(Q.mode),delivery:Q.delivery==="queue"||Q.delivery==="steer"?Q.delivery:void 0,userImages:Array.isArray(W?.userImages)?W.userImages:void 0,userFiles:j,timeoutMs:X},X)}catch(V){if($.suppressNextTerminalEventBySession.get(J)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(J);throw $.publish($.buildEvent("run.failed",{reason:"error",error:V instanceof Error?V.message:String(V)},J)),V}if(H){let V=await l0($,J),A=Ly(H);if($.publish($.buildEvent(Uy(H.finishReason),{reason:H.finishReason,...A?{error:A}:{},result:H,...V?{snapshot:V}:{}},J)),$.suppressNextTerminalEventBySession.get(J)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(J)}else $.suppressNextTerminalEventBySession.delete(J);let Y=await l0($,J);return c(f,H||Y?{...H?{result:H}:{},...Y?{snapshot:Y}:{}}:void 0)}async function UV($,f){let J=M0(f),Q=typeof f.payload?.reason==="string"?f.payload.reason:"Run was aborted before pending approval or capability request was resolved.";return bQ($,(Z)=>Z.sessionId===J,Q),await $.sessionHost.abort(J,f.payload?.reason),K1($,(Z)=>Z.sessionId===J,Q),$.publish($.buildEvent("run.aborted",{reason:Q},J)),c(f,{applied:!0})}async function LV($,f){let J=A2(f.payload?.payload);if(!J)return x(f,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(J),c(f,{applied:!0})}async function OV($,f){switch(f.type){case"chunk":return;case"agent_event":await yy($,f);return;case"hook":if(f.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:f.payload.toolName},f.payload.sessionId));else if(f.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:f.payload.toolName},f.payload.sessionId));return;case"team_progress":{let J={type:"team_progress_projection",version:1,sessionId:f.payload.sessionId,summary:f.payload.summary,lastEvent:f.payload.lifecycle};$.publish($.buildEvent("team.progress",J,f.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:f.payload.sessionId,prompts:f.payload.prompts},f.payload.sessionId));return;case"pending_prompt_submitted":{let J={id:f.payload.id,prompt:f.payload.prompt,delivery:f.payload.delivery,attachmentCount:f.payload.attachmentCount};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:f.payload.sessionId,prompt:J},f.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:f.payload.sessionId,snapshot:f.payload.snapshot},f.payload.sessionId));return;case"status":{let[J,Q]=await Promise.all([d0($,f.payload.sessionId),l0($,f.payload.sessionId)]);if(J)$.publish($.buildEvent("session.updated",{session:J,...Q?{snapshot:Q}:{}},f.payload.sessionId));return}case"ended":await Ty($,f);return;default:return}}async function yy($,f){let{sessionId:J,event:Q}=f.payload;if(Q.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:Q.iteration},J));return}if(Q.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:Q.iteration,hadToolCalls:Q.hadToolCalls,toolCallCount:Q.toolCallCount},J));return}if(Q.type==="content_start"){if(Q.contentType==="text"&&typeof Q.text==="string"&&Q.text.length>0){$.publish($.buildEvent("assistant.delta",{text:Q.text},J));return}if(Q.contentType==="reasoning"){if(Q.redacted&&!Q.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},J));return}if(typeof Q.reasoning==="string"&&Q.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:Q.reasoning,redacted:Q.redacted===!0},J));return}if(Q.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:Q.toolCallId,toolName:Q.toolName,input:Q.input},J));return}}if(Q.type==="content_end"){switch(Q.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:Q.text},J));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:Q.reasoning},J));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:Q.toolCallId,toolName:Q.toolName,output:Q.output,error:Q.error},J));break}return}if(Q.type==="usage"){let Z;try{Z=await $.sessionHost.getAccumulatedUsage?.(J)}catch{Z=void 0}$.publish($.buildEvent("usage.updated",{sessionId:J,delta:{inputTokens:Q.inputTokens,outputTokens:Q.outputTokens,cacheReadTokens:Q.cacheReadTokens??0,cacheWriteTokens:Q.cacheWriteTokens??0,totalCost:Q.cost??0},totals:{inputTokens:Q.totalInputTokens,outputTokens:Q.totalOutputTokens,cacheReadTokens:Q.totalCacheReadTokens??0,cacheWriteTokens:Q.totalCacheWriteTokens??0,totalCost:Q.totalCost??0},usage:Z?.usage,aggregateUsage:Z?.aggregateUsage,agent:{kind:f.payload.teamRole==="teammate"?"teammate":Q.parentAgentId?"subagent":"lead",agentId:Q.agentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamAgentId:f.payload.teamAgentId,teamRole:f.payload.teamRole}},J));return}if(Q.type==="done")$.publish($.buildEvent("agent.done",{reason:Q.reason,text:Q.text,iterations:Q.iterations,usage:Q.usage},J))}async function Ty($,f){let J=$.suppressNextTerminalEventBySession.get(f.payload.sessionId),Q=J===f.payload.reason||J==="run.start.reply";if(Q)$.suppressNextTerminalEventBySession.delete(f.payload.sessionId);let[Z,W]=await Promise.all([d0($,f.payload.sessionId),l0($,f.payload.sessionId)]);if(f.payload.reason==="completed"){let j=await XV(Z);$.publish($.buildEvent("ui.notify",j,f.payload.sessionId))}if(Q)return;$.publish($.buildEvent(f.payload.reason==="aborted"?"run.aborted":f.payload.reason==="error"||f.payload.reason==="failed"?"run.failed":"run.completed",{reason:f.payload.reason,...W?{snapshot:W}:{}},f.payload.sessionId))}import{createSessionId as MV,parseRuntimeConfigExtensions as qV}from"@cline/shared";var TV={};q(TV,{SessionVersioningService:()=>G1,SessionVersioningError:()=>q0});var yV={};q(yV,{trimMessagesToCheckpoint:()=>_V,trimMessagesBeforeCheckpoint:()=>xQ,readSessionCheckpointHistory:()=>C4,createRestoredCheckpointMetadata:()=>IQ,createCheckpointRestorePlan:()=>gQ,applyCheckpointToWorktree:()=>mQ});import{execFile as Ny}from"node:child_process";import{promisify as My}from"node:util";var R2=My(Ny);function C4($){let f=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(f?.history)?f.history:[]).filter((Q)=>!!Q&&typeof Q==="object"&&!Array.isArray(Q)).flatMap((Q)=>{let Z=String(Q.ref??"").trim(),W=Number(Q.createdAt??0),j=Number(Q.runCount??0);if(Z.length===0||!Number.isFinite(W)||!Number.isInteger(j)||j<1)return[];let X=Q.kind==="stash"||Q.kind==="commit"?Q.kind:void 0;return[{ref:Z,createdAt:W,runCount:j,...X?{kind:X}:{}}]})}function IQ($,f){let J=C4($).filter((Z)=>Z.runCount<=f),Q=J.at(-1);return Q?{latest:Q,history:J}:void 0}function qy($,f){return $.reduce((J,Q)=>{if(Q.runCount>f)return J;if(!J||Q.runCount>J.runCount)return Q;return J},void 0)}function zV($,f){let J=0;for(let Q=0;Q<$.length;Q+=1){let Z=$[Q];if(Z?.role!=="user")continue;if(("metadata"in Z&&Z.metadata&&typeof Z.metadata==="object"?Z.metadata:void 0)?.kind==="recovery_notice")continue;if(J+=1,J===f)return Q}throw Error(`Could not find user message for checkpoint run ${f}`)}function _V($,f){let J=zV($,f);return $.slice(0,J+1)}function xQ($,f){let J=zV($,f);return $.slice(0,J)}function gQ($){let f=$.checkpointRunCount;if(!Number.isInteger(f)||f<1)throw Error("checkpointRunCount must be a positive integer");let J=qy(C4($.session),f);if(!J)throw Error(`No checkpoint found at or before run ${f} in session ${$.session.sessionId}`);let Q=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!Q)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:J,cwd:Q,...$.restoreMessages!==!1?{messages:_V($.messages??[],f)}:{}}}async function mQ($,f){if((await R2("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await R2("git",["-C",$,"cat-file","-e",`${f.ref}^{commit}`],{windowsHide:!0}),await R2("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await R2("git",["-C",$,"clean","-fd"],{windowsHide:!0}),f.kind==="commit"){await R2("git",["-C",$,"reset","--hard",f.ref],{windowsHide:!0});return}await R2("git",["-C",$,"stash","apply",f.ref],{windowsHide:!0})}class q0 extends Error{code;constructor($,f){super(f);this.code=$;this.name="SessionVersioningError"}}function wy($){let f=$.sessionId.trim();if(!f)throw new q0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new q0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new q0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new q0("invalid_restore","checkpointRunCount must be a positive integer");return f}class G1{async restoreCheckpoint($){let f=$.restore?.messages!==!1,J=$.restore?.workspace!==!1,Q=wy({sessionId:$.sessionId,restoreMessages:f,restoreWorkspace:J,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),Z=await $.getSession(Q);if(!Z)throw new q0("session_not_found",`Session ${Q} not found`);let W=f?await $.readMessages(Q):void 0;if(f&&W?.length===0)throw new q0("session_messages_not_found",`No messages found for session ${Q}`);let j=gQ({session:Z,messages:W,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:f});if(J)await($.applyWorkspaceCheckpoint??mQ)(j.cwd,j.checkpoint);let X=j$({session:Z,messages:W});if(!f)return{checkpoint:j.checkpoint,sourceSnapshot:X};let H=IQ(Z,$.checkpointRunCount),Y=$.restore?.omitCheckpointMessageFromSession?xQ(W??[],$.checkpointRunCount):j.messages??[],V={sourceSession:Z,sourceMessages:W,sourceSnapshot:X,plan:j,restoredCheckpointMetadata:H,initialMessages:Y,restoreMessages:f,restoreWorkspace:J,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new q0("invalid_restore","start is required when restore.messages is true");let A=$.buildStartInput?await $.buildStartInput(V,$.start):$.start,B=await $.startSession(A),K=$.getStartedSessionId?.(B);if(K)await($.retainCheckpointRefs??Rj)(j.cwd,K,H?.history??[]);let G=K&&$.readRestoredSession?await $.readRestoredSession(K):void 0;return{sessionId:K,startResult:B,messages:j.messages,checkpoint:j.checkpoint,sourceSnapshot:X,...G?{restoredSnapshot:j$({session:G,messages:Y})}:{}}}}import{HUB_CHECKPOINT_CAPABILITY as ag,HUB_COMPACTION_CAPABILITY as tg,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as sg,HUB_HOOK_CAPABILITY_PREFIX as og,HUB_MISTAKE_LIMIT_CAPABILITY as eg,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as $m,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as fm,isHubToolExecutorName as Sy}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as jm,HUB_COMPACTION_CAPABILITY as Xm,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Hm,HUB_HOOK_CAPABILITY_PREFIX as Ym,HUB_MISTAKE_LIMIT_CAPABILITY as Vm,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Am,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Bm}from"@cline/shared";var Cy=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function Zf($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function Ey($,f){let J=typeof $.name==="string"?$.name.trim():"",Q=typeof $.description==="string"?$.description:"",Z=typeof $.capabilityName==="string"?$.capabilityName.trim():"",W=Zf($.inputSchema);if(!J||!Q||!W||!Z||f.has(Z))return;return f.add(Z),{kind:"tool",capabilityName:Z,name:J,description:Q,inputSchema:W,...Zf($.lifecycle)?{lifecycle:Zf($.lifecycle)}:{}}}function cQ($){if(!Array.isArray($))return[];let f=[],J=new Set;for(let Q of $){if(!Q||typeof Q!=="object"||Array.isArray(Q))continue;let Z=Q,W=Z.kind,j=typeof Z.capabilityName==="string"?Z.capabilityName.trim():"";if(!j||J.has(j))continue;if(W==="tool"){let X=Ey(Z,J);if(X)f.push(X);continue}if(W==="toolExecutor"){let X=Z.executor;if(!Sy(X))continue;J.add(j),f.push({kind:"toolExecutor",capabilityName:j,executor:X});continue}if(W==="hook"){let X=typeof Z.name==="string"?Z.name.trim():"";if(!X)continue;J.add(j),f.push({kind:"hook",capabilityName:j,name:X});continue}if(W==="compaction"){J.add(j),f.push({kind:"compaction",capabilityName:j,...Zf(Z.config)?{config:Zf(Z.config)}:{}});continue}if(W==="checkpoint"){J.add(j),f.push({kind:"checkpoint",capabilityName:j,...Zf(Z.config)?{config:Zf(Z.config)}:{}});continue}if(W==="mistakeLimit"){J.add(j),f.push({kind:"mistakeLimit",capabilityName:j});continue}if(W==="userInstructionService")J.add(j),f.push({kind:"userInstructionService",capabilityName:j})}return f}function NV($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function hy($){return Object.hasOwn($,"update")?$.update:$}function E4($){return $.trim().replace(/^\/+/,"").toLowerCase()}function by($){let f=($??[]).map(E4).filter(Boolean);return f.length>0?new Set(f):void 0}function ky($,f,J){if(!J)return!0;let Q=E4($),Z=E4(f),W=Q.includes(":")?Q.split(":").at(-1)??Q:Q,j=Z.includes(":")?Z.split(":").at(-1)??Z:Z;return J.has(Q)||J.has(Z)||J.has(W)||J.has(j)}function vQ($,f){let J=by(f);return $.records.skill.map((Q)=>({id:Q.id,name:Q.item.name,description:"description"in Q.item&&typeof Q.item.description==="string"?Q.item.description:void 0,disabled:Q.item.disabled===!0,skill:Q.item})).filter((Q)=>ky(Q.id,Q.name,J))}function Iy($,f){let J=async(Q,Z)=>{let W=E4(Q),X=vQ($,f).filter((B)=>B.id===W||E4(B.name)===W||B.id.endsWith(`:${W}`)).filter((B)=>!B.disabled);if(X.length!==1)return X.length>1?`Skill "${Q}" is ambiguous. Use one of: ${X.map((B)=>B.id).join(", ")}`:`Skill "${Q}" not found.`;let H=X[0].skill,Y=Z?.trim(),V=Y?`
559
+ ) 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,s()])}}function A_($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let f=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(f==="local"||f==="hub"||f==="remote")return f;return"auto"}var y4,N4;function B_($,f){if($!=="auto"&&$!=="hub")return;if(f.hub?.endpoint?.trim())return;kJ(f.hub?.workspaceRoot?.trim()||f.hub?.cwd?.trim()||process.cwd())}async function K_($){await $.reconcileDeadSessions?.().catch(()=>{})}function rY($){try{let f=new H$;return f.init(),new V$(f,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(f){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),pY($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:f,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new LQ(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function lY($,f,J){return new A$({sessionService:J??$.sessionService??rY($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:f,fetch:$.fetch})}async function yQ($){if(y4)return y4;if(N4)return await N4;return N4=(async()=>{return y4=rY($),await K_(y4),y4})().finally(()=>{N4=void 0}),await N4}async function Y2($){let f=e1($.distinctId);$.telemetry?.setDistinctId(f);let J=A_($);if(B_(J,$),J==="remote"){let Q=$.remote?.endpoint?.trim();if(!Q)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:Q}),new Z2({endpoint:Q,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(J==="hub"){let Q=$.hub?.endpoint?.trim(),Z=Q||await t1({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!Z)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:Z,explicitEndpoint:Q||void 0}),new S$({url:Z,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(J==="auto"){let Q=await R4({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(Q){$.logger?.log("Using discovered local hub runtime host",{url:Q});let Z=new S$({url:Q,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await Z.connect(),Z}catch(W){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:W}),pY($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:W,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),lY($,f)}return lY($,f)}class T4{clientName;runtimeAddress;automation;settings;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,f,J,Q,Z,W,j,X,H){this.clientName=f,this.runtimeAddress=J,this.host=$,this.prepare=Q,this.capabilities=Z,this.logger=W,this.telemetry=j,this.distinctId=X,this.settings=KH($),this.pendingPrompts=GH($),this.automation=new Y7(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=H?new A4({workspaceRoot:H.workspaceRoot??process.cwd(),specs:{cronSpecsDir:H.cronSpecsDir??H.cronDir,scope:NX(H.cronScope),workspaceRoot:H.workspaceRoot},runtimeHandlers:TX({host:$,getExtensionContext:()=>VJ({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:H.dbPath,logger:H.logger,pollIntervalMs:H.pollIntervalMs,claimLeaseSeconds:H.claimLeaseSeconds,globalMaxConcurrency:H.globalMaxConcurrency,watcherDebounceMs:H.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((Y)=>{if(Y.type!=="ended")return;this.disposeSessionBootstrap(Y.payload.sessionId)})}static async create($={}){let f=F0($.capabilities),J=await Y2({...$,capabilities:f}),Q=yX($.automation),Z=new T4(J,$.clientName,J.runtimeAddress,$.prepare,f,$.logger,$.telemetry,$.distinctId,Q?{...Q,logger:$.logger}:void 0);if(Q&&Q.autoStart!==!1)await Z.automation.start();return Z}async disposeSessionBootstrap($){let f=this.activeSessionBootstraps.get($);if(!f)return;this.activeSessionBootstraps.delete($),await Promise.resolve(f.dispose?.())}async start($){let f=FH($),J=await this.prepare?.(f);try{let Q=J?await J.applyToStartSessionInput(f):f,Z=await this.host.startSession(O7(Q,{defaultCapabilities:this.capabilities,withExtensionContext:(W)=>VJ({automationService:this.automationService,automation:this.automation,context:W,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(J)if(await this.host.getSession(Z.sessionId))this.activeSessionBootstraps.set(Z.sessionId,J);else await Promise.resolve(J.dispose?.());return DH({input:Q,sessionId:Z.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),Z}catch(Q){throw await Promise.resolve(J?.dispose?.()),Q}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let f=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(f.map((J)=>this.disposeSessionBootstrap(J)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await CJ(this.host,$);list=async($=200,f={})=>await this.listHistory({...f,limit:$});delete=async($)=>{let f=await this.host.deleteSession($);if(f)await this.disposeSessionBootstrap($);return f};update=(...$)=>this.host.updateSession(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let f=$.start?O7($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(J)=>VJ({automationService:this.automationService,automation:this.automation,context:J,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:f})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,f){return this.host.subscribe($,f)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}var aY={};q(aY,{resolvePluginConfigSearchPaths:()=>B8,resolveAndLoadAgentPlugins:()=>hf,resolveAgentPluginPaths:()=>h1,loadAgentPluginsFromPathsWithDiagnostics:()=>T$,loadAgentPluginsFromPaths:()=>M6,loadAgentPluginFromPath:()=>A8,discoverPluginModulePaths:()=>K8});var oY={};q(oY,{toHookConfigFileName:()=>F8,runSubprocessEvent:()=>V2,runHook:()=>B2,resolveHooksConfigSearchPaths:()=>G8,parseHookEventPayload:()=>A2,mergeAgentHooks:()=>x1,listHookConfigFiles:()=>s$,createSubprocessHooks:()=>rJ,createHookConfigFileHooks:()=>D8,createHookConfigFileExtension:()=>xf,createHookAuditHooks:()=>If,createAgentHooksExtension:()=>bf,HookEventPayloadSchema:()=>pJ,HookEventNameSchema:()=>lJ,HookConfigFileName:()=>kf,HOOK_CONFIG_FILE_EVENT_MAP:()=>P8,HOOKS_CONFIG_DIRECTORY_NAME:()=>S6});import{HookEventNameSchema as lJ,HookEventPayloadSchema as pJ,parseHookEventPayload as A2,resolveHookSessionContext as L_}from"@cline/shared";import{z as ff}from"zod";import{spawn as G_}from"node:child_process";import{augmentNodeCommandForDebug as P_,withResolvedClineBuildEnv as F_}from"@cline/shared";function D_($){let f=$.trim();if(!f)return{};let Q=f.split(`
560
+ `).map((W)=>W.trim()).filter(Boolean).filter((W)=>W.startsWith("HOOK_CONTROL\t")).map((W)=>W.slice(13)),Z=Q.length>0?Q[Q.length-1]:f;try{return{parsedJson:JSON.parse(Z)}}catch(W){return{parseError:W instanceof Error?W.message:"Failed to parse subprocess stdout JSON"}}}function R_($,f){let J=$ instanceof Error?$:Error(String($)),Q=J,Z=f.join(" ");if(Q.code==="EACCES")return Error(`Failed to execute hook command "${Z}" (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 "${Z}": ${J.message}`)}async function U_($,f){let J=$.stdin;if(!J)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((Q,Z)=>{let W=(j)=>{J.off("error",W);let X=j.code;if(X==="EPIPE"||X==="ERR_STREAM_DESTROYED"){Q();return}Z(j)};J.once("error",W),J.end(f,(j)=>{if(J.off("error",W),j){let X=j.code;if(X==="EPIPE"||X==="ERR_STREAM_DESTROYED"){Q();return}Z(j);return}Q()})})}async function V2($,f){let J=P_(f.command,{env:f.env,debugRole:"hook"});if(!Array.isArray(J)||J.length===0)throw Error("runSubprocessEvent requires a non-empty command");let Q=!!f.detached,Z=G_(J[0],J.slice(1),{cwd:f.cwd,env:F_(f.env),stdio:Q?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Q}),W=new Promise((B)=>{Z.once("spawn",()=>{try{f.onSpawn?.({command:J,pid:Z.pid??void 0,detached:Q})}catch{}B()})}),j=new Promise((B,K)=>{Z.once("error",(G)=>{K(R_(G,J))})});if(await U_(Z,JSON.stringify($)),Q){await Promise.race([W,j]),Z.unref();return}if(!Z.stdout||!Z.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let X="",H="",Y=!1,V;Z.stdout.on("data",(B)=>{X+=B.toString()}),Z.stderr.on("data",(B)=>{H+=B.toString()});let A=new Promise((B)=>{if((f.timeoutMs??0)>0)V=setTimeout(()=>{Y=!0,Z.kill("SIGKILL")},f.timeoutMs);Z.once("close",(K)=>{if(V)clearTimeout(V);let{parsedJson:G,parseError:R}=D_(X);B({exitCode:K,stdout:X,stderr:H,parsedJson:G,parseError:R,timedOut:Y})})});return await Promise.race([A,j])}var O_=ff.object({contextModification:ff.string().optional(),cancel:ff.boolean().optional(),review:ff.boolean().optional(),errorMessage:ff.string().optional(),context:ff.string().optional(),overrideInput:ff.unknown().optional()}).passthrough();var z_=["agent","hook"];async function B2($,f={}){let J=f.command??z_;return await V2($,{command:J,cwd:f.cwd,env:f.env,detached:f.detached,timeoutMs:f.timeoutMs,onSpawn:f.onSpawn})}function sY($){return $ instanceof Error?$:Error(String($))}function __($){if(!$||typeof $!=="object")return;let f=O_.safeParse($);if(!f.success)return;let J=f.data;if(!(("cancel"in J)||("review"in J)||("context"in J)||("contextModification"in J)||("overrideInput"in J)||("errorMessage"in J)))return;let Z=typeof J.context==="string"?J.context:typeof J.contextModification==="string"?J.contextModification:typeof J.errorMessage==="string"&&J.errorMessage.length>0?J.errorMessage:void 0;return{cancel:typeof J.cancel==="boolean"?J.cancel:void 0,review:typeof J.review==="boolean"?J.review:void 0,context:Z,overrideInput:Object.hasOwn(J,"overrideInput")?J.overrideInput:void 0}}function tY($){if(!$||typeof $!=="object")return{};let f={};for(let[J,Q]of Object.entries($))if(typeof Q==="string")f[J]=Q;else f[J]=JSON.stringify(Q);return f}function h$($,f,J){let Q=J.env??process.env,Z=Q.CLINE_USER_ID?.trim()||Q.USER?.trim()||"unknown",W=J.cwd||process.cwd();return{clineVersion:Q.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:f.conversationId,sessionContext:L_(J.sessionContext,{hookName:$,conversationId:f.conversationId,agentId:f.agentId,parentAgentId:f.parentAgentId}),workspaceRoots:W?[W]:[],workspaceInfo:J.workspaceInfo,userId:Z,agent_id:f.agentId,parent_agent_id:f.parentAgentId}}function y_($){return{name:$.name,message:$.message,stack:$.stack}}function N_($){let f=String($??"").toLowerCase();return f.includes("cancel")||f.includes("abort")||f.includes("interrupt")}function T_($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function M_($){return $.filter((f)=>f.type==="text"&&typeof f.text==="string").map((f)=>f.text).join("")}function q_($){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 w_($){if(!$)return;let f={};if($.cancel===!0)f.stop=!0;if($.overrideInput!==void 0)f.input=$.overrideInput;return Object.keys(f).length>0?f:void 0}async function Jf($,f){try{let J=await B2($,{command:f.command,cwd:f.cwd,env:f.env,detached:!0,onSpawn:f.onSpawn});f.onDispatch?.({payload:$,result:J,detached:!0})}catch(J){f.onDispatchError?.(sY(J),$)}}function rJ($={}){return{hooks:{beforeRun:async(X)=>{let H=T_(X);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let V={...h$("agent_resume",H,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await Jf(V,$)}else{let V={...h$("agent_start",H,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await Jf(V,$)}return},beforeTool:async(X)=>{let H={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},Y={...h$("tool_call",H,$),hookName:"tool_call",iteration:X.snapshot.iteration,tool_call:{id:X.toolCall.toolCallId,name:X.toolCall.toolName,input:X.input},preToolUse:{toolName:X.toolCall.toolName,parameters:tY(X.input)}};try{let V=await B2(Y,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:Y,result:V,detached:!1}),V?.timedOut)throw Error("tool_call hook command timed out");if(V?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${V.parseError}`);return w_(__(V?.parsedJson))}catch(V){$.onDispatchError?.(sY(V),Y);return}},afterTool:async(X)=>{let H=q_(X),Y={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},V={...h$("tool_result",Y,$),hookName:"tool_result",iteration:X.snapshot.iteration,tool_result:H,postToolUse:{toolName:H.name,parameters:tY(H.input),result:typeof H.output==="string"?H.output:JSON.stringify(H.output),success:!H.error,executionTimeMs:H.durationMs}};await Jf(V,$);return},afterRun:async({snapshot:X,result:H})=>{let Y={agentId:X.agentId,conversationId:X.conversationId??X.runId??X.agentId,parentAgentId:X.parentAgentId??null};if(H.status==="completed"){let B={...h$("agent_end",Y,$),hookName:"agent_end",iteration:H.iterations,turn:{outputText:H.outputText,status:H.status},taskComplete:{taskMetadata:{}}};await Jf(B,$);return}let V=H.status==="aborted"||N_(H.error?.message)?"agent_abort":"agent_error",A=V==="agent_error"?{...h$(V,Y,$),hookName:V,iteration:H.iterations,error:y_(H.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...h$(V,Y,$),hookName:V,reason:H.error?.message,taskCancel:{taskMetadata:{}}};await Jf(A,$)},onEvent:async(X)=>{if(X.type!=="message-added"||X.message.role!=="user")return;let H={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},Y={...h$("prompt_submit",H,$),hookName:"prompt_submit",userPromptSubmit:{prompt:M_(X.message.content),attachments:[]}};await Jf(Y,$)}},shutdown:async({agentId:X,conversationId:H,parentAgentId:Y,reason:V})=>{let A={...h$("session_shutdown",{agentId:X,conversationId:H,parentAgentId:Y},$),hookName:"session_shutdown",reason:V};await Jf(A,$)}}}var $A={};q($A,{writeHubDiscovery:()=>hJ,withHubStartupLock:()=>bJ,verifyHubConnection:()=>W$,truncateNotificationBody:()=>S4,toHubHealthUrl:()=>i7,stopLocalHubServerGracefully:()=>WQ,startHubWebSocketServer:()=>Wf,startHubServer:()=>oV,spawnDetachedHubServerWithRetry:()=>f2,spawnDetachedHubServer:()=>e7,sendHubCommand:()=>ZV,restartLocalHubIfIdleAfterStartupTimeout:()=>xJ,resolveWorkspaceHubOwnerContext:()=>QY,resolveSharedHubOwnerContext:()=>Y0,resolveHubUrl:()=>qQ,resolveHubOwnerContext:()=>w$,resolveHubEndpointOptions:()=>c0,resolveHubBuildId:()=>Y1,resolveDefaultHubPort:()=>$2,resolveDefaultHubPathname:()=>o7,resolveDefaultHubHost:()=>s7,resolveCompatibleLocalHubUrl:()=>R4,resolveClineDir:()=>eH,resolveClineDataDir:()=>G4,requestHubShutdown:()=>D4,rememberRecoverableLocalHubUrl:()=>V1,readHubDiscovery:()=>A0,probeHubServer:()=>R0,probeHubConnection:()=>QV,prewarmDetachedHubServer:()=>kJ,normalizeHubWebSocketUrl:()=>A1,isHubReconnectableTransportError:()=>QQ,isHubCommandTimeoutError:()=>IJ,isDiscoveryFilePresent:()=>fY,ensureHubWebSocketServer:()=>J5,ensureHubServer:()=>eV,ensureDetachedHubServer:()=>WY,ensureCompatibleLocalHubUrl:()=>t1,createLocalHubScheduleRuntimeHandlers:()=>Q5,createInMemoryHubOwnerContext:()=>$Y,createHubServerUrl:()=>t0,createHubAuthToken:()=>EJ,createConfiguredTelemetryService:()=>b$,createConfiguredTelemetryHandle:()=>D2,connectToHub:()=>tJ,clearHubDiscovery:()=>v0,NodeHubClient:()=>s0,NativeHubTransportAdapter:()=>k4,HubUIClient:()=>SQ,HubTransportError:()=>z0,HubSessionClient:()=>wQ,HubServerTransport:()=>U2,HubScheduleService:()=>G2,HubScheduleCommandService:()=>K2,HubCommandError:()=>J2,DEFAULT_HUB_PORT:()=>a7,DEFAULT_HUB_PATHNAME:()=>t7,DEFAULT_HUB_HOST:()=>n7,BrowserWebSocketHubAdapter:()=>b4});import{createSessionId as S_}from"@cline/shared";function u0($,f){return{version:$.version,requestId:$.requestId,ok:!0,payload:f}}function eY($,f,J){return{version:$.version,requestId:$.requestId??S_("hubreq_"),ok:!1,error:{code:f,message:J}}}class K2{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return u0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return u0($,{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 u0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return u0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return u0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return u0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return u0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return u0($,{execution:await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return u0($,{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 u0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return u0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return u0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return eY($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(f){return eY($,"schedule_command_failed",f instanceof Error?f.message:String(f))}}toCreateInput($){let f=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:f}}toUpdateInput($){let f=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:f}}}function nJ($){return $?new Date($).getTime():void 0}function C_($){let f=$.metadata?{...$.metadata}:void 0;if(f)delete f.__hubScheduleCreatedBy,delete f.__hubScheduleCwd,delete f.__hubRuntimeOptions;return f}function iJ($){let f=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof f?.__hubScheduleCwd==="string"?f.__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:nJ($.nextRunAt),lastRunAt:nJ($.lastRunAt),createdBy:typeof f?.__hubScheduleCreatedBy==="string"?f.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:f?.__hubRuntimeOptions&&typeof f.__hubRuntimeOptions==="object"&&!Array.isArray(f.__hubRuntimeOptions)?f.__hubRuntimeOptions:void 0,metadata:C_($)}}function E_($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function $V($,f){return{executionId:$.runId,scheduleId:f,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:nJ($.startedAt),endedAt:nJ($.completedAt),status:E_($.status),errorMessage:$.error}}class G2{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new V4({dbPath:$.dbPath}),this.materializer=new W4({store:this.store}),this.runner=new j4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,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(S7($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return iJ(this.store.createHubSchedule($))}getSchedule($){let f=this.store.getHubSchedule($);return f?iJ(f):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((f)=>iJ(f))}updateSchedule($,f){if(f.cronPattern!==void 0)S7(f.cronPattern);let J=this.store.getHubSchedule($);if(!J)return;let Q=f.workspaceRoot!==void 0?f.workspaceRoot.trim():J.workspaceRoot;if((f.enabled??J.enabled)&&!Q)throw Error("workspaceRoot is required for enabled schedules");let W=this.store.updateHubSchedule($,{...f,scheduleId:$});return W?iJ(W):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let f=this.store.enqueueHubScheduleRun($,"manual");if(!f)return;await this.runner.tick();let J=this.store.getRun(f.runId)??f;return $V(J,$)}listScheduleExecutions($){let f=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,J={specId:f?.specId,limit:$.limit};return this.store.listRuns(J).map((Z)=>{let W=f??this.store.getSpec(Z.specId);if(!W||W.source!=="hub-schedule")return;return $V(Z,W.externalId)}).filter((Z)=>{if(!Z)return!1;return!$.status||Z.status===$.status})}getScheduleStats($){let f=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(f.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let J=0,Q=0,Z=0,W;for(let j of f){if(j.status==="success"||j.status==="completed")J+=1;if(!W&&j.status!=="success"&&j.status!=="completed")W=j;if(j.startedAt&&j.endedAt)Z+=j.endedAt-j.startedAt,Q+=1}return{totalRuns:f.length,successRate:J/f.length,avgDurationSeconds:Q>0?Z/Q/1000:0,lastFailure:W}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let f=this.store.getSpec($.specId);if(!f||f.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:f.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:f.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+f.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let f={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(f).flatMap((J)=>J.source==="hub-schedule"&&J.nextRunAt?[{spec:J,nextRunAt:J.nextRunAt}]:[]).sort((J,Q)=>String(J.nextRunAt).localeCompare(String(Q.nextRunAt))).slice(0,$).map(({spec:J,nextRunAt:Q})=>({scheduleId:J.externalId,name:J.title,nextRunAt:Q}))}}aJ();function fy($,f){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let J=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(J?`Failed to connect to hub at ${f} (${J} event before socket open).`:`Failed to connect to hub at ${f}.`)}var Jy="cline-hub-auth.";function Qy($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function Zy($,f){let J=new URL($),Q=new URL(f);return J.search="",J.hash="",Q.search="",Q.hash="",J.toString()===Q.toString()}async function Wy($){let f=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),f)return f;let J=Y0(),Q=await A0(J.discoveryPath);if(Q?.url&&Zy($.toString(),Q.url))return Q.authToken;return}async function qQ($={}){let f=c0($);if(!Qy($)){let J=Y0(),Q=await A0(J.discoveryPath);if(Q?.url)return Q.url}return t0(f.host,f.port,f.pathname)}async function tJ($){return await new Promise((f,J)=>{(async()=>{let Q=new URL($),Z=await Wy(Q);Q.hash="";let W=new WebSocket(Q.toString(),Z?[`${Jy}${Z}`]:void 0),j=new Map,X=0;W.addEventListener("open",()=>{f({send(H){let Y=H.requestId??`hub-client-${++X}`;return new Promise((V,A)=>{j.set(Y,{resolve:V,reject:A});let B={kind:"command",envelope:{...H,requestId:Y}};W.send(JSON.stringify(B))})},close(){W.close()}})}),W.addEventListener("message",(H)=>{let Y=JSON.parse(String(H.data));if(Y.kind==="reply"&&Y.envelope.requestId){let V=j.get(Y.envelope.requestId);if(V)j.delete(Y.envelope.requestId),V.resolve(Y.envelope)}}),W.addEventListener("close",()=>{for(let H of j.values())H.reject(Error("Hub connection closed"));j.clear()}),W.addEventListener("error",(H)=>{J(fy(H,$))})})().catch(J)})}async function QV($){try{return(await tJ($)).close(),!0}catch{return!1}}async function ZV($,f){let J=await qQ($),Q=await tJ(J);try{return await Q.send({version:f.version??"v1",clientId:f.clientId??"hub-client",...f})}finally{Q.close()}}function o0($){return $?JSON.parse(JSON.stringify($)):{}}function sJ($){let f=$?.session&&typeof $.session==="object"?$.session:void 0;if(!f)return;let J=f.metadata&&typeof f.metadata==="object"?o0(f.metadata):void 0;return{sessionId:typeof f.sessionId==="string"?f.sessionId:"",parentSessionId:typeof J?.parentSessionId==="string"?J.parentSessionId:void 0,messagesPath:typeof J?.messagesPath==="string"?J.messagesPath:void 0,metadata:J}}function WV($,f){return $.error?.message??`hub command failed: ${f}`}function jy($){let f=o0($);if(typeof f.error==="string"&&f.error.trim())return{...f,error:f.error.trim()};let J=f.result&&typeof f.result==="object"?f.result:void 0;if(typeof J?.text==="string"&&J.text.trim())return{...f,error:J.text.trim()};let Q=J?.error&&typeof J.error==="object"?J.error:void 0;if(typeof Q?.message==="string"&&Q.message.trim())return{...f,error:Q.message.trim()};return f}function Xy($){let f=$?.checkpoint;if(!f||typeof f!=="object"||Array.isArray(f))throw Error("hub checkpoint restore returned no checkpoint");let J=f;if(typeof J.ref!=="string"||typeof J.createdAt!=="number"||typeof J.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return J}function Hy($){let f=$.sessionId?.trim();if(!f)return;switch($.event){case"iteration.started":return{sessionId:f,eventType:"runtime.chat.iteration_start",payload:o0($.payload)};case"iteration.finished":return{sessionId:f,eventType:"runtime.chat.iteration_end",payload:o0($.payload)};case"assistant.delta":return{sessionId:f,eventType:"runtime.chat.text_delta",payload:o0($.payload)};case"usage.updated":return{sessionId:f,eventType:"runtime.chat.usage",payload:o0($.payload)};case"tool.started":return{sessionId:f,eventType:"runtime.chat.tool_call_start",payload:o0($.payload)};case"tool.finished":return{sessionId:f,eventType:"runtime.chat.tool_call_end",payload:o0($.payload)};case"approval.requested":return{sessionId:f,eventType:"approval.requested",payload:o0($.payload)};case"run.aborted":return{sessionId:f,eventType:"runtime.chat.aborted",payload:o0($.payload)};case"run.failed":return{sessionId:f,eventType:"runtime.chat.failed",payload:jy($.payload)};case"run.completed":return{sessionId:f,eventType:"runtime.chat.completed",payload:o0($.payload)};default:return}}class wQ{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new s0({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 f=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}),J=sJ(f.payload);if(!J?.sessionId)throw Error("hub session create returned no session id");return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:"",messagesPath:J.messagesPath??""}}}async sendRuntimeSession($,f,J){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:f.prompt,mode:f.config.mode,attachments:f.attachments,delivery:f.delivery,timeoutSeconds:f.config.timeoutSeconds},$,J)).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 f=await this.client.command("session.get",void 0,$);return sJ(f.payload)}async readMessages($){let f=$.trim();if(!f)return[];await this.ensureMetadataApplied();let J=await this.client.command("session.messages",{sessionId:f},f);if(!J.ok)throw Error(WV(J,"session.messages"));let Q=J.payload?.messages;return Array.isArray(Q)?Q:[]}async restore($){let f=$.sessionId.trim();if(!f)throw Error("sessionId is required");let J=$.restore?.messages!==!1;if(J&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let Q=$.config,Z=await this.client.command("session.restore",{sessionId:f,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Q?{workspaceRoot:Q.workspaceRoot,cwd:Q.cwd,sessionConfig:{providerId:Q.provider,modelId:Q.model,apiKey:Q.apiKey,cwd:Q.cwd??Q.workspaceRoot,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:Q.mode??"act",rules:Q.rules,maxIterations:Q.maxIterations,enableTools:Q.enableTools,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},metadata:{source:Q.source??"cli",provider:Q.provider,model:Q.model,enableTools:Q.enableTools,enableSpawn:Q.enableSpawn,enableTeams:Q.enableTeams,prompt:void 0,interactive:Q.interactive!==!1},runtimeOptions:{mode:Q.mode,systemPrompt:Q.systemPrompt,maxIterations:Q.maxIterations,enableTools:Q.enableTools,enableSpawn:Q.enableSpawn,enableTeams:Q.enableTeams,autoApproveTools:Q.autoApproveTools,configExtensions:Q.configExtensions},modelSelection:{provider:Q.provider,model:Q.model,apiKey:Q.apiKey},toolPolicies:Q.toolPolicies}:{}},f);if(!Z.ok)throw Error(WV(Z,"session.restore"));let W=sJ(Z.payload);if(J&&!W?.sessionId)throw Error("hub checkpoint restore returned no session id");let j=Array.isArray(Z.payload?.messages)?Z.payload.messages:void 0,X=Xy(Z.payload);return{sessionId:W?.sessionId,startResult:W?.sessionId?{sessionId:W.sessionId,manifestPath:"",messagesPath:W.messagesPath??""}:void 0,...j?{messages:j}:{},checkpoint:X}}async listSessions($){await this.ensureMetadataApplied();let f=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(f.payload?.sessions)?f.payload?.sessions:[]).map((Q)=>sJ({session:Q})).filter((Q)=>Boolean(Q?.sessionId))}async deleteSession($,f=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:f})).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($,f){let J=new Set(($.sessionIds??[]).map((Z)=>Z.trim()).filter(Boolean)),Q=this.client.subscribe((Z)=>{let W=Hy(Z);if(!W)return;if(J.size>0&&!J.has(W.sessionId))return;f.onEvent?.(W)});return this.ensureMetadataApplied().catch((Z)=>{f.onError?.(Z instanceof Error?Z:Error(String(Z)))}),Q}streamTeamProgress($,f){let J=this.client.subscribe((Q)=>{if(Q.event!=="team.progress"||!Q.payload)return;f.onProjection?.(Q.payload)});return this.ensureMetadataApplied().catch((Q)=>{f.onError?.(Q instanceof Error?Q:Error(String(Q)))}),J}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let f=await this.client.command("schedule.list");return Array.isArray(f.payload?.schedules)?f.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...f})).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($,f){await this.ensureMetadataApplied();let J=await this.client.command("schedule.list_executions",{scheduleId:$,limit:f});return Array.isArray(J.payload?.executions)?J.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 f=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(f.payload?.upcoming)?f.payload?.upcoming:[]}}class SQ{client;constructor($){this.client=new s0({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 f=await this.client.command("session.list",{limit:$});return Array.isArray(f.payload?.sessions)?f.payload.sessions:[]}subscribeUI($){return this.client.subscribe((f)=>{switch(f.event){case"ui.notify":$.onNotify?.(f.payload);break;case"ui.show_window":$.onShowWindow?.(f.payload);break;case"hub.client.registered":$.onClientRegistered?.(f.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(f.payload??{});break;case"session.created":$.onSessionCreated?.(f.payload??{});break;case"session.updated":$.onSessionUpdated?.(f.payload??{});break;case"session.detached":$.onSessionDetached?.(f.payload??{});break}})}}function Yy($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((J)=>{if(J&&typeof J==="object"&&"type"in J&&J.type==="text"&&"text"in J&&typeof J.text==="string")return J.text.trim();return""}).filter(Boolean).join(`
561
+ `).trim()||void 0}var jV=120,CQ="...";function S4($){let f=$.trim();if(!f)return"";if(Buffer.byteLength(f,"utf8")<=jV)return f;let J=jV-Buffer.byteLength(CQ,"utf8");if(J<=0)return CQ;let Q="";for(let Z of f){if(Buffer.byteLength(Q+Z,"utf8")>J)break;Q+=Z}return`${Q}${CQ}`}async function XV($){let f=$?.sessionId?.trim()||"unknown",J=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,Z=[...await H1(J)].reverse().find((H)=>H.role==="assistant"),W=Z?Yy(Z.content):void 0,j=$?.workspaceRoot?.trim()||"workspace",X=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():j;return{title:`Task completed (${f})`,body:S4(W&&W.length>0?W:X.length>0?X:j),severity:"info"}}import{captureSdkError as f5,createSessionId as uy}from"@cline/shared";import{createSessionId as Ky}from"@cline/shared";import{createSessionId as By}from"@cline/shared";function Vy($){switch($){case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function Ay($){let f=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())f.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())f.parentAgentId=$.parentAgentId;if($.agentId?.trim())f.agentId=$.agentId;if($.conversationId?.trim())f.conversationId=$.conversationId;if($.messagesPath?.trim())f.messagesPath=$.messagesPath;if($.prompt?.trim())f.prompt=$.prompt;if($.provider?.trim())f.provider=$.provider;if($.model?.trim())f.model=$.model;if($.source?.trim())f.source=$.source;if(typeof $.pid==="number")f.pid=$.pid;return Object.keys(f).length>0?f:void 0}function oJ($,f,J,Q){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:f?.createdByClientId??"hub",status:Vy($.status),participants:f?[...f.participants.values()]:[],metadata:Ay($),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,...J?{usage:{...J}}:{},...Q?{aggregateUsage:{...Q}}:{}}}function c($,f){return{version:$.version,requestId:$.requestId,ok:!0,...f!==void 0?{payload:f}:{}}}function x($,f,J){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:f,message:J}}}function eJ($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function M0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function Qf($,f,J){return{version:"v1",event:$,eventId:By("hevt_"),sessionId:J,timestamp:Date.now(),payload:f}}async function d0($,f){let J=await $.sessionHost.getSession(f);if(!J)return;let Q=await $.sessionHost.getAccumulatedUsage?.(f);return oJ(J,$.sessionState.get(f),Q?.usage,Q?.aggregateUsage)}async function l0($,f){let J=await $.sessionHost.getSession(f);if(!J)return;let[Q,Z]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(f):[],$.sessionHost.getAccumulatedUsage?.(f)]);return j$({session:J,messages:Q,usage:Z?.usage,aggregateUsage:Z?.aggregateUsage})}function $5($,f,J,Q,Z={}){let W=$.sessionState.get(f);if(W){if(Z.interactive!==void 0)W.interactive=Z.interactive;if(!W.participants.has(J))W.participants.set(J,{clientId:J,attachedAt:Date.now(),role:Q});return W}let j={createdByClientId:J,interactive:Z.interactive??!0,participants:new Map([[J,{clientId:J,attachedAt:Date.now(),role:Q}]])};return $.sessionState.set(f,j),j}async function EQ($,f){let J=Ky("approval_"),Q=f.sessionId;if($.sessionState.get(Q)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((W)=>{$.pendingApprovals.set(J,{sessionId:Q,resolve:W}),$.publish($.buildEvent("approval.requested",{approvalId:J,sessionId:f.sessionId,agentId:f.agentId,conversationId:f.conversationId,iteration:f.iteration,toolCallId:f.toolCallId,toolName:f.toolName,inputJson:JSON.stringify(f.input??null),policy:f.policy},Q))})}function hQ($,f,J){let Q=$.pendingApprovals.get(f);if(!Q)return;return $.pendingApprovals.delete(f),Q.resolve(J),{sessionId:Q.sessionId}}function bQ($,f,J){let Q=0;for(let[Z,W]of[...$.pendingApprovals.entries()]){if(!f({approvalId:Z,sessionId:W.sessionId}))continue;$.pendingApprovals.delete(Z),W.resolve({approved:!1,reason:J}),$.publish($.buildEvent("approval.resolved",{approvalId:Z,approved:!1,cancelled:!0,reason:J},W.sessionId)),Q+=1}return Q}async function HV($,f){let J=typeof f.payload?.approvalId==="string"?f.payload.approvalId.trim():"";if(!$.pendingApprovals.get(J))return x(f,"approval_not_found",`Unknown approval: ${J}`);let Z=typeof f.payload?.reason==="string"?f.payload.reason:f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)&&typeof f.payload.payload.reason==="string"?f.payload.payload.reason:void 0,W=f.payload?.approved===!0,j=hQ($,J,{approved:W,reason:Z});if(!j)return x(f,"approval_not_found",`Unknown approval: ${J}`);return $.publish($.buildEvent("approval.resolved",{approvalId:J,approved:W,reason:Z},j.sessionId)),c(f,{approvalId:J,approved:W})}import{createSessionId as Fy}from"@cline/shared";function Gy($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var YV={debug:10,info:20,warn:30,error:40,silent:50};function Py(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function m($,f,J={}){if(YV[$]<YV[Py()])return;let Q=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:f,...Object.fromEntries(Object.entries(J).map(([Z,W])=>[Z,Gy(W)]).filter(([,Z])=>Z!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${Q}`);return}console.log(`[hub] ${Q}`)}function kQ($,f){let J=f instanceof Error?f.stack||f.message:String(f);m("error",$,{error:J})}async function VV($,f,J,Q,Z,W){let j=Fy("capreq_"),X=performance.now();return m("info","capability.request.start",{requestId:j,sessionId:f,capabilityName:J,targetClientId:Z}),await new Promise((H,Y)=>{$.pendingCapabilityRequests.set(j,{sessionId:f,targetClientId:Z,capabilityName:J,onProgress:W,resolve:(V)=>{if(m(V.ok?"info":"warn","capability.request.end",{requestId:j,sessionId:f,capabilityName:J,targetClientId:Z,ok:V.ok,error:V.error,durationMs:Math.round(performance.now()-X)}),!V.ok){Y(Error(V.error||`Capability ${J} was rejected by ${Z}.`));return}H(V.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:j,targetClientId:Z,capabilityName:J,payload:Q},f)),m("info","capability.request.published",{requestId:j,sessionId:f,capabilityName:J,targetClientId:Z})})}function AV($,f){let J=typeof f.payload?.requestId==="string"?f.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(J);if(!Q)return x(f,"capability_not_found",`Unknown capability request: ${J}`);if((f.clientId?.trim()||"")!==Q.targetClientId)return x(f,"capability_wrong_client",`Capability request ${J} is owned by ${Q.targetClientId}`);if(f.sessionId?.trim()&&f.sessionId.trim()!==Q.sessionId)return x(f,"capability_wrong_session",`Capability request ${J} belongs to session ${Q.sessionId}`);let W=f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)?f.payload.payload:{};return Q.onProgress?.(W),c(f,{requestId:J})}function K1($,f,J){let Q=0;for(let[Z,W]of[...$.pendingCapabilityRequests.entries()]){if(!f({requestId:Z,...W}))continue;$.pendingCapabilityRequests.delete(Z),m("warn","capability.request.cancelled",{requestId:Z,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,reason:J}),W.resolve({ok:!1,error:J}),$.publish($.buildEvent("capability.resolved",{requestId:Z,capabilityName:W.capabilityName,targetClientId:W.targetClientId,ok:!1,cancelled:!0,error:J},W.sessionId)),Q+=1}return Q}async function BV($,f){let J=typeof f.payload?.sessionId==="string"?f.payload.sessionId.trim():f.sessionId?.trim()||"",Q=typeof f.payload?.capabilityName==="string"?f.payload.capabilityName.trim():"",Z=typeof f.payload?.targetClientId==="string"?f.payload.targetClientId.trim():"";if(!J||!Q||!Z)return x(f,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let W=f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)?f.payload.payload:{},j=await $.requestCapability(J,Q,W,Z);return c(f,j)}catch(W){return x(f,"capability_request_failed",W instanceof Error?W.message:String(W))}}function KV($,f){let J=typeof f.payload?.requestId==="string"?f.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(J);if(!Q)return x(f,"capability_not_found",`Unknown capability request: ${J}`);let Z=f.clientId?.trim()||"";if(Z!==Q.targetClientId)return x(f,"capability_wrong_client",`Capability request ${J} is owned by ${Q.targetClientId}`);if(f.sessionId?.trim()&&f.sessionId.trim()!==Q.sessionId)return x(f,"capability_wrong_session",`Capability request ${J} belongs to session ${Q.sessionId}`);$.pendingCapabilityRequests.delete(J);let W=f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)?f.payload.payload:void 0,j=typeof f.payload?.error==="string"?f.payload.error:void 0,X=f.payload?.ok===!0;return m(X?"info":"warn","capability.respond",{requestId:J,sessionId:Q.sessionId,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,respondedByClientId:Z,ok:X,error:j}),Q.resolve({ok:X,payload:W,error:j}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,respondedByClientId:Z,ok:X,payload:W,error:j},Q.sessionId)),c(f,{requestId:J,ok:X})}import{createSessionId as Dy}from"@cline/shared";function GV($,f){let J=f.payload,Q=J?.clientId?.trim()||f.clientId?.trim()||Dy("client_");return $.clients.set(Q,{clientId:Q,clientType:J?.clientType??"unknown",displayName:J?.displayName,actorKind:J?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:J?.transport??"native",capabilities:J?.capabilities??[],metadata:J?.metadata,workspaceContext:J?.workspaceContext}),$.publish($.buildEvent("hub.client.registered",{clientId:Q,clientType:J?.clientType??"unknown",displayName:J?.displayName,connectedAt:Date.now()})),c(f,{clientId:Q})}function PV($,f){let J=f.clientId?.trim(),Q=J?$.clients.get(J):void 0;if(!J||!Q)return x(f,"client_not_found","Client is not registered with this hub.");let Z=eJ(f.payload?.metadata);if(Q.lastSeenAt=Date.now(),Z)Q.metadata=JSON.parse(JSON.stringify(Z));return c(f)}function FV($,f,J){let Q=f.clientId?.trim();if(Q)$.clients.delete(Q),J(Q),$.publish($.buildEvent("hub.client.disconnected",{clientId:Q}));return c(f)}function DV($,f){return c(f,{clients:[...$.clients.values()]})}var Ry=30000;function Uy($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function Ly($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function Oy($){return $?$:void 0}function zy($){let f=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(f&&Number.isFinite(f)&&f>0)return Math.floor(f);let J=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(J&&Number.isFinite(J)&&J>0)return Math.floor(J*1000);return}async function _y($,f,J,Q){let Z=performance.now(),W=!1,j={command:f.command,requestId:f.requestId,clientId:f.clientId,sessionId:J.sessionId,timeoutMs:Q},X=setInterval(()=>{if(W)return;let V=Math.round(performance.now()-Z);m("warn","run.heartbeat",{...j,elapsedMs:V}),$.publish($.buildEvent("run.heartbeat",{requestId:f.requestId,elapsedMs:V,...Q?{timeoutMs:Q}:{}},J.sessionId))},Ry),H=$.sessionHost.runTurn(J);H.then((V)=>{if(!W)return;m("warn","run.late_end",{...j,elapsedMs:Math.round(performance.now()-Z),finishReason:V?.finishReason})},(V)=>{if(!W)return;m("error","run.late_error",{...j,elapsedMs:Math.round(performance.now()-Z),error:V})});let Y;try{if(!Q)return await H;return await Promise.race([H,new Promise((V,A)=>{Y=setTimeout(()=>{let B=`Hub run ${f.command} timed out after ${Q}ms.`;W=!0,clearInterval(X),A(Error(B)),m("error","run.timeout",{...j,elapsedMs:Math.round(performance.now()-Z)}),bQ($,(K)=>K.sessionId===J.sessionId,B),K1($,(K)=>K.sessionId===J.sessionId,B),$.sessionHost.abort(J.sessionId,B).catch((K)=>{m("error","run.timeout_abort_failed",{...j,error:K})})},Q)})])}finally{if(W=!0,clearInterval(X),Y)clearTimeout(Y)}}async function RV($,f){let J=M0(f),Q=f.payload&&typeof f.payload==="object"?f.payload:{},Z=typeof Q.prompt==="string"?Q.prompt:typeof Q.input==="string"?Q.input:"";if(!Z.trim())return x(f,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,J));let W=Q.attachments&&typeof Q.attachments==="object"&&!Array.isArray(Q.attachments)?Q.attachments:void 0,j=Array.isArray(W?.userFiles)?W.userFiles.filter((V)=>typeof V==="string"):void 0,X=zy(Q);$.suppressNextTerminalEventBySession.set(J,"run.start.reply");let H;try{H=await _y($,f,{sessionId:J,prompt:Z,mode:Oy(Q.mode),delivery:Q.delivery==="queue"||Q.delivery==="steer"?Q.delivery:void 0,userImages:Array.isArray(W?.userImages)?W.userImages:void 0,userFiles:j,timeoutMs:X},X)}catch(V){if($.suppressNextTerminalEventBySession.get(J)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(J);throw $.publish($.buildEvent("run.failed",{reason:"error",error:V instanceof Error?V.message:String(V)},J)),V}if(H){let V=await l0($,J),A=Ly(H);if($.publish($.buildEvent(Uy(H.finishReason),{reason:H.finishReason,...A?{error:A}:{},result:H,...V?{snapshot:V}:{}},J)),$.suppressNextTerminalEventBySession.get(J)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(J)}else $.suppressNextTerminalEventBySession.delete(J);let Y=await l0($,J);return c(f,H||Y?{...H?{result:H}:{},...Y?{snapshot:Y}:{}}:void 0)}async function UV($,f){let J=M0(f),Q=typeof f.payload?.reason==="string"?f.payload.reason:"Run was aborted before pending approval or capability request was resolved.";return bQ($,(Z)=>Z.sessionId===J,Q),await $.sessionHost.abort(J,f.payload?.reason),K1($,(Z)=>Z.sessionId===J,Q),$.publish($.buildEvent("run.aborted",{reason:Q},J)),c(f,{applied:!0})}async function LV($,f){let J=A2(f.payload?.payload);if(!J)return x(f,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(J),c(f,{applied:!0})}async function OV($,f){switch(f.type){case"chunk":return;case"agent_event":await yy($,f);return;case"hook":if(f.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:f.payload.toolName},f.payload.sessionId));else if(f.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:f.payload.toolName},f.payload.sessionId));return;case"team_progress":{let J={type:"team_progress_projection",version:1,sessionId:f.payload.sessionId,summary:f.payload.summary,lastEvent:f.payload.lifecycle};$.publish($.buildEvent("team.progress",J,f.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:f.payload.sessionId,prompts:f.payload.prompts},f.payload.sessionId));return;case"pending_prompt_submitted":{let J={id:f.payload.id,prompt:f.payload.prompt,delivery:f.payload.delivery,attachmentCount:f.payload.attachmentCount};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:f.payload.sessionId,prompt:J},f.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:f.payload.sessionId,snapshot:f.payload.snapshot},f.payload.sessionId));return;case"status":{let[J,Q]=await Promise.all([d0($,f.payload.sessionId),l0($,f.payload.sessionId)]);if(J)$.publish($.buildEvent("session.updated",{session:J,...Q?{snapshot:Q}:{}},f.payload.sessionId));return}case"ended":await Ny($,f);return;default:return}}async function yy($,f){let{sessionId:J,event:Q}=f.payload;if(Q.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:Q.iteration},J));return}if(Q.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:Q.iteration,hadToolCalls:Q.hadToolCalls,toolCallCount:Q.toolCallCount},J));return}if(Q.type==="content_start"){if(Q.contentType==="text"&&typeof Q.text==="string"&&Q.text.length>0){$.publish($.buildEvent("assistant.delta",{text:Q.text},J));return}if(Q.contentType==="reasoning"){if(Q.redacted&&!Q.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},J));return}if(typeof Q.reasoning==="string"&&Q.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:Q.reasoning,redacted:Q.redacted===!0},J));return}if(Q.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:Q.toolCallId,toolName:Q.toolName,input:Q.input},J));return}}if(Q.type==="content_end"){switch(Q.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:Q.text},J));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:Q.reasoning},J));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:Q.toolCallId,toolName:Q.toolName,output:Q.output,error:Q.error},J));break}return}if(Q.type==="usage"){let Z;try{Z=await $.sessionHost.getAccumulatedUsage?.(J)}catch{Z=void 0}$.publish($.buildEvent("usage.updated",{sessionId:J,delta:{inputTokens:Q.inputTokens,outputTokens:Q.outputTokens,cacheReadTokens:Q.cacheReadTokens??0,cacheWriteTokens:Q.cacheWriteTokens??0,totalCost:Q.cost??0},totals:{inputTokens:Q.totalInputTokens,outputTokens:Q.totalOutputTokens,cacheReadTokens:Q.totalCacheReadTokens??0,cacheWriteTokens:Q.totalCacheWriteTokens??0,totalCost:Q.totalCost??0},usage:Z?.usage,aggregateUsage:Z?.aggregateUsage,agent:{kind:f.payload.teamRole==="teammate"?"teammate":Q.parentAgentId?"subagent":"lead",agentId:Q.agentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamAgentId:f.payload.teamAgentId,teamRole:f.payload.teamRole}},J));return}if(Q.type==="done")$.publish($.buildEvent("agent.done",{reason:Q.reason,text:Q.text,iterations:Q.iterations,usage:Q.usage},J))}async function Ny($,f){let J=$.suppressNextTerminalEventBySession.get(f.payload.sessionId),Q=J===f.payload.reason||J==="run.start.reply";if(Q)$.suppressNextTerminalEventBySession.delete(f.payload.sessionId);let[Z,W]=await Promise.all([d0($,f.payload.sessionId),l0($,f.payload.sessionId)]);if(f.payload.reason==="completed"){let j=await XV(Z);$.publish($.buildEvent("ui.notify",j,f.payload.sessionId))}if(Q)return;$.publish($.buildEvent(f.payload.reason==="aborted"?"run.aborted":f.payload.reason==="error"||f.payload.reason==="failed"?"run.failed":"run.completed",{reason:f.payload.reason,...W?{snapshot:W}:{}},f.payload.sessionId))}import{createSessionId as MV,parseRuntimeConfigExtensions as qV}from"@cline/shared";var NV={};q(NV,{SessionVersioningService:()=>G1,SessionVersioningError:()=>q0});var yV={};q(yV,{trimMessagesToCheckpoint:()=>_V,trimMessagesBeforeCheckpoint:()=>xQ,readSessionCheckpointHistory:()=>C4,createRestoredCheckpointMetadata:()=>IQ,createCheckpointRestorePlan:()=>gQ,applyCheckpointToWorktree:()=>mQ});import{execFile as Ty}from"node:child_process";import{promisify as My}from"node:util";var R2=My(Ty);function C4($){let f=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(f?.history)?f.history:[]).filter((Q)=>!!Q&&typeof Q==="object"&&!Array.isArray(Q)).flatMap((Q)=>{let Z=String(Q.ref??"").trim(),W=Number(Q.createdAt??0),j=Number(Q.runCount??0);if(Z.length===0||!Number.isFinite(W)||!Number.isInteger(j)||j<1)return[];let X=Q.kind==="stash"||Q.kind==="commit"?Q.kind:void 0;return[{ref:Z,createdAt:W,runCount:j,...X?{kind:X}:{}}]})}function IQ($,f){let J=C4($).filter((Z)=>Z.runCount<=f),Q=J.at(-1);return Q?{latest:Q,history:J}:void 0}function qy($,f){return $.reduce((J,Q)=>{if(Q.runCount>f)return J;if(!J||Q.runCount>J.runCount)return Q;return J},void 0)}function zV($,f){let J=0;for(let Q=0;Q<$.length;Q+=1){let Z=$[Q];if(Z?.role!=="user")continue;if(("metadata"in Z&&Z.metadata&&typeof Z.metadata==="object"?Z.metadata:void 0)?.kind==="recovery_notice")continue;if(J+=1,J===f)return Q}throw Error(`Could not find user message for checkpoint run ${f}`)}function _V($,f){let J=zV($,f);return $.slice(0,J+1)}function xQ($,f){let J=zV($,f);return $.slice(0,J)}function gQ($){let f=$.checkpointRunCount;if(!Number.isInteger(f)||f<1)throw Error("checkpointRunCount must be a positive integer");let J=qy(C4($.session),f);if(!J)throw Error(`No checkpoint found at or before run ${f} in session ${$.session.sessionId}`);let Q=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!Q)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:J,cwd:Q,...$.restoreMessages!==!1?{messages:_V($.messages??[],f)}:{}}}async function mQ($,f){if((await R2("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await R2("git",["-C",$,"cat-file","-e",`${f.ref}^{commit}`],{windowsHide:!0}),await R2("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await R2("git",["-C",$,"clean","-fd"],{windowsHide:!0}),f.kind==="commit"){await R2("git",["-C",$,"reset","--hard",f.ref],{windowsHide:!0});return}await R2("git",["-C",$,"stash","apply",f.ref],{windowsHide:!0})}class q0 extends Error{code;constructor($,f){super(f);this.code=$;this.name="SessionVersioningError"}}function wy($){let f=$.sessionId.trim();if(!f)throw new q0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new q0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new q0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new q0("invalid_restore","checkpointRunCount must be a positive integer");return f}class G1{async restoreCheckpoint($){let f=$.restore?.messages!==!1,J=$.restore?.workspace!==!1,Q=wy({sessionId:$.sessionId,restoreMessages:f,restoreWorkspace:J,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),Z=await $.getSession(Q);if(!Z)throw new q0("session_not_found",`Session ${Q} not found`);let W=f?await $.readMessages(Q):void 0;if(f&&W?.length===0)throw new q0("session_messages_not_found",`No messages found for session ${Q}`);let j=gQ({session:Z,messages:W,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:f});if(J)await($.applyWorkspaceCheckpoint??mQ)(j.cwd,j.checkpoint);let X=j$({session:Z,messages:W});if(!f)return{checkpoint:j.checkpoint,sourceSnapshot:X};let H=IQ(Z,$.checkpointRunCount),Y=$.restore?.omitCheckpointMessageFromSession?xQ(W??[],$.checkpointRunCount):j.messages??[],V={sourceSession:Z,sourceMessages:W,sourceSnapshot:X,plan:j,restoredCheckpointMetadata:H,initialMessages:Y,restoreMessages:f,restoreWorkspace:J,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new q0("invalid_restore","start is required when restore.messages is true");let A=$.buildStartInput?await $.buildStartInput(V,$.start):$.start,B=await $.startSession(A),K=$.getStartedSessionId?.(B);if(K)await($.retainCheckpointRefs??Rj)(j.cwd,K,H?.history??[]);let G=K&&$.readRestoredSession?await $.readRestoredSession(K):void 0;return{sessionId:K,startResult:B,messages:j.messages,checkpoint:j.checkpoint,sourceSnapshot:X,...G?{restoredSnapshot:j$({session:G,messages:Y})}:{}}}}import{HUB_CHECKPOINT_CAPABILITY as ag,HUB_COMPACTION_CAPABILITY as tg,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as sg,HUB_HOOK_CAPABILITY_PREFIX as og,HUB_MISTAKE_LIMIT_CAPABILITY as eg,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as $m,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as fm,isHubToolExecutorName as Sy}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as jm,HUB_COMPACTION_CAPABILITY as Xm,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Hm,HUB_HOOK_CAPABILITY_PREFIX as Ym,HUB_MISTAKE_LIMIT_CAPABILITY as Vm,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Am,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Bm}from"@cline/shared";var Cy=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function Zf($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function Ey($,f){let J=typeof $.name==="string"?$.name.trim():"",Q=typeof $.description==="string"?$.description:"",Z=typeof $.capabilityName==="string"?$.capabilityName.trim():"",W=Zf($.inputSchema);if(!J||!Q||!W||!Z||f.has(Z))return;return f.add(Z),{kind:"tool",capabilityName:Z,name:J,description:Q,inputSchema:W,...Zf($.lifecycle)?{lifecycle:Zf($.lifecycle)}:{}}}function cQ($){if(!Array.isArray($))return[];let f=[],J=new Set;for(let Q of $){if(!Q||typeof Q!=="object"||Array.isArray(Q))continue;let Z=Q,W=Z.kind,j=typeof Z.capabilityName==="string"?Z.capabilityName.trim():"";if(!j||J.has(j))continue;if(W==="tool"){let X=Ey(Z,J);if(X)f.push(X);continue}if(W==="toolExecutor"){let X=Z.executor;if(!Sy(X))continue;J.add(j),f.push({kind:"toolExecutor",capabilityName:j,executor:X});continue}if(W==="hook"){let X=typeof Z.name==="string"?Z.name.trim():"";if(!X)continue;J.add(j),f.push({kind:"hook",capabilityName:j,name:X});continue}if(W==="compaction"){J.add(j),f.push({kind:"compaction",capabilityName:j,...Zf(Z.config)?{config:Zf(Z.config)}:{}});continue}if(W==="checkpoint"){J.add(j),f.push({kind:"checkpoint",capabilityName:j,...Zf(Z.config)?{config:Zf(Z.config)}:{}});continue}if(W==="mistakeLimit"){J.add(j),f.push({kind:"mistakeLimit",capabilityName:j});continue}if(W==="userInstructionService")J.add(j),f.push({kind:"userInstructionService",capabilityName:j})}return f}function TV($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function hy($){return Object.hasOwn($,"update")?$.update:$}function E4($){return $.trim().replace(/^\/+/,"").toLowerCase()}function by($){let f=($??[]).map(E4).filter(Boolean);return f.length>0?new Set(f):void 0}function ky($,f,J){if(!J)return!0;let Q=E4($),Z=E4(f),W=Q.includes(":")?Q.split(":").at(-1)??Q:Q,j=Z.includes(":")?Z.split(":").at(-1)??Z:Z;return J.has(Q)||J.has(Z)||J.has(W)||J.has(j)}function vQ($,f){let J=by(f);return $.records.skill.map((Q)=>({id:Q.id,name:Q.item.name,description:"description"in Q.item&&typeof Q.item.description==="string"?Q.item.description:void 0,disabled:Q.item.disabled===!0,skill:Q.item})).filter((Q)=>ky(Q.id,Q.name,J))}function Iy($,f){let J=async(Q,Z)=>{let W=E4(Q),X=vQ($,f).filter((B)=>B.id===W||E4(B.name)===W||B.id.endsWith(`:${W}`)).filter((B)=>!B.disabled);if(X.length!==1)return X.length>1?`Skill "${Q}" is ambiguous. Use one of: ${X.map((B)=>B.id).join(", ")}`:`Skill "${Q}" not found.`;let H=X[0].skill,Y=Z?.trim(),V=Y?`
562
562
  <command-args>${Y}</command-args>`:"",A=H.description?.trim()?`Description: ${H.description.trim()}
563
563
 
564
564
  `:"";return`<command-name>${H.name}</command-name>${V}
@@ -566,19 +566,19 @@ ${Z}`,$.config.mode)}function _4($,f){return f_($,f==="plan"?"plan":f==="yolo"?"
566
566
  ${A}${H.instructions}
567
567
  </command-instructions>`};return Object.defineProperty(J,"configuredSkills",{get:()=>vQ($,f).map(({skill:Q,...Z})=>Z),enumerable:!0}),J}function xy($,f,J,Q){let Z={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},W=async()=>{let j=await Q($,J.capabilityName,{},f);if(j?.snapshot)Z=j.snapshot};return{start:W,stop:()=>{},refreshType:async()=>{await W()},listRecords:(j)=>[...Z.records[j]],listRuntimeCommands:()=>[...Z.runtimeCommands],resolveRuntimeSlashCommand:(j)=>{if(!j.startsWith("/")||j.length<2)return j;let H=j.match(/^\/(\S+)/)?.[1];if(!H)return j;let Y=Z.runtimeCommands.find((V)=>V.name===H);return Y?`${Y.instructions}${j.slice(H.length+1)}`:j},hasConfiguredSkills:(j)=>vQ(Z,j).some((X)=>!X.disabled),createExtension:(j)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[j.includeRules?"rules":void 0,j.registerSkillsTool?"tools":void 0,j.includeSkills||j.includeWorkflows?"commands":void 0].filter((X)=>Boolean(X))},setup(X){if(j.includeRules)X.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>af(Z.records.rule.map((H)=>H.item).filter((H)=>H.disabled!==!0))});if(j.registerSkillsTool)X.registerTool(R1(Iy(Z,j.allowedSkillNames)));for(let H of Z.runtimeCommands.filter((Y)=>Y.kind==="skill"&&j.includeSkills||Y.kind==="workflow"&&j.includeWorkflows))X.registerCommand({name:H.name,description:H.description,handler:(Y)=>{let V=Y.trim();return V?`${H.instructions}
568
568
 
569
- ${V}`:H.instructions}})}})}}function gy($,f,J,Q){let Z=J.map((W)=>[W.executor,async(...j)=>{let X=j.at(-1),H=j.slice(0,-1);return(await Q($,W.capabilityName,{executor:W.executor,args:H,context:NV(X)},f))?.result}]);return Z.length>0?Object.fromEntries(Z):void 0}function my($,f,J,Q){if(J.length===0)return;return J.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema,lifecycle:Z.lifecycle,async execute(W,j){return(await Q($,Z.capabilityName,{toolName:Z.name,input:W,context:NV(j)},f,j.emitUpdate?(H)=>{j.emitUpdate?.(hy(H))}:void 0))?.result}}))}function vy($,f,J,Q){let Z=new Map(J.map((j)=>[j.name,j])),W={};for(let j of Cy){let X=Z.get(j);if(!X)continue;W[j]=async(H)=>{return(await Q($,X.capabilityName,{context:H},f))?.control}}return Object.keys(W).length>0?W:void 0}function uQ($){let f=$.contributions.filter((H)=>H.kind==="toolExecutor"),J=$.contributions.filter((H)=>H.kind==="tool"),Q=$.contributions.filter((H)=>H.kind==="hook"),Z=$.contributions.find((H)=>H.kind==="compaction"),W=$.contributions.find((H)=>H.kind==="checkpoint"),j=$.contributions.find((H)=>H.kind==="mistakeLimit"),X=$.contributions.find((H)=>H.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:gy($.sessionId,$.targetClientId,f,$.requestCapability),localRuntime:{...Q.length>0?{hooks:vy($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...J.length>0?{extraTools:my($.sessionId,$.targetClientId,J,$.requestCapability)}:{},...Z?{compaction:{...$.sessionConfig?.compaction??{},...Z.config,compact:async(H)=>{return(await $.requestCapability($.sessionId,Z.capabilityName,{context:H},$.targetClientId))?.result}}}:{},...W?{checkpoint:{...$.sessionConfig?.checkpoint??{},...W.config,createCheckpoint:async(H)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:H},$.targetClientId))?.result}}}:{},...j?{onConsecutiveMistakeLimitReached:async(H)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:H},$.targetClientId))?.result}}:{},...X?{userInstructionService:xy($.sessionId,$.targetClientId,X,$.requestCapability)}:{}}}}var wV="hubCapabilityOwnerClientId";function SV($,f){$[wV]=f}function cy($){let f=$?.[wV];return typeof f==="string"&&f.trim()?f.trim():void 0}async function CV($,f,J){let Q=performance.now(),Z={command:f.command,requestId:f.requestId,clientId:f.clientId,sessionId:f.sessionId};m("info","session.create.begin",Z);let W=f.payload&&typeof f.payload==="object"?f.payload:{},j=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{},X=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0,H=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{};if(typeof X?.mode==="string")j.mode=X.mode;else if(typeof H.mode==="string")j.mode=H.mode;if(typeof X?.systemPrompt==="string")j.systemPrompt=X.systemPrompt;else if(typeof H.systemPrompt==="string")j.systemPrompt=H.systemPrompt;if(X?.checkpoint?.enabled===!0)j.checkpointEnabled=!0;else if(H.checkpointEnabled===!0)j.checkpointEnabled=!0;let Y=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},V=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():"";if(!V)return m("warn","session.create.invalid",{...Z,reason:"missing_workspace_root"}),x(f,"invalid_session_create","session.create requires workspaceRoot or cwd");let A=f.clientId?.trim()||"hub-client",B=cQ(H.clientContributions);if(m("info","session.create.contributions_parsed",{...Z,clientId:A,workspaceRoot:V,cwd:typeof W.cwd==="string"?W.cwd:void 0,contributionCount:B.length}),B.length>0)SV(j,A);let G=(typeof X?.sessionId==="string"?X.sessionId.trim():"")||MV(),R=qV(H.configExtensions);m("info","session.create.runtime_build.begin",{...Z,sessionId:G,configExtensionCount:R?.length??0});let F=uQ({sessionId:G,targetClientId:A,contributions:B,sessionConfig:X,requestCapability:$.requestCapability});m("info","session.create.start_session.begin",{...Z,sessionId:G,provider:X?.providerId??(typeof Y.provider==="string"?Y.provider:typeof j.provider==="string"?j.provider:"hub"),model:X?.modelId??(typeof Y.model==="string"?Y.model:typeof j.model==="string"?j.model:"hub")});let P=await $.sessionHost.startSession({source:typeof j.source==="string"?j.source:void 0,interactive:j.interactive!==!1,sessionMetadata:Object.keys(j).length>0?j:void 0,initialMessages:Array.isArray(W.initialMessages)?W.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:R,...F.localRuntime},capabilities:{toolExecutors:F.toolExecutors,requestToolApproval:J},config:{...X??{},sessionId:G,providerId:X?.providerId??(typeof Y.provider==="string"?Y.provider:typeof j.provider==="string"?j.provider:"hub"),modelId:X?.modelId??(typeof Y.model==="string"?Y.model:typeof j.model==="string"?j.model:"hub"),apiKey:X?.apiKey??(typeof Y.apiKey==="string"?Y.apiKey:void 0),cwd:X?.cwd??(typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():V),workspaceRoot:X?.workspaceRoot??V,systemPrompt:X?.systemPrompt??(typeof H.systemPrompt==="string"?H.systemPrompt:""),mode:X?.mode??(H.mode==="plan"||H.mode==="yolo"?H.mode:"act"),maxIterations:X?.maxIterations??(typeof H.maxIterations==="number"?H.maxIterations:void 0),enableTools:X?.enableTools??H.enableTools!==!1,enableSpawnAgent:X?.enableSpawnAgent??H.enableSpawn!==!1,enableAgentTeams:X?.enableAgentTeams??H.enableTeams!==!1,checkpoint:X?.checkpoint??(H.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:X?.teamName??(typeof j.teamName==="string"?j.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):H.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});m("info","session.create.start_session.end",{...Z,sessionId:P.sessionId,elapsedMs:Math.round(performance.now()-Q),hasImmediateResult:!!P.result}),$5($,P.sessionId,A,"creator",{interactive:j.interactive!==!1}),m("info","session.create.read_records.begin",{...Z,sessionId:P.sessionId});let[D,O]=await Promise.all([d0($,P.sessionId),l0($,P.sessionId)]);if(m("info","session.create.read_records.end",{...Z,sessionId:P.sessionId,hasSession:!!D,hasSnapshot:!!O,elapsedMs:Math.round(performance.now()-Q)}),D)$.publish($.buildEvent("session.created",{session:D,...O?{snapshot:O}:{}},P.sessionId));return m("info","session.create.reply",{...Z,sessionId:P.sessionId,elapsedMs:Math.round(performance.now()-Q)}),c(f,{session:D,...O?{snapshot:O}:{}})}async function EV($,f,J){let Q=f.payload&&typeof f.payload==="object"?f.payload:{},Z=typeof Q.sessionId==="string"?Q.sessionId.trim():f.sessionId?.trim()||"",W=Q.checkpointRunCount;if(!Z)return x(f,"invalid_restore","session.restore requires a session id");let j=Q.restore&&typeof Q.restore==="object"?Q.restore:{},X=j.messages!==!1;if(typeof W!=="number")return x(f,"invalid_restore","checkpointRunCount must be a positive integer");try{let H=Q.sessionConfig&&typeof Q.sessionConfig==="object"?JSON.parse(JSON.stringify(Q.sessionConfig)):void 0;if(X&&!H)return x(f,"invalid_restore","sessionConfig is required when restore.messages is true");let Y=Q.runtimeOptions&&typeof Q.runtimeOptions==="object"?Q.runtimeOptions:{},V=Q.metadata&&typeof Q.metadata==="object"?JSON.parse(JSON.stringify(Q.metadata)):{};if(typeof H?.mode==="string")V.mode=H.mode;else if(typeof Y.mode==="string")V.mode=Y.mode;if(typeof H?.systemPrompt==="string")V.systemPrompt=H.systemPrompt;else if(typeof Y.systemPrompt==="string")V.systemPrompt=Y.systemPrompt;if(H?.checkpoint?.enabled===!0)V.checkpointEnabled=!0;else if(Y.checkpointEnabled===!0)V.checkpointEnabled=!0;let A=Q.modelSelection&&typeof Q.modelSelection==="object"?Q.modelSelection:{},B=f.clientId?.trim()||"hub-client",K=cQ(Y.clientContributions);if(K.length>0)SV(V,B);let R=(typeof H?.sessionId==="string"?H.sessionId.trim():"")||MV(),F=qV(Y.configExtensions),P=uQ({sessionId:R,targetClientId:B,contributions:K,sessionConfig:H,requestCapability:$.requestCapability}),O=await new G1().restoreCheckpoint({sessionId:Z,checkpointRunCount:W,restore:{messages:j.messages,workspace:j.workspace,omitCheckpointMessageFromSession:j.omitCheckpointMessageFromSession===!0},start:H,cwd:typeof H?.cwd==="string"&&H.cwd.trim()||typeof H?.workspaceRoot==="string"&&H.workspaceRoot.trim()||void 0,getSession:(y)=>$.sessionHost.getSession(y),readMessages:(y)=>$.sessionHost.readSessionMessages(y),buildStartInput:(y)=>{if(y.restoredCheckpointMetadata)V.checkpoint=y.restoredCheckpointMetadata;let w=typeof Q.workspaceRoot==="string"&&Q.workspaceRoot.trim()?Q.workspaceRoot.trim():typeof Q.cwd==="string"&&Q.cwd.trim()?Q.cwd.trim():y.sourceSession.workspaceRoot||y.sourceSession.cwd;return{source:typeof V.source==="string"?V.source:void 0,interactive:V.interactive!==!1,sessionMetadata:{...V,restoredFromSessionId:Z,restoredCheckpointRunCount:W},initialMessages:y.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:F,...P.localRuntime},capabilities:{toolExecutors:P.toolExecutors,requestToolApproval:J},config:{...H??{},sessionId:R,providerId:H?.providerId??(typeof A.provider==="string"?A.provider:y.sourceSession.provider),modelId:H?.modelId??(typeof A.model==="string"?A.model:y.sourceSession.model),apiKey:H?.apiKey??(typeof A.apiKey==="string"?A.apiKey:""),cwd:H?.cwd??y.plan.cwd,workspaceRoot:H?.workspaceRoot??w,systemPrompt:H?.systemPrompt??(typeof Y.systemPrompt==="string"?Y.systemPrompt:""),mode:H?.mode??(Y.mode==="plan"||Y.mode==="yolo"?Y.mode:"act"),maxIterations:H?.maxIterations??(typeof Y.maxIterations==="number"?Y.maxIterations:void 0),enableTools:H?.enableTools??Y.enableTools!==!1,enableSpawnAgent:H?.enableSpawnAgent??Y.enableSpawn!==!1,enableAgentTeams:H?.enableAgentTeams??Y.enableTeams!==!1,checkpoint:H?.checkpoint??(Y.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:H?.teamName??(typeof V.teamName==="string"?V.teamName:void 0)},toolPolicies:Q.toolPolicies&&typeof Q.toolPolicies==="object"&&!Array.isArray(Q.toolPolicies)?JSON.parse(JSON.stringify(Q.toolPolicies)):Y.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(y)=>$.sessionHost.startSession(y),getStartedSessionId:(y)=>y.sessionId,readRestoredSession:(y)=>$.sessionHost.getSession(y)});if(!X)return c(f,{checkpoint:O.checkpoint});let _=O.startResult;if(!_)return x(f,"restore_failed","Checkpoint restore did not start a session");$5($,_.sessionId,B,"creator",{interactive:V.interactive!==!1});let[L,z]=await Promise.all([d0($,_.sessionId),l0($,_.sessionId)]);if(L)$.publish($.buildEvent("session.created",{session:L,...z?{snapshot:z}:{}},_.sessionId));return c(f,{session:L,...z?{snapshot:z}:{},messages:O.messages??[],checkpoint:O.checkpoint})}catch(H){if(H instanceof q0)return x(f,H.code,H.code==="session_not_found"?`Unknown session: ${Z}`:H.message);return x(f,"restore_failed",H instanceof Error?H.message:String(H))}}async function hV($,f){let J=M0(f);if(!J)return x(f,"invalid_session_attach","session.attach requires a session id");$5($,J,f.clientId?.trim()||"hub-client","participant");let Q=await d0($,J);if(Q)$.publish($.buildEvent("session.attached",{session:Q},J));return Q?c(f,{session:Q}):x(f,"session_not_found",`Unknown session: ${J}`)}async function bV($,f){let J=M0(f);if(!J)return x(f,"invalid_session_detach","session.detach requires a session id");let Q=f.clientId?.trim()||"hub-client",[Z]=await Promise.all([d0($,J)]),W=cy(Z?.metadata)??Q,j=$.sessionState.get(J);if(j){if(j.participants.delete(Q),j.createdByClientId===Q)j.createdByClientId=W;if(j.participants.size===0)$.sessionState.delete(J)}K1($,(Y)=>Y.sessionId===J&&Y.targetClientId===Q,`Capability owner client ${Q} detached before request was resolved.`);let[X,H]=await Promise.all([d0($,J),l0($,J)]);return $.publish($.buildEvent("session.detached",X?{session:X,...H?{snapshot:H}:{},clientId:Q}:{clientId:Q},J)),c(f)}async function kV($,f){let J=M0(f),Q=f.payload?.includeSnapshot===!0,[Z,W]=await Promise.all([d0($,J),Q?l0($,J):Promise.resolve(void 0)]);return Z?c(f,{session:Z,...W?{snapshot:W}:{}}):x(f,"session_not_found",`Unknown session: ${J}`)}async function IV($,f){let J=M0(f);if(!J)return x(f,"invalid_session_id","session.messages requires a session id");if(!await d0($,J))return x(f,"session_not_found",`Unknown session: ${J}`);let Z=await $.sessionHost.readSessionMessages(J);return c(f,{sessionId:J,messages:Z})}async function xV($,f){let J=typeof f.payload?.limit==="number"?f.payload.limit:200,Z=(await $.sessionHost.listSessions(J)).map((W)=>oJ(W,$.sessionState.get(W.sessionId)));return c(f,{sessions:Z})}async function gV($,f){let J=M0(f),Q=eJ(f.payload?.metadata),Z=await $.sessionHost.updateSession(J,{metadata:Q}),[W,j]=await Promise.all([d0($,J),l0($,J)]);if(W)$.publish($.buildEvent("session.updated",{session:W,...j?{snapshot:j}:{}},J));return{version:f.version,requestId:f.requestId,ok:Z.updated,payload:{updated:Z.updated,session:W,...j?{snapshot:j}:{}}}}async function mV($,f){let J=M0(f),Q=await $.sessionHost.deleteSession(J);return $.sessionState.delete(J),c(f,{deleted:Q})}async function vV($,f){let J=M0(f),Q=$.sessionHost.pendingPrompts;if(!Q)return x(f,"pending_prompts_unavailable","Pending prompt service is not available.");let Z=await Q.list({sessionId:J});return c(f,{sessionId:J,prompts:Z})}async function cV($,f){let J=M0(f),Q=typeof f.payload?.promptId==="string"?f.payload.promptId.trim():"",Z=typeof f.payload?.prompt==="string"?f.payload.prompt:void 0,W=f.payload?.delivery==="queue"||f.payload?.delivery==="steer"?f.payload.delivery:void 0,j=$.sessionHost.pendingPrompts;if(!j)return x(f,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await j.update({sessionId:J,promptId:Q,prompt:Z,delivery:W});return c(f,X)}async function uV($,f){let J=M0(f),Q=typeof f.payload?.promptId==="string"?f.payload.promptId.trim():"",Z=$.sessionHost.pendingPrompts;if(!Z)return x(f,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await Z.delete({sessionId:J,promptId:Q});return c(f,W)}function dV($){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 dy=new Set(["skills","workflows","rules","tools","mcp"]);function dQ($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function h4($,f){let J=$[f];if(J===void 0)return;if(typeof J!=="string")throw Error(`settings payload '${f}' must be a string.`);return J}function ly($,f){let J=$[f];if(J===void 0)return;if(typeof J!=="boolean")throw Error(`settings payload '${f}' must be a boolean.`);return J}function lV($){if($===void 0)return{};if(!dQ($))throw Error("settings.list payload must be an object.");return{cwd:h4($,"cwd"),workspaceRoot:h4($,"workspaceRoot"),availabilityContext:dQ($.availabilityContext)?$.availabilityContext:void 0}}function py($){if(!dQ($))throw Error("settings.toggle payload must be an object.");let{type:f}=$;if(typeof f!=="string"||!dy.has(f))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...lV($),type:f,id:h4($,"id"),path:h4($,"path"),name:h4($,"name"),enabled:ly($,"enabled")}}class U2{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=uy("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new A$({sessionService:new V$(new H$),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:(f)=>this.publish(f),buildEvent:Qf,requestCapability:(f,J,Q,Z,W)=>VV(this.ctx,f,J,Q,Z,W)},this.schedules=new G2({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(f,J)=>{let Q=f==="schedule.execution.completed"?"schedule.execution_completed":f==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!Q)return;this.publish(Qf(Q,J&&typeof J==="object"?J:void 0))}}),this.scheduleCommands=new K2(this.schedules),this.settings=$.settingsService??new W1,$.cronOptions)this.cronService=new A4({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((f)=>{OV(this.ctx,f).catch((J)=>{kQ("session event handling failed",J),f5(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:J,severity:"error",handled:!0,context:{eventType:f.type,sessionId:f.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())hQ(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(K1(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 f=await this.dispatchCommand($);return this.captureFailedReply($,f),f}catch(f){throw f5(this.options.telemetry,{component:"core",operation:"hub.command",error:f,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),f}}async dispatchCommand($){switch($.command){case"client.register":return GV(this.ctx,$);case"client.update":return PV(this.ctx,$);case"client.unregister":return FV(this.ctx,$,(f)=>{this.listeners.delete(f),this.detachClientFromSessions(f)});case"client.list":return DV(this.ctx,$);case"session.create":return await CV(this.ctx,$,(f)=>EQ(this.ctx,f));case"session.restore":return await EV(this.ctx,$,(f)=>EQ(this.ctx,f));case"session.attach":return await hV(this.ctx,$);case"session.detach":return await bV(this.ctx,$);case"session.get":return await kV(this.ctx,$);case"session.messages":return await IV(this.ctx,$);case"session.list":return await xV(this.ctx,$);case"session.update":return await gV(this.ctx,$);case"session.pending_prompts":return await vV(this.ctx,$);case"session.update_pending_prompt":return await cV(this.ctx,$);case"session.remove_pending_prompt":return await uV(this.ctx,$);case"session.delete":return await mV(this.ctx,$);case"session.hook":return await LV(this.ctx,$);case"run.start":case"session.send_input":return await RV(this.ctx,$);case"run.abort":return await UV(this.ctx,$);case"capability.request":return await BV(this.ctx,$);case"approval.respond":return await HV(this.ctx,$);case"capability.respond":return KV(this.ctx,$);case"capability.progress":return AV(this.ctx,$);case"ui.notify":return this.publish(Qf("ui.notify",$.payload??{})),c($);case"ui.show_window":return this.publish(Qf("ui.show_window",$.payload??{})),c($);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 f=await this.scheduleCommands.handleCommand($);if(f.ok){let J=dV($.command);if(J)this.publish(Qf(J,f.payload))}return f}}}captureFailedReply($,f){if(f.ok||!f.error||!ry(f.error.code))return;f5(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(f.error.message),severity:f.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:f.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let f=await this.settings.list(lV($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:f}}}catch(f){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:f instanceof Error?f.message:String(f)}}}}async handleSettingsToggle($){try{let f=await this.settings.toggle(py($.payload));return this.publish(Qf("settings.changed",{types:f.changedTypes,snapshot:f.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:f.snapshot,changedTypes:f.changedTypes}}}catch(f){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:f instanceof Error?f.message:String(f)}}}}subscribe($,f,J){let Q=this.listeners.get($)??new Set,Z={sessionId:J?.sessionId,listener:f};return Q.add(Z),this.listeners.set($,Q),()=>{let W=this.listeners.get($);if(!W)return;if(W.delete(Z),W.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[f,J]of this.sessionState.entries())if(J.participants.delete($),J.participants.size===0)this.sessionState.delete(f);K1(this.ctx,(f)=>f.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let f of this.listeners.values())for(let J of f){if(J.sessionId&&J.sessionId!==$.sessionId)continue;try{J.listener($)}catch(Q){kQ(`listener threw while publishing ${$.event}`,Q),f5(this.options.telemetry,{component:"core",operation:"hub.publish",error:Q,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function ry($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as ty}from"node:crypto";import sy from"node:http";import oy from"node:net";import{URL as iV}from"node:url";import{WebSocketServer as ey}from"ws";import{captureSdkError as pV,HUB_COMMAND_SLOW_LOG_MS as iy,resolveHubCommandTimeoutMs as ny,safeJsonParse as ay}from"@cline/shared";function lQ($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function rV($,f,J){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:f,message:J}}}class b4{transport;telemetry;constructor($,f){this.transport=$;this.telemetry=f}attach($){let f=new Map,J=new Set,Q=!1,Z=(H)=>{try{$.send(JSON.stringify(H))}catch(Y){console.error(`[hub] failed to send websocket frame: ${Y instanceof Error?Y.stack||Y.message:String(Y)}`)}},W=(H)=>{Z({kind:"event",envelope:H})},j=async(H)=>{try{let Y=JSON.parse(H.data);switch(Y.kind){case"command":{let V=performance.now(),A=!1,B=lQ(Y);m("info","command.start",B);let K=setTimeout(()=>{if(A)return;m("warn","command.slow",{...B,elapsedMs:Math.round(performance.now()-V)})},iy),G=this.transport.command(Y.envelope);G.then((_)=>{if(!A)return;m(_.ok?"warn":"error","command.late_end",{...B,elapsedMs:Math.round(performance.now()-V),ok:_.ok,errorCode:_.error?.code,errorMessage:_.error?.message})},(_)=>{if(!A)return;m("error","command.late_error",{...B,elapsedMs:Math.round(performance.now()-V),error:_})});let R=!1,F,P,D=ny(Y.envelope.command,Y.envelope.timeoutMs);try{P=D===null?await G:await Promise.race([G,new Promise((_)=>{F=setTimeout(()=>{R=!0,pV(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${Y.envelope.command} did not complete within ${D}ms.`),severity:"error",handled:!0,context:{...B,timeoutMs:D}}),_(rV(Y,"hub_command_timeout",`Hub command ${Y.envelope.command} did not complete within ${D}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${Y.envelope.requestId}.`))},D)})])}catch(_){if(clearTimeout(K),F)clearTimeout(F);throw _}if(A=R,clearTimeout(K),F)clearTimeout(F);let O=Math.round(performance.now()-V);if(R)m("error","command.timeout",{...B,durationMs:O,timeoutMs:D});else m(P.ok?"info":"warn","command.end",{...B,durationMs:O,ok:P.ok,errorCode:P.error?.code,errorMessage:P.error?.message});if(Y.envelope.command==="client.register"&&P.ok){let L=(Y.envelope.payload??{}).clientId?.trim()||Y.envelope.clientId?.trim();if(L)J.add(L)}else if(Y.envelope.command==="client.unregister"&&P.ok){let _=Y.envelope.clientId?.trim();if(_)J.delete(_)}Z({kind:"reply",envelope:P});break}case"stream.subscribe":{let V=`${Y.clientId}:${Y.sessionId??"*"}`;if(f.has(V))break;let A=await this.transport.subscribe(Y.clientId,W,{sessionId:Y.sessionId});f.set(V,A);break}case"stream.unsubscribe":{let V=`${Y.clientId}:${Y.sessionId??"*"}`;f.get(V)?.(),f.delete(V);break}case"reply":case"event":break}}catch(Y){let V=typeof H.data==="string"?ay(H.data):void 0;if(!V||V.kind!=="command"){m("error","rejected malformed websocket frame",{error:Y});return}m("error","command.error",{...lQ(V),error:Y}),pV(this.telemetry,{component:"core",operation:"hub.websocket_command",error:Y,severity:"error",handled:!0,context:lQ(V)}),Z({kind:"reply",envelope:rV(V,"command_failed",Y instanceof Error?Y.message:"Unknown hub error")})}},X=()=>{if(Q)return;Q=!0;for(let H of f.values())H();f.clear();for(let H of J)this.transport.command({version:"v1",command:"client.unregister",clientId:H});J.clear(),$.removeEventListener("message",j),$.removeEventListener("close",X)};return $.addEventListener("message",j),$.addEventListener("close",X),X}}class k4{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,f,J){return this.transport.subscribe($,f,J)}}function $T($){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((f)=>Buffer.from(f))).toString();return String($)}function fT($){return{send(f){$.send(f)},addEventListener(f,J){if(f==="message"){$.on("message",(Q)=>{J({data:$T(Q)})});return}$.on("close",J)},removeEventListener(){}}}function JT($){try{$.write(`HTTP/1.1 400 Bad Request\r
569
+ ${V}`:H.instructions}})}})}}function gy($,f,J,Q){let Z=J.map((W)=>[W.executor,async(...j)=>{let X=j.at(-1),H=j.slice(0,-1);return(await Q($,W.capabilityName,{executor:W.executor,args:H,context:TV(X)},f))?.result}]);return Z.length>0?Object.fromEntries(Z):void 0}function my($,f,J,Q){if(J.length===0)return;return J.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema,lifecycle:Z.lifecycle,async execute(W,j){return(await Q($,Z.capabilityName,{toolName:Z.name,input:W,context:TV(j)},f,j.emitUpdate?(H)=>{j.emitUpdate?.(hy(H))}:void 0))?.result}}))}function vy($,f,J,Q){let Z=new Map(J.map((j)=>[j.name,j])),W={};for(let j of Cy){let X=Z.get(j);if(!X)continue;W[j]=async(H)=>{return(await Q($,X.capabilityName,{context:H},f))?.control}}return Object.keys(W).length>0?W:void 0}function uQ($){let f=$.contributions.filter((H)=>H.kind==="toolExecutor"),J=$.contributions.filter((H)=>H.kind==="tool"),Q=$.contributions.filter((H)=>H.kind==="hook"),Z=$.contributions.find((H)=>H.kind==="compaction"),W=$.contributions.find((H)=>H.kind==="checkpoint"),j=$.contributions.find((H)=>H.kind==="mistakeLimit"),X=$.contributions.find((H)=>H.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:gy($.sessionId,$.targetClientId,f,$.requestCapability),localRuntime:{...Q.length>0?{hooks:vy($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...J.length>0?{extraTools:my($.sessionId,$.targetClientId,J,$.requestCapability)}:{},...Z?{compaction:{...$.sessionConfig?.compaction??{},...Z.config,compact:async(H)=>{return(await $.requestCapability($.sessionId,Z.capabilityName,{context:H},$.targetClientId))?.result}}}:{},...W?{checkpoint:{...$.sessionConfig?.checkpoint??{},...W.config,createCheckpoint:async(H)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:H},$.targetClientId))?.result}}}:{},...j?{onConsecutiveMistakeLimitReached:async(H)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:H},$.targetClientId))?.result}}:{},...X?{userInstructionService:xy($.sessionId,$.targetClientId,X,$.requestCapability)}:{}}}}var wV="hubCapabilityOwnerClientId";function SV($,f){$[wV]=f}function cy($){let f=$?.[wV];return typeof f==="string"&&f.trim()?f.trim():void 0}async function CV($,f,J){let Q=performance.now(),Z={command:f.command,requestId:f.requestId,clientId:f.clientId,sessionId:f.sessionId};m("info","session.create.begin",Z);let W=f.payload&&typeof f.payload==="object"?f.payload:{},j=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{},X=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0,H=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{};if(typeof X?.mode==="string")j.mode=X.mode;else if(typeof H.mode==="string")j.mode=H.mode;if(typeof X?.systemPrompt==="string")j.systemPrompt=X.systemPrompt;else if(typeof H.systemPrompt==="string")j.systemPrompt=H.systemPrompt;if(X?.checkpoint?.enabled===!0)j.checkpointEnabled=!0;else if(H.checkpointEnabled===!0)j.checkpointEnabled=!0;let Y=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},V=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():"";if(!V)return m("warn","session.create.invalid",{...Z,reason:"missing_workspace_root"}),x(f,"invalid_session_create","session.create requires workspaceRoot or cwd");let A=f.clientId?.trim()||"hub-client",B=cQ(H.clientContributions);if(m("info","session.create.contributions_parsed",{...Z,clientId:A,workspaceRoot:V,cwd:typeof W.cwd==="string"?W.cwd:void 0,contributionCount:B.length}),B.length>0)SV(j,A);let G=(typeof X?.sessionId==="string"?X.sessionId.trim():"")||MV(),R=qV(H.configExtensions);m("info","session.create.runtime_build.begin",{...Z,sessionId:G,configExtensionCount:R?.length??0});let F=uQ({sessionId:G,targetClientId:A,contributions:B,sessionConfig:X,requestCapability:$.requestCapability});m("info","session.create.start_session.begin",{...Z,sessionId:G,provider:X?.providerId??(typeof Y.provider==="string"?Y.provider:typeof j.provider==="string"?j.provider:"hub"),model:X?.modelId??(typeof Y.model==="string"?Y.model:typeof j.model==="string"?j.model:"hub")});let P=await $.sessionHost.startSession({source:typeof j.source==="string"?j.source:void 0,interactive:j.interactive!==!1,sessionMetadata:Object.keys(j).length>0?j:void 0,initialMessages:Array.isArray(W.initialMessages)?W.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:R,...F.localRuntime},capabilities:{toolExecutors:F.toolExecutors,requestToolApproval:J},config:{...X??{},sessionId:G,providerId:X?.providerId??(typeof Y.provider==="string"?Y.provider:typeof j.provider==="string"?j.provider:"hub"),modelId:X?.modelId??(typeof Y.model==="string"?Y.model:typeof j.model==="string"?j.model:"hub"),apiKey:X?.apiKey??(typeof Y.apiKey==="string"?Y.apiKey:void 0),cwd:X?.cwd??(typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():V),workspaceRoot:X?.workspaceRoot??V,systemPrompt:X?.systemPrompt??(typeof H.systemPrompt==="string"?H.systemPrompt:""),mode:X?.mode??(H.mode==="plan"||H.mode==="yolo"?H.mode:"act"),maxIterations:X?.maxIterations??(typeof H.maxIterations==="number"?H.maxIterations:void 0),enableTools:X?.enableTools??H.enableTools!==!1,enableSpawnAgent:X?.enableSpawnAgent??H.enableSpawn!==!1,enableAgentTeams:X?.enableAgentTeams??H.enableTeams!==!1,checkpoint:X?.checkpoint??(H.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:X?.teamName??(typeof j.teamName==="string"?j.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):H.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});m("info","session.create.start_session.end",{...Z,sessionId:P.sessionId,elapsedMs:Math.round(performance.now()-Q),hasImmediateResult:!!P.result}),$5($,P.sessionId,A,"creator",{interactive:j.interactive!==!1}),m("info","session.create.read_records.begin",{...Z,sessionId:P.sessionId});let[D,O]=await Promise.all([d0($,P.sessionId),l0($,P.sessionId)]);if(m("info","session.create.read_records.end",{...Z,sessionId:P.sessionId,hasSession:!!D,hasSnapshot:!!O,elapsedMs:Math.round(performance.now()-Q)}),D)$.publish($.buildEvent("session.created",{session:D,...O?{snapshot:O}:{}},P.sessionId));return m("info","session.create.reply",{...Z,sessionId:P.sessionId,elapsedMs:Math.round(performance.now()-Q)}),c(f,{session:D,...O?{snapshot:O}:{}})}async function EV($,f,J){let Q=f.payload&&typeof f.payload==="object"?f.payload:{},Z=typeof Q.sessionId==="string"?Q.sessionId.trim():f.sessionId?.trim()||"",W=Q.checkpointRunCount;if(!Z)return x(f,"invalid_restore","session.restore requires a session id");let j=Q.restore&&typeof Q.restore==="object"?Q.restore:{},X=j.messages!==!1;if(typeof W!=="number")return x(f,"invalid_restore","checkpointRunCount must be a positive integer");try{let H=Q.sessionConfig&&typeof Q.sessionConfig==="object"?JSON.parse(JSON.stringify(Q.sessionConfig)):void 0;if(X&&!H)return x(f,"invalid_restore","sessionConfig is required when restore.messages is true");let Y=Q.runtimeOptions&&typeof Q.runtimeOptions==="object"?Q.runtimeOptions:{},V=Q.metadata&&typeof Q.metadata==="object"?JSON.parse(JSON.stringify(Q.metadata)):{};if(typeof H?.mode==="string")V.mode=H.mode;else if(typeof Y.mode==="string")V.mode=Y.mode;if(typeof H?.systemPrompt==="string")V.systemPrompt=H.systemPrompt;else if(typeof Y.systemPrompt==="string")V.systemPrompt=Y.systemPrompt;if(H?.checkpoint?.enabled===!0)V.checkpointEnabled=!0;else if(Y.checkpointEnabled===!0)V.checkpointEnabled=!0;let A=Q.modelSelection&&typeof Q.modelSelection==="object"?Q.modelSelection:{},B=f.clientId?.trim()||"hub-client",K=cQ(Y.clientContributions);if(K.length>0)SV(V,B);let R=(typeof H?.sessionId==="string"?H.sessionId.trim():"")||MV(),F=qV(Y.configExtensions),P=uQ({sessionId:R,targetClientId:B,contributions:K,sessionConfig:H,requestCapability:$.requestCapability}),O=await new G1().restoreCheckpoint({sessionId:Z,checkpointRunCount:W,restore:{messages:j.messages,workspace:j.workspace,omitCheckpointMessageFromSession:j.omitCheckpointMessageFromSession===!0},start:H,cwd:typeof H?.cwd==="string"&&H.cwd.trim()||typeof H?.workspaceRoot==="string"&&H.workspaceRoot.trim()||void 0,getSession:(y)=>$.sessionHost.getSession(y),readMessages:(y)=>$.sessionHost.readSessionMessages(y),buildStartInput:(y)=>{if(y.restoredCheckpointMetadata)V.checkpoint=y.restoredCheckpointMetadata;let w=typeof Q.workspaceRoot==="string"&&Q.workspaceRoot.trim()?Q.workspaceRoot.trim():typeof Q.cwd==="string"&&Q.cwd.trim()?Q.cwd.trim():y.sourceSession.workspaceRoot||y.sourceSession.cwd;return{source:typeof V.source==="string"?V.source:void 0,interactive:V.interactive!==!1,sessionMetadata:{...V,restoredFromSessionId:Z,restoredCheckpointRunCount:W},initialMessages:y.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:F,...P.localRuntime},capabilities:{toolExecutors:P.toolExecutors,requestToolApproval:J},config:{...H??{},sessionId:R,providerId:H?.providerId??(typeof A.provider==="string"?A.provider:y.sourceSession.provider),modelId:H?.modelId??(typeof A.model==="string"?A.model:y.sourceSession.model),apiKey:H?.apiKey??(typeof A.apiKey==="string"?A.apiKey:""),cwd:H?.cwd??y.plan.cwd,workspaceRoot:H?.workspaceRoot??w,systemPrompt:H?.systemPrompt??(typeof Y.systemPrompt==="string"?Y.systemPrompt:""),mode:H?.mode??(Y.mode==="plan"||Y.mode==="yolo"?Y.mode:"act"),maxIterations:H?.maxIterations??(typeof Y.maxIterations==="number"?Y.maxIterations:void 0),enableTools:H?.enableTools??Y.enableTools!==!1,enableSpawnAgent:H?.enableSpawnAgent??Y.enableSpawn!==!1,enableAgentTeams:H?.enableAgentTeams??Y.enableTeams!==!1,checkpoint:H?.checkpoint??(Y.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:H?.teamName??(typeof V.teamName==="string"?V.teamName:void 0)},toolPolicies:Q.toolPolicies&&typeof Q.toolPolicies==="object"&&!Array.isArray(Q.toolPolicies)?JSON.parse(JSON.stringify(Q.toolPolicies)):Y.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(y)=>$.sessionHost.startSession(y),getStartedSessionId:(y)=>y.sessionId,readRestoredSession:(y)=>$.sessionHost.getSession(y)});if(!X)return c(f,{checkpoint:O.checkpoint});let _=O.startResult;if(!_)return x(f,"restore_failed","Checkpoint restore did not start a session");$5($,_.sessionId,B,"creator",{interactive:V.interactive!==!1});let[L,z]=await Promise.all([d0($,_.sessionId),l0($,_.sessionId)]);if(L)$.publish($.buildEvent("session.created",{session:L,...z?{snapshot:z}:{}},_.sessionId));return c(f,{session:L,...z?{snapshot:z}:{},messages:O.messages??[],checkpoint:O.checkpoint})}catch(H){if(H instanceof q0)return x(f,H.code,H.code==="session_not_found"?`Unknown session: ${Z}`:H.message);return x(f,"restore_failed",H instanceof Error?H.message:String(H))}}async function hV($,f){let J=M0(f);if(!J)return x(f,"invalid_session_attach","session.attach requires a session id");$5($,J,f.clientId?.trim()||"hub-client","participant");let Q=await d0($,J);if(Q)$.publish($.buildEvent("session.attached",{session:Q},J));return Q?c(f,{session:Q}):x(f,"session_not_found",`Unknown session: ${J}`)}async function bV($,f){let J=M0(f);if(!J)return x(f,"invalid_session_detach","session.detach requires a session id");let Q=f.clientId?.trim()||"hub-client",[Z]=await Promise.all([d0($,J)]),W=cy(Z?.metadata)??Q,j=$.sessionState.get(J);if(j){if(j.participants.delete(Q),j.createdByClientId===Q)j.createdByClientId=W;if(j.participants.size===0)$.sessionState.delete(J)}K1($,(Y)=>Y.sessionId===J&&Y.targetClientId===Q,`Capability owner client ${Q} detached before request was resolved.`);let[X,H]=await Promise.all([d0($,J),l0($,J)]);return $.publish($.buildEvent("session.detached",X?{session:X,...H?{snapshot:H}:{},clientId:Q}:{clientId:Q},J)),c(f)}async function kV($,f){let J=M0(f),Q=f.payload?.includeSnapshot===!0,[Z,W]=await Promise.all([d0($,J),Q?l0($,J):Promise.resolve(void 0)]);return Z?c(f,{session:Z,...W?{snapshot:W}:{}}):x(f,"session_not_found",`Unknown session: ${J}`)}async function IV($,f){let J=M0(f);if(!J)return x(f,"invalid_session_id","session.messages requires a session id");if(!await d0($,J))return x(f,"session_not_found",`Unknown session: ${J}`);let Z=await $.sessionHost.readSessionMessages(J);return c(f,{sessionId:J,messages:Z})}async function xV($,f){let J=typeof f.payload?.limit==="number"?f.payload.limit:200,Z=(await $.sessionHost.listSessions(J)).map((W)=>oJ(W,$.sessionState.get(W.sessionId)));return c(f,{sessions:Z})}async function gV($,f){let J=M0(f),Q=eJ(f.payload?.metadata),Z=await $.sessionHost.updateSession(J,{metadata:Q}),[W,j]=await Promise.all([d0($,J),l0($,J)]);if(W)$.publish($.buildEvent("session.updated",{session:W,...j?{snapshot:j}:{}},J));return{version:f.version,requestId:f.requestId,ok:Z.updated,payload:{updated:Z.updated,session:W,...j?{snapshot:j}:{}}}}async function mV($,f){let J=M0(f),Q=await $.sessionHost.deleteSession(J);return $.sessionState.delete(J),c(f,{deleted:Q})}async function vV($,f){let J=M0(f),Q=$.sessionHost.pendingPrompts;if(!Q)return x(f,"pending_prompts_unavailable","Pending prompt service is not available.");let Z=await Q.list({sessionId:J});return c(f,{sessionId:J,prompts:Z})}async function cV($,f){let J=M0(f),Q=typeof f.payload?.promptId==="string"?f.payload.promptId.trim():"",Z=typeof f.payload?.prompt==="string"?f.payload.prompt:void 0,W=f.payload?.delivery==="queue"||f.payload?.delivery==="steer"?f.payload.delivery:void 0,j=$.sessionHost.pendingPrompts;if(!j)return x(f,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await j.update({sessionId:J,promptId:Q,prompt:Z,delivery:W});return c(f,X)}async function uV($,f){let J=M0(f),Q=typeof f.payload?.promptId==="string"?f.payload.promptId.trim():"",Z=$.sessionHost.pendingPrompts;if(!Z)return x(f,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await Z.delete({sessionId:J,promptId:Q});return c(f,W)}function dV($){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 dy=new Set(["skills","workflows","rules","tools","mcp"]);function dQ($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function h4($,f){let J=$[f];if(J===void 0)return;if(typeof J!=="string")throw Error(`settings payload '${f}' must be a string.`);return J}function ly($,f){let J=$[f];if(J===void 0)return;if(typeof J!=="boolean")throw Error(`settings payload '${f}' must be a boolean.`);return J}function lV($){if($===void 0)return{};if(!dQ($))throw Error("settings.list payload must be an object.");return{cwd:h4($,"cwd"),workspaceRoot:h4($,"workspaceRoot"),availabilityContext:dQ($.availabilityContext)?$.availabilityContext:void 0}}function py($){if(!dQ($))throw Error("settings.toggle payload must be an object.");let{type:f}=$;if(typeof f!=="string"||!dy.has(f))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...lV($),type:f,id:h4($,"id"),path:h4($,"path"),name:h4($,"name"),enabled:ly($,"enabled")}}class U2{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=uy("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new A$({sessionService:new V$(new H$),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:(f)=>this.publish(f),buildEvent:Qf,requestCapability:(f,J,Q,Z,W)=>VV(this.ctx,f,J,Q,Z,W)},this.schedules=new G2({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(f,J)=>{let Q=f==="schedule.execution.completed"?"schedule.execution_completed":f==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!Q)return;this.publish(Qf(Q,J&&typeof J==="object"?J:void 0))}}),this.scheduleCommands=new K2(this.schedules),this.settings=$.settingsService??new W1,$.cronOptions)this.cronService=new A4({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((f)=>{OV(this.ctx,f).catch((J)=>{kQ("session event handling failed",J),f5(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:J,severity:"error",handled:!0,context:{eventType:f.type,sessionId:f.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())hQ(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(K1(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 f=await this.dispatchCommand($);return this.captureFailedReply($,f),f}catch(f){throw f5(this.options.telemetry,{component:"core",operation:"hub.command",error:f,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),f}}async dispatchCommand($){switch($.command){case"client.register":return GV(this.ctx,$);case"client.update":return PV(this.ctx,$);case"client.unregister":return FV(this.ctx,$,(f)=>{this.listeners.delete(f),this.detachClientFromSessions(f)});case"client.list":return DV(this.ctx,$);case"session.create":return await CV(this.ctx,$,(f)=>EQ(this.ctx,f));case"session.restore":return await EV(this.ctx,$,(f)=>EQ(this.ctx,f));case"session.attach":return await hV(this.ctx,$);case"session.detach":return await bV(this.ctx,$);case"session.get":return await kV(this.ctx,$);case"session.messages":return await IV(this.ctx,$);case"session.list":return await xV(this.ctx,$);case"session.update":return await gV(this.ctx,$);case"session.pending_prompts":return await vV(this.ctx,$);case"session.update_pending_prompt":return await cV(this.ctx,$);case"session.remove_pending_prompt":return await uV(this.ctx,$);case"session.delete":return await mV(this.ctx,$);case"session.hook":return await LV(this.ctx,$);case"run.start":case"session.send_input":return await RV(this.ctx,$);case"run.abort":return await UV(this.ctx,$);case"capability.request":return await BV(this.ctx,$);case"approval.respond":return await HV(this.ctx,$);case"capability.respond":return KV(this.ctx,$);case"capability.progress":return AV(this.ctx,$);case"ui.notify":return this.publish(Qf("ui.notify",$.payload??{})),c($);case"ui.show_window":return this.publish(Qf("ui.show_window",$.payload??{})),c($);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 f=await this.scheduleCommands.handleCommand($);if(f.ok){let J=dV($.command);if(J)this.publish(Qf(J,f.payload))}return f}}}captureFailedReply($,f){if(f.ok||!f.error||!ry(f.error.code))return;f5(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(f.error.message),severity:f.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:f.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let f=await this.settings.list(lV($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:f}}}catch(f){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:f instanceof Error?f.message:String(f)}}}}async handleSettingsToggle($){try{let f=await this.settings.toggle(py($.payload));return this.publish(Qf("settings.changed",{types:f.changedTypes,snapshot:f.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:f.snapshot,changedTypes:f.changedTypes}}}catch(f){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:f instanceof Error?f.message:String(f)}}}}subscribe($,f,J){let Q=this.listeners.get($)??new Set,Z={sessionId:J?.sessionId,listener:f};return Q.add(Z),this.listeners.set($,Q),()=>{let W=this.listeners.get($);if(!W)return;if(W.delete(Z),W.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[f,J]of this.sessionState.entries())if(J.participants.delete($),J.participants.size===0)this.sessionState.delete(f);K1(this.ctx,(f)=>f.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let f of this.listeners.values())for(let J of f){if(J.sessionId&&J.sessionId!==$.sessionId)continue;try{J.listener($)}catch(Q){kQ(`listener threw while publishing ${$.event}`,Q),f5(this.options.telemetry,{component:"core",operation:"hub.publish",error:Q,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function ry($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as ty}from"node:crypto";import sy from"node:http";import oy from"node:net";import{URL as iV}from"node:url";import{WebSocketServer as ey}from"ws";import{captureSdkError as pV,HUB_COMMAND_SLOW_LOG_MS as iy,resolveHubCommandTimeoutMs as ny,safeJsonParse as ay}from"@cline/shared";function lQ($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function rV($,f,J){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:f,message:J}}}class b4{transport;telemetry;constructor($,f){this.transport=$;this.telemetry=f}attach($){let f=new Map,J=new Set,Q=!1,Z=(H)=>{try{$.send(JSON.stringify(H))}catch(Y){console.error(`[hub] failed to send websocket frame: ${Y instanceof Error?Y.stack||Y.message:String(Y)}`)}},W=(H)=>{Z({kind:"event",envelope:H})},j=async(H)=>{try{let Y=JSON.parse(H.data);switch(Y.kind){case"command":{let V=performance.now(),A=!1,B=lQ(Y);m("info","command.start",B);let K=setTimeout(()=>{if(A)return;m("warn","command.slow",{...B,elapsedMs:Math.round(performance.now()-V)})},iy),G=this.transport.command(Y.envelope);G.then((_)=>{if(!A)return;m(_.ok?"warn":"error","command.late_end",{...B,elapsedMs:Math.round(performance.now()-V),ok:_.ok,errorCode:_.error?.code,errorMessage:_.error?.message})},(_)=>{if(!A)return;m("error","command.late_error",{...B,elapsedMs:Math.round(performance.now()-V),error:_})});let R=!1,F,P,D=ny(Y.envelope.command,Y.envelope.timeoutMs);try{P=D===null?await G:await Promise.race([G,new Promise((_)=>{F=setTimeout(()=>{R=!0,pV(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${Y.envelope.command} did not complete within ${D}ms.`),severity:"error",handled:!0,context:{...B,timeoutMs:D}}),_(rV(Y,"hub_command_timeout",`Hub command ${Y.envelope.command} did not complete within ${D}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${Y.envelope.requestId}.`))},D)})])}catch(_){if(clearTimeout(K),F)clearTimeout(F);throw _}if(A=R,clearTimeout(K),F)clearTimeout(F);let O=Math.round(performance.now()-V);if(R)m("error","command.timeout",{...B,durationMs:O,timeoutMs:D});else m(P.ok?"info":"warn","command.end",{...B,durationMs:O,ok:P.ok,errorCode:P.error?.code,errorMessage:P.error?.message});if(Y.envelope.command==="client.register"&&P.ok){let L=(Y.envelope.payload??{}).clientId?.trim()||Y.envelope.clientId?.trim();if(L)J.add(L)}else if(Y.envelope.command==="client.unregister"&&P.ok){let _=Y.envelope.clientId?.trim();if(_)J.delete(_)}Z({kind:"reply",envelope:P});break}case"stream.subscribe":{let V=`${Y.clientId}:${Y.sessionId??"*"}`;if(f.has(V))break;let A=await this.transport.subscribe(Y.clientId,W,{sessionId:Y.sessionId});f.set(V,A);break}case"stream.unsubscribe":{let V=`${Y.clientId}:${Y.sessionId??"*"}`;f.get(V)?.(),f.delete(V);break}case"reply":case"event":break}}catch(Y){let V=typeof H.data==="string"?ay(H.data):void 0;if(!V||V.kind!=="command"){m("error","rejected malformed websocket frame",{error:Y});return}m("error","command.error",{...lQ(V),error:Y}),pV(this.telemetry,{component:"core",operation:"hub.websocket_command",error:Y,severity:"error",handled:!0,context:lQ(V)}),Z({kind:"reply",envelope:rV(V,"command_failed",Y instanceof Error?Y.message:"Unknown hub error")})}},X=()=>{if(Q)return;Q=!0;for(let H of f.values())H();f.clear();for(let H of J)this.transport.command({version:"v1",command:"client.unregister",clientId:H});J.clear(),$.removeEventListener("message",j),$.removeEventListener("close",X)};return $.addEventListener("message",j),$.addEventListener("close",X),X}}class k4{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,f,J){return this.transport.subscribe($,f,J)}}function $N($){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((f)=>Buffer.from(f))).toString();return String($)}function fN($){return{send(f){$.send(f)},addEventListener(f,J){if(f==="message"){$.on("message",(Q)=>{J({data:$N(Q)})});return}$.on("close",J)},removeEventListener(){}}}function JN($){try{$.write(`HTTP/1.1 400 Bad Request\r
570
570
  Connection: close\r
571
571
  Content-Length: 0\r
572
572
  \r
573
- `),$.end()}catch{$.destroy()}}function QT($){try{$.write(`HTTP/1.1 401 Unauthorized\r
573
+ `),$.end()}catch{$.destroy()}}function QN($){try{$.write(`HTTP/1.1 401 Unauthorized\r
574
574
  Connection: close\r
575
575
  Content-Length: 0\r
576
576
  \r
577
577
  `),$.end()}catch{$.destroy()}}function nV($,f){if(!$||!f)return!1;let J=Buffer.from($,"utf8"),Q=Buffer.from(f,"utf8");return J.length===Q.length&&ty(J,Q)}function aV($,f){let J=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,Q=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",Z=`Failed to start hub server on ${f.host}:${f.port}${f.pathname}: ${Q}`,W=Error(J?`${Z} (${J})`:Z);if(J)$.code=J,W.code=J;if($ instanceof Error&&$.stack)W.stack=`${W.name}: ${W.message}
578
- Caused by: ${$.stack}`;return W}async function ZT($){return await new Promise((f,J)=>{let Q=oy.createServer();Q.once("error",J),Q.listen(0,$,()=>{let Z=Q.address();if(!Z||typeof Z==="string"){Q.close(()=>J(Error("Failed to resolve free port")));return}let W=Z.port;Q.close((j)=>{if(j){J(j);return}f(W)})})})}function WT($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var pQ=new Map,tV="cline-hub-auth.",jT=30000;function sV($){return Array.isArray($)?$.join(","):$??""}function XT($){let f=sV($).trim();return/^Bearer\s+(.+)$/i.exec(f)?.[1]?.trim()||null}function HT($){for(let f of sV($).split(",")){let J=f.trim();if(J.startsWith(tV))return J.slice(tV.length).trim()||null}return null}async function Wf($){let f=$.owner??w$(),J=$.host??"127.0.0.1",Q=$.pathname??"/hub",Z=$.port??$2(),W=Z===0?await ZT(J):Z,j=W,X=t0(J,W,Q),H=Y1(),Y=EJ(),V=new U2($);await V.start();let A=new b4(new k4(V),$.telemetry),B=new Set,K=new Date().toISOString(),G={protocolVersion:"v1",buildId:H,pid:process.pid,startedAt:K},R=new Set,F,P,D=async()=>{if(P)return P;return P=(async()=>{if(F)clearInterval(F),F=void 0;for(let z of R)z.terminate?.();R.clear();for(let z of B)z();if(B.clear(),await new Promise((z,y)=>{_.close((w)=>{if(w){y(w);return}z()})}),await new Promise((z,y)=>{O.close((w)=>{if(w){y(w);return}z()})}),await V.stop(),(await A0(f.discoveryPath))?.url===X)await v0(f.discoveryPath)})(),P},O=sy.createServer((L,z)=>{if((L.url??"/")==="/health"){let w=JSON.stringify({hubId:V.getHubId(),...G,authToken:"",host:J,port:j,url:X,updatedAt:new Date().toISOString()});z.statusCode=200,z.setHeader("content-type","application/json"),z.end(w);return}if((L.url??"/")==="/version"){z.statusCode=200,z.setHeader("content-type","application/json"),z.end(JSON.stringify(G));return}if(new iV(L.url??"/",`http://${J}:${j}`).pathname==="/shutdown"&&L.method==="POST"){if(!nV(XT(L.headers.authorization),Y)){z.statusCode=401,z.end("Unauthorized");return}z.statusCode=202,z.setHeader("content-type","application/json"),z.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{D()});return}z.statusCode=404,z.end("Not found")}),_=new ey({noServer:!0});F=setInterval(()=>{for(let L of R){if(L.isAlive===!1){try{L.terminate?.()}catch{}R.delete(L);continue}L.isAlive=!1;try{L.ping?.()}catch{try{L.terminate?.()}catch{}R.delete(L)}}},jT),O.on("upgrade",(L,z,y)=>{if(new iV(L.url??"/",`http://${J}:${j}`).pathname!==Q){z.destroy();return}if(!nV(HT(L.headers["sec-websocket-protocol"]),Y)){QT(z);return}try{_.handleUpgrade(L,z,y,(Q0)=>{let Z0=Q0;Z0.isAlive=!0,Z0.on("pong",()=>{Z0.isAlive=!0}),R.add(Z0);let o=A.attach(fT(Q0));B.add(o),Q0.once("close",()=>{R.delete(Z0),o(),B.delete(o)})})}catch{JT(z)}});try{await new Promise((L,z)=>{O.once("error",(y)=>{z(aV(y,{host:J,port:W,pathname:Q}))}),O.listen(W,J,()=>{let y=O.address();if(!y||typeof y==="string"){z(aV(Error("Failed to resolve hub port"),{host:J,port:W,pathname:Q}));return}j=y.port,X=t0(J,j,Q),L()})})}catch(L){if(F)clearInterval(F),F=void 0;throw await V.stop().catch(()=>{return}),L}return await hJ(f.discoveryPath,{hubId:V.getHubId(),protocolVersion:"v1",buildId:H,authToken:Y,host:J,port:j,url:X,pid:process.pid,startedAt:K,updatedAt:K}),{host:J,port:j,url:X,authToken:Y,close:D}}async function J5($){let f=$.owner??w$(),J=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=$.host??"127.0.0.1",Z=$.port??$2(),W=$.pathname??"/hub",j=t0(Q,Z,W),X=f.discoveryPath,H=(V)=>{if(!J)V1(V.url,V.authToken);return V},Y=pQ.get(X);if(Y){let V=await Y;if(V.url===j)return H({server:V,url:V.url,authToken:V.authToken,action:"reuse"})}return await bJ(f.discoveryPath,async()=>{let V=await A0(f.discoveryPath);if(V?.url&&(V.url===j||$.allowPortFallback===!0)){let G=await R0(V.url);if(G?.url&&await W$(G.url,{authToken:V.authToken}))return H({url:G.url,authToken:V.authToken,action:"reuse"})}if((await R0(j))?.url||V?.url)await v0(f.discoveryPath);let K=async(G)=>{let R=Wf({...G,owner:f});pQ.set(X,R);try{let F=await R;return H({server:F,url:F.url,authToken:F.authToken,action:"started"})}catch(F){throw pQ.delete(X),F}};try{return await K($)}catch(G){if(!$.allowPortFallback||!WT(G))throw G;return await K({...$,port:0})}})}async function oV($){let f=c0({host:$.host,port:$.port,pathname:$.pathname});return await Wf({...$,...f,owner:Y0()})}async function eV($){let f=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=c0({host:$.host,port:$.port,pathname:$.pathname});return await J5({...$,...J,allowPortFallback:$.allowPortFallback??!f,owner:Y0()})}rQ();var JA={};q(JA,{registerRemoteConfigSessionBlobUpload:()=>j5,readRemoteConfigSessionBlobUploadMetadata:()=>iQ,prepareRemoteConfigCoreIntegration:()=>aQ,createRemoteConfigSessionMessagesArtifactUploader:()=>nQ,buildRemoteConfigSessionBlobUploadMetadata:()=>Z5,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>W5});import{buildRemoteConfigSessionBlobUploadMetadata as Z5,clearRemoteConfigSessionBlobUpload as YT,createClineTelemetryServiceConfig as VT,createSessionId as AT,createRemoteConfigSessionMessagesArtifactUploader as BT,prepareRemoteConfigRuntime as KT,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as W5,readRemoteConfigSessionBlobUploadMetadata as iQ,registerRemoteConfigSessionBlobUpload as j5}from"@cline/shared";function GT($,f){let J=$.telemetry||f.telemetryService?{...f.telemetryService??{},...$.telemetry??{}}:void 0;if(!J)return;return b$(VT(J)).telemetry}function nQ(){let $=BT();return{async uploadMessagesFile(f){await $.uploadMessagesFile(f)}}}async function aQ($){let f=await KT($),J=GT(f,$),Q=[f.pluginDefinition],Z=f.claims?.subject,W=Z5(f.bundle?.remoteConfig,Z),j;return{prepared:f,extensions:Q,telemetry:J,applyToStartSessionInput(X){let H=X.config.extensions??[],Y=X.config.telemetry,V=W?X.config.sessionId?.trim()||AT():X.config.sessionId;if(V&&W)j=V;let A=V&&W?j5(V,f.bundle?.remoteConfig,Z):void 0,B=A?{...X.sessionMetadata??{},[W5]:A}:X.sessionMetadata;return{...X,...B?{sessionMetadata:B}:{},config:{...X.config,...V?{sessionId:V}:{},extensions:[...H,...Q],telemetry:J??Y}}},async dispose(){if(j)YT(j)}}}var VA={};q(VA,{createTeamName:()=>X5,DefaultRuntimeBuilder:()=>z2});import{hasRuntimeConfigExtension as qT}from"@cline/shared";import{nanoid as wT}from"nanoid";T$();var HA={};q(HA,{createLocalTeamStore:()=>eQ,SqliteTeamStore:()=>jf,FileTeamStore:()=>I4});import{appendFileSync as PT,existsSync as L2,mkdirSync as QA,readdirSync as FT,readFileSync as ZA,renameSync as DT,writeFileSync as RT}from"node:fs";import{join as tQ}from"node:path";import{resolveTeamDataDir as UT}from"@cline/shared/storage";function WA(){return new Date().toISOString()}function sQ($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function jA($){return{...$,tasks:$.tasks.map((f)=>({...f,createdAt:new Date(f.createdAt),updatedAt:new Date(f.updatedAt)})),mailbox:$.mailbox.map((f)=>({...f,sentAt:new Date(f.sentAt),readAt:f.readAt?new Date(f.readAt):void 0})),missionLog:$.missionLog.map((f)=>({...f,ts:new Date(f.ts)})),runs:($.runs??[]).map((f)=>({...f,startedAt:new Date(f.startedAt),endedAt:f.endedAt?new Date(f.endedAt):void 0,nextAttemptAt:f.nextAttemptAt?new Date(f.nextAttemptAt):void 0,heartbeatAt:f.heartbeatAt?new Date(f.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),finalizedAt:f.finalizedAt?new Date(f.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),reviewedAt:f.reviewedAt?new Date(f.reviewedAt):void 0}))}}class I4{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??UT()}init(){this.ensureTeamDir()}listTeamNames(){if(!L2(this.teamDirPath))return[];return FT(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>L2(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let f=this.readEnvelope($);return f?.teamState?jA(f.teamState):void 0}readHistory($,f=200){let J=this.historyPath($);if(!L2(J))return[];return ZA(J,"utf8").split(`
579
- `).map((Q)=>Q.trim()).filter(Boolean).map((Q)=>{try{return JSON.parse(Q)}catch{return}}).filter((Q)=>Q!==void 0).reverse().slice(0,f)}loadRuntime($){let f=this.readEnvelope($);return{state:f?.teamState?jA(f.teamState):void 0,teammates:f?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,f){this.ensureTeamSubdir($),PT(this.historyPath($),`${JSON.stringify({ts:WA(),eventType:f.type,payload:f})}
580
- `,"utf8")}persistRuntime($,f,J){this.ensureTeamSubdir($);let Q={version:1,updatedAt:WA(),teamState:f,teammates:J},Z=this.statePath($),W=`${Z}.tmp`;RT(W,`${JSON.stringify(Q,null,2)}
581
- `,"utf8"),DT(W,Z)}markInProgressRunsInterrupted($,f){let J=this.readEnvelope($);if(!J?.teamState?.runs?.length)return[];let Q=J.teamState.runs.filter((W)=>W.status==="queued"||W.status==="running").map((W)=>W.id);if(Q.length===0)return[];let Z=new Date;return J.teamState={...J.teamState,runs:J.teamState.runs.map((W)=>W.status==="queued"||W.status==="running"?{...W,status:"interrupted",error:f,endedAt:Z}:W)},this.persistRuntime($,J.teamState,J.teammates),Q}ensureTeamDir(){if(!L2(this.teamDirPath))QA(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let f=tQ(this.ensureTeamDir(),sQ($));if(!L2(f))QA(f,{recursive:!0});return f}statePath($){return tQ(this.ensureTeamDir(),sQ($),"state.json")}historyPath($){return tQ(this.ensureTeamDir(),sQ($),"task-history.jsonl")}readEnvelope($){let f=this.statePath($);if(!L2(f))return;try{let J=JSON.parse(ZA(f,"utf8"));if(J?.version===1&&J.teamState)return J}catch{}return}}import{existsSync as LT,mkdirSync as OT}from"node:fs";import{join as zT}from"node:path";import{safeJsonParse as XA}from"@cline/shared";import{loadSqliteDb as _T,nowIso as oQ}from"@cline/shared/db";import{resolveDbDataDir as yT}from"@cline/shared/storage";function TT(){return yT()}function O2($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function NT($){let f=XA($);if(!Array.isArray(f))return[];let J=[];for(let Q of f){if(!Q||typeof Q!=="object")continue;let Z=Q,W=Z.agentId,j=Z.rolePrompt;if(typeof W!=="string"||!W.trim())continue;if(typeof j!=="string"||!j.trim())continue;let X={agentId:W.trim(),rolePrompt:j};if(typeof Z.modelId==="string"&&Z.modelId.trim())X.modelId=Z.modelId.trim();if(typeof Z.maxIterations==="number"&&Number.isFinite(Z.maxIterations))X.maxIterations=Math.max(1,Math.floor(Z.maxIterations));J.push(X)}return J}function MT($){return{...$,tasks:$.tasks.map((f)=>({...f,createdAt:new Date(f.createdAt),updatedAt:new Date(f.updatedAt)})),mailbox:$.mailbox.map((f)=>({...f,sentAt:new Date(f.sentAt),readAt:f.readAt?new Date(f.readAt):void 0})),missionLog:$.missionLog.map((f)=>({...f,ts:new Date(f.ts)})),runs:($.runs??[]).map((f)=>({...f,startedAt:new Date(f.startedAt),endedAt:f.endedAt?new Date(f.endedAt):void 0,nextAttemptAt:f.nextAttemptAt?new Date(f.nextAttemptAt):void 0,heartbeatAt:f.heartbeatAt?new Date(f.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),finalizedAt:f.finalizedAt?new Date(f.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),reviewedAt:f.reviewedAt?new Date(f.reviewedAt):void 0}))}}class jf{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??TT()}init(){this.getRawDb()}ensureTeamDir(){if(!LT(this.teamDirPath))OT(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return zT(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=_T(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
578
+ Caused by: ${$.stack}`;return W}async function ZN($){return await new Promise((f,J)=>{let Q=oy.createServer();Q.once("error",J),Q.listen(0,$,()=>{let Z=Q.address();if(!Z||typeof Z==="string"){Q.close(()=>J(Error("Failed to resolve free port")));return}let W=Z.port;Q.close((j)=>{if(j){J(j);return}f(W)})})})}function WN($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var pQ=new Map,tV="cline-hub-auth.",jN=30000;function sV($){return Array.isArray($)?$.join(","):$??""}function XN($){let f=sV($).trim();return/^Bearer\s+(.+)$/i.exec(f)?.[1]?.trim()||null}function HN($){for(let f of sV($).split(",")){let J=f.trim();if(J.startsWith(tV))return J.slice(tV.length).trim()||null}return null}async function Wf($){let f=$.owner??w$(),J=$.host??"127.0.0.1",Q=$.pathname??"/hub",Z=$.port??$2(),W=Z===0?await ZN(J):Z,j=W,X=t0(J,W,Q),H=Y1(),Y=EJ(),V=new U2($);await V.start();let A=new b4(new k4(V),$.telemetry),B=new Set,K=new Date().toISOString(),G={protocolVersion:"v1",buildId:H,pid:process.pid,startedAt:K},R=new Set,F,P,D=async()=>{if(P)return P;return P=(async()=>{if(F)clearInterval(F),F=void 0;for(let z of R)z.terminate?.();R.clear();for(let z of B)z();if(B.clear(),await new Promise((z,y)=>{_.close((w)=>{if(w){y(w);return}z()})}),await new Promise((z,y)=>{O.close((w)=>{if(w){y(w);return}z()})}),await V.stop(),(await A0(f.discoveryPath))?.url===X)await v0(f.discoveryPath)})(),P},O=sy.createServer((L,z)=>{if((L.url??"/")==="/health"){let w=JSON.stringify({hubId:V.getHubId(),...G,authToken:"",host:J,port:j,url:X,updatedAt:new Date().toISOString()});z.statusCode=200,z.setHeader("content-type","application/json"),z.end(w);return}if((L.url??"/")==="/version"){z.statusCode=200,z.setHeader("content-type","application/json"),z.end(JSON.stringify(G));return}if(new iV(L.url??"/",`http://${J}:${j}`).pathname==="/shutdown"&&L.method==="POST"){if(!nV(XN(L.headers.authorization),Y)){z.statusCode=401,z.end("Unauthorized");return}z.statusCode=202,z.setHeader("content-type","application/json"),z.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{D()});return}z.statusCode=404,z.end("Not found")}),_=new ey({noServer:!0});F=setInterval(()=>{for(let L of R){if(L.isAlive===!1){try{L.terminate?.()}catch{}R.delete(L);continue}L.isAlive=!1;try{L.ping?.()}catch{try{L.terminate?.()}catch{}R.delete(L)}}},jN),O.on("upgrade",(L,z,y)=>{if(new iV(L.url??"/",`http://${J}:${j}`).pathname!==Q){z.destroy();return}if(!nV(HN(L.headers["sec-websocket-protocol"]),Y)){QN(z);return}try{_.handleUpgrade(L,z,y,(Q0)=>{let Z0=Q0;Z0.isAlive=!0,Z0.on("pong",()=>{Z0.isAlive=!0}),R.add(Z0);let o=A.attach(fN(Q0));B.add(o),Q0.once("close",()=>{R.delete(Z0),o(),B.delete(o)})})}catch{JN(z)}});try{await new Promise((L,z)=>{O.once("error",(y)=>{z(aV(y,{host:J,port:W,pathname:Q}))}),O.listen(W,J,()=>{let y=O.address();if(!y||typeof y==="string"){z(aV(Error("Failed to resolve hub port"),{host:J,port:W,pathname:Q}));return}j=y.port,X=t0(J,j,Q),L()})})}catch(L){if(F)clearInterval(F),F=void 0;throw await V.stop().catch(()=>{return}),L}return await hJ(f.discoveryPath,{hubId:V.getHubId(),protocolVersion:"v1",buildId:H,authToken:Y,host:J,port:j,url:X,pid:process.pid,startedAt:K,updatedAt:K}),{host:J,port:j,url:X,authToken:Y,close:D}}async function J5($){let f=$.owner??w$(),J=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=$.host??"127.0.0.1",Z=$.port??$2(),W=$.pathname??"/hub",j=t0(Q,Z,W),X=f.discoveryPath,H=(V)=>{if(!J)V1(V.url,V.authToken);return V},Y=pQ.get(X);if(Y){let V=await Y;if(V.url===j)return H({server:V,url:V.url,authToken:V.authToken,action:"reuse"})}return await bJ(f.discoveryPath,async()=>{let V=await A0(f.discoveryPath);if(V?.url&&(V.url===j||$.allowPortFallback===!0)){let G=await R0(V.url);if(G?.url&&await W$(G.url,{authToken:V.authToken}))return H({url:G.url,authToken:V.authToken,action:"reuse"})}if((await R0(j))?.url||V?.url)await v0(f.discoveryPath);let K=async(G)=>{let R=Wf({...G,owner:f});pQ.set(X,R);try{let F=await R;return H({server:F,url:F.url,authToken:F.authToken,action:"started"})}catch(F){throw pQ.delete(X),F}};try{return await K($)}catch(G){if(!$.allowPortFallback||!WN(G))throw G;return await K({...$,port:0})}})}async function oV($){let f=c0({host:$.host,port:$.port,pathname:$.pathname});return await Wf({...$,...f,owner:Y0()})}async function eV($){let f=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=c0({host:$.host,port:$.port,pathname:$.pathname});return await J5({...$,...J,allowPortFallback:$.allowPortFallback??!f,owner:Y0()})}rQ();var JA={};q(JA,{registerRemoteConfigSessionBlobUpload:()=>j5,readRemoteConfigSessionBlobUploadMetadata:()=>iQ,prepareRemoteConfigCoreIntegration:()=>aQ,createRemoteConfigSessionMessagesArtifactUploader:()=>nQ,buildRemoteConfigSessionBlobUploadMetadata:()=>Z5,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>W5});import{buildRemoteConfigSessionBlobUploadMetadata as Z5,clearRemoteConfigSessionBlobUpload as YN,createClineTelemetryServiceConfig as VN,createSessionId as AN,createRemoteConfigSessionMessagesArtifactUploader as BN,prepareRemoteConfigRuntime as KN,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as W5,readRemoteConfigSessionBlobUploadMetadata as iQ,registerRemoteConfigSessionBlobUpload as j5}from"@cline/shared";function GN($,f){let J=$.telemetry||f.telemetryService?{...f.telemetryService??{},...$.telemetry??{}}:void 0;if(!J)return;return b$(VN(J)).telemetry}function nQ(){let $=BN();return{async uploadMessagesFile(f){await $.uploadMessagesFile(f)}}}async function aQ($){let f=await KN($),J=GN(f,$),Q=[f.pluginDefinition],Z=f.claims?.subject,W=Z5(f.bundle?.remoteConfig,Z),j;return{prepared:f,extensions:Q,telemetry:J,applyToStartSessionInput(X){let H=X.config.extensions??[],Y=X.config.telemetry,V=W?X.config.sessionId?.trim()||AN():X.config.sessionId;if(V&&W)j=V;let A=V&&W?j5(V,f.bundle?.remoteConfig,Z):void 0,B=A?{...X.sessionMetadata??{},[W5]:A}:X.sessionMetadata;return{...X,...B?{sessionMetadata:B}:{},config:{...X.config,...V?{sessionId:V}:{},extensions:[...H,...Q],telemetry:J??Y}}},async dispose(){if(j)YN(j)}}}var VA={};q(VA,{createTeamName:()=>X5,DefaultRuntimeBuilder:()=>z2});import{hasRuntimeConfigExtension as qN}from"@cline/shared";import{nanoid as wN}from"nanoid";N$();var HA={};q(HA,{createLocalTeamStore:()=>eQ,SqliteTeamStore:()=>jf,FileTeamStore:()=>I4});import{appendFileSync as PN,existsSync as L2,mkdirSync as QA,readdirSync as FN,readFileSync as ZA,renameSync as DN,writeFileSync as RN}from"node:fs";import{join as tQ}from"node:path";import{resolveTeamDataDir as UN}from"@cline/shared/storage";function WA(){return new Date().toISOString()}function sQ($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function jA($){return{...$,tasks:$.tasks.map((f)=>({...f,createdAt:new Date(f.createdAt),updatedAt:new Date(f.updatedAt)})),mailbox:$.mailbox.map((f)=>({...f,sentAt:new Date(f.sentAt),readAt:f.readAt?new Date(f.readAt):void 0})),missionLog:$.missionLog.map((f)=>({...f,ts:new Date(f.ts)})),runs:($.runs??[]).map((f)=>({...f,startedAt:new Date(f.startedAt),endedAt:f.endedAt?new Date(f.endedAt):void 0,nextAttemptAt:f.nextAttemptAt?new Date(f.nextAttemptAt):void 0,heartbeatAt:f.heartbeatAt?new Date(f.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),finalizedAt:f.finalizedAt?new Date(f.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),reviewedAt:f.reviewedAt?new Date(f.reviewedAt):void 0}))}}class I4{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??UN()}init(){this.ensureTeamDir()}listTeamNames(){if(!L2(this.teamDirPath))return[];return FN(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>L2(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let f=this.readEnvelope($);return f?.teamState?jA(f.teamState):void 0}readHistory($,f=200){let J=this.historyPath($);if(!L2(J))return[];return ZA(J,"utf8").split(`
579
+ `).map((Q)=>Q.trim()).filter(Boolean).map((Q)=>{try{return JSON.parse(Q)}catch{return}}).filter((Q)=>Q!==void 0).reverse().slice(0,f)}loadRuntime($){let f=this.readEnvelope($);return{state:f?.teamState?jA(f.teamState):void 0,teammates:f?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,f){this.ensureTeamSubdir($),PN(this.historyPath($),`${JSON.stringify({ts:WA(),eventType:f.type,payload:f})}
580
+ `,"utf8")}persistRuntime($,f,J){this.ensureTeamSubdir($);let Q={version:1,updatedAt:WA(),teamState:f,teammates:J},Z=this.statePath($),W=`${Z}.tmp`;RN(W,`${JSON.stringify(Q,null,2)}
581
+ `,"utf8"),DN(W,Z)}markInProgressRunsInterrupted($,f){let J=this.readEnvelope($);if(!J?.teamState?.runs?.length)return[];let Q=J.teamState.runs.filter((W)=>W.status==="queued"||W.status==="running").map((W)=>W.id);if(Q.length===0)return[];let Z=new Date;return J.teamState={...J.teamState,runs:J.teamState.runs.map((W)=>W.status==="queued"||W.status==="running"?{...W,status:"interrupted",error:f,endedAt:Z}:W)},this.persistRuntime($,J.teamState,J.teammates),Q}ensureTeamDir(){if(!L2(this.teamDirPath))QA(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let f=tQ(this.ensureTeamDir(),sQ($));if(!L2(f))QA(f,{recursive:!0});return f}statePath($){return tQ(this.ensureTeamDir(),sQ($),"state.json")}historyPath($){return tQ(this.ensureTeamDir(),sQ($),"task-history.jsonl")}readEnvelope($){let f=this.statePath($);if(!L2(f))return;try{let J=JSON.parse(ZA(f,"utf8"));if(J?.version===1&&J.teamState)return J}catch{}return}}import{existsSync as LN,mkdirSync as ON}from"node:fs";import{join as zN}from"node:path";import{safeJsonParse as XA}from"@cline/shared";import{loadSqliteDb as _N,nowIso as oQ}from"@cline/shared/db";import{resolveDbDataDir as yN}from"@cline/shared/storage";function NN(){return yN()}function O2($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function TN($){let f=XA($);if(!Array.isArray(f))return[];let J=[];for(let Q of f){if(!Q||typeof Q!=="object")continue;let Z=Q,W=Z.agentId,j=Z.rolePrompt;if(typeof W!=="string"||!W.trim())continue;if(typeof j!=="string"||!j.trim())continue;let X={agentId:W.trim(),rolePrompt:j};if(typeof Z.modelId==="string"&&Z.modelId.trim())X.modelId=Z.modelId.trim();if(typeof Z.maxIterations==="number"&&Number.isFinite(Z.maxIterations))X.maxIterations=Math.max(1,Math.floor(Z.maxIterations));J.push(X)}return J}function MN($){return{...$,tasks:$.tasks.map((f)=>({...f,createdAt:new Date(f.createdAt),updatedAt:new Date(f.updatedAt)})),mailbox:$.mailbox.map((f)=>({...f,sentAt:new Date(f.sentAt),readAt:f.readAt?new Date(f.readAt):void 0})),missionLog:$.missionLog.map((f)=>({...f,ts:new Date(f.ts)})),runs:($.runs??[]).map((f)=>({...f,startedAt:new Date(f.startedAt),endedAt:f.endedAt?new Date(f.endedAt):void 0,nextAttemptAt:f.nextAttemptAt?new Date(f.nextAttemptAt):void 0,heartbeatAt:f.heartbeatAt?new Date(f.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),finalizedAt:f.finalizedAt?new Date(f.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),reviewedAt:f.reviewedAt?new Date(f.reviewedAt):void 0}))}}class jf{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??NN()}init(){this.getRawDb()}ensureTeamDir(){if(!LN(this.teamDirPath))ON(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return zN(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=_N(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
582
582
  CREATE TABLE IF NOT EXISTS team_store_schema_version (
583
583
  lock INTEGER PRIMARY KEY CHECK (lock = 1),
584
584
  version INTEGER NOT NULL
@@ -662,7 +662,7 @@ Caused by: ${$.stack}`;return W}async function ZT($){return await new Promise((f
662
662
  version INTEGER NOT NULL DEFAULT 1,
663
663
  PRIMARY KEY(team_name, fragment_id)
664
664
  );
665
- `)}run($,f=[]){return this.getRawDb().prepare($).run(...f)}queryOne($,f=[]){return this.getRawDb().prepare($).get(...f)??void 0}queryAll($,f=[]){return this.getRawDb().prepare($).all(...f)}withTransaction($){let f=this.getRawDb();f.exec("BEGIN IMMEDIATE;");try{$(),f.exec("COMMIT;")}catch(J){try{f.exec("ROLLBACK;")}catch{}throw J}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let f=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[O2($)]);if(!f)return;let J=XA(f.state_json);if(!J)return;try{return MT(J)}catch{return}}readHistory($,f=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[O2($),f]).flatMap((J)=>{try{return[{eventType:J.event_type,payload:JSON.parse(J.payload_json),ts:J.ts}]}catch{return[]}})}loadRuntime($){let f=O2($),J=this.readState(f),Q=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[f]),Z=Q?NT(Q.teammates_json):[];return{state:J,teammates:Z,interruptedRunIds:[]}}appendTeamEvent($,f,J,Q){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
665
+ `)}run($,f=[]){return this.getRawDb().prepare($).run(...f)}queryOne($,f=[]){return this.getRawDb().prepare($).get(...f)??void 0}queryAll($,f=[]){return this.getRawDb().prepare($).all(...f)}withTransaction($){let f=this.getRawDb();f.exec("BEGIN IMMEDIATE;");try{$(),f.exec("COMMIT;")}catch(J){try{f.exec("ROLLBACK;")}catch{}throw J}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let f=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[O2($)]);if(!f)return;let J=XA(f.state_json);if(!J)return;try{return MN(J)}catch{return}}readHistory($,f=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[O2($),f]).flatMap((J)=>{try{return[{eventType:J.event_type,payload:JSON.parse(J.payload_json),ts:J.ts}]}catch{return[]}})}loadRuntime($){let f=O2($),J=this.readState(f),Q=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[f]),Z=Q?TN(Q.teammates_json):[];return{state:J,teammates:Z,interruptedRunIds:[]}}appendTeamEvent($,f,J,Q){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
666
666
  VALUES (?, ?, ?, ?, NULL, ?)`,[O2($),oQ(),f,JSON.stringify(J),Q??null])}persistRuntime($,f,J){let Q=O2($),Z=oQ();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
667
667
  VALUES (?, ?, ?, ?)
668
668
  ON CONFLICT(team_name) DO UPDATE SET
@@ -709,14 +709,14 @@ Caused by: ${$.stack}`;return W}async function ZT($){return await new Promise((f
709
709
  reviewed_by = excluded.reviewed_by,
710
710
  reviewed_at = excluded.reviewed_at,
711
711
  version = team_outcome_fragments.version + 1`,[Q,W.outcomeId,W.id,W.section,W.sourceAgentId,W.sourceRunId??null,W.content,W.status,W.reviewedBy??null,W.reviewedAt?W.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,f){let J=O2($),Q=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[J]);if(Q.length===0)return[];let Z=oQ();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
712
- WHERE team_name = ? AND status IN ('queued', 'running')`,[f,Z,J]),Q.map((W)=>W.run_id)}handleTeamEvent($,f){this.appendTeamEvent($,f.type,f)}}function eQ($={}){try{let f=new jf($);return f.init(),f}catch{let f=new I4({teamDir:$.teamDir});return f.init(),f}}function $Z($,f){return qT($,f)}function ST($,f){let J=f?.["*"]??{},Q=f?.[$]??{};return{...J,...Q}.enabled!==!1}function CT($,f){return $.filter((J)=>ST(J.name,f))}function YA($,f){return E1(CT($,f))}function X5(){return`team-${wT(5)}`}function fZ($,f,J,Q,Z,W,j,X){let H=b0[R$({mode:J})],Y=Ff(f,Q,J,Z??Pf);return YA(N1({cwd:$,...H,enableSkills:!!j,...Y,executors:{...j?{skills:j}:{},...X??{}}}),W)}function ET($){return fZ($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,hT,$.toolExecutors).some((f)=>f.name==="skills")}var hT=async()=>"";async function bT($){let f=O0();if(!q$({filePath:f}))return{tools:[]};let J=new p1({clientFactory:of({settingsPath:f})}),Q;try{Q=await l1(J,{filePath:f})}catch(X){await J.dispose().catch(()=>{});let H=X instanceof Error?X.message:String(X);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${H}`),{tools:[]}}let Z=Q.filter((X)=>X.disabled!==!0),W=await Promise.allSettled(Z.map((X)=>ef({serverName:X.name,provider:J}))),j=[];for(let[X,H]of W.entries())if(H.status==="fulfilled")j.push(...H.value);else{let Y=H.reason instanceof Error?H.reason.message:String(H.reason);$?.log(`[mcp] Failed to load tools from MCP server "${Z[X].name}", skipping: ${Y}`)}return{tools:j,shutdown:async()=>{await J.dispose()}}}function kT($,f){if(!$)return;for(let J of $.getTeammateIds())try{$.shutdownTeammate(J,f)}catch{}}function IT($){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 xT($){let f=b0[R$({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??f.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??f.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 z2{teamRuntimeEntries=new Map;async build($){let{config:f,hooks:J,extensions:Q,logger:Z,telemetry:W,createSpawnTool:j,onTeamRestored:X,userInstructionService:H,configExtensions:Y,toolExecutors:V}=$,A=$.onTeamEvent??(()=>{}),B=xT(f),K=n0(),G=[],R=f.teamName?.trim()||X5(),F=f.sessionId?.trim()||R,P=$Z(Y,"rules"),D=$Z(Y,"skills"),O=$Z(Y,"workflows"),_=P||D||O,L=!1,z=Boolean(H),y=H,w;if(!y&&_)y=Z1({skills:{workspacePath:f.cwd},rules:{workspacePath:f.cwd},workflows:{workspacePath:f.cwd}});if(y)await y.start().catch(()=>{});let Q0=B.enableTools&&D&&Boolean(y)&&(z||y?.hasConfiguredSkills(f.skills)===!0)&&ET({cwd:f.cwd,providerId:f.providerId,mode:B.mode,modelId:f.modelId,toolRoutingRules:f.toolRoutingRules,toolPolicies:f.toolPolicies,toolExecutors:V}),Z0=y&&_?y.createExtension({includeRules:P,includeSkills:D,includeWorkflows:O,registerSkillsTool:Q0,allowedSkillNames:f.skills}):void 0,o=Z0?[...Q??f.extensions??[],Z0]:Q??f.extensions;if(B.enableTools){if(G.push(...fZ(f.cwd,f.providerId,B.mode,f.modelId,f.toolRoutingRules,f.toolPolicies,void 0,V)),!B.disableMcpSettingsTools){let p=await bT(f.logger);G.push(...p.tools),w=p.shutdown}}let u,U0=B.enableAgentTeams?eQ():void 0,k$=U0?.loadRuntime(F),d=k$?.state,K$=k$?.teammates??[],k=new Map(K$.map((p)=>[p.agentId,p])),n=f.sessionId||R,G$,e0=[],P1=!1,Yf=Rf({providerId:f.providerId,modelId:f.modelId,cwd:f.cwd,apiKey:f.apiKey??"",baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking,maxIterations:f.maxIterations,hooks:J,extensions:o,logger:Z??f.logger,telemetry:$.telemetry??f.telemetry,workspaceMetadata:f.workspaceMetadata});if(!this.teamRuntimeEntries.has(n))this.teamRuntimeEntries.set(n,{delegatedAgentConfigProvider:Yf});let y2=()=>{if(!B.enableAgentTeams)return;let p=this.teamRuntimeEntries.get(n)??{delegatedAgentConfigProvider:Yf};if(this.teamRuntimeEntries.set(n,p),u=p.runtime,!u){if(u=new $f({teamName:R,leadAgentId:f.sessionId||"lead",missionLogIntervalSteps:B.missionLogIntervalSteps,missionLogIntervalMs:B.missionLogIntervalMs,onTeamEvent:(f0)=>{if(A(f0),u&&U0){if(f0.type==="teammate_spawned"&&f0.teammate?.rolePrompt){let P$={agentId:f0.agentId,rolePrompt:f0.teammate.rolePrompt,modelId:f0.teammate.modelId,maxIterations:f0.teammate.maxIterations};k.set(P$.agentId,P$)}if(f0.type==="teammate_shutdown"&&!IT(f0.reason))k.delete(f0.agentId);U0.handleTeamEvent(F,f0),U0.persistRuntime(F,u.exportState(),Array.from(k.values()))}}}),d)u.hydrateState(d),P1=!0;p.runtime=u}if(!L){if(!u)return;L=!0;let f0=Of({runtime:u,leadAgentId:f.sessionId||"lead",restoredFromPersistence:Boolean(d),restoredTeammates:K$,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(P$)=>{e0=P$,G$?.addTools(P$)},createBaseTools:B.enableTools?()=>fZ(f.cwd,f.providerId,B.mode,f.modelId,f.toolRoutingRules,f.toolPolicies,void 0,V):void 0,teammateConfigProvider:Yf});if(P1)u.recoverActiveRuns("runtime_recovered");if(f0.restoredFromPersistence)X?.();G.push(...f0.tools)}return u};if(B.enableSpawnAgent&&j){let p=j();G.push({...p,execute:async(f0,P$)=>{return y2(),p.execute(f0,P$)}})}if(B.enableAgentTeams)y2();let c4=YA(G,f.toolPolicies),y5=c4.some((p)=>p.name===J0.SUBMIT_AND_EXIT&&p.lifecycle?.completesRun===!0),Vf=B.enableAgentTeams?()=>{let p=this.teamRuntimeEntries.get(n)?.runtime;if(!p)return;let f0=p.listTasks(),P$=f0.some((I$)=>I$.status==="in_progress"||I$.status==="pending"),cZ=p.listRuns({}),QB=cZ.some((I$)=>I$.status==="running"||I$.status==="queued");if(P$||QB){let I$=f0.filter((S0)=>S0.status==="in_progress"||S0.status==="pending").map((S0)=>`${S0.id} (${S0.status}): ${S0.title}`).join(", "),uZ=cZ.filter((S0)=>S0.status==="running"||S0.status==="queued").map((S0)=>`${S0.id} (${S0.status})`).join(", "),T5=[];if(I$)T5.push(`Unfinished tasks: ${I$}`);if(uZ)T5.push(`Active runs: ${uZ}`);return`[SYSTEM] You still have team obligations. ${T5.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,T2=y5?{requireCompletionTool:!0,...Vf?{completionGuard:Vf}:{}}:Vf?{completionGuard:Vf}:void 0;return{tools:c4,logger:Z??f.logger,telemetry:W??f.telemetry,teamRuntime:u,teamRestoredFromPersistence:Boolean(d),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(n)?.delegatedAgentConfigProvider??Yf,extensions:o,completionPolicy:T2,registerLeadAgent:(p)=>{if(G$=p,e0.length>0)p.addTools(E1(e0,[...K]))},shutdown:async(p)=>{if(kT(u,p),this.teamRuntimeEntries.delete(n),await w?.(),!z)y?.stop()}}}}var BA={};q(BA,{requestDesktopToolApproval:()=>QZ});import{mkdir as gT,readFile as mT,unlink as vT,writeFile as cT}from"node:fs/promises";import{join as AA}from"node:path";function uT($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function dT($){return new Promise((f)=>setTimeout(f,$))}async function JZ($){try{await vT($)}catch{}}async function QZ($,f={}){let J=f.approvalDir?.trim(),Q=f.sessionId?.trim();if(!J||!Q)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await gT(J,{recursive:!0});let Z=uT(`${$.toolCallId}`),W=AA(J,`${Q}.request.${Z}.json`),j=AA(J,`${Q}.decision.${Z}.json`),X=f.nowIso??(()=>new Date().toISOString());await cT(W,`${JSON.stringify({requestId:Z,sessionId:Q,createdAt:X(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
713
- `,"utf8");let H=f.timeoutMs??300000,Y=f.pollIntervalMs??200,V=Date.now();while(Date.now()-V<H){try{let A=await mT(j,"utf8"),B=JSON.parse(A),K={approved:B.approved===!0,reason:typeof B.reason==="string"?B.reason:void 0};return await Promise.all([JZ(j),JZ(W)]),K}catch{}await dT(Y)}return await JZ(W),{approved:!1,reason:"Tool approval request timed out"}}T$();var wA={};q(wA,{updateLocalProvider:()=>K5,saveLocalProviderSettings:()=>AZ,saveLocalProviderOAuthCredentials:()=>PZ,resolveLocalClineAuthToken:()=>FZ,refreshProviderModelsFromSource:()=>BZ,normalizeOAuthProvider:()=>KZ,loginLocalProvider:()=>GZ,listLocalProviders:()=>YZ,getProviderConfigFields:()=>DZ,getLocalProviderModels:()=>VZ,ensureCustomProvidersLoaded:()=>B5,deleteLocalProvider:()=>G5,addLocalProvider:()=>HZ});import*as B0 from"@cline/llms";import{getClineEnvironmentConfig as AN,isOAuthProviderId as BN}from"@cline/shared";import{existsSync as lT,mkdirSync as pT,readFileSync as rT,writeFileSync as iT}from"node:fs";import{mkdir as nT,readFile as aT,writeFile as tT}from"node:fs/promises";import{dirname as ZZ,join as sT}from"node:path";import*as w0 from"@cline/llms";import{ModelCapabilitySchema as oT,ProviderCapabilitySchema as eT,ProviderClientSchema as $N,ProviderProtocolSchema as fN}from"@cline/shared";import{z as i}from"zod";var JN=i.object({id:i.string().optional(),name:i.string().optional(),capabilities:i.array(oT).optional(),supportsVision:i.boolean().optional(),supportsAttachments:i.boolean().optional(),supportsReasoning:i.boolean().optional()}).passthrough(),QN=i.object({name:i.string(),baseUrl:i.string(),defaultModelId:i.string().optional(),protocol:fN.optional(),client:$N.optional(),capabilities:i.array(eT).optional(),modelsSourceUrl:i.string().optional()}).passthrough(),KA=i.object({provider:QN.optional(),models:i.record(i.string(),JN).optional()}).passthrough(),GA=i.object({version:i.literal(1),providers:i.record(i.string(),KA)}),ZN=i.object({version:i.literal(1),providers:i.record(i.string(),i.unknown())}),H5=new Set;function PA($){return $.split(/[-_]/).filter(Boolean).map((f)=>f.charAt(0).toUpperCase()+f.slice(1)).join(" ")}function Xf($){return sT(ZZ($.getFilePath()),"models.json")}function Y5(){return{version:1,providers:{}}}function FA($){let f=ZN.safeParse($);if(!f.success)return Y5();let J={};for(let[Q,Z]of Object.entries(f.data.providers)){let W=KA.safeParse(Z);if(W.success)J[Q]=W.data}return{version:1,providers:J}}function WZ($){if(!lT($))return Y5();try{let f=rT($,"utf8");return FA(JSON.parse(f))}catch{}return Y5()}async function _2($){try{let f=await aT($,"utf8");return FA(JSON.parse(f))}catch{}return Y5()}function DA($,f){pT(ZZ($),{recursive:!0});let J=GA.parse(f);iT($,`${JSON.stringify(J,null,2)}
714
- `,"utf8")}async function V5($,f){await nT(ZZ($),{recursive:!0});let J=GA.parse(f);await tT($,`${JSON.stringify(J,null,2)}
715
- `,"utf8")}function RA($,f){return{id:$,name:f.name??$,supportsAttachments:f.capabilities?.includes("files"),supportsVision:f.capabilities?.includes("images"),supportsReasoning:f.capabilities?.includes("reasoning")||f.thinkingConfig!=null}}function UA($){if(!$||$.length===0)return;let f=new Set;if($.includes("reasoning"))f.add("reasoning");if($.includes("prompt-cache"))f.add("prompt-cache");if($.includes("tools"))f.add("tools");return f.size>0?[...f]:void 0}function LA($){let f=new Set;if(!$||$.length===0)return[...f];if($.includes("streaming"))f.add("streaming");if($.includes("tools"))f.add("tools");if($.includes("reasoning"))f.add("reasoning");if($.includes("prompt-cache"))f.add("prompt-cache");if($.includes("vision"))f.add("images"),f.add("files");return[...f]}function WN($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function OA($,f){return $??f??"openai-chat"}function zA($,f,J){return $??J??(f==="openai-responses"?"openai":"openai-compatible")}function jN($,f){let J=new Set(f?.capabilities??[]);if(f?.supportsVision)J.add("images");if(f?.supportsAttachments)J.add("files");if(f?.supportsReasoning)J.add("reasoning");return{id:$,name:f?.name??$,capabilities:J.size>0?[...J]:void 0}}function XN($,f){for(let[J,Q]of Object.entries(f??{})){let Z=Q.id?.trim()||J.trim();if(!Z)continue;w0.registerModel($,Z,jN(Z,Q))}}function HN($,f,J){return{...f??{},id:$,name:f?.name??$,capabilities:f?.capabilities??J}}function YN($){return Object.assign({},...w0.resolveProviderModelCatalogKeys($).map((J)=>w0.getGeneratedModelsForProvider(J)))}function VN($){let f=$.provider.trim();if(!f||w0.isBuiltInProviderId(f))return;let J=$.baseUrl?.trim();if(!J)return;let Q=w0.MODEL_COLLECTIONS_BY_PROVIDER_ID[f],Z=YN(f),W=LA($.capabilities),j=W.length>0?W:void 0,X=$.model?.trim(),H={...Z,...Q?.models??{}};if(X)H[X]=HN(X,H[X],j);let Y=Object.keys(H).filter(Boolean),V=X||Y[0];if(!V)return;let A=OA($.protocol,Q?.provider.protocol),B=zA($.client,A,Q?.provider.client);w0.registerProvider({provider:{id:f,name:Q?.provider.name??PA(f),description:Q?.provider.description,protocol:A,client:B,baseUrl:J,modelsSourceUrl:Q?.provider.modelsSourceUrl,defaultModelId:V,capabilities:UA($.capabilities)??Q?.provider.capabilities,source:"file"},models:H})}function A5($){for(let f of Object.values($.providers))VN(f.settings)}function x4($,f){let J=f.models??{};if(!WN(f.provider)){XN($,J);return}let Q=LA(f.provider.capabilities),Z=Object.entries(J).map(([Y,V])=>({id:V.id?.trim()||Y.trim(),model:V})).filter(({id:Y})=>Y.length>0),W=f.provider.defaultModelId?.trim()||Z[0]?.id||"default",j=OA(f.provider.protocol,void 0),X=zA(f.provider.client,j,void 0),H=Object.fromEntries(Z.map(({id:Y,model:V})=>[Y,{id:Y,name:V.name??Y,capabilities:Q.length>0?Q:void 0,status:"active"}]));w0.registerProvider({provider:{id:$,name:f.provider.name.trim()||PA($),protocol:j,client:X,baseUrl:f.provider.baseUrl,modelsSourceUrl:f.provider.modelsSourceUrl,defaultModelId:W,capabilities:UA(f.provider.capabilities),source:"file"},models:H})}function _A($){let f=Xf($);if(H5.has(f))return;let J=WZ(f);for(let[Q,Z]of Object.entries(J.providers))x4(Q,Z);H5.add(f)}async function B5($){let f=Xf($);if(H5.has(f))return;let J=await _2(f);for(let[Q,Z]of Object.entries(J.providers))x4(Q,Z);H5.add(f)}function KN($){return $.apiKey??$.auth?.apiKey}function GN($){return($.auth?.accessToken?.trim()??"").length>0}function yA($){return $.split(/[-_]/).filter(Boolean).map((f)=>f.charAt(0).toUpperCase()+f.slice(1)).join(" ")}function PN($){let f=$.split(/\s+/).filter(Boolean);if(f.length===0)return"?";if(f.length===1)return f[0].slice(0,2).toUpperCase();return`${f[0][0]}${f[1][0]}`.toUpperCase()}function FN($){let f=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],J=0;for(let Q of $)J=J*31+Q.charCodeAt(0)>>>0;return f[J%f.length]}function TA($){return Object.entries($).sort(([f],[J])=>f.localeCompare(J)).map(([f,J])=>RA(f,J))}async function DN($,f){let J=await B0.getModelsForProvider($);if(!f)return J;let Q=await y8($,{loadPrivateOnAuth:!0,failOnError:!1},f);return Q?.knownModels?{...J,...Q.knownModels}:J}function jZ($){return[...new Set(($??[]).map((f)=>f.trim()).filter(Boolean))]}function RN($){if(!$?.length)return;return[...new Set($)]}function UN($,f){return RN([...$??[],...f??[]])}function LN($){let f=$?.popularRank;return typeof f==="number"&&Number.isFinite(f)?f:Number.MAX_SAFE_INTEGER}function NA($){let f=Object.entries($??{}).filter(([J])=>J.trim().length>0);return f.length>0?Object.fromEntries(f):void 0}function XZ($,f){let J=f?.includes("vision")??!1,Q=f?.includes("reasoning")??!1;return Object.fromEntries($.map((Z)=>[Z,{id:Z,name:Z,supportsVision:J,supportsAttachments:J,supportsReasoning:Q}]))}async function MA($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let f=$.modelsSourceUrl?await x6($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...f])]}function qA($,f){let J=$.read(),Q=!1;if(J.providers[f])delete J.providers[f],Q=!0;if(J.lastUsedProvider===f)delete J.lastUsedProvider,Q=!0;if(Q)$.write(J);B0.unregisterProvider(f)}async function HZ($,f){let J=f.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let Q=f.baseUrl.trim(),Z=f.apiKey?.trim()??"";if(!Q&&!Z){let G=Xf($);if((await _2(G)).providers[J]){let F=await G5($,{providerId:J});return{providerId:J,settingsPath:F.settingsPath,modelsPath:F.modelsPath,modelsCount:0}}return qA($,J),{providerId:J,settingsPath:$.getFilePath(),modelsPath:G,modelsCount:0}}if(B0.hasProvider(J))throw Error(`provider "${J}" already exists`);let W=f.name.trim();if(!W)throw Error("name is required");if(!Q)throw Error("baseUrl is required");let j=jZ(f.models),X=f.modelsSourceUrl?.trim(),H=await MA({providerId:J,explicitModels:j,modelsSourceUrl:X,shouldRecompute:!0});if(H.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let Y=f.defaultModelId?.trim()&&H.includes(f.defaultModelId.trim())?f.defaultModelId.trim():H[0],V=f.capabilities?.length?[...new Set(f.capabilities)]:void 0,A=NA(f.headers);$.saveProviderSettings({provider:J,apiKey:Z||void 0,baseUrl:Q,headers:A,timeout:f.timeoutMs,model:Y,protocol:f.protocol,client:f.client},{setLastUsed:!1});let B=Xf($),K=await _2(B);return K.providers[J]={provider:{name:W,baseUrl:Q,defaultModelId:Y,protocol:f.protocol,client:f.client,capabilities:V,modelsSourceUrl:X},models:XZ(H,V)},await V5(B,K),x4(J,K.providers[J]),{providerId:J,settingsPath:$.getFilePath(),modelsPath:B,modelsCount:H.length}}async function K5($,f){let J=f.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let Q=Xf($),Z=await _2(Q),W=Z.providers[J];if(!W){let _=$.getProviderSettings(J);if(!_)throw Error(`provider "${J}" does not exist`);let L=f.modelsSourceUrl?.trim(),z=jZ(f.models)[0]??_.model?.trim();if(!z&&!L)throw Error(`provider "${J}" cannot be updated because no model is configured`);W={provider:{name:f.name?.trim()||yA(J),baseUrl:f.baseUrl?.trim()??_.baseUrl?.trim()??"",defaultModelId:z,protocol:_.protocol,client:_.client,capabilities:_.capabilities},models:z?XZ([z],_.capabilities):{}}}if(!W.provider)throw Error(`provider "${J}" cannot be updated because it is a model overlay (no provider metadata)`);let j=f.name?.trim()??W.provider.name.trim();if(!j)throw Error("name is required");let X=f.baseUrl?.trim()??W.provider.baseUrl.trim();if(!X)throw Error("baseUrl is required");let H=f.capabilities===void 0?W.provider.capabilities:f.capabilities===null?void 0:[...new Set(f.capabilities)],Y=f.protocol===void 0?W.provider.protocol:f.protocol??void 0,V=f.client===void 0?W.provider.client:f.client??void 0,A=jZ(f.models),B=f.modelsSourceUrl===void 0?W.provider.modelsSourceUrl:f.modelsSourceUrl?.trim()||void 0,K=f.models!==void 0||f.modelsSourceUrl!==void 0&&!!B,G=Object.keys(W.models??{}).map((_)=>_.trim()).filter(Boolean),R=await MA({providerId:J,explicitModels:A,modelsSourceUrl:B,fallbackModelIds:G,shouldRecompute:K});if(R.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let F=f.defaultModelId===void 0?W.provider.defaultModelId?.trim():f.defaultModelId?.trim(),P=F&&R.includes(F)?F:R[0],O={...$.getProviderSettings(J)??{},provider:J,baseUrl:X,model:P};if(Y)O.protocol=Y;else delete O.protocol;if(V)O.client=V;else delete O.client;if(f.apiKey!==void 0){let _=f.apiKey?.trim()??"";if(_)O.apiKey=_;else delete O.apiKey}if(f.headers!==void 0){let _=NA(f.headers);if(_)O.headers=_;else delete O.headers}if(f.timeoutMs!==void 0)if(typeof f.timeoutMs==="number")O.timeout=f.timeoutMs;else delete O.timeout;return $.saveProviderSettings(O,{setLastUsed:!1}),Z.providers[J]={provider:{name:j,baseUrl:X,defaultModelId:P,protocol:Y,client:V,capabilities:H,modelsSourceUrl:B},models:XZ(R,H)},await V5(Q,Z),x4(J,Z.providers[J]),{providerId:J,settingsPath:$.getFilePath(),modelsPath:Q,modelsCount:R.length}}async function G5($,f){let J=f.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let Q=Xf($),Z=await _2(Q);if(!Z.providers[J])throw Error(`provider "${J}" does not exist`);return delete Z.providers[J],await V5(Q,Z),B0.unregisterProvider(J),qA($,J),{providerId:J,settingsPath:$.getFilePath(),modelsPath:Q}}async function YZ($){let f=$.read(),J=B0.getProviderIds(),Q=await Promise.all(J.map(async(W)=>{let[j,X]=await Promise.all([B0.getProvider(W),B0.getModelsForProvider(W)]),H=TA(X),Y=f.providers[W]?.settings,V=j?.name??yA(W),A=UN(j?.capabilities,Y?.capabilities);return{provider:{id:W,name:V,models:H.length,color:FN(W),letter:PN(V),enabled:Boolean(Y),apiKey:Y?KN(Y):void 0,oauthAccessTokenPresent:Y?GN(Y):void 0,baseUrl:Y?.baseUrl??j?.baseUrl,defaultModelId:j?.defaultModelId,protocol:Y?.protocol??j?.protocol,client:Y?.client??j?.client,capabilities:A,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",modelList:H},rank:LN(j?.metadata)}}));return Q.sort((W,j)=>{if(W.rank!==j.rank)return W.rank-j.rank;return W.provider.name.localeCompare(j.provider.name)||W.provider.id.localeCompare(j.provider.id)}),{providers:Q.map((W)=>W.provider),settingsPath:$.getFilePath()}}async function VZ($,f){let J=$.trim(),Q=await DN(J,f),Z=TA(Q);return{providerId:J,models:Z}}function AZ($,f){let J=f.providerId.trim();if(f.enabled===!1){let W=$.read();if(delete W.providers[J],W.lastUsedProvider===J)delete W.lastUsedProvider;return $.write(W),{providerId:J,enabled:!1,settingsPath:$.getFilePath()}}let Z={...$.getProviderSettings(J)??{},provider:J};for(let W of["apiKey","baseUrl","model","region"])if(Object.hasOwn(f,W)&&typeof f[W]==="string")if(f[W].trim().length===0)delete Z[W];else Z[W]=f[W];for(let W of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(f,W))Z[W]=f[W];for(let W of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(f,W)&&f[W]!=null)Z[W]={...typeof Z[W]==="object"&&Z[W]!=null?Z[W]:{},...f[W]};return $.saveProviderSettings(Z,{setLastUsed:!1}),{providerId:J,enabled:!0,settingsPath:$.getFilePath()}}async function BZ($,f){let J=f.trim(),Q=$.getProviderSettings(J),W=B0.MODEL_COLLECTIONS_BY_PROVIDER_ID[J]?.provider,j=Q?.baseUrl?.trim()||W?.baseUrl?.trim(),X=g6(j,W?.baseUrl,W?.modelsSourceUrl);if(!Q||!W||!j||!X)return{providerId:J,refreshed:!1};let H=await K5($,{providerId:J,name:W.name,baseUrl:j,apiKey:Q.apiKey,headers:Q.headers??null,timeoutMs:Q.timeout??null,modelsSourceUrl:X,protocol:Q.protocol??W.protocol??null,client:Q.client??W.client??null,capabilities:Q.capabilities??null});return{providerId:J,refreshed:!0,modelsCount:H.modelsCount}}function KZ($){let f=$.trim().toLowerCase();if(f==="codex"||f==="openai-codex")return"openai-codex";if(f==="cline"||f==="oca")return f;throw Error(`provider "${$}" does not support OAuth login (supported: cline, oca, openai-codex)`)}function ON($,f){if($==="cline")return f.access.startsWith("workos:")?f.access:`workos:${f.access}`;return f.access}async function GZ($,f,J){let Q=h8({onPrompt:async(Z)=>Z.defaultValue??"",openUrl:J,onOpenUrlError:({error:Z})=>{throw Z instanceof Error?Z:Error(String(Z))}});if($==="cline")return pf({apiBaseUrl:f?.baseUrl?.trim()||AN().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q});if($==="oca")return gf({mode:f?.oca?.mode,callbacks:Q});return rf(Q)}function PZ($,f,J,Q){let Z={...J?.auth??{},accessToken:ON(f,Q),refreshToken:Q.refresh,accountId:Q.accountId,expiresAt:Q.expires},W={...J??{provider:f},provider:f,auth:Z};return $.saveProviderSettings(W,{tokenSource:"oauth"}),W}function FZ($){let f=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return f&&f.length>0?f:void 0}var zN=new Set(["ollama","lmstudio","litellm"]);function _N($,f){if(!f?.provider.baseUrl)return!1;if(f.provider.source!=="system")return!0;return zN.has($)}function DZ($){let f=B0.normalizeProviderId($);if(BN(f))return{providerId:f,authMethod:"oauth",fields:{}};let J=B0.MODEL_COLLECTIONS_BY_PROVIDER_ID[f];if(J?.provider.capabilities?.includes("local-auth"))return{providerId:f,authMethod:"local",fields:{}};let Q=J?.provider.baseUrl,Z={apiKey:{}};if(_N(f,J))Z.baseUrl={defaultValue:Q};return{providerId:f,authMethod:"api-key",fields:Z}}var bA={};q(bA,{resolveLegacyClineAuth:()=>hA,migrateLegacyProviderSettings:()=>g4});import{existsSync as yN,readFileSync as TN}from"node:fs";import{dirname as NN,join as RZ}from"node:path";import*as CA from"@cline/llms";import{resolveClineDataDir as MN}from"@cline/shared/storage";var EA="openai";function hA($){let f=$?.trim();if(!f)return;try{let J=JSON.parse(f);if(!J)return;return{accessToken:J.idToken,refreshToken:J.refreshToken,expiresAt:J.expiresAt,accountId:J.userInfo?.id}}catch{return}}function b($){let f=$?.trim();return f?f:void 0}function SA($){if(!yN($))return;try{let f=TN($,"utf8"),J=JSON.parse(f);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return}function qN($){let f=$.dataDir??MN(),J=$.globalStatePath??RZ(f,"globalState.json"),Q=$.secretsPath??RZ(f,"secrets.json"),Z=SA(J),W=SA(Q);if(!Z&&!W)return;return{globalState:Z??{},secrets:W??{}}}function wN($){try{let J=new URL($).hostname.toLowerCase();return J==="api.openai.com"||J.endsWith(".openai.azure.com")||J.endsWith(".services.ai.azure.com")}catch{return!1}}function SN($){let f=b($.openAiBaseUrl);if(!f)return!1;if($.azureApiVersion||$.azureIdentity)return!1;return!wN(f)}function UZ($,f){if($==="openai"&&SN(f))return EA;return $}function CN($,f,J,Q){let Z=J==="plan"?"planMode":"actMode",W=f===Q?b(J==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,X={openrouter:`${Z}OpenRouterModelId`,cline:`${Z}ClineModelId`,openai:`${Z}OpenAiModelId`,ollama:`${Z}OllamaModelId`,lmstudio:`${Z}LmStudioModelId`,litellm:`${Z}LiteLlmModelId`,requesty:`${Z}RequestyModelId`,together:`${Z}TogetherModelId`,fireworks:`${Z}FireworksModelId`,sapaicore:`${Z}SapAiCoreModelId`,groq:`${Z}GroqModelId`,baseten:`${Z}BasetenModelId`,huggingface:`${Z}HuggingFaceModelId`,"huawei-cloud-maas":`${Z}HuaweiCloudMaasModelId`,oca:`${Z}OcaModelId`,aihubmix:`${Z}AihubmixModelId`,hicap:`${Z}HicapModelId`,nousResearch:`${Z}NousResearchModelId`,"vercel-ai-gateway":`${Z}VercelAiGatewayModelId`}[f];return(X?b(typeof $[X]==="string"?$[X]:void 0):void 0)??W}function EN($,f,J){let Q=J==="plan"?$.planModeReasoningEffort:$.actModeReasoningEffort,Z=J==="plan"?$.geminiPlanModeThinkingLevel:$.geminiActModeThinkingLevel,W=J==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,j=(f==="gemini"?Z:void 0)??Q,X=j==="none"||j==="low"||j==="medium"||j==="high"?j:void 0,H=typeof W==="number"&&Number.isInteger(W)&&W>0?W:void 0;if(!X&&H===void 0)return;return{...X?{effort:X}:{},...H!==void 0?{budgetTokens:H}:{}}}function hN($){let f=$["openai-codex-oauth-credentials"];if(!f)return;try{let J=JSON.parse(f),Q=b(J.access_token),Z=b(J.refresh_token),W=b(J.accountId);if(!Q&&!Z&&!W)return;return{...Q?{apiKey:Q}:{},auth:{...Q?{accessToken:Q}:{},...Z?{refreshToken:Z}:{},...W?{accountId:W}:{}}}}catch{return}}function bN($){let f=CA.getGeneratedModelsForProvider($);return Object.keys(f)[0]??void 0}function kN($,f,J,Q){let Z=UZ($,f),W=b(Q==="plan"?f.planModeApiProvider:f.actModeApiProvider),j=CN(f,$,Q,W)??bN(Z),X=EN(f,Z,Q),H=typeof f.requestTimeoutMs==="number"&&Number.isInteger(f.requestTimeoutMs)&&f.requestTimeoutMs>0?f.requestTimeoutMs:void 0,Y={anthropic:J.apiKey,cline:J.clineApiKey,openai:J.openAiApiKey,"openai-native":J.openAiNativeApiKey,openrouter:J.openRouterApiKey,bedrock:J.awsBedrockApiKey,gemini:J.geminiApiKey,ollama:J.ollamaApiKey,deepseek:J.deepSeekApiKey,requesty:J.requestyApiKey,together:J.togetherApiKey,fireworks:J.fireworksApiKey,qwen:J.qwenApiKey,doubao:J.doubaoApiKey,mistral:J.mistralApiKey,litellm:J.liteLlmApiKey,asksage:J.asksageApiKey,xai:J.xaiApiKey,moonshot:J.moonshotApiKey,zai:J.zaiApiKey,huggingface:J.huggingFaceApiKey,nebius:J.nebiusApiKey,sambanova:J.sambanovaApiKey,cerebras:J.cerebrasApiKey,groq:J.groqApiKey,"huawei-cloud-maas":J.huaweiCloudMaasApiKey,baseten:J.basetenApiKey,"vercel-ai-gateway":J.vercelAiGatewayApiKey,dify:J.difyApiKey,minimax:J.minimaxApiKey,hicap:J.hicapApiKey,aihubmix:J.aihubmixApiKey,nousResearch:J.nousResearchApiKey,oca:J.ocaApiKey,sapaicore:J.sapAiCoreClientId},V={};if($==="openai-codex")Object.assign(V,hN(J));if($==="cline")try{let P=b(J["cline:clineAccountId"]);if(P)V.auth={...V.auth??{},...hA(P)}}catch{}if($==="openai"&&f.openAiHeaders)V.headers=f.openAiHeaders;if($==="bedrock")V.aws={accessKey:b(J.awsAccessKey),secretKey:b(J.awsSecretKey),sessionToken:b(J.awsSessionToken),region:b(f.awsRegion),authentication:f.awsAuthentication,profile:f.awsUseProfile?b(f.awsProfile):void 0,usePromptCache:f.awsBedrockUsePromptCache,useCrossRegionInference:f.awsUseCrossRegionInference,useGlobalInference:f.awsUseGlobalInference,endpoint:b(f.awsBedrockEndpoint),customModelBaseId:b(Q==="plan"?f.planModeAwsBedrockCustomModelBaseId:f.actModeAwsBedrockCustomModelBaseId)};if($==="vertex")V.gcp={projectId:b(f.vertexProjectId),region:b(f.vertexRegion)};if($==="openai"&&(f.azureApiVersion||f.azureIdentity!==void 0))V.azure={apiVersion:b(f.azureApiVersion),useIdentity:f.azureIdentity};if($==="sapaicore")V.sap={clientId:b(J.sapAiCoreClientId),clientSecret:b(J.sapAiCoreClientSecret),tokenUrl:b(f.sapAiCoreTokenUrl),resourceGroup:b(f.sapAiResourceGroup),deploymentId:b(Q==="plan"?f.planModeSapAiCoreDeploymentId:f.actModeSapAiCoreDeploymentId),useOrchestrationMode:f.sapAiCoreUseOrchestrationMode};if($==="oca"){V.oca={mode:f.ocaMode};let P=b(J.ocaRefreshToken);if(P)V.auth={...V.auth??{},refreshToken:P}}if($==="qwen")V.apiLine=f.qwenApiLine;if($==="moonshot")V.apiLine=f.moonshotApiLine;if($==="zai")V.apiLine=f.zaiApiLine;if($==="minimax")V.apiLine=f.minimaxApiLine;let A={anthropic:f.anthropicBaseUrl,openai:f.openAiBaseUrl,ollama:f.ollamaBaseUrl,lmstudio:f.lmStudioBaseUrl,litellm:f.liteLlmBaseUrl,gemini:f.geminiBaseUrl,requesty:f.requestyBaseUrl,asksage:f.asksageApiUrl,dify:f.difyBaseUrl,oca:f.ocaBaseUrl,aihubmix:f.aihubmixBaseUrl,sapaicore:f.sapAiCoreBaseUrl},B=b(Y[$]),K=b(A[$]),G={provider:Z,...B?{apiKey:B}:{},...j?{model:j}:{},...K?{baseUrl:K}:{},...X?{reasoning:X}:{},...H?{timeout:H}:{},...V},R=M8.safeParse(G);if(!R.success)return;return Object.keys(G).filter((P)=>P!=="provider").length>0?R.data:void 0}function IN($,f){if($!==EA)return;if(!f.baseUrl||!f.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:f.baseUrl,defaultModelId:f.model},models:{[f.model]:{id:f.model,name:f.model}}}}function xN($,f){let J=new Set;for(let Q of[$.actModeApiProvider,$.planModeApiProvider]){let Z=b(Q);if(Z)J.add(Z)}if(b(f.apiKey))J.add("anthropic");if(b(f.openRouterApiKey))J.add("openrouter");if(b(f.openAiApiKey))J.add("openai");if(b(f.openAiNativeApiKey))J.add("openai-native");if(b(f["openai-codex-oauth-credentials"]))J.add("openai-codex");if(b(f.geminiApiKey))J.add("gemini");if(b(f.ollamaApiKey))J.add("ollama");if(b(f.awsAccessKey)||b(f.awsBedrockApiKey))J.add("bedrock");if(b($.vertexProjectId)||b($.vertexRegion))J.add("vertex");if(b(f.clineApiKey))J.add("cline");if(b(f.ocaApiKey))J.add("oca");return J}function g4($){let f=$.providerSettingsManager.read(),J=qN($);if(!J)return{migrated:!1,providerCount:Object.keys(f.providers).length,lastUsedProvider:f.lastUsedProvider};let{globalState:Q,secrets:Z}=J,W=Q.mode==="plan"?"plan":"act",j=xN(Q,Z),X=J1();X.providers={...f.providers},X.lastUsedProvider=f.lastUsedProvider;let H=new Date().toISOString(),Y=0,V=RZ(NN($.providerSettingsManager.getFilePath()),"models.json"),A=WZ(V),B=0;for(let R of j){let F=UZ(R,Q);if(X.providers[F])continue;let P=kN(R,Q,Z,W);if(!P)continue;X.providers[F]={settings:P,updatedAt:H,tokenSource:"migration"},Y+=1;let D=IN(F,P);if(D&&!A.providers[F])A.providers[F]=D,B+=1}if(Y===0&&B===0)return{migrated:!1,providerCount:Object.keys(f.providers).length,lastUsedProvider:f.lastUsedProvider};let K=b(W==="plan"?Q.planModeApiProvider:Q.actModeApiProvider),G=K?UZ(K,Q):void 0;if(X.lastUsedProvider=f.lastUsedProvider??(G&&X.providers[G]?G:Object.keys(X.providers)[0]),$.providerSettingsManager.write(X),B>0)DA(V,A);return{migrated:Y>0||B>0,providerCount:Object.keys(X.providers).length,lastUsedProvider:X.lastUsedProvider}}T0();aJ();var kA={};q(kA,{FileTeamPersistenceStore:()=>P5});import{appendFileSync as gN,existsSync as LZ,mkdirSync as mN,readFileSync as vN,renameSync as cN,unlinkSync as uN,writeFileSync as dN}from"node:fs";import{join as OZ}from"node:path";import{resolveTeamDataDir as lN}from"@cline/shared/storage";function pN($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class P5{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let f=pN($.teamName),J=$.baseDir?.trim()||lN();this.dirPath=OZ(J,f),this.statePath=OZ(this.dirPath,"state.json"),this.taskHistoryPath=OZ(this.dirPath,"task-history.jsonl")}loadState(){if(!LZ(this.statePath))return;try{let $=vN(this.statePath,"utf8"),f=JSON.parse($);if(f.version!==1||!f.teamState)return;for(let J of f.teammates??[])this.teammateSpecs.set(J.agentId,J);return cY(f.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 f={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},J=`${this.statePath}.tmp`;dN(J,`${JSON.stringify(f,null,2)}
716
- `,"utf8"),cN(J,this.statePath)}appendTaskHistory($){let f={};switch($.type){case"team_task_updated":f=$.task;break;case"team_message":f={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":f={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":f={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":f={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":f={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),gN(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:f})}
717
- `,"utf8")}ensureDir(){if(!LZ(this.dirPath))mN(this.dirPath,{recursive:!0})}hasPersistableState($){let f=$.exportState();if(this.teammateSpecs.size>0)return!0;if(f.members.some((J)=>J.role==="teammate"))return!0;return f.tasks.length>0||f.mailbox.length>0||f.missionLog.length>0}clearPersistedState(){if(LZ(this.statePath))uN(this.statePath)}}var IA={};q(IA,{ChatViewStateSchema:()=>zZ,ChatSummarySchema:()=>L5,ChatSessionStatusSchema:()=>D5,ChatSessionConfigSchema:()=>F5,ChatMessageSchema:()=>U5,ChatMessageRoleSchema:()=>R5});import{z as C}from"zod";var F5=C.object({workspaceRoot:C.string().min(1),cwd:C.string().optional(),provider:C.string().min(1),model:C.string().min(1),mode:C.enum(["act","plan"]).default("act"),apiKey:C.string(),systemPrompt:C.string().optional(),rules:C.string().optional(),maxIterations:C.number().int().positive().optional(),enableTools:C.boolean(),enableSpawn:C.boolean().optional(),enableTeams:C.boolean().optional(),autoApproveTools:C.boolean().optional(),missionStepInterval:C.number().int().positive().optional(),missionTimeIntervalMs:C.number().int().positive().optional()}),D5=C.enum(["idle","starting","running","stopping","completed","cancelled","failed","error"]),R5=C.enum(["user","assistant","tool","system","status","error"]),U5=C.object({id:C.string().min(1),sessionId:C.string().nullable(),role:R5,content:C.string(),createdAt:C.number().int().nonnegative(),meta:C.object({stream:C.enum(["stdout","stderr"]).optional(),toolName:C.string().optional(),iteration:C.number().int().nonnegative().optional(),agentId:C.string().optional(),conversationId:C.string().optional(),hookEventName:C.string().optional(),inputTokens:C.number().int().nonnegative().optional(),outputTokens:C.number().int().nonnegative().optional(),checkpoint:C.object({ref:C.string(),createdAt:C.number().int().nonnegative(),runCount:C.number().int().positive(),kind:C.enum(["stash","commit"]).optional()}).optional()}).optional()}),L5=C.object({toolCalls:C.number().int().nonnegative(),tokensIn:C.number().int().nonnegative(),tokensOut:C.number().int().nonnegative()}),zZ=C.object({sessionId:C.string().nullable(),status:D5,config:F5,messages:C.array(U5),rawTranscript:C.string(),error:C.string().nullable(),summary:L5});var xA={};q(xA,{CORE_BUILD_VERSION:()=>_Z});var _Z=rH;import{Agent as MM,createAgentRuntime as qM}from"@cline/agents";var mA={};q(mA,{fetchClineRecommendedModels:()=>yZ,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>O5});import{getClineEnvironmentConfig as rN}from"@cline/shared";var iN=5000,O5={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 nN($){return{recommended:$.recommended.map((f)=>({...f,tags:[...f.tags]})),free:$.free.map((f)=>({...f,tags:[...f.tags]}))}}function gA($){if(!$||typeof $!=="object")return null;let f=$;if(typeof f.id!=="string"||f.id.length===0)return null;return{id:f.id,name:typeof f.name==="string"&&f.name.length>0?f.name:f.id,description:typeof f.description==="string"?f.description:"",tags:Array.isArray(f.tags)?f.tags.filter((J)=>typeof J==="string"):[]}}function aN($){if(!$||typeof $!=="object")return null;let f=$,J=Array.isArray(f.recommended)?f.recommended:[],Q=Array.isArray(f.free)?f.free:[],Z=J.map(gA).filter((j)=>j!==null),W=Q.map(gA).filter((j)=>j!==null);if(Z.length===0&&W.length===0)return null;return{recommended:Z,free:W}}function tN($){let f=$.baseUrl?.trim();if(f)return f;let J=rN().apiBaseUrl;try{return($.providerSettingsManager??new B$).getProviderSettings("cline")?.baseUrl?.trim()||J}catch{return J}}async function sN($,f,J){let Q=new AbortController,Z=setTimeout(()=>Q.abort(),J);try{return await $(f,{signal:Q.signal})}finally{clearTimeout(Z)}}async function yZ($={}){try{let f=tN($),J=$.fetchImpl??fetch,Q=await sN(J,`${f}/api/v1/ai/cline/recommended-models`,$.timeoutMs??iN);if(!Q.ok)throw Error(`HTTP ${Q.status}`);let Z=await Q.json(),W=aN(Z);if(W)return W}catch{}return nN(O5)}var vA={};q(vA,{loadLlmsConfigFromFile:()=>NZ,defineLlmsConfig:()=>TZ});import{readFile as oN}from"node:fs/promises";import eN from"node:path";function TZ($){return $}async function NZ($){let f=eN.resolve($),J=await oN(f,"utf8"),Q;try{Q=JSON.parse(J)}catch(Z){let W=Z instanceof Error?Z.message:String(Z);throw Error(`Failed to parse JSON config at "${f}": ${W}`)}return $M(Q,f)}function $M($,f){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${f}": expected an object.`);let Q=$.providers;if(!Array.isArray(Q))throw Error(`Invalid llms config in "${f}": "providers" must be an array.`);if(!Q.length)throw Error(`Invalid llms config in "${f}": "providers" cannot be empty.`);return $}var rA={};q(rA,{createLlmsSdk:()=>qZ,DefaultLlmsSdk:()=>m4});import{BUILT_IN_PROVIDER_IDS as dA,createHandler as QM,createHandlerAsync as ZM,getProviderCollection as WM,hasProvider as lA,registerAsyncHandler as jM,registerHandler as XM,registerModel as HM,registerProvider as pA}from"@cline/llms";function cA($){return $?{...$}:{}}function fM($,f){if($)return $;if(!f)return;let J=globalThis.process;if(!J?.env)return;return J.env[f]}function JM($,f){if(!f.length)throw Error(`Provider "${$}" must include at least one model.`)}function uA($){let f=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:f,defaultModel:$.collection.provider.defaultModelId,modelCount:f.length}}class MZ{providers=new Map;register($){JM($.id,$.models);let f=$.defaultModel??$.models[0];if(!f)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(f))throw Error(`Default model "${f}" is not included in configured models for "${$.id}".`);let J=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...J?.models??[],...$.models]),defaultModel:f,defaults:{...J?.defaults??{},...cA($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:fM($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...cA($.settings)}})}registerModel($,f){let J=this.providers.get($);if(!J){this.providers.set($,{id:$,models:new Set([f]),defaultModel:f,defaults:{}});return}J.models.add(f)}createHandlerConfig($){let f=this.require($.providerId),J=$.modelId??f.defaultModel;if(!f.models.has(J))throw Error(`Model "${J}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:J,...f.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($,f){return this.providers.get($)?.models.has(f)??!1}require($){let f=this.providers.get($);if(!f)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return f}}class m4{configuredProviders=new MZ;constructor($){this.applyConfig($)}createHandler($){return QM(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return ZM(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(pA($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)XM($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)jM($.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 f=$.exposeModels??Object.keys($.models),J=$.defaultModel??f[0];if(!J)throw Error(`Provider "${$.id}" must define a default model.`);pA({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:J,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:f,defaultModel:J,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){HM($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...dA]}async getBuiltInProviders(){return(await Promise.all(dA.map((f)=>WM(f)))).filter((f)=>f!==void 0).map((f)=>uA({collection:f}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,f){return this.configuredProviders.hasModel($,f)}applyConfig($){for(let f of $.providers)this.configuredProviders.registerSelectionConfig(f);for(let f of $.models??[])this.registerModel(f);for(let f of $.customProviders??[])this.registerProvider(f);for(let f of this.configuredProviders.list()){let J=lA(f.id),Q=this.configuredProviders.createHandlerConfig({providerId:f.id,modelId:f.defaultModel}).routingProviderId,Z=typeof Q==="string"&&lA(Q);if(!J&&!Z)throw Error(`Provider "${f.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function qZ($){return new m4($)}TQ();async function YM(){return Promise.resolve().then(() => (rQ(),fA))}function hM(){return new Date().toISOString()}function bM($){if(tA($)!=="providers.json")return;let f=SZ($);if(tA(f)!=="settings")return;return SZ(f)}class B${filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??EM(),this.dataDir=$.dataDir??bM(this.filePath),this.dataDir||!$.filePath)g4({providerSettingsManager:this,dataDir:this.dataDir});if(_A(this),A5(this.read()),wZ(this.filePath))try{aA(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!wZ(this.filePath))return J1();try{let $=SM(this.filePath,"utf8"),f=JSON.parse($),J=cf.safeParse(f);if(J.success)return A5(J.data),J.data}catch{}return J1()}write($){let f=cf.parse($),J=SZ(this.filePath);if(!wZ(J))wM(J,{recursive:!0,mode:448});CM(this.filePath,`${JSON.stringify(f,null,2)}
718
- `,"utf8");try{aA(this.filePath,384)}catch{}A5(f)}saveProviderSettings($,f={}){let J=M8.parse($),Q=this.read(),Z=J.provider,W=f.setLastUsed!==!1,j=Q.providers[Z],X=f.tokenSource??j?.tokenSource??"manual",H={...Q,providers:{...Q.providers,[Z]:{settings:J,updatedAt:hM(),tokenSource:X}},lastUsedProvider:W?Z:Q.lastUsedProvider};return this.write(H),H}getProviderSettings($){return this.read().providers[$]?.settings}getLastUsedProviderSettings(){let $=this.read(),f=$.lastUsedProvider;if(!f)return;return $.providers[f]?.settings}getProviderConfig($,f){let J=this.getProviderSettings($);if(!J)return;return I0(J,f)}getLastUsedProviderConfig($){let f=this.getLastUsedProviderSettings();if(!f)return;return I0(f,$)}async refreshCatalog(){try{await mf({})}catch{}}}T0();cJ();import{getClineEnvironmentConfig as kM,isOAuthProviderId as IM}from"@cline/shared";var CZ="workos:";function xM($,f){if($==="cline")return`${CZ}${f}`;return f}function gM($,f){if($==="cline"&&f.toLowerCase().startsWith(CZ))return f.slice(CZ.length);return f}function mM($){let J=G0($)?.exp;if(typeof J==="number"&&J>0)return J*1000;return null}function vM($,f){let J=$.auth?.expiresAt;if(typeof J==="number"&&Number.isFinite(J)&&J>0)return J;let Q=mM(f);if(Q)return Q;return Date.now()-1}function cM($,f){let J=f.auth?.accessToken?.trim(),Q=f.auth?.refreshToken?.trim();if(!J||!Q)return null;let Z=gM($,J);if(!Z)return null;return{access:Z,refresh:Q,expires:vM(f,Z),accountId:f.auth?.accountId}}function uM($,f){let J=$?.expiresAt,Q=f?.expiresAt;return $?.accessToken===f?.accessToken&&$?.refreshToken===f?.refreshToken&&$?.accountId===f?.accountId&&J===Q}class z5 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 EZ{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new B$,this.telemetry=$?.telemetry}async resolveProviderApiKey($){if(!IM($.providerId))return null;return this.resolveWithSingleFlight($.providerId,$.forceRefresh)}async resolveWithSingleFlight($,f=!1){let J=this.refreshInFlight.get($);if(J)return J;let Q=this.resolveProviderApiKeyInternal($,f).catch((Z)=>{throw Z}).finally(()=>{this.refreshInFlight.delete($)});return this.refreshInFlight.set($,Q),Q}async resolveProviderApiKeyInternal($,f){let J=this.providerSettingsManager.getProviderSettings($);if(!J)return null;let Q=cM($,J);if(!Q)return null;let Z=await this.resolveCredentials($,J,Q,f);if(!Z)throw new z5($);let W=xM($,Z.access),j={...J.auth??{},accessToken:W,refreshToken:Z.refresh,accountId:Z.accountId};j.expiresAt=Z.expires;let X={...J,auth:j},H=!uM(J.auth,X.auth);if(H)this.providerSettingsManager.saveProviderSettings(X,{setLastUsed:!1,tokenSource:"oauth"});return{providerId:$,apiKey:W,accountId:Z.accountId,refreshed:H}}async resolveCredentials($,f,J,Q){if($==="cline")return k8(J,{apiBaseUrl:f.baseUrl?.trim()||kM().apiBaseUrl,telemetry:this.telemetry},{forceRefresh:Q});if($==="oca")return L8(J,{forceRefresh:Q,telemetry:this.telemetry},{mode:f.oca?.mode,telemetry:this.telemetry});return x8(J,{forceRefresh:Q,telemetry:this.telemetry})}}import{normalizeUserInput as dM}from"@cline/shared";import{nanoid as lM}from"nanoid";class sA{list($){return $?p0($):[]}update($,f){if(!$)return{sessionId:f.sessionId,prompts:[],updated:!1};let J=f.promptId.trim(),Q=$.pendingPrompts.findIndex((H)=>H.id===J);if(Q<0)return{sessionId:f.sessionId,prompts:p0($),updated:!1};let Z=$.pendingPrompts[Q];if(!Z)return{sessionId:f.sessionId,prompts:p0($),updated:!1};let W=f.prompt===void 0?Z.prompt:dM(f.prompt).trim();if(!W)throw Error("prompt cannot be empty");let j=f.delivery??Z.delivery,X={...Z,prompt:W,mode:f.mode??Z.mode,delivery:j};return $.pendingPrompts.splice(Q,1),pM($,X,Q,Z.delivery),{sessionId:f.sessionId,prompts:p0($),prompt:_5(X),updated:!0}}delete($,f){if(!$)return{sessionId:f.sessionId,prompts:[],removed:!1};let J=f.promptId.trim(),Q=$.pendingPrompts.findIndex((W)=>W.id===J);if(Q<0)return{sessionId:f.sessionId,prompts:p0($),removed:!1};let[Z]=$.pendingPrompts.splice(Q,1);return{sessionId:f.sessionId,prompts:p0($),prompt:Z?_5(Z):void 0,removed:!0}}enqueue($,f){let{prompt:J,mode:Q,delivery:Z,userImages:W,userFiles:j}=f,X=$.pendingPrompts.findIndex((H)=>H.prompt===J);if(X>=0){let[H]=$.pendingPrompts.splice(X,1),Y={...H,prompt:J,mode:Q??H.mode,userImages:W??H.userImages,userFiles:j??H.userFiles};if(Z==="steer"||H.delivery==="steer")$.pendingPrompts.unshift({...Y,delivery:"steer"});else $.pendingPrompts.push(Y)}else{let H={id:`pending_${Date.now()}_${lM(5)}`,prompt:J,mode:Q,delivery:Z,userImages:W,userFiles:j};if(Z==="steer")$.pendingPrompts.unshift(H);else $.pendingPrompts.push(H)}return p0($)}consumeSteer($){let f=$.pendingPrompts.findIndex((Q)=>Q.delivery==="steer");if(f<0)return{prompts:p0($)};let[J]=$.pendingPrompts.splice(f,1);return{entry:J,prompts:p0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:p0($)}}requeueFront($,f){return $.pendingPrompts.unshift(f),p0($)}clear($){return $.pendingPrompts.length=0,[]}}class hZ{deps;service=new sA;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let f=this.deps.getSession($.sessionId);if(!f||f.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let J=this.service.update(f,$);return this.emitPrompts(f),this.scheduleDrain($.sessionId,f),J}delete($){let f=this.deps.getSession($.sessionId);if(!f||f.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let J=this.service.delete(f,$);return this.emitPrompts(f),this.scheduleDrain($.sessionId,f),J}enqueue($,f){let J=this.deps.getSession($);if(!J||J.aborting)return;this.service.enqueue(J,f),this.emitPrompts(J),this.scheduleDrain($,J)}consumeSteer($){let f=this.deps.getSession($);if(!f)return;let{entry:J}=this.service.consumeSteer(f);if(!J)return;return this.emitPrompts(f),this.emitSubmitted(f,J),J}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:p0($)}})}scheduleDrain($,f){if(f.pendingPrompts.length===0||f.aborting||f.drainingPendingPrompts||!f.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let f=this.deps.getSession($);if(!f)return;if(f.aborting||f.drainingPendingPrompts)return;if(!f.agent.canStartRun())return;let{entry:J}=this.service.shiftNext(f);if(!J)return;this.emitPrompts(f),this.emitSubmitted(f,J),f.drainingPendingPrompts=!0;let Q=!0;try{await this.deps.send({sessionId:$,prompt:J.prompt,...J.mode?{mode:J.mode}:{},userImages:J.userImages,userFiles:J.userFiles})}catch{Q=!1,this.service.requeueFront(f,J),this.emitPrompts(f)}finally{if(f.drainingPendingPrompts=!1,Q&&f.pendingPrompts.length>0&&f.status!=="failed"&&f.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,f){let J=_5(f);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:J.id,prompt:J.prompt,delivery:J.delivery,attachmentCount:J.attachmentCount}})}}function _5($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0)}}function p0($){return $.pendingPrompts.map(_5)}function pM($,f,J,Q){if(f.delivery==="steer")$.pendingPrompts.unshift(f);else if(Q==="steer")$.pendingPrompts.push(f);else $.pendingPrompts.splice(J,0,f)}T0();class kZ{deps;constructor($){this.deps=$}dispatchAgentEvent($,f,J){let Q=this.deps.getSession($),Z={sessionId:$,config:f,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},W=P9(J),j=!!Q&&(!W.agentId||W.agentId===bZ(Q.agent));F9(Z,J,j?{isPrimaryAgentEvent:!0,agentId:bZ(Q.agent),conversationId:Q.agent.getConversationId(),...Q?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,f){let J=this.deps.getSession($);if(J){if(AQ(J,f),f.type==="agent_event"){let Q={sessionId:$,config:J.config,liveSession:J,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};F9(Q,f.event,{agentId:f.agentId,teamRole:"teammate",teamAgentId:f.agentId,isPrimaryAgentEvent:!1})}if(f.type==="teammate_spawned"){let Q=y$({agentId:f.teammate.runtimeAgentId??f.agentId,conversationId:f.teammate.conversationId,parentAgentId:f.teammate.parentAgentId,createdByAgentId:bZ(J.agent),teamId:J.runtime.teamRuntime?.getTeamId(),teamName:J.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:f.agentId});if(Q)a$(J.config.telemetry,{ulid:$,modelId:f.teammate.modelId??J.config.modelId,provider:J.config.providerId,...Q})}}if(await BQ($,f,this.deps.invokeBackendOptional),J)KQ(J,$,f,this.deps.emit)}async handlePluginEvent($,f,J){if(f.name==="plugin_log"){this.handlePluginLog($,f.payload);return}if(f.name==="automation_event"){let H=this.deps.getSession($)?.config.extensionContext?.automation??J;if(!H)return;let Y=f.payload&&typeof f.payload==="object"?f.payload:void 0;if(!Y)return;await H.ingestEvent(Y);return}if(f.name!=="steer_message"&&f.name!=="queue_message"&&f.name!=="pending_prompt")return;let Q=f.payload&&typeof f.payload==="object"?f.payload:void 0,Z=typeof Q?.sessionId==="string"&&Q.sessionId.trim().length>0?Q.sessionId.trim():$,W=typeof Q?.prompt==="string"?Q.prompt.trim():"";if(!W)return;let j=f.name==="steer_message"?"steer":f.name==="queue_message"?"queue":Q?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(Z,{prompt:W,delivery:j})}handlePluginLog($,f,J){let Q=this.deps.getSession($),Z=J??Q?.config.extensionContext?.logger??Q?.config.logger;if(!Z||!f||typeof f!=="object")return;let W=f,j=typeof W.message==="string"?W.message:"";if(!j)return;let X=W.metadata&&typeof W.metadata==="object"?{...W.metadata}:{};if(X.sessionId??=$,typeof W.pluginName==="string"&&W.pluginName)X.pluginName=W.pluginName;if(W.level==="debug"){Z.debug(j,X);return}if(W.level==="error"){if(Z.error)Z.error(j,X);else Z.log(j,{...X,severity:"error"});return}Z.log(j,X)}}function bZ($){return $.getAgentId()}function IZ($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:t$($.config),teamName:$.config.teamName?.trim()||void 0,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,parentSessionId:typeof $.sessionMetadata?.parentSessionId==="string"?$.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof $.sessionMetadata?.parentAgentId==="string"?$.sessionMetadata.parentAgentId:void 0,agentId:typeof $.sessionMetadata?.agentId==="string"?$.sessionMetadata.agentId:void 0,conversationId:typeof $.sessionMetadata?.conversationId==="string"?$.sessionMetadata.conversationId:void 0,isSubagent:typeof $.sessionMetadata?.isSubagent==="boolean"?$.sessionMetadata.isSubagent:!1,prompt:$.pendingPrompt,metadata:$.sessionMetadata,messagesPath:$.artifacts?.messagesPath,updatedAt:$.updatedAt??$.endedAt??$.startedAt}}function xZ($,f){let J=$[f];return typeof J==="function"?J:null}async function oA($,f,...J){let Q=xZ($,f);if(!Q)throw Error(`session service method not available: ${f}`);return Promise.resolve(Q.apply($,J))}async function eA($,f,...J){let Q=xZ($,f);if(!Q)return;await Promise.resolve(Q.apply($,J))}async function $B($,f,...J){let Q=xZ($,f);if(!Q)return;return await Promise.resolve(Q.apply($,J))}T$();T0();function gZ($,f,J,Q){return r$({configProvider:{getRuntimeConfig:()=>$.getSession(J)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:f.providerId,modelId:f.modelId,cwd:f.cwd,apiKey:f.apiKey,baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking,maxIterations:f.maxIterations,hooks:f.hooks,extensions:f.extensions,logger:f.logger,telemetry:f.telemetry},getConnectionConfig:()=>$.getSession(J)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:f.providerId,modelId:f.modelId,apiKey:f.apiKey,baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let W=f.enableTools?N1({cwd:f.cwd,...b0[R$({mode:f.mode})],executors:Q}):[];if(f.enableSpawnAgent)W.push(gZ($,f,J,Q));return E1(W)},onSubAgentEvent:(W)=>$.onAgentEvent(J,f,W),onSubAgentStart:(W)=>{let j=$.getSession(J)?.runtime.teamRuntime;$.subAgentStarts.set(W.subAgentId,{startedAt:Date.now(),rootSessionId:J});let X=y$({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:j?.getTeamId(),teamName:j?.getTeamName(),createdByAgentId:W.parentAgentId});if(X)a$(f.telemetry,{ulid:J,modelId:f.modelId,provider:f.providerId,...X});Z8(f.telemetry,{event:"started",ulid:J,durationMs:0,parentId:W.parentAgentId,agentId:W.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",J,W)},onSubAgentEnd:(W)=>{let j=$.getSession(J)?.runtime.teamRuntime,X=$.subAgentStarts.get(W.subAgentId),H=X?Date.now()-X.startedAt:0,Y=W.result?.text?W.result.text.split(`
719
- `).length:0;Z8(f.telemetry,{event:"ended",ulid:J,durationMs:H,outputLines:Y,errorMessage:W.error?String(W.error):void 0,agentId:W.subAgentId,parentId:W.parentAgentId,...y$({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:j?.getTeamId(),teamName:j?.getTeamName(),createdByAgentId:W.parentAgentId})}),$.subAgentStarts.delete(W.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",J,W)}})}import{readFile as rM,stat as iM}from"node:fs/promises";var nM=20480000;async function fB($){let f=await iM($);if(!f.isFile())throw Error("Path is not a file");if(f.size>nM)throw Error("File is too large to read into context.");let J=await rM($,"utf8");if(J.includes("\x00"))throw Error("Cannot read binary file into context.");return J}var JB=5000;function v4($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Jq($){if(!$||typeof $!=="object"||Array.isArray($))return;let f=$,J=v4(f.inputTokens),Q=v4(f.outputTokens),Z=v4(f.cacheReadTokens),W=v4(f.cacheWriteTokens),j=v4(f.totalCost);if(J===void 0||Q===void 0||Z===void 0||W===void 0||j===void 0)return;return{inputTokens:J,outputTokens:Q,cacheReadTokens:Z,cacheWriteTokens:W,totalCost:j}}function Qq($,f){return{inputTokens:Math.max($.inputTokens,f.inputTokens),outputTokens:Math.max($.outputTokens,f.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,f.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,f.cacheWriteTokens),totalCost:Math.max($.totalCost,f.totalCost)}}class A${runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new B4;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new G1;constructor($){let f=tM();if(f)fq(f);let J=e1($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new z2,this.createAgentInstance=$.createAgent??((Q)=>new p$(Q)),this.defaultCapabilities=F0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new B$,this.oauthTokenManager=$.oauthTokenManager??new EZ({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(J),this.defaultFetch=$.fetch,this.pendingPromptsController=new hZ({getSession:(Q)=>this.sessions.get(Q),emit:(Q)=>this.emit(Q),send:(Q)=>this.runTurn(Q)}),this.pendingPrompts={list:async(Q)=>this.pendingPromptsController.list(Q.sessionId),update:async(Q)=>this.pendingPromptsController.update(Q),delete:async(Q)=>this.pendingPromptsController.delete(Q)},this.eventBridge=new kZ({getSession:(Q)=>this.sessions.get(Q),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(Q)=>this.emit(Q),persistMessages:(Q,Z,W)=>{this.invoke("persistSessionMessages",Q,Z,W)},enqueuePendingPrompt:(Q,Z)=>this.pendingPromptsController.enqueue(Q,Z),invokeBackendOptional:(Q,...Z)=>this.invokeOptional(Q,...Z)})}async startSession($){let f=$.source??K0.CLI,J=s(),Q=$.config.sessionId?.trim()??"",Z=Q||oM(),W=$,j=W.initialMessages??[],X=j.length>0?Nf(j):V0(),H=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!H)throw Error("session service method not available: ensureSessionsDir");let Y=mZ(H,Z),V=mZ(Y,`${Z}.messages.json`),A=mZ(Y,`${Z}.json`),B=t$($.config),K=y0.parse({version:1,session_id:Z,source:f,pid:process.pid,started_at:J,status:"running",interactive:$.interactive===!0,provider:W.config.providerId,model:W.config.modelId,cwd:W.config.cwd,workspace_root:B,team_name:W.config.teamName,enable_tools:W.config.enableTools,enable_spawn:W.config.enableSpawnAgent,enable_teams:W.config.enableAgentTeams,prompt:W.prompt?.trim()||void 0,messages_path:V}),G;if(Q.length>0&&j.length>0&&!W.prompt?.trim()){let k=await this.invokeOptionalValue("readSessionManifest",Z);if(k)K=k,G={manifestPath:A,messagesPath:k.messages_path||V,manifest:k}}let F=await this.seedAggregateUsageFromArtifacts({initialUsage:X,sessionDir:Y,rootMessagesPath:G?.messagesPath??V,manifest:K});this.usageBySession.set(Z,X),this.aggregateUsageBySession.set(Z,F);let P=F0(this.defaultCapabilities,$.capabilities),D=P?.toolExecutors??this.toolExecutors,O=$.localRuntime,_=O?.extensionContext?.logger??O?.logger,L=O?.extensionContext?.automation,z;z=await jX({input:W,localRuntime:$.localRuntime,sessionId:Z,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:P,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(k)=>{if(k.name==="plugin_log"){this.eventBridge.handlePluginLog(Z,k.payload,_);return}this.eventBridge.handlePluginEvent(Z,k,L)},onTeamEvent:(k)=>{this.eventBridge.handleTeamEvent(Z,k),z.config.onTeamEvent?.(k)},createSpawnTool:()=>gZ({getSession:(k)=>this.sessions.get(k),subAgentStarts:this.subAgentStarts,onAgentEvent:(k,n,G$)=>this.eventBridge.dispatchAgentEvent(k,n,G$),invokeBackendOptional:(k,...n)=>this.invokeOptional(k,...n)},z.config,Z,D),readSessionMetadata:async()=>(await this.getSession(Z))?.metadata,writeSessionMetadata:async(k)=>{await this.persistSessionMetadata(Z,()=>k)}});let y=await this.runtimeBuilder.build(z.runtimeBuilderInput),w=z.config,Q0=z.providerConfig;if(y.teamRuntime&&!w.teamName?.trim())w.teamName=y.teamRuntime.getTeamName();let Z0=[...y.tools,...w.extraTools??[]],o=y.extensions??z.extensions,u={sessionId:Z,providerId:Q0.providerId,modelId:Q0.modelId,apiKey:Q0.apiKey,baseUrl:Q0.baseUrl,headers:Q0.headers,knownModels:Q0.knownModels,providerConfig:Q0,thinking:w.thinking,reasoningEffort:w.reasoningEffort??Q0.reasoningEffort,systemPrompt:w.systemPrompt,maxIterations:w.maxIterations,execution:w.execution,prepareTurn:C2(w),tools:Z0,hooks:z.hooks,extensions:o,hookErrorMode:w.hookErrorMode,initialMessages:z.effectiveInput.initialMessages,userFileContentLoader:fB,toolPolicies:z.toolPolicies,requestToolApproval:z.requestToolApproval,telemetry:w.telemetry,onConsecutiveMistakeLimitReached:w.onConsecutiveMistakeLimitReached,completionPolicy:y.completionPolicy,consumePendingUserMessage:()=>{let k=this.pendingPromptsController.consumeSteer(Z);return k?_4(k.prompt,k.mode??w.mode):void 0},logger:y.logger??w.logger,extensionContext:w.extensionContext,onEvent:(k)=>this.eventBridge.dispatchAgentEvent(Z,w,k)};u.hooks={...u.hooks,onEvent:async(k)=>{if(await z.hooks?.onEvent?.(k),k.type!=="assistant-message")return;let n=this.sessions.get(Z);if(!n)return;let G$=n.agent.getMessages();try{await this.invoke("persistSessionMessages",Z,G$,w.systemPrompt)}catch(e0){w.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:Z,error:e0}),Hf(w.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:e0,severity:"warn",handled:!0,context:{sessionId:Z,providerId:w.providerId,modelId:w.modelId}})}}};let U0=this.createAgentInstance(u);if(u.onEvent)U0.subscribeEvents(u.onEvent);y.registerLeadAgent?.(U0);let k$=y$({agentId:U0.getAgentId(),conversationId:U0.getConversationId(),teamId:y.teamRuntime?.getTeamId(),teamName:y.teamRuntime?.getTeamName(),teamRole:y.teamRuntime?"lead":void 0});if(HX(w,Z,Q.length>0,B,k$),k$)a$(w.telemetry,{ulid:Z,modelId:w.modelId,provider:w.providerId,...k$});if(y.teamRuntime)D6(w.telemetry,{ulid:Z,teamId:y.teamRuntime.getTeamId(),teamName:y.teamRuntime.getTeamName(),leadAgentId:U0.getAgentId(),restoredFromPersistence:y.teamRestoredFromPersistence===!0});let d={sessionId:Z,config:w,sessionMetadata:W.sessionMetadata,...G?{artifacts:G}:{},source:f,startedAt:G?.manifest.started_at??J,updatedAt:G?.manifest.ended_at??G?.manifest.started_at??J,pendingPrompt:K.prompt,runtime:y,agent:U0,started:!1,status:G?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:j,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:z.pluginSandboxShutdown,submitAndExitObserved:!1};if(this.sessions.set(Z,d),this.emitStatus(Z,"running"),j.length>0&&!G){if(await this.ensureSessionPersisted(d),await this.invoke("persistSessionMessages",d.sessionId,j,d.config.systemPrompt),!W.prompt?.trim())await this.updateStatus(d,"completed",0)}let K$;try{if(W.prompt?.trim())if(K$=await this.executeTurn(d,{prompt:W.prompt,userImages:W.userImages,userFiles:W.userFiles}),!d.interactive)await this.finalizeSingleRun(d,K$.finishReason);else await this.completeInteractiveTurn(d,K$.finishReason)}catch(k){if(d.interactive&&d.aborting)K$=await this.completeAbortedInteractiveTurn(d);else throw Hf(d.config.telemetry,{component:"core",operation:"session.start",error:k,severity:"error",handled:!1,context:{sessionId:d.sessionId,providerId:d.config.providerId,modelId:d.config.modelId}}),await this.failSession(d),k}return{sessionId:Z,manifest:K,manifestPath:A,messagesPath:V,result:K$}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(f)=>this.getSession(f),readMessages:(f)=>this.readSessionMessages(f),buildStartInput:(f,J)=>{let Q=f.restoredCheckpointMetadata?{...J.sessionMetadata??{},checkpoint:f.restoredCheckpointMetadata}:J.sessionMetadata;return{...J,...Q?{sessionMetadata:Q}:{},initialMessages:f.initialMessages}},startSession:(f)=>this.startSession(f),getStartedSessionId:(f)=>f.sessionId,readRestoredSession:(f)=>this.getSession(f)})}async runTurn($){let f=this.getSessionOrThrow($.sessionId),J=f.agent.canStartRun(),Q=$.delivery??(f.interactive&&!J?"queue":void 0);if(f.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:Q??"immediate"}}),Q==="queue"||Q==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:Q,userImages:$.userImages,userFiles:$.userFiles});return}try{let Z=await this.executeTurn(f,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!f.interactive)await this.finalizeSingleRun(f,Z.finishReason);else await this.completeInteractiveTurn(f,Z.finishReason);if(Z.finishReason==="error"||Z.finishReason==="aborted")return Z;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),Z}catch(Z){if(f.interactive&&f.aborting)return await this.completeAbortedInteractiveTurn(f);throw Hf(f.config.telemetry,{component:"core",operation:"session.submit",error:Z,severity:"error",handled:!1,context:{sessionId:f.sessionId,providerId:f.config.providerId,modelId:f.config.modelId}}),await this.failSession(f),Z}}async getAccumulatedUsage($){let f=v7(this.usageBySession.get($)),J=v7(this.aggregateUsageBySession.get($));return f||J?{usage:f,aggregateUsage:J}:void 0}async abort($,f){let J=this.sessions.get($);if(!J)return;J.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),J.aborting=!0,this.pendingPromptsController.clearAborted(J),J.agent.abort(f)}async stopSession($){let f=this.sessions.get($);if(!f)return;if(f.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),f.interactive&&f.status!=="running"){await this.releaseSessionRuntime(f,"session_stop");return}f.aborting=!0,f.agent.abort(Error("session_stop")),await this.shutdownSession(f,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let f=[...this.sessions.values()];if(f.length===0)return;await Promise.allSettled(f.map((J)=>J.interactive&&J.status!=="running"?this.releaseSessionRuntime(J,$):this.shutdownSession(J,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let f=this.sessions.get($);if(f)return IZ(f);let J=$.trim();if(!J)return;let Q=await this.getRow(J);if(Q)return $8(Q);let Z=await this.readManifest(J);return Z?SJ(Z):void 0}async listSessions($=200){let J=(await this.listRows($)).map($8),Q=new Set(J.map((Z)=>Z.sessionId));for(let Z of this.sessions.values()){if(Q.has(Z.sessionId))continue;J.unshift(IZ(Z))}return J.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let f=await this.invoke("deleteSession",$);if(f.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return f.deleted}async updateSession($,f){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:f.prompt,metadata:f.metadata,title:f.title}))?.updated===!0}}async readSessionMessages($){let f=$.trim();if(!f)return[];let J=await this.getRow(f);if(J?.messagesPath)return H1(J.messagesPath);let Q=await this.readManifest(f);return H1(Q?.messages_path)}async dispatchHookEvent($){await gH($,{queueSpawnRequest:(f)=>this.invokeOptional("queueSpawnRequest",f),upsertSubagentSessionFromHook:(f)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",f),appendSubagentHookAudit:(f,J)=>this.invokeOptional("appendSubagentHookAudit",f,J),applySubagentStatus:(f,J)=>this.invokeOptional("applySubagentStatus",f,J)})}subscribe($,f){return this.events.subscribe($,f)}async updateSessionModel($,f){let J=this.getSessionOrThrow($);J.config.modelId=f,J.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:f}),J.agent.updateConnection({modelId:f})}handlePluginEvent($,f,J){return this.eventBridge.handlePluginEvent($,f,J)}async executeTurn($,f){let J=await this.prepareTurnInput($,f),Q=J.prompt.trim();if(!Q)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=Q;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let Z=await this.executeAgentTurn($,Q,J.userImages,J.userFiles);while(GQ($,Z.finishReason)){let W=await PQ($);if(W.length===0)break;let j=FQ($,W);Z=await this.executeAgentTurn($,j)}return Z}async completeInteractiveTurn($,f){if(z4($))return;let J=f==="aborted"||$.aborting,Q=f==="error";await this.updateStatus($,J?"cancelled":Q?"failed":"completed",Q?1:0),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:f,ts:Date.now()}}),$.aborting=!1}async completeAbortedInteractiveTurn($){let f=new Date,J=$.agent.getMessages(),Q=V0();return $.persistedMessages=J,$.started=$.started||J.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:Q}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:Q,messages:J,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:f,endedAt:f,durationMs:0}}async executeAgentTurn($,f,J,Q){let Z=$.started||$.agent.getMessages().length>0,W=$.persistedMessages??$.agent.getMessages(),j=this.usageBySession.get($.sessionId)??V0(),X=this.aggregateUsageBySession.get($.sessionId)??j;$.turnUsageBaseline=j,$.turnAggregateUsageBaseline=X,$.turnPrimaryUsage=V0(),$.turnUsageByAgent=new Map,V6($.config.telemetry,$.sessionId,$.config.mode),yf($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let H=Z?()=>$.agent.continue(f,J,Q):()=>$.agent.run(f,J,Q),Y=await this.runWithAuthRetry($,H,W);$.started=!0;let V=Q6(Y.messages,Y,W);$.persistedMessages=V;let A=W8($.turnUsageByAgent?.values()??[]),B=H0(j,Y.usage),K=H0(H0(V0(),Y.usage),A),G=H0(X,K);return this.usageBySession.set($.sessionId,B),this.aggregateUsageBySession.set($.sessionId,G),await this.persistSessionMetadata($.sessionId,(R)=>({...R??{},totalCost:B.totalCost,aggregatedAgentsCost:G.totalCost,usage:B,aggregateUsage:G})),await this.invoke("persistSessionMessages",$.sessionId,V,$.config.systemPrompt),this.observeTaskCompletionTool($,Y),Y}catch(H){throw Hf($.config.telemetry,{component:"core",operation:"session.turn",error:H,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),H}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,f){if($.submitAndExitObserved)return;if(!f.toolCalls.some((Q)=>Q.name===J0.SUBMIT_AND_EXIT&&Q.error===void 0))return;$.submitAndExitObserved=!0,J8($.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($,f){let J=t$($.config),Q=$q(f.prompt).trim();if(!Q)return{prompt:"",userImages:f.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,f.userFiles)};let Z=await Kf(Q,J);YX($.config.telemetry,Z);let W=_4(Z.prompt,f.mode??$.config.mode),j=this.resolveAbsoluteFilePaths($.config.cwd,f.userFiles),X=this.resolveAbsoluteFilePaths(J,Z.matchedFiles),H=Array.from(new Set([...j,...X]));return{prompt:W,userImages:f.userImages,userFiles:H.length>0?H:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let f=t$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:f,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 persistSessionMetadata($,f){let J=this.sessions.get($),Q=await this.invokeOptionalValue("readSessionManifest",$)??J?.artifacts?.manifest,Z=f(Q?.metadata);if(!J?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:Z}))?.updated===!1)return;J.sessionMetadata=Z,J.artifacts.manifest.metadata=Z}async finalizeSingleRun($,f){if(z4($))return;let J=f==="aborted"||$.aborting,Q=f==="error";await this.shutdownSession($,{status:J?"cancelled":Q?"failed":"completed",exitCode:Q?1:0,shutdownReason:Q?"session_error":"session_complete",endReason:f})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,f){if(f.status==="completed"&&!$.submitAndExitObserved)J8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});dJ($);let J=[],Q=(Z,W)=>{J.push(W),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:Z,error:W,severity:"warn"}),Hf($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:Z,status:f.status,shutdownReason:f.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,f.status,f.exitCode)}catch(Z){Q("update_status",Z)}try{await $.agent.shutdown(f.shutdownReason)}catch(Z){Q("agent_shutdown",Z)}}try{await Promise.resolve($.runtime.shutdown(f.shutdownReason))}catch(Z){Q("runtime_shutdown",Z)}try{await $.pluginSandboxShutdown?.()}catch(Z){Q("plugin_sandbox_shutdown",Z)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:f.endReason,ts:Date.now()}}),J.length>0&&f.status==="failed")throw J[0]}async releaseSessionRuntime($,f){let J=[],Q=(Z,W)=>{J.push(W),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:Z,error:W,severity:"warn"}),Hf($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:Z,reason:f,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(f)}catch(Z){Q("agent_shutdown",Z)}try{await Promise.resolve($.runtime.shutdown(f))}catch(Z){Q("runtime_shutdown",Z)}try{await $.pluginSandboxShutdown?.()}catch(Z){Q("plugin_sandbox_shutdown",Z)}if(this.sessions.delete($.sessionId),J.length>0)throw J[0]}async updateStatus($,f,J){if(!$.artifacts)return;let Q=await this.invoke("updateSessionStatus",$.sessionId,f,J);if(!Q.updated)return;let Z=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(Z.status=f,f==="running")delete Z.ended_at,Z.exit_code=null;else Z.ended_at=Q.endedAt??s(),Z.exit_code=typeof J==="number"?J:null;$.artifacts.manifest=Z,$.status=f,$.updatedAt=Q.endedAt??s(),$.endedAt=f==="running"?null:Z.ended_at,$.exitCode=Z.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,Z),this.emitStatus($.sessionId,f)}async runWithAuthRetry($,f,J){try{return await f()}catch(Q){if(!eM(Q,$.config.providerId))throw Q;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(J),f()}}async syncOAuthCredentials($,f){let J=null;try{J=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:f?.forceRefresh})}catch(Q){if(Q instanceof z5)throw Error(`${Q.providerId} requires re-authentication.`);throw Q}if(!J?.apiKey||$.config.apiKey===J.apiKey)return;$.config.apiKey=J.apiKey,$.agent.updateConnection({apiKey:J.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:J.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:J.apiKey})}getSessionOrThrow($){let f=this.sessions.get($);if(!f){let J=Error(`session not found: ${$}`);throw Hf(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:J,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),J}return f}resolveAbsoluteFilePaths($,f){if(!f||f.length===0)return[];let J=f.map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>sM(Q)?Q:vZ($,Q));return Array.from(new Set(J))}getSessionAgentTelemetryIdentity($){return y$({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let f=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),J=H0($.initialUsage,f);return this.withPersistedAggregateUsageFloor(J,$.manifest)}async summarizePersistedTeammateUsage($,f,J){let Q=vZ(f),Z=`${J}.messages.json`,W;try{W=aM($)}catch{return V0()}let j=V0();for(let X of W){if(!X.endsWith(".messages.json"))continue;if(X===Z)continue;let H=vZ($,X);if(H===Q)continue;let Y=await H1(H);if(Y.length===0)continue;j=H0(j,Nf(Y))}return j}withPersistedAggregateUsageFloor($,f){let J=Jq(f.metadata?.aggregateUsage);if(J)return Qq($,J);let Q=f.metadata?.aggregatedAgentsCost;if(typeof Q!=="number"||!Number.isFinite(Q)||Q<=$.totalCost)return $;return{...$,totalCost:Q}}emitStatus($,f){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:f}})}async emitSessionSnapshot($){let f=await this.getSession($);if(!f)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:j$({session:f,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($)),JB))}async getRow($){let f=$.trim();if(!f)return;return(await this.listRows(JB)).find((Q)=>Q.sessionId===f)}async readManifest($){let f=$.trim();if(!f)return;return await this.invokeOptionalValue("readSessionManifest",f)}invoke($,...f){return oA(this.sessionService,$,...f)}invokeOptional($,...f){return eA(this.sessionService,$,...f)}invokeOptionalValue($,...f){return $B(this.sessionService,$,...f)}}function Wq($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((f)=>({name:f.name,input:f.input,output:f.output,error:f.error,durationMs:f.durationMs}))}}function jq($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function Q5($={}){let f=new A$({sessionService:new V$(new H$),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(J){let Q=(J.cwd?.trim()||J.workspaceRoot).trim(),Z=await f.startSession({source:J.source?.trim()||K0.CLI,interactive:!1,config:{providerId:Zq(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:jq(J),maxIterations:J.maxIterations,enableTools:J.enableTools!==!1,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},toolPolicies:J.toolPolicies??{"*":{autoApprove:J.autoApproveTools!==!1}},localRuntime:{configExtensions:J.configExtensions}});return{sessionId:Z.sessionId,startResult:{sessionId:Z.sessionId,manifestPath:Z.manifestPath,messagesPath:Z.messagesPath}}},async sendSession(J,Q){let Z=await f.runTurn({sessionId:J,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((W)=>W.content)});if(!Z)throw Error("local hub schedule runtime returned no turn result");return{result:Wq(Z)}},async abortSession(J){return await f.abort(J,Error("hub schedule abort")),{applied:!0}},async stopSession(J){return await f.stopSession(J),{applied:!0}}}}Xq(process.env.CLINE_VCR);function Hq($){let f=process.cwd(),J,Q,Z;for(let W=0;W<$.length;W+=1){let j=$[W],X=$[W+1];if(j==="--cwd"&&X){f=X,W+=1;continue}if(j==="--host"&&X){J=X,W+=1;continue}if(j==="--port"&&X){let H=Number(X);if(Number.isFinite(H))Q=H;W+=1;continue}if(j==="--pathname"&&X)Z=X,W+=1}return{cwd:f,host:J,port:Q,pathname:Z}}async function Yq(){let $=Hq(process.argv.slice(2));process.chdir($.cwd);let f=c0({host:$.host,port:$.port,pathname:$.pathname}),J=await Wf({host:f.host,port:f.port,pathname:f.pathname,owner:Y0(),runtimeHandlers:Q5(),cronOptions:{workspaceRoot:$.cwd}}),Q=async()=>{await J.close(),process.exit(0)},Z=!1,W=(j,X)=>{if(Z)return;Z=!0;let H=X instanceof Error?X.stack||X.message:String(X);process.stderr.write(`[hub-daemon] ${j}: ${H}
712
+ WHERE team_name = ? AND status IN ('queued', 'running')`,[f,Z,J]),Q.map((W)=>W.run_id)}handleTeamEvent($,f){this.appendTeamEvent($,f.type,f)}}function eQ($={}){try{let f=new jf($);return f.init(),f}catch{let f=new I4({teamDir:$.teamDir});return f.init(),f}}function $Z($,f){return qN($,f)}function SN($,f){let J=f?.["*"]??{},Q=f?.[$]??{};return{...J,...Q}.enabled!==!1}function CN($,f){return $.filter((J)=>SN(J.name,f))}function YA($,f){return E1(CN($,f))}function X5(){return`team-${wN(5)}`}function fZ($,f,J,Q,Z,W,j,X){let H=b0[R$({mode:J})],Y=Ff(f,Q,J,Z??Pf);return YA(T1({cwd:$,...H,enableSkills:!!j,...Y,executors:{...j?{skills:j}:{},...X??{}}}),W)}function EN($){return fZ($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,hN,$.toolExecutors).some((f)=>f.name==="skills")}var hN=async()=>"";async function bN($){let f=O0();if(!q$({filePath:f}))return{tools:[]};let J=new p1({clientFactory:of({settingsPath:f})}),Q;try{Q=await l1(J,{filePath:f})}catch(X){await J.dispose().catch(()=>{});let H=X instanceof Error?X.message:String(X);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${H}`),{tools:[]}}let Z=Q.filter((X)=>X.disabled!==!0),W=await Promise.allSettled(Z.map((X)=>ef({serverName:X.name,provider:J}))),j=[];for(let[X,H]of W.entries())if(H.status==="fulfilled")j.push(...H.value);else{let Y=H.reason instanceof Error?H.reason.message:String(H.reason);$?.log(`[mcp] Failed to load tools from MCP server "${Z[X].name}", skipping: ${Y}`)}return{tools:j,shutdown:async()=>{await J.dispose()}}}function kN($,f){if(!$)return;for(let J of $.getTeammateIds())try{$.shutdownTeammate(J,f)}catch{}}function IN($){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 xN($){let f=b0[R$({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??f.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??f.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 z2{teamRuntimeEntries=new Map;async build($){let{config:f,hooks:J,extensions:Q,logger:Z,telemetry:W,createSpawnTool:j,onTeamRestored:X,userInstructionService:H,configExtensions:Y,toolExecutors:V}=$,A=$.onTeamEvent??(()=>{}),B=xN(f),K=n0(),G=[],R=f.teamName?.trim()||X5(),F=f.sessionId?.trim()||R,P=$Z(Y,"rules"),D=$Z(Y,"skills"),O=$Z(Y,"workflows"),_=P||D||O,L=!1,z=Boolean(H),y=H,w;if(!y&&_)y=Z1({skills:{workspacePath:f.cwd},rules:{workspacePath:f.cwd},workflows:{workspacePath:f.cwd}});if(y)await y.start().catch(()=>{});let Q0=B.enableTools&&D&&Boolean(y)&&(z||y?.hasConfiguredSkills(f.skills)===!0)&&EN({cwd:f.cwd,providerId:f.providerId,mode:B.mode,modelId:f.modelId,toolRoutingRules:f.toolRoutingRules,toolPolicies:f.toolPolicies,toolExecutors:V}),Z0=y&&_?y.createExtension({includeRules:P,includeSkills:D,includeWorkflows:O,registerSkillsTool:Q0,allowedSkillNames:f.skills}):void 0,o=Z0?[...Q??f.extensions??[],Z0]:Q??f.extensions;if(B.enableTools){if(G.push(...fZ(f.cwd,f.providerId,B.mode,f.modelId,f.toolRoutingRules,f.toolPolicies,void 0,V)),!B.disableMcpSettingsTools){let p=await bN(f.logger);G.push(...p.tools),w=p.shutdown}}let u,U0=B.enableAgentTeams?eQ():void 0,k$=U0?.loadRuntime(F),d=k$?.state,K$=k$?.teammates??[],k=new Map(K$.map((p)=>[p.agentId,p])),n=f.sessionId||R,G$,e0=[],P1=!1,Yf=Rf({providerId:f.providerId,modelId:f.modelId,cwd:f.cwd,apiKey:f.apiKey??"",baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking,maxIterations:f.maxIterations,hooks:J,extensions:o,logger:Z??f.logger,telemetry:$.telemetry??f.telemetry,workspaceMetadata:f.workspaceMetadata});if(!this.teamRuntimeEntries.has(n))this.teamRuntimeEntries.set(n,{delegatedAgentConfigProvider:Yf});let y2=()=>{if(!B.enableAgentTeams)return;let p=this.teamRuntimeEntries.get(n)??{delegatedAgentConfigProvider:Yf};if(this.teamRuntimeEntries.set(n,p),u=p.runtime,!u){if(u=new $f({teamName:R,leadAgentId:f.sessionId||"lead",missionLogIntervalSteps:B.missionLogIntervalSteps,missionLogIntervalMs:B.missionLogIntervalMs,onTeamEvent:(f0)=>{if(A(f0),u&&U0){if(f0.type==="teammate_spawned"&&f0.teammate?.rolePrompt){let P$={agentId:f0.agentId,rolePrompt:f0.teammate.rolePrompt,modelId:f0.teammate.modelId,maxIterations:f0.teammate.maxIterations};k.set(P$.agentId,P$)}if(f0.type==="teammate_shutdown"&&!IN(f0.reason))k.delete(f0.agentId);U0.handleTeamEvent(F,f0),U0.persistRuntime(F,u.exportState(),Array.from(k.values()))}}}),d)u.hydrateState(d),P1=!0;p.runtime=u}if(!L){if(!u)return;L=!0;let f0=Of({runtime:u,leadAgentId:f.sessionId||"lead",restoredFromPersistence:Boolean(d),restoredTeammates:K$,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(P$)=>{e0=P$,G$?.addTools(P$)},createBaseTools:B.enableTools?()=>fZ(f.cwd,f.providerId,B.mode,f.modelId,f.toolRoutingRules,f.toolPolicies,void 0,V):void 0,teammateConfigProvider:Yf});if(P1)u.recoverActiveRuns("runtime_recovered");if(f0.restoredFromPersistence)X?.();G.push(...f0.tools)}return u};if(B.enableSpawnAgent&&j){let p=j();G.push({...p,execute:async(f0,P$)=>{return y2(),p.execute(f0,P$)}})}if(B.enableAgentTeams)y2();let c4=YA(G,f.toolPolicies),y5=c4.some((p)=>p.name===J0.SUBMIT_AND_EXIT&&p.lifecycle?.completesRun===!0),Vf=B.enableAgentTeams?()=>{let p=this.teamRuntimeEntries.get(n)?.runtime;if(!p)return;let f0=p.listTasks(),P$=f0.some((I$)=>I$.status==="in_progress"||I$.status==="pending"),cZ=p.listRuns({}),QB=cZ.some((I$)=>I$.status==="running"||I$.status==="queued");if(P$||QB){let I$=f0.filter((S0)=>S0.status==="in_progress"||S0.status==="pending").map((S0)=>`${S0.id} (${S0.status}): ${S0.title}`).join(", "),uZ=cZ.filter((S0)=>S0.status==="running"||S0.status==="queued").map((S0)=>`${S0.id} (${S0.status})`).join(", "),N5=[];if(I$)N5.push(`Unfinished tasks: ${I$}`);if(uZ)N5.push(`Active runs: ${uZ}`);return`[SYSTEM] You still have team obligations. ${N5.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,N2=y5?{requireCompletionTool:!0,...Vf?{completionGuard:Vf}:{}}:Vf?{completionGuard:Vf}:void 0;return{tools:c4,logger:Z??f.logger,telemetry:W??f.telemetry,teamRuntime:u,teamRestoredFromPersistence:Boolean(d),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(n)?.delegatedAgentConfigProvider??Yf,extensions:o,completionPolicy:N2,registerLeadAgent:(p)=>{if(G$=p,e0.length>0)p.addTools(E1(e0,[...K]))},shutdown:async(p)=>{if(kN(u,p),this.teamRuntimeEntries.delete(n),await w?.(),!z)y?.stop()}}}}var BA={};q(BA,{requestDesktopToolApproval:()=>QZ});import{mkdir as gN,readFile as mN,unlink as vN,writeFile as cN}from"node:fs/promises";import{join as AA}from"node:path";function uN($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function dN($){return new Promise((f)=>setTimeout(f,$))}async function JZ($){try{await vN($)}catch{}}async function QZ($,f={}){let J=f.approvalDir?.trim(),Q=f.sessionId?.trim();if(!J||!Q)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await gN(J,{recursive:!0});let Z=uN(`${$.toolCallId}`),W=AA(J,`${Q}.request.${Z}.json`),j=AA(J,`${Q}.decision.${Z}.json`),X=f.nowIso??(()=>new Date().toISOString());await cN(W,`${JSON.stringify({requestId:Z,sessionId:Q,createdAt:X(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
713
+ `,"utf8");let H=f.timeoutMs??300000,Y=f.pollIntervalMs??200,V=Date.now();while(Date.now()-V<H){try{let A=await mN(j,"utf8"),B=JSON.parse(A),K={approved:B.approved===!0,reason:typeof B.reason==="string"?B.reason:void 0};return await Promise.all([JZ(j),JZ(W)]),K}catch{}await dN(Y)}return await JZ(W),{approved:!1,reason:"Tool approval request timed out"}}N$();var wA={};q(wA,{updateLocalProvider:()=>K5,saveLocalProviderSettings:()=>AZ,saveLocalProviderOAuthCredentials:()=>PZ,resolveLocalClineAuthToken:()=>FZ,refreshProviderModelsFromSource:()=>BZ,normalizeOAuthProvider:()=>KZ,loginLocalProvider:()=>GZ,listLocalProviders:()=>YZ,getProviderConfigFields:()=>DZ,getLocalProviderModels:()=>VZ,ensureCustomProvidersLoaded:()=>B5,deleteLocalProvider:()=>G5,addLocalProvider:()=>HZ});import*as B0 from"@cline/llms";import{getClineEnvironmentConfig as AT,isOAuthProviderId as BT}from"@cline/shared";import{existsSync as lN,mkdirSync as pN,readFileSync as rN,writeFileSync as iN}from"node:fs";import{mkdir as nN,readFile as aN,writeFile as tN}from"node:fs/promises";import{dirname as ZZ,join as sN}from"node:path";import*as w0 from"@cline/llms";import{ModelCapabilitySchema as oN,ProviderCapabilitySchema as eN,ProviderClientSchema as $T,ProviderProtocolSchema as fT}from"@cline/shared";import{z as i}from"zod";var JT=i.object({id:i.string().optional(),name:i.string().optional(),capabilities:i.array(oN).optional(),supportsVision:i.boolean().optional(),supportsAttachments:i.boolean().optional(),supportsReasoning:i.boolean().optional()}).passthrough(),QT=i.object({name:i.string(),baseUrl:i.string(),defaultModelId:i.string().optional(),protocol:fT.optional(),client:$T.optional(),capabilities:i.array(eN).optional(),modelsSourceUrl:i.string().optional()}).passthrough(),KA=i.object({provider:QT.optional(),models:i.record(i.string(),JT).optional()}).passthrough(),GA=i.object({version:i.literal(1),providers:i.record(i.string(),KA)}),ZT=i.object({version:i.literal(1),providers:i.record(i.string(),i.unknown())}),H5=new Set;function PA($){return $.split(/[-_]/).filter(Boolean).map((f)=>f.charAt(0).toUpperCase()+f.slice(1)).join(" ")}function Xf($){return sN(ZZ($.getFilePath()),"models.json")}function Y5(){return{version:1,providers:{}}}function FA($){let f=ZT.safeParse($);if(!f.success)return Y5();let J={};for(let[Q,Z]of Object.entries(f.data.providers)){let W=KA.safeParse(Z);if(W.success)J[Q]=W.data}return{version:1,providers:J}}function WZ($){if(!lN($))return Y5();try{let f=rN($,"utf8");return FA(JSON.parse(f))}catch{}return Y5()}async function _2($){try{let f=await aN($,"utf8");return FA(JSON.parse(f))}catch{}return Y5()}function DA($,f){pN(ZZ($),{recursive:!0});let J=GA.parse(f);iN($,`${JSON.stringify(J,null,2)}
714
+ `,"utf8")}async function V5($,f){await nN(ZZ($),{recursive:!0});let J=GA.parse(f);await tN($,`${JSON.stringify(J,null,2)}
715
+ `,"utf8")}function RA($,f){return{id:$,name:f.name??$,supportsAttachments:f.capabilities?.includes("files"),supportsVision:f.capabilities?.includes("images"),supportsReasoning:f.capabilities?.includes("reasoning")||f.thinkingConfig!=null}}function UA($){if(!$||$.length===0)return;let f=new Set;if($.includes("reasoning"))f.add("reasoning");if($.includes("prompt-cache"))f.add("prompt-cache");if($.includes("tools"))f.add("tools");return f.size>0?[...f]:void 0}function LA($){let f=new Set;if(!$||$.length===0)return[...f];if($.includes("streaming"))f.add("streaming");if($.includes("tools"))f.add("tools");if($.includes("reasoning"))f.add("reasoning");if($.includes("prompt-cache"))f.add("prompt-cache");if($.includes("vision"))f.add("images"),f.add("files");return[...f]}function WT($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function OA($,f){return $??f??"openai-chat"}function zA($,f,J){return $??J??(f==="openai-responses"?"openai":"openai-compatible")}function jT($,f){let J=new Set(f?.capabilities??[]);if(f?.supportsVision)J.add("images");if(f?.supportsAttachments)J.add("files");if(f?.supportsReasoning)J.add("reasoning");return{id:$,name:f?.name??$,capabilities:J.size>0?[...J]:void 0}}function XT($,f){for(let[J,Q]of Object.entries(f??{})){let Z=Q.id?.trim()||J.trim();if(!Z)continue;w0.registerModel($,Z,jT(Z,Q))}}function HT($,f,J){return{...f??{},id:$,name:f?.name??$,capabilities:f?.capabilities??J}}function YT($){return Object.assign({},...w0.resolveProviderModelCatalogKeys($).map((J)=>w0.getGeneratedModelsForProvider(J)))}function VT($){let f=$.provider.trim();if(!f||w0.isBuiltInProviderId(f))return;let J=$.baseUrl?.trim();if(!J)return;let Q=w0.MODEL_COLLECTIONS_BY_PROVIDER_ID[f],Z=YT(f),W=LA($.capabilities),j=W.length>0?W:void 0,X=$.model?.trim(),H={...Z,...Q?.models??{}};if(X)H[X]=HT(X,H[X],j);let Y=Object.keys(H).filter(Boolean),V=X||Y[0];if(!V)return;let A=OA($.protocol,Q?.provider.protocol),B=zA($.client,A,Q?.provider.client);w0.registerProvider({provider:{id:f,name:Q?.provider.name??PA(f),description:Q?.provider.description,protocol:A,client:B,baseUrl:J,modelsSourceUrl:Q?.provider.modelsSourceUrl,defaultModelId:V,capabilities:UA($.capabilities)??Q?.provider.capabilities,source:"file"},models:H})}function A5($){for(let f of Object.values($.providers))VT(f.settings)}function x4($,f){let J=f.models??{};if(!WT(f.provider)){XT($,J);return}let Q=LA(f.provider.capabilities),Z=Object.entries(J).map(([Y,V])=>({id:V.id?.trim()||Y.trim(),model:V})).filter(({id:Y})=>Y.length>0),W=f.provider.defaultModelId?.trim()||Z[0]?.id||"default",j=OA(f.provider.protocol,void 0),X=zA(f.provider.client,j,void 0),H=Object.fromEntries(Z.map(({id:Y,model:V})=>[Y,{id:Y,name:V.name??Y,capabilities:Q.length>0?Q:void 0,status:"active"}]));w0.registerProvider({provider:{id:$,name:f.provider.name.trim()||PA($),protocol:j,client:X,baseUrl:f.provider.baseUrl,modelsSourceUrl:f.provider.modelsSourceUrl,defaultModelId:W,capabilities:UA(f.provider.capabilities),source:"file"},models:H})}function _A($){let f=Xf($);if(H5.has(f))return;let J=WZ(f);for(let[Q,Z]of Object.entries(J.providers))x4(Q,Z);H5.add(f)}async function B5($){let f=Xf($);if(H5.has(f))return;let J=await _2(f);for(let[Q,Z]of Object.entries(J.providers))x4(Q,Z);H5.add(f)}function KT($){return $.apiKey??$.auth?.apiKey}function GT($){return($.auth?.accessToken?.trim()??"").length>0}function yA($){return $.split(/[-_]/).filter(Boolean).map((f)=>f.charAt(0).toUpperCase()+f.slice(1)).join(" ")}function PT($){let f=$.split(/\s+/).filter(Boolean);if(f.length===0)return"?";if(f.length===1)return f[0].slice(0,2).toUpperCase();return`${f[0][0]}${f[1][0]}`.toUpperCase()}function FT($){let f=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],J=0;for(let Q of $)J=J*31+Q.charCodeAt(0)>>>0;return f[J%f.length]}function NA($){return Object.entries($).sort(([f],[J])=>f.localeCompare(J)).map(([f,J])=>RA(f,J))}async function DT($,f){let J=await B0.getModelsForProvider($);if(!f)return J;let Q=await y8($,{loadPrivateOnAuth:!0,failOnError:!1},f);return Q?.knownModels?{...J,...Q.knownModels}:J}function jZ($){return[...new Set(($??[]).map((f)=>f.trim()).filter(Boolean))]}function RT($){if(!$?.length)return;return[...new Set($)]}function UT($,f){return RT([...$??[],...f??[]])}function LT($){let f=$?.popularRank;return typeof f==="number"&&Number.isFinite(f)?f:Number.MAX_SAFE_INTEGER}function TA($){let f=Object.entries($??{}).filter(([J])=>J.trim().length>0);return f.length>0?Object.fromEntries(f):void 0}function XZ($,f){let J=f?.includes("vision")??!1,Q=f?.includes("reasoning")??!1;return Object.fromEntries($.map((Z)=>[Z,{id:Z,name:Z,supportsVision:J,supportsAttachments:J,supportsReasoning:Q}]))}async function MA($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let f=$.modelsSourceUrl?await x6($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...f])]}function qA($,f){let J=$.read(),Q=!1;if(J.providers[f])delete J.providers[f],Q=!0;if(J.lastUsedProvider===f)delete J.lastUsedProvider,Q=!0;if(Q)$.write(J);B0.unregisterProvider(f)}async function HZ($,f){let J=f.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let Q=f.baseUrl.trim(),Z=f.apiKey?.trim()??"";if(!Q&&!Z){let G=Xf($);if((await _2(G)).providers[J]){let F=await G5($,{providerId:J});return{providerId:J,settingsPath:F.settingsPath,modelsPath:F.modelsPath,modelsCount:0}}return qA($,J),{providerId:J,settingsPath:$.getFilePath(),modelsPath:G,modelsCount:0}}if(B0.hasProvider(J))throw Error(`provider "${J}" already exists`);let W=f.name.trim();if(!W)throw Error("name is required");if(!Q)throw Error("baseUrl is required");let j=jZ(f.models),X=f.modelsSourceUrl?.trim(),H=await MA({providerId:J,explicitModels:j,modelsSourceUrl:X,shouldRecompute:!0});if(H.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let Y=f.defaultModelId?.trim()&&H.includes(f.defaultModelId.trim())?f.defaultModelId.trim():H[0],V=f.capabilities?.length?[...new Set(f.capabilities)]:void 0,A=TA(f.headers);$.saveProviderSettings({provider:J,apiKey:Z||void 0,baseUrl:Q,headers:A,timeout:f.timeoutMs,model:Y,protocol:f.protocol,client:f.client},{setLastUsed:!1});let B=Xf($),K=await _2(B);return K.providers[J]={provider:{name:W,baseUrl:Q,defaultModelId:Y,protocol:f.protocol,client:f.client,capabilities:V,modelsSourceUrl:X},models:XZ(H,V)},await V5(B,K),x4(J,K.providers[J]),{providerId:J,settingsPath:$.getFilePath(),modelsPath:B,modelsCount:H.length}}async function K5($,f){let J=f.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let Q=Xf($),Z=await _2(Q),W=Z.providers[J];if(!W){let _=$.getProviderSettings(J);if(!_)throw Error(`provider "${J}" does not exist`);let L=f.modelsSourceUrl?.trim(),z=jZ(f.models)[0]??_.model?.trim();if(!z&&!L)throw Error(`provider "${J}" cannot be updated because no model is configured`);W={provider:{name:f.name?.trim()||yA(J),baseUrl:f.baseUrl?.trim()??_.baseUrl?.trim()??"",defaultModelId:z,protocol:_.protocol,client:_.client,capabilities:_.capabilities},models:z?XZ([z],_.capabilities):{}}}if(!W.provider)throw Error(`provider "${J}" cannot be updated because it is a model overlay (no provider metadata)`);let j=f.name?.trim()??W.provider.name.trim();if(!j)throw Error("name is required");let X=f.baseUrl?.trim()??W.provider.baseUrl.trim();if(!X)throw Error("baseUrl is required");let H=f.capabilities===void 0?W.provider.capabilities:f.capabilities===null?void 0:[...new Set(f.capabilities)],Y=f.protocol===void 0?W.provider.protocol:f.protocol??void 0,V=f.client===void 0?W.provider.client:f.client??void 0,A=jZ(f.models),B=f.modelsSourceUrl===void 0?W.provider.modelsSourceUrl:f.modelsSourceUrl?.trim()||void 0,K=f.models!==void 0||f.modelsSourceUrl!==void 0&&!!B,G=Object.keys(W.models??{}).map((_)=>_.trim()).filter(Boolean),R=await MA({providerId:J,explicitModels:A,modelsSourceUrl:B,fallbackModelIds:G,shouldRecompute:K});if(R.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let F=f.defaultModelId===void 0?W.provider.defaultModelId?.trim():f.defaultModelId?.trim(),P=F&&R.includes(F)?F:R[0],O={...$.getProviderSettings(J)??{},provider:J,baseUrl:X,model:P};if(Y)O.protocol=Y;else delete O.protocol;if(V)O.client=V;else delete O.client;if(f.apiKey!==void 0){let _=f.apiKey?.trim()??"";if(_)O.apiKey=_;else delete O.apiKey}if(f.headers!==void 0){let _=TA(f.headers);if(_)O.headers=_;else delete O.headers}if(f.timeoutMs!==void 0)if(typeof f.timeoutMs==="number")O.timeout=f.timeoutMs;else delete O.timeout;return $.saveProviderSettings(O,{setLastUsed:!1}),Z.providers[J]={provider:{name:j,baseUrl:X,defaultModelId:P,protocol:Y,client:V,capabilities:H,modelsSourceUrl:B},models:XZ(R,H)},await V5(Q,Z),x4(J,Z.providers[J]),{providerId:J,settingsPath:$.getFilePath(),modelsPath:Q,modelsCount:R.length}}async function G5($,f){let J=f.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let Q=Xf($),Z=await _2(Q);if(!Z.providers[J])throw Error(`provider "${J}" does not exist`);return delete Z.providers[J],await V5(Q,Z),B0.unregisterProvider(J),qA($,J),{providerId:J,settingsPath:$.getFilePath(),modelsPath:Q}}async function YZ($){let f=$.read(),J=B0.getProviderIds(),Q=await Promise.all(J.map(async(W)=>{let[j,X]=await Promise.all([B0.getProvider(W),B0.getModelsForProvider(W)]),H=NA(X),Y=f.providers[W]?.settings,V=j?.name??yA(W),A=UT(j?.capabilities,Y?.capabilities);return{provider:{id:W,name:V,models:H.length,color:FT(W),letter:PT(V),enabled:Boolean(Y),apiKey:Y?KT(Y):void 0,oauthAccessTokenPresent:Y?GT(Y):void 0,baseUrl:Y?.baseUrl??j?.baseUrl,defaultModelId:j?.defaultModelId,protocol:Y?.protocol??j?.protocol,client:Y?.client??j?.client,capabilities:A,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",modelList:H},rank:LT(j?.metadata)}}));return Q.sort((W,j)=>{if(W.rank!==j.rank)return W.rank-j.rank;return W.provider.name.localeCompare(j.provider.name)||W.provider.id.localeCompare(j.provider.id)}),{providers:Q.map((W)=>W.provider),settingsPath:$.getFilePath()}}async function VZ($,f){let J=$.trim(),Q=await DT(J,f),Z=NA(Q);return{providerId:J,models:Z}}function AZ($,f){let J=f.providerId.trim();if(f.enabled===!1){let W=$.read();if(delete W.providers[J],W.lastUsedProvider===J)delete W.lastUsedProvider;return $.write(W),{providerId:J,enabled:!1,settingsPath:$.getFilePath()}}let Z={...$.getProviderSettings(J)??{},provider:J};for(let W of["apiKey","baseUrl","model","region"])if(Object.hasOwn(f,W)&&typeof f[W]==="string")if(f[W].trim().length===0)delete Z[W];else Z[W]=f[W];for(let W of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(f,W))Z[W]=f[W];for(let W of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(f,W)&&f[W]!=null)Z[W]={...typeof Z[W]==="object"&&Z[W]!=null?Z[W]:{},...f[W]};return $.saveProviderSettings(Z,{setLastUsed:!1}),{providerId:J,enabled:!0,settingsPath:$.getFilePath()}}async function BZ($,f){let J=f.trim(),Q=$.getProviderSettings(J),W=B0.MODEL_COLLECTIONS_BY_PROVIDER_ID[J]?.provider,j=Q?.baseUrl?.trim()||W?.baseUrl?.trim(),X=g6(j,W?.baseUrl,W?.modelsSourceUrl);if(!Q||!W||!j||!X)return{providerId:J,refreshed:!1};let H=await K5($,{providerId:J,name:W.name,baseUrl:j,apiKey:Q.apiKey,headers:Q.headers??null,timeoutMs:Q.timeout??null,modelsSourceUrl:X,protocol:Q.protocol??W.protocol??null,client:Q.client??W.client??null,capabilities:Q.capabilities??null});return{providerId:J,refreshed:!0,modelsCount:H.modelsCount}}function KZ($){let f=$.trim().toLowerCase();if(f==="codex"||f==="openai-codex")return"openai-codex";if(f==="cline"||f==="oca")return f;throw Error(`provider "${$}" does not support OAuth login (supported: cline, oca, openai-codex)`)}function OT($,f){if($==="cline")return f.access.startsWith("workos:")?f.access:`workos:${f.access}`;return f.access}async function GZ($,f,J){let Q=h8({onPrompt:async(Z)=>Z.defaultValue??"",openUrl:J,onOpenUrlError:({error:Z})=>{throw Z instanceof Error?Z:Error(String(Z))}});if($==="cline")return pf({apiBaseUrl:f?.baseUrl?.trim()||AT().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q});if($==="oca")return gf({mode:f?.oca?.mode,callbacks:Q});return rf(Q)}function PZ($,f,J,Q){let Z={...J?.auth??{},accessToken:OT(f,Q),refreshToken:Q.refresh,accountId:Q.accountId,expiresAt:Q.expires},W={...J??{provider:f},provider:f,auth:Z};return $.saveProviderSettings(W,{tokenSource:"oauth"}),W}function FZ($){let f=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return f&&f.length>0?f:void 0}var zT=new Set(["ollama","lmstudio","litellm"]);function _T($,f){if(!f?.provider.baseUrl)return!1;if(f.provider.source!=="system")return!0;return zT.has($)}function DZ($){let f=B0.normalizeProviderId($);if(BT(f))return{providerId:f,authMethod:"oauth",fields:{}};let J=B0.MODEL_COLLECTIONS_BY_PROVIDER_ID[f];if(J?.provider.capabilities?.includes("local-auth"))return{providerId:f,authMethod:"local",fields:{}};let Q=J?.provider.baseUrl,Z={apiKey:{}};if(_T(f,J))Z.baseUrl={defaultValue:Q};return{providerId:f,authMethod:"api-key",fields:Z}}var bA={};q(bA,{resolveLegacyClineAuth:()=>hA,migrateLegacyProviderSettings:()=>g4});import{existsSync as yT,readFileSync as NT}from"node:fs";import{dirname as TT,join as RZ}from"node:path";import*as CA from"@cline/llms";import{resolveClineDataDir as MT}from"@cline/shared/storage";var EA="openai";function hA($){let f=$?.trim();if(!f)return;try{let J=JSON.parse(f);if(!J)return;return{accessToken:J.idToken,refreshToken:J.refreshToken,expiresAt:J.expiresAt,accountId:J.userInfo?.id}}catch{return}}function b($){let f=$?.trim();return f?f:void 0}function SA($){if(!yT($))return;try{let f=NT($,"utf8"),J=JSON.parse(f);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return}function qT($){let f=$.dataDir??MT(),J=$.globalStatePath??RZ(f,"globalState.json"),Q=$.secretsPath??RZ(f,"secrets.json"),Z=SA(J),W=SA(Q);if(!Z&&!W)return;return{globalState:Z??{},secrets:W??{}}}function wT($){try{let J=new URL($).hostname.toLowerCase();return J==="api.openai.com"||J.endsWith(".openai.azure.com")||J.endsWith(".services.ai.azure.com")}catch{return!1}}function ST($){let f=b($.openAiBaseUrl);if(!f)return!1;if($.azureApiVersion||$.azureIdentity)return!1;return!wT(f)}function UZ($,f){if($==="openai"&&ST(f))return EA;return $}function CT($,f,J,Q){let Z=J==="plan"?"planMode":"actMode",W=f===Q?b(J==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,X={openrouter:`${Z}OpenRouterModelId`,cline:`${Z}ClineModelId`,openai:`${Z}OpenAiModelId`,ollama:`${Z}OllamaModelId`,lmstudio:`${Z}LmStudioModelId`,litellm:`${Z}LiteLlmModelId`,requesty:`${Z}RequestyModelId`,together:`${Z}TogetherModelId`,fireworks:`${Z}FireworksModelId`,sapaicore:`${Z}SapAiCoreModelId`,groq:`${Z}GroqModelId`,baseten:`${Z}BasetenModelId`,huggingface:`${Z}HuggingFaceModelId`,"huawei-cloud-maas":`${Z}HuaweiCloudMaasModelId`,oca:`${Z}OcaModelId`,aihubmix:`${Z}AihubmixModelId`,hicap:`${Z}HicapModelId`,nousResearch:`${Z}NousResearchModelId`,"vercel-ai-gateway":`${Z}VercelAiGatewayModelId`}[f];return(X?b(typeof $[X]==="string"?$[X]:void 0):void 0)??W}function ET($,f,J){let Q=J==="plan"?$.planModeReasoningEffort:$.actModeReasoningEffort,Z=J==="plan"?$.geminiPlanModeThinkingLevel:$.geminiActModeThinkingLevel,W=J==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,j=(f==="gemini"?Z:void 0)??Q,X=j==="none"||j==="low"||j==="medium"||j==="high"?j:void 0,H=typeof W==="number"&&Number.isInteger(W)&&W>0?W:void 0;if(!X&&H===void 0)return;return{...X?{effort:X}:{},...H!==void 0?{budgetTokens:H}:{}}}function hT($){let f=$["openai-codex-oauth-credentials"];if(!f)return;try{let J=JSON.parse(f),Q=b(J.access_token),Z=b(J.refresh_token),W=b(J.accountId);if(!Q&&!Z&&!W)return;return{...Q?{apiKey:Q}:{},auth:{...Q?{accessToken:Q}:{},...Z?{refreshToken:Z}:{},...W?{accountId:W}:{}}}}catch{return}}function bT($){let f=CA.getGeneratedModelsForProvider($);return Object.keys(f)[0]??void 0}function kT($,f,J,Q){let Z=UZ($,f),W=b(Q==="plan"?f.planModeApiProvider:f.actModeApiProvider),j=CT(f,$,Q,W)??bT(Z),X=ET(f,Z,Q),H=typeof f.requestTimeoutMs==="number"&&Number.isInteger(f.requestTimeoutMs)&&f.requestTimeoutMs>0?f.requestTimeoutMs:void 0,Y={anthropic:J.apiKey,cline:J.clineApiKey,openai:J.openAiApiKey,"openai-native":J.openAiNativeApiKey,openrouter:J.openRouterApiKey,bedrock:J.awsBedrockApiKey,gemini:J.geminiApiKey,ollama:J.ollamaApiKey,deepseek:J.deepSeekApiKey,requesty:J.requestyApiKey,together:J.togetherApiKey,fireworks:J.fireworksApiKey,qwen:J.qwenApiKey,doubao:J.doubaoApiKey,mistral:J.mistralApiKey,litellm:J.liteLlmApiKey,asksage:J.asksageApiKey,xai:J.xaiApiKey,moonshot:J.moonshotApiKey,zai:J.zaiApiKey,huggingface:J.huggingFaceApiKey,nebius:J.nebiusApiKey,sambanova:J.sambanovaApiKey,cerebras:J.cerebrasApiKey,groq:J.groqApiKey,"huawei-cloud-maas":J.huaweiCloudMaasApiKey,baseten:J.basetenApiKey,"vercel-ai-gateway":J.vercelAiGatewayApiKey,dify:J.difyApiKey,minimax:J.minimaxApiKey,hicap:J.hicapApiKey,aihubmix:J.aihubmixApiKey,nousResearch:J.nousResearchApiKey,oca:J.ocaApiKey,sapaicore:J.sapAiCoreClientId},V={};if($==="openai-codex")Object.assign(V,hT(J));if($==="cline")try{let P=b(J["cline:clineAccountId"]);if(P)V.auth={...V.auth??{},...hA(P)}}catch{}if($==="openai"&&f.openAiHeaders)V.headers=f.openAiHeaders;if($==="bedrock")V.aws={accessKey:b(J.awsAccessKey),secretKey:b(J.awsSecretKey),sessionToken:b(J.awsSessionToken),region:b(f.awsRegion),authentication:f.awsAuthentication,profile:f.awsUseProfile?b(f.awsProfile):void 0,usePromptCache:f.awsBedrockUsePromptCache,useCrossRegionInference:f.awsUseCrossRegionInference,useGlobalInference:f.awsUseGlobalInference,endpoint:b(f.awsBedrockEndpoint),customModelBaseId:b(Q==="plan"?f.planModeAwsBedrockCustomModelBaseId:f.actModeAwsBedrockCustomModelBaseId)};if($==="vertex")V.gcp={projectId:b(f.vertexProjectId),region:b(f.vertexRegion)};if($==="openai"&&(f.azureApiVersion||f.azureIdentity!==void 0))V.azure={apiVersion:b(f.azureApiVersion),useIdentity:f.azureIdentity};if($==="sapaicore")V.sap={clientId:b(J.sapAiCoreClientId),clientSecret:b(J.sapAiCoreClientSecret),tokenUrl:b(f.sapAiCoreTokenUrl),resourceGroup:b(f.sapAiResourceGroup),deploymentId:b(Q==="plan"?f.planModeSapAiCoreDeploymentId:f.actModeSapAiCoreDeploymentId),useOrchestrationMode:f.sapAiCoreUseOrchestrationMode};if($==="oca"){V.oca={mode:f.ocaMode};let P=b(J.ocaRefreshToken);if(P)V.auth={...V.auth??{},refreshToken:P}}if($==="qwen")V.apiLine=f.qwenApiLine;if($==="moonshot")V.apiLine=f.moonshotApiLine;if($==="zai")V.apiLine=f.zaiApiLine;if($==="minimax")V.apiLine=f.minimaxApiLine;let A={anthropic:f.anthropicBaseUrl,openai:f.openAiBaseUrl,ollama:f.ollamaBaseUrl,lmstudio:f.lmStudioBaseUrl,litellm:f.liteLlmBaseUrl,gemini:f.geminiBaseUrl,requesty:f.requestyBaseUrl,asksage:f.asksageApiUrl,dify:f.difyBaseUrl,oca:f.ocaBaseUrl,aihubmix:f.aihubmixBaseUrl,sapaicore:f.sapAiCoreBaseUrl},B=b(Y[$]),K=b(A[$]),G={provider:Z,...B?{apiKey:B}:{},...j?{model:j}:{},...K?{baseUrl:K}:{},...X?{reasoning:X}:{},...H?{timeout:H}:{},...V},R=M8.safeParse(G);if(!R.success)return;return Object.keys(G).filter((P)=>P!=="provider").length>0?R.data:void 0}function IT($,f){if($!==EA)return;if(!f.baseUrl||!f.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:f.baseUrl,defaultModelId:f.model},models:{[f.model]:{id:f.model,name:f.model}}}}function xT($,f){let J=new Set;for(let Q of[$.actModeApiProvider,$.planModeApiProvider]){let Z=b(Q);if(Z)J.add(Z)}if(b(f.apiKey))J.add("anthropic");if(b(f.openRouterApiKey))J.add("openrouter");if(b(f.openAiApiKey))J.add("openai");if(b(f.openAiNativeApiKey))J.add("openai-native");if(b(f["openai-codex-oauth-credentials"]))J.add("openai-codex");if(b(f.geminiApiKey))J.add("gemini");if(b(f.ollamaApiKey))J.add("ollama");if(b(f.awsAccessKey)||b(f.awsBedrockApiKey))J.add("bedrock");if(b($.vertexProjectId)||b($.vertexRegion))J.add("vertex");if(b(f.clineApiKey))J.add("cline");if(b(f.ocaApiKey))J.add("oca");return J}function g4($){let f=$.providerSettingsManager.read(),J=qT($);if(!J)return{migrated:!1,providerCount:Object.keys(f.providers).length,lastUsedProvider:f.lastUsedProvider};let{globalState:Q,secrets:Z}=J,W=Q.mode==="plan"?"plan":"act",j=xT(Q,Z),X=J1();X.providers={...f.providers},X.lastUsedProvider=f.lastUsedProvider;let H=new Date().toISOString(),Y=0,V=RZ(TT($.providerSettingsManager.getFilePath()),"models.json"),A=WZ(V),B=0;for(let R of j){let F=UZ(R,Q);if(X.providers[F])continue;let P=kT(R,Q,Z,W);if(!P)continue;X.providers[F]={settings:P,updatedAt:H,tokenSource:"migration"},Y+=1;let D=IT(F,P);if(D&&!A.providers[F])A.providers[F]=D,B+=1}if(Y===0&&B===0)return{migrated:!1,providerCount:Object.keys(f.providers).length,lastUsedProvider:f.lastUsedProvider};let K=b(W==="plan"?Q.planModeApiProvider:Q.actModeApiProvider),G=K?UZ(K,Q):void 0;if(X.lastUsedProvider=f.lastUsedProvider??(G&&X.providers[G]?G:Object.keys(X.providers)[0]),$.providerSettingsManager.write(X),B>0)DA(V,A);return{migrated:Y>0||B>0,providerCount:Object.keys(X.providers).length,lastUsedProvider:X.lastUsedProvider}}N0();aJ();var kA={};q(kA,{FileTeamPersistenceStore:()=>P5});import{appendFileSync as gT,existsSync as LZ,mkdirSync as mT,readFileSync as vT,renameSync as cT,unlinkSync as uT,writeFileSync as dT}from"node:fs";import{join as OZ}from"node:path";import{resolveTeamDataDir as lT}from"@cline/shared/storage";function pT($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class P5{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let f=pT($.teamName),J=$.baseDir?.trim()||lT();this.dirPath=OZ(J,f),this.statePath=OZ(this.dirPath,"state.json"),this.taskHistoryPath=OZ(this.dirPath,"task-history.jsonl")}loadState(){if(!LZ(this.statePath))return;try{let $=vT(this.statePath,"utf8"),f=JSON.parse($);if(f.version!==1||!f.teamState)return;for(let J of f.teammates??[])this.teammateSpecs.set(J.agentId,J);return cY(f.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 f={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},J=`${this.statePath}.tmp`;dT(J,`${JSON.stringify(f,null,2)}
716
+ `,"utf8"),cT(J,this.statePath)}appendTaskHistory($){let f={};switch($.type){case"team_task_updated":f=$.task;break;case"team_message":f={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":f={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":f={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":f={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":f={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),gT(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:f})}
717
+ `,"utf8")}ensureDir(){if(!LZ(this.dirPath))mT(this.dirPath,{recursive:!0})}hasPersistableState($){let f=$.exportState();if(this.teammateSpecs.size>0)return!0;if(f.members.some((J)=>J.role==="teammate"))return!0;return f.tasks.length>0||f.mailbox.length>0||f.missionLog.length>0}clearPersistedState(){if(LZ(this.statePath))uT(this.statePath)}}var IA={};q(IA,{ChatViewStateSchema:()=>zZ,ChatSummarySchema:()=>L5,ChatSessionStatusSchema:()=>D5,ChatSessionConfigSchema:()=>F5,ChatMessageSchema:()=>U5,ChatMessageRoleSchema:()=>R5});import{z as C}from"zod";var F5=C.object({workspaceRoot:C.string().min(1),cwd:C.string().optional(),provider:C.string().min(1),model:C.string().min(1),mode:C.enum(["act","plan"]).default("act"),apiKey:C.string(),systemPrompt:C.string().optional(),rules:C.string().optional(),maxIterations:C.number().int().positive().optional(),enableTools:C.boolean(),enableSpawn:C.boolean().optional(),enableTeams:C.boolean().optional(),autoApproveTools:C.boolean().optional(),missionStepInterval:C.number().int().positive().optional(),missionTimeIntervalMs:C.number().int().positive().optional()}),D5=C.enum(["idle","starting","running","stopping","completed","cancelled","failed","error"]),R5=C.enum(["user","assistant","tool","system","status","error"]),U5=C.object({id:C.string().min(1),sessionId:C.string().nullable(),role:R5,content:C.string(),createdAt:C.number().int().nonnegative(),meta:C.object({stream:C.enum(["stdout","stderr"]).optional(),toolName:C.string().optional(),iteration:C.number().int().nonnegative().optional(),agentId:C.string().optional(),conversationId:C.string().optional(),hookEventName:C.string().optional(),inputTokens:C.number().int().nonnegative().optional(),outputTokens:C.number().int().nonnegative().optional(),checkpoint:C.object({ref:C.string(),createdAt:C.number().int().nonnegative(),runCount:C.number().int().positive(),kind:C.enum(["stash","commit"]).optional()}).optional()}).optional()}),L5=C.object({toolCalls:C.number().int().nonnegative(),tokensIn:C.number().int().nonnegative(),tokensOut:C.number().int().nonnegative()}),zZ=C.object({sessionId:C.string().nullable(),status:D5,config:F5,messages:C.array(U5),rawTranscript:C.string(),error:C.string().nullable(),summary:L5});var xA={};q(xA,{CORE_BUILD_VERSION:()=>_Z});var _Z=rH;import{Agent as MM,createAgentRuntime as qM}from"@cline/agents";var mA={};q(mA,{fetchClineRecommendedModels:()=>yZ,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>O5});import{getClineEnvironmentConfig as rT}from"@cline/shared";var iT=5000,O5={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 nT($){return{recommended:$.recommended.map((f)=>({...f,tags:[...f.tags]})),free:$.free.map((f)=>({...f,tags:[...f.tags]}))}}function gA($){if(!$||typeof $!=="object")return null;let f=$;if(typeof f.id!=="string"||f.id.length===0)return null;return{id:f.id,name:typeof f.name==="string"&&f.name.length>0?f.name:f.id,description:typeof f.description==="string"?f.description:"",tags:Array.isArray(f.tags)?f.tags.filter((J)=>typeof J==="string"):[]}}function aT($){if(!$||typeof $!=="object")return null;let f=$,J=Array.isArray(f.recommended)?f.recommended:[],Q=Array.isArray(f.free)?f.free:[],Z=J.map(gA).filter((j)=>j!==null),W=Q.map(gA).filter((j)=>j!==null);if(Z.length===0&&W.length===0)return null;return{recommended:Z,free:W}}function tT($){let f=$.baseUrl?.trim();if(f)return f;let J=rT().apiBaseUrl;try{return($.providerSettingsManager??new B$).getProviderSettings("cline")?.baseUrl?.trim()||J}catch{return J}}async function sT($,f,J){let Q=new AbortController,Z=setTimeout(()=>Q.abort(),J);try{return await $(f,{signal:Q.signal})}finally{clearTimeout(Z)}}async function yZ($={}){try{let f=tT($),J=$.fetchImpl??fetch,Q=await sT(J,`${f}/api/v1/ai/cline/recommended-models`,$.timeoutMs??iT);if(!Q.ok)throw Error(`HTTP ${Q.status}`);let Z=await Q.json(),W=aT(Z);if(W)return W}catch{}return nT(O5)}var vA={};q(vA,{loadLlmsConfigFromFile:()=>TZ,defineLlmsConfig:()=>NZ});import{readFile as oT}from"node:fs/promises";import eT from"node:path";function NZ($){return $}async function TZ($){let f=eT.resolve($),J=await oT(f,"utf8"),Q;try{Q=JSON.parse(J)}catch(Z){let W=Z instanceof Error?Z.message:String(Z);throw Error(`Failed to parse JSON config at "${f}": ${W}`)}return $M(Q,f)}function $M($,f){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${f}": expected an object.`);let Q=$.providers;if(!Array.isArray(Q))throw Error(`Invalid llms config in "${f}": "providers" must be an array.`);if(!Q.length)throw Error(`Invalid llms config in "${f}": "providers" cannot be empty.`);return $}var rA={};q(rA,{createLlmsSdk:()=>qZ,DefaultLlmsSdk:()=>m4});import{BUILT_IN_PROVIDER_IDS as dA,createHandler as QM,createHandlerAsync as ZM,getProviderCollection as WM,hasProvider as lA,registerAsyncHandler as jM,registerHandler as XM,registerModel as HM,registerProvider as pA}from"@cline/llms";function cA($){return $?{...$}:{}}function fM($,f){if($)return $;if(!f)return;let J=globalThis.process;if(!J?.env)return;return J.env[f]}function JM($,f){if(!f.length)throw Error(`Provider "${$}" must include at least one model.`)}function uA($){let f=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:f,defaultModel:$.collection.provider.defaultModelId,modelCount:f.length}}class MZ{providers=new Map;register($){JM($.id,$.models);let f=$.defaultModel??$.models[0];if(!f)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(f))throw Error(`Default model "${f}" is not included in configured models for "${$.id}".`);let J=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...J?.models??[],...$.models]),defaultModel:f,defaults:{...J?.defaults??{},...cA($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:fM($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...cA($.settings)}})}registerModel($,f){let J=this.providers.get($);if(!J){this.providers.set($,{id:$,models:new Set([f]),defaultModel:f,defaults:{}});return}J.models.add(f)}createHandlerConfig($){let f=this.require($.providerId),J=$.modelId??f.defaultModel;if(!f.models.has(J))throw Error(`Model "${J}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:J,...f.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($,f){return this.providers.get($)?.models.has(f)??!1}require($){let f=this.providers.get($);if(!f)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return f}}class m4{configuredProviders=new MZ;constructor($){this.applyConfig($)}createHandler($){return QM(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return ZM(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(pA($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)XM($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)jM($.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 f=$.exposeModels??Object.keys($.models),J=$.defaultModel??f[0];if(!J)throw Error(`Provider "${$.id}" must define a default model.`);pA({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:J,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:f,defaultModel:J,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){HM($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...dA]}async getBuiltInProviders(){return(await Promise.all(dA.map((f)=>WM(f)))).filter((f)=>f!==void 0).map((f)=>uA({collection:f}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,f){return this.configuredProviders.hasModel($,f)}applyConfig($){for(let f of $.providers)this.configuredProviders.registerSelectionConfig(f);for(let f of $.models??[])this.registerModel(f);for(let f of $.customProviders??[])this.registerProvider(f);for(let f of this.configuredProviders.list()){let J=lA(f.id),Q=this.configuredProviders.createHandlerConfig({providerId:f.id,modelId:f.defaultModel}).routingProviderId,Z=typeof Q==="string"&&lA(Q);if(!J&&!Z)throw Error(`Provider "${f.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function qZ($){return new m4($)}NQ();async function YM(){return Promise.resolve().then(() => (rQ(),fA))}function hM(){return new Date().toISOString()}function bM($){if(tA($)!=="providers.json")return;let f=SZ($);if(tA(f)!=="settings")return;return SZ(f)}class B${filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??EM(),this.dataDir=$.dataDir??bM(this.filePath),this.dataDir||!$.filePath)g4({providerSettingsManager:this,dataDir:this.dataDir});if(_A(this),A5(this.read()),wZ(this.filePath))try{aA(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!wZ(this.filePath))return J1();try{let $=SM(this.filePath,"utf8"),f=JSON.parse($),J=cf.safeParse(f);if(J.success)return A5(J.data),J.data}catch{}return J1()}write($){let f=cf.parse($),J=SZ(this.filePath);if(!wZ(J))wM(J,{recursive:!0,mode:448});CM(this.filePath,`${JSON.stringify(f,null,2)}
718
+ `,"utf8");try{aA(this.filePath,384)}catch{}A5(f)}saveProviderSettings($,f={}){let J=M8.parse($),Q=this.read(),Z=J.provider,W=f.setLastUsed!==!1,j=Q.providers[Z],X=f.tokenSource??j?.tokenSource??"manual",H={...Q,providers:{...Q.providers,[Z]:{settings:J,updatedAt:hM(),tokenSource:X}},lastUsedProvider:W?Z:Q.lastUsedProvider};return this.write(H),H}getProviderSettings($){return this.read().providers[$]?.settings}getLastUsedProviderSettings(){let $=this.read(),f=$.lastUsedProvider;if(!f)return;return $.providers[f]?.settings}getProviderConfig($,f){let J=this.getProviderSettings($);if(!J)return;return I0(J,f)}getLastUsedProviderConfig($){let f=this.getLastUsedProviderSettings();if(!f)return;return I0(f,$)}async refreshCatalog(){try{await mf({})}catch{}}}N0();cJ();import{getClineEnvironmentConfig as kM,isOAuthProviderId as IM}from"@cline/shared";var CZ="workos:";function xM($,f){if($==="cline")return`${CZ}${f}`;return f}function gM($,f){if($==="cline"&&f.toLowerCase().startsWith(CZ))return f.slice(CZ.length);return f}function mM($){let J=G0($)?.exp;if(typeof J==="number"&&J>0)return J*1000;return null}function vM($,f){let J=$.auth?.expiresAt;if(typeof J==="number"&&Number.isFinite(J)&&J>0)return J;let Q=mM(f);if(Q)return Q;return Date.now()-1}function cM($,f){let J=f.auth?.accessToken?.trim(),Q=f.auth?.refreshToken?.trim();if(!J||!Q)return null;let Z=gM($,J);if(!Z)return null;return{access:Z,refresh:Q,expires:vM(f,Z),accountId:f.auth?.accountId}}function uM($,f){let J=$?.expiresAt,Q=f?.expiresAt;return $?.accessToken===f?.accessToken&&$?.refreshToken===f?.refreshToken&&$?.accountId===f?.accountId&&J===Q}class z5 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 EZ{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new B$,this.telemetry=$?.telemetry}async resolveProviderApiKey($){if(!IM($.providerId))return null;return this.resolveWithSingleFlight($.providerId,$.forceRefresh)}async resolveWithSingleFlight($,f=!1){let J=this.refreshInFlight.get($);if(J)return J;let Q=this.resolveProviderApiKeyInternal($,f).catch((Z)=>{throw Z}).finally(()=>{this.refreshInFlight.delete($)});return this.refreshInFlight.set($,Q),Q}async resolveProviderApiKeyInternal($,f){let J=this.providerSettingsManager.getProviderSettings($);if(!J)return null;let Q=cM($,J);if(!Q)return null;let Z=await this.resolveCredentials($,J,Q,f);if(!Z)throw new z5($);let W=xM($,Z.access),j={...J.auth??{},accessToken:W,refreshToken:Z.refresh,accountId:Z.accountId};j.expiresAt=Z.expires;let X={...J,auth:j},H=!uM(J.auth,X.auth);if(H)this.providerSettingsManager.saveProviderSettings(X,{setLastUsed:!1,tokenSource:"oauth"});return{providerId:$,apiKey:W,accountId:Z.accountId,refreshed:H}}async resolveCredentials($,f,J,Q){if($==="cline")return k8(J,{apiBaseUrl:f.baseUrl?.trim()||kM().apiBaseUrl,telemetry:this.telemetry},{forceRefresh:Q});if($==="oca")return L8(J,{forceRefresh:Q,telemetry:this.telemetry},{mode:f.oca?.mode,telemetry:this.telemetry});return x8(J,{forceRefresh:Q,telemetry:this.telemetry})}}import{normalizeUserInput as dM}from"@cline/shared";import{nanoid as lM}from"nanoid";class sA{list($){return $?p0($):[]}update($,f){if(!$)return{sessionId:f.sessionId,prompts:[],updated:!1};let J=f.promptId.trim(),Q=$.pendingPrompts.findIndex((H)=>H.id===J);if(Q<0)return{sessionId:f.sessionId,prompts:p0($),updated:!1};let Z=$.pendingPrompts[Q];if(!Z)return{sessionId:f.sessionId,prompts:p0($),updated:!1};let W=f.prompt===void 0?Z.prompt:dM(f.prompt).trim();if(!W)throw Error("prompt cannot be empty");let j=f.delivery??Z.delivery,X={...Z,prompt:W,mode:f.mode??Z.mode,delivery:j};return $.pendingPrompts.splice(Q,1),pM($,X,Q,Z.delivery),{sessionId:f.sessionId,prompts:p0($),prompt:_5(X),updated:!0}}delete($,f){if(!$)return{sessionId:f.sessionId,prompts:[],removed:!1};let J=f.promptId.trim(),Q=$.pendingPrompts.findIndex((W)=>W.id===J);if(Q<0)return{sessionId:f.sessionId,prompts:p0($),removed:!1};let[Z]=$.pendingPrompts.splice(Q,1);return{sessionId:f.sessionId,prompts:p0($),prompt:Z?_5(Z):void 0,removed:!0}}enqueue($,f){let{prompt:J,mode:Q,delivery:Z,userImages:W,userFiles:j}=f,X=$.pendingPrompts.findIndex((H)=>H.prompt===J);if(X>=0){let[H]=$.pendingPrompts.splice(X,1),Y={...H,prompt:J,mode:Q??H.mode,userImages:W??H.userImages,userFiles:j??H.userFiles};if(Z==="steer"||H.delivery==="steer")$.pendingPrompts.unshift({...Y,delivery:"steer"});else $.pendingPrompts.push(Y)}else{let H={id:`pending_${Date.now()}_${lM(5)}`,prompt:J,mode:Q,delivery:Z,userImages:W,userFiles:j};if(Z==="steer")$.pendingPrompts.unshift(H);else $.pendingPrompts.push(H)}return p0($)}consumeSteer($){let f=$.pendingPrompts.findIndex((Q)=>Q.delivery==="steer");if(f<0)return{prompts:p0($)};let[J]=$.pendingPrompts.splice(f,1);return{entry:J,prompts:p0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:p0($)}}requeueFront($,f){return $.pendingPrompts.unshift(f),p0($)}clear($){return $.pendingPrompts.length=0,[]}}class hZ{deps;service=new sA;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let f=this.deps.getSession($.sessionId);if(!f||f.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let J=this.service.update(f,$);return this.emitPrompts(f),this.scheduleDrain($.sessionId,f),J}delete($){let f=this.deps.getSession($.sessionId);if(!f||f.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let J=this.service.delete(f,$);return this.emitPrompts(f),this.scheduleDrain($.sessionId,f),J}enqueue($,f){let J=this.deps.getSession($);if(!J||J.aborting)return;this.service.enqueue(J,f),this.emitPrompts(J),this.scheduleDrain($,J)}consumeSteer($){let f=this.deps.getSession($);if(!f)return;let{entry:J}=this.service.consumeSteer(f);if(!J)return;return this.emitPrompts(f),this.emitSubmitted(f,J),J}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:p0($)}})}scheduleDrain($,f){if(f.pendingPrompts.length===0||f.aborting||f.drainingPendingPrompts||!f.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let f=this.deps.getSession($);if(!f)return;if(f.aborting||f.drainingPendingPrompts)return;if(!f.agent.canStartRun())return;let{entry:J}=this.service.shiftNext(f);if(!J)return;this.emitPrompts(f),this.emitSubmitted(f,J),f.drainingPendingPrompts=!0;let Q=!0;try{await this.deps.send({sessionId:$,prompt:J.prompt,...J.mode?{mode:J.mode}:{},userImages:J.userImages,userFiles:J.userFiles})}catch{Q=!1,this.service.requeueFront(f,J),this.emitPrompts(f)}finally{if(f.drainingPendingPrompts=!1,Q&&f.pendingPrompts.length>0&&f.status!=="failed"&&f.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,f){let J=_5(f);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:J.id,prompt:J.prompt,delivery:J.delivery,attachmentCount:J.attachmentCount}})}}function _5($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0)}}function p0($){return $.pendingPrompts.map(_5)}function pM($,f,J,Q){if(f.delivery==="steer")$.pendingPrompts.unshift(f);else if(Q==="steer")$.pendingPrompts.push(f);else $.pendingPrompts.splice(J,0,f)}N0();class kZ{deps;constructor($){this.deps=$}dispatchAgentEvent($,f,J){let Q=this.deps.getSession($),Z={sessionId:$,config:f,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},W=P9(J),j=!!Q&&(!W.agentId||W.agentId===bZ(Q.agent));F9(Z,J,j?{isPrimaryAgentEvent:!0,agentId:bZ(Q.agent),conversationId:Q.agent.getConversationId(),...Q?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,f){let J=this.deps.getSession($);if(J){if(AQ(J,f),f.type==="agent_event"){let Q={sessionId:$,config:J.config,liveSession:J,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};F9(Q,f.event,{agentId:f.agentId,teamRole:"teammate",teamAgentId:f.agentId,isPrimaryAgentEvent:!1})}if(f.type==="teammate_spawned"){let Q=y$({agentId:f.teammate.runtimeAgentId??f.agentId,conversationId:f.teammate.conversationId,parentAgentId:f.teammate.parentAgentId,createdByAgentId:bZ(J.agent),teamId:J.runtime.teamRuntime?.getTeamId(),teamName:J.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:f.agentId});if(Q)a$(J.config.telemetry,{ulid:$,modelId:f.teammate.modelId??J.config.modelId,provider:J.config.providerId,...Q})}}if(await BQ($,f,this.deps.invokeBackendOptional),J)KQ(J,$,f,this.deps.emit)}async handlePluginEvent($,f,J){if(f.name==="plugin_log"){this.handlePluginLog($,f.payload);return}if(f.name==="automation_event"){let H=this.deps.getSession($)?.config.extensionContext?.automation??J;if(!H)return;let Y=f.payload&&typeof f.payload==="object"?f.payload:void 0;if(!Y)return;await H.ingestEvent(Y);return}if(f.name!=="steer_message"&&f.name!=="queue_message"&&f.name!=="pending_prompt")return;let Q=f.payload&&typeof f.payload==="object"?f.payload:void 0,Z=typeof Q?.sessionId==="string"&&Q.sessionId.trim().length>0?Q.sessionId.trim():$,W=typeof Q?.prompt==="string"?Q.prompt.trim():"";if(!W)return;let j=f.name==="steer_message"?"steer":f.name==="queue_message"?"queue":Q?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(Z,{prompt:W,delivery:j})}handlePluginLog($,f,J){let Q=this.deps.getSession($),Z=J??Q?.config.extensionContext?.logger??Q?.config.logger;if(!Z||!f||typeof f!=="object")return;let W=f,j=typeof W.message==="string"?W.message:"";if(!j)return;let X=W.metadata&&typeof W.metadata==="object"?{...W.metadata}:{};if(X.sessionId??=$,typeof W.pluginName==="string"&&W.pluginName)X.pluginName=W.pluginName;if(W.level==="debug"){Z.debug(j,X);return}if(W.level==="error"){if(Z.error)Z.error(j,X);else Z.log(j,{...X,severity:"error"});return}Z.log(j,X)}}function bZ($){return $.getAgentId()}function IZ($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:t$($.config),teamName:$.config.teamName?.trim()||void 0,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,parentSessionId:typeof $.sessionMetadata?.parentSessionId==="string"?$.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof $.sessionMetadata?.parentAgentId==="string"?$.sessionMetadata.parentAgentId:void 0,agentId:typeof $.sessionMetadata?.agentId==="string"?$.sessionMetadata.agentId:void 0,conversationId:typeof $.sessionMetadata?.conversationId==="string"?$.sessionMetadata.conversationId:void 0,isSubagent:typeof $.sessionMetadata?.isSubagent==="boolean"?$.sessionMetadata.isSubagent:!1,prompt:$.pendingPrompt,metadata:$.sessionMetadata,messagesPath:$.artifacts?.messagesPath,updatedAt:$.updatedAt??$.endedAt??$.startedAt}}function xZ($,f){let J=$[f];return typeof J==="function"?J:null}async function oA($,f,...J){let Q=xZ($,f);if(!Q)throw Error(`session service method not available: ${f}`);return Promise.resolve(Q.apply($,J))}async function eA($,f,...J){let Q=xZ($,f);if(!Q)return;await Promise.resolve(Q.apply($,J))}async function $B($,f,...J){let Q=xZ($,f);if(!Q)return;return await Promise.resolve(Q.apply($,J))}N$();N0();function gZ($,f,J,Q){return r$({configProvider:{getRuntimeConfig:()=>$.getSession(J)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:f.providerId,modelId:f.modelId,cwd:f.cwd,apiKey:f.apiKey,baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking,maxIterations:f.maxIterations,hooks:f.hooks,extensions:f.extensions,logger:f.logger,telemetry:f.telemetry},getConnectionConfig:()=>$.getSession(J)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:f.providerId,modelId:f.modelId,apiKey:f.apiKey,baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let W=f.enableTools?T1({cwd:f.cwd,...b0[R$({mode:f.mode})],executors:Q}):[];if(f.enableSpawnAgent)W.push(gZ($,f,J,Q));return E1(W)},onSubAgentEvent:(W)=>$.onAgentEvent(J,f,W),onSubAgentStart:(W)=>{let j=$.getSession(J)?.runtime.teamRuntime;$.subAgentStarts.set(W.subAgentId,{startedAt:Date.now(),rootSessionId:J});let X=y$({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:j?.getTeamId(),teamName:j?.getTeamName(),createdByAgentId:W.parentAgentId});if(X)a$(f.telemetry,{ulid:J,modelId:f.modelId,provider:f.providerId,...X});Z8(f.telemetry,{event:"started",ulid:J,durationMs:0,parentId:W.parentAgentId,agentId:W.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",J,W)},onSubAgentEnd:(W)=>{let j=$.getSession(J)?.runtime.teamRuntime,X=$.subAgentStarts.get(W.subAgentId),H=X?Date.now()-X.startedAt:0,Y=W.result?.text?W.result.text.split(`
719
+ `).length:0;Z8(f.telemetry,{event:"ended",ulid:J,durationMs:H,outputLines:Y,errorMessage:W.error?String(W.error):void 0,agentId:W.subAgentId,parentId:W.parentAgentId,...y$({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:j?.getTeamId(),teamName:j?.getTeamName(),createdByAgentId:W.parentAgentId})}),$.subAgentStarts.delete(W.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",J,W)}})}import{readFile as rM,stat as iM}from"node:fs/promises";var nM=20480000;async function fB($){let f=await iM($);if(!f.isFile())throw Error("Path is not a file");if(f.size>nM)throw Error("File is too large to read into context.");let J=await rM($,"utf8");if(J.includes("\x00"))throw Error("Cannot read binary file into context.");return J}var JB=5000;function v4($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Jq($){if(!$||typeof $!=="object"||Array.isArray($))return;let f=$,J=v4(f.inputTokens),Q=v4(f.outputTokens),Z=v4(f.cacheReadTokens),W=v4(f.cacheWriteTokens),j=v4(f.totalCost);if(J===void 0||Q===void 0||Z===void 0||W===void 0||j===void 0)return;return{inputTokens:J,outputTokens:Q,cacheReadTokens:Z,cacheWriteTokens:W,totalCost:j}}function Qq($,f){return{inputTokens:Math.max($.inputTokens,f.inputTokens),outputTokens:Math.max($.outputTokens,f.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,f.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,f.cacheWriteTokens),totalCost:Math.max($.totalCost,f.totalCost)}}class A${runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new B4;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new G1;constructor($){let f=tM();if(f)fq(f);let J=e1($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new z2,this.createAgentInstance=$.createAgent??((Q)=>new p$(Q)),this.defaultCapabilities=F0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new B$,this.oauthTokenManager=$.oauthTokenManager??new EZ({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(J),this.defaultFetch=$.fetch,this.pendingPromptsController=new hZ({getSession:(Q)=>this.sessions.get(Q),emit:(Q)=>this.emit(Q),send:(Q)=>this.runTurn(Q)}),this.pendingPrompts={list:async(Q)=>this.pendingPromptsController.list(Q.sessionId),update:async(Q)=>this.pendingPromptsController.update(Q),delete:async(Q)=>this.pendingPromptsController.delete(Q)},this.eventBridge=new kZ({getSession:(Q)=>this.sessions.get(Q),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(Q)=>this.emit(Q),persistMessages:(Q,Z,W)=>{this.invoke("persistSessionMessages",Q,Z,W)},enqueuePendingPrompt:(Q,Z)=>this.pendingPromptsController.enqueue(Q,Z),invokeBackendOptional:(Q,...Z)=>this.invokeOptional(Q,...Z)})}async startSession($){let f=$.source??K0.CLI,J=s(),Q=$.config.sessionId?.trim()??"",Z=Q||oM(),W=$,j=W.initialMessages??[],X=j.length>0?Tf(j):V0(),H=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!H)throw Error("session service method not available: ensureSessionsDir");let Y=mZ(H,Z),V=mZ(Y,`${Z}.messages.json`),A=mZ(Y,`${Z}.json`),B=t$($.config),K=y0.parse({version:1,session_id:Z,source:f,pid:process.pid,started_at:J,status:"running",interactive:$.interactive===!0,provider:W.config.providerId,model:W.config.modelId,cwd:W.config.cwd,workspace_root:B,team_name:W.config.teamName,enable_tools:W.config.enableTools,enable_spawn:W.config.enableSpawnAgent,enable_teams:W.config.enableAgentTeams,prompt:W.prompt?.trim()||void 0,messages_path:V}),G;if(Q.length>0&&j.length>0&&!W.prompt?.trim()){let k=await this.invokeOptionalValue("readSessionManifest",Z);if(k)K=k,G={manifestPath:A,messagesPath:k.messages_path||V,manifest:k}}let F=await this.seedAggregateUsageFromArtifacts({initialUsage:X,sessionDir:Y,rootMessagesPath:G?.messagesPath??V,manifest:K});this.usageBySession.set(Z,X),this.aggregateUsageBySession.set(Z,F);let P=F0(this.defaultCapabilities,$.capabilities),D=P?.toolExecutors??this.toolExecutors,O=$.localRuntime,_=O?.extensionContext?.logger??O?.logger,L=O?.extensionContext?.automation,z;z=await jX({input:W,localRuntime:$.localRuntime,sessionId:Z,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:P,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(k)=>{if(k.name==="plugin_log"){this.eventBridge.handlePluginLog(Z,k.payload,_);return}this.eventBridge.handlePluginEvent(Z,k,L)},onTeamEvent:(k)=>{this.eventBridge.handleTeamEvent(Z,k),z.config.onTeamEvent?.(k)},createSpawnTool:()=>gZ({getSession:(k)=>this.sessions.get(k),subAgentStarts:this.subAgentStarts,onAgentEvent:(k,n,G$)=>this.eventBridge.dispatchAgentEvent(k,n,G$),invokeBackendOptional:(k,...n)=>this.invokeOptional(k,...n)},z.config,Z,D),readSessionMetadata:async()=>(await this.getSession(Z))?.metadata,writeSessionMetadata:async(k)=>{await this.persistSessionMetadata(Z,()=>k)}});let y=await this.runtimeBuilder.build(z.runtimeBuilderInput),w=z.config,Q0=z.providerConfig;if(y.teamRuntime&&!w.teamName?.trim())w.teamName=y.teamRuntime.getTeamName();let Z0=[...y.tools,...w.extraTools??[]],o=y.extensions??z.extensions,u={sessionId:Z,providerId:Q0.providerId,modelId:Q0.modelId,apiKey:Q0.apiKey,baseUrl:Q0.baseUrl,headers:Q0.headers,knownModels:Q0.knownModels,providerConfig:Q0,thinking:w.thinking,reasoningEffort:w.reasoningEffort??Q0.reasoningEffort,systemPrompt:w.systemPrompt,maxIterations:w.maxIterations,execution:w.execution,prepareTurn:C2(w),tools:Z0,hooks:z.hooks,extensions:o,hookErrorMode:w.hookErrorMode,initialMessages:z.effectiveInput.initialMessages,userFileContentLoader:fB,toolPolicies:z.toolPolicies,requestToolApproval:z.requestToolApproval,telemetry:w.telemetry,onConsecutiveMistakeLimitReached:w.onConsecutiveMistakeLimitReached,completionPolicy:y.completionPolicy,consumePendingUserMessage:()=>{let k=this.pendingPromptsController.consumeSteer(Z);return k?_4(k.prompt,k.mode??w.mode):void 0},logger:y.logger??w.logger,extensionContext:w.extensionContext,onEvent:(k)=>this.eventBridge.dispatchAgentEvent(Z,w,k)};u.hooks={...u.hooks,onEvent:async(k)=>{if(await z.hooks?.onEvent?.(k),k.type!=="assistant-message")return;let n=this.sessions.get(Z);if(!n)return;let G$=n.agent.getMessages();try{await this.invoke("persistSessionMessages",Z,G$,w.systemPrompt)}catch(e0){w.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:Z,error:e0}),Hf(w.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:e0,severity:"warn",handled:!0,context:{sessionId:Z,providerId:w.providerId,modelId:w.modelId}})}}};let U0=this.createAgentInstance(u);if(u.onEvent)U0.subscribeEvents(u.onEvent);y.registerLeadAgent?.(U0);let k$=y$({agentId:U0.getAgentId(),conversationId:U0.getConversationId(),teamId:y.teamRuntime?.getTeamId(),teamName:y.teamRuntime?.getTeamName(),teamRole:y.teamRuntime?"lead":void 0});if(HX(w,Z,Q.length>0,B,k$),k$)a$(w.telemetry,{ulid:Z,modelId:w.modelId,provider:w.providerId,...k$});if(y.teamRuntime)D6(w.telemetry,{ulid:Z,teamId:y.teamRuntime.getTeamId(),teamName:y.teamRuntime.getTeamName(),leadAgentId:U0.getAgentId(),restoredFromPersistence:y.teamRestoredFromPersistence===!0});let d={sessionId:Z,config:w,sessionMetadata:W.sessionMetadata,...G?{artifacts:G}:{},source:f,startedAt:G?.manifest.started_at??J,updatedAt:G?.manifest.ended_at??G?.manifest.started_at??J,pendingPrompt:K.prompt,runtime:y,agent:U0,started:!1,status:G?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:j,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:z.pluginSandboxShutdown,submitAndExitObserved:!1};if(this.sessions.set(Z,d),this.emitStatus(Z,"running"),j.length>0&&!G){if(await this.ensureSessionPersisted(d),await this.invoke("persistSessionMessages",d.sessionId,j,d.config.systemPrompt),!W.prompt?.trim())await this.updateStatus(d,"completed",0)}let K$;try{if(W.prompt?.trim())if(K$=await this.executeTurn(d,{prompt:W.prompt,userImages:W.userImages,userFiles:W.userFiles}),!d.interactive)await this.finalizeSingleRun(d,K$.finishReason);else await this.completeInteractiveTurn(d,K$.finishReason)}catch(k){if(d.interactive&&d.aborting)K$=await this.completeAbortedInteractiveTurn(d);else throw Hf(d.config.telemetry,{component:"core",operation:"session.start",error:k,severity:"error",handled:!1,context:{sessionId:d.sessionId,providerId:d.config.providerId,modelId:d.config.modelId}}),await this.failSession(d),k}return{sessionId:Z,manifest:K,manifestPath:A,messagesPath:V,result:K$}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(f)=>this.getSession(f),readMessages:(f)=>this.readSessionMessages(f),buildStartInput:(f,J)=>{let Q=f.restoredCheckpointMetadata?{...J.sessionMetadata??{},checkpoint:f.restoredCheckpointMetadata}:J.sessionMetadata;return{...J,...Q?{sessionMetadata:Q}:{},initialMessages:f.initialMessages}},startSession:(f)=>this.startSession(f),getStartedSessionId:(f)=>f.sessionId,readRestoredSession:(f)=>this.getSession(f)})}async runTurn($){let f=this.getSessionOrThrow($.sessionId),J=f.agent.canStartRun(),Q=$.delivery??(f.interactive&&!J?"queue":void 0);if(f.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:Q??"immediate"}}),Q==="queue"||Q==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:Q,userImages:$.userImages,userFiles:$.userFiles});return}try{let Z=await this.executeTurn(f,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!f.interactive)await this.finalizeSingleRun(f,Z.finishReason);else await this.completeInteractiveTurn(f,Z.finishReason);if(Z.finishReason==="error"||Z.finishReason==="aborted")return Z;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),Z}catch(Z){if(f.interactive&&f.aborting)return await this.completeAbortedInteractiveTurn(f);throw Hf(f.config.telemetry,{component:"core",operation:"session.submit",error:Z,severity:"error",handled:!1,context:{sessionId:f.sessionId,providerId:f.config.providerId,modelId:f.config.modelId}}),await this.failSession(f),Z}}async getAccumulatedUsage($){let f=v7(this.usageBySession.get($)),J=v7(this.aggregateUsageBySession.get($));return f||J?{usage:f,aggregateUsage:J}:void 0}async abort($,f){let J=this.sessions.get($);if(!J)return;J.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),J.aborting=!0,this.pendingPromptsController.clearAborted(J),J.agent.abort(f)}async stopSession($){let f=this.sessions.get($);if(!f)return;if(f.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),f.interactive&&f.status!=="running"){await this.releaseSessionRuntime(f,"session_stop");return}f.aborting=!0,f.agent.abort(Error("session_stop")),await this.shutdownSession(f,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let f=[...this.sessions.values()];if(f.length===0)return;await Promise.allSettled(f.map((J)=>J.interactive&&J.status!=="running"?this.releaseSessionRuntime(J,$):this.shutdownSession(J,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let f=this.sessions.get($);if(f)return IZ(f);let J=$.trim();if(!J)return;let Q=await this.getRow(J);if(Q)return $8(Q);let Z=await this.readManifest(J);return Z?SJ(Z):void 0}async listSessions($=200){let J=(await this.listRows($)).map($8),Q=new Set(J.map((Z)=>Z.sessionId));for(let Z of this.sessions.values()){if(Q.has(Z.sessionId))continue;J.unshift(IZ(Z))}return J.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let f=await this.invoke("deleteSession",$);if(f.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return f.deleted}async updateSession($,f){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:f.prompt,metadata:f.metadata,title:f.title}))?.updated===!0}}async readSessionMessages($){let f=$.trim();if(!f)return[];let J=await this.getRow(f);if(J?.messagesPath)return H1(J.messagesPath);let Q=await this.readManifest(f);return H1(Q?.messages_path)}async dispatchHookEvent($){await gH($,{queueSpawnRequest:(f)=>this.invokeOptional("queueSpawnRequest",f),upsertSubagentSessionFromHook:(f)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",f),appendSubagentHookAudit:(f,J)=>this.invokeOptional("appendSubagentHookAudit",f,J),applySubagentStatus:(f,J)=>this.invokeOptional("applySubagentStatus",f,J)})}subscribe($,f){return this.events.subscribe($,f)}async updateSessionModel($,f){let J=this.getSessionOrThrow($);J.config.modelId=f,J.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:f}),J.agent.updateConnection({modelId:f})}handlePluginEvent($,f,J){return this.eventBridge.handlePluginEvent($,f,J)}async executeTurn($,f){let J=await this.prepareTurnInput($,f),Q=J.prompt.trim();if(!Q)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=Q;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let Z=await this.executeAgentTurn($,Q,J.userImages,J.userFiles);while(GQ($,Z.finishReason)){let W=await PQ($);if(W.length===0)break;let j=FQ($,W);Z=await this.executeAgentTurn($,j)}return Z}async completeInteractiveTurn($,f){if(z4($))return;let J=f==="aborted"||$.aborting,Q=f==="error";await this.updateStatus($,J?"cancelled":Q?"failed":"completed",Q?1:0),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:f,ts:Date.now()}}),$.aborting=!1}async completeAbortedInteractiveTurn($){let f=new Date,J=$.agent.getMessages(),Q=V0();return $.persistedMessages=J,$.started=$.started||J.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:Q}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:Q,messages:J,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:f,endedAt:f,durationMs:0}}async executeAgentTurn($,f,J,Q){let Z=$.started||$.agent.getMessages().length>0,W=$.persistedMessages??$.agent.getMessages(),j=this.usageBySession.get($.sessionId)??V0(),X=this.aggregateUsageBySession.get($.sessionId)??j;$.turnUsageBaseline=j,$.turnAggregateUsageBaseline=X,$.turnPrimaryUsage=V0(),$.turnUsageByAgent=new Map,V6($.config.telemetry,$.sessionId,$.config.mode),yf($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let H=Z?()=>$.agent.continue(f,J,Q):()=>$.agent.run(f,J,Q),Y=await this.runWithAuthRetry($,H,W);$.started=!0;let V=Q6(Y.messages,Y,W);$.persistedMessages=V;let A=W8($.turnUsageByAgent?.values()??[]),B=H0(j,Y.usage),K=H0(H0(V0(),Y.usage),A),G=H0(X,K);return this.usageBySession.set($.sessionId,B),this.aggregateUsageBySession.set($.sessionId,G),await this.persistSessionMetadata($.sessionId,(R)=>({...R??{},totalCost:B.totalCost,aggregatedAgentsCost:G.totalCost,usage:B,aggregateUsage:G})),await this.invoke("persistSessionMessages",$.sessionId,V,$.config.systemPrompt),this.observeTaskCompletionTool($,Y),Y}catch(H){throw Hf($.config.telemetry,{component:"core",operation:"session.turn",error:H,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),H}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,f){if($.submitAndExitObserved)return;if(!f.toolCalls.some((Q)=>Q.name===J0.SUBMIT_AND_EXIT&&Q.error===void 0))return;$.submitAndExitObserved=!0,J8($.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($,f){let J=t$($.config),Q=$q(f.prompt).trim();if(!Q)return{prompt:"",userImages:f.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,f.userFiles)};let Z=await Kf(Q,J);YX($.config.telemetry,Z);let W=_4(Z.prompt,f.mode??$.config.mode),j=this.resolveAbsoluteFilePaths($.config.cwd,f.userFiles),X=this.resolveAbsoluteFilePaths(J,Z.matchedFiles),H=Array.from(new Set([...j,...X]));return{prompt:W,userImages:f.userImages,userFiles:H.length>0?H:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let f=t$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:f,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 persistSessionMetadata($,f){let J=this.sessions.get($),Q=await this.invokeOptionalValue("readSessionManifest",$)??J?.artifacts?.manifest,Z=f(Q?.metadata);if(!J?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:Z}))?.updated===!1)return;J.sessionMetadata=Z,J.artifacts.manifest.metadata=Z}async finalizeSingleRun($,f){if(z4($))return;let J=f==="aborted"||$.aborting,Q=f==="error";await this.shutdownSession($,{status:J?"cancelled":Q?"failed":"completed",exitCode:Q?1:0,shutdownReason:Q?"session_error":"session_complete",endReason:f})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,f){if(f.status==="completed"&&!$.submitAndExitObserved)J8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});dJ($);let J=[],Q=(Z,W)=>{J.push(W),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:Z,error:W,severity:"warn"}),Hf($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:Z,status:f.status,shutdownReason:f.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,f.status,f.exitCode)}catch(Z){Q("update_status",Z)}try{await $.agent.shutdown(f.shutdownReason)}catch(Z){Q("agent_shutdown",Z)}}try{await Promise.resolve($.runtime.shutdown(f.shutdownReason))}catch(Z){Q("runtime_shutdown",Z)}try{await $.pluginSandboxShutdown?.()}catch(Z){Q("plugin_sandbox_shutdown",Z)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:f.endReason,ts:Date.now()}}),J.length>0&&f.status==="failed")throw J[0]}async releaseSessionRuntime($,f){let J=[],Q=(Z,W)=>{J.push(W),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:Z,error:W,severity:"warn"}),Hf($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:Z,reason:f,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(f)}catch(Z){Q("agent_shutdown",Z)}try{await Promise.resolve($.runtime.shutdown(f))}catch(Z){Q("runtime_shutdown",Z)}try{await $.pluginSandboxShutdown?.()}catch(Z){Q("plugin_sandbox_shutdown",Z)}if(this.sessions.delete($.sessionId),J.length>0)throw J[0]}async updateStatus($,f,J){if(!$.artifacts)return;let Q=await this.invoke("updateSessionStatus",$.sessionId,f,J);if(!Q.updated)return;let Z=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(Z.status=f,f==="running")delete Z.ended_at,Z.exit_code=null;else Z.ended_at=Q.endedAt??s(),Z.exit_code=typeof J==="number"?J:null;$.artifacts.manifest=Z,$.status=f,$.updatedAt=Q.endedAt??s(),$.endedAt=f==="running"?null:Z.ended_at,$.exitCode=Z.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,Z),this.emitStatus($.sessionId,f)}async runWithAuthRetry($,f,J){try{return await f()}catch(Q){if(!eM(Q,$.config.providerId))throw Q;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(J),f()}}async syncOAuthCredentials($,f){let J=null;try{J=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:f?.forceRefresh})}catch(Q){if(Q instanceof z5)throw Error(`${Q.providerId} requires re-authentication.`);throw Q}if(!J?.apiKey||$.config.apiKey===J.apiKey)return;$.config.apiKey=J.apiKey,$.agent.updateConnection({apiKey:J.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:J.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:J.apiKey})}getSessionOrThrow($){let f=this.sessions.get($);if(!f){let J=Error(`session not found: ${$}`);throw Hf(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:J,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),J}return f}resolveAbsoluteFilePaths($,f){if(!f||f.length===0)return[];let J=f.map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>sM(Q)?Q:vZ($,Q));return Array.from(new Set(J))}getSessionAgentTelemetryIdentity($){return y$({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let f=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),J=H0($.initialUsage,f);return this.withPersistedAggregateUsageFloor(J,$.manifest)}async summarizePersistedTeammateUsage($,f,J){let Q=vZ(f),Z=`${J}.messages.json`,W;try{W=aM($)}catch{return V0()}let j=V0();for(let X of W){if(!X.endsWith(".messages.json"))continue;if(X===Z)continue;let H=vZ($,X);if(H===Q)continue;let Y=await H1(H);if(Y.length===0)continue;j=H0(j,Tf(Y))}return j}withPersistedAggregateUsageFloor($,f){let J=Jq(f.metadata?.aggregateUsage);if(J)return Qq($,J);let Q=f.metadata?.aggregatedAgentsCost;if(typeof Q!=="number"||!Number.isFinite(Q)||Q<=$.totalCost)return $;return{...$,totalCost:Q}}emitStatus($,f){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:f}})}async emitSessionSnapshot($){let f=await this.getSession($);if(!f)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:j$({session:f,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($)),JB))}async getRow($){let f=$.trim();if(!f)return;return(await this.listRows(JB)).find((Q)=>Q.sessionId===f)}async readManifest($){let f=$.trim();if(!f)return;return await this.invokeOptionalValue("readSessionManifest",f)}invoke($,...f){return oA(this.sessionService,$,...f)}invokeOptional($,...f){return eA(this.sessionService,$,...f)}invokeOptionalValue($,...f){return $B(this.sessionService,$,...f)}}function Wq($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((f)=>({name:f.name,input:f.input,output:f.output,error:f.error,durationMs:f.durationMs}))}}function jq($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function Q5($={}){let f=new A$({sessionService:new V$(new H$),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(J){let Q=(J.cwd?.trim()||J.workspaceRoot).trim(),Z=await f.startSession({source:J.source?.trim()||K0.CLI,interactive:!1,config:{providerId:Zq(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:jq(J),maxIterations:J.maxIterations,enableTools:J.enableTools!==!1,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},toolPolicies:J.toolPolicies??{"*":{autoApprove:J.autoApproveTools!==!1}},localRuntime:{configExtensions:J.configExtensions}});return{sessionId:Z.sessionId,startResult:{sessionId:Z.sessionId,manifestPath:Z.manifestPath,messagesPath:Z.messagesPath}}},async sendSession(J,Q){let Z=await f.runTurn({sessionId:J,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((W)=>W.content)});if(!Z)throw Error("local hub schedule runtime returned no turn result");return{result:Wq(Z)}},async abortSession(J){return await f.abort(J,Error("hub schedule abort")),{applied:!0}},async stopSession(J){return await f.stopSession(J),{applied:!0}}}}Xq(process.env.CLINE_VCR);function Hq($){let f=process.cwd(),J,Q,Z;for(let W=0;W<$.length;W+=1){let j=$[W],X=$[W+1];if(j==="--cwd"&&X){f=X,W+=1;continue}if(j==="--host"&&X){J=X,W+=1;continue}if(j==="--port"&&X){let H=Number(X);if(Number.isFinite(H))Q=H;W+=1;continue}if(j==="--pathname"&&X)Z=X,W+=1}return{cwd:f,host:J,port:Q,pathname:Z}}async function Yq(){let $=Hq(process.argv.slice(2));process.chdir($.cwd);let f=c0({host:$.host,port:$.port,pathname:$.pathname}),J=await Wf({host:f.host,port:f.port,pathname:f.pathname,owner:Y0(),runtimeHandlers:Q5(),cronOptions:{workspaceRoot:$.cwd}}),Q=async()=>{await J.close(),process.exit(0)},Z=!1,W=(j,X)=>{if(Z)return;Z=!0;let H=X instanceof Error?X.stack||X.message:String(X);process.stderr.write(`[hub-daemon] ${j}: ${H}
720
720
  `),J.close().catch((Y)=>{let V=Y instanceof Error?Y.stack||Y.message:String(Y);process.stderr.write(`[hub-daemon] shutdown after ${j} failed: ${V}
721
721
  `)}).finally(()=>{process.exit(1)})};process.on("SIGINT",()=>{Q()}),process.on("SIGTERM",()=>{Q()}),process.on("uncaughtException",(j)=>{W("uncaughtException",j)}),process.on("unhandledRejection",(j)=>{W("unhandledRejection",j)}),await new Promise(()=>{})}Yq().catch(($)=>{let f=$ instanceof Error?$.stack||$.message:String($);process.stderr.write(`[hub-daemon] fatal: ${f}
722
722
  `),process.exit(1)});