@cline/core 0.0.78 → 0.0.79

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import{createRequire as bq}from"node:module";var fq=Object.defineProperty;var wq=($)=>$;function Sq($,Z){this[$]=wq.bind(null,Z)}var AQ=($,Z)=>{for(var Q in Z)fq($,Q,{get:Z[Q],enumerable:!0,configurable:!0,set:Sq.bind(Z,Q)})};var j2=($,Z)=>()=>($&&(Z=$($=0)),Z);var qV=bq(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as Iq,captureAgentUnexpectedReasoningTokens as hq,captureTaskLifecycleEvent as Bn,SDK_ERROR_TELEMETRY_EVENT as vq,TASK_CANCELLED_EVENT as gq,TASK_FIRST_CHUNK_RECEIVED_EVENT as mq,TASK_PROVIDER_REQUEST_STARTED_EVENT as cq,TASK_PROVIDER_STREAM_FAILED_EVENT as uq,TASK_PROVIDER_STREAM_STARTED_EVENT as dq}from"@cline/shared";function e($,Z,Q){$?.capture({event:Z,properties:Q})}function I5($){if(!$)return;return $.substring(0,lq)}function pq($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function iq($){return typeof $==="string"?$:$.message}function RV($,Z){return $.some((Q)=>Z.has(Q.trim().toLowerCase()))}function rq($){e($,l.CLIENT.EXTENSION_ACTIVATED)}function MQ($,Z){let Q=[...Z.vcs_types],X={root_count:Z.root_count,vcs_types:Q,is_multi_root:Z.root_count>1,has_git:RV(Q,new Set(["git"])),has_mercurial:RV(Q,new Set(["mercurial","hg"]))};if(Z.init_duration_ms!==void 0)X.init_duration_ms=Z.init_duration_ms;if(Z.feature_flag_enabled!==void 0)X.feature_flag_enabled=Z.feature_flag_enabled;if(Z.is_remote_workspace!==void 0)X.is_remote_workspace=Z.is_remote_workspace;e($,l.WORKSPACE.INITIALIZED,X)}function RQ($,Z,Q){e($,l.WORKSPACE.INIT_ERROR,{error_type:pq(Z),error_message:I5(iq(Z)),fallback_to_single_root:Q.fallback_to_single_root,workspace_count:Q.workspace_count??0})}function aq($,Z){e($,l.WORKSPACE.PATH_RESOLVED,{...Z})}function z$($,Z){e($,l.USER.AUTH_STARTED,{provider:Z})}function O$($,Z,Q){e($,l.USER.AUTH_SUCCEEDED,{provider:Z,...Q})}function N$($,Z,Q,X){e($,l.USER.AUTH_FAILED,{provider:Z,errorMessage:I5(Q),...X?.requestId?{request_id:X.requestId}:{}})}function Y2($,Z,Q,X){e($,l.USER.AUTH_LOGGED_OUT,{provider:Z,reason:Q,...X})}function h5($,Z,Q){e($,l.USER.AUTH_REFRESH_SOFT_FAILURE,{provider:Z,...Q})}function CV($,Z,Q){e($,l.USER.AUTH_RUN_RETRY,{provider:Z,recovered:Q?.recovered})}function nq($,Z){e($,l.USER.PROVIDER_CONFIGURED,{provider:Z})}function PV($,Z){$?.captureRequired(l.USER.TELEMETRY_OPT_OUT,Z)}function q$($,Z){let Q=Z.id?.trim();if(Q)$?.setDistinctId(Q);$?.updateCommonProperties({user_id:Q||Z.id,account_id:Z.id,account_email:Z.email,provider:Z.provider,organization_id:Z.organizationId,organization_name:Z.organizationName,member_id:Z.memberId})}function CQ($,Z){e($,l.TASK.CREATED,Z)}function PQ($,Z){e($,l.TASK.RESTARTED,Z)}function v5($,Z){e($,l.TASK.COMPLETED,Z)}function z8($,Z){e($,l.TASK.CONVERSATION_TURN,{...Z,timestamp:new Date().toISOString()})}function fQ($,Z){e($,l.TASK.TOKEN_USAGE,Z)}function wQ($,Z,Q){e($,l.TASK.MODE_SWITCH,{ulid:Z,mode:Q})}function a1($,Z){e($,l.TASK.TOOL_USED,Z)}function SQ($,Z){e($,l.TASK.SKILL_USED,Z)}function bQ($,Z){e($,l.TASK.DIFF_EDIT_FAILED,Z)}function oq($,Z){e($,l.TASK.PROVIDER_API_ERROR,{...Z,errorMessage:I5(Z.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function kQ($,Z){e($,l.TASK.MISTAKE_LIMIT_REACHED,{...Z,timestamp:new Date().toISOString()})}function fV($,Z){e($,l.SDK.TOOL_TIMEOUT,SV(Z))}function wV($,Z){e($,l.SDK.PLAN_MODE_COMMAND_BLOCKED,SV(Z))}function SV($){let Z={};for(let[Q,X]of Object.entries($))if(X!==void 0)Z[Q]=X;return Z}function xQ($,Z,Q){e($,l.TASK.MENTION_USED,{mentionType:Z,contentLength:Q,timestamp:new Date().toISOString()})}function yQ($,Z,Q,X){e($,l.TASK.MENTION_FAILED,{mentionType:Z,errorType:Q,errorMessage:I5(X),timestamp:new Date().toISOString()})}function IQ($,Z,Q,X,J){e($,l.TASK.MENTION_SEARCH_RESULTS,{queryLength:Z.length,resultCount:Q,searchType:X,isEmpty:J,timestamp:new Date().toISOString()})}function V2($,Z){e($,l.TASK.AGENT_CREATED,{...Z,timestamp:new Date().toISOString()})}function hQ($,Z){e($,l.TASK.AGENT_TEAM_CREATED,{...Z,timestamp:new Date().toISOString()})}function g5($,Z){e($,Z.event==="ended"?l.TASK.SUBAGENT_COMPLETED:l.TASK.SUBAGENT_STARTED,{...Z,timestamp:new Date().toISOString()})}function vQ($,Z,Q,X){e($,l.HOOKS.DISCOVERY_COMPLETED,{hookName:Z,globalCount:Q,workspaceCount:X,totalCount:Q+X,timestamp:new Date().toISOString()})}function gQ($,Z){e($,l.TASK.COMPACTION_EXECUTED,{...Z,timestamp:new Date().toISOString()})}function mQ($,Z){e($,l.TASK.COMPACTION_SKIPPED,{...Z,timestamp:new Date().toISOString()})}function bV($,Z){e($,l.TASK.COMPACTION_BUDGET_EMERGENCY,{...Z,timestamp:new Date().toISOString()})}var lq=500,l;var _0=j2(()=>{l={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:Iq},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",AUTH_REFRESH_SOFT_FAILURE:"user.auth_refresh_soft_failure",AUTH_RUN_RETRY:"user.auth_run_retry",PROVIDER_CONFIGURED:"user.provider_configured",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MISTAKE_LIMIT_REACHED:"task.mistake_limit_reached",PROVIDER_REQUEST_STARTED:cq,PROVIDER_STREAM_STARTED:dq,FIRST_CHUNK_RECEIVED:mq,PROVIDER_STREAM_FAILED:uq,CANCELLED:gq,MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed",COMPACTION_EXECUTED:"task.compaction_executed",COMPACTION_SKIPPED:"task.compaction_skipped",COMPACTION_BUDGET_EMERGENCY:"task.compaction_budget_emergency"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:vq,TOOL_TIMEOUT:"sdk.tool_timeout",PLAN_MODE_COMMAND_BLOCKED:"sdk.plan_mode_command_blocked"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as lT,readFileSync as pT,statSync as iT,writeFileSync as rT}from"node:fs";import{dirname as aT}from"node:path";import{CONFIGURABLE_MODEL_TOOL_NAMES as PB}from"@cline/shared";import{resolveGlobalSettingsPath as fB}from"@cline/shared/storage";import{z as u0}from"zod";function X9(){return W9.parse({})}function tT(){J9=void 0}function eT($){if($.disabledTools)Object.freeze($.disabledTools);if($.tools){for(let Z of Object.values($.tools))Object.freeze(Z);Object.freeze($.tools)}if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function $E($){let Z;try{Z=pT($,"utf8")}catch{return X9()}try{let Q=W9.safeParse(JSON.parse(Z));return Q.success?Q.data:X9()}catch{return X9()}}function ZE(){let $=fB(),Z=iT($,{throwIfNoEntry:!1}),Q=Z?.mtimeMs??0,X=Z?.size??0,J=J9;if(J&&J.path===$&&J.mtimeMs===Q&&J.size===X)return J;let W=eT(Z?$E($):X9());return J9={path:$,mtimeMs:Q,size:X,value:W},J9}function W0(){return ZE().value}function d0($,Z={}){let Q=fB(),X=W0();lT(aT(Q),{recursive:!0});let J=W9.parse($);if(!X.telemetryOptOut&&J.telemetryOptOut)PV(Z.telemetry);rT(Q,`${JSON.stringify(J,null,2)}
1
+ import{createRequire as bq}from"node:module";var fq=Object.defineProperty;var wq=($)=>$;function Sq($,Z){this[$]=wq.bind(null,Z)}var AQ=($,Z)=>{for(var Q in Z)fq($,Q,{get:Z[Q],enumerable:!0,configurable:!0,set:Sq.bind(Z,Q)})};var j2=($,Z)=>()=>($&&(Z=$($=0)),Z);var qV=bq(import.meta.url);import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as Iq,captureAgentUnexpectedReasoningTokens as hq,captureTaskLifecycleEvent as Gn,SDK_ERROR_TELEMETRY_EVENT as vq,TASK_CANCELLED_EVENT as gq,TASK_FIRST_CHUNK_RECEIVED_EVENT as mq,TASK_PROVIDER_REQUEST_STARTED_EVENT as cq,TASK_PROVIDER_STREAM_FAILED_EVENT as uq,TASK_PROVIDER_STREAM_STARTED_EVENT as dq}from"@cline/shared";function e($,Z,Q){$?.capture({event:Z,properties:Q})}function I5($){if(!$)return;return $.substring(0,lq)}function pq($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function iq($){return typeof $==="string"?$:$.message}function RV($,Z){return $.some((Q)=>Z.has(Q.trim().toLowerCase()))}function rq($){e($,l.CLIENT.EXTENSION_ACTIVATED)}function MQ($,Z){let Q=[...Z.vcs_types],X={root_count:Z.root_count,vcs_types:Q,is_multi_root:Z.root_count>1,has_git:RV(Q,new Set(["git"])),has_mercurial:RV(Q,new Set(["mercurial","hg"]))};if(Z.init_duration_ms!==void 0)X.init_duration_ms=Z.init_duration_ms;if(Z.feature_flag_enabled!==void 0)X.feature_flag_enabled=Z.feature_flag_enabled;if(Z.is_remote_workspace!==void 0)X.is_remote_workspace=Z.is_remote_workspace;e($,l.WORKSPACE.INITIALIZED,X)}function RQ($,Z,Q){e($,l.WORKSPACE.INIT_ERROR,{error_type:pq(Z),error_message:I5(iq(Z)),fallback_to_single_root:Q.fallback_to_single_root,workspace_count:Q.workspace_count??0})}function aq($,Z){e($,l.WORKSPACE.PATH_RESOLVED,{...Z})}function z$($,Z){e($,l.USER.AUTH_STARTED,{provider:Z})}function O$($,Z,Q){e($,l.USER.AUTH_SUCCEEDED,{provider:Z,...Q})}function N$($,Z,Q,X){e($,l.USER.AUTH_FAILED,{provider:Z,errorMessage:I5(Q),...X?.requestId?{request_id:X.requestId}:{}})}function Y2($,Z,Q,X){e($,l.USER.AUTH_LOGGED_OUT,{provider:Z,reason:Q,...X})}function h5($,Z,Q){e($,l.USER.AUTH_REFRESH_SOFT_FAILURE,{provider:Z,...Q})}function CV($,Z,Q){e($,l.USER.AUTH_RUN_RETRY,{provider:Z,recovered:Q?.recovered})}function nq($,Z){e($,l.USER.PROVIDER_CONFIGURED,{provider:Z})}function PV($,Z){$?.captureRequired(l.USER.TELEMETRY_OPT_OUT,Z)}function q$($,Z){let Q=Z.id?.trim();if(Q)$?.setDistinctId(Q);$?.updateCommonProperties({user_id:Q||Z.id,account_id:Z.id,account_email:Z.email,provider:Z.provider,organization_id:Z.organizationId,organization_name:Z.organizationName,member_id:Z.memberId})}function CQ($,Z){e($,l.TASK.CREATED,Z)}function PQ($,Z){e($,l.TASK.RESTARTED,Z)}function v5($,Z){e($,l.TASK.COMPLETED,Z)}function z8($,Z){e($,l.TASK.CONVERSATION_TURN,{...Z,timestamp:new Date().toISOString()})}function fQ($,Z){e($,l.TASK.TOKEN_USAGE,Z)}function wQ($,Z,Q){e($,l.TASK.MODE_SWITCH,{ulid:Z,mode:Q})}function a1($,Z){e($,l.TASK.TOOL_USED,Z)}function SQ($,Z){e($,l.TASK.SKILL_USED,Z)}function bQ($,Z){e($,l.TASK.DIFF_EDIT_FAILED,Z)}function oq($,Z){e($,l.TASK.PROVIDER_API_ERROR,{...Z,errorMessage:I5(Z.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function kQ($,Z){e($,l.TASK.MISTAKE_LIMIT_REACHED,{...Z,timestamp:new Date().toISOString()})}function fV($,Z){e($,l.SDK.TOOL_TIMEOUT,SV(Z))}function wV($,Z){e($,l.SDK.PLAN_MODE_COMMAND_BLOCKED,SV(Z))}function SV($){let Z={};for(let[Q,X]of Object.entries($))if(X!==void 0)Z[Q]=X;return Z}function xQ($,Z,Q){e($,l.TASK.MENTION_USED,{mentionType:Z,contentLength:Q,timestamp:new Date().toISOString()})}function yQ($,Z,Q,X){e($,l.TASK.MENTION_FAILED,{mentionType:Z,errorType:Q,errorMessage:I5(X),timestamp:new Date().toISOString()})}function IQ($,Z,Q,X,J){e($,l.TASK.MENTION_SEARCH_RESULTS,{queryLength:Z.length,resultCount:Q,searchType:X,isEmpty:J,timestamp:new Date().toISOString()})}function V2($,Z){e($,l.TASK.AGENT_CREATED,{...Z,timestamp:new Date().toISOString()})}function hQ($,Z){e($,l.TASK.AGENT_TEAM_CREATED,{...Z,timestamp:new Date().toISOString()})}function g5($,Z){e($,Z.event==="ended"?l.TASK.SUBAGENT_COMPLETED:l.TASK.SUBAGENT_STARTED,{...Z,timestamp:new Date().toISOString()})}function vQ($,Z,Q,X){e($,l.HOOKS.DISCOVERY_COMPLETED,{hookName:Z,globalCount:Q,workspaceCount:X,totalCount:Q+X,timestamp:new Date().toISOString()})}function gQ($,Z){e($,l.TASK.COMPACTION_EXECUTED,{...Z,timestamp:new Date().toISOString()})}function mQ($,Z){e($,l.TASK.COMPACTION_SKIPPED,{...Z,timestamp:new Date().toISOString()})}function bV($,Z){e($,l.TASK.COMPACTION_BUDGET_EMERGENCY,{...Z,timestamp:new Date().toISOString()})}var lq=500,l;var _0=j2(()=>{l={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},AGENT:{UNEXPECTED_REASONING_TOKENS:Iq},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",AUTH_REFRESH_SOFT_FAILURE:"user.auth_refresh_soft_failure",AUTH_RUN_RETRY:"user.auth_run_retry",PROVIDER_CONFIGURED:"user.provider_configured",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MISTAKE_LIMIT_REACHED:"task.mistake_limit_reached",PROVIDER_REQUEST_STARTED:cq,PROVIDER_STREAM_STARTED:dq,FIRST_CHUNK_RECEIVED:mq,PROVIDER_STREAM_FAILED:uq,CANCELLED:gq,MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed",COMPACTION_EXECUTED:"task.compaction_executed",COMPACTION_SKIPPED:"task.compaction_skipped",COMPACTION_BUDGET_EMERGENCY:"task.compaction_budget_emergency"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:vq,TOOL_TIMEOUT:"sdk.tool_timeout",PLAN_MODE_COMMAND_BLOCKED:"sdk.plan_mode_command_blocked"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}}});import{mkdirSync as lT,readFileSync as pT,statSync as iT,writeFileSync as rT}from"node:fs";import{dirname as aT}from"node:path";import{CONFIGURABLE_MODEL_TOOL_NAMES as PB}from"@cline/shared";import{resolveGlobalSettingsPath as fB}from"@cline/shared/storage";import{z as u0}from"zod";function X9(){return W9.parse({})}function tT(){J9=void 0}function eT($){if($.disabledTools)Object.freeze($.disabledTools);if($.tools){for(let Z of Object.values($.tools))Object.freeze(Z);Object.freeze($.tools)}if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function $E($){let Z;try{Z=pT($,"utf8")}catch{return X9()}try{let Q=W9.safeParse(JSON.parse(Z));return Q.success?Q.data:X9()}catch{return X9()}}function ZE(){let $=fB(),Z=iT($,{throwIfNoEntry:!1}),Q=Z?.mtimeMs??0,X=Z?.size??0,J=J9;if(J&&J.path===$&&J.mtimeMs===Q&&J.size===X)return J;let W=eT(Z?$E($):X9());return J9={path:$,mtimeMs:Q,size:X,value:W},J9}function W0(){return ZE().value}function d0($,Z={}){let Q=fB(),X=W0();lT(aT(Q),{recursive:!0});let J=W9.parse($);if(!X.telemetryOptOut&&J.telemetryOptOut)PV(Z.telemetry);rT(Q,`${JSON.stringify(J,null,2)}
2
2
  `,"utf8"),tT()}function z3(){return W0().telemetryOptOut}function QE($,Z={}){d0({...W0(),telemetryOptOut:$},Z)}function XE(){return W0().autoUpdateEnabled}function JE($,Z={}){d0({...W0(),autoUpdateEnabled:$},Z)}function WE(){return W0().compactionStrategy??"agentic"}function jE($){d0({...W0(),compactionStrategy:$})}function YE(){let $=W0();if($.compactionEnabled===!1)return"off";return $.compactionStrategy}function VE($){let Z=W0();if($==="off"){d0({...Z,compactionEnabled:!1});return}d0({...Z,compactionEnabled:!0,compactionStrategy:$})}function BE(){return W0().planActMode}function KE($){d0({...W0(),planActMode:$})}function GE(){return W0().toolAutoApprove}function HE(){return W0().tuiTheme}function UE($){d0({...W0(),tuiTheme:$})}function FE($){d0({...W0(),toolAutoApprove:$})}function s1($){return new Set($??W0().disabledTools??[])}function j9($){return new Set($??W0().disabledPlugins??[])}function LE($){if(O3($))return!E8($);return s1().has($)}function O3($){return PB.includes($)}function wB(){return W0().tools??{}}function E8($){return wB()[$]?.enabled===!0}function SB($,Z){let Q=W0();d0({...Q,tools:{...Q.tools,[$]:{enabled:Z}}})}function N3($){if(O3($)){let J=E8($);return SB($,!J),J}let Z=W0(),Q=new Set(Z.disabledTools??[]),X=Q.has($);if(X)Q.delete($);else Q.add($);return d0({...Z,disabledTools:[...Q]}),!X}function bB($,Z){let Q=[...new Set($.map((j)=>j.trim()).filter(Boolean))];if(Q.length===0)return;let X=W0(),J=s1(X.disabledTools),W={...X.tools};for(let j of Q){if(O3(j)){W[j]={enabled:!Z};continue}if(Z)J.add(j);else J.delete(j)}d0({...X,disabledTools:[...J],tools:W})}function kB($,Z){return bB([$],Z),Z}function DE($){return j9().has($)}function q3($,Z){let Q=$.trim();if(!Q)return;let X=W0(),J=j9(X.disabledPlugins);if(Z)J.add(Q);else J.delete(Q);d0({...X,disabledPlugins:[...J]})}function A3($,Z){let Q=j9(Z);if(Q.size===0)return[...$];return $.filter((X)=>!Q.has(X))}function T$($,Z){let Q=s1(Z);if(Q.size===0)return[...$];return $.filter((X)=>!Q.has(X.name))}function T3($,Z){if(!$||$.length===0)return $;let Q=s1(Z);if(Q.size===0)return $;return $.map((X)=>{if(!X.setup)return X;return{...X,setup:(J,W)=>X.setup?.({...J,registerTool:(j)=>{if(!Q.has(j.name))J.registerTool(j)}},W)}})}var CB,nT,oT,sT,W9,J9;var M1=j2(()=>{_0();CB=u0.preprocess(($)=>Array.isArray($)?$.filter((Z)=>typeof Z==="string").map((Z)=>Z.trim()).filter(Boolean):void 0,u0.array(u0.string()).optional()).transform(($)=>{if(!$)return;let Z=[...new Set($)].sort((Q,X)=>Q.localeCompare(X));return Z.length>0?Z:void 0}),nT=u0.enum(["basic","agentic"]).catch("agentic"),oT=u0.partialRecord(u0.enum(PB),u0.object({enabled:u0.boolean()}).strip()).optional(),sT=u0.enum(["plan","act"]),W9=u0.object({telemetryOptOut:u0.boolean().default(!1).catch(!1),autoUpdateEnabled:u0.boolean().default(!0).catch(!0),compactionStrategy:nT.optional(),compactionEnabled:u0.boolean().optional().catch(void 0),planActMode:sT.optional().catch(void 0),toolAutoApprove:u0.boolean().optional().catch(void 0),tuiTheme:u0.string().optional().catch(void 0),disabledTools:CB.optional(),tools:oT,disabledPlugins:CB.optional()}).strip().transform(($)=>{let Z={autoUpdateEnabled:$.autoUpdateEnabled,telemetryOptOut:$.telemetryOptOut};if($.compactionStrategy)Z.compactionStrategy=$.compactionStrategy;if($.compactionEnabled!==void 0)Z.compactionEnabled=$.compactionEnabled;if($.planActMode)Z.planActMode=$.planActMode;if($.toolAutoApprove!==void 0)Z.toolAutoApprove=$.toolAutoApprove;if($.tuiTheme?.trim())Z.tuiTheme=$.tuiTheme.trim();if($.disabledTools?.length)Z.disabledTools=$.disabledTools;if($.tools&&Object.keys($.tools).length>0)Z.tools=$.tools;if($.disabledPlugins?.length)Z.disabledPlugins=$.disabledPlugins;return Z})});var ZH={};AQ(ZH,{normalizeUserMessage:()=>iP,buildInitialUserContent:()=>pP});async function pP($,Z,Q,X){let J=rP(Z),W=await nP(Q,X);if(J.length===0&&!W)return $;let j=[{type:"text",text:$},...J];if(W)j.push(...W);return j}function iP($){if($==null)return"";if(typeof $==="string")return $;let Z=$.content;if(typeof Z==="string")return Z;if(!Array.isArray(Z))return"";let Q=[];for(let X of Z)if(X&&typeof X==="object"&&X.type==="text"){let J=X.text;if(typeof J==="string")Q.push(J)}return Q.join(`
3
3
  `)}function rP($){if(!$||$.length===0)return[];let Z=[];for(let Q of $){let X=aP(Q);if(X)Z.push(X)}return Z}function aP($){let Z=$.trim();if(!Z)return;let Q=Z.match(/^data:([^;,]+);base64,(.+)$/);if(Q){let X=Q[1],J=Q[2];if(!X||!J)return;return{type:"image",mediaType:X,data:J}}return{type:"image",mediaType:"image/png",data:Z}}async function nP($,Z){if(!$||$.length===0)return;let Q=Z??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),X=await Promise.all($.map(async(J)=>{let W=J.replace(/\\/g,"/");try{let j=await Q(J);return{type:"file",path:W,content:j}}catch(j){let Y=j instanceof Error?j.message:String(j);return{type:"file",path:W,content:`Error fetching content: ${Y}`}}}));if(X.length===0)return;return X}function df($){return $.trim().split(/[\\/]/).at(-1)?.toLowerCase().replace(/\.(?:cmd|exe)$/i,"")??""}function lf($){if(df($.command)!=="npx")return;if(Object.keys($.env??{}).length>0)return;let Z=$.args??[],Q=0;while(Z[Q]==="-y"||Z[Q]==="--yes")Q+=1;if(!/^mcp-remote(?:@[^/\s]+)?$/.test(Z[Q]??""))return;let X=Z[Q+1];if(!X||Z.length!==Q+2)return;try{let J=new URL(X);if(J.protocol!=="http:"&&J.protocol!=="https:")return;return{type:"streamableHttp",url:J.toString()}}catch{return}}function V7($){return $.type==="stdio"?lf($)??$:$}var dX={};AQ(dX,{updateMcpSettingsFileSync:()=>x1,updateMcpSettingsFile:()=>G7,updateMcpServerOAuthStateAsync:()=>X4,updateMcpServerOAuthState:()=>cX,setMcpServerDisabled:()=>Z4,resolveMcpServerRegistrations:()=>y1,resolveMcpServerRegistration:()=>mX,resolveDefaultMcpSettingsPath:()=>V0,registerMcpServersFromSettingsFile:()=>J4,parseMcpServerRegistration:()=>H7,normalizeMcpServerOAuthState:()=>y6,loadMcpSettingsFile:()=>$4,listMcpServerOAuthStatuses:()=>uX,hasMcpSettingsFile:()=>E2,getMcpServerOAuthStatus:()=>U7,getMcpServerOAuthState:()=>Q4,McpSettingsUpdateSkippedError:()=>B7,McpSettingsMutatorPurityError:()=>k6,McpSettingsLockTimeoutError:()=>x6,McpOAuthClientChangedError:()=>y$});import{randomUUID as pf}from"node:crypto";import{existsSync as iH,mkdirSync as bX,readFileSync as rH,renameSync as yX,rmdirSync as rf,rmSync as kX,statSync as af,unlinkSync as aH,writeFileSync as nH}from"node:fs";import{dirname as oH,join as pH}from"node:path";import{setTimeout as nf}from"node:timers/promises";import{isMcpTimeoutConfigured as of,resolveMcpTimeoutSeconds as sf}from"@cline/shared";import{resolveMcpSettingsPath as tf}from"@cline/shared/storage";import{z as y}from"zod";function xX($){if(!$)return;if($==="http")return"streamableHttp";return $}function V0(){return tf()}function Vw($,Z){bX(oH($),{recursive:!0});let Q=`${$}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{nH(Q,Z,{encoding:"utf8",flag:"wx"}),yX(Q,$)}catch(X){try{aH(Q)}catch{}throw X}}function Kw($){Atomics.wait(Bw,0,0,$)}function Gw($){return`${$}.lock`}function QU(){return`${process.pid}.${Date.now()}.${pf()}`}function XU($,Z){bX(oH($),{recursive:!0});let Q=`${$}.tmp.${Z}`;kX(Q,{recursive:!0,force:!0}),bX(Q,{recursive:!0}),nH(pH(Q,`owner.${Z}`),Z,{encoding:"utf8",flag:"wx"});try{return yX(Q,$),{lockDir:$,ownerFile:pH($,`owner.${Z}`)}}catch(X){if(kX(Q,{recursive:!0,force:!0}),iH($))return;throw X}}function JU($,Z){let Q;try{Q=Date.now()-af($).mtimeMs}catch(J){if(J.code==="ENOENT")return;throw J}if(Q<vX)return;Z.logger?.log(`[mcp-settings] Stale lock directory at ${$} (age ${Q}ms); reclaiming.`,{severity:"warn"});let X=`${$}.stale.${QU()}`;try{yX($,X)}catch(J){if(J.code==="ENOENT")return;throw J}kX(X,{recursive:!0,force:!0})}function Hw($){try{aH($.ownerFile)}catch(Z){if(Z.code!=="ENOENT")throw Z}try{rf($.lockDir)}catch(Z){let Q=Z.code;if(Q!=="ENOENT"&&Q!=="ENOTEMPTY"&&Q!=="EEXIST")throw Z}}function WU($){let Z=Gw($);if(K7.has(Z))throw Error(`Reentrant MCP settings update for ${$}. Keep mutators pure: compute values up front and do not call back into the settings API.`);return{lockDir:Z,token:QU()}}function Uw($,Z){let{lockDir:Q,token:X}=WU($),J=Z.timeoutMs??vX,W=Date.now();while(!0){let j=XU(Q,X);if(j)return K7.add(Q),j;if(Date.now()-W>J)throw new x6(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);JU(Q,Z),Kw(ZU)}}async function Fw($,Z){let{lockDir:Q,token:X}=WU($),J=Z.timeoutMs??vX,W=Date.now();while(!0){let j=XU(Q,X);if(j)return K7.add(Q),j;if(Date.now()-W>J)throw new x6(`Timed out waiting for MCP settings lock at ${Q} after ${J}ms.`);JU(Q,Z),await nf(ZU)}}function jU($,Z,Q){try{let X=Lw(Z),J=Dw(X,Q);return Vw(Z,`${JSON.stringify(X,null,2)}
4
- `),J}finally{K7.delete($.lockDir),Hw($)}}function x1($,Z,Q={}){let X=Uw($,Q);return jU(X,$,Z)}async function G7($,Z,Q={}){let X=await Fw($,Q);return jU(X,$,Z)}function Lw($){let Z=_w($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function Dw($,Z){let Q=JSON.stringify($),X=JSON.parse(Q),J=Z(X),W=JSON.stringify(X),j=Z($);if(JSON.stringify($)!==W)throw new k6("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(j)!==JSON.stringify(J))throw new k6("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return j}function YU($){let Z=rH($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(X){let J=X instanceof Error?X.message:String(X);throw Error(`Failed to parse MCP settings JSON at "${$}": ${J}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function _w($){try{return YU($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function gX($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function zw($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function $4($={}){let Z=$.filePath??V0(),Q=rH(Z,"utf8"),X;try{X=JSON.parse(Q)}catch(W){let j=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${Z}": ${j}`)}let J=Yw.safeParse(X);if(!J.success){let W=J.error.issues.map((j)=>{let Y=j.path.join(".");return Y?`${Y}: ${j.message}`:j.message}).join("; ");throw Error(`Invalid MCP settings at "${Z}": ${W}`)}return J.data}function y6($){if(!$)return;let Z={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{},...$.authorizationRequired?{authorizationRequired:!0}:{}};return Object.keys(Z).length>0?Z:void 0}function Ow($){if($===void 0)return;let Z=IX.safeParse($);if(!Z.success)return;return y6(Z.data)}function E2($={}){let Z=$.filePath??V0();return iH(Z)}function y1($={}){let Z=$4($);return Object.entries(Z.mcpServers).map(([Q,X])=>VU(Q,X))}function VU($,Z){return{name:$,transport:V7(Z.transport),disabled:Z.disabled,timeoutSeconds:Z.timeoutSeconds,metadata:Z.metadata,oauthClient:Z.oauthClient,oauth:Z.oauth}}function H7($,Z){let Q=$U.safeParse(Z);if(!Q.success){let X=Q.error.issues.map((J)=>{let W=J.path.join(".");return W?`${W}: ${J.message}`:J.message}).join("; ");throw Error(`Invalid MCP server "${$}": ${X}`)}return VU($,Q.data)}function mX($,Z={}){let Q=Z.filePath??V0(),J=YU(Q).mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))return;let W=gX(J,$);return W?H7($,W):void 0}function Z4($){let Z=$.filePath??V0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");x1(Z,(X)=>{let J=X.mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let W={...J},j=gX(W,Q);if(!j)throw Error(`Unknown MCP server: ${Q}`);let Y={...j};if($.disabled)Y.disabled=!0;else delete Y.disabled;zw(W,Q,Y),X.mcpServers=W})}function Q4($,Z={}){let Q=$4(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return y6(Q.mcpServers[$]?.oauth)}function BU($,Z,Q){return(X)=>{let J=X.mcpServers,W=gX(J,$);if(!W)throw Error(`Unknown MCP server: ${$}`);if(Q.expectedOAuthClient!==void 0){let V=hX.safeParse(W.oauthClient),B=V.success?V.data:void 0,K=Q.expectedOAuthClient??void 0;if(B?.clientId!==K?.clientId||B?.clientSecret!==K?.clientSecret)throw new y$($)}let j=Ow(W.oauth)??{},Y=y6(Z(j));if(Y)W.oauth=Y;else delete W.oauth;return Y??{}}}function cX($,Z,Q={}){let X=Q.filePath??V0();return x1(X,BU($,Z,Q))}async function X4($,Z,Q={}){let X=Q.filePath??V0();return G7(X,BU($,Z,Q))}function uX($={}){return y1($).map(U7).sort((Q,X)=>Q.serverName.localeCompare(X.serverName))}function U7($){let Z=$.transport.type!=="stdio",Q=$.oauth?.tokens?.access_token,X=$.oauth?.clientInformation,J=$.oauthClient?X?.client_id===$.oauthClient.clientId&&X?.client_secret===$.oauthClient.clientSecret:!0,W=Z&&J&&typeof Q==="string"&&Q.trim().length>0;return{serverName:$.name,oauthSupported:Z,oauthConfigured:W,authorizationRequired:Z&&!W&&$.oauth?.authorizationRequired===!0,lastError:$.oauth?.lastError,lastAuthenticatedAt:$.oauth?.lastAuthenticatedAt}}async function J4($,Z={}){let Q=y1(Z);for(let X of Q)await $.registerServer(X);return Q}var e8,sH,tH,IX,hX,ef,$w,Zw,Qw,Xw,Jw,eH,Ww,jw,$U,Yw,B7,y$,x6,k6,vX=1e4,ZU=25,Bw,K7;var W4=j2(()=>{e8=y.record(y.string(),y.string()),sH=y.record(y.string(),y.unknown()),tH=y.preprocess(($)=>of($)?sf($):void 0,y.number().optional()),IX=y.object({clientInformation:y.record(y.string(),y.unknown()).optional(),tokens:y.record(y.string(),y.unknown()).optional(),codeVerifier:y.string().optional(),discoveryState:y.record(y.string(),y.unknown()).optional(),redirectUrl:y.string().url().optional(),lastError:y.string().optional(),lastAuthenticatedAt:y.number().int().positive().optional(),authorizationRequired:y.boolean().optional()}).strip(),hX=y.object({clientId:y.string().min(1),clientSecret:y.string().min(1).optional()}).strip(),ef=y.object({type:y.literal("stdio"),command:y.string().min(1),args:y.array(y.string()).optional(),cwd:y.string().min(1).optional(),env:e8.optional()}),$w=y.object({type:y.literal("sse"),url:y.string().url(),headers:e8.optional()}),Zw=y.object({type:y.literal("streamableHttp"),url:y.string().url(),headers:e8.optional()}),Qw=y.discriminatedUnion("type",[ef,$w,Zw]),Xw=y.object({transport:Qw,disabled:y.boolean().optional(),timeout:tH,metadata:sH.optional(),oauthClient:hX.optional(),oauth:IX.optional()}).transform(($)=>({transport:$.transport,disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauthClient:$.oauthClient,oauth:$.oauth})),Jw=y.enum(["stdio","sse","http","streamableHttp"]).optional(),eH=y.object({type:y.enum(["stdio","sse","streamableHttp"]).optional(),transportType:Jw,disabled:y.boolean().optional(),timeout:tH,metadata:sH.optional(),oauthClient:hX.optional(),oauth:IX.optional()});Ww=eH.extend({command:y.string().min(1),args:y.array(y.string()).optional(),cwd:y.string().min(1).optional(),env:e8.optional()}).superRefine(($,Z)=>{let Q=$.type??xX($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:y.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauthClient:$.oauthClient,oauth:$.oauth})),jw=eH.extend({url:y.string().url(),headers:e8.optional()}).superRefine(($,Z)=>{let Q=$.type??xX($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:y.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??xX($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauthClient:$.oauthClient,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauthClient:$.oauthClient,oauth:$.oauth}}),$U=y.union([Xw,Ww,jw]),Yw=y.object({mcpServers:y.record(y.string(),$U)}).passthrough();B7=class B7 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};y$=class y$ extends Error{constructor($){super(`OAuth client configuration changed while authorizing MCP server "${$}". Start authorization again.`);this.name="McpOAuthClientChangedError"}};x6=class x6 extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};k6=class k6 extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};Bw=new Int32Array(new SharedArrayBuffer(4)),K7=new Set});import{existsSync as qy,mkdirSync as Ay,readFileSync as Ty,writeFileSync as Ey}from"node:fs";import{resolve as My}from"node:path";import{resolveSessionDataDir as Ry}from"@cline/shared/storage";import{nanoid as Cy}from"nanoid";import*as Py from"node-machine-id";function v4(){if(!qL)NL=AL(),qL=!0;return NL??TL()}function D1($){let Z=$?.trim();if(Z)return Z;let Q=AL();if(Q)return Q;return TL()}function wy(){let $=Py;return $.machineIdSync??$.default?.machineIdSync}function AL(){try{let $=wy();if(!$)return;return $().trim()||void 0}catch{return}}function TL(){let $=Ry(),Z=My($,fy);try{if(qy(Z)){let X=Ty(Z,"utf8").trim();if(X.length>0)return X}}catch{}let Q=`cl-${Cy()}`;try{Ay($,{recursive:!0}),Ey(Z,Q,"utf8")}catch{}return Q}var fy="machine-id",NL,qL=!1;var h2=()=>{};class H5{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,Z){if(!this.isEnabled())return;this.emitLog($,Z,!1)}emitRequired($,Z){this.emitLog($,Z,!0)}recordCounter($,Z,Q,X,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let W=this.counters.get($);if(!W)W=this.meter.createCounter($,X?{description:X}:void 0),this.counters.set($,W);W.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,X,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let W=this.histograms.get($);if(!W)W=this.meter.createHistogram($,X?{description:X}:void 0),this.histograms.set($,W);W.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,X,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let W=this.buildAttributes(Q),j=JSON.stringify(W),Y=this.gaugeValues.get($);if(Z===null){if(Y){if(Y.delete(j),Y.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=Y;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let B=this.meter.createObservableGauge($,X?{description:X}:void 0);B.addCallback((K)=>{for(let G of this.snapshotGaugeSeries($))K.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set($,B)}V.set(j,{value:Z,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($,Z,Q){if(!this.logger)return;let X=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:X})}buildAttributes($,Z=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...Z?{_required:!0}:{}}}snapshotGaugeSeries($){let Z=this.gaugeValues.get($);if(!Z)return[];return Array.from(Z.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,Z="",Q=new WeakSet,X=0){if(!$)return{};let J={},W=100,j=10;for(let[Y,V]of Object.entries($)){if(Y==="__proto__"||Y==="constructor"||Y==="prototype")continue;let B=Z?`${Z}.${Y}`:Y;if(V===null||V===void 0){J[B]=String(V);continue}if(Array.isArray(V)){let K=V.length>W?V.slice(0,W):V;try{J[B]=JSON.stringify(K)}catch{J[B]="[UnserializableArray]"}if(V.length>W)J[`${B}_truncated`]=!0,J[`${B}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){J[B]=V.toISOString();continue}if(V instanceof Error){J[B]=V.message;continue}if(Q.has(V)){J[B]="[Circular]";continue}if(X>=j){J[B]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(J,this.flattenProperties(V,B,Q,X+1));continue}if(Nc(V)){J[B]=V;continue}try{J[B]=JSON.stringify(V)}catch{J[B]=String(V)}}return J}}function Nc($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class IZ{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,Z){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:Z})}emitRequired($,Z){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:Z})}recordCounter($,Z,Q,X,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:X,required:J===!0})}recordHistogram($,Z,Q,X,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:X,required:J===!0})}recordGauge($,Z,Q,X,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:X,required:J===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class U5{adapters;metadata;distinctId;deviceId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new IZ({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.deviceId=$.deviceId??v4(),this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let Z=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,Z)}captureRequired($,Z){let Q=this.buildAttributes(Z);for(let X of this.adapters)X.emitRequired($,Q)}recordCounter($,Z,Q,X,J=!1){let W=this.buildAttributes(Q);for(let j of this.adapters)j.recordCounter($,Z,W,X,J)}recordHistogram($,Z,Q,X,J=!1){let W=this.buildAttributes(Q);for(let j of this.adapters)j.recordHistogram($,Z,W,X,J)}recordGauge($,Z,Q,X,J=!1){let W=this.buildAttributes(Q);for(let j of this.adapters)j.recordGauge($,Z,W,X,J)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{},device_id:this.deviceId}}}var vj=j2(()=>{h2()});import{metrics as qc,trace as Ac}from"@opentelemetry/api";import{logs as Tc}from"@opentelemetry/api-logs";import{OTLPLogExporter as Ec}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as Mc}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as Rc}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as Cc}from"@opentelemetry/resources";import{BatchLogRecordProcessor as Pc,ConsoleLogRecordExporter as fc,LoggerProvider as wc}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as Sc,MeterProvider as bc,PeriodicExportingMetricReader as jz}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as kc,ConsoleSpanExporter as xc,SimpleSpanProcessor as yc}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as Ic}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as hc,ATTR_SERVICE_VERSION as vc}from"@opentelemetry/semantic-conventions";class Yz{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,Z){this.resolveProperties(Z)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class F5{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=Cc({[hc]:$.serviceName??"cline",...$.serviceVersion?{[vc]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)qc.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)Tc.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return Ac.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new H5({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new U5({...$,adapters:[Z],distinctId:D1($.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider($){let Z=gj(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),X=Math.min(30000,Math.floor(Q*0.8)),J=Z.map((W)=>cc(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:X})).filter((W)=>W!==null);if(J.length===0)return null;return new bc({resource:$,readers:J})}createTracerProvider($){let Z=gj(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,X=this.options.otlpTracesHeaders??this.options.otlpHeaders,J=[];for(let W of Z){let j=mc(W,{endpoint:Q,headers:X,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(j)J.push(j)}if(J.length===0)return null;return new Ic({resource:$,spanProcessors:J})}createLoggerProvider($){let Z=gj(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((X)=>{let J=gc(X,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new Pc(J,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((X)=>X!==null);if(Q.length===0)return null;return new wc({resource:$,processors:Q})}}function hZ($){let Z=new F5($),Q=Z.createTelemetryService($),X=()=>{Q.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion})};if(!$.deferProviderCreatedEvent)X();return{provider:Z,telemetry:Q,emitProviderCreated:X}}function d2($){if(z3())return{telemetry:new Yz($)};if($.enabled!==!0)return{telemetry:new U5({...$,distinctId:D1($.distinctId)})};return hZ($)}function vZ($){let{telemetry:Z,provider:Q,emitProviderCreated:X}=d2($);return{telemetry:Z,provider:Q,flush:async()=>{let j=Q;if(j&&typeof j.forceFlush==="function")try{await j.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])},...$.deferProviderCreatedEvent&&X?{emitProviderCreated:X}:{}}}function gj($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function gc($,Z){if($==="console")return new fc;if(!Z.endpoint)return null;let Q=mj(Z.endpoint,"/v1/logs");return new Ec({url:Q,headers:Z.headers})}function mc($,Z){if($==="console")return new yc(new xc);if(!Z.endpoint)return null;let Q=mj(Z.endpoint,"/v1/traces");return new kc(new Rc({url:Q,headers:Z.headers}))}function cc($,Z){if($==="console")return new jz({exporter:new Sc,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=mj(Z.endpoint,"/v1/metrics");return new jz({exporter:new Mc({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function mj($,Z){let Q=new URL($),X=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=X.endsWith(Z)?X:`${X}${Z}`,Q.toString()}var gZ=j2(()=>{M1();h2();vj()});var NN={};AQ(NN,{resolveCoreDistinctId:()=>D1,resolveCoreDeviceId:()=>v4,createOpenTelemetryTelemetryService:()=>hZ,createConfiguredTelemetryService:()=>d2,createConfiguredTelemetryHandle:()=>vZ,OpenTelemetryProvider:()=>F5,OpenTelemetryAdapter:()=>H5});var QQ=j2(()=>{h2();gZ()});import*as sY0 from"@cline/llms";import{ClineFreeModelLimitError as eY0,ClineNotSubscribedError as $V0,ClineOrgIndividualInferenceSubscriptionError as ZV0,ClinePassLimitError as QV0,extractClineFreeModelLimitResetTime as XV0,extractClinePassLimitMessage as JV0,getClineNotSubscribedMessage as WV0,getClineOrgIndividualInferenceSubscriptionMessage as jV0,getClinePassSubscriptionUrl as YV0,isClineFreeModelLimitError as VV0,isClineFreeModelLimitMessage as BV0,isClineModelNotFoundMessage as KV0,isClineNotSubscribedError as GV0,isClineNotSubscribedMessage as HV0,isClineOrgIndividualInferenceSubscriptionError as UV0,isClineOrgIndividualInferenceSubscriptionMessage as FV0,isClinePassLimitError as LV0,isClinePassLimitMessage as DV0}from"@cline/llms";import{buildClineSystemPrompt as zV0,buildSdkErrorProperties as OV0,ContributionRegistry as NV0,captureSdkError as qV0,createClineTelemetryServiceConfig as AV0,createClineTelemetryServiceMetadata as TV0,createContributionRegistry as EV0,createTool as MV0,emptyWorkspaceManifest as RV0,FEATURE_FLAGS as CV0,FeatureFlagDefaultValue as PV0,formatDisplayUserInput as fV0,noopBasicLogger as wV0,normalizeSdkError as SV0,normalizeUserInput as bV0,parseUserCommandEnvelope as kV0,registerDisposable as xV0,SDK_ERROR_TELEMETRY_EVENT as yV0,stripUtf8Bom as IV0}from"@cline/shared";export*from"@cline/shared/storage";function kq($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function AV($,Z,Q){let X=kq(Q);if(X)return X;let J=Z.trim();if(J){let W=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${W}`}return`Cline account request failed with status ${$}`}class TQ{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let Z=$.apiBaseUrl.trim();if(!Z)throw Error("apiBaseUrl is required");this.apiBaseUrl=Z,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let Z=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(Z)}/balance`)}async fetchUsageTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/usages`)).items??[]}async fetchPaymentTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let Z=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)Z.searchParams.set("type",$.type);return this.request(`${Z.pathname}${Z.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}`)}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/balance`)}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(Z,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let Z=$?.trim();if(Z)return Z;let X=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(X)return X;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let j=(await this.fetchUserOrganizations()).find((Y)=>Y.organizationId===$)?.memberId;if(!j?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return j}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let X=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,W=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let j=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...X??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:J.signal});if(j.status===204||Z?.expectNoContent){if(!j.ok)throw Error(`Cline account request failed with status ${j.status}`);return}let Y=await j.text(),V;if(Y.trim())try{V=JSON.parse(Y)}catch{if(!j.ok)throw Error(AV(j.status,Y,void 0));throw Error("Cline account response was not valid JSON")}if(!j.ok)throw Error(AV(j.status,Y,V));if(typeof V==="object"&&V!==null){let B=V;if(typeof B.success==="boolean"){if(!B.success)throw Error(B.error||"Cline account request failed");return B.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(W)}}}function TV($){return $.action==="clineAccount"}async function EV($,Z){switch($.operation){case"fetchMe":return Z.fetchMe();case"fetchBalance":return Z.fetchBalance($.userId);case"fetchUsageTransactions":return Z.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return Z.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return Z.fetchUserOrganizations();case"fetchOrganizationBalance":return Z.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return Z.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await Z.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return Z.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class EQ{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:Z})}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:Z,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}function y5($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((X)=>{$.onOpenUrlError?.({url:Z,error:X})})}catch(X){$.onOpenUrlError?.({url:Z,error:X})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}import{decodeJwtPayload as ZA,getClineEnvironmentConfig as cQ}from"@cline/shared";import{createHash as xq}from"node:crypto";var MV;function yq($){MV=$}function a0($){if(typeof $!=="string"||$.length===0)return"unset";return xq("sha256").update($).digest("hex").slice(0,8)}function j0($){try{MV?.debug($)}catch{}}_0();function sq(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function n1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",X=$.timeoutMs??300000,J=$.successHtml??tq,W=sq(),j=!1,Y=null,V=null,B=null,K=(U)=>{if(j)return;j=!0,W.resolve(U)},G=()=>{if(Y)clearTimeout(Y),Y=null;let U=B;if(B=null,V)V.close(),V.closeAllConnections?.(),V=null;if(U!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:U})).catch(()=>{})},H=async()=>{return Y=setTimeout(()=>{G(),K(null)},X),W.promise};for(let U of $.ports){let F=Z.createServer((D,z)=>{try{let _=new URL(D.url||"",`http://${Q}:${U}`);if(_.pathname!==$.callbackPath){z.statusCode=404,z.end("Not found");return}let O={url:_,code:_.searchParams.get("code")??void 0,state:_.searchParams.get("state")??void 0,provider:_.searchParams.get("provider")??void 0,error:_.searchParams.get("error")??void 0};if(O.error){z.statusCode=400,z.end(`Authentication failed: ${O.error}`),G(),K(O);return}if(!O.code){z.statusCode=400,z.end("Missing authorization code");return}if($.expectedState&&O.state!==$.expectedState){z.statusCode=400,z.end("State mismatch");return}z.statusCode=200,z.setHeader("Content-Type","text/html; charset=utf-8"),z.end(J),G(),K(O)}catch{z.statusCode=500,z.end("Internal error")}}),L=await new Promise((D)=>{let z=(_)=>{F.off("error",z),D({bound:!1,error:_})};F.once("error",z),F.listen(U,Q,()=>{F.off("error",z),V=F,D({bound:!0})})});if(L.error){if(L.error.code==="EADDRINUSE")continue;throw G(),L.error}if(L.bound){B=U;let D=`http://${Q}:${U}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:U,callbackUrl:D})).catch(()=>{});return{callbackUrl:D,waitForCallback:H,cancelWait:()=>{G(),K(null)},close:()=>{G(),K(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var tq=`<!DOCTYPE html>
4
+ `),J}finally{K7.delete($.lockDir),Hw($)}}function x1($,Z,Q={}){let X=Uw($,Q);return jU(X,$,Z)}async function G7($,Z,Q={}){let X=await Fw($,Q);return jU(X,$,Z)}function Lw($){let Z=_w($);if(!Z.mcpServers||typeof Z.mcpServers!=="object"||Array.isArray(Z.mcpServers))Z.mcpServers={};return Z}function Dw($,Z){let Q=JSON.stringify($),X=JSON.parse(Q),J=Z(X),W=JSON.stringify(X),j=Z($);if(JSON.stringify($)!==W)throw new k6("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(j)!==JSON.stringify(J))throw new k6("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return j}function YU($){let Z=rH($,"utf8"),Q;try{Q=JSON.parse(Z)}catch(X){let J=X instanceof Error?X.message:String(X);throw Error(`Failed to parse MCP settings JSON at "${$}": ${J}`)}if(!Q||typeof Q!=="object"||Array.isArray(Q))throw Error(`Invalid MCP settings at "${$}": expected object.`);return Q}function _w($){try{return YU($)}catch(Z){if(Z.code==="ENOENT")return{};throw Z}}function gX($,Z){if(!Object.hasOwn($,Z))return;let Q=$[Z];if(!Q||typeof Q!=="object"||Array.isArray(Q))return;return Q}function zw($,Z,Q){Object.defineProperty($,Z,{value:Q,enumerable:!0,configurable:!0,writable:!0})}function $4($={}){let Z=$.filePath??V0(),Q=rH(Z,"utf8"),X;try{X=JSON.parse(Q)}catch(W){let j=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${Z}": ${j}`)}let J=Yw.safeParse(X);if(!J.success){let W=J.error.issues.map((j)=>{let Y=j.path.join(".");return Y?`${Y}: ${j.message}`:j.message}).join("; ");throw Error(`Invalid MCP settings at "${Z}": ${W}`)}return J.data}function y6($){if(!$)return;let Z={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{},...$.authorizationRequired?{authorizationRequired:!0}:{}};return Object.keys(Z).length>0?Z:void 0}function Ow($){if($===void 0)return;let Z=IX.safeParse($);if(!Z.success)return;return y6(Z.data)}function E2($={}){let Z=$.filePath??V0();return iH(Z)}function y1($={}){let Z=$4($);return Object.entries(Z.mcpServers).map(([Q,X])=>VU(Q,X))}function VU($,Z){return{name:$,transport:V7(Z.transport),disabled:Z.disabled,timeoutSeconds:Z.timeoutSeconds,metadata:Z.metadata,oauthClient:Z.oauthClient,oauth:Z.oauth}}function H7($,Z){let Q=$U.safeParse(Z);if(!Q.success){let X=Q.error.issues.map((J)=>{let W=J.path.join(".");return W?`${W}: ${J.message}`:J.message}).join("; ");throw Error(`Invalid MCP server "${$}": ${X}`)}return VU($,Q.data)}function mX($,Z={}){let Q=Z.filePath??V0(),J=YU(Q).mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))return;let W=gX(J,$);return W?H7($,W):void 0}function Z4($){let Z=$.filePath??V0(),Q=$.name.trim();if(!Q)throw Error("MCP server settings toggle requires a server name.");x1(Z,(X)=>{let J=X.mcpServers;if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${Z}": mcpServers must be an object.`);let W={...J},j=gX(W,Q);if(!j)throw Error(`Unknown MCP server: ${Q}`);let Y={...j};if($.disabled)Y.disabled=!0;else delete Y.disabled;zw(W,Q,Y),X.mcpServers=W})}function Q4($,Z={}){let Q=$4(Z);if(!Object.hasOwn(Q.mcpServers,$))return;return y6(Q.mcpServers[$]?.oauth)}function BU($,Z,Q){return(X)=>{let J=X.mcpServers,W=gX(J,$);if(!W)throw Error(`Unknown MCP server: ${$}`);if(Q.expectedOAuthClient!==void 0){let V=hX.safeParse(W.oauthClient),B=V.success?V.data:void 0,K=Q.expectedOAuthClient??void 0;if(B?.clientId!==K?.clientId||B?.clientSecret!==K?.clientSecret)throw new y$($)}let j=Ow(W.oauth)??{},Y=y6(Z(j));if(Y)W.oauth=Y;else delete W.oauth;return Y??{}}}function cX($,Z,Q={}){let X=Q.filePath??V0();return x1(X,BU($,Z,Q))}async function X4($,Z,Q={}){let X=Q.filePath??V0();return G7(X,BU($,Z,Q))}function uX($={}){return y1($).map(U7).sort((Q,X)=>Q.serverName.localeCompare(X.serverName))}function U7($){let Z=$.transport.type!=="stdio",Q=$.oauth?.tokens?.access_token,X=$.oauth?.clientInformation,J=$.oauthClient?X?.client_id===$.oauthClient.clientId&&X?.client_secret===$.oauthClient.clientSecret:!0,W=Z&&J&&typeof Q==="string"&&Q.trim().length>0;return{serverName:$.name,oauthSupported:Z,oauthConfigured:W,authorizationRequired:Z&&!W&&$.oauth?.authorizationRequired===!0,lastError:$.oauth?.lastError,lastAuthenticatedAt:$.oauth?.lastAuthenticatedAt}}async function J4($,Z={}){let Q=y1(Z);for(let X of Q)await $.registerServer(X);return Q}var e8,sH,tH,IX,hX,ef,$w,Zw,Qw,Xw,Jw,eH,Ww,jw,$U,Yw,B7,y$,x6,k6,vX=1e4,ZU=25,Bw,K7;var W4=j2(()=>{e8=y.record(y.string(),y.string()),sH=y.record(y.string(),y.unknown()),tH=y.preprocess(($)=>of($)?sf($):void 0,y.number().optional()),IX=y.object({clientInformation:y.record(y.string(),y.unknown()).optional(),tokens:y.record(y.string(),y.unknown()).optional(),codeVerifier:y.string().optional(),discoveryState:y.record(y.string(),y.unknown()).optional(),redirectUrl:y.string().url().optional(),lastError:y.string().optional(),lastAuthenticatedAt:y.number().int().positive().optional(),authorizationRequired:y.boolean().optional()}).strip(),hX=y.object({clientId:y.string().min(1),clientSecret:y.string().min(1).optional()}).strip(),ef=y.object({type:y.literal("stdio"),command:y.string().min(1),args:y.array(y.string()).optional(),cwd:y.string().min(1).optional(),env:e8.optional()}),$w=y.object({type:y.literal("sse"),url:y.string().url(),headers:e8.optional()}),Zw=y.object({type:y.literal("streamableHttp"),url:y.string().url(),headers:e8.optional()}),Qw=y.discriminatedUnion("type",[ef,$w,Zw]),Xw=y.object({transport:Qw,disabled:y.boolean().optional(),timeout:tH,metadata:sH.optional(),oauthClient:hX.optional(),oauth:IX.optional()}).transform(($)=>({transport:$.transport,disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauthClient:$.oauthClient,oauth:$.oauth})),Jw=y.enum(["stdio","sse","http","streamableHttp"]).optional(),eH=y.object({type:y.enum(["stdio","sse","streamableHttp"]).optional(),transportType:Jw,disabled:y.boolean().optional(),timeout:tH,metadata:sH.optional(),oauthClient:hX.optional(),oauth:IX.optional()});Ww=eH.extend({command:y.string().min(1),args:y.array(y.string()).optional(),cwd:y.string().min(1).optional(),env:e8.optional()}).superRefine(($,Z)=>{let Q=$.type??xX($.transportType);if(Q&&Q!=="stdio")Z.addIssue({code:y.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauthClient:$.oauthClient,oauth:$.oauth})),jw=eH.extend({url:y.string().url(),headers:e8.optional()}).superRefine(($,Z)=>{let Q=$.type??xX($.transportType)??"sse";if(Q!=="sse"&&Q!=="streamableHttp")Z.addIssue({code:y.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??xX($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauthClient:$.oauthClient,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,timeoutSeconds:$.timeout,metadata:$.metadata,oauthClient:$.oauthClient,oauth:$.oauth}}),$U=y.union([Xw,Ww,jw]),Yw=y.object({mcpServers:y.record(y.string(),$U)}).passthrough();B7=class B7 extends Error{constructor($){super($);this.name="McpSettingsUpdateSkippedError"}};y$=class y$ extends Error{constructor($){super(`OAuth client configuration changed while authorizing MCP server "${$}". Start authorization again.`);this.name="McpOAuthClientChangedError"}};x6=class x6 extends Error{constructor($){super($);this.name="McpSettingsLockTimeoutError"}};k6=class k6 extends Error{constructor($){super($);this.name="McpSettingsMutatorPurityError"}};Bw=new Int32Array(new SharedArrayBuffer(4)),K7=new Set});import{existsSync as qy,mkdirSync as Ay,readFileSync as Ty,writeFileSync as Ey}from"node:fs";import{resolve as My}from"node:path";import{resolveSessionDataDir as Ry}from"@cline/shared/storage";import{nanoid as Cy}from"nanoid";import*as Py from"node-machine-id";function v4(){if(!qL)NL=AL(),qL=!0;return NL??TL()}function D1($){let Z=$?.trim();if(Z)return Z;let Q=AL();if(Q)return Q;return TL()}function wy(){let $=Py;return $.machineIdSync??$.default?.machineIdSync}function AL(){try{let $=wy();if(!$)return;return $().trim()||void 0}catch{return}}function TL(){let $=Ry(),Z=My($,fy);try{if(qy(Z)){let X=Ty(Z,"utf8").trim();if(X.length>0)return X}}catch{}let Q=`cl-${Cy()}`;try{Ay($,{recursive:!0}),Ey(Z,Q,"utf8")}catch{}return Q}var fy="machine-id",NL,qL=!1;var h2=()=>{};class H5{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,Z){if(!this.isEnabled())return;this.emitLog($,Z,!1)}emitRequired($,Z){this.emitLog($,Z,!0)}recordCounter($,Z,Q,X,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let W=this.counters.get($);if(!W)W=this.meter.createCounter($,X?{description:X}:void 0),this.counters.set($,W);W.add(Z,this.flattenProperties(this.buildAttributes(Q)))}recordHistogram($,Z,Q,X,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let W=this.histograms.get($);if(!W)W=this.meter.createHistogram($,X?{description:X}:void 0),this.histograms.set($,W);W.record(Z,this.flattenProperties(this.buildAttributes(Q)))}recordGauge($,Z,Q,X,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let W=this.buildAttributes(Q),j=JSON.stringify(W),Y=this.gaugeValues.get($);if(Z===null){if(Y){if(Y.delete(j),Y.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let V=Y;if(!V)V=new Map,this.gaugeValues.set($,V);if(!this.gauges.has($)){let B=this.meter.createObservableGauge($,X?{description:X}:void 0);B.addCallback((K)=>{for(let G of this.snapshotGaugeSeries($))K.observe(G.value,this.flattenProperties(G.attributes))}),this.gauges.set($,B)}V.set(j,{value:Z,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($,Z,Q){if(!this.logger)return;let X=this.flattenProperties(this.buildAttributes(Z,Q));this.logger.emit({severityText:"INFO",body:$,attributes:X})}buildAttributes($,Z=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...Z?{_required:!0}:{}}}snapshotGaugeSeries($){let Z=this.gaugeValues.get($);if(!Z)return[];return Array.from(Z.values(),(Q)=>({value:Q.value,attributes:Q.attributes?{...Q.attributes}:void 0}))}flattenProperties($,Z="",Q=new WeakSet,X=0){if(!$)return{};let J={},W=100,j=10;for(let[Y,V]of Object.entries($)){if(Y==="__proto__"||Y==="constructor"||Y==="prototype")continue;let B=Z?`${Z}.${Y}`:Y;if(V===null||V===void 0){J[B]=String(V);continue}if(Array.isArray(V)){let K=V.length>W?V.slice(0,W):V;try{J[B]=JSON.stringify(K)}catch{J[B]="[UnserializableArray]"}if(V.length>W)J[`${B}_truncated`]=!0,J[`${B}_original_length`]=V.length;continue}if(typeof V==="object"){if(V instanceof Date){J[B]=V.toISOString();continue}if(V instanceof Error){J[B]=V.message;continue}if(Q.has(V)){J[B]="[Circular]";continue}if(X>=j){J[B]="[MaxDepthExceeded]";continue}Q.add(V),Object.assign(J,this.flattenProperties(V,B,Q,X+1));continue}if(Nc(V)){J[B]=V;continue}try{J[B]=JSON.stringify(V)}catch{J[B]=String(V)}}return J}}function Nc($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class IZ{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,Z){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:Z})}emitRequired($,Z){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:Z})}recordCounter($,Z,Q,X,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:Z,attributes:Q,description:X,required:J===!0})}recordHistogram($,Z,Q,X,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:Z,attributes:Q,description:X,required:J===!0})}recordGauge($,Z,Q,X,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:Z,attributes:Q,description:X,required:J===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class U5{adapters;metadata;distinctId;deviceId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new IZ({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.deviceId=$.deviceId??v4(),this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let Z=this.buildAttributes($.properties);for(let Q of this.adapters)Q.emit($.event,Z)}captureRequired($,Z){let Q=this.buildAttributes(Z);for(let X of this.adapters)X.emitRequired($,Q)}recordCounter($,Z,Q,X,J=!1){let W=this.buildAttributes(Q);for(let j of this.adapters)j.recordCounter($,Z,W,X,J)}recordHistogram($,Z,Q,X,J=!1){let W=this.buildAttributes(Q);for(let j of this.adapters)j.recordHistogram($,Z,W,X,J)}recordGauge($,Z,Q,X,J=!1){let W=this.buildAttributes(Q);for(let j of this.adapters)j.recordGauge($,Z,W,X,J)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{},device_id:this.deviceId}}}var vj=j2(()=>{h2()});import{metrics as qc,trace as Ac}from"@opentelemetry/api";import{logs as Tc}from"@opentelemetry/api-logs";import{OTLPLogExporter as Ec}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as Mc}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as Rc}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as Cc}from"@opentelemetry/resources";import{BatchLogRecordProcessor as Pc,ConsoleLogRecordExporter as fc,LoggerProvider as wc}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as Sc,MeterProvider as bc,PeriodicExportingMetricReader as jz}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as kc,ConsoleSpanExporter as xc,SimpleSpanProcessor as yc}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as Ic}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as hc,ATTR_SERVICE_VERSION as vc}from"@opentelemetry/semantic-conventions";class Yz{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,Z){this.resolveProperties(Z)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class F5{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let Z=Cc({[hc]:$.serviceName??"cline",...$.serviceVersion?{[vc]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(Z),this.loggerProvider=this.createLoggerProvider(Z),this.tracerProvider=this.createTracerProvider(Z),this.meterProvider)qc.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)Tc.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",Z){return Ac.getTracer($,Z??this.options.serviceVersion)}createAdapter($){return new H5({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let Z=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new U5({...$,adapters:[Z],distinctId:D1($.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider($){let Z=gj(this.options.metricsExporter);if(Z.length===0)return null;let Q=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),X=Math.min(30000,Math.floor(Q*0.8)),J=Z.map((W)=>cc(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:Q,timeout:X})).filter((W)=>W!==null);if(J.length===0)return null;return new bc({resource:$,readers:J})}createTracerProvider($){let Z=gj(this.options.tracesExporter);if(Z.length===0)return null;let Q=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,X=this.options.otlpTracesHeaders??this.options.otlpHeaders,J=[];for(let W of Z){let j=mc(W,{endpoint:Q,headers:X,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(j)J.push(j)}if(J.length===0)return null;return new Ic({resource:$,spanProcessors:J})}createLoggerProvider($){let Z=gj(this.options.logsExporter);if(Z.length===0)return null;let Q=Z.map((X)=>{let J=gc(X,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new Pc(J,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((X)=>X!==null);if(Q.length===0)return null;return new wc({resource:$,processors:Q})}}function hZ($){let Z=new F5($),Q=Z.createTelemetryService($),X=()=>{Q.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion})};if(!$.deferProviderCreatedEvent)X();return{provider:Z,telemetry:Q,emitProviderCreated:X}}function d2($){if(z3())return{telemetry:new Yz($)};if($.enabled!==!0)return{telemetry:new U5({...$,distinctId:D1($.distinctId)})};return hZ($)}function vZ($){let{telemetry:Z,provider:Q,emitProviderCreated:X}=d2($);return{telemetry:Z,provider:Q,flush:async()=>{let j=Q;if(j&&typeof j.forceFlush==="function")try{await j.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([Z.dispose(),Q?.dispose()])},...$.deferProviderCreatedEvent&&X?{emitProviderCreated:X}:{}}}function gj($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((Q)=>Q.trim()).filter((Q)=>Q==="console"||Q==="otlp")}function gc($,Z){if($==="console")return new fc;if(!Z.endpoint)return null;let Q=mj(Z.endpoint,"/v1/logs");return new Ec({url:Q,headers:Z.headers})}function mc($,Z){if($==="console")return new yc(new xc);if(!Z.endpoint)return null;let Q=mj(Z.endpoint,"/v1/traces");return new kc(new Rc({url:Q,headers:Z.headers}))}function cc($,Z){if($==="console")return new jz({exporter:new Sc,exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout});if(!Z.endpoint)return null;let Q=mj(Z.endpoint,"/v1/metrics");return new jz({exporter:new Mc({url:Q,headers:Z.headers}),exportIntervalMillis:Z.interval,exportTimeoutMillis:Z.timeout})}function mj($,Z){let Q=new URL($),X=Q.pathname.endsWith("/")?Q.pathname.slice(0,-1):Q.pathname;return Q.pathname=X.endsWith(Z)?X:`${X}${Z}`,Q.toString()}var gZ=j2(()=>{M1();h2();vj()});var NN={};AQ(NN,{resolveCoreDistinctId:()=>D1,resolveCoreDeviceId:()=>v4,createOpenTelemetryTelemetryService:()=>hZ,createConfiguredTelemetryService:()=>d2,createConfiguredTelemetryHandle:()=>vZ,OpenTelemetryProvider:()=>F5,OpenTelemetryAdapter:()=>H5});var QQ=j2(()=>{h2();gZ()});import*as eY0 from"@cline/llms";import{ClineFreeModelLimitError as ZV0,ClineNotSubscribedError as QV0,ClineOrgIndividualInferenceSubscriptionError as XV0,ClinePassLimitError as JV0,extractClineFreeModelLimitResetTime as WV0,extractClinePassLimitMessage as jV0,getClineNotSubscribedMessage as YV0,getClineOrgIndividualInferenceSubscriptionMessage as VV0,getClinePassSubscriptionUrl as BV0,isClineFreeModelLimitError as KV0,isClineFreeModelLimitMessage as GV0,isClineModelNotFoundMessage as HV0,isClineNotSubscribedError as UV0,isClineNotSubscribedMessage as FV0,isClineOrgIndividualInferenceSubscriptionError as LV0,isClineOrgIndividualInferenceSubscriptionMessage as DV0,isClinePassLimitError as _V0,isClinePassLimitMessage as zV0}from"@cline/llms";import{buildClineSystemPrompt as NV0,buildSdkErrorProperties as qV0,ContributionRegistry as AV0,captureSdkError as TV0,createClineTelemetryServiceConfig as EV0,createClineTelemetryServiceMetadata as MV0,createContributionRegistry as RV0,createTool as CV0,emptyWorkspaceManifest as PV0,FEATURE_FLAGS as fV0,FeatureFlagDefaultValue as wV0,formatDisplayUserInput as SV0,noopBasicLogger as bV0,normalizeSdkError as kV0,normalizeUserInput as xV0,parseUserCommandEnvelope as yV0,registerDisposable as IV0,SDK_ERROR_TELEMETRY_EVENT as hV0,stripUtf8Bom as vV0}from"@cline/shared";export*from"@cline/shared/storage";function kq($){if(typeof $!=="object"||$===null||!("error"in $))return;let Z=$.error;return typeof Z==="string"&&Z.trim()?Z:void 0}function AV($,Z,Q){let X=kq(Q);if(X)return X;let J=Z.trim();if(J){let W=J.length>200?`${J.slice(0,200)}...`:J;return`Cline account request failed with status ${$}: ${W}`}return`Cline account request failed with status ${$}`}class TQ{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let Z=$.apiBaseUrl.trim();if(!Z)throw Error("apiBaseUrl is required");this.apiBaseUrl=Z,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance($){let Z=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(Z)}/balance`)}async fetchUsageTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/usages`)).items??[]}async fetchPaymentTransactions($){let Z=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(Z)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans($){let Z=new URL("/api/v1/plans",this.apiBaseUrl);if($?.type)Z.searchParams.set("type",$.type);return this.request(`${Z.pathname}${Z.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}`)}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/balance`)}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");let Q=await this.resolveOrganizationMemberId(Z,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(Z)}/members/${encodeURIComponent(Q)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let Z=$?.trim();if(Z)return Z;let X=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(X)return X;let J=await this.fetchMe();if(!J.id?.trim())throw Error("Unable to resolve current user id");return J.id}async resolveOrganizationMemberId($,Z){let Q=Z?.trim();if(Q)return Q;let J=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(J)return J;let j=(await this.fetchUserOrganizations()).find((Y)=>Y.organizationId===$)?.memberId;if(!j?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return j}async request($,Z){let Q=(await this.getAuthTokenFn())?.trim();if(!Q)throw Error("No Cline account auth token found");let X=this.getHeadersFn?await this.getHeadersFn():{},J=new AbortController,W=setTimeout(()=>J.abort(),this.requestTimeoutMs);try{let j=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:Z?.method??"GET",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json",...X??{}},body:Z?.body!==void 0?JSON.stringify(Z.body):void 0,signal:J.signal});if(j.status===204||Z?.expectNoContent){if(!j.ok)throw Error(`Cline account request failed with status ${j.status}`);return}let Y=await j.text(),V;if(Y.trim())try{V=JSON.parse(Y)}catch{if(!j.ok)throw Error(AV(j.status,Y,void 0));throw Error("Cline account response was not valid JSON")}if(!j.ok)throw Error(AV(j.status,Y,V));if(typeof V==="object"&&V!==null){let B=V;if(typeof B.success==="boolean"){if(!B.success)throw Error(B.error||"Cline account request failed");return B.data}}if(V===void 0||V===null)throw Error("Cline account response payload was empty");return V}finally{clearTimeout(W)}}}function TV($){return $.action==="clineAccount"}async function EV($,Z){switch($.operation){case"fetchMe":return Z.fetchMe();case"fetchBalance":return Z.fetchBalance($.userId);case"fetchUsageTransactions":return Z.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return Z.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return Z.fetchUserOrganizations();case"fetchOrganizationBalance":return Z.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return Z.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await Z.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return Z.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class EQ{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let Z=$.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:Z})}async fetchOrganizationUsageTransactions($){let Z=$.organizationId.trim();if(!Z)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:Z,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}function y5($){return{onAuth:({url:Z,instructions:Q})=>{if($.onOutput?.(Q??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(Z)).catch((X)=>{$.onOpenUrlError?.({url:Z,error:X})})}catch(X){$.onOpenUrlError?.({url:Z,error:X})}$.onOutput?.(Z)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}import{decodeJwtPayload as ZA,getClineEnvironmentConfig as cQ}from"@cline/shared";import{createHash as xq}from"node:crypto";var MV;function yq($){MV=$}function a0($){if(typeof $!=="string"||$.length===0)return"unset";return xq("sha256").update($).digest("hex").slice(0,8)}function j0($){try{MV?.debug($)}catch{}}_0();function sq(){let $;return{promise:new Promise((Q)=>{$=Q}),resolve:$}}async function n1($){let Z=await import("node:http"),Q=$.host??"127.0.0.1",X=$.timeoutMs??300000,J=$.successHtml??tq,W=sq(),j=!1,Y=null,V=null,B=null,K=(U)=>{if(j)return;j=!0,W.resolve(U)},G=()=>{if(Y)clearTimeout(Y),Y=null;let U=B;if(B=null,V)V.close(),V.closeAllConnections?.(),V=null;if(U!==null&&$.onClose)Promise.resolve($.onClose({host:Q,port:U})).catch(()=>{})},H=async()=>{return Y=setTimeout(()=>{G(),K(null)},X),W.promise};for(let U of $.ports){let F=Z.createServer((D,z)=>{try{let _=new URL(D.url||"",`http://${Q}:${U}`);if(_.pathname!==$.callbackPath){z.statusCode=404,z.end("Not found");return}let O={url:_,code:_.searchParams.get("code")??void 0,state:_.searchParams.get("state")??void 0,provider:_.searchParams.get("provider")??void 0,error:_.searchParams.get("error")??void 0};if(O.error){z.statusCode=400,z.end(`Authentication failed: ${O.error}`),G(),K(O);return}if(!O.code){z.statusCode=400,z.end("Missing authorization code");return}if($.expectedState&&O.state!==$.expectedState){z.statusCode=400,z.end("State mismatch");return}z.statusCode=200,z.setHeader("Content-Type","text/html; charset=utf-8"),z.end(J),G(),K(O)}catch{z.statusCode=500,z.end("Internal error")}}),L=await new Promise((D)=>{let z=(_)=>{F.off("error",z),D({bound:!1,error:_})};F.once("error",z),F.listen(U,Q,()=>{F.off("error",z),V=F,D({bound:!0})})});if(L.error){if(L.error.code==="EADDRINUSE")continue;throw G(),L.error}if(L.bound){B=U;let D=`http://${Q}:${U}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:Q,port:U,callbackUrl:D})).catch(()=>{});return{callbackUrl:D,waitForCallback:H,cancelWait:()=>{G(),K(null)},close:()=>{G(),K(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var tq=`<!DOCTYPE html>
5
5
  <html lang="en">
6
6
  <head>
7
7
  <meta charset="utf-8">
@@ -42,7 +42,7 @@ import{createRequire as bq}from"node:module";var fq=Object.defineProperty;var wq
42
42
  </div>
43
43
  <script>setTimeout(() => window.close(), 3000);</script>
44
44
  </body>
45
- </html>`;function kV($){let Z="";for(let Q=0;Q<$.length;Q+=1)Z+=String.fromCharCode($[Q]??0);return btoa(Z).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function eq($){let Q=new TextEncoder().encode($),X=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(X)}function $A($=32){let Z=new Uint8Array($);return crypto.getRandomValues(Z),kV(Z)}async function m5(){let $=$A(),Z=kV(await eq($));return{verifier:$,challenge:Z}}function c5($){return $.endsWith("/")?$.slice(0,-1):$}function B2($,Z){return new URL(Z,`${c5($)}/`).toString()}function t2($,Z={}){let Q=$.trim();if(!Q)return{};try{let X=new URL(Q);return{code:X.searchParams.get("code")??void 0,state:X.searchParams.get("state")??void 0,provider:Z.includeProvider?X.searchParams.get("provider")??void 0:void 0}}catch{}if(Z.allowHashCodeState&&Q.includes("#")){let[X,J]=Q.split("#",2);return{code:X||void 0,state:J||void 0}}if(Q.includes("code=")){let X=new URLSearchParams(Q);return{code:X.get("code")??void 0,state:X.get("state")??void 0,provider:Z.includeProvider?X.get("provider")??void 0:void 0}}return{code:Q}}function e2($){try{let Z=JSON.parse($),Q=Z.error,X=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,J=typeof Z.error_description==="string"?Z.error_description:typeof Z.message==="string"?Z.message:Q&&typeof Q==="object"&&typeof Q.message==="string"?Q.message:void 0;return{code:X,message:J}}catch{return{}}}function $6($,Z){return Date.now()>=$.expires-Z}async function Z6($){if(!$.onManualCodeInput){let W=await $.waitForCallback();return{code:W?.code,state:W?.state,provider:W?.provider,error:W?.error}}let Z,Q,X=$.onManualCodeInput().then((W)=>{Z=W,$.cancelWait()}).catch((W)=>{Q=W instanceof Error?W:Error(String(W)),$.cancelWait()}),J=await $.waitForCallback();if(Q)throw Q;if(J?.code||J?.error)return{code:J.code,state:J.state,provider:J.provider,error:J.error};if(Z)return t2(Z,$.parseOptions);if(await X,Q)throw Q;if(Z)return t2(Z,$.parseOptions);return{}}var u5={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},hV={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},uQ="https://api.workos.com",QA="/auth",xV=Array.from({length:11},($,Z)=>48801+Z),XA=300000,JA=30000,Q6=30000,WA=300,jA=5;class e0 extends Error{status;errorCode;requestId;constructor($,Z){super($);this.name="ClineOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode,this.requestId=Z?.requestId}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 YA($){let Z=Date.parse($);if(Number.isNaN(Z))throw Error(`Invalid expiresAt value: ${$}`);return Z}function dQ($,Z,Q={}){let X=$.userInfo.clineUserId??Q.accountId,J=$.refreshToken??Q.refresh;if(!J)throw Error("Token response did not include a refresh token");let W={...Q.metadata??{},provider:Z,tokenType:$.tokenType,userInfo:$.userInfo};return delete W.startedAt,{access:$.accessToken,refresh:J,expires:YA($.expiresAt),accountId:X??void 0,email:$.userInfo.email||Q.email,metadata:W}}async function lQ($){if(!$)return{};return typeof $==="function"?await $():$}function yV($,Z){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return Z;return Math.floor($)}function VA($){return typeof $==="string"&&$.trim()||void 0}function BA($){let Z=ZA($);if(!Z)return{};return{sessionId:VA(Z.sid)}}function KA($){let Z={},Q=$.metadata?.sessionStartedAtMs;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)Z.sessionDurationMs=Date.now()-Q;return Z}function pQ($){return{...BA($.access),...KA($)}}async function IV($){await new Promise((Z)=>setTimeout(Z,$))}function iQ($,Z){if(!$.success||!$.data?.accessToken)throw Error(Z);return $.data}async function vV($,Z){let Q=await fetch(B2(uQ,hV.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(Z?.requestTimeoutMs??Q6)}),X=await Q.json().catch(()=>({}));if(!Q.ok)throw new e0(`Device authorization failed: ${Q.status}${X.error_description?` - ${X.error_description}`:""}`,{status:Q.status,errorCode:X.error,requestId:Q.headers.get("x-request-id")??void 0});if(!X.device_code||!X.user_code||!X.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:X.device_code,userCode:X.user_code,verificationUri:X.verification_uri,verificationUriComplete:X.verification_uri_complete,expiresInSeconds:yV(X.expires_in,WA),pollIntervalSeconds:yV(X.interval,jA)}}async function gV($){let Z=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=Z){let X=await fetch(B2($.workosApiBaseUrl,hV.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),J=await X.json().catch(()=>({}));if(X.ok){if(!J.access_token||!J.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:J.access_token,refreshToken:J.refresh_token,tokenType:J.token_type??"Bearer"}}switch(J.error){case"authorization_pending":{await IV(Q*1000);break}case"slow_down":{Q+=1,await IV(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new e0(J.error_description||"WorkOS authorization failed",{status:X.status,errorCode:J.error,requestId:X.headers.get("x-request-id")??void 0});default:throw new e0(`WorkOS token polling failed: ${X.status}${J.error_description?` - ${J.error_description}`:""}`,{status:X.status,errorCode:J.error,requestId:X.headers.get("x-request-id")??void 0})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function mV($,Z,Q){let X={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(B2(Z.apiBaseUrl,u5.register),{method:"POST",headers:{"Content-Type":"application/json",...await lQ(Z.headers)},body:JSON.stringify(X),signal:AbortSignal.timeout(Z.requestTimeoutMs??Q6)});if(!J.ok){let j=await J.text().catch(()=>""),Y=e2(j);throw new e0(`Token registration failed: ${J.status}${Y.message?` - ${Y.message}`:""}`,{status:J.status,errorCode:Y.code,requestId:J.headers.get("x-request-id")??void 0})}let W=await J.json();return dQ(iQ(W,"Invalid token exchange response"),Q??Z.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function GA($,Z,Q,X){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:Z,provider:X??Q.provider},W=await fetch(B2(Q.apiBaseUrl,u5.token),{method:"POST",headers:{"Content-Type":"application/json",...await lQ(Q.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Q.requestTimeoutMs??Q6)});if(!W.ok){let Y=await W.text().catch(()=>""),V=e2(Y);throw new e0(`Token exchange failed: ${W.status}${V.message?` - ${V.message}`:""}`,{status:W.status,errorCode:V.code,requestId:W.headers.get("x-request-id")??void 0})}let j=await W.json();return dQ(iQ(j,"Invalid token exchange response"),X??Q.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function rQ($){z$($.telemetry,$.provider??"cline");let Z=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:xV,X=$.callbackPath??QA,J=Z?null:await n1({ports:Q,callbackPath:X,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),W=J?.callbackUrl||`http://127.0.0.1:${Q[0]??xV[0]}${X}`;try{let j;if(Z){let Y=cQ().workOsClientId,V=await vV(Y,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let B=await gV({clientId:Y,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??Q6,workosApiBaseUrl:uQ,onProgress:$.callbacks.onProgress});j=await mV(B,$,$.provider)}else{let Y=new URL(B2($.apiBaseUrl,u5.authorize));Y.searchParams.set("client_type","extension"),Y.searchParams.set("callback_url",W),Y.searchParams.set("redirect_uri",W),$.callbacks.onAuth({url:Y.toString(),instructions:"Continue the authentication process in your browser."});let V,B=$.provider,K=await Z6({waitForCallback:J?.waitForCallback??(async()=>null),cancelWait:J?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(K.error)throw Error(`OAuth error: ${K.error}`);if(V=K.code,B=K.provider??B,!V){let G=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),H=t2(G,{includeProvider:!0});V=H.code,B=H.provider??B}if(!V)throw Error("Missing authorization code");j=await GA(V,W,$,B)}return O$($.telemetry,$.provider??"cline",pQ(j)),q$($.telemetry,{id:j.accountId,email:j.email,provider:$.provider??"cline"}),j}catch(j){throw N$($.telemetry,$.provider??"cline",j instanceof Error?j.message:String(j),{requestId:j instanceof e0?j.requestId:void 0}),j}finally{J?.close()}}async function HA($){return await vV(cQ().workOsClientId,$)}async function UA($){let Z=$.provider??"cline";z$($.telemetry,Z);try{let Q=await gV({clientId:cQ().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??Q6,workosApiBaseUrl:uQ}),X=await mV(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return O$($.telemetry,Z,pQ(X)),q$($.telemetry,{id:X.accountId,email:X.email,provider:Z}),X}catch(Q){throw N$($.telemetry,Z,Q instanceof Error?Q.message:String(Q),{requestId:Q instanceof e0?Q.requestId:void 0}),Q}}async function cV($,Z){let Q=B2(Z.apiBaseUrl,u5.refresh);j0(`cline.refresh.request url=${Q} refreshTokenHash=${a0($.refresh)}`);let X=await fetch(Q,{method:"POST",headers:{"Content-Type":"application/json",...await lQ(Z.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(Z.requestTimeoutMs??Q6)});if(!X.ok){let Y=await X.text().catch(()=>""),V=e2(Y),B=X.headers.get("x-request-id")??void 0;throw j0(`cline.refresh.error status=${X.status} errorCode=${V.code??"none"} message=${V.message??"none"} requestId=${B??"none"}`),new e0(`Token refresh failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code,requestId:B})}let J=await X.json(),W=$.metadata?.provider??Z.provider,j=dQ(iQ(J,"Invalid token refresh response"),W,$);return j0(`cline.refresh.success newAccessTokenHash=${a0(j.access)} newRefreshTokenHash=${a0(j.refresh)} expires=${j.expires}`),j}async function aQ($,Z,Q){if(!$)return j0("cline.getCredentials outcome=no_current_credentials"),null;let X=Q?.refreshBufferMs??XA,J=Q?.retryableTokenGraceMs??JA,W=Q?.forceRefresh===!0;if(!W&&!$6($,X))return j0(`cline.getCredentials outcome=still_valid forceRefresh=${W}`),$;j0(`cline.getCredentials outcome=needs_refresh forceRefresh=${W} accessTokenHash=${a0($.access)}`);try{return await cV($,Z)}catch(j){let Y=pQ($),V=j instanceof e0&&j.requestId?{request_id:j.requestId}:{},B={status:j instanceof e0?j.status:void 0,errorCode:j instanceof e0?j.errorCode:void 0,...V,...Y,errorName:j instanceof Error?j.name:void 0};if(j instanceof e0&&j.isLikelyInvalidGrant())return j0(`cline.getCredentials outcome=invalid_grant status=${j.status} errorCode=${j.errorCode??"none"}`),Y2(Z.telemetry,Z.provider??"cline","token_invalid",{status:j.status,errorCode:j.errorCode,...V,...Y}),null;if($.expires-Date.now()>J)return j0(`cline.getCredentials outcome=transient_failure_kept_current error=${j instanceof Error?j.message:String(j)}`),h5(Z.telemetry,Z.provider??"cline",{...B,tokenExpired:!1}),$;throw j0(`cline.getCredentials outcome=transient_failure_rethrown error=${j instanceof Error?j.message:String(j)}`),h5(Z.telemetry,Z.provider??"cline",{...B,tokenExpired:!0}),j}}_0();import{decodeJwtPayload as nQ}from"@cline/shared";import{nanoid as FA}from"nanoid";var q0={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 d5 extends Error{status;errorCode;constructor($,Z){super($);this.name="OpenAICodexOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function LA($,Z,Q=q0.redirectUri){let X=await fetch(q0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:q0.clientId,code:$,code_verifier:Z,redirect_uri:Q}),signal:AbortSignal.timeout(q0.httpTimeoutMs)});if(!X.ok)return{type:"failed"};let J=await X.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}async function DA($){try{let Z=await fetch(q0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:q0.clientId}),signal:AbortSignal.timeout(q0.httpTimeoutMs)});if(!Z.ok){let X=await Z.text().catch(()=>""),J=e2(X);throw new d5(`Token refresh failed: ${Z.status}${J.message?` - ${J.message}`:""}`,{status:Z.status,errorCode:J.code})}let Q=await Z.json();if(!Q.access_token||!Q.refresh_token||typeof Q.expires_in!=="number")return{type:"failed"};return{type:"success",access:Q.access_token,refresh:Q.refresh_token,expires:Date.now()+Q.expires_in*1000,email:Q.email,idToken:Q.id_token}}catch(Z){if(Z instanceof d5)throw Z;return{type:"failed"}}}async function _A($="pi"){let{verifier:Z,challenge:Q}=await m5(),X=FA(32),J=new URL(q0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",q0.clientId),J.searchParams.set("redirect_uri",q0.redirectUri),J.searchParams.set("scope",q0.scopes),J.searchParams.set("code_challenge",Q),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("state",X),J.searchParams.set("id_token_add_organizations","true"),J.searchParams.set("codex_cli_simplified_flow","true"),J.searchParams.set("originator",$),{verifier:Z,state:X,url:J.toString()}}function zA(){try{let $=new URL(q0.redirectUri),Z=$.port.length>0?Number.parseInt($.port,10):q0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(Z)?Z:q0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:q0.callbackPort,callbackPath:"/auth/callback",redirectUri:q0.redirectUri}}}function OA($,Z){let Q=Z?nQ(Z):nQ($),X=Q?Q:nQ($),W=X?.[q0.jwtClaimPath]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let j=X?.organizations;if(Array.isArray(j)&&j.length>0){let V=j[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let Y=X?.chatgpt_account_id;if(typeof Y==="string"&&Y.length>0)return Y;return null}function uV($,Z){let Q=OA($.access,$.idToken)??Z?.accountId;if(!Q)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||Z?.refresh||"",expires:$.expires,accountId:Q,email:$.email??Z?.email,metadata:{...Z?.metadata??{},provider:"openai-codex"}}}async function oQ($){z$($.telemetry,"openai-codex");let Z=zA(),{verifier:Q,state:X,url:J}=await _A($.originator),W=await n1({host:Z.host,ports:[Z.port],callbackPath:Z.callbackPath,expectedState:X});$.onAuth({url:J,instructions:"Continue the authentication process in your browser."});let j;try{let Y=await Z6({waitForCallback:W.waitForCallback,cancelWait:W.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(Y.state&&Y.state!==X)throw Error("State mismatch");if(j=Y.code,!j){let K=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=t2(K,{allowHashCodeState:!0});if(G.state&&G.state!==X)throw Error("State mismatch");j=G.code}if(!j)throw Error("Missing authorization code");let V=await LA(j,Q,Z.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let B=uV(V);return O$($.telemetry,"openai-codex"),q$($.telemetry,{id:B.accountId,email:B.email,provider:"openai-codex"}),B}catch(Y){throw N$($.telemetry,"openai-codex",Y instanceof Error?Y.message:String(Y)),Y}finally{W.close()}}async function dV($,Z){let Q=await DA($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let X=uV(Q,Z);if(!X.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return X}async function sQ($,Z){if(!$)return null;let Q=Z?.refreshBufferMs??q0.refreshBufferMs,X=Z?.retryableTokenGraceMs??q0.retryableTokenGraceMs;if(Z?.forceRefresh!==!0&&!$6($,Q))return $;try{return await dV($.refresh,$)}catch(W){if(W instanceof d5&&W.isLikelyInvalidGrant())return Y2(Z?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>X)return $;return null}}_0();import{decodeJwtPayload as O8}from"@cline/shared";import{nanoid as lV}from"nanoid";class tQ{ttlMs;maxEntries;entries=new Map;constructor($,Z){this.ttlMs=$;this.maxEntries=Z}get($,Z=Date.now()){this.pruneExpired(Z);let Q=this.entries.get($);if(!Q)return;return this.entries.delete($),this.entries.set($,Q),Q.value}set($,Z,Q=Date.now(),X=this.ttlMs){this.pruneExpired(Q),this.entries.delete($);while(this.entries.size>=this.maxEntries){let J=this.entries.keys().next().value;if(J===void 0)break;this.entries.delete(J)}this.entries.set($,{value:Z,expiresAt:Q+X})}pruneExpired($){for(let[Z,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(Z)}}var NA="a8331954c0cf48ba99b5dd223a14c6ea",qA="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",AA="openid offline_access",$3="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",TA="c1aba3deed5740659981a752714eba33",EA="https://login-ext.identity.oraclecloud.com",MA="openid offline_access",Z3="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm";var RA="/auth/oca",CA=Array.from({length:11},($,Z)=>48801+Z),PA=300000,fA=30000,pV=30000,wA=600000;class l5 extends Error{status;errorCode;constructor($,Z){super($);this.name="OcaOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var A$={internal:{clientId:NA,idcsUrl:qA,scopes:AA,baseUrl:$3},external:{clientId:TA,idcsUrl:EA,scopes:MA,baseUrl:Z3}},N8=new Map,SA=86400000,bA=300000,kA=32,eQ=new tQ(SA,kA);function iV($){if(typeof $==="function")return $();return $??"internal"}function rV($){return{internal:{clientId:$?.internal?.clientId??A$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??A$.internal.idcsUrl,scopes:$?.internal?.scopes??A$.internal.scopes,baseUrl:$?.internal?.baseUrl??A$.internal.baseUrl},external:{clientId:$?.external?.clientId??A$.external.clientId,idcsUrl:$?.external?.idcsUrl??A$.external.idcsUrl,scopes:$?.external?.scopes??A$.external.scopes,baseUrl:$?.external?.baseUrl??A$.external.baseUrl}}}function xA($=Date.now()){let Z=$-wA;for(let[Q,X]of N8.entries())if(X.createdAt<Z)N8.delete(Q)}function yA($,Z,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=O8(Z)?.exp;if(typeof J==="number"&&J>0)return J*1000;let j=O8(Q)?.exp;if(typeof j==="number"&&j>0)return j*1000;return Date.now()+3600000}function aV($,Z,Q){let X=$.access_token;if(!X)throw Error("Token response did not include an access token");let J=$.refresh_token??Q?.refresh;if(!J)throw Error("Token response did not include a refresh token");let W=O8($.id_token),j=O8(X),Y=W?.sub??j?.sub,V=W?.email??j?.email;return{access:X,refresh:J,expires:yA($,X,$.id_token),accountId:Y??Q?.accountId,email:V??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:Z,subject:Y,idToken:$.id_token}}}async function nV($,Z){let Q=c5($),X=eQ.get(Q);if(X)return X;let J=`${Q}/.well-known/openid-configuration`,W=await fetch(J,{method:"GET",signal:AbortSignal.timeout(Z)});if(!W.ok){let V=`${Q}/oauth2/v1/token`;return eQ.set(Q,V,Date.now(),bA),V}let Y=(await W.json()).token_endpoint||`${Q}/oauth2/v1/token`;return eQ.set(Q,Y),Y}function oV($){return{code:$.error,message:$.error_description}}async function IA($){let Z=N8.get($.state);if(!Z)throw Error("No PKCE verifier found for this state");N8.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,X=await nV(Q.idcsUrl,$.requestTimeoutMs),J=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:Z.redirectUri,client_id:Q.clientId,code_verifier:Z.verifier}),W=await fetch(X,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:J,signal:AbortSignal.timeout($.requestTimeoutMs)}),j=await W.json();if(!W.ok){let V=oV(j);throw new l5(`Token exchange failed: ${W.status}${V.message?` - ${V.message}`:""}`,{status:W.status,errorCode:V.code})}let Y=O8(j.id_token);if(!j.id_token||!Y)throw Error("No ID token received from OCA");if(Y.nonce!==Z.nonce)throw Error("OIDC nonce verification failed");return aV(j,$.mode)}function hA($){let Z=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${c5(Z.idcsUrl)}/oauth2/v1/authorize`);return Q.searchParams.set("client_id",Z.clientId),Q.searchParams.set("response_type","code"),Q.searchParams.set("scope",Z.scopes),Q.searchParams.set("code_challenge",$.challenge),Q.searchParams.set("code_challenge_method","S256"),Q.searchParams.set("redirect_uri",$.callbackUrl),Q.searchParams.set("state",$.state),Q.searchParams.set("nonce",$.nonce),Q.toString()}async function Q3($){z$($.telemetry,"oca");let Z=rV($.config),Q=iV($.mode),X=$.callbackPorts?.length?$.callbackPorts:CA,J=$.callbackPath??RA,W=$.requestTimeoutMs??pV,j=await n1({ports:X,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),Y=j.callbackUrl;if(!Y)throw Error("Unable to bind local OAuth callback server");let V=lV(16),B=lV(16),{verifier:K,challenge:G}=await m5();xA(),N8.set(V,{verifier:K,nonce:B,mode:Q,redirectUri:Y,createdAt:Date.now()});let H=hA({callbackUrl:Y,mode:Q,state:V,nonce:B,challenge:G,config:Z});$.callbacks.onAuth({url:H,instructions:"Continue the authentication process in your browser."});try{let U=await Z6({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),F=U.code,L=U.state;if(U.error)throw Error(`OAuth error: ${U.error}`);if(!F){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!L||L!==V)throw Error("State mismatch");let D=await IA({code:F,state:L,mode:Q,config:Z,requestTimeoutMs:W});return O$($.telemetry,"oca"),q$($.telemetry,{id:D.accountId,email:D.email,provider:"oca"}),D}catch(U){throw N$($.telemetry,"oca",U instanceof Error?U.message:String(U)),U}finally{j.close()}}async function sV($,Z={}){let Q=rV(Z.config),X=Z.requestTimeoutMs??pV,J=$.metadata?.mode,W=J==="internal"||J==="external"?J:iV(Z.mode),j=W==="external"?Q.external:Q.internal,Y=await nV(j.idcsUrl,X),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:j.clientId}),B=await fetch(Y,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(X)}),K=await B.json();if(!B.ok){let G=oV(K);throw new l5(`Token refresh failed: ${B.status}${G.message?` - ${G.message}`:""}`,{status:B.status,errorCode:G.code})}return aV(K,W,$)}async function X3($,Z,Q){if(!$)return null;let X=Z?.refreshBufferMs??Q?.refreshBufferMs??PA,J=Z?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??fA;if(Z?.forceRefresh!==!0&&!$6($,X))return $;try{return await sV($,Q)}catch(j){if(j instanceof l5&&j.isLikelyInvalidGrant())return Y2(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}import{decodeJwtPayload as vA,getClineEnvironmentConfig as tV}from"@cline/shared";var p5="workos:";function gA($){let Z=$.trim();return Z.toLowerCase().startsWith(p5)?Z:`${p5}${Z}`}function mA($){let Z=$.trim();return Z.toLowerCase().startsWith(p5)?Z.slice(p5.length):Z}function cA($){let Q=vA($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function uA($,Z){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let X=cA(Z);if(X)return X;return Date.now()-1}function dA($,Z){let Q=$.auth?.accessToken?.trim(),X=$.auth?.refreshToken?.trim();if(!Q||!X)return null;let J=Z?.normalizeAccessToken?.(Q)??Q;if(!J)return null;return{access:J,refresh:X,expires:uA($,J),accountId:$.auth?.accountId,metadata:$.auth?.metadata}}function lA($){let Z=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:Z,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},X=Object.fromEntries(Object.entries($.credentials.metadata??{}).filter(([,j])=>j!==void 0)),J={...$.settings?.auth?.metadata??{},...X};if(Object.keys(J).length>0)Q.metadata=J;let W={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(W,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return W}function J3($){let Z=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:Z,getApiKey(Q){let X=Q?.auth?.accessToken?.trim();if(X)return $.formatAccessToken?.(X)??X;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return lA({...Q,storageProviderId:Z,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function eV($){return J3({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:gA,normalizeStoredAccessToken:mA,login:({settings:Z,callbacks:Q,telemetry:X})=>rQ({apiBaseUrl:Z?.baseUrl?.trim()||tV().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:X}),refresh:({settings:Z,credentials:Q,forceRefresh:X,telemetry:J})=>aQ(Q,{apiBaseUrl:Z.baseUrl?.trim()||tV().apiBaseUrl,telemetry:J},{forceRefresh:X})})}var pA=[eV({providerId:"cline"}),eV({providerId:"cline-pass",storageProviderId:"cline"}),J3({providerId:"oca",login:({settings:$,callbacks:Z,telemetry:Q})=>Q3({mode:$?.oca?.mode,callbacks:Z,telemetry:Q}),refresh:({settings:$,credentials:Z,forceRefresh:Q,telemetry:X})=>X3(Z,{forceRefresh:Q,telemetry:X},{mode:$.oca?.mode,telemetry:X})}),J3({providerId:"openai-codex",login:({callbacks:$,telemetry:Z})=>oQ({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:Z}),refresh:({credentials:$,forceRefresh:Z,telemetry:Q})=>sQ($,{forceRefresh:Z,telemetry:Q})})],iA=new Map(pA.map(($)=>[$.providerId,$]));function b0($){return iA.get($.trim().toLowerCase())}function X6($){return b0($)!==void 0}function rA($){return b0($)?.storageProviderId}function aA($,Z){let Q=b0(Z),X=Q?.storageProviderId??Z,J=$.getProviderSettings(X);return Q?.getApiKey(J)??i5(Z,J)}async function W3($,Z,Q){let X=b0(Z);if(!X)throw Error(`Provider "${Z}" does not support OAuth login`);let J=$.getProviderSettings(X.storageProviderId),W=await X.login({settings:J,callbacks:Q.callbacks,telemetry:Q.telemetry});return X.saveCredentials({manager:$,settings:J,credentials:W})}function j3($,Z){let Q=b0($);if(!Q)return null;return dA(Z,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function q8($){let Z=b0($.providerId);if(!Z)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return Z.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function i5($,Z){let Q=b0($);if(Q)return Q.getApiKey(Z);return Z?.auth?.accessToken?.trim()||Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0}function nA($,Z){let Q=b0($);if(!Q)return Z.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:Z.access}})??Z.access}import*as n0 from"@cline/llms";import{ReasoningLevelSchema as RT}from"@cline/shared";import{z as P}from"zod";import*as J0 from"@cline/llms";function Y3($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let X of[Q.id,Q.name,Q.model])if(typeof X==="string"&&X.trim())return X.trim()}return""}).filter((Z)=>Z.length>0)}function oA($,Z){let Q=Y3($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let X=$,J=Y3(X.data??X.models);if(J.length>0)return J;if(X.models&&typeof X.models==="object"&&!Array.isArray(X.models)){let j=Object.keys(X.models).filter((Y)=>Y.trim().length>0);if(j.length>0)return j}let W=X.providers?.[Z];if(W&&typeof W==="object"){let Y=Y3(W.models??W);if(Y.length>0)return Y}return[]}async function r5($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return oA(await Q.json(),Z)}function $B($){return $.replace(/\/+$/,"")}function a5($,Z,Q){let X=Q?.trim();if(!X)return;let J=$?.trim();if(!J||!Z?.trim())return X;try{let W=new URL(X),j=new URL(Z),Y=new URL(J);if(W.origin!==j.origin)return X;let V=$B(j.pathname),B=$B(Y.pathname);if(V&&W.pathname.startsWith(`${V}/`)){let K=W.pathname.slice(V.length);Y.pathname=`${B}${K}`}else Y.pathname=W.pathname;return Y.search=W.search,Y.hash=W.hash,Y.toString()}catch{return X}}function sA($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function tA($){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 eA=Object.values(J0.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:sA($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),XB=Object.fromEntries(eA.map(($)=>[$.id,$]));function $T($){return XB[$]}function ZT(){return Object.fromEntries(Object.entries(XB).filter(([,$])=>tA($)))}function JB($=[]){let Z=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return Z.length>0?Z:void 0}var WB="https://models.dev/api.json",QT=600000,jB=300000,XT=5000,o5=new Map,A8=new Map,B3=new Map,n5=new Map;async function JT(){return J0.getGeneratedProviderModels()}async function WT($,Z={},Q={},X={},J={},W={}){if($==="litellm")return J0.sortModelsByReleaseDate(X);let j=await JT(),Y=J0.resolveProviderModelCatalogKeys($),V=Object.assign({},...Y.map((G)=>j[G]??{}));if(Boolean(J0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl))return J0.sortModelsByReleaseDate({...J,...W});if($==="openai-codex")return J0.sortModelsByReleaseDate({...Z,...J0.filterOpenAICodexModels(Q),...J,...W});if($==="cline-pass"&&Object.keys(Q).length>0)return{...Q,...W};let K=J0.sortModelsByReleaseDate({...V,...Z,...Q,...X,...J});if($==="cline")return J0.sortModelsByReleaseDate(J0.filterImageOutputModels({...J0.preferCanonicalModelIds(K,J0.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...W}));return J0.sortModelsByReleaseDate({...K,...W})}function jT($,Z){let Q=J0.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((X)=>Z[X]??{}))}function s5($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function K3($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function YT($){let Z=2166136261;for(let Q=0;Q<$.length;Q+=1)Z^=$.charCodeAt(Q),Z+=(Z<<1)+(Z<<4)+(Z<<7)+(Z<<8)+(Z<<24);return(Z>>>0).toString(16)}function VT($,Z){return`${$}:${s5(Z.baseUrl)}:${YT(K3(Z)??"")}`}async function t5($,Z,Q=XT){let X=new AbortController,J=setTimeout(()=>X.abort(),Q);try{return await fetch($,{...Z,signal:X.signal})}finally{clearTimeout(J)}}function K2($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function e5($,Z){let Q=["streaming","tools"];return K2(Q,"images",Boolean(Z.supportsImages)),K2(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),K2(Q,"reasoning",Boolean(Z.supportsReasoning)),{id:$,name:Z.name??$,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxTokens:Z.maxTokens,capabilities:Q,releaseDate:Z.releaseDate,status:"active"}}async function BT($,Z){let Q=await t5("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],W={};for(let j of J){let Y=j.id?.trim();if(!Y)continue;if(Y.includes("whisper")||Y.includes("tts")||Y.includes("embedding"))continue;let V=j.supported_features??[];W[Y]=e5(Y,{name:Y,contextWindow:j.context_length,maxInputTokens:j.context_length,maxTokens:j.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return W}function ZB($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function KT($,Z){let Q=await t5("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":Z}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],W={};for(let j of J){let Y=j.id?.trim();if(!Y)continue;W[Y]=e5(Y,{name:Y,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return W}async function GT($,Z){let X=`${(s5($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await t5(X,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!J.ok)throw Error(`Poolside model refresh failed: HTTP ${J.status}`);let j=(await J.json())?.data??[],Y={};for(let V of j){let B=V.id?.trim();if(!B)continue;let K=V.supported_features??[],G=V.supported_sampling_parameters??[],H=V.input_modalities??[],U=["streaming"];K2(U,"tools",K.includes("tools")),K2(U,"reasoning",K.includes("reasoning")),K2(U,"temperature",G.includes("temperature")),K2(U,"images",H.includes("image"));let F={input:ZB(V.pricing?.prompt),output:ZB(V.pricing?.completion)};Y[B]={id:B,name:V.name??B,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:U,pricing:F.input!==void 0||F.output!==void 0?F:void 0,status:"active"}}return Y}function HT($){let Z=s5($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function UT($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function FT($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,X=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${X}`}async function LT($,Z){let Q=HT($.baseUrl),X=[],J=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let W of UT(Q))for(let[j,Y]of J)try{let V=await t5(W,{method:"GET",headers:{accept:"application/json",...Y}});if(V.ok){let K=(await V.json())?.data??[],G={};for(let H of K){let U=H.model_name?.trim(),L=H.litellm_params?.model?.trim()||U;if(!L)continue;let D=H.model_info,z=e5(L,{name:U??L,maxTokens:D?.max_output_tokens??D?.max_tokens,maxInputTokens:D?.max_input_tokens??D?.max_tokens,supportsImages:D?.supports_vision,supportsPromptCache:D?.supports_prompt_caching,supportsReasoning:D?.supports_reasoning});if(G[L]=z,U)G[U]={...z,id:U,name:U}}return G}X.push(`${new URL(W).pathname} (${j}): ${await FT(V)}`)}catch(V){let B=V instanceof Error?V.message:String(V);X.push(`${new URL(W).pathname} (${j}): ${B}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${X.join("; ")}`)}var G3={baseten:BT,hicap:KT,litellm:LT,poolside:GT};function DT($){return Object.hasOwn(G3,$)}var QB=new Map,V3=new Map;function _T($,Z){return`${$}:${s5(Z.baseUrl)}`}async function zT($,Z,Q){let X=J0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=a5(Q.baseUrl,X?.provider.baseUrl,X?.provider.modelsSourceUrl);if(!J)return{};let W=Z?.cacheTtlMs??jB,j=_T($,Q),Y=Date.now(),V=QB.get(j);if(V&&V.expiresAt>Y)return V.data;let B=V3.get(j);if(B)return B;let K=r5(J,$).then((G)=>{let H=Object.fromEntries(G.map((U)=>[U,e5(U,{name:U})]));return QB.set(j,{data:H,expiresAt:Y+W}),H}).finally(()=>{V3.delete(j)});return V3.set(j,K),K}async function OT($,Z){let Q=K3(Z);if(!Q)return{};let X=G3[$];if(!X)return{};return X(Z,Q)}function NT($,Z,Q){if(!Q)return!1;if(!G3[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(K3(Q))}async function qT($,Z,Q){let X=Z?.cacheTtlMs??jB,J=VT($,Q),W=Date.now(),j=B3.get(J);if(j&&j.expiresAt>W)return j.data;let Y=n5.get(J);if(Y)return Y;let V=OT($,Q).then((B)=>{return B3.set(J,{data:B,expiresAt:W+X}),B}).finally(()=>{n5.delete(J)});return n5.set(J,V),V}async function AT($){return J0.fetchLiveProviderModels($,globalThis.fetch)}async function J6($={}){let Z=$.url??WB,Q=$.cacheTtlMs??QT,X=Date.now(),J=o5.get(Z);if(J&&J.expiresAt>X)return J.data;let W=A8.get(Z);if(W)return W;let j=AT(Z).then((Y)=>{return o5.set(Z,{data:Y,expiresAt:X+Q}),Y}).finally(()=>{A8.delete(Z)});return A8.set(Z,j),j}function TT($){if($){o5.delete($),A8.delete($);return}o5.clear(),A8.clear()}function ET(){B3.clear(),n5.clear()}function MT($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:JB(Q.capabilities)}]))}var H3=MT(ZT());function YB($){let Z=$T($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:JB(Z.capabilities)}}async function U3($,Z,Q){let X=YB($);if(!X)return;try{let J=Z?.loadLatestOnInit?await J6(Z):void 0,W=J?jT($,J):{},j=Q&&NT($,Z,Q)?await qT($,Z,Q):{},V=Boolean(J0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:X.modelId,baseUrl:X.baseUrl}:Q,B=V?await zT($,Z,V).catch(()=>({})):{},K=await WT($,X.knownModels,W,j,B,Q?.knownModels);return{...X,knownModels:K}}catch(J){if(Z?.failOnError)throw J;if($==="litellm")return{...X,knownModels:{}};return X}}var F3=n0.BUILT_IN_PROVIDER,CT=n0.BUILT_IN_PROVIDER_IDS,PT=n0.isBuiltInProviderId,$9=n0.normalizeProviderId,L3=P.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),VB=P.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),BB=P.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),KB=P.object({apiKey:P.string().optional(),accessToken:P.string().optional(),refreshToken:P.string().optional(),expiresAt:P.number().int().positive().optional(),accountId:P.string().optional(),organizationId:P.string().optional(),organizationName:P.string().optional(),memberId:P.string().optional(),metadata:P.record(P.string(),P.unknown()).optional()}),GB=P.object({enabled:P.boolean().optional(),effort:RT.optional(),budgetTokens:P.number().int().positive().optional()}),HB=P.object({accessKey:P.string().optional(),secretKey:P.string().optional(),sessionToken:P.string().optional(),region:P.string().optional(),profile:P.string().optional(),authentication:P.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:P.boolean().optional(),useCrossRegionInference:P.boolean().optional(),useGlobalInference:P.boolean().optional(),endpoint:P.string().url().optional(),customModelBaseId:P.string().optional()}),UB=P.object({projectId:P.string().optional(),region:P.string().optional()}),FB=P.object({apiVersion:P.string().optional(),useIdentity:P.boolean().optional()}),LB=P.object({clientId:P.string().optional(),clientSecret:P.string().optional(),tokenUrl:P.string().url().optional(),resourceGroup:P.string().optional(),deploymentId:P.string().optional(),useOrchestrationMode:P.boolean().optional(),api:P.enum(["orchestration","foundation-models"]).optional(),defaultSettings:P.record(P.string(),P.unknown()).optional()}),DB=P.object({mode:P.enum(["internal","external"]).optional(),usePromptCache:P.boolean().optional()}),_B=P.object({loadLatestOnInit:P.boolean().optional(),loadPrivateOnAuth:P.boolean().optional(),url:P.string().url().optional(),cacheTtlMs:P.number().int().positive().optional(),failOnError:P.boolean().optional()}),W6=P.object({provider:L3,apiKey:P.string().optional(),auth:KB.optional(),model:P.string().optional(),protocol:VB.optional(),client:BB.optional(),routingProviderId:L3.optional(),maxTokens:P.number().int().positive().optional(),contextWindow:P.number().int().positive().optional(),baseUrl:P.string().url().optional(),headers:P.record(P.string(),P.string()).optional(),timeout:P.number().int().positive().optional(),reasoning:GB.optional(),aws:HB.optional(),gcp:UB.optional(),azure:FB.optional(),sap:LB.optional(),oca:DB.optional(),region:P.string().optional(),apiLine:P.enum(["china","international"]).optional(),capabilities:P.array(P.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:_B.optional()});function zB($){return W6.parse($)}function OB($){return W6.safeParse($)}function fT($){return $.protocol==="openai-responses"||$.client==="openai"}function o1($,Z={}){let Q=$.provider,X=$9(Q),J=Z.includeKnownModels!==!1,W=$.reasoning?.effort||"none",j=W==="none"?void 0:W,Y=H3[X],V=Object.assign({},...n0.resolveProviderModelCatalogKeys(X).map((L)=>n0.getGeneratedModelsForProvider(L))),B=Object.keys(V)[0],K=i5(X,$),G=$.baseUrl??n0.resolveProviderApiLineBaseUrl(X,$.apiLine)??(X==="oca"?$.oca?.mode==="internal"?$3:Z3:Y?.baseUrl),H=$.routingProviderId??(fT($)&&X!==F3.OPENAI_NATIVE?F3.OPENAI_NATIVE:void 0),U=J?Y?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,F={providerId:Q,clientType:$.client,routingProviderId:H,modelId:$.model??Y?.modelId??B??"default",...J?{knownModels:U}:{},apiKey:K,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,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??Y?.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(F).filter(([L,D])=>D!==void 0))}function wT($){let Z=zB($);return o1(Z)}function ST($){let Z=OB($);if(Z.success)return{success:!0,config:o1(Z.data)};return{success:!1,error:Z.error}}import{SESSION_STATUS_VALUES as bT}from"@cline/shared";var D3=bT,kT=["idle","running","pending"];function xT($){return!kT.includes($)}function P0($){return!xT($)}var Z0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var NB="sessionHistoryOrigin";function j6($){return typeof $==="string"&&$.trim()?$.trim():void 0}function Z9($){let Z=[$?.name,$?.platform].filter((Q)=>typeof Q==="string").join(" ").toLowerCase();if(!Z)return;if(Z.includes("vscode")||Z.includes("visual studio code"))return Z0.VSCODE;if(Z.includes("jetbrains")||Z.includes("webstorm")||Z.includes("intellij")||Z.includes("pycharm")||Z.includes("goland")||Z.includes("clion")||Z.includes("rider")||Z.includes("android studio"))return Z0.JETBRAINS;if(Z.includes("neovim"))return Z0.NEOVIM;if(Z.includes("kanban"))return Z0.KANBAN;if(Z.includes("desktop"))return Z0.DESKTOP;if(Z.includes("cline-platform"))return Z0.WEB;if(Z.includes("cline-cli")||Z.includes("cline-acp"))return Z0.CLI;if(Z.includes("cline-sdk")||Z.includes("cline-core"))return Z0.CORE;return}function Y6($){let Z=$?.[NB];if(!Z||typeof Z!=="object"||Array.isArray(Z))return;let Q=Z,X=j6(Q.mode);if(!X)return;let J=j6(Q.version),W=j6(Q.trigger);return{mode:X,...J?{version:J}:{},...W?{trigger:W}:{}}}function k0($,Z){let Q=Y6($),X=j6(Z.mode)??Q?.mode??"user",J=j6(Z.version)??Q?.version,W=j6(Z.trigger)??Q?.trigger;return{...$??{},[NB]:{mode:X,...J?{version:J}:{},...W?{trigger:W}:{}}}}function qB($){if($===!0)return{};if(!$)return;return $}function AB($){if($==="user")return"global";return $}class _3{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let Z=this.getService().ingestEvent($);return{event:Z.event,duplicate:Z.duplicate,matchedSpecIds:Z.matchedSpecs.map((Q)=>Q.specId),queuedRuns:Z.queuedRuns,suppressions:Z.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function TB($){let{host:Z}=$;return{async startSession(Q){let X=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=$.getExtensionContext(),W=await Z.startSession({source:Z9(J?.client)??Z0.CORE,mode:"automation",sessionMetadata:k0(void 0,{mode:"automation",trigger:Q.source}),interactive:!1,config:{providerId:$9(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:X,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:hT(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{extensionContext:J,configExtensions:Q.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(Q,X){let J=await Z.runTurn({sessionId:Q,prompt:X.prompt,userImages:X.attachments?.userImages,userFiles:X.attachments?.userFiles?.map((W)=>W.content),delivery:X.delivery});if(!J)throw Error("ClineCore automation runtime returned no result");return{result:IT(J)}},async abortSession(Q){return await Z.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}function Q9($){let Z=yT($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),X=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),J=$.context?.logger??$.logger,W=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!X&&!J&&!W)return $.context;return{...$.context??{},...Q?{client:Q}:{},...X?{user:X}:{},...J?{logger:J}:{},...W?{telemetry:W}:{},...Z?{automation:Z}:{}}}function yT($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function IT($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function hT($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}import{existsSync as v6,readdirSync as VS,readFileSync as BS}from"node:fs";import{basename as G4,dirname as nX,extname as oX,isAbsolute as bU,join as kU,relative as xU,resolve as sX}from"node:path";import{createHash as vT}from"node:crypto";import{watch as gT}from"node:fs";import{readdir as mT,readFile as cT}from"node:fs/promises";import{join as uT}from"node:path";function dT($){return vT("sha1").update($).digest("hex")}function RB($){return Boolean($&&typeof $==="object"&&"code"in $)}function EB($){return RB($)&&$.code==="ENOENT"}function MB($){return RB($)&&($.code==="EACCES"||$.code==="EPERM")}class T8{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,Z){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=Z?.debounceMs??75,this.emitParseErrors=Z?.emitParseErrors??!1;for(let Q of $){if(this.definitionsByType.has(Q.type))throw Error(`Duplicate unified config definition type '${Q.type}'.`);this.definitionsByType.set(Q.type,Q),this.recordsByType.set(Q.type,new Map),this.discoveredDirectoriesByType.set(Q.type,new Set);for(let X of Q.directories){let J=this.baseTypesByDirectory.get(X);if(J)J.add(Q.type);else this.baseTypesByDirectory.set(X,new Set([Q.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let Z=this.definitionsByType.get($);if(!Z)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(Z)})}getSnapshot($){let Z=this.recordsByType.get($);return new Map([...Z?.entries()??[]].map(([Q,X])=>[Q,{...X}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([X,J])=>[X,{...J}])));return $}emit($){for(let Z of this.listeners)Z($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[Z,Q]of this.watchersByDirectory.entries()){if($.has(Z))continue;Q.close(),this.watchersByDirectory.delete(Z)}this.watchedTypesByDirectory=$;for(let Z of $.keys()){if(this.watchersByDirectory.has(Z))continue;try{let Q=gT(Z,()=>{let X=this.watchedTypesByDirectory.get(Z);if(!X)return;for(let J of X)this.pendingTypes.add(J);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(X)=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let W of J)this.emit({kind:"error",type:W,error:X,filePath:Z})})}catch(Q){if(!EB(Q)&&!MB(Q)){let X=$.get(Z);if(!X)continue;for(let J of X)this.emit({kind:"error",type:J,error:Q,filePath:Z})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let Z of $){let Q=this.definitionsByType.get(Z);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:Z,discoveredDirectories:Q}=await this.loadDefinition($),X=this.recordsByType.get($.type)??new Map;for(let[J,W]of X.entries()){if(Z.has(J))continue;this.emit({kind:"remove",type:$.type,id:J,filePath:W.filePath})}for(let[J,W]of Z.entries()){let j=X.get(J);if(j&&j.filePath===W.filePath&&j.fingerprint===W.fingerprint)continue;this.emit({kind:"upsert",record:{type:W.type,id:J,item:W.item,filePath:W.filePath}})}if(this.recordsByType.set($.type,Z),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let Z=new Map,Q=new Set;for(let X of $.directories){Q.add(X);let J=$.discoverFiles?await $.discoverFiles(X):await this.readDirectoryFileCandidates(X);for(let W of J){let{fileName:j,filePath:Y}=W;if(Q.add(W.directoryPath),$.includeFile&&!$.includeFile(j,Y))continue;try{let V=await cT(Y,"utf8"),B={type:$.type,directoryPath:W.directoryPath,fileName:j,filePath:Y,content:V},K=$.parseFile(B),G=$.resolveId(K,B).trim();if(!G)continue;Z.set(G,{type:$.type,id:G,item:K,filePath:Y,fingerprint:dT(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:Y})}}}return{records:Z,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[Z,Q]of this.baseTypesByDirectory.entries())$.set(Z,new Set(Q));for(let[Z,Q]of this.discoveredDirectoriesByType.entries())for(let X of Q){let J=$.get(X);if(J)J.add(Z);else $.set(X,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await mT($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:uT($,Q.name)})).sort((Q,X)=>Q.fileName.localeCompare(X.fileName))}catch(Z){if(EB(Z)||MB(Z))return[];throw Z}}}import{readdir as m3,readFile as TM,stat as g3}from"node:fs/promises";import{basename as t1,dirname as EM,extname as O9,join as $1,resolve as b8}from"node:path";import{stripUtf8Bom as MM}from"@cline/shared";import{AGENTS_RULES_FILE_NAME as VK,RULES_CONFIG_DIRECTORY_NAME as BK,resolveGlobalAgentsRulesPath as RM,resolveRulesConfigSearchPaths as CM,resolveSkillsConfigSearchPaths as PM,resolveWorkflowsConfigSearchPaths as fM,SKILLS_CONFIG_DIRECTORY_NAME as c3,WORKFLOWS_CONFIG_DIRECTORY_NAME as u3}from"@cline/shared/storage";import wM from"yaml";M1();import{existsSync as F9,readFileSync as KM,statSync as GM}from"node:fs";import{basename as HM,dirname as H9,join as L9,resolve as U9}from"node:path";import{discoverPluginModulePaths as UM,resolveConfiguredPluginModulePaths as QK,resolvePluginConfigSearchPaths as FM,SKILLS_CONFIG_DIRECTORY_NAME as LM}from"@cline/shared/storage";import{resolve as IE}from"node:path";import{normalizePluginManifest as hE}from"@cline/shared";import{existsSync as h0,readFileSync as B6}from"node:fs";import{builtinModules as _E,createRequire as C3}from"node:module";import{dirname as E$,extname as R8,isAbsolute as zE,resolve as $0}from"node:path";import{fileURLToPath as yB}from"node:url";import{PLUGIN_FILE_EXTENSIONS as OE}from"@cline/shared";var IB=E$(yB(import.meta.url)),NE=C3(import.meta.url),qE=$0(IB,"..","..","..","..",".."),E3=EE(qE),AE=["@cline/sdk","@cline/agents","@cline/core","@cline/core/hub","@cline/core/hub/daemon-entry","@cline/core/telemetry","@cline/llms","@cline/llms/browser","@cline/shared","@cline/shared/automation","@cline/shared/browser","@cline/shared/storage","@cline/shared/db","@cline/shared/types"],P3=new Set(_E.flatMap(($)=>[$,$.replace(/^node:/,"")])),M8=new Set(OE),TE=["development","node","import","require","default"];function EE($){let Z={},Q={"@cline/sdk":$0($,"packages/sdk/src/index.ts"),"@cline/agents":$0($,"packages/agents/src/index.ts"),"@cline/core":$0($,"packages/core/src/index.ts"),"@cline/llms":$0($,"packages/llms/src/index.ts"),"@cline/shared":$0($,"packages/shared/src/index.ts"),"@cline/shared/storage":$0($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":$0($,"packages/shared/src/db/index.ts")};for(let[X,J]of Object.entries(Q))if(h0(J))Z[X]=J;for(let X of["agents","core","llms","shared"]){let J=$0($,"packages",X),W=$0(J,"package.json");if(!h0(W))continue;try{let j=JSON.parse(B6(W,"utf8"));if(typeof j.name!=="string"||!j.exports)continue;if(typeof j.exports==="string"){let Y=$0(J,j.exports);if(h0(Y))Z[j.name]=Y;continue}if(typeof j.exports!=="object")continue;for(let[Y,V]of Object.entries(j.exports)){let B=ME(J,V);if(!B)continue;let K=Y==="."?j.name:`${j.name}/${Y.replace(/^\.\//,"")}`;Z[K]=B}}catch{}}return Z}function ME($,Z){let Q=f3(Z);if(!Q)return null;let X=hB($,Q);for(let J of X)if(h0(J))return J;return null}function f3($,Z=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(Z.has($))return null;Z.add($);let Q=$;for(let X of TE){let J=f3(Q[X],Z);if(J)return J}return null}function hB($,Z){let Q=Z.replace(/^\.\//,""),X=[$0($,Z)];if(Q.startsWith("dist/")){let J=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[$0($,`${J}.ts`),$0($,`${J}.tsx`),$0($,`${J}.mts`),$0($,`${J}.cts`),...X]}return X}function RE($){return Object.fromEntries(Object.entries($).sort(([Z],[Q])=>Q.length-Z.length))}function Y9($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function V6($){if($.startsWith("@")){let[Z,Q]=$.split("/",3);return Q?`${Z}/${Q}`:$}return $.split("/",1)[0]??$}function CE($){let Z=V6($);if($===Z)return".";return`.${$.slice(Z.length)}`}function vB($){return V6($).startsWith("@cline/")}function M3($,Z){let Q=V6(Z),X=E$($);while(!0){let J=$0(X,"node_modules",Q);if(h0(J)||h0($0(J,"package.json")))return!0;let W=$0(X,"..");if(W===X)return!1;X=W}}function xB($){return R3($)!==null}function R3($){try{return NE.resolve($)}catch{}return PE($)}function PE($){let Z=V6($),Q=gB(Z);if(!Q)return null;let X=$0(Q,"package.json");try{let J=JSON.parse(B6(X,"utf8")),W=CE($),j=W==="."&&typeof J.exports==="string"?J.exports:J.exports&&typeof J.exports==="object"&&Object.hasOwn(J.exports,W)?J.exports[W]:void 0,Y=f3(j)??(W==="."&&typeof J.main==="string"?J.main:null);if(!Y)return null;let V=$0(Q,Y),B=[V,...hB(Q,Y).filter((K)=>K!==V)];for(let K of B)if(h0(K))return K;return null}catch{return null}}function fE(){let $=[IB],Z=process.env.CLINE_WRAPPER_PATH?.trim();if(Z)$.push(E$(E$(Z)));let Q=process.execPath?.trim();if(Q)$.push(E$(Q));return[...new Set($.map((X)=>$0(X)))]}function wE($,Z){let Q=$;while(!0){let X=$0(Q,"package.json");if(h0(X))try{if(JSON.parse(B6(X,"utf8")).name===Z)return Q}catch{}let J=$0(Q,"node_modules",Z,"package.json");if(h0(J))return E$(J);let W=$0(Q,"..");if(W===Q)return null;Q=W}}function gB($){for(let Z of fE()){let Q=wE(Z,$);if(Q)return Q}return null}function SE($){let Q=E$($);for(let X=0;X<4;X++){let J=$0(Q,"package.json");if(h0(J))try{let j=JSON.parse(B6(J,"utf8"));return j!=null&&typeof j==="object"&&"cline"in j}catch{return!1}let W=$0(Q,"..");if(W===Q)return!1;Q=W}return!1}function mB($,Z){let Q=Z.startsWith("file:")?yB(Z):zE(Z)?Z:$0(E$($),Z);if(h0(Q)&&M8.has(R8(Q)))return Q;for(let X of M8){let J=`${Q}${X}`;if(h0(J))return J}for(let X of M8){let J=$0(Q,`index${X}`);if(h0(J))return J}return null}function cB($){let Z=new Set,Q=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let X of Q)for(let J of $.matchAll(X)){let W=J[1];if(W)Z.add(W)}return[...Z]}function bE($){return R8($)!==".ts"}function uB($,Z,Q=new Set){if(Q.has($)||!h0($))return;if(Q.add($),!M8.has(R8($)))return;let X=B6($,"utf8"),J=bE($);for(let W of cB(X)){if(W.startsWith("node:")||P3.has(W))continue;if(Y9(W)){if(!J)continue;if(Object.hasOwn(E3,W)||Object.hasOwn(E3,V6(W))||M3($,W)||vB(W)&&xB(W)||Z&&xB(W))continue;throw Error(`Cannot find module '${V6(W)}'`)}let j=mB($,W);if(j)uB(j,Z,Q)}}function dB($,Z=new Set,Q=new Set){if(Z.has($)||!h0($))return Q;if(Z.add($),!M8.has(R8($)))return Q;let X=B6($,"utf8");for(let J of cB(X)){if(Q.add(J),Y9(J))continue;let W=mB($,J);if(W)dB(W,Z,Q)}return Q}function kE($,Z){let Q=C3($),X={},J=dB($),W=new Set(AE);for(let[j,Y]of Object.entries(E3)){try{Q.resolve(j);continue}catch{}X[j]=Y}for(let j of J)if(Y9(j)&&(vB(j)||Z))W.add(j);for(let j of W){if(Object.hasOwn(X,j)||M3($,j))continue;let Y=R3(j);if(Y)X[j]=Y}if(!Z)return X;for(let j of J){if(!Y9(j)||Object.hasOwn(X,j)||M3($,j)||j.startsWith("node:")||P3.has(j))continue;let Y=R3(j);if(Y)X[j]=Y}return X}function xE($){let Z=R8($);return Z===".ts"||Z===".tsx"||Z===".mts"||Z===".cts"}var G2;function yE(){if(G2!==void 0)return G2;let $=gB("jiti");if(!$)return G2=null,null;let Z=$0($,"dist","babel.cjs");if(!h0(Z))return G2=null,null;try{let X=C3(Z)(Z);G2=typeof X==="function"?X:null}catch{G2=null}return G2}async function lB($,Z={}){let Q=!SE($);uB($,Q);let X=kE($,Q),J=RE(X),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");let Y=Object.entries(J).filter(([,G])=>xE(G)).map(([G])=>G),V=yE(),B=V?(G)=>V({...G,interopDefault:!0}):void 0;return await j($,{alias:J,cache:Z.useCache,requireCache:Z.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...P3],transformModules:Y,tryNative:!1,...B?{transform:B}:{}}).import($,{})}function pB($,Z){if(!$)return!0;if($.providerIds?.length){if(!Z?.providerId||!$.providerIds.includes(Z.providerId))return!1}if($.modelIds?.length){if(!Z?.modelId||!$.modelIds.includes(Z.modelId))return!1}return!0}function iB($){return typeof $==="object"&&$!==null}function w3($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function vE($,Z){if(!iB($.manifest))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);if(!w3($.manifest.capabilities))throw Error(`Invalid plugin module at ${Z}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${Z}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!w3($.manifest.providerIds))throw Error(`Invalid plugin module at ${Z}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!w3($.manifest.modelIds))throw Error(`Invalid plugin module at ${Z}: manifest.modelIds must be a string array when provided`)}function gE($,Z){if(!iB($))throw Error(`Invalid plugin module at ${Z}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${Z}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);vE($,Z)}async function S3($,Z={}){let Q=IE(Z.cwd??process.cwd(),$),X=await lB(Q,{useCache:Z.useCache}),J=Z.exportName??"plugin",W=X.default??X[J];gE(W,Q);let j=W,Y=j.setup,V=Y?(B,K)=>{let G={...Z.session,...K.session},H={...K,session:Object.keys(G).length>0?G:void 0,client:Z.client??K.client,user:Z.user??K.user,workspaceInfo:Z.workspaceInfo??K.workspaceInfo,automation:Z.automation??K.automation,logger:Z.logger??K.logger,telemetry:Z.telemetry??K.telemetry};return Y(B,H)}:void 0;return{...j,manifest:hE(j.manifest),setup:V}}async function rB($,Z={}){return(await C8($,Z)).plugins}async function C8($,Z={}){let Q=[],X=[],J=new Map,W=0;for(let Y of $)try{let V=await S3(Y,Z);if(!pB(V.manifest,Z))continue;let B=J.get(V.name);if(B)X.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:Y,overriddenPluginPath:B.pluginPath,message:`Plugin "${V.name}" from ${Y} overrides ${B.pluginPath}`});J.set(V.name,{plugin:V,pluginPath:Y,order:W++})}catch(V){let B=V instanceof Error?V.message:String(V);Q.push({pluginPath:Y,phase:"load",message:B,stack:V instanceof Error?V.stack:void 0})}let j=[...J.values()].sort((Y,V)=>Y.order-V.order);return{plugins:j.map((Y)=>Y.plugin),pluginPaths:j.map((Y)=>Y.pluginPath),failures:Q,warnings:X}}import{existsSync as I3}from"node:fs";import{createRequire as eB}from"node:module";import{dirname as G9,join as K6}from"node:path";import{fileURLToPath as rE}from"node:url";import{spawn as mE}from"node:child_process";import{basename as cE}from"node:path";import{augmentNodeCommandForDebug as uE,withResolvedClineBuildEnv as dE}from"@cline/shared";var P8=2147483647;function aB($){return typeof $==="number"&&Number.isInteger($)&&$>0&&$<=2147483647?$:void 0}var lE=300;function b3($){if($ instanceof Error)return $;return Error(String($))}function k3($){return $.exitCode===null&&$.signalCode===null}function V9($){return k3($)&&$.connected}var pE="CLINE_JS_RUNTIME_PATH";function nB($){let Z=$?.trim();if(!Z)return!1;let Q=cE(Z).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function oB($={}){let Z=$.env??process.env,Q=$.runtimeExecutable?.trim()||Z[pE]?.trim();if(Q)return Q;let X=$.execPath?.trim()||process.execPath;if(nB(X))return X;for(let J of[Z.BUN_EXEC_PATH,Z.npm_node_execpath,Z.NODE]){let W=J?.trim();if(W&&nB(W))return W}return"node"}function iE($,Z={}){let Q=oB({env:Z.env,execPath:Z.execPath,runtimeExecutable:Z.runtimeExecutable});return uE([Q,...$],{env:Z.env,execArgv:Z.execArgv,debugRole:Z.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class B9{options;idleTimeoutMs;process=null;requestCounter=0;pending=new Map;idleTimer;shutdowns=new Map;constructor($){if(this.options=$,this.idleTimeoutMs=aB($.idleTimeoutMs),$.idleTimeoutMs!==void 0&&this.idleTimeoutMs===void 0)throw RangeError(`idleTimeoutMs must be an integer between 1 and ${P8}`)}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let Z=this.pending.get($);if(!Z)return;if(this.pending.delete($),Z.timeout)clearTimeout(Z.timeout);return this.armIdleTimer(Z.child),Z}clearIdleTimer(){if(!this.idleTimer)return;clearTimeout(this.idleTimer),this.idleTimer=void 0}hasPendingRequests($){for(let Z of this.pending.values())if(Z.child===$)return!0;return!1}armIdleTimer($){if(this.process!==$)return;if(this.clearIdleTimer(),this.idleTimeoutMs===void 0||!V9($)||this.hasPendingRequests($))return;let Z=setTimeout(()=>{if(this.idleTimer===Z)this.idleTimer=void 0;if(this.process!==$||!V9($)||this.hasPendingRequests($))return;this.shutdownProcess($).catch(()=>{})},this.idleTimeoutMs);Z.unref(),this.idleTimer=Z}start(){if(this.process&&V9(this.process))return;let $=this.process;if(this.process=null,this.clearIdleTimer(),$&&k3($))this.shutdownProcess($).catch(()=>{});let Z=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],Q=iE(Z,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),X=mE(Q[0]??oB(this.options),Q.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:dE(process.env),windowsHide:!0});this.process=X;let J="",W=(j)=>{let Y=J+j;J=Y.length>4000?Y.slice(-4000):Y};X.stderr?.setEncoding("utf8"),X.stderr?.on("data",(j)=>{W(j)}),X.on("message",(j)=>{this.onMessage(X,j)}),X.on("error",(j)=>{this.failPendingForProcess(X,Error(`${this.processLabel} process error: ${b3(j).message}`))}),X.on("exit",(j,Y)=>{if(this.process===X)this.process=null,this.clearIdleTimer();let V=J.trim();this.failPendingForProcess(X,Error(`${this.options.name??"sandbox"} process exited (code=${String(j)}, signal=${String(Y)})${V?`: ${V}`:""}`))}),this.armIdleTimer(X)}async call($,Z,Q={}){this.start();let X=this.process;if(!X||!V9(X))throw Error(`${this.processLabel} process is not available`);this.clearIdleTimer();let J=`req_${++this.requestCounter}`,W={type:"call",id:J,method:$,args:Z};return await new Promise((j,Y)=>{let V={child:X,resolve:(B)=>j(B),reject:Y};if((Q.timeoutMs??0)>0)V.timeout=setTimeout(()=>{let B=this.clearPendingRequest(J);if(!B)return;this.shutdownProcess(B.child).catch(()=>{}),B.reject(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(J,V);try{X.send(W,(B)=>{if(!B)return;let K=this.clearPendingRequest(J);if(!K)return;K.reject(Error(`${this.processLabel} failed to send call "${$}": ${b3(B).message}`))})}catch(B){this.clearPendingRequest(J),Y(b3(B))}})}async shutdown(){this.clearIdleTimer();let $=this.process,Z=[...this.shutdowns.values()];if($)Z.push(this.shutdownProcess($));if(Z.length===0){this.failPending(Error(`${this.processLabel} shutdown`));return}await Promise.all(Z)}shutdownProcess($){let Z=this.shutdowns.get($);if(Z)return Z;if(this.process===$)this.process=null,this.clearIdleTimer();let Q=this.terminateProcess($).finally(()=>{if(this.shutdowns.get($)===Q)this.shutdowns.delete($)});return this.shutdowns.set($,Q),Q}async terminateProcess($){if(!k3($)){this.failPendingForProcess($,Error(`${this.processLabel} shutdown`));return}await new Promise((Z)=>{let Q=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}Z()},lE);$.once("exit",()=>{clearTimeout(Q),Z()});try{$.kill("SIGTERM")}catch{clearTimeout(Q),Z()}}),this.failPendingForProcess($,Error(`${this.processLabel} shutdown`))}onMessage($,Z){if(!Z)return;if(Z.type==="event"){if(this.process===$&&typeof Z.name==="string"&&Z.name.length>0)this.options.onEvent?.({name:Z.name,payload:Z.payload});return}if(Z.type!=="response"||!Z.id)return;let Q=this.pending.get(Z.id);if(!Q||Q.child!==$)return;let X=this.clearPendingRequest(Z.id);if(!X)return;if(Z.ok){X.resolve(Z.result);return}X.reject(Error(Z.error?.message||`${this.processLabel} call failed`))}failPendingForProcess($,Z){for(let[Q,X]of this.pending.entries()){if(X.child!==$)continue;if(this.pending.delete(Q),X.timeout)clearTimeout(X.timeout);X.reject(Z)}}failPending($){for(let[Z,Q]of this.pending.entries()){if(this.pending.delete(Z),Q.timeout)clearTimeout(Q.timeout);Q.reject($)}}}var aE="CLINE_PLUGIN_IDLE_TIMEOUT_MS",nE=1800000;function oE($){return{...$,contributions:{tools:$.contributions?.tools??[],commands:$.contributions?.commands??[],rules:$.contributions?.rules??[],messageBuilders:$.contributions?.messageBuilders??[],providers:$.contributions?.providers??[],automationEventTypes:$.contributions?.automationEventTypes??[],mcpServers:$.contributions?.mcpServers??[],shortcuts:$.contributions?.shortcuts??[],flags:$.contributions?.flags??[]}}}function f8($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function sE(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function tE(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=eB($).resolve(`${sE()}/package.json`),X=K6(G9(Q),"extensions","plugin-sandbox-bootstrap.js");return I3(X)?X:void 0}catch{return}}function eE(){let $=process.execPath?.trim();if(!$)return;let Z=K6(G9(G9($)),"extensions","plugin-sandbox-bootstrap.js");return I3(Z)?Z:void 0}function $M($){let Z=$.exists??I3;for(let Q of $.siblingCandidates)if(Z(Q))return{file:Q};if(Z($.sourceBootstrapPath))return{sourcePath:$.sourceBootstrapPath};for(let Q of $.installedCandidates)if(Q&&Z(Q))return{file:Q};return{sourcePath:$.sourceBootstrapPath}}function ZM(){let $=G9(rE(import.meta.url)),Z=eB(import.meta.url),Q=$M({siblingCandidates:[K6($,"plugin-sandbox-bootstrap.js"),K6($,"extensions","plugin-sandbox-bootstrap.js"),K6($,"agents","plugin-sandbox-bootstrap.js")],sourceBootstrapPath:K6($,"plugin-sandbox-bootstrap.ts"),installedCandidates:[tE(),eE()]});if("file"in Q)return Q;let X=Q.sourcePath,J="jiti";try{J=Z.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(J)});`,`const jiti = createJiti(${JSON.stringify(X)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(X)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
45
+ </html>`;function kV($){let Z="";for(let Q=0;Q<$.length;Q+=1)Z+=String.fromCharCode($[Q]??0);return btoa(Z).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function eq($){let Q=new TextEncoder().encode($),X=await crypto.subtle.digest("SHA-256",Q);return new Uint8Array(X)}function $A($=32){let Z=new Uint8Array($);return crypto.getRandomValues(Z),kV(Z)}async function m5(){let $=$A(),Z=kV(await eq($));return{verifier:$,challenge:Z}}function c5($){return $.endsWith("/")?$.slice(0,-1):$}function B2($,Z){return new URL(Z,`${c5($)}/`).toString()}function t2($,Z={}){let Q=$.trim();if(!Q)return{};try{let X=new URL(Q);return{code:X.searchParams.get("code")??void 0,state:X.searchParams.get("state")??void 0,provider:Z.includeProvider?X.searchParams.get("provider")??void 0:void 0}}catch{}if(Z.allowHashCodeState&&Q.includes("#")){let[X,J]=Q.split("#",2);return{code:X||void 0,state:J||void 0}}if(Q.includes("code=")){let X=new URLSearchParams(Q);return{code:X.get("code")??void 0,state:X.get("state")??void 0,provider:Z.includeProvider?X.get("provider")??void 0:void 0}}return{code:Q}}function e2($){try{let Z=JSON.parse($),Q=Z.error,X=typeof Q==="string"?Q:Q&&typeof Q==="object"&&typeof Q.type==="string"?Q.type:void 0,J=typeof Z.error_description==="string"?Z.error_description:typeof Z.message==="string"?Z.message:Q&&typeof Q==="object"&&typeof Q.message==="string"?Q.message:void 0;return{code:X,message:J}}catch{return{}}}function $6($,Z){return Date.now()>=$.expires-Z}async function Z6($){if(!$.onManualCodeInput){let W=await $.waitForCallback();return{code:W?.code,state:W?.state,provider:W?.provider,error:W?.error}}let Z,Q,X=$.onManualCodeInput().then((W)=>{Z=W,$.cancelWait()}).catch((W)=>{Q=W instanceof Error?W:Error(String(W)),$.cancelWait()}),J=await $.waitForCallback();if(Q)throw Q;if(J?.code||J?.error)return{code:J.code,state:J.state,provider:J.provider,error:J.error};if(Z)return t2(Z,$.parseOptions);if(await X,Q)throw Q;if(Z)return t2(Z,$.parseOptions);return{}}var u5={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},hV={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},uQ="https://api.workos.com",QA="/auth",xV=Array.from({length:11},($,Z)=>48801+Z),XA=300000,JA=30000,Q6=30000,WA=300,jA=5;class e0 extends Error{status;errorCode;requestId;constructor($,Z){super($);this.name="ClineOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode,this.requestId=Z?.requestId}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 YA($){let Z=Date.parse($);if(Number.isNaN(Z))throw Error(`Invalid expiresAt value: ${$}`);return Z}function dQ($,Z,Q={}){let X=$.userInfo.clineUserId??Q.accountId,J=$.refreshToken??Q.refresh;if(!J)throw Error("Token response did not include a refresh token");let W={...Q.metadata??{},provider:Z,tokenType:$.tokenType,userInfo:$.userInfo};return delete W.startedAt,{access:$.accessToken,refresh:J,expires:YA($.expiresAt),accountId:X??void 0,email:$.userInfo.email||Q.email,metadata:W}}async function lQ($){if(!$)return{};return typeof $==="function"?await $():$}function yV($,Z){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return Z;return Math.floor($)}function VA($){return typeof $==="string"&&$.trim()||void 0}function BA($){let Z=ZA($);if(!Z)return{};return{sessionId:VA(Z.sid)}}function KA($){let Z={},Q=$.metadata?.sessionStartedAtMs;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)Z.sessionDurationMs=Date.now()-Q;return Z}function pQ($){return{...BA($.access),...KA($)}}async function IV($){await new Promise((Z)=>setTimeout(Z,$))}function iQ($,Z){if(!$.success||!$.data?.accessToken)throw Error(Z);return $.data}async function vV($,Z){let Q=await fetch(B2(uQ,hV.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(Z?.requestTimeoutMs??Q6)}),X=await Q.json().catch(()=>({}));if(!Q.ok)throw new e0(`Device authorization failed: ${Q.status}${X.error_description?` - ${X.error_description}`:""}`,{status:Q.status,errorCode:X.error,requestId:Q.headers.get("x-request-id")??void 0});if(!X.device_code||!X.user_code||!X.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:X.device_code,userCode:X.user_code,verificationUri:X.verification_uri,verificationUriComplete:X.verification_uri_complete,expiresInSeconds:yV(X.expires_in,WA),pollIntervalSeconds:yV(X.interval,jA)}}async function gV($){let Z=Date.now()+$.expiresInSeconds*1000,Q=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=Z){let X=await fetch(B2($.workosApiBaseUrl,hV.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),J=await X.json().catch(()=>({}));if(X.ok){if(!J.access_token||!J.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:J.access_token,refreshToken:J.refresh_token,tokenType:J.token_type??"Bearer"}}switch(J.error){case"authorization_pending":{await IV(Q*1000);break}case"slow_down":{Q+=1,await IV(Q*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new e0(J.error_description||"WorkOS authorization failed",{status:X.status,errorCode:J.error,requestId:X.headers.get("x-request-id")??void 0});default:throw new e0(`WorkOS token polling failed: ${X.status}${J.error_description?` - ${J.error_description}`:""}`,{status:X.status,errorCode:J.error,requestId:X.headers.get("x-request-id")??void 0})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function mV($,Z,Q){let X={accessToken:$.accessToken,refreshToken:$.refreshToken},J=await fetch(B2(Z.apiBaseUrl,u5.register),{method:"POST",headers:{"Content-Type":"application/json",...await lQ(Z.headers)},body:JSON.stringify(X),signal:AbortSignal.timeout(Z.requestTimeoutMs??Q6)});if(!J.ok){let j=await J.text().catch(()=>""),Y=e2(j);throw new e0(`Token registration failed: ${J.status}${Y.message?` - ${Y.message}`:""}`,{status:J.status,errorCode:Y.code,requestId:J.headers.get("x-request-id")??void 0})}let W=await J.json();return dQ(iQ(W,"Invalid token exchange response"),Q??Z.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function GA($,Z,Q,X){let J={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:Z,provider:X??Q.provider},W=await fetch(B2(Q.apiBaseUrl,u5.token),{method:"POST",headers:{"Content-Type":"application/json",...await lQ(Q.headers)},body:JSON.stringify(J),signal:AbortSignal.timeout(Q.requestTimeoutMs??Q6)});if(!W.ok){let Y=await W.text().catch(()=>""),V=e2(Y);throw new e0(`Token exchange failed: ${W.status}${V.message?` - ${V.message}`:""}`,{status:W.status,errorCode:V.code,requestId:W.headers.get("x-request-id")??void 0})}let j=await W.json();return dQ(iQ(j,"Invalid token exchange response"),X??Q.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function rQ($){z$($.telemetry,$.provider??"cline");let Z=$.useWorkOSDeviceAuth??!0,Q=$.callbackPorts?.length?$.callbackPorts:xV,X=$.callbackPath??QA,J=Z?null:await n1({ports:Q,callbackPath:X,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),W=J?.callbackUrl||`http://127.0.0.1:${Q[0]??xV[0]}${X}`;try{let j;if(Z){let Y=cQ().workOsClientId,V=await vV(Y,$);$.callbacks.onAuth({url:V.verificationUriComplete??V.verificationUri,instructions:`Enter this code in your browser: ${V.userCode}`});let B=await gV({clientId:Y,deviceCode:V.deviceCode,expiresInSeconds:V.expiresInSeconds,initialPollIntervalSeconds:V.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??Q6,workosApiBaseUrl:uQ,onProgress:$.callbacks.onProgress});j=await mV(B,$,$.provider)}else{let Y=new URL(B2($.apiBaseUrl,u5.authorize));Y.searchParams.set("client_type","extension"),Y.searchParams.set("callback_url",W),Y.searchParams.set("redirect_uri",W),$.callbacks.onAuth({url:Y.toString(),instructions:"Continue the authentication process in your browser."});let V,B=$.provider,K=await Z6({waitForCallback:J?.waitForCallback??(async()=>null),cancelWait:J?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(K.error)throw Error(`OAuth error: ${K.error}`);if(V=K.code,B=K.provider??B,!V){let G=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),H=t2(G,{includeProvider:!0});V=H.code,B=H.provider??B}if(!V)throw Error("Missing authorization code");j=await GA(V,W,$,B)}return O$($.telemetry,$.provider??"cline",pQ(j)),q$($.telemetry,{id:j.accountId,email:j.email,provider:$.provider??"cline"}),j}catch(j){throw N$($.telemetry,$.provider??"cline",j instanceof Error?j.message:String(j),{requestId:j instanceof e0?j.requestId:void 0}),j}finally{J?.close()}}async function HA($){return await vV(cQ().workOsClientId,$)}async function UA($){let Z=$.provider??"cline";z$($.telemetry,Z);try{let Q=await gV({clientId:cQ().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??Q6,workosApiBaseUrl:uQ}),X=await mV(Q,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return O$($.telemetry,Z,pQ(X)),q$($.telemetry,{id:X.accountId,email:X.email,provider:Z}),X}catch(Q){throw N$($.telemetry,Z,Q instanceof Error?Q.message:String(Q),{requestId:Q instanceof e0?Q.requestId:void 0}),Q}}async function cV($,Z){let Q=B2(Z.apiBaseUrl,u5.refresh);j0(`cline.refresh.request url=${Q} refreshTokenHash=${a0($.refresh)}`);let X=await fetch(Q,{method:"POST",headers:{"Content-Type":"application/json",...await lQ(Z.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(Z.requestTimeoutMs??Q6)});if(!X.ok){let Y=await X.text().catch(()=>""),V=e2(Y),B=X.headers.get("x-request-id")??void 0;throw j0(`cline.refresh.error status=${X.status} errorCode=${V.code??"none"} message=${V.message??"none"} requestId=${B??"none"}`),new e0(`Token refresh failed: ${X.status}${V.message?` - ${V.message}`:""}`,{status:X.status,errorCode:V.code,requestId:B})}let J=await X.json(),W=$.metadata?.provider??Z.provider,j=dQ(iQ(J,"Invalid token refresh response"),W,$);return j0(`cline.refresh.success newAccessTokenHash=${a0(j.access)} newRefreshTokenHash=${a0(j.refresh)} expires=${j.expires}`),j}async function aQ($,Z,Q){if(!$)return j0("cline.getCredentials outcome=no_current_credentials"),null;let X=Q?.refreshBufferMs??XA,J=Q?.retryableTokenGraceMs??JA,W=Q?.forceRefresh===!0;if(!W&&!$6($,X))return j0(`cline.getCredentials outcome=still_valid forceRefresh=${W}`),$;j0(`cline.getCredentials outcome=needs_refresh forceRefresh=${W} accessTokenHash=${a0($.access)}`);try{return await cV($,Z)}catch(j){let Y=pQ($),V=j instanceof e0&&j.requestId?{request_id:j.requestId}:{},B={status:j instanceof e0?j.status:void 0,errorCode:j instanceof e0?j.errorCode:void 0,...V,...Y,errorName:j instanceof Error?j.name:void 0};if(j instanceof e0&&j.isLikelyInvalidGrant())return j0(`cline.getCredentials outcome=invalid_grant status=${j.status} errorCode=${j.errorCode??"none"}`),Y2(Z.telemetry,Z.provider??"cline","token_invalid",{status:j.status,errorCode:j.errorCode,...V,...Y}),null;if($.expires-Date.now()>J)return j0(`cline.getCredentials outcome=transient_failure_kept_current error=${j instanceof Error?j.message:String(j)}`),h5(Z.telemetry,Z.provider??"cline",{...B,tokenExpired:!1}),$;throw j0(`cline.getCredentials outcome=transient_failure_rethrown error=${j instanceof Error?j.message:String(j)}`),h5(Z.telemetry,Z.provider??"cline",{...B,tokenExpired:!0}),j}}_0();import{decodeJwtPayload as nQ}from"@cline/shared";import{nanoid as FA}from"nanoid";var q0={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 d5 extends Error{status;errorCode;constructor($,Z){super($);this.name="OpenAICodexOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function LA($,Z,Q=q0.redirectUri){let X=await fetch(q0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:q0.clientId,code:$,code_verifier:Z,redirect_uri:Q}),signal:AbortSignal.timeout(q0.httpTimeoutMs)});if(!X.ok)return{type:"failed"};let J=await X.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}async function DA($){try{let Z=await fetch(q0.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:q0.clientId}),signal:AbortSignal.timeout(q0.httpTimeoutMs)});if(!Z.ok){let X=await Z.text().catch(()=>""),J=e2(X);throw new d5(`Token refresh failed: ${Z.status}${J.message?` - ${J.message}`:""}`,{status:Z.status,errorCode:J.code})}let Q=await Z.json();if(!Q.access_token||!Q.refresh_token||typeof Q.expires_in!=="number")return{type:"failed"};return{type:"success",access:Q.access_token,refresh:Q.refresh_token,expires:Date.now()+Q.expires_in*1000,email:Q.email,idToken:Q.id_token}}catch(Z){if(Z instanceof d5)throw Z;return{type:"failed"}}}async function _A($="pi"){let{verifier:Z,challenge:Q}=await m5(),X=FA(32),J=new URL(q0.authorizationEndpoint);return J.searchParams.set("response_type","code"),J.searchParams.set("client_id",q0.clientId),J.searchParams.set("redirect_uri",q0.redirectUri),J.searchParams.set("scope",q0.scopes),J.searchParams.set("code_challenge",Q),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("state",X),J.searchParams.set("id_token_add_organizations","true"),J.searchParams.set("codex_cli_simplified_flow","true"),J.searchParams.set("originator",$),{verifier:Z,state:X,url:J.toString()}}function zA(){try{let $=new URL(q0.redirectUri),Z=$.port.length>0?Number.parseInt($.port,10):q0.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(Z)?Z:q0.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:q0.callbackPort,callbackPath:"/auth/callback",redirectUri:q0.redirectUri}}}function OA($,Z){let Q=Z?nQ(Z):nQ($),X=Q?Q:nQ($),W=X?.[q0.jwtClaimPath]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let j=X?.organizations;if(Array.isArray(j)&&j.length>0){let V=j[0];if(typeof V?.id==="string"&&V.id.length>0)return V.id}let Y=X?.chatgpt_account_id;if(typeof Y==="string"&&Y.length>0)return Y;return null}function uV($,Z){let Q=OA($.access,$.idToken)??Z?.accountId;if(!Q)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||Z?.refresh||"",expires:$.expires,accountId:Q,email:$.email??Z?.email,metadata:{...Z?.metadata??{},provider:"openai-codex"}}}async function oQ($){z$($.telemetry,"openai-codex");let Z=zA(),{verifier:Q,state:X,url:J}=await _A($.originator),W=await n1({host:Z.host,ports:[Z.port],callbackPath:Z.callbackPath,expectedState:X});$.onAuth({url:J,instructions:"Continue the authentication process in your browser."});let j;try{let Y=await Z6({waitForCallback:W.waitForCallback,cancelWait:W.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(Y.state&&Y.state!==X)throw Error("State mismatch");if(j=Y.code,!j){let K=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),G=t2(K,{allowHashCodeState:!0});if(G.state&&G.state!==X)throw Error("State mismatch");j=G.code}if(!j)throw Error("Missing authorization code");let V=await LA(j,Q,Z.redirectUri);if(V.type!=="success")throw Error("Token exchange failed");let B=uV(V);return O$($.telemetry,"openai-codex"),q$($.telemetry,{id:B.accountId,email:B.email,provider:"openai-codex"}),B}catch(Y){throw N$($.telemetry,"openai-codex",Y instanceof Error?Y.message:String(Y)),Y}finally{W.close()}}async function dV($,Z){let Q=await DA($);if(Q.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let X=uV(Q,Z);if(!X.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return X}async function sQ($,Z){if(!$)return null;let Q=Z?.refreshBufferMs??q0.refreshBufferMs,X=Z?.retryableTokenGraceMs??q0.retryableTokenGraceMs;if(Z?.forceRefresh!==!0&&!$6($,Q))return $;try{return await dV($.refresh,$)}catch(W){if(W instanceof d5&&W.isLikelyInvalidGrant())return Y2(Z?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>X)return $;return null}}_0();import{decodeJwtPayload as O8}from"@cline/shared";import{nanoid as lV}from"nanoid";class tQ{ttlMs;maxEntries;entries=new Map;constructor($,Z){this.ttlMs=$;this.maxEntries=Z}get($,Z=Date.now()){this.pruneExpired(Z);let Q=this.entries.get($);if(!Q)return;return this.entries.delete($),this.entries.set($,Q),Q.value}set($,Z,Q=Date.now(),X=this.ttlMs){this.pruneExpired(Q),this.entries.delete($);while(this.entries.size>=this.maxEntries){let J=this.entries.keys().next().value;if(J===void 0)break;this.entries.delete(J)}this.entries.set($,{value:Z,expiresAt:Q+X})}pruneExpired($){for(let[Z,Q]of this.entries)if(Q.expiresAt<=$)this.entries.delete(Z)}}var NA="a8331954c0cf48ba99b5dd223a14c6ea",qA="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",AA="openid offline_access",$3="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",TA="c1aba3deed5740659981a752714eba33",EA="https://login-ext.identity.oraclecloud.com",MA="openid offline_access",Z3="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm";var RA="/auth/oca",CA=Array.from({length:11},($,Z)=>48801+Z),PA=300000,fA=30000,pV=30000,wA=600000;class l5 extends Error{status;errorCode;constructor($,Z){super($);this.name="OcaOAuthTokenError",this.status=Z?.status,this.errorCode=Z?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var A$={internal:{clientId:NA,idcsUrl:qA,scopes:AA,baseUrl:$3},external:{clientId:TA,idcsUrl:EA,scopes:MA,baseUrl:Z3}},N8=new Map,SA=86400000,bA=300000,kA=32,eQ=new tQ(SA,kA);function iV($){if(typeof $==="function")return $();return $??"internal"}function rV($){return{internal:{clientId:$?.internal?.clientId??A$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??A$.internal.idcsUrl,scopes:$?.internal?.scopes??A$.internal.scopes,baseUrl:$?.internal?.baseUrl??A$.internal.baseUrl},external:{clientId:$?.external?.clientId??A$.external.clientId,idcsUrl:$?.external?.idcsUrl??A$.external.idcsUrl,scopes:$?.external?.scopes??A$.external.scopes,baseUrl:$?.external?.baseUrl??A$.external.baseUrl}}}function xA($=Date.now()){let Z=$-wA;for(let[Q,X]of N8.entries())if(X.createdAt<Z)N8.delete(Q)}function yA($,Z,Q){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let J=O8(Z)?.exp;if(typeof J==="number"&&J>0)return J*1000;let j=O8(Q)?.exp;if(typeof j==="number"&&j>0)return j*1000;return Date.now()+3600000}function aV($,Z,Q){let X=$.access_token;if(!X)throw Error("Token response did not include an access token");let J=$.refresh_token??Q?.refresh;if(!J)throw Error("Token response did not include a refresh token");let W=O8($.id_token),j=O8(X),Y=W?.sub??j?.sub,V=W?.email??j?.email;return{access:X,refresh:J,expires:yA($,X,$.id_token),accountId:Y??Q?.accountId,email:V??Q?.email,metadata:{...Q?.metadata??{},provider:"oca",mode:Z,subject:Y,idToken:$.id_token}}}async function nV($,Z){let Q=c5($),X=eQ.get(Q);if(X)return X;let J=`${Q}/.well-known/openid-configuration`,W=await fetch(J,{method:"GET",signal:AbortSignal.timeout(Z)});if(!W.ok){let V=`${Q}/oauth2/v1/token`;return eQ.set(Q,V,Date.now(),bA),V}let Y=(await W.json()).token_endpoint||`${Q}/oauth2/v1/token`;return eQ.set(Q,Y),Y}function oV($){return{code:$.error,message:$.error_description}}async function IA($){let Z=N8.get($.state);if(!Z)throw Error("No PKCE verifier found for this state");N8.delete($.state);let Q=$.mode==="external"?$.config.external:$.config.internal,X=await nV(Q.idcsUrl,$.requestTimeoutMs),J=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:Z.redirectUri,client_id:Q.clientId,code_verifier:Z.verifier}),W=await fetch(X,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:J,signal:AbortSignal.timeout($.requestTimeoutMs)}),j=await W.json();if(!W.ok){let V=oV(j);throw new l5(`Token exchange failed: ${W.status}${V.message?` - ${V.message}`:""}`,{status:W.status,errorCode:V.code})}let Y=O8(j.id_token);if(!j.id_token||!Y)throw Error("No ID token received from OCA");if(Y.nonce!==Z.nonce)throw Error("OIDC nonce verification failed");return aV(j,$.mode)}function hA($){let Z=$.mode==="external"?$.config.external:$.config.internal,Q=new URL(`${c5(Z.idcsUrl)}/oauth2/v1/authorize`);return Q.searchParams.set("client_id",Z.clientId),Q.searchParams.set("response_type","code"),Q.searchParams.set("scope",Z.scopes),Q.searchParams.set("code_challenge",$.challenge),Q.searchParams.set("code_challenge_method","S256"),Q.searchParams.set("redirect_uri",$.callbackUrl),Q.searchParams.set("state",$.state),Q.searchParams.set("nonce",$.nonce),Q.toString()}async function Q3($){z$($.telemetry,"oca");let Z=rV($.config),Q=iV($.mode),X=$.callbackPorts?.length?$.callbackPorts:CA,J=$.callbackPath??RA,W=$.requestTimeoutMs??pV,j=await n1({ports:X,callbackPath:J,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),Y=j.callbackUrl;if(!Y)throw Error("Unable to bind local OAuth callback server");let V=lV(16),B=lV(16),{verifier:K,challenge:G}=await m5();xA(),N8.set(V,{verifier:K,nonce:B,mode:Q,redirectUri:Y,createdAt:Date.now()});let H=hA({callbackUrl:Y,mode:Q,state:V,nonce:B,challenge:G,config:Z});$.callbacks.onAuth({url:H,instructions:"Continue the authentication process in your browser."});try{let U=await Z6({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),F=U.code,L=U.state;if(U.error)throw Error(`OAuth error: ${U.error}`);if(!F){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!L||L!==V)throw Error("State mismatch");let D=await IA({code:F,state:L,mode:Q,config:Z,requestTimeoutMs:W});return O$($.telemetry,"oca"),q$($.telemetry,{id:D.accountId,email:D.email,provider:"oca"}),D}catch(U){throw N$($.telemetry,"oca",U instanceof Error?U.message:String(U)),U}finally{j.close()}}async function sV($,Z={}){let Q=rV(Z.config),X=Z.requestTimeoutMs??pV,J=$.metadata?.mode,W=J==="internal"||J==="external"?J:iV(Z.mode),j=W==="external"?Q.external:Q.internal,Y=await nV(j.idcsUrl,X),V=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:j.clientId}),B=await fetch(Y,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:V,signal:AbortSignal.timeout(X)}),K=await B.json();if(!B.ok){let G=oV(K);throw new l5(`Token refresh failed: ${B.status}${G.message?` - ${G.message}`:""}`,{status:B.status,errorCode:G.code})}return aV(K,W,$)}async function X3($,Z,Q){if(!$)return null;let X=Z?.refreshBufferMs??Q?.refreshBufferMs??PA,J=Z?.retryableTokenGraceMs??Q?.retryableTokenGraceMs??fA;if(Z?.forceRefresh!==!0&&!$6($,X))return $;try{return await sV($,Q)}catch(j){if(j instanceof l5&&j.isLikelyInvalidGrant())return Y2(Q?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>J)return $;return null}}import{decodeJwtPayload as vA,getClineEnvironmentConfig as tV}from"@cline/shared";var p5="workos:";function gA($){let Z=$.trim();return Z.toLowerCase().startsWith(p5)?Z:`${p5}${Z}`}function mA($){let Z=$.trim();return Z.toLowerCase().startsWith(p5)?Z.slice(p5.length):Z}function cA($){let Q=vA($)?.exp;if(typeof Q==="number"&&Q>0)return Q*1000;return null}function uA($,Z){let Q=$.auth?.expiresAt;if(typeof Q==="number"&&Number.isFinite(Q)&&Q>0)return Q;let X=cA(Z);if(X)return X;return Date.now()-1}function dA($,Z){let Q=$.auth?.accessToken?.trim(),X=$.auth?.refreshToken?.trim();if(!Q||!X)return null;let J=Z?.normalizeAccessToken?.(Q)??Q;if(!J)return null;return{access:J,refresh:X,expires:uA($,J),accountId:$.auth?.accountId,metadata:$.auth?.metadata}}function lA($){let Z=$.formatAccessToken?.($.credentials.access)??$.credentials.access,Q={...$.settings?.auth??{},accessToken:Z,refreshToken:$.credentials.refresh,accountId:$.credentials.accountId,expiresAt:$.credentials.expires},X=Object.fromEntries(Object.entries($.credentials.metadata??{}).filter(([,j])=>j!==void 0)),J={...$.settings?.auth?.metadata??{},...X};if(Object.keys(J).length>0)Q.metadata=J;let W={...$.settings??{provider:$.storageProviderId},provider:$.storageProviderId,auth:Q};if($.save!==!1)$.manager.saveProviderSettings(W,{...$.setLastUsed===void 0?{}:{setLastUsed:$.setLastUsed},tokenSource:"oauth"});return W}function J3($){let Z=$.storageProviderId??$.providerId;return{providerId:$.providerId,storageProviderId:Z,getApiKey(Q){let X=Q?.auth?.accessToken?.trim();if(X)return $.formatAccessToken?.(X)??X;return Q?.apiKey?.trim()||Q?.auth?.apiKey?.trim()||void 0},login:$.login,refresh:$.refresh,saveCredentials(Q){return lA({...Q,storageProviderId:Z,formatAccessToken:$.formatAccessToken})},isConfigured(Q){return!!Q?.auth?.accessToken},normalizeStoredAccessToken:$.normalizeStoredAccessToken}}function eV($){return J3({providerId:$.providerId,storageProviderId:$.storageProviderId,formatAccessToken:gA,normalizeStoredAccessToken:mA,login:({settings:Z,callbacks:Q,telemetry:X})=>rQ({apiBaseUrl:Z?.baseUrl?.trim()||tV().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Q,telemetry:X}),refresh:({settings:Z,credentials:Q,forceRefresh:X,telemetry:J})=>aQ(Q,{apiBaseUrl:Z.baseUrl?.trim()||tV().apiBaseUrl,telemetry:J},{forceRefresh:X})})}var pA=[eV({providerId:"cline"}),eV({providerId:"cline-pass",storageProviderId:"cline"}),J3({providerId:"oca",login:({settings:$,callbacks:Z,telemetry:Q})=>Q3({mode:$?.oca?.mode,callbacks:Z,telemetry:Q}),refresh:({settings:$,credentials:Z,forceRefresh:Q,telemetry:X})=>X3(Z,{forceRefresh:Q,telemetry:X},{mode:$.oca?.mode,telemetry:X})}),J3({providerId:"openai-codex",login:({callbacks:$,telemetry:Z})=>oQ({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput,telemetry:Z}),refresh:({credentials:$,forceRefresh:Z,telemetry:Q})=>sQ($,{forceRefresh:Z,telemetry:Q})})],iA=new Map(pA.map(($)=>[$.providerId,$]));function b0($){return iA.get($.trim().toLowerCase())}function X6($){return b0($)!==void 0}function rA($){return b0($)?.storageProviderId}function aA($,Z){let Q=b0(Z),X=Q?.storageProviderId??Z,J=$.getProviderSettings(X);return Q?.getApiKey(J)??i5(Z,J)}async function W3($,Z,Q){let X=b0(Z);if(!X)throw Error(`Provider "${Z}" does not support OAuth login`);let J=$.getProviderSettings(X.storageProviderId),W=await X.login({settings:J,callbacks:Q.callbacks,telemetry:Q.telemetry});return X.saveCredentials({manager:$,settings:J,credentials:W})}function j3($,Z){let Q=b0($);if(!Q)return null;return dA(Z,{normalizeAccessToken:Q.normalizeStoredAccessToken})}function q8($){let Z=b0($.providerId);if(!Z)throw Error(`Provider "${$.providerId}" does not support OAuth credentials`);return Z.saveCredentials({manager:$.manager,settings:$.settings,credentials:$.credentials,setLastUsed:$.setLastUsed,save:$.save})}function i5($,Z){let Q=b0($);if(Q)return Q.getApiKey(Z);return Z?.auth?.accessToken?.trim()||Z?.apiKey?.trim()||Z?.auth?.apiKey?.trim()||void 0}function nA($,Z){let Q=b0($);if(!Q)return Z.access;return Q.getApiKey({provider:Q.storageProviderId,auth:{accessToken:Z.access}})??Z.access}import*as n0 from"@cline/llms";import{ReasoningLevelSchema as RT}from"@cline/shared";import{z as f}from"zod";import*as J0 from"@cline/llms";function Y3($){if(!Array.isArray($))return[];return $.map((Z)=>{if(typeof Z==="string")return Z.trim();if(Z&&typeof Z==="object"){let Q=Z;for(let X of[Q.id,Q.name,Q.model])if(typeof X==="string"&&X.trim())return X.trim()}return""}).filter((Z)=>Z.length>0)}function oA($,Z){let Q=Y3($);if(Q.length>0)return Q;if(!$||typeof $!=="object")return[];let X=$,J=Y3(X.data??X.models);if(J.length>0)return J;if(X.models&&typeof X.models==="object"&&!Array.isArray(X.models)){let j=Object.keys(X.models).filter((Y)=>Y.trim().length>0);if(j.length>0)return j}let W=X.providers?.[Z];if(W&&typeof W==="object"){let Y=Y3(W.models??W);if(Y.length>0)return Y}return[]}async function r5($,Z){let Q=await fetch($,{method:"GET"});if(!Q.ok)throw Error(`failed to fetch models from ${$}: HTTP ${Q.status}`);return oA(await Q.json(),Z)}function $B($){return $.replace(/\/+$/,"")}function a5($,Z,Q){let X=Q?.trim();if(!X)return;let J=$?.trim();if(!J||!Z?.trim())return X;try{let W=new URL(X),j=new URL(Z),Y=new URL(J);if(W.origin!==j.origin)return X;let V=$B(j.pathname),B=$B(Y.pathname);if(V&&W.pathname.startsWith(`${V}/`)){let K=W.pathname.slice(V.length);Y.pathname=`${B}${K}`}else Y.pathname=W.pathname;return Y.search=W.search,Y.hash=W.hash,Y.toString()}catch{return X}}function sA($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{...Q}]))}function tA($){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 eA=Object.values(J0.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:sA($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),XB=Object.fromEntries(eA.map(($)=>[$.id,$]));function $T($){return XB[$]}function ZT(){return Object.fromEntries(Object.entries(XB).filter(([,$])=>tA($)))}function JB($=[]){let Z=$.flatMap((Q)=>{switch(Q){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[Q];default:return[]}});return Z.length>0?Z:void 0}var WB="https://models.dev/api.json",QT=600000,jB=300000,XT=5000,o5=new Map,A8=new Map,B3=new Map,n5=new Map;async function JT(){return J0.getGeneratedProviderModels()}async function WT($,Z={},Q={},X={},J={},W={}){if($==="litellm")return J0.sortModelsByReleaseDate(X);let j=await JT(),Y=J0.resolveProviderModelCatalogKeys($),V=Object.assign({},...Y.map((G)=>j[G]??{}));if(Boolean(J0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl))return J0.sortModelsByReleaseDate({...J,...W});if($==="openai-codex")return J0.sortModelsByReleaseDate({...Z,...J0.filterOpenAICodexModels(Q),...J,...W});if($==="cline-pass"&&Object.keys(Q).length>0)return{...Q,...W};let K=J0.sortModelsByReleaseDate({...V,...Z,...Q,...X,...J});if($==="cline")return J0.sortModelsByReleaseDate(J0.filterImageOutputModels({...J0.preferCanonicalModelIds(K,J0.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES),...W}));return J0.sortModelsByReleaseDate({...K,...W})}function jT($,Z){let Q=J0.resolveProviderModelCatalogKeys($);return Object.assign({},...Q.map((X)=>Z[X]??{}))}function s5($){let Z=$?.trim();return Z&&Z.length>0?Z:""}function K3($){let Z=$.apiKey?.trim()||$.accessToken?.trim();return Z&&Z.length>0?Z:void 0}function YT($){let Z=2166136261;for(let Q=0;Q<$.length;Q+=1)Z^=$.charCodeAt(Q),Z+=(Z<<1)+(Z<<4)+(Z<<7)+(Z<<8)+(Z<<24);return(Z>>>0).toString(16)}function VT($,Z){return`${$}:${s5(Z.baseUrl)}:${YT(K3(Z)??"")}`}async function t5($,Z,Q=XT){let X=new AbortController,J=setTimeout(()=>X.abort(),Q);try{return await fetch($,{...Z,signal:X.signal})}finally{clearTimeout(J)}}function K2($,Z,Q){if(Q&&!$.includes(Z))$.push(Z)}function e5($,Z){let Q=["streaming","tools"];return K2(Q,"images",Boolean(Z.supportsImages)),K2(Q,"prompt-cache",Boolean(Z.supportsPromptCache)),K2(Q,"reasoning",Boolean(Z.supportsReasoning)),{id:$,name:Z.name??$,contextWindow:Z.contextWindow,maxInputTokens:Z.maxInputTokens,maxTokens:Z.maxTokens,capabilities:Q,releaseDate:Z.releaseDate,status:"active"}}async function BT($,Z){let Q=await t5("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${Z}`,"Content-Type":"application/json"}});if(!Q.ok)throw Error(`Baseten model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],W={};for(let j of J){let Y=j.id?.trim();if(!Y)continue;if(Y.includes("whisper")||Y.includes("tts")||Y.includes("embedding"))continue;let V=j.supported_features??[];W[Y]=e5(Y,{name:Y,contextWindow:j.context_length,maxInputTokens:j.context_length,maxTokens:j.max_completion_tokens,supportsReasoning:V.includes("reasoning")||V.includes("reasoning_effort"),supportsImages:!1})}return W}function ZB($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let Z=Number($);return Number.isFinite(Z)?Z:void 0}return}async function KT($,Z){let Q=await t5("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":Z}});if(!Q.ok)throw Error(`Hicap model refresh failed: HTTP ${Q.status}`);let J=(await Q.json())?.data??[],W={};for(let j of J){let Y=j.id?.trim();if(!Y)continue;W[Y]=e5(Y,{name:Y,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return W}async function GT($,Z){let X=`${(s5($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,J=await t5(X,{method:"GET",headers:{Authorization:`Bearer ${Z}`,accept:"application/json"}});if(!J.ok)throw Error(`Poolside model refresh failed: HTTP ${J.status}`);let j=(await J.json())?.data??[],Y={};for(let V of j){let B=V.id?.trim();if(!B)continue;let K=V.supported_features??[],G=V.supported_sampling_parameters??[],H=V.input_modalities??[],U=["streaming"];K2(U,"tools",K.includes("tools")),K2(U,"reasoning",K.includes("reasoning")),K2(U,"temperature",G.includes("temperature")),K2(U,"images",H.includes("image"));let F={input:ZB(V.pricing?.prompt),output:ZB(V.pricing?.completion)};Y[B]={id:B,name:V.name??B,description:V.description,contextWindow:V.context_length,maxInputTokens:V.context_length,maxTokens:V.max_completion_tokens,capabilities:U,pricing:F.input!==void 0||F.output!==void 0?F:void 0,status:"active"}}return Y}function HT($){let Z=s5($).replace(/\/+$/,"");if(!Z)return"http://localhost:4000";return Z.endsWith("/v1")?Z.slice(0,-3):Z}function UT($){return[`${$}/v1/model/info`,`${$}/model/info`]}async function FT($){let Z=(await $.text().catch(()=>"")).replace(/\s+/g," ").trim(),Q=500,X=Z?`: ${Z.slice(0,500)}${Z.length>500?"...":""}`:"";return`HTTP ${$.status}${X}`}async function LT($,Z){let Q=HT($.baseUrl),X=[],J=[["x-litellm-api-key",{"x-litellm-api-key":Z}],["Authorization",{Authorization:`Bearer ${Z}`}]];for(let W of UT(Q))for(let[j,Y]of J)try{let V=await t5(W,{method:"GET",headers:{accept:"application/json",...Y}});if(V.ok){let K=(await V.json())?.data??[],G={};for(let H of K){let U=H.model_name?.trim(),L=H.litellm_params?.model?.trim()||U;if(!L)continue;let D=H.model_info,z=e5(L,{name:U??L,maxTokens:D?.max_output_tokens??D?.max_tokens,maxInputTokens:D?.max_input_tokens??D?.max_tokens,supportsImages:D?.supports_vision,supportsPromptCache:D?.supports_prompt_caching,supportsReasoning:D?.supports_reasoning});if(G[L]=z,U)G[U]={...z,id:U,name:U}}return G}X.push(`${new URL(W).pathname} (${j}): ${await FT(V)}`)}catch(V){let B=V instanceof Error?V.message:String(V);X.push(`${new URL(W).pathname} (${j}): ${B}`)}throw Error(`LiteLLM model refresh failed. Attempts: ${X.join("; ")}`)}var G3={baseten:BT,hicap:KT,litellm:LT,poolside:GT};function DT($){return Object.hasOwn(G3,$)}var QB=new Map,V3=new Map;function _T($,Z){return`${$}:${s5(Z.baseUrl)}`}async function zT($,Z,Q){let X=J0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],J=a5(Q.baseUrl,X?.provider.baseUrl,X?.provider.modelsSourceUrl);if(!J)return{};let W=Z?.cacheTtlMs??jB,j=_T($,Q),Y=Date.now(),V=QB.get(j);if(V&&V.expiresAt>Y)return V.data;let B=V3.get(j);if(B)return B;let K=r5(J,$).then((G)=>{let H=Object.fromEntries(G.map((U)=>[U,e5(U,{name:U})]));return QB.set(j,{data:H,expiresAt:Y+W}),H}).finally(()=>{V3.delete(j)});return V3.set(j,K),K}async function OT($,Z){let Q=K3(Z);if(!Q)return{};let X=G3[$];if(!X)return{};return X(Z,Q)}function NT($,Z,Q){if(!Q)return!1;if(!G3[$])return!1;if(Z?.loadPrivateOnAuth===!1)return!1;return Boolean(K3(Q))}async function qT($,Z,Q){let X=Z?.cacheTtlMs??jB,J=VT($,Q),W=Date.now(),j=B3.get(J);if(j&&j.expiresAt>W)return j.data;let Y=n5.get(J);if(Y)return Y;let V=OT($,Q).then((B)=>{return B3.set(J,{data:B,expiresAt:W+X}),B}).finally(()=>{n5.delete(J)});return n5.set(J,V),V}async function AT($){return J0.fetchLiveProviderModels($,globalThis.fetch)}async function J6($={}){let Z=$.url??WB,Q=$.cacheTtlMs??QT,X=Date.now(),J=o5.get(Z);if(J&&J.expiresAt>X)return J.data;let W=A8.get(Z);if(W)return W;let j=AT(Z).then((Y)=>{return o5.set(Z,{data:Y,expiresAt:X+Q}),Y}).finally(()=>{A8.delete(Z)});return A8.set(Z,j),j}function TT($){if($){o5.delete($),A8.delete($);return}o5.clear(),A8.clear()}function ET(){B3.clear(),n5.clear()}function MT($){return Object.fromEntries(Object.entries($).map(([Z,Q])=>[Z,{baseUrl:Q.baseUrl,modelId:Q.modelId,capabilities:JB(Q.capabilities)}]))}var H3=MT(ZT());function YB($){let Z=$T($);if(!Z)return;return{baseUrl:Z.baseUrl||void 0,modelId:Z.modelId,knownModels:Z.knownModels,capabilities:JB(Z.capabilities)}}async function U3($,Z,Q){let X=YB($);if(!X)return;try{let J=Z?.loadLatestOnInit?await J6(Z):void 0,W=J?jT($,J):{},j=Q&&NT($,Z,Q)?await qT($,Z,Q):{},V=Boolean(J0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?Q??{providerId:$,modelId:X.modelId,baseUrl:X.baseUrl}:Q,B=V?await zT($,Z,V).catch(()=>({})):{},K=await WT($,X.knownModels,W,j,B,Q?.knownModels);return{...X,knownModels:K}}catch(J){if(Z?.failOnError)throw J;if($==="litellm")return{...X,knownModels:{}};return X}}var F3=n0.BUILT_IN_PROVIDER,CT=n0.BUILT_IN_PROVIDER_IDS,PT=n0.isBuiltInProviderId,$9=n0.normalizeProviderId,L3=f.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),VB=f.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),BB=f.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),KB=f.object({apiKey:f.string().optional(),accessToken:f.string().optional(),refreshToken:f.string().optional(),expiresAt:f.number().int().positive().optional(),accountId:f.string().optional(),organizationId:f.string().optional(),organizationName:f.string().optional(),memberId:f.string().optional(),metadata:f.record(f.string(),f.unknown()).optional()}),GB=f.object({enabled:f.boolean().optional(),effort:RT.optional(),budgetTokens:f.number().int().positive().optional()}),HB=f.object({accessKey:f.string().optional(),secretKey:f.string().optional(),sessionToken:f.string().optional(),region:f.string().optional(),profile:f.string().optional(),authentication:f.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:f.boolean().optional(),useCrossRegionInference:f.boolean().optional(),useGlobalInference:f.boolean().optional(),endpoint:f.string().url().optional(),customModelBaseId:f.string().optional()}),UB=f.object({projectId:f.string().optional(),region:f.string().optional()}),FB=f.object({apiVersion:f.string().optional(),useIdentity:f.boolean().optional()}),LB=f.object({clientId:f.string().optional(),clientSecret:f.string().optional(),tokenUrl:f.string().url().optional(),resourceGroup:f.string().optional(),deploymentId:f.string().optional(),useOrchestrationMode:f.boolean().optional(),api:f.enum(["orchestration","foundation-models"]).optional(),defaultSettings:f.record(f.string(),f.unknown()).optional()}),DB=f.object({mode:f.enum(["internal","external"]).optional(),usePromptCache:f.boolean().optional()}),_B=f.object({loadLatestOnInit:f.boolean().optional(),loadPrivateOnAuth:f.boolean().optional(),url:f.string().url().optional(),cacheTtlMs:f.number().int().positive().optional(),failOnError:f.boolean().optional()}),W6=f.object({provider:L3,apiKey:f.string().optional(),auth:KB.optional(),model:f.string().optional(),protocol:VB.optional(),client:BB.optional(),routingProviderId:L3.optional(),maxTokens:f.number().int().positive().optional(),contextWindow:f.number().int().positive().optional(),baseUrl:f.string().url().optional(),headers:f.record(f.string(),f.string()).optional(),timeout:f.number().int().positive().optional(),reasoning:GB.optional(),aws:HB.optional(),gcp:UB.optional(),azure:FB.optional(),sap:LB.optional(),oca:DB.optional(),region:f.string().optional(),apiLine:f.enum(["china","international"]).optional(),capabilities:f.array(f.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:_B.optional()});function zB($){return W6.parse($)}function OB($){return W6.safeParse($)}function fT($){return $.protocol==="openai-responses"||$.client==="openai"}function o1($,Z={}){let Q=$.provider,X=$9(Q),J=Z.includeKnownModels!==!1,W=$.reasoning?.effort||"none",j=W==="none"?void 0:W,Y=H3[X],V=Object.assign({},...n0.resolveProviderModelCatalogKeys(X).map((L)=>n0.getGeneratedModelsForProvider(L))),B=Object.keys(V)[0],K=i5(X,$),G=$.baseUrl??n0.resolveProviderApiLineBaseUrl(X,$.apiLine)??(X==="oca"?$.oca?.mode==="internal"?$3:Z3:Y?.baseUrl),H=$.routingProviderId??(fT($)&&X!==F3.OPENAI_NATIVE?F3.OPENAI_NATIVE:void 0),U=J?Y?.knownModels??(Object.keys(V).length>0?V:void 0):void 0,F={providerId:Q,clientType:$.client,routingProviderId:H,modelId:$.model??Y?.modelId??B??"default",...J?{knownModels:U}:{},apiKey:K,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:G,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??Y?.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(F).filter(([L,D])=>D!==void 0))}function wT($){let Z=zB($);return o1(Z)}function ST($){let Z=OB($);if(Z.success)return{success:!0,config:o1(Z.data)};return{success:!1,error:Z.error}}import{SESSION_STATUS_VALUES as bT}from"@cline/shared";var D3=bT,kT=["idle","running","pending"];function xT($){return!kT.includes($)}function P0($){return!xT($)}var Z0={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};var NB="sessionHistoryOrigin";function j6($){return typeof $==="string"&&$.trim()?$.trim():void 0}function Z9($){let Z=[$?.name,$?.platform].filter((Q)=>typeof Q==="string").join(" ").toLowerCase();if(!Z)return;if(Z.includes("vscode")||Z.includes("visual studio code"))return Z0.VSCODE;if(Z.includes("jetbrains")||Z.includes("webstorm")||Z.includes("intellij")||Z.includes("pycharm")||Z.includes("goland")||Z.includes("clion")||Z.includes("rider")||Z.includes("android studio"))return Z0.JETBRAINS;if(Z.includes("neovim"))return Z0.NEOVIM;if(Z.includes("kanban"))return Z0.KANBAN;if(Z.includes("desktop"))return Z0.DESKTOP;if(Z.includes("cline-platform"))return Z0.WEB;if(Z.includes("cline-cli")||Z.includes("cline-acp"))return Z0.CLI;if(Z.includes("cline-sdk")||Z.includes("cline-core"))return Z0.CORE;return}function Y6($){let Z=$?.[NB];if(!Z||typeof Z!=="object"||Array.isArray(Z))return;let Q=Z,X=j6(Q.mode);if(!X)return;let J=j6(Q.version),W=j6(Q.trigger);return{mode:X,...J?{version:J}:{},...W?{trigger:W}:{}}}function k0($,Z){let Q=Y6($),X=j6(Z.mode)??Q?.mode??"user",J=j6(Z.version)??Q?.version,W=j6(Z.trigger)??Q?.trigger;return{...$??{},[NB]:{mode:X,...J?{version:J}:{},...W?{trigger:W}:{}}}}function qB($){if($===!0)return{};if(!$)return;return $}function AB($){if($==="user")return"global";return $}class _3{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let Z=this.getService().ingestEvent($);return{event:Z.event,duplicate:Z.duplicate,matchedSpecIds:Z.matchedSpecs.map((Q)=>Q.specId),queuedRuns:Z.queuedRuns,suppressions:Z.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function TB($){let{host:Z}=$;return{async startSession(Q){let X=(Q.cwd?.trim()||Q.workspaceRoot).trim(),J=$.getExtensionContext(),W=await Z.startSession({source:Z9(J?.client)??Z0.CORE,mode:"automation",sessionMetadata:k0(void 0,{mode:"automation",trigger:Q.source}),interactive:!1,config:{providerId:$9(Q.provider),modelId:Q.model,apiKey:Q.apiKey?.trim()||void 0,cwd:X,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:hT(Q),maxIterations:Q.maxIterations,enableTools:Q.enableTools!==!1,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},toolPolicies:Q.toolPolicies??{"*":{autoApprove:Q.autoApproveTools!==!1}},localRuntime:{extensionContext:J,configExtensions:Q.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(Q,X){let J=await Z.runTurn({sessionId:Q,prompt:X.prompt,userImages:X.attachments?.userImages,userFiles:X.attachments?.userFiles?.map((W)=>W.content),delivery:X.delivery});if(!J)throw Error("ClineCore automation runtime returned no result");return{result:IT(J)}},async abortSession(Q){return await Z.abort(Q,Error("ClineCore automation abort")),{applied:!0}},async stopSession(Q){return await Z.stopSession(Q),{applied:!0}}}}function Q9($){let Z=yT($.automationService,$.automation),Q=$.context?.client??($.clientName?{name:$.clientName}:void 0),X=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),J=$.context?.logger??$.logger,W=$.context?.telemetry??$.telemetry;if(!Z&&!Q&&!X&&!J&&!W)return $.context;return{...$.context??{},...Q?{client:Q}:{},...X?{user:X}:{},...J?{logger:J}:{},...W?{telemetry:W}:{},...Z?{automation:Z}:{}}}function yT($,Z){if(!$)return;return{ingestEvent:(Q)=>{Z.ingestEvent(Q)}}}function IT($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function hT($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}import{existsSync as v6,readdirSync as VS,readFileSync as BS}from"node:fs";import{basename as G4,dirname as nX,extname as oX,isAbsolute as bU,join as kU,relative as xU,resolve as sX}from"node:path";import{createHash as vT}from"node:crypto";import{watch as gT}from"node:fs";import{readdir as mT,readFile as cT}from"node:fs/promises";import{join as uT}from"node:path";function dT($){return vT("sha1").update($).digest("hex")}function RB($){return Boolean($&&typeof $==="object"&&"code"in $)}function EB($){return RB($)&&$.code==="ENOENT"}function MB($){return RB($)&&($.code==="EACCES"||$.code==="EPERM")}class T8{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor($,Z){if($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=Z?.debounceMs??75,this.emitParseErrors=Z?.emitParseErrors??!1;for(let Q of $){if(this.definitionsByType.has(Q.type))throw Error(`Duplicate unified config definition type '${Q.type}'.`);this.definitionsByType.set(Q.type,Q),this.recordsByType.set(Q.type,new Map),this.discoveredDirectoriesByType.set(Q.type,new Set);for(let X of Q.directories){let J=this.baseTypesByDirectory.get(X);if(J)J.add(Q.type);else this.baseTypesByDirectory.set(X,new Set([Q.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let Z=this.definitionsByType.get($);if(!Z)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(Z)})}getSnapshot($){let Z=this.recordsByType.get($);return new Map([...Z?.entries()??[]].map(([Q,X])=>[Q,{...X}]))}getAllSnapshots(){let $=new Map;for(let[Z,Q]of this.recordsByType.entries())$.set(Z,new Map([...Q.entries()].map(([X,J])=>[X,{...J}])));return $}emit($){for(let Z of this.listeners)Z($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[Z,Q]of this.watchersByDirectory.entries()){if($.has(Z))continue;Q.close(),this.watchersByDirectory.delete(Z)}this.watchedTypesByDirectory=$;for(let Z of $.keys()){if(this.watchersByDirectory.has(Z))continue;try{let Q=gT(Z,()=>{let X=this.watchedTypesByDirectory.get(Z);if(!X)return;for(let J of X)this.pendingTypes.add(J);this.scheduleFlush()});this.watchersByDirectory.set(Z,Q),Q.on("error",(X)=>{let J=this.watchedTypesByDirectory.get(Z);if(!J)return;for(let W of J)this.emit({kind:"error",type:W,error:X,filePath:Z})})}catch(Q){if(!EB(Q)&&!MB(Q)){let X=$.get(Z);if(!X)continue;for(let J of X)this.emit({kind:"error",type:J,error:Q,filePath:Z})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let Z of $){let Q=this.definitionsByType.get(Z);if(!Q)continue;await this.refreshTypeInternal(Q)}})},this.debounceMs)}async refreshTypeInternal($){let{records:Z,discoveredDirectories:Q}=await this.loadDefinition($),X=this.recordsByType.get($.type)??new Map;for(let[J,W]of X.entries()){if(Z.has(J))continue;this.emit({kind:"remove",type:$.type,id:J,filePath:W.filePath})}for(let[J,W]of Z.entries()){let j=X.get(J);if(j&&j.filePath===W.filePath&&j.fingerprint===W.fingerprint)continue;this.emit({kind:"upsert",record:{type:W.type,id:J,item:W.item,filePath:W.filePath}})}if(this.recordsByType.set($.type,Z),this.discoveredDirectoriesByType.set($.type,Q),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let Z=new Map,Q=new Set;for(let X of $.directories){Q.add(X);let J=$.discoverFiles?await $.discoverFiles(X):await this.readDirectoryFileCandidates(X);for(let W of J){let{fileName:j,filePath:Y}=W;if(Q.add(W.directoryPath),$.includeFile&&!$.includeFile(j,Y))continue;try{let V=await cT(Y,"utf8"),B={type:$.type,directoryPath:W.directoryPath,fileName:j,filePath:Y,content:V},K=$.parseFile(B),G=$.resolveId(K,B).trim();if(!G)continue;Z.set(G,{type:$.type,id:G,item:K,filePath:Y,fingerprint:dT(V)})}catch(V){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:V,filePath:Y})}}}return{records:Z,discoveredDirectories:Q}}buildDesiredTypesByDirectory(){let $=new Map;for(let[Z,Q]of this.baseTypesByDirectory.entries())$.set(Z,new Set(Q));for(let[Z,Q]of this.discoveredDirectoriesByType.entries())for(let X of Q){let J=$.get(X);if(J)J.add(Z);else $.set(X,new Set([Z]))}return $}async readDirectoryFileCandidates($){try{return(await mT($,{withFileTypes:!0})).filter((Q)=>Q.isFile()).map((Q)=>({directoryPath:$,fileName:Q.name,filePath:uT($,Q.name)})).sort((Q,X)=>Q.fileName.localeCompare(X.fileName))}catch(Z){if(EB(Z)||MB(Z))return[];throw Z}}}import{readdir as m3,readFile as TM,stat as g3}from"node:fs/promises";import{basename as t1,dirname as EM,extname as O9,join as $1,resolve as b8}from"node:path";import{stripUtf8Bom as MM}from"@cline/shared";import{AGENTS_RULES_FILE_NAME as VK,RULES_CONFIG_DIRECTORY_NAME as BK,resolveGlobalAgentsRulesPath as RM,resolveRulesConfigSearchPaths as CM,resolveSkillsConfigSearchPaths as PM,resolveWorkflowsConfigSearchPaths as fM,SKILLS_CONFIG_DIRECTORY_NAME as c3,WORKFLOWS_CONFIG_DIRECTORY_NAME as u3}from"@cline/shared/storage";import wM from"yaml";M1();import{existsSync as F9,readFileSync as KM,statSync as GM}from"node:fs";import{basename as HM,dirname as H9,join as L9,resolve as U9}from"node:path";import{discoverPluginModulePaths as UM,resolveConfiguredPluginModulePaths as QK,resolvePluginConfigSearchPaths as FM,SKILLS_CONFIG_DIRECTORY_NAME as LM}from"@cline/shared/storage";import{resolve as IE}from"node:path";import{normalizePluginManifest as hE}from"@cline/shared";import{existsSync as h0,readFileSync as B6}from"node:fs";import{builtinModules as _E,createRequire as C3}from"node:module";import{dirname as E$,extname as R8,isAbsolute as zE,resolve as $0}from"node:path";import{fileURLToPath as yB}from"node:url";import{PLUGIN_FILE_EXTENSIONS as OE}from"@cline/shared";var IB=E$(yB(import.meta.url)),NE=C3(import.meta.url),qE=$0(IB,"..","..","..","..",".."),E3=EE(qE),AE=["@cline/sdk","@cline/agents","@cline/core","@cline/core/hub","@cline/core/hub/daemon-entry","@cline/core/telemetry","@cline/llms","@cline/llms/browser","@cline/shared","@cline/shared/automation","@cline/shared/browser","@cline/shared/storage","@cline/shared/db","@cline/shared/types"],P3=new Set(_E.flatMap(($)=>[$,$.replace(/^node:/,"")])),M8=new Set(OE),TE=["development","node","import","require","default"];function EE($){let Z={},Q={"@cline/sdk":$0($,"packages/sdk/src/index.ts"),"@cline/agents":$0($,"packages/agents/src/index.ts"),"@cline/core":$0($,"packages/core/src/index.ts"),"@cline/llms":$0($,"packages/llms/src/index.ts"),"@cline/shared":$0($,"packages/shared/src/index.ts"),"@cline/shared/storage":$0($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":$0($,"packages/shared/src/db/index.ts")};for(let[X,J]of Object.entries(Q))if(h0(J))Z[X]=J;for(let X of["agents","core","llms","shared"]){let J=$0($,"packages",X),W=$0(J,"package.json");if(!h0(W))continue;try{let j=JSON.parse(B6(W,"utf8"));if(typeof j.name!=="string"||!j.exports)continue;if(typeof j.exports==="string"){let Y=$0(J,j.exports);if(h0(Y))Z[j.name]=Y;continue}if(typeof j.exports!=="object")continue;for(let[Y,V]of Object.entries(j.exports)){let B=ME(J,V);if(!B)continue;let K=Y==="."?j.name:`${j.name}/${Y.replace(/^\.\//,"")}`;Z[K]=B}}catch{}}return Z}function ME($,Z){let Q=f3(Z);if(!Q)return null;let X=hB($,Q);for(let J of X)if(h0(J))return J;return null}function f3($,Z=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(Z.has($))return null;Z.add($);let Q=$;for(let X of TE){let J=f3(Q[X],Z);if(J)return J}return null}function hB($,Z){let Q=Z.replace(/^\.\//,""),X=[$0($,Z)];if(Q.startsWith("dist/")){let J=Q.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[$0($,`${J}.ts`),$0($,`${J}.tsx`),$0($,`${J}.mts`),$0($,`${J}.cts`),...X]}return X}function RE($){return Object.fromEntries(Object.entries($).sort(([Z],[Q])=>Q.length-Z.length))}function Y9($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function V6($){if($.startsWith("@")){let[Z,Q]=$.split("/",3);return Q?`${Z}/${Q}`:$}return $.split("/",1)[0]??$}function CE($){let Z=V6($);if($===Z)return".";return`.${$.slice(Z.length)}`}function vB($){return V6($).startsWith("@cline/")}function M3($,Z){let Q=V6(Z),X=E$($);while(!0){let J=$0(X,"node_modules",Q);if(h0(J)||h0($0(J,"package.json")))return!0;let W=$0(X,"..");if(W===X)return!1;X=W}}function xB($){return R3($)!==null}function R3($){try{return NE.resolve($)}catch{}return PE($)}function PE($){let Z=V6($),Q=gB(Z);if(!Q)return null;let X=$0(Q,"package.json");try{let J=JSON.parse(B6(X,"utf8")),W=CE($),j=W==="."&&typeof J.exports==="string"?J.exports:J.exports&&typeof J.exports==="object"&&Object.hasOwn(J.exports,W)?J.exports[W]:void 0,Y=f3(j)??(W==="."&&typeof J.main==="string"?J.main:null);if(!Y)return null;let V=$0(Q,Y),B=[V,...hB(Q,Y).filter((K)=>K!==V)];for(let K of B)if(h0(K))return K;return null}catch{return null}}function fE(){let $=[IB],Z=process.env.CLINE_WRAPPER_PATH?.trim();if(Z)$.push(E$(E$(Z)));let Q=process.execPath?.trim();if(Q)$.push(E$(Q));return[...new Set($.map((X)=>$0(X)))]}function wE($,Z){let Q=$;while(!0){let X=$0(Q,"package.json");if(h0(X))try{if(JSON.parse(B6(X,"utf8")).name===Z)return Q}catch{}let J=$0(Q,"node_modules",Z,"package.json");if(h0(J))return E$(J);let W=$0(Q,"..");if(W===Q)return null;Q=W}}function gB($){for(let Z of fE()){let Q=wE(Z,$);if(Q)return Q}return null}function SE($){let Q=E$($);for(let X=0;X<4;X++){let J=$0(Q,"package.json");if(h0(J))try{let j=JSON.parse(B6(J,"utf8"));return j!=null&&typeof j==="object"&&"cline"in j}catch{return!1}let W=$0(Q,"..");if(W===Q)return!1;Q=W}return!1}function mB($,Z){let Q=Z.startsWith("file:")?yB(Z):zE(Z)?Z:$0(E$($),Z);if(h0(Q)&&M8.has(R8(Q)))return Q;for(let X of M8){let J=`${Q}${X}`;if(h0(J))return J}for(let X of M8){let J=$0(Q,`index${X}`);if(h0(J))return J}return null}function cB($){let Z=new Set,Q=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let X of Q)for(let J of $.matchAll(X)){let W=J[1];if(W)Z.add(W)}return[...Z]}function bE($){return R8($)!==".ts"}function uB($,Z,Q=new Set){if(Q.has($)||!h0($))return;if(Q.add($),!M8.has(R8($)))return;let X=B6($,"utf8"),J=bE($);for(let W of cB(X)){if(W.startsWith("node:")||P3.has(W))continue;if(Y9(W)){if(!J)continue;if(Object.hasOwn(E3,W)||Object.hasOwn(E3,V6(W))||M3($,W)||vB(W)&&xB(W)||Z&&xB(W))continue;throw Error(`Cannot find module '${V6(W)}'`)}let j=mB($,W);if(j)uB(j,Z,Q)}}function dB($,Z=new Set,Q=new Set){if(Z.has($)||!h0($))return Q;if(Z.add($),!M8.has(R8($)))return Q;let X=B6($,"utf8");for(let J of cB(X)){if(Q.add(J),Y9(J))continue;let W=mB($,J);if(W)dB(W,Z,Q)}return Q}function kE($,Z){let Q=C3($),X={},J=dB($),W=new Set(AE);for(let[j,Y]of Object.entries(E3)){try{Q.resolve(j);continue}catch{}X[j]=Y}for(let j of J)if(Y9(j)&&(vB(j)||Z))W.add(j);for(let j of W){if(Object.hasOwn(X,j)||M3($,j))continue;let Y=R3(j);if(Y)X[j]=Y}if(!Z)return X;for(let j of J){if(!Y9(j)||Object.hasOwn(X,j)||M3($,j)||j.startsWith("node:")||P3.has(j))continue;let Y=R3(j);if(Y)X[j]=Y}return X}function xE($){let Z=R8($);return Z===".ts"||Z===".tsx"||Z===".mts"||Z===".cts"}var G2;function yE(){if(G2!==void 0)return G2;let $=gB("jiti");if(!$)return G2=null,null;let Z=$0($,"dist","babel.cjs");if(!h0(Z))return G2=null,null;try{let X=C3(Z)(Z);G2=typeof X==="function"?X:null}catch{G2=null}return G2}async function lB($,Z={}){let Q=!SE($);uB($,Q);let X=kE($,Q),J=RE(X),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");let Y=Object.entries(J).filter(([,G])=>xE(G)).map(([G])=>G),V=yE(),B=V?(G)=>V({...G,interopDefault:!0}):void 0;return await j($,{alias:J,cache:Z.useCache,requireCache:Z.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...P3],transformModules:Y,tryNative:!1,...B?{transform:B}:{}}).import($,{})}function pB($,Z){if(!$)return!0;if($.providerIds?.length){if(!Z?.providerId||!$.providerIds.includes(Z.providerId))return!1}if($.modelIds?.length){if(!Z?.modelId||!$.modelIds.includes(Z.modelId))return!1}return!0}function iB($){return typeof $==="object"&&$!==null}function w3($){return Array.isArray($)&&$.every((Z)=>typeof Z==="string")}function vE($,Z){if(!iB($.manifest))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);if(!w3($.manifest.capabilities))throw Error(`Invalid plugin module at ${Z}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${Z}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!w3($.manifest.providerIds))throw Error(`Invalid plugin module at ${Z}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!w3($.manifest.modelIds))throw Error(`Invalid plugin module at ${Z}: manifest.modelIds must be a string array when provided`)}function gE($,Z){if(!iB($))throw Error(`Invalid plugin module at ${Z}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${Z}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${Z}: missing required "manifest"`);vE($,Z)}async function S3($,Z={}){let Q=IE(Z.cwd??process.cwd(),$),X=await lB(Q,{useCache:Z.useCache}),J=Z.exportName??"plugin",W=X.default??X[J];gE(W,Q);let j=W,Y=j.setup,V=Y?(B,K)=>{let G={...Z.session,...K.session},H={...K,session:Object.keys(G).length>0?G:void 0,client:Z.client??K.client,user:Z.user??K.user,workspaceInfo:Z.workspaceInfo??K.workspaceInfo,automation:Z.automation??K.automation,logger:Z.logger??K.logger,telemetry:Z.telemetry??K.telemetry};return Y(B,H)}:void 0;return{...j,manifest:hE(j.manifest),setup:V}}async function rB($,Z={}){return(await C8($,Z)).plugins}async function C8($,Z={}){let Q=[],X=[],J=new Map,W=0;for(let Y of $)try{let V=await S3(Y,Z);if(!pB(V.manifest,Z))continue;let B=J.get(V.name);if(B)X.push({type:"duplicate_plugin_override",pluginName:V.name,pluginPath:Y,overriddenPluginPath:B.pluginPath,message:`Plugin "${V.name}" from ${Y} overrides ${B.pluginPath}`});J.set(V.name,{plugin:V,pluginPath:Y,order:W++})}catch(V){let B=V instanceof Error?V.message:String(V);Q.push({pluginPath:Y,phase:"load",message:B,stack:V instanceof Error?V.stack:void 0})}let j=[...J.values()].sort((Y,V)=>Y.order-V.order);return{plugins:j.map((Y)=>Y.plugin),pluginPaths:j.map((Y)=>Y.pluginPath),failures:Q,warnings:X}}import{existsSync as I3}from"node:fs";import{createRequire as eB}from"node:module";import{dirname as G9,join as K6}from"node:path";import{fileURLToPath as rE}from"node:url";import{spawn as mE}from"node:child_process";import{basename as cE}from"node:path";import{augmentNodeCommandForDebug as uE,withResolvedClineBuildEnv as dE}from"@cline/shared";var P8=2147483647;function aB($){return typeof $==="number"&&Number.isInteger($)&&$>0&&$<=2147483647?$:void 0}var lE=300;function b3($){if($ instanceof Error)return $;return Error(String($))}function k3($){return $.exitCode===null&&$.signalCode===null}function V9($){return k3($)&&$.connected}var pE="CLINE_JS_RUNTIME_PATH";function nB($){let Z=$?.trim();if(!Z)return!1;let Q=cE(Z).toLowerCase();return Q==="node"||Q==="node.exe"||Q==="bun"||Q==="bun.exe"}function oB($={}){let Z=$.env??process.env,Q=$.runtimeExecutable?.trim()||Z[pE]?.trim();if(Q)return Q;let X=$.execPath?.trim()||process.execPath;if(nB(X))return X;for(let J of[Z.BUN_EXEC_PATH,Z.npm_node_execpath,Z.NODE]){let W=J?.trim();if(W&&nB(W))return W}return"node"}function iE($,Z={}){let Q=oB({env:Z.env,execPath:Z.execPath,runtimeExecutable:Z.runtimeExecutable});return uE([Q,...$],{env:Z.env,execArgv:Z.execArgv,debugRole:Z.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class B9{options;idleTimeoutMs;process=null;requestCounter=0;pending=new Map;idleTimer;shutdowns=new Map;constructor($){if(this.options=$,this.idleTimeoutMs=aB($.idleTimeoutMs),$.idleTimeoutMs!==void 0&&this.idleTimeoutMs===void 0)throw RangeError(`idleTimeoutMs must be an integer between 1 and ${P8}`)}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let Z=this.pending.get($);if(!Z)return;if(this.pending.delete($),Z.timeout)clearTimeout(Z.timeout);return this.armIdleTimer(Z.child),Z}clearIdleTimer(){if(!this.idleTimer)return;clearTimeout(this.idleTimer),this.idleTimer=void 0}hasPendingRequests($){for(let Z of this.pending.values())if(Z.child===$)return!0;return!1}armIdleTimer($){if(this.process!==$)return;if(this.clearIdleTimer(),this.idleTimeoutMs===void 0||!V9($)||this.hasPendingRequests($))return;let Z=setTimeout(()=>{if(this.idleTimer===Z)this.idleTimer=void 0;if(this.process!==$||!V9($)||this.hasPendingRequests($))return;this.shutdownProcess($).catch(()=>{})},this.idleTimeoutMs);Z.unref(),this.idleTimer=Z}start(){if(this.process&&V9(this.process))return;let $=this.process;if(this.process=null,this.clearIdleTimer(),$&&k3($))this.shutdownProcess($).catch(()=>{});let Z=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],Q=iE(Z,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),X=mE(Q[0]??oB(this.options),Q.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:dE(process.env),windowsHide:!0});this.process=X;let J="",W=(j)=>{let Y=J+j;J=Y.length>4000?Y.slice(-4000):Y};X.stderr?.setEncoding("utf8"),X.stderr?.on("data",(j)=>{W(j)}),X.on("message",(j)=>{this.onMessage(X,j)}),X.on("error",(j)=>{this.failPendingForProcess(X,Error(`${this.processLabel} process error: ${b3(j).message}`))}),X.on("exit",(j,Y)=>{if(this.process===X)this.process=null,this.clearIdleTimer();let V=J.trim();this.failPendingForProcess(X,Error(`${this.options.name??"sandbox"} process exited (code=${String(j)}, signal=${String(Y)})${V?`: ${V}`:""}`))}),this.armIdleTimer(X)}async call($,Z,Q={}){this.start();let X=this.process;if(!X||!V9(X))throw Error(`${this.processLabel} process is not available`);this.clearIdleTimer();let J=`req_${++this.requestCounter}`,W={type:"call",id:J,method:$,args:Z};return await new Promise((j,Y)=>{let V={child:X,resolve:(B)=>j(B),reject:Y};if((Q.timeoutMs??0)>0)V.timeout=setTimeout(()=>{let B=this.clearPendingRequest(J);if(!B)return;this.shutdownProcess(B.child).catch(()=>{}),B.reject(Error(`${this.processLabel} call timed out after ${Q.timeoutMs}ms: ${$}`))},Q.timeoutMs);this.pending.set(J,V);try{X.send(W,(B)=>{if(!B)return;let K=this.clearPendingRequest(J);if(!K)return;K.reject(Error(`${this.processLabel} failed to send call "${$}": ${b3(B).message}`))})}catch(B){this.clearPendingRequest(J),Y(b3(B))}})}async shutdown(){this.clearIdleTimer();let $=this.process,Z=[...this.shutdowns.values()];if($)Z.push(this.shutdownProcess($));if(Z.length===0){this.failPending(Error(`${this.processLabel} shutdown`));return}await Promise.all(Z)}shutdownProcess($){let Z=this.shutdowns.get($);if(Z)return Z;if(this.process===$)this.process=null,this.clearIdleTimer();let Q=this.terminateProcess($).finally(()=>{if(this.shutdowns.get($)===Q)this.shutdowns.delete($)});return this.shutdowns.set($,Q),Q}async terminateProcess($){if(!k3($)){this.failPendingForProcess($,Error(`${this.processLabel} shutdown`));return}await new Promise((Z)=>{let Q=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}Z()},lE);$.once("exit",()=>{clearTimeout(Q),Z()});try{$.kill("SIGTERM")}catch{clearTimeout(Q),Z()}}),this.failPendingForProcess($,Error(`${this.processLabel} shutdown`))}onMessage($,Z){if(!Z)return;if(Z.type==="event"){if(this.process===$&&typeof Z.name==="string"&&Z.name.length>0)this.options.onEvent?.({name:Z.name,payload:Z.payload});return}if(Z.type!=="response"||!Z.id)return;let Q=this.pending.get(Z.id);if(!Q||Q.child!==$)return;let X=this.clearPendingRequest(Z.id);if(!X)return;if(Z.ok){X.resolve(Z.result);return}X.reject(Error(Z.error?.message||`${this.processLabel} call failed`))}failPendingForProcess($,Z){for(let[Q,X]of this.pending.entries()){if(X.child!==$)continue;if(this.pending.delete(Q),X.timeout)clearTimeout(X.timeout);X.reject(Z)}}failPending($){for(let[Z,Q]of this.pending.entries()){if(this.pending.delete(Z),Q.timeout)clearTimeout(Q.timeout);Q.reject($)}}}var aE="CLINE_PLUGIN_IDLE_TIMEOUT_MS",nE=1800000;function oE($){return{...$,contributions:{tools:$.contributions?.tools??[],commands:$.contributions?.commands??[],rules:$.contributions?.rules??[],messageBuilders:$.contributions?.messageBuilders??[],providers:$.contributions?.providers??[],automationEventTypes:$.contributions?.automationEventTypes??[],mcpServers:$.contributions?.mcpServers??[],shortcuts:$.contributions?.shortcuts??[],flags:$.contributions?.flags??[]}}}function f8($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function sE(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function tE(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let Q=eB($).resolve(`${sE()}/package.json`),X=K6(G9(Q),"extensions","plugin-sandbox-bootstrap.js");return I3(X)?X:void 0}catch{return}}function eE(){let $=process.execPath?.trim();if(!$)return;let Z=K6(G9(G9($)),"extensions","plugin-sandbox-bootstrap.js");return I3(Z)?Z:void 0}function $M($){let Z=$.exists??I3;for(let Q of $.siblingCandidates)if(Z(Q))return{file:Q};if(Z($.sourceBootstrapPath))return{sourcePath:$.sourceBootstrapPath};for(let Q of $.installedCandidates)if(Q&&Z(Q))return{file:Q};return{sourcePath:$.sourceBootstrapPath}}function ZM(){let $=G9(rE(import.meta.url)),Z=eB(import.meta.url),Q=$M({siblingCandidates:[K6($,"plugin-sandbox-bootstrap.js"),K6($,"extensions","plugin-sandbox-bootstrap.js"),K6($,"agents","plugin-sandbox-bootstrap.js")],sourceBootstrapPath:K6($,"plugin-sandbox-bootstrap.ts"),installedCandidates:[tE(),eE()]});if("file"in Q)return Q;let X=Q.sourcePath,J="jiti";try{J=Z.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(J)});`,`const jiti = createJiti(${JSON.stringify(X)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(X)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
46
46
  `)}}var x3=ZM();function K9($,Z,Q){if(typeof $==="number"&&Number.isInteger($)&&$>0&&$<=P8)return $;if(Q){let X=process.env[Q];if(X){let J=Number(X);if(Number.isInteger(J)&&J>0&&J<=P8)return J}}return Z}async function G6($){let Z=K9($.idleTimeoutMs,nE,aE),Q=new B9({name:"plugin-sandbox",..."file"in x3?{bootstrapFile:x3.file}:{bootstrapScript:x3.script},idleTimeoutMs:Z,onEvent:$.onEvent}),X=K9($.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),J=K9($.hookTimeoutMs,3000),W=K9($.contributionTimeoutMs,60000),j={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger),telemetryEnabled:$.telemetryAvailable===!0},Y,V=()=>{return Y??=Q.call("initialize",j,{timeoutMs:X}).finally(()=>{Y=void 0}),Y},B;try{B=await Q.call("initialize",j,{timeoutMs:X})}catch(H){throw await Q.shutdown().catch(()=>{}),H}let K=B.plugins.map(oE);return{extensions:K.map((H)=>{let U={name:H.name,__clinePluginPath:H.pluginPath,manifest:H.manifest,setup:(F)=>{XM(F,Q,H,W,V),JM(F,Q,H,W,V),WM(F,Q,H,W,V),YM(F,Q,H,W,V),jM(F,H)}};return U.hooks=BM(Q,H,J,V),U}),failures:B.failures,pluginPaths:K.map((H)=>H.pluginPath),shutdown:async()=>{await Q.shutdown()},warnings:B.warnings}}function QM($){let Z=$ instanceof Error?$.message:String($);return/cyclic|circular|bigint/i.test(Z)}function y3($,Z=new WeakSet){if($===null||typeof $!=="object")return typeof $==="function"||typeof $==="symbol"||typeof $==="bigint"?void 0:$;if(Z.has($))return;let Q=$;if(typeof Q.toJSON==="function")try{return Q.toJSON()}catch{return}Z.add($);try{if(Array.isArray($))return $.map((J)=>y3(J,Z)??null);let X={};for(let[J,W]of Object.entries($)){let j=y3(W,Z);if(j!==void 0)X[J]=j}return X}finally{Z.delete($)}}var sB=new Set;function $K($,Z,Q){let X=`${$}:${Z}`;if(sB.has(X))return;sB.add(X);let J=Q instanceof Error?Q.message:String(Q);console.warn(`[plugin-sandbox] ${$} "${Z}" received a payload that is not JSON-serializable (${J}); retrying with non-serializable values dropped. Host-only objects must not be placed on tool contexts or hook payloads.`)}async function ZK($,Z,Q){try{return await $(Z)}catch(X){if(!QM(X))throw X;return Q(X),await $(y3(Z))}}function XM($,Z,Q,X,J){for(let W of Q.contributions?.tools??[]){let j={name:W.name,description:W.description??"",inputSchema:W.inputSchema??{type:"object",properties:{}},timeoutMs:W.timeoutMs,retryable:W.retryable,execute:async(Y,V)=>{return await ZK(async(K)=>{let{input:G,context:H}=K;try{return await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:W.id,input:G,context:H},{timeoutMs:X})}catch(U){if(!f8(U))throw U;return await J(),await Z.call("executeTool",{pluginId:Q.pluginId,contributionId:W.id,input:G,context:H},{timeoutMs:X})}},{input:Y,context:V},(K)=>$K("tool",W.name,K))}};$.registerTool(j)}}function JM($,Z,Q,X,J){for(let W of Q.contributions?.commands??[])$.registerCommand({name:W.name,description:W.description,handler:async(j)=>{try{return await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:W.id,input:j},{timeoutMs:X})}catch(Y){if(!f8(Y))throw Y;return await J(),await Z.call("executeCommand",{pluginId:Q.pluginId,contributionId:W.id,input:j},{timeoutMs:X})}}})}function WM($,Z,Q,X,J){for(let W of Q.contributions?.rules??[])$.registerRule({id:W.ruleId,source:W.source,content:W.hasContentHandler===!0?async()=>{try{return await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:W.id},{timeoutMs:X})}catch(j){if(!f8(j))throw j;return await J(),await Z.call("resolveRuleContent",{pluginId:Q.pluginId,contributionId:W.id},{timeoutMs:X})}}:W.content??""})}function jM($,Z){for(let Q of Z.contributions?.providers??[])$.registerProvider({name:Q.name,description:Q.description,metadata:Q.metadata});for(let Q of Z.contributions?.automationEventTypes??[])$.registerAutomationEventType({eventType:Q.eventType,source:Q.source,description:Q.description,attributesSchema:Q.attributesSchema,payloadSchema:Q.payloadSchema,examples:Q.examples,metadata:Q.metadata});for(let Q of Z.contributions?.mcpServers??[])$.registerMcpServer(Q)}function YM($,Z,Q,X,J){for(let W of Q.contributions?.messageBuilders??[])$.registerMessageBuilder({name:W.name,async build(j){try{let Y=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:W.id,messages:j},{timeoutMs:X});return tB(Y)?Y:j}catch(Y){if(!f8(Y))throw Y;await J();let V=await Z.call("buildMessages",{pluginId:Q.pluginId,contributionId:W.id,messages:j},{timeoutMs:X});return tB(V)?V:j}}})}function tB($){return Array.isArray($)&&$.every((Z)=>typeof Z==="object"&&Z!==null&&("role"in Z)&&("content"in Z))}function VM($,Z,Q,X,J){return async(W)=>{return await ZK(async(Y)=>{try{return await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:Y},{timeoutMs:X})}catch(V){if(!f8(V))throw V;return await J(),await $.call("invokeHook",{pluginId:Z,hookName:Q,payload:Y},{timeoutMs:X})}},W,(Y)=>$K("hook",Q,Y))}}function BM($,Z,Q,X){let J={};for(let W of Z.hooks??[])J[W]=VM($,Z.pluginId,W,Q,X);return Object.keys(J).length>0?J:void 0}import{getPluginDisplayName as YK}from"@cline/shared/storage";var v3="package.json",DM="package";function w8($){return FM($)}function S8($){return UM($)}function _M($){try{return F9($)&&GM($).isDirectory()}catch{return!1}}function D9($){let Z=[],Q=new Set;for(let X of $){let J=U9(X);if(Q.has(J))continue;Q.add(J),Z.push(J)}return Z}function XK($){let Z=D9($);return A3(Z)}function JK($){return w8($).flatMap((Z)=>S8(Z)).filter((Z)=>F9(Z))}function zM($,Z){let Q=[];for(let X of $)try{Q.push(...QK([X],Z))}catch{}return Q}function h3($){return typeof $==="object"&&$!==null}function OM($){try{let Z=JSON.parse(KM(L9($,v3),"utf8"));if(!h3(Z)||!h3(Z.cline))return[];let Q=Z.cline.plugins;if(!Array.isArray(Q))return[];let X=[];for(let J of Q){if(typeof J==="string"){X.push(J);continue}if(!h3(J)||!Array.isArray(J.paths))continue;for(let W of J.paths)if(typeof W==="string")X.push(W)}return X}catch{return[]}}function WK($,Z){let Q=U9(Z);return OM($).some((X)=>U9($,X)===Q)}function NM($,Z){return HM($)===DM&&F9(L9(H9($),v3))&&WK(H9($),Z)}function qM($){let Z=U9($),Q=[],X=H9(Z);while(!0){if(NM(X,Z)){Q.push(X);break}if(F9(L9(X,v3))){if(WK(X,Z))Q.push(X);break}let J=H9(X);if(J===X)break;X=J}return D9(Q)}function H2($={}){let Z=$.cwd??process.cwd(),Q=JK($.workspacePath),J=[...QK($.pluginPaths??[],Z),...Q];return $.includeDisabled?D9(J):XK(J)}function AM($={}){let Z=$.cwd??process.cwd(),Q=JK($.workspacePath),X=zM($.pluginPaths??[],Z);return XK([...X,...Q])}function M$($){let Z=[];for(let Q of $)for(let X of qM(Q)){let J=L9(X,LM);if(_M(J))Z.push(J)}return D9(Z)}function jK($={}){return M$(AM($))}async function _9($={}){let Z=H2($);if(Z.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[]};if($.mode==="in_process"){let X=await C8(Z,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:X.plugins,failures:X.failures,pluginPaths:X.pluginPaths,warnings:X.warnings}}let Q=await G6({pluginPaths:Z,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,telemetryAvailable:Boolean($.telemetry),providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:Q.extensions??[],shutdown:Q.shutdown,failures:Q.failures,pluginPaths:Q.pluginPaths,warnings:Q.warnings}}var z9="SKILL.md",SM="managed.json",bM=new Set([".md",".markdown",".txt"]);function d3($){return $.trim().toLowerCase()}function H6($){let Z=$;return Z?.code==="ENOENT"||Z?.code==="ENOTDIR"||Z?.code==="EACCES"||Z?.code==="EPERM"||Z?.code==="ELOOP"}function N9($){return bM.has(O9($).toLowerCase())}function KK($){let Z=[],Q=new Set;for(let X of $){let J=b8(X);if(Q.has(J))continue;Q.add(J),Z.push(X)}return Z}function kM($){let Z=[...$?.directories??n3($?.workspacePath)];if($?.pluginSkillDirectories)Z.push(...$.pluginSkillDirectories);else if($?.includePluginSkills)Z.push(...jK({pluginPaths:$.pluginPaths,workspacePath:$.workspacePath,cwd:$.cwd??$.workspacePath}));return KK(Z)}async function l3($){try{let Z=await m3($,{withFileTypes:!0}),Q=[];for(let X of Z){if(!X.isDirectory())continue;let J=$1($,X.name),W=$1(J,SM);try{let j=await TM(W,"utf8"),Y=JSON.parse(j);if(Y&&typeof Y==="object")Q.push(J)}catch(j){if(H6(j))continue;if(j?.name==="SyntaxError")continue;throw j}}return Q.sort((X,J)=>X.localeCompare(J))}catch(Z){if(H6(Z))return[];throw Z}}function p3($){let Z=MM($),Q=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,X=Z.match(Q);if(!X)return{data:{},body:Z,hadFrontmatter:!1};let[,J,W]=X;try{let j=wM.parse(J);return{data:j&&typeof j==="object"&&!Array.isArray(j)?j:{},body:W,hadFrontmatter:!0}}catch(j){let Y=j instanceof Error?j.message:String(j);return{data:{},body:Z,hadFrontmatter:!0,parseError:Y}}}function q9($,Z,Q){if($===void 0||$===null){if(Q)throw Error(`Missing required frontmatter field '${Z}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${Z}' must be a string.`);let X=$.trim();if(!X&&Q)throw Error(`Frontmatter field '${Z}' cannot be empty.`);return X||void 0}function U6($,Z){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${Z}' must be a boolean.`);return $}function xM($,Z){if(t1($.filePath).toLowerCase()!==VK.toLowerCase())return t1($.filePath,O9($.filePath));if(Z&&b8($.filePath)===b8(Z,VK))return"Workspace AGENTS.md";if(b8($.filePath)===b8(RM()))return"Global AGENTS.md";return t1($.filePath,O9($.filePath))}function i3($,Z){let{data:Q,body:X,parseError:J}=p3($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let W=X.trim();if(!W)throw Error("Missing instructions body in skill file.");let Y=q9(Q.name,"name",!1)??Z.trim();if(!Y)throw Error("Missing skill name.");return{name:Y,description:q9(Q.description,"description",!1),disabled:U6(Q.disabled,"disabled")??(U6(Q.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:Q}}function r3($,Z){let{data:Q,body:X,parseError:J}=p3($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let W=X.trim();if(!W)throw Error("Missing instructions body in rule file.");let j=q9(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing rule name.");return{name:j,disabled:U6(Q.disabled,"disabled")??(U6(Q.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:Q}}function a3($,Z){let{data:Q,body:X,parseError:J}=p3($);if(J)throw Error(`Failed to parse YAML frontmatter: ${J}`);let W=X.trim();if(!W)throw Error("Missing instructions body in workflow file.");let j=q9(Q.name,"name",!1)??Z.trim();if(!j)throw Error("Missing workflow name.");return{name:j,disabled:U6(Q.disabled,"disabled")??(U6(Q.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:Q}}function n3($){return PM($)}function o3($){return CM($)}function s3($){return fM($)}async function GK($){if(t1($)===".cline"){let Z=await l3($);return(await Promise.all(Z.map((X)=>GK($1(X,c3))))).flat()}try{let Z=await m3($,{withFileTypes:!0}),Q=[];for(let X of Z){if(X.isFile()&&X.name===z9){Q.push({directoryPath:$,fileName:X.name,filePath:$1($,X.name)});continue}let J=$1($,X.name);if(X.isDirectory()||X.isSymbolicLink()&&await g3(J).then((j)=>j.isDirectory()).catch((j)=>{if(H6(j))return!1;throw j}))Q.push({directoryPath:J,fileName:z9,filePath:$1(J,z9)})}return Q}catch(Z){if(H6(Z))return[];throw Z}}async function A9($){if(t1($)===".cline"){let Z=await l3($);return(await Promise.all(Z.map((X)=>A9($1(X,"rules.md"))))).flat()}try{if((await g3($)).isFile())return[{directoryPath:EM($),fileName:t1($),filePath:$}]}catch(Z){if(!H6(Z))throw Z}try{let Q=(await m3($,{withFileTypes:!0})).filter((J)=>J.isFile()&&N9(J.name)).map((J)=>({directoryPath:$,fileName:J.name,filePath:$1($,J.name)})),X=$1($,"AGENTS.md");try{if((await g3(X)).isFile()){if(!Q.some((j)=>j.fileName==="AGENTS.md"))Q.push({directoryPath:$,fileName:"AGENTS.md",filePath:X})}}catch{}return Q}catch(Z){if(H6(Z))return[];throw Z}}async function yM($){if(t1($)===".cline"){let Z=await l3($);return(await Promise.all(Z.map((X)=>A9($1(X,u3))))).flat()}return A9($)}function t3($){let Z=kM($),Q=$?.workspacePath?$1($.workspacePath,".cline"):void 0;return{type:"skill",directories:Q?KK([...Z,Q]):Z,discoverFiles:GK,includeFile:(X)=>X===z9,parseFile:(X)=>i3(X.content,t1(X.directoryPath)),resolveId:(X)=>d3(X.name)}}function e3($){let Z=$?.directories??o3($?.workspacePath),Q=$?.workspacePath?$1($.workspacePath,".cline"):void 0;return{type:"rule",directories:Q?[...Z,Q]:Z,discoverFiles:A9,includeFile:(X,J)=>X===".clinerules"||N9(X)||N9(J),parseFile:(X)=>r3(X.content,xM(X,$?.workspacePath)),resolveId:(X)=>d3(X.name)}}function $X($){let Z=$?.directories??s3($?.workspacePath),Q=$?.workspacePath?$1($.workspacePath,".cline"):void 0;return{type:"workflow",directories:Q?[...Z,Q]:Z,discoverFiles:yM,includeFile:(X)=>N9(X),parseFile:(X)=>a3(X.content,t1(X.filePath,O9(X.filePath))),resolveId:(X)=>d3(X.name)}}function HK($){let Z=[t3($?.skills),e3($?.rules),$X($?.workflows)];return new T8(Z,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{createHash as IM}from"node:crypto";import{truncateSplit as UK}from"@cline/shared";function F6($){return $.trim().toLowerCase().replace(/\s+/g,"-").replace(/[^\p{L}\p{N}_.:@-]+/gu,"-").replace(/-+/g,"-").replace(/^-/,"").replace(/-$/,"")}function hM($){let Z=F6($).replace(/[^a-z0-9_-]+/g,"-").replace(/^-/,"").replace(/-$/,""),Q=IM("sha256").update($).digest("hex").slice(0,12);return`${Z||"command"}-${Q}`}function vM($,Z){if($.description?.trim())return UK($.description,".");if(Z==="workflow")return;return UK($.instructions,".")}function gM($){return $.disabled!==!0}function FK($,Z){return[...$.getSnapshot(Z).entries()].map(([Q,X])=>({id:Q,record:X})).filter(({record:Q})=>gM(Q.item)).map(({id:Q,record:X})=>({id:Q,name:F6(X.item.name)||`${Z}-${hM(Q)}`,instructions:X.item.instructions,description:vM(X.item,Z),kind:Z})).sort((Q,X)=>Q.name.localeCompare(X.name)||Q.id.localeCompare(X.id))}function k8($){let Z=new Map;for(let Q of[...FK($,"skill"),...FK($,"workflow")])if(!Z.has(Q.name))Z.set(Q.name,Q);return[...Z.values()].sort((Q,X)=>Q.name.localeCompare(X.name))}function LK($,Z,Q){if(!$.startsWith("/")||$.length<2)return $;let X=$.match(/^\/(\S+)/);if(!X)return $;let J=X[1],W=F6(J);if(!W)return $;let j=J.length+1,Y=$.slice(j),V=k8(Z).find((B)=>B.name===W);if(!V)return $;if(V.kind==="skill"&&Q?.expandSkillCommands===!1)return $;return`${V.instructions}${Y}`}function DK($){return $.disabled!==!0}function T9($){if($.length===0)return"";return`
47
47
 
48
48
  # Rules
@@ -51,7 +51,7 @@ ${Q.instructions}`).join(`
51
51
 
52
52
  `)}`}function E9($,Z){let Q=$?.trim(),X=Z?.trim();if(Q&&X)return`${Q}
53
53
 
54
- ${X}`;return Q||X||void 0}function mM($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(DK).sort((Q,X)=>Q.name.localeCompare(X.name))}function _K($){return T9(mM($))}import{validateWithZod as ue,zodToJsonSchema as de}from"@cline/shared";_0();var cM=new Set(["rm","rmdir","unlink","mv","cp","dd","touch","mkdir","ln","link","chmod","chown","chgrp","truncate","shred","install","patch","rsync","mkfifo","mknod","del","erase","move","ren","rename","md","rd","mklink","copy","xcopy","robocopy","new-item","ni","remove-item","move-item","copy-item","rename-item","set-content","add-content","clear-content","out-file","mi","ri","cpi","rni","ac","clc"]),uM=new Set(["add","am","apply","checkout","cherry-pick","clean","clone","commit","init","merge","mv","pull","push","rebase","reset","restore","revert","rm","stash","submodule","switch","worktree"]),M9=new Set(["install","i","ci","add","remove","rm","uninstall","unlink","link","update","up","upgrade","dedupe","prune","publish"]),x8=new Set(["install","uninstall","add","remove"]),dM=new Set(["add","remove","rm","install","uninstall","update","new","init","publish"]),lM=new Set(["install","uninstall","update","cleanup"]),pM=new Set(["install","require","remove","update"]),iM=new Set(["install","get"]),rM=new Set(["add","remove"]),aM=new Set(["install","uninstall","upgrade"]),nM=new Set(["install","update","delete","push"]),U2=new Set(["install","reinstall","remove","purge","uninstall","upgrade","autoremove","add","del"]),oM={git:uM,npm:M9,pnpm:M9,yarn:M9,bun:M9,pip:x8,pip3:x8,pipx:x8,uv:x8,cargo:dM,apt:U2,"apt-get":U2,dnf:U2,yum:U2,apk:U2,brew:U2,snap:U2,gem:lM,composer:pM,go:iM,dotnet:rM,winget:aM,nuget:nM},sM={stash:new Set(["list","show"]),worktree:new Set(["list"]),submodule:new Set(["status","summary"])},tM=new Set(["sudo","doas","env","command","builtin","nohup","time","nice","stdbuf","timeout","xargs"]),eM=new Set(["if","then","else","elif","fi","while","until","do","done","for","case","esac","!","{","}"]),zK=/^[A-Za-z_][A-Za-z0-9_]*\+?=/;function NK($){let Z=$.replace(/["']/g,"");if(/^(\/dev\/(null|stdout|stderr|tty)|nul:?)$/i.test(Z))return!0;if(Z.includes(".."))return!1;return Z.startsWith("/tmp/")||Z.startsWith("/var/tmp/")||Z.startsWith("$TMPDIR")||Z.startsWith("${TMPDIR")||/^%te?mp%/i.test(Z)||/^\$env:te?mp/i.test(Z)}function OK($){return($.replace(/["']/g,"").split(/[/\\]/).pop()??$).toLowerCase().replace(/\.exe$/,"")}function $R($){let Z=$.split(`
54
+ ${X}`;return Q||X||void 0}function mM($){return[...$.getSnapshot("rule").values()].map((Q)=>Q.item).filter(DK).sort((Q,X)=>Q.name.localeCompare(X.name))}function _K($){return T9(mM($))}import{validateWithZod as le,zodToJsonSchema as pe}from"@cline/shared";_0();var cM=new Set(["rm","rmdir","unlink","mv","cp","dd","touch","mkdir","ln","link","chmod","chown","chgrp","truncate","shred","install","patch","rsync","mkfifo","mknod","del","erase","move","ren","rename","md","rd","mklink","copy","xcopy","robocopy","new-item","ni","remove-item","move-item","copy-item","rename-item","set-content","add-content","clear-content","out-file","mi","ri","cpi","rni","ac","clc"]),uM=new Set(["add","am","apply","checkout","cherry-pick","clean","clone","commit","init","merge","mv","pull","push","rebase","reset","restore","revert","rm","stash","submodule","switch","worktree"]),M9=new Set(["install","i","ci","add","remove","rm","uninstall","unlink","link","update","up","upgrade","dedupe","prune","publish"]),x8=new Set(["install","uninstall","add","remove"]),dM=new Set(["add","remove","rm","install","uninstall","update","new","init","publish"]),lM=new Set(["install","uninstall","update","cleanup"]),pM=new Set(["install","require","remove","update"]),iM=new Set(["install","get"]),rM=new Set(["add","remove"]),aM=new Set(["install","uninstall","upgrade"]),nM=new Set(["install","update","delete","push"]),U2=new Set(["install","reinstall","remove","purge","uninstall","upgrade","autoremove","add","del"]),oM={git:uM,npm:M9,pnpm:M9,yarn:M9,bun:M9,pip:x8,pip3:x8,pipx:x8,uv:x8,cargo:dM,apt:U2,"apt-get":U2,dnf:U2,yum:U2,apk:U2,brew:U2,snap:U2,gem:lM,composer:pM,go:iM,dotnet:rM,winget:aM,nuget:nM},sM={stash:new Set(["list","show"]),worktree:new Set(["list"]),submodule:new Set(["status","summary"])},tM=new Set(["sudo","doas","env","command","builtin","nohup","time","nice","stdbuf","timeout","xargs"]),eM=new Set(["if","then","else","elif","fi","while","until","do","done","for","case","esac","!","{","}"]),zK=/^[A-Za-z_][A-Za-z0-9_]*\+?=/;function NK($){let Z=$.replace(/["']/g,"");if(/^(\/dev\/(null|stdout|stderr|tty)|nul:?)$/i.test(Z))return!0;if(Z.includes(".."))return!1;return Z.startsWith("/tmp/")||Z.startsWith("/var/tmp/")||Z.startsWith("$TMPDIR")||Z.startsWith("${TMPDIR")||/^%te?mp%/i.test(Z)||/^\$env:te?mp/i.test(Z)}function OK($){return($.replace(/["']/g,"").split(/[/\\]/).pop()??$).toLowerCase().replace(/\.exe$/,"")}function $R($){let Z=$.split(`
55
55
  `),Q=[],X;for(let J of Z){if(X!==void 0){if(J.replace(/^\t+/,"")===X)X=void 0;continue}Q.push(J);let W=J.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);if(W)X=W[1]??W[2]??W[3]}return Q.join(`
56
56
  `).replace(/\$\(\([\s\S]*?\)\)/g,"_").replace(/\\./g,"_").replace(/"[^"]*"|'[^']*'/g,(J)=>J.replace(/[\s<>|;&$()`#\\]/g,"_")).replace(/(?:^|\s)#.*$/gm," ")}function ZX($){let Z=0;while(Z<$.length&&(zK.test($[Z])||eM.has($[Z])))Z+=1;while(Z<$.length&&tM.has(OK($[Z]))){Z+=1;while(Z<$.length&&($[Z].startsWith("-")||$[Z]==="{}"||zK.test($[Z])||/^\d+[smhd]?$/.test($[Z])))Z+=1}if(Z>=$.length)return;let Q=OK($[Z]),X=$.slice(Z+1);if(Q==="tee")return X.filter((Y)=>!Y.startsWith("-")).some((Y)=>!NK(Y))?"`tee`":void 0;if(cM.has(Q))return`\`${Q}\``;let J=oM[Q];if(J){if(Q==="git"&&X.some((V)=>V==="--help"||V==="-h"))return;let j=0;while(j<X.length&&X[j].startsWith("-"))j+=Q==="git"&&/^-[cC]$/.test(X[j])?2:1;let Y=X[j]?.toLowerCase();if(Y&&J.has(Y)){let V=X[j+1]?.toLowerCase();if(Q==="git"&&V!==void 0&&sM[Y]?.has(V))return;return`\`${Q} ${Y}\``}if(Q==="yarn"&&X.length===0)return"`yarn` (install)";return}if(/^python[\d.]*$/.test(Q)){let j=X.indexOf("-m"),Y=j===-1?void 0:X[j+1]?.toLowerCase();if(Y==="pip"||Y==="pip3"){let V=X.slice(j+2).find((B)=>!B.startsWith("-"))?.toLowerCase();if(V&&x8.has(V))return`\`pip ${V}\``}return}let W=/^-[A-Za-z]*i(\..*)?$/;if((Q==="sed"||Q==="gsed")&&X.some((j)=>W.test(j)||j.startsWith("--in-place")))return"`sed -i` (in-place edit)";if(Q==="perl"&&X.some((j)=>W.test(j)))return"`perl -i` (in-place edit)";if(/^[gnm]?awk$/.test(Q)){if(X.some((Y,V)=>(Y==="-i"||Y==="--include")&&X[V+1]?.startsWith("inplace")||Y.startsWith("-i")&&Y.slice(2).startsWith("inplace")||Y.startsWith("--include=inplace")))return"`awk -i inplace` (in-place edit)";return}if(Q==="sort"&&X.some((j)=>j.startsWith("-o")||j.startsWith("--output")))return"`sort -o` (writes a file)";if(Q==="curl")return X.some((Y)=>!Y.startsWith("--")&&/^-[A-Za-z]*[oO]/.test(Y)||Y.startsWith("--output")||Y.startsWith("--remote-name"))?"`curl -o` (writes a file)":void 0;if(Q==="wget")return X.some((Y,V)=>Y==="--spider"||/^-[A-Za-z]*O-$/.test(Y)||Y==="--output-document=-"||Y==="-O"&&X[V+1]==="-")?void 0:"`wget` (downloads files)";if(Q==="find"){if(X.includes("-delete"))return"`find -delete`";for(let j=0;j<X.length;j+=1){if(!["-exec","-execdir","-ok","-okdir"].includes(X[j]))continue;let Y=[];for(let B=j+1;B<X.length&&X[B]!==";"&&X[B]!=="+";B+=1)Y.push(X[B]);let V=ZX(Y);if(V)return V}return}return}function qK($){if(typeof $!=="string")return ZX([$.command,...$.args??[]]);let Z=$R($),Q=Z.matchAll(/(?:^|[^<>])(?:>{1,2}|&>{1,2})\s*([^\s;&|<>()]+)/g);for(let X of Q)if(!NK(X[1]))return`output redirection (\`> ${X[1]}\`)`;for(let X of Z.split(/[\n;|&()`]+/)){let J=ZX(X.trim().split(/\s+/).filter(Boolean));if(J)return J}return}function AK($){return`Command not executed: ${$} can modify files, and file modifications are blocked in plan mode. `+"You are in PLAN MODE — explore, analyze, and present a plan; do not make changes. "+"Use read-only commands to inspect the project (redirecting output to /tmp, or %TEMP% on Windows, is allowed), and if this change is part of the task, put it in your plan so it can run after the user approves switching to act mode."}var A0={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"},L6=[A0.READ_FILES,A0.SEARCH_CODEBASE,A0.RUN_COMMANDS,A0.FETCH_WEB_CONTENT,A0.APPLY_PATCH,A0.EDITOR,A0.SKILLS,A0.ASK,A0.SUBMIT_AND_EXIT];import{validateWithZod as QR}from"@cline/shared";import{z as R}from"zod";var R$=6000,F2=R.string().describe("The absolute path of a text file to read content from"),R9=R.object({start_line:R.coerce.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:R.coerce.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit to read to the end of the file or the read cap, whichever comes first")}).describe("Optional inclusive one-based file line range"),QX=R.object({path:F2,start_line:R9.shape.start_line,end_line:R9.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds. Always include path; start_line/end_line must be on the same object as the path they apply to, never in a separate array element"),P9=R.object({files:R.array(QX).describe("Array of file read requests; each element is one file and must include path. Omit start_line/end_line or set them to null to read from the start; provide integers on the same object as the path to return only that inclusive one-based line range — never emit a range as its own array element. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),TK={start_line:R9.shape.start_line,end_line:R9.shape.end_line},D6=R.union([QX,R.object({file_path:F2,...TK}).transform(({file_path:$,...Z})=>({path:$,...Z})),R.object({filePath:F2,...TK}).transform(({filePath:$,...Z})=>({path:$,...Z}))]),EK=R.union([P9,D6,R.array(D6),R.array(R.string()),R.string(),R.object({files:R.array(R.union([F2,D6]))}),R.object({files:D6}),R.object({files:F2}),R.object({file_paths:R.array(F2)}),R.object({file_paths:R.string()}),R.object({paths:R.array(R.union([F2,D6]))}),R.object({paths:D6}),R.object({paths:R.string()})]),f9=R.object({queries:R.array(R.string()).describe("Array of regex search queries to execute")}),MK=R.union([f9,R.array(R.string()),R.string(),R.object({queries:R.string()})]),C9=R.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${R$*2} characters) to avoid timeouts.`),y8=R.object({command:R.string().min(1).describe("The executable to run directly without shell parsing."),args:R.array(R.string()).optional().describe("Optional argv list passed directly to the executable.")}),RK=R.union([C9,y8]),w9=R.object({commands:R.array(C9).describe("Array of complete shell command strings to execute.")}),ZR=R.object({commands:R.array(RK)}),CK=R.union([w9,ZR,R.object({commands:RK}),R.array(y8),y8,R.object({command:C9}),R.object({cmd:C9}),R.array(R.string()),R.string()]),PK=R.object({url:R.string().describe("The URL to fetch"),prompt:R.string().min(2).describe("Analysis prompt for the fetched content")}),S9=R.object({requests:R.array(PK).describe("Array of the URLs for the web fetch requests")}),b9=R.object({path:R.string().min(1).describe("The absolute path for the action to be performed on"),old_text:R.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 ${R$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:R.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 ${R$} 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:R.coerce.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."),k9=R.object({input:R.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."),fK=R.union([k9,R.string()]),x9=R.object({skill:R.string().min(1).describe("Name of the skill to execute."),args:R.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),y9=R.object({question:R.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:R.array(R.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),I9=R.object({summary:R.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:R.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.
57
57
  'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
@@ -59,12 +59,12 @@ IMPORTANT: You must run the specific failing test(s) mentioned in the issue or t
59
59
  [... output truncated: ${X} chars total. Refine the command (grep, head, tail) to view the elided middle ...]
60
60
  `+$.slice(-W)}var N6=2000,jX=2000,g9=48000,q6=48000;var iK=10485760,NR=86400000,qR=60000,tK="cline-command-",eK="output.log",$G="active-command.json",ZG="completed-at",AR=48;function QG($){return typeof $==="number"&&Number.isFinite($)?Math.max(0,$):NR}function TR($){return typeof $==="number"&&Number.isFinite($)?Math.max(1,$):qR}function ER($){try{let Z=JSON.parse($);if(Z.version!==1||typeof Z.executionId!=="string"||Z.executionId.length===0||!Number.isSafeInteger(Z.pid)||(Z.pid??0)<=0||typeof Z.processStartToken!=="string"||Z.processStartToken.length===0||typeof Z.detachedAtMs!=="number"||!Number.isFinite(Z.detachedAtMs)||Z.detachedAtMs<0)return;return Z}catch{return}}function YX($,Z){let Q=`${$}.${oK()}.tmp`;try{FR(Q,Z,"utf8");try{lK(Q,$)}catch(X){if(X instanceof Error&&"code"in X&&["EEXIST","EPERM"].includes(String(X.code)))c9($,{force:!0}),lK(Q,$);else throw X}}finally{c9(Q,{force:!0})}}function MR($,Z){let Q=$?.trim();if(!Q)return;let X=Number(Q);if(!Number.isFinite(X)||X<0)return;return Math.min(X,Z)}async function rK($){try{return await DR($,"utf8")}catch(Z){if(Z instanceof Error&&"code"in Z&&Z.code==="ENOENT")return;throw Z}}async function XG($,Z){let Q=C$($,$G),X=C$($,ZG),J=await rK(X),W=MR(J,Z.nowMs),j=await rK(Q);if(W!==void 0){if(j!==void 0)await m9(Q,{force:!0})}else if(j!==void 0){let V=ER(j);if(V){let B;try{B=await Z.probeProcessStartToken(V.pid)}catch{B={status:"unavailable"}}if(B.status==="found"&&B.token===V.processStartToken)return aK($,Z),!1;if(B.status==="unavailable")return aK($,Z),!1}YX(X,String(Z.nowMs)),await m9(Q,{force:!0}),W=Z.nowMs}if(W===void 0)try{W=(await pK(C$($,eK))).mtimeMs}catch{W=(await pK($)).mtimeMs}let Y=Z.nowMs-Z.retentionMs;if(W>Y)return WG($,Math.max(0,W+Z.retentionMs-Z.nowMs)),!1;return await m9($,{recursive:!0,force:!0}),!0}function aK($,Z,Q=Z.activeCommandPollIntervalMs){setTimeout(()=>{XG($,{...Z,nowMs:Date.now()}).catch(()=>{return})},Q).unref()}async function JG($={}){let Z=$.tempDirectory??sK(),Q=QG($.retentionMs),X=$.nowMs??Date.now(),J=$.processStartTokenProbe??O6,W=TR($.activeCommandPollIntervalMs),j;try{j=await LR(Z,{withFileTypes:!0})}catch{return 0}let Y=0;for(let V of j){if(!V.isDirectory()||!V.name.startsWith(tK))continue;let B=C$(Z,V.name);try{if(await XG(B,{retentionMs:Q,nowMs:X,probeProcessStartToken:J,activeCommandPollIntervalMs:W}))Y+=1}catch{}}return Y}class D2 extends Error{exitCode;output;constructor($,Z){super(`Command exited with code ${$}`);this.exitCode=$;this.output=Z;this.name="CommandExitError"}}function nK($){let Z=Math.ceil($/2),Q=Math.max(1,$-Z),X=new _R("utf8"),J="",W="",j=0,Y=(V)=>{if(!V)return;j+=V.length;let B=Z-J.length;if(B>0){J+=V.slice(0,B),W=(W+V.slice(B)).slice(-Q);return}W=(W+V).slice(-Q)};return{append(V){let B=X.write(V);return Y(B),B},current(){return{text:J+W,totalChars:j,dropped:j>J.length+W.length}},snapshot(){let V=X.end();return Y(V),{text:J+W,totalChars:j,dropped:j>J.length+W.length,finalChunk:V}}}}function RR($,Z,Q,X){let J=$.emitUpdate,W=typeof X==="number"&&Number.isFinite(X)?Math.max(1,Math.floor(Math.min($$,X))):$$,j={},Y=[],V,B=!1,K=()=>{if(!V)return;clearTimeout(V),V=void 0},G=()=>{if(K(),!J){j={},Y=[];return}let U=j,F=Y;j={},Y=[];for(let L of F){let D=U[L];if(!D?.chunk)continue;let z=D.droppedChars>0?`\x1B[0m[${D.droppedChars} command-output characters skipped while streaming]
61
61
  `:"",O=z.length<W?z+D.chunk.slice(-(W-z.length)):D.chunk.slice(-W);J({stream:L,chunk:O,executionId:Z,detachable:Q(),...D.droppedChars>0?{truncated:!0,droppedChars:D.droppedChars}:{}})}},H=()=>{if(!J||V||B)return;V=setTimeout(G,AR),V.unref()};return{append(U,F){if(!J||B||!F)return;let L=j[U];if(!L)L={chunk:"",droppedChars:0},j[U]=L,Y.push(U);if(F.length>=W)L.droppedChars+=L.chunk.length+F.length-W,L.chunk=F.slice(-W);else{let D=L.chunk.length+F.length-W;if(D>0)L.droppedChars+=D,L.chunk=L.chunk.slice(D);L.chunk+=F}H()},flush:G,stop(U={}){if(B)return;if(U.flush)G();else K(),j={},Y=[];B=!0}}}function WG($,Z){setTimeout(()=>{m9($,{recursive:!0,force:!0}).catch(()=>{return})},Z).unref()}function CR($,Z){let Q=UR(C$(sK(),tK)),X=C$(Q,eK),J=C$(Q,$G),W=C$(Q,ZG);try{YX(J,`${JSON.stringify(Z)}
62
- `)}catch(L){throw c9(Q,{recursive:!0,force:!0}),L}let j=HR(X,{encoding:"utf8"}),Y=0,V=!1,B=!0,K=!1,G=!1,H=!1,U=()=>{if(H)return;H=!0,WG(Q,$)};return j.on("error",()=>{B=!1}),j.once("close",()=>{if(B=!1,K=!0,G)U()}),{path:X,write(L){if(!L||V||!B)return;let D=iK-Y;if(D<=0){V=!0,B=!1,j.end();return}let z=Buffer.from(L,"utf8"),_=z.length<=D?z:z.subarray(0,D);if(j.write(_),Y+=_.length,_.length<z.length||Y>=iK)V=!0,B=!1,j.end()},complete:()=>{if(G)return;G=!0;try{YX(W,String(Date.now()))}catch{}try{c9(J,{force:!0})}catch{}if(K){U();return}B=!1,j.end()}}}function PR($,Z,Q,X,J,W,j,Y=O6){if(Z.signal?.aborted)return Promise.reject(Error("Command was aborted"));return new Promise((V,B)=>{let K=process.platform==="win32",G=dK($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!K,windowsHide:!0}),H=G.pid,U=nK(X),F=nK(X),L=oK(),D=Boolean(j&&Z.sessionId),z=!1,_,O=!1,A=!1,q=!1,N,T=()=>{},M=RR(Z,L,()=>z,X),d=(w)=>{if(A)return;A=!0,w()},b=async()=>{if(!H)return;if(K){await new Promise((w)=>{let k=!1,m,t=()=>{if(k)return;k=!0,clearTimeout(y0),w()};try{m=dK("taskkill.exe",["/PID",String(H),"/T","/F"],{stdio:"ignore",shell:!1,windowsHide:!0})}catch{G.kill(),w();return}let y0=setTimeout(()=>{m.kill(),G.kill(),t()},5000);m.once("error",()=>{G.kill(),t()}),m.once("close",(Y0)=>{if(Y0!==0)G.kill();t()})});return}try{process.kill(-H,"SIGKILL")}catch{G.kill("SIGKILL")}},S,E=()=>f(Error("Command was aborted")),I=()=>{clearTimeout(S),Z.signal?.removeEventListener("abort",E),T()},f=(w)=>{if(O||A)return;O=!0,M.stop({flush:!0}),I(),b().finally(()=>d(()=>B(w)))};if(S=setTimeout(()=>f(new _6(`Command timed out after ${Q}ms`,Q)),Q),Z.signal){if(Z.signal.addEventListener("abort",E,{once:!0}),Z.signal.aborted)E()}let r=()=>{if(!z||O||A||!H||G.exitCode!==null||G.signalCode!==null)return!1;if(!_)return!1;let w=CR(W,{version:1,executionId:L,pid:H,processStartToken:_,detachedAtMs:Date.now()});M.stop({flush:!0}),q=!0,N=w;let k=U.current(),m=F.current();if(N.write(k.text),m.text)N.write(`
62
+ `)}catch(L){throw c9(Q,{recursive:!0,force:!0}),L}let j=HR(X,{encoding:"utf8"}),Y=0,V=!1,B=!0,K=!1,G=!1,H=!1,U=()=>{if(H)return;H=!0,WG(Q,$)};return j.on("error",()=>{B=!1}),j.once("close",()=>{if(B=!1,K=!0,G)U()}),{path:X,write(L){if(!L||V||!B)return;let D=iK-Y;if(D<=0){V=!0,B=!1,j.end();return}let z=Buffer.from(L,"utf8"),_=z.length<=D?z:z.subarray(0,D);if(j.write(_),Y+=_.length,_.length<z.length||Y>=iK)V=!0,B=!1,j.end()},complete:()=>{if(G)return;G=!0;try{YX(W,String(Date.now()))}catch{}try{c9(J,{force:!0})}catch{}if(K){U();return}B=!1,j.end()}}}function PR($,Z,Q,X,J,W,j,Y=O6){if(Z.signal?.aborted)return Promise.reject(Error("Command was aborted"));return new Promise((V,B)=>{let K=process.platform==="win32",G=dK($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!K,windowsHide:!0}),H=G.pid,U=nK(X),F=nK(X),L=oK(),D=Boolean(j&&Z.sessionId),z=!1,_,O=!1,A=!1,q=!1,N,T=()=>{},M=RR(Z,L,()=>z,X),d=(w)=>{if(A)return;A=!0,w()},b=async()=>{if(!H)return;if(K){await new Promise((w)=>{let k=!1,m,t=()=>{if(k)return;k=!0,clearTimeout(y0),w()};try{m=dK("taskkill.exe",["/PID",String(H),"/T","/F"],{stdio:"ignore",shell:!1,windowsHide:!0})}catch{G.kill(),w();return}let y0=setTimeout(()=>{m.kill(),G.kill(),t()},5000);m.once("error",()=>{G.kill(),t()}),m.once("close",(Y0)=>{if(Y0!==0)G.kill();t()})});return}try{process.kill(-H,"SIGKILL")}catch{G.kill("SIGKILL")}},S,E=()=>P(Error("Command was aborted")),I=()=>{clearTimeout(S),Z.signal?.removeEventListener("abort",E),T()},P=(w)=>{if(O||A)return;O=!0,M.stop({flush:!0}),I(),b().finally(()=>d(()=>B(w)))};if(S=setTimeout(()=>P(new _6(`Command timed out after ${Q}ms`,Q)),Q),Z.signal){if(Z.signal.addEventListener("abort",E,{once:!0}),Z.signal.aborted)E()}let i=()=>{if(!z||O||A||!H||G.exitCode!==null||G.signalCode!==null)return!1;if(!_)return!1;let w=CR(W,{version:1,executionId:L,pid:H,processStartToken:_,detachedAtMs:Date.now()});M.stop({flush:!0}),q=!0,N=w;let k=U.current(),m=F.current();if(N.write(k.text),m.text)N.write(`
63
63
  [stderr]
64
64
  ${m.text}`);I(),G.unref(),G.stdout?.unref?.(),G.stderr?.unref?.();let t=[`[Command is still running. Output will continue in ${N.path}]`,J?k.text+(m.text?`
65
65
  [stderr]
66
66
  ${m.text}`:""):k.text].filter(Boolean).join(`
67
- `);return d(()=>V(t)),!0};G.once("spawn",()=>{if(O)return;Z.emitUpdate?.({stream:"stdout",chunk:"",executionId:L,detachable:!1});let w=Z.sessionId;if(!D||!H||!w||!j)return;(async()=>{let k=await Y(H);if(k.status!=="found"||O||A||G.exitCode!==null||G.signalCode!==null)return;_=k.token,z=!0,T=j.register({executionId:L,sessionId:w,toolCallId:Z.toolCallId,detach:r}),Z.emitUpdate?.({stream:"stdout",chunk:"",executionId:L,detachable:!0})})().catch(()=>{return})}),G.stdout?.on("data",(w)=>{let k=U.append(w);if(!k)return;if(q){N?.write(k);return}M.append("stdout",k)}),G.stderr?.on("data",(w)=>{let k=F.append(w);if(!k)return;if(q){N?.write(k);return}M.append("stderr",k)}),G.on("close",(w)=>{if(O)return;let k=U.snapshot(),m=F.snapshot();if(q){N?.write(k.finalChunk),N?.write(m.finalChunk),N?.write(`
67
+ `);return d(()=>V(t)),!0};G.once("spawn",()=>{if(O)return;Z.emitUpdate?.({stream:"stdout",chunk:"",executionId:L,detachable:!1});let w=Z.sessionId;if(!D||!H||!w||!j)return;(async()=>{let k=await Y(H);if(k.status!=="found"||O||A||G.exitCode!==null||G.signalCode!==null)return;_=k.token,z=!0,T=j.register({executionId:L,sessionId:w,toolCallId:Z.toolCallId,detach:i}),Z.emitUpdate?.({stream:"stdout",chunk:"",executionId:L,detachable:!0})})().catch(()=>{return})}),G.stdout?.on("data",(w)=>{let k=U.append(w);if(!k)return;if(q){N?.write(k);return}M.append("stdout",k)}),G.stderr?.on("data",(w)=>{let k=F.append(w);if(!k)return;if(q){N?.write(k);return}M.append("stderr",k)}),G.on("close",(w)=>{if(O)return;let k=U.snapshot(),m=F.snapshot();if(q){N?.write(k.finalChunk),N?.write(m.finalChunk),N?.write(`
68
68
  [Command exited with code ${w??1}]
69
69
  `),N?.complete();return}if(k.finalChunk)M.append("stdout",k.finalChunk);if(m.finalChunk)M.append("stderr",m.finalChunk);if(M.stop({flush:!0}),I(),w!==0){let t=w??1,y0=J?k.text+(m.text?`
70
70
  [stderr]
@@ -73,7 +73,7 @@ ${y0}`:`[Command exited with code ${t}]`;d(()=>B(new D2(t,m0)))}else{let t=J?k.t
73
73
  [stderr]
74
74
  ${m.text}`:""):k.text;if(k.dropped||J&&m.dropped||t.length>X){let Y0=J?k.totalChars+m.totalChars:k.totalChars;t=I8(t,{maxChars:X,totalChars:Y0})}d(()=>V(t))}}),G.on("error",(w)=>{if(O)return;if(q){N?.write(`
75
75
  [Command failed: ${w.message}]
76
- `),N?.complete();return}M.stop({flush:!0}),I(),d(()=>B(Error(`Failed to execute command: ${w.message}`)))}),G.stdin?.on("error",(w)=>{if(O||A)return;f(Error(`Failed to write command input: ${w.message}`))}),G.stdin?.end($.input,"utf8")})}function h8($={}){let{shell:Z=zR(process.platform),timeoutMs:Q=30000,env:X={},combineOutput:J=!0,executionController:W,processStartTokenProbe:j=O6}=$,Y=QG($.detachedLogRetentionMs),V=$.maxOutputChars??$.maxOutputBytes??$$;return(B,K,G)=>{let H=typeof B!=="string"&&"args"in B,U=H?{args:B.args??[]}:OR(Z,typeof B==="string"?B:B.command);return PR({executable:H?B.command:Z,args:U.args,cwd:K,env:X,input:U.input},G,Q,V,J,Y,W,j)}}function jG($,Z){let Q=$.metadata?.[Z];return typeof Q==="string"?Q:void 0}function SR($,Z,Q){fV($,{tool_name:"run_commands",effective_timeout_ms:Q.effectiveTimeoutMs,timeout_source:Q.timeoutSource,command_count:Q.commandCount,duration_ms:Q.durationMs,ulid:Z.sessionId,mode:jG(Z,"mode"),source:jG(Z,"source"),session_id:Z.sessionId,agent_id:Z.agentId,conversation_id:Z.conversationId,run_id:Z.runId,iteration:Z.iteration,tool_call_id:Z.toolCallId})}function bR($){let Z=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return Z?.[1]??Z?.[2]??Z?.[3]}function kR($){let Z=[];for(let Q=0;Q<$.length;Q+=1){let X=$[Q],J=bR(X);if(!J){Z.push(X);continue}let W=$.findIndex((Y,V)=>V>Q&&Y.trim()===J);if(W===-1){Z.push(X);continue}let j=[X];while(Q<W){Q+=1;let Y=$[Q];j.push(Y)}Z.push(j.join(`
76
+ `),N?.complete();return}M.stop({flush:!0}),I(),d(()=>B(Error(`Failed to execute command: ${w.message}`)))}),G.stdin?.on("error",(w)=>{if(O||A)return;P(Error(`Failed to write command input: ${w.message}`))}),G.stdin?.end($.input,"utf8")})}function h8($={}){let{shell:Z=zR(process.platform),timeoutMs:Q=30000,env:X={},combineOutput:J=!0,executionController:W,processStartTokenProbe:j=O6}=$,Y=QG($.detachedLogRetentionMs),V=$.maxOutputChars??$.maxOutputBytes??$$;return(B,K,G)=>{let H=typeof B!=="string"&&"args"in B,U=H?{args:B.args??[]}:OR(Z,typeof B==="string"?B:B.command);return PR({executable:H?B.command:Z,args:U.args,cwd:K,env:X,input:U.input},G,Q,V,J,Y,W,j)}}function jG($,Z){let Q=$.metadata?.[Z];return typeof Q==="string"?Q:void 0}function SR($,Z,Q){fV($,{tool_name:"run_commands",effective_timeout_ms:Q.effectiveTimeoutMs,timeout_source:Q.timeoutSource,command_count:Q.commandCount,duration_ms:Q.durationMs,ulid:Z.sessionId,mode:jG(Z,"mode"),source:jG(Z,"source"),session_id:Z.sessionId,agent_id:Z.agentId,conversation_id:Z.conversationId,run_id:Z.runId,iteration:Z.iteration,tool_call_id:Z.toolCallId})}function bR($){let Z=$.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return Z?.[1]??Z?.[2]??Z?.[3]}function kR($){let Z=[];for(let Q=0;Q<$.length;Q+=1){let X=$[Q],J=bR(X);if(!J){Z.push(X);continue}let W=$.findIndex((Y,V)=>V>Q&&Y.trim()===J);if(W===-1){Z.push(X);continue}let j=[X];while(Q<W){Q+=1;let Y=$[Q];j.push(Y)}Z.push(j.join(`
77
77
  `))}return Z}function xR($){let Z=[],Q=[],X=()=>{if(Q.length>0)Z.push(...kR(Q)),Q=[]};for(let J of $){if(typeof J==="string"){Q.push(J);continue}X(),Z.push(J)}return X(),Z}async function yR($,Z){let{executor:Q,cwd:X,context:J,timeoutMs:W,timeoutSource:j,telemetry:Y}=Z;return Promise.all($.map(async(V,B)=>{let K=Date.now(),G=xK(V),H=J.emitUpdate?{...J,emitUpdate:(U)=>{let F=U&&typeof U==="object"&&!Array.isArray(U)?U:{update:U};J.emitUpdate?.({...F,commandIndex:B,query:G})}}:J;try{let U=await e1(Q(V,X,H),W,`Command timed out after ${W}ms`);return{query:G,result:U,success:!0}}catch(U){if(U instanceof _6)SR(Y,J,{effectiveTimeoutMs:U.timeoutMs,timeoutSource:j,commandCount:$.length,durationMs:Date.now()-K});if(U instanceof D2)return{query:G,result:U.output,error:U.message,success:!1};let F=L2(U);return{query:G,result:"",error:`Command failed: ${F}`,success:!1}}}))}function VG($,Z={}){let Q=Z.fileReadTimeoutMs??1e4;return P$({name:"read_files",description:`Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided on the same file entry as its path. When you already know multiple files you need, read them together in one call, and call this tool in the same response as other independent tool calls. Each read returns at most ${N6} lines / ~${Math.round(g9/1024)}k characters; longer files report their total line count, page through them with start_line/end_line on that file's entry. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. `,inputSchema:Z$(P9),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(X,J)=>{let W=f$(EK,kK(X)),j;if(typeof W==="string")j=[{path:W}];else if(Array.isArray(W))j=W.map((Y)=>typeof Y==="string"?{path:Y}:Y);else if("files"in W)j=(Array.isArray(W.files)?W.files:[W.files]).map((V)=>typeof V==="string"?{path:V}:V);else if("file_paths"in W)j=(Array.isArray(W.file_paths)?W.file_paths:[W.file_paths]).map((V)=>({path:V}));else if("paths"in W)j=(Array.isArray(W.paths)?W.paths:[W.paths]).map((V)=>typeof V==="string"?{path:V}:V);else j=[W];return Promise.all(j.map(async(Y)=>{let V=bK(Y);if(V)return{query:h9(Y),result:"",error:`Invalid file range: ${V}`,success:!1};try{let B=await e1($(Y,J),Q,`File read timed out after ${Q}ms`);return{query:h9(Y),result:B,success:!0}}catch(B){let K=L2(B);return{query:h9(Y),result:"",error:`Error reading file: ${K}`,success:!1}}}))}})}function BG($,Z={}){let Q=Z.searchTimeoutMs??30000,X=Z.cwd??process.cwd();return P$({name:"search_codebase",description:`Perform regex pattern searches across the codebase. Supports multiple parallel searches. When several search patterns could be useful and do not depend on each other, run them together in one call, and call this tool in the same response as other independent tool calls. Use for finding code patterns, function definitions, class names, imports, etc. Output beyond ~${Math.round(q6/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:Z$(f9),timeoutMs:Q*2,retryable:!0,maxRetries:1,execute:async(J,W)=>{let j=f$(MK,J),Y=Array.isArray(j)?j:typeof j==="object"?Array.isArray(j.queries)?j.queries:[j.queries]:[j];return Promise.all(Y.map(async(V)=>{try{let B=await e1($(V,X,W),Q,`Search timed out after ${Q}ms`);return{query:V,result:B,success:!0}}catch(B){let K=L2(B);return{query:V,result:"",error:`Search failed: ${K}`,success:!1}}}))}})}var YG="Use for listing files, checking git status, running builds, executing tests, etc. Commands must be non-interactive. Commands that require follow-up input like pagers should be skipped or used with supported flags/env (e.g. git --no-pager, --non-interactive) to bypass the interaction steps. ";function IR($,Z){if($==="powershell"||$==="cmd"){let X=$==="powershell"?"PowerShell":"cmd.exe",J=$==="powershell"?"';'":"'&&'";return"Run non-interactive shell commands from the root of the workspace in Windows environment. "+YG+`Output beyond ~${Math.round($$/1000)}k characters is middle-truncated (start and end preserved); filter output when you need specific sections. Commands run through ${X}; quote paths and arguments for ${X} and use ${J} to sequence commands. Include multiple commands in the same call when they are independent and safe to run concurrently. When independent reads, searches, or edits are also needed, call those tools in the same response.`}let Q=$==="wsl"?"Commands run through bash in WSL (wsl.exe); the Windows working directory is mounted under /mnt/<drive>. ":Z?"Commands run through a POSIX (bash-compatible) shell on Windows. ":"";return"Run non-interactive shell commands from the root of the workspace. "+YG+Q+`Commands should be properly shell-escaped and targeted to avoid error or timeout. Include multiple commands in the same call when they are independent complete shell commands and safe to run concurrently; multiline scripts and heredocs must be a single command string. When independent reads, searches, or edits are also needed, call those tools in the same response. Output beyond ~${Math.round($$/1000)}k characters is middle-truncated (start and end preserved); pipe through grep/head/tail when you need specific sections of large output. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.`}function VX($,Z={}){let Q=Z.bashTimeoutMs??30000,X=Z.bashTimeoutMs===void 0?"default_setting":"configured_setting",J=Z.cwd??process.cwd(),W=process.platform==="win32",j=Z.shell,Y=typeof j==="function"?j:()=>j??fR(process.platform),V=()=>IR(wR(Y()),W),B=P$({name:"run_commands",description:V(),inputSchema:Z$(w9),timeoutMs:Q*2,retryable:!1,maxRetries:0,execute:async(K,G)=>{let H=xR(v9(K));return yR(H,{executor:$,cwd:J,context:G,timeoutMs:Q,timeoutSource:X,telemetry:Z.telemetry})}});if(typeof j==="function")Object.defineProperty(B,"description",{get:V,enumerable:!0});return B}function KG($,Z={}){let Q=Z.webFetchTimeoutMs??30000;return P$({name:"fetch_web_content",description:"Fetch content from URLs and analyze them using the provided prompts. Use for retrieving documentation, API references, or any web content. Each request includes a URL and a prompt describing what information to extract. Fetch independent URLs together in one call, and call this tool in the same response as other independent tool calls.",inputSchema:Z$(S9),timeoutMs:Q*2,retryable:!0,maxRetries:2,execute:async(X,J)=>{let W=f$(S9,X);return Promise.all(W.requests.map(async(j)=>{try{let Y=await e1($(j.url,j.prompt,J),Q,`Web fetch timed out after ${Q}ms`);return{query:j.url,result:Y,success:!0}}catch(Y){let V=L2(Y);return{query:j.url,result:"",error:`Error fetching web content: ${V}`,success:!1}}}))}})}var hR=`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:
78
78
 
79
79
  *** Begin Patch
@@ -187,7 +187,7 @@ Searched ${L} files.`;let z=[`Found ${F.length} result${F.length===1?"":"s"} for
187
187
 
188
188
  ...[assistant text truncated: omitted ${$} chars due to repeated tool-call markup]...
189
189
 
190
- `;function oG($=process.env){return{maxToolResultChars:nG($[DX.maxToolResultChars]),maxTotalTextBytes:nG($[DX.maxTotalTextBytes]),minOutdatedRewriteBytes:MP($[DX.minOutdatedRewriteBytes])}}class zX{indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor($={}){this.maxToolResultChars=l8($.maxToolResultChars,FP),this.maxFileContentChars=l8($.maxFileContentChars,LP),this.maxTotalTextBytes=l8($.maxTotalTextBytes,DP),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=l8($.maxAssistantTextChars,_P),this.maxAssistantToolMarkupChars=l8($.maxAssistantToolMarkupChars,zP),this.minOutdatedRewriteBytes=RP($.minOutdatedRewriteBytes,OP)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Q=this.addMissingToolResults($).map((J)=>{if(!Array.isArray(J.content)){if(J.role==="user"&&typeof J.content==="string"){let Y=dG(J.content);if(Y!==J.content)return{...J,content:Y}}if(J.role==="assistant"&&typeof J.content==="string"){let Y=this.truncateAssistantText(J.content);if(Y!==J.content)return{...J,content:Y}}return J}let W=!1,j=J.content.map((Y)=>{let V=this.transformBlock(Y,J.role);if(V!==Y)W=!0;return V});return W?{...J,content:j}:J}),X=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(X)}transformBlock($,Z){if(Z==="user"&&$.type==="text"&&typeof $.text==="string"){let J=dG($.text);if(J!==$.text)return{...$,text:J};return $}if(Z==="assistant"&&$.type==="text"&&typeof $.text==="string"){let J=this.truncateAssistantText($.text);return J===$.text?$:{...$,text:J}}if($.type==="file"){let J=R6($.content,this.maxFileContentChars,iG);return J===$.content?$:{...$,content:J}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),X=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let J=this.committedOutdatedRewrites.get($.tool_use_id);if(J&&J.size>0){let j=this.getReadLocators($).filter((Y)=>J.has(this.toReadLocatorKey(Y))&&this.isOutdatedReadLocator(Y,$.tool_use_id));if(j.length>0)X=this.replaceOutdatedReadContent(X,j)}}return X=this.truncateToolResultContent(X),X===$.content?$:{...$,content:X}}reindex($){let Z=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!Z)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let X=$[Q];if(!Array.isArray(X.content))continue;for(let J=0;J<X.content.length;J++){let W=X.content[J];if(W.type==="file")this.latestFullContentOwnerByPathCache.set(W.path,`file:${Q}:${J}`);else if(W.type==="tool_use"){let j=W.name.toLowerCase();if(this.toolNameByIdCache.set(W.id,j),this.isReadTool(j)){let Y=this.extractLocatorsFromReadToolInput(W.input);if(Y.length>0)this.readLocatorsByToolUseIdCache.set(W.id,Y)}}else if(W.type==="tool_result"){let j=this.resolveToolName(W);if(!this.isReadTool(j)||W.is_error===!0)continue;let Y=this.getReadLocators(W);for(let V of Y)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),W.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,W.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let Z=new Map,Q=new Set,X=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let W of J.content){if(W.type!=="tool_result"||W.is_error===!0)continue;let j=this.resolveToolName(W);if(!this.isReadTool(j))continue;Q.add(W.tool_use_id);let Y=this.committedOutdatedRewrites.get(W.tool_use_id),V=new Set,B=new Set;for(let G of this.getReadLocators(W)){let H=this.toReadLocatorKey(G);if(!this.isOutdatedReadLocator(G,W.tool_use_id))continue;if(B.add(H),!Y?.has(H))V.add(H)}if(Y){for(let G of Y)if(!B.has(G))Y.delete(G);if(Y.size===0)this.committedOutdatedRewrites.delete(W.tool_use_id)}if(V.size===0)continue;let K=Z.get(W.tool_use_id);if(!K)K=new Set,Z.set(W.tool_use_id,K);for(let G of V)K.add(G);X+=this.estimateOutdatedReclaimBytes(W.content,V)}}for(let J of this.committedOutdatedRewrites.keys())if(!Q.has(J))this.committedOutdatedRewrites.delete(J);if(Z.size===0||X<this.minOutdatedRewriteBytes)return;for(let[J,W]of Z){let j=this.committedOutdatedRewrites.get(J);if(!j)j=new Set,this.committedOutdatedRewrites.set(J,j);for(let Y of W)j.add(Y)}}estimateOutdatedReclaimBytes($,Z){let Q=this.extractReadLocatorsFromToolResultContent($),X=Q.length>0&&Q.every((V)=>Z.has(this.toReadLocatorKey(V))),J=(V)=>{let B;try{B=JSON.parse(V)}catch{return X||Q.length===0?L0(this.truncateMiddle(V)):0}let K=Array.isArray(B)?B:[B],G=0;for(let H of K){let U=this.extractLocatorFromResultEntry(H);if(U&&Z.has(this.toReadLocatorKey(U)))G+=this.providerBoundEntryBytes(H)}return G};if(typeof $==="string")return J($);let W=new Set(Z),j=0;for(let V of $)if(V.type==="text")j+=this.countOutdatedImageEntries(V.text,W);let Y=0;for(let V of $)if(V.type==="text")Y+=J(V.text);else if(V.type==="image"){if(j>0)j-=1,Y+=L0(V.data)}else if(b$(V)){let B=this.extractLocatorFromResultEntry(V);if(B&&Z.has(this.toReadLocatorKey(B)))Y+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(Z.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))Y+=L0(this.truncateMiddle(V.content))}return Y}providerBoundEntryBytes($){let Z=this.truncateNestedStrings($);return L0(JSON.stringify(Z))}addMissingToolResults($){let Z=this.collectToolResultIds($),Q=[],X=new Map,J=!1,W=()=>{if(X.size===0)return;j(this.createMissingToolResultMessage(X)),X.clear(),J=!0},j=(Y)=>{let V=Q.at(-1);if(this.shouldMergeUserAfterToolResults(V,Y)){Q[Q.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(Y.content)]},J=!0;return}Q.push(Y)};for(let Y of $){if(this.isToolResultOnlyMessage(Y)){if(j(this.appendMissingToolResults(Y,X)),X.size>0)X.clear(),J=!0;continue}if(Array.isArray(Y.content)){let V=Y.content.filter((K)=>K.type==="tool_result"),B=Y.content.filter((K)=>K.type!=="tool_result");if(V.length>0){let K=this.appendMissingToolResults({...Y,role:"user",content:V},X);if(j(K),X.size>0)X.clear();J=!0}if(B.length>0||V.length===0){if(V.length===0)W();let K=V.length>0?{...Y,content:B}:Y;if(j(K),K.role==="assistant")this.trackMissingToolCalls(K,Z,X)}continue}W(),j(Y)}return W(),J?Q:$}appendMissingToolResults($,Z){if(Z.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(Z)]}}shouldMergeUserAfterToolResults($,Z){return $?.role==="user"&&Z.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(Z.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let X of Q.content)if(X.type==="tool_result")Z.add(X.tool_use_id)}return Z}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}trackMissingToolCalls($,Z,Q){if(!Array.isArray($.content))return;for(let X of $.content){if(X.type!=="tool_use"||Z.has(X.id))continue;Q.set(X.id,X.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([Z,Q])=>({type:"tool_result",tool_use_id:Z,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${pG} Tool: ${$}.`:pG}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let Z=$,Q=this.readResultLocatorCache.get(Z);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(Z,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let Z=$,Q=[],X=this.extractLocatorFromReadRequest(Z);if(X)Q.push(X);if(Array.isArray(Z.files))for(let J of Z.files){let W=this.extractLocatorFromReadRequest(J);if(W)Q.push(W)}if(Array.isArray(Z.file_paths)){for(let J of Z.file_paths)if(typeof J==="string"&&J.length>0)Q.push({path:J,startLine:null,endLine:null})}return this.dedupeReadLocators(Q)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);let Z=[];for(let Q of $){if(Q.type==="text"){Z.push(...this.tryParseReadLocators(Q.text));continue}if(b$(Q)){let X=this.extractLocatorFromResultEntry(Q);if(X)Z.push(X)}}return this.dedupeReadLocators(Z)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let X of $){let J=this.extractLocatorFromResultEntry(X);if(J)Q.push(J)}return this.dedupeReadLocators(Q)}let Z=this.extractLocatorFromResultEntry($);return Z?[Z]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(Q)return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)};if(typeof Z.query==="string"&&Z.query.length>0)return this.parseReadQuery(Z.query);return}extractPath($){let Z=[$.path,$.file_path,$.filePath];for(let Q of Z)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let Z=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!Z)return{path:$,startLine:null,endLine:null};return{path:Z[1],startLine:Number(Z[2]),endLine:Z[3]==="EOF"?null:Number(Z[3])}}dedupeReadLocators($){let Z=new Map;for(let Q of $)Z.set(this.toReadLocatorKey(Q),Q);return Array.from(Z.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,Z){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==Z)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==Z}replaceOutdatedReadContent($,Z){let Q=new Set(Z.map((W)=>this.toReadLocatorKey(W))),X=new Set(Z.map((W)=>W.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??N2;let J=0;for(let W of $)if(W.type==="text")J+=this.countOutdatedImageEntries(W.text,Q);return $.map((W)=>{if(W.type==="file"){if(!X.has(W.path))return W;return{...W,content:N2}}if(W.type==="image"){if(J===0)return W;return J-=1,{type:"text",text:N2}}if(b$(W))return this.replaceOutdatedReadEntry(W,Q);if(W.type!=="text")return W;let j=this.replaceOutdatedInString(W.text,Q);if(j===null)return{...W,text:N2};return j===W.text?W:{...W,text:j}})}countOutdatedImageEntries($,Z){let Q;try{Q=JSON.parse($)}catch{return 0}let X=Array.isArray(Q)?Q:[Q],J=0;for(let W of X){if(!W||typeof W!=="object")continue;let j=W,Y=this.extractLocatorFromResultEntry(j);if(!Y)continue;if(!Z.has(this.toReadLocatorKey(Y)))continue;if(j.result==="Successfully read image"||j.content==="Successfully read image")J+=1}return J}replaceOutdatedInString($,Z){let Q;try{Q=JSON.parse($)}catch{return null}let X=Array.isArray(Q)?Q.map((J)=>this.replaceOutdatedReadEntry(J,Z)):this.replaceOutdatedReadEntry(Q,Z);return JSON.stringify(X)}replaceOutdatedReadEntry($,Z){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!Z.has(this.toReadLocatorKey(Q)))return $;let X={...$};if(typeof X.result==="string")X.result=N2;else if(typeof X.content==="string")X.content=N2;else X.result=N2;return X}isReadTool($){return!!$&&qP.has($)}resolveToolName($){let Z=this.toolNameByIdCache.get($.tool_use_id);if(Z!==void 0)return Z;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((Z)=>{if(Z.type==="file"){let Q=this.truncateMiddle(Z.content);return Q===Z.content?Z:{...Z,content:Q}}if(Z.type==="text"){let Q=this.truncateMiddle(Z.text);return Q===Z.text?Z:{...Z,text:Q}}if(b$(Z))return this.truncateNestedStrings(Z);return Z})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let Z=!1,Q=$.map((X)=>{let J=this.truncateNestedStrings(X);if(J!==X)Z=!0;return J});return Z?Q:$}if($!==null&&typeof $==="object"){if(OX($))return $;let Z=!1,Q={};for(let[X,J]of Object.entries($)){let W=this.truncateNestedStrings(J);if(W!==J)Z=!0;Q[X]=W}return Z?Q:$}return $}truncateMiddle($){return R6($,this.maxToolResultChars,iG)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return R6($,this.maxAssistantToolMarkupChars,TP);return R6($,this.maxAssistantTextChars,AP)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let Z=0;for(let Q of $.matchAll(EP))if(Z+=1,Z>=NP)return!0;return!1}truncateToTotalTextBudget($){let Z=this.countMessageTextBytes($);if(Z<=this.maxTotalTextBytes)return $;let Q=$.map((J)=>{if(!Array.isArray(J.content))return{...J};return{...J,content:J.content.map((W)=>PP(W))}}),X=this.collectTruncationCandidates(Q);for(let J of X){if(Z<=this.maxTotalTextBytes)break;let W=J.byteLength;if(W<=J.minBytes)continue;let j=Z-this.maxTotalTextBytes,Y=Math.max(J.minBytes,W-j),V=CP(J.get(),Y,J.makeMarker);J.set(V),Z-=W-L0(V)}return Q}countMessageTextBytes($){let Z=0;for(let Q of $){if(typeof Q.content==="string"){Z+=L0(Q.content);continue}for(let X of Q.content)if(X.type==="text")Z+=L0(X.text);else if(X.type==="thinking")Z+=L0(X.thinking);else if(X.type==="file")Z+=L0(X.content);else if(X.type==="tool_use")Z+=$7(X.input);else if(X.type==="tool_result"){if(typeof X.content==="string")Z+=L0(X.content);else for(let J of X.content)if(J.type==="text")Z+=L0(J.text);else if(J.type==="file")Z+=L0(J.content);else if(b$(J))Z+=$7(J)}}return Z}collectTruncationCandidates($){let Z=[],Q=[];for(let X of $){if(X.role==="assistant"&&typeof X.content==="string"){Z.push({byteLength:L0(X.content),minBytes:lG,makeMarker:rG,get:()=>X.content,set:(J)=>{X.content=J}});continue}if(!Array.isArray(X.content))continue;for(let J of X.content){if(J.type==="tool_use"){Z7(J.input,Q);continue}if(X.role==="assistant"&&J.type==="text"){Z.push({byteLength:L0(J.text),minBytes:lG,makeMarker:rG,get:()=>J.text,set:(W)=>{J.text=W}});continue}if(J.type!=="tool_result")continue;if(typeof J.content==="string"){Z.push({byteLength:L0(J.content),minBytes:p8,makeMarker:i8,get:()=>J.content,set:(W)=>{J.content=W}});continue}for(let W of J.content)if(W.type==="text")Z.push({byteLength:L0(W.text),minBytes:p8,makeMarker:i8,get:()=>W.text,set:(j)=>{W.text=j}});else if(W.type==="file")Z.push({byteLength:L0(W.content),minBytes:p8,makeMarker:i8,get:()=>W.content,set:(j)=>{W.content=j}});else if(b$(W))Z7(W,Z)}}return Z.sort((X,J)=>J.byteLength-X.byteLength),Q.sort((X,J)=>J.byteLength-X.byteLength),[...Z,...Q]}applyMediaBudget($){let Z=this.resolveMediaBudget();if(Z.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&Z.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&Z.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=GP(),X=!1,J=$.map((W)=>{if(!Array.isArray(W.content))return W;let j=!1,Y=W.content.map((V)=>{let B=this.applyMediaBudgetToBlock(V,Z,Q);if(B!==V)j=!0;return B});if(!j)return W;return X=!0,{...W,content:Y}});return X?J:$}resolveMediaBudget(){return HP(this.mediaBudget)}applyMediaBudgetToBlock($,Z,Q){if(_X($))return this.limitImageContent($,Z,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let X=!1,J=$.content.map((W)=>{let j=this.applyMediaBudgetToToolResultEntry(W,Z,Q);if(j!==W)X=!0;return j});return X?{...$,content:J}:$}applyMediaBudgetToToolResultEntry($,Z,Q){if(_X($))return this.limitImageContent($,Z,Q);if(b$($))return this.limitNestedMedia($,Z,Q);return $}limitNestedMedia($,Z,Q){if(_X($)){let X=this.limitImageContent($,Z,Q);return X.type==="text"?X.text:X}if(Array.isArray($)){let X=!1,J=$.map((W)=>{let j=this.limitNestedMedia(W,Z,Q);if(j!==W)X=!0;return j});return X?J:$}if($!==null&&typeof $==="object"){let X=!1,J={};for(let[W,j]of Object.entries($)){let Y=this.limitNestedMedia(j,Z,Q);if(Y!==j)X=!0;J[W]=Y}return X?J:$}return $}limitImageContent($,Z,Q){if(!sG($))return{type:"text",text:uG};let X=UP($.mediaType,$.data,{maxImageEncodedBytes:Z.maxImageEncodedBytes,maxImageDecodedBytes:Z.maxImageDecodedBytes,maxTotalMediaBytes:Z.maxTotalMediaBytes},Q);if(!X.ok)return{type:"text",text:uG};return{...$,data:X.base64,mediaType:X.mediaType}}}var aG=String.raw`[\|\uFF5C]`,EP=new RegExp(String.raw`<\s*(?:${aG}\s*)?DSML\s*(?:${aG}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function L0($){return Buffer.byteLength($,"utf8")}function nG($){if($===void 0)return;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>0?Z:void 0}function MP($){if($===void 0)return;let Z=$.trim().toLowerCase();if(Z==="infinity"||Z==="disable")return Number.POSITIVE_INFINITY;let Q=Number.parseInt($,10);return Number.isFinite(Q)&&Q>=0?Q:void 0}function l8($,Z){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):Z}function RP($,Z){if(typeof $!=="number"||Number.isNaN($)||$<0)return Z;return Number.isFinite($)?Math.floor($):$}function R6($,Z,Q){if($.length<=Z)return $;let X=Q($.length-Z),J=Math.max(0,Math.floor((Z-X.length)/2)),W=Math.max(0,$.length-J*2),j=Q(W),Y=Math.max(0,Math.floor((Z-j.length)/2)),V=$.slice(0,Y),B=Y>0?$.slice(-Y):"";return`${V}${j}${B}`}function CP($,Z,Q){if(L0($)<=Z)return $;let X=0,J=$.length,W=R6($,0,Q);while(X<=J){let j=X+J>>>1,Y=R6($,j,Q);if(L0(Y)<=Z)W=Y,X=j+1;else J=j-1}return W}function PP($){if($.type==="tool_use")return{...$,input:Q7($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((Z)=>b$(Z)?Q7(Z):{...Z})}}function b$($){if($===null||typeof $!=="object")return!1;let Z=$.type;return Z!=="text"&&Z!=="image"&&Z!=="file"}function _X($){return $!==null&&typeof $==="object"&&$.type==="image"}function sG($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function OX($){return sG($)}function $7($){if(typeof $==="string")return L0($);if(Array.isArray($)){let Z=0;for(let Q of $)Z+=$7(Q);return Z}if($!==null&&typeof $==="object"){if(OX($))return 0;let Z=0;for(let Q of Object.values($))Z+=$7(Q);return Z}return 0}function Z7($,Z){if(Array.isArray($)){$.forEach((Q,X)=>{if(typeof Q==="string")Z.push({byteLength:L0(Q),minBytes:p8,makeMarker:i8,get:()=>$[X],set:(J)=>{$[X]=J}});else Z7(Q,Z)});return}if($!==null&&typeof $==="object"){if(OX($))return;let Q=$;for(let X of Object.keys(Q)){let J=Q[X];if(typeof J==="string")Z.push({byteLength:L0(J),minBytes:p8,makeMarker:i8,get:()=>Q[X],set:(W)=>{Q[X]=W}});else Z7(J,Z)}}}function Q7($){if(Array.isArray($))return $.map(Q7);if($!==null&&typeof $==="object"){let Z={};for(let[Q,X]of Object.entries($))Z[Q]=Q7(X);return Z}return $}function NX(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class qX{messages=[];conversationId=NX();sessionStarted=!1;constructor($){if(($?.length??0)>0)this.restore($??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage($){this.messages.push($)}appendMessages($){if($.length===0)return;this.messages.push(...$)}replaceMessages($){this.messages=[...$]}resetForRun(){this.messages=[],this.conversationId=NX(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=NX(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}var k$="0.0.78";var q2={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:k$,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json && bun run ./scripts/verify-runtime-build-id.ts",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:compaction":"bun --conditions=development run scripts/compact-session.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};function eG($){let{agentConfig:Z}=$,Q=fP(Z),X=wP(Z),J=$.hooks,W=SP(Z.maxParallelToolCalls);return{distinctId:Z.distinctId,clientName:Z.extensionContext?.client?.name,clientVersion:Z.extensionContext?.client?.version,clineCoreVersion:k$,sessionId:$.sessionId??Z.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??Z.systemPrompt,messageModelInfo:X,model:$.model,modelOptions:Q,modelTools:Z.modelTools,tools:$.tools,hooks:J,prepareTurn:$.prepareTurn,consumePendingUserMessage:Z.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??Z.logger,telemetry:$.telemetry??Z.telemetry,initialMessages:$.initialMessages,completionPolicy:$.completionPolicy===null?void 0:$.completionPolicy??Z.completionPolicy,maxIterations:Z.maxIterations,toolExecution:W,toolPolicies:Z.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:Z.requestToolApproval}}function fP($){let Z={};if($.thinking!==void 0)Z.thinking=$.thinking;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)Z.maxTokensPerTurn=$.maxTokensPerTurn;if($.temperature!==void 0)Z.temperature=$.temperature;if($.apiTimeoutMs!==void 0)Z.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(Z).length>0?Z:void 0}function wP($){let Z=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:Z}}function SP($){if($===void 0)return;return $>=2?"parallel":"sequential"}function bP($){let Z={};if($.providerId!==void 0)Z.providerId=$.providerId;if($.modelId!==void 0)Z.modelId=$.modelId;if($.apiKey!==void 0)Z.apiKey=$.apiKey;if($.baseUrl!==void 0)Z.baseUrl=$.baseUrl;if($.headers!==void 0)Z.headers=$.headers;if($.providerConfig!==void 0)Z.providerConfig=$.providerConfig;if($.thinking===!1)return Z.thinking=!1,Z.reasoningEffort=null,Z.thinkingBudgetTokens=null,Z;if($.thinking===!0)Z.thinking=!0,Z.reasoningEffort=$.reasoningEffort??null,Z.thinkingBudgetTokens=null;else if($.reasoningEffort!==void 0)Z.thinking=!0,Z.reasoningEffort=$.reasoningEffort;if(typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0,Z.thinkingBudgetTokens=Math.trunc($.thinkingBudgetTokens);return Z}function C6($){let Z={...$},Q=Object.hasOwn($,"thinking"),X=Object.hasOwn($,"thinkingBudgetTokens");if($.thinking===!1||$.thinking===null)return Z.reasoningEffort=void 0,Z.thinkingBudgetTokens=void 0,Z;if(!Q&&X&&typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0;return Z}function kP(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function xP($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function AX($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(AX);let Z={};for(let Q of Object.keys($).sort())Z[Q]=AX($[Q]);return Z}function yP($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(AX($))}catch{return String($)}}function IP($,Z,Q,X){if(Z===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=Z,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===X.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=X.hardThreshold}}var $H={softThreshold:3,hardThreshold:5};class TX{config;state=kP();constructor($){this.config={softThreshold:$?.softThreshold??$H.softThreshold,hardThreshold:$?.hardThreshold??$H.hardThreshold}}inspect($){let Z=yP($.input),Q=IP(this.state,$.name,Z,this.config);if(Q.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Q.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){xP(this.state)}}class EX{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let Z=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&Z?Z:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let X=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(X),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Q,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!Z||Q<Z)return{action:"continue"};let J={iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details};this.options.onLimitTelemetry?.(J);let W=await vP(J,this.options.onLimitReached);if(W.action==="continue"){let j=W.guidance?.trim();if(j)this.options.appendRecoveryNotice(j,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:j}}return{action:"stop",reason:W.reason?.trim()||void 0,message:hP({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details,stopReason:W.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function hP($){let Z=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)Z.push(`Error: ${Q}`);let X=$.stopReason?.trim();if(X)Z.push(`Decision: ${X}`);return Z.push("Session state was preserved. Send a new prompt to resume from the latest state."),Z.join(" ")}async function vP($,Z){if(!Z)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await Z($)}catch(Q){return{action:"stop",reason:Q instanceof Error?Q.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function gP($){switch($){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return $;default:return}}function mP($){let Z=$.content.filter((Q)=>Q.type==="text");if(Z.length===0)return;return Z.map((Q)=>Q.text).join("")}function cP($){let Z=$.content.filter((Q)=>Q.type==="reasoning");if(Z.length===0)return;return{reasoning:Z.map((Q)=>Q.text).join(""),redacted:Z.some((Q)=>Q.redacted===!0)}}function uP($){return $.content.find((Z)=>Z.type==="tool-result")}function dP($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function lP($){if(!$||$.isError!==!0)return;if(typeof $.output==="string")return $.output;if($.output instanceof Error)return $.output.message;try{return JSON.stringify($.output)}catch{return String($.output)}}class MX{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-media":return[{type:"content_end",contentType:"media",media:$.media}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:gP($.metadata?.reason),metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,errorClass:$.errorClass,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let Z=[],Q=mP($);if(Q!==void 0)Z.push({type:"content_end",contentType:"text",text:Q});let X=cP($);if(X!==void 0)Z.push({type:"content_end",contentType:"reasoning",reasoning:X.reasoning});return Z}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input,execution:$.toolCall.execution}]}translateToolFinished($){let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=Z===void 0?void 0:Date.now()-Z;this.toolStartedAt.delete($.toolCall.toolCallId);let X=uP($.message),J=X?.output,W=lP(X);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:J,error:W,durationMs:Q,execution:$.toolCall.execution}]}translateUsage($){let Z=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,X=$.cacheReadTokens-this.lastUsage.cacheReadTokens,J=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,W=this.lastUsage.totalCost??0,Y=($.totalCost??0)-W;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,Z),outputTokens:Math.max(0,Q),cacheReadTokens:X===0?void 0:Math.max(0,X),cacheWriteTokens:J===0?void 0:Math.max(0,J),cost:Y===0?void 0:Y,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let Z={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:dP($.status),text:$.outputText,iterations:$.iterations,usage:Z}]}}var Zf="session_run_in_progress";class WH extends Error{agentId;code=Zf;constructor($){super(`SessionRuntime.shutdown called while a run is in progress${$?` (agentId=${$})`:""}`);this.agentId=$;this.name="SessionRunInProgressError"}}function Qf($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function Xf($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function Jf($,Z){let Q=$.trim(),X=Z.map((J)=>J.trim()).filter(Boolean).join(`
190
+ `;function oG($=process.env){return{maxToolResultChars:nG($[DX.maxToolResultChars]),maxTotalTextBytes:nG($[DX.maxTotalTextBytes]),minOutdatedRewriteBytes:MP($[DX.minOutdatedRewriteBytes])}}class zX{indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor($={}){this.maxToolResultChars=l8($.maxToolResultChars,FP),this.maxFileContentChars=l8($.maxFileContentChars,LP),this.maxTotalTextBytes=l8($.maxTotalTextBytes,DP),this.mediaBudget=$.mediaBudget??{},this.maxAssistantTextChars=l8($.maxAssistantTextChars,_P),this.maxAssistantToolMarkupChars=l8($.maxAssistantToolMarkupChars,zP),this.minOutdatedRewriteBytes=RP($.minOutdatedRewriteBytes,OP)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi($){this.reindex($),this.commitOutdatedRewrites($);let Q=this.addMissingToolResults($).map((J)=>{if(!Array.isArray(J.content)){if(J.role==="user"&&typeof J.content==="string"){let Y=dG(J.content);if(Y!==J.content)return{...J,content:Y}}if(J.role==="assistant"&&typeof J.content==="string"){let Y=this.truncateAssistantText(J.content);if(Y!==J.content)return{...J,content:Y}}return J}let W=!1,j=J.content.map((Y)=>{let V=this.transformBlock(Y,J.role);if(V!==Y)W=!0;return V});return W?{...J,content:j}:J}),X=this.applyMediaBudget(Q);return this.truncateToTotalTextBudget(X)}transformBlock($,Z){if(Z==="user"&&$.type==="text"&&typeof $.text==="string"){let J=dG($.text);if(J!==$.text)return{...$,text:J};return $}if(Z==="assistant"&&$.type==="text"&&typeof $.text==="string"){let J=this.truncateAssistantText($.text);return J===$.text?$:{...$,text:J}}if($.type==="file"){let J=R6($.content,this.maxFileContentChars,iG);return J===$.content?$:{...$,content:J}}if($.type!=="tool_result")return $;let Q=this.resolveToolName($),X=$.content;if(this.isReadTool(Q)&&$.is_error!==!0){let J=this.committedOutdatedRewrites.get($.tool_use_id);if(J&&J.size>0){let j=this.getReadLocators($).filter((Y)=>J.has(this.toReadLocatorKey(Y))&&this.isOutdatedReadLocator(Y,$.tool_use_id));if(j.length>0)X=this.replaceOutdatedReadContent(X,j)}}return X=this.truncateToolResultContent(X),X===$.content?$:{...$,content:X}}reindex($){let Z=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!Z)this.resetIndexes();for(let Q=this.indexedMessageCount;Q<$.length;Q++){let X=$[Q];if(!Array.isArray(X.content))continue;for(let J=0;J<X.content.length;J++){let W=X.content[J];if(W.type==="file")this.latestFullContentOwnerByPathCache.set(W.path,`file:${Q}:${J}`);else if(W.type==="tool_use"){let j=W.name.toLowerCase();if(this.toolNameByIdCache.set(W.id,j),this.isReadTool(j)){let Y=this.extractLocatorsFromReadToolInput(W.input);if(Y.length>0)this.readLocatorsByToolUseIdCache.set(W.id,Y)}}else if(W.type==="tool_result"){let j=this.resolveToolName(W);if(!this.isReadTool(j)||W.is_error===!0)continue;let Y=this.getReadLocators(W);for(let V of Y)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(V),W.tool_use_id),this.isFullFileRead(V))this.latestFullContentOwnerByPathCache.set(V.path,W.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}commitOutdatedRewrites($){let Z=new Map,Q=new Set,X=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let W of J.content){if(W.type!=="tool_result"||W.is_error===!0)continue;let j=this.resolveToolName(W);if(!this.isReadTool(j))continue;Q.add(W.tool_use_id);let Y=this.committedOutdatedRewrites.get(W.tool_use_id),V=new Set,B=new Set;for(let G of this.getReadLocators(W)){let H=this.toReadLocatorKey(G);if(!this.isOutdatedReadLocator(G,W.tool_use_id))continue;if(B.add(H),!Y?.has(H))V.add(H)}if(Y){for(let G of Y)if(!B.has(G))Y.delete(G);if(Y.size===0)this.committedOutdatedRewrites.delete(W.tool_use_id)}if(V.size===0)continue;let K=Z.get(W.tool_use_id);if(!K)K=new Set,Z.set(W.tool_use_id,K);for(let G of V)K.add(G);X+=this.estimateOutdatedReclaimBytes(W.content,V)}}for(let J of this.committedOutdatedRewrites.keys())if(!Q.has(J))this.committedOutdatedRewrites.delete(J);if(Z.size===0||X<this.minOutdatedRewriteBytes)return;for(let[J,W]of Z){let j=this.committedOutdatedRewrites.get(J);if(!j)j=new Set,this.committedOutdatedRewrites.set(J,j);for(let Y of W)j.add(Y)}}estimateOutdatedReclaimBytes($,Z){let Q=this.extractReadLocatorsFromToolResultContent($),X=Q.length>0&&Q.every((V)=>Z.has(this.toReadLocatorKey(V))),J=(V)=>{let B;try{B=JSON.parse(V)}catch{return X||Q.length===0?L0(this.truncateMiddle(V)):0}let K=Array.isArray(B)?B:[B],G=0;for(let H of K){let U=this.extractLocatorFromResultEntry(H);if(U&&Z.has(this.toReadLocatorKey(U)))G+=this.providerBoundEntryBytes(H)}return G};if(typeof $==="string")return J($);let W=new Set(Z),j=0;for(let V of $)if(V.type==="text")j+=this.countOutdatedImageEntries(V.text,W);let Y=0;for(let V of $)if(V.type==="text")Y+=J(V.text);else if(V.type==="image"){if(j>0)j-=1,Y+=L0(V.data)}else if(b$(V)){let B=this.extractLocatorFromResultEntry(V);if(B&&Z.has(this.toReadLocatorKey(B)))Y+=this.providerBoundEntryBytes(V)}else if(V.type==="file"){if(Z.has(this.toReadLocatorKey({path:V.path,startLine:null,endLine:null})))Y+=L0(this.truncateMiddle(V.content))}return Y}providerBoundEntryBytes($){let Z=this.truncateNestedStrings($);return L0(JSON.stringify(Z))}addMissingToolResults($){let Z=this.collectToolResultIds($),Q=[],X=new Map,J=!1,W=()=>{if(X.size===0)return;j(this.createMissingToolResultMessage(X)),X.clear(),J=!0},j=(Y)=>{let V=Q.at(-1);if(this.shouldMergeUserAfterToolResults(V,Y)){Q[Q.length-1]={...V,content:[...V.content,...this.contentBlocksForUserMerge(Y.content)]},J=!0;return}Q.push(Y)};for(let Y of $){if(this.isToolResultOnlyMessage(Y)){if(j(this.appendMissingToolResults(Y,X)),X.size>0)X.clear(),J=!0;continue}if(Array.isArray(Y.content)){let V=Y.content.filter((K)=>K.type==="tool_result"),B=Y.content.filter((K)=>K.type!=="tool_result");if(V.length>0){let K=this.appendMissingToolResults({...Y,role:"user",content:V},X);if(j(K),X.size>0)X.clear();J=!0}if(B.length>0||V.length===0){if(V.length===0)W();let K=V.length>0?{...Y,content:B}:Y;if(j(K),K.role==="assistant")this.trackMissingToolCalls(K,Z,X)}continue}W(),j(Y)}return W(),J?Q:$}appendMissingToolResults($,Z){if(Z.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(Z)]}}shouldMergeUserAfterToolResults($,Z){return $?.role==="user"&&Z.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(Z.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let X of Q.content)if(X.type==="tool_result")Z.add(X.tool_use_id)}return Z}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}trackMissingToolCalls($,Z,Q){if(!Array.isArray($.content))return;for(let X of $.content){if(X.type!=="tool_use"||Z.has(X.id))continue;Q.set(X.id,X.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([Z,Q])=>({type:"tool_result",tool_use_id:Z,name:Q,content:[{type:"text",text:this.formatMissingToolResultText(Q)}],is_error:!0}))}formatMissingToolResultText($){return $?`${pG} Tool: ${$}.`:pG}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators($){let Z=$,Q=this.readResultLocatorCache.get(Z);if(Q===void 0)Q=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(Z,Q);if(Q.length>0)return Q;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let Z=$,Q=[],X=this.extractLocatorFromReadRequest(Z);if(X)Q.push(X);if(Array.isArray(Z.files))for(let J of Z.files){let W=this.extractLocatorFromReadRequest(J);if(W)Q.push(W)}if(Array.isArray(Z.file_paths)){for(let J of Z.file_paths)if(typeof J==="string"&&J.length>0)Q.push({path:J,startLine:null,endLine:null})}return this.dedupeReadLocators(Q)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);let Z=[];for(let Q of $){if(Q.type==="text"){Z.push(...this.tryParseReadLocators(Q.text));continue}if(b$(Q)){let X=this.extractLocatorFromResultEntry(Q);if(X)Z.push(X)}}return this.dedupeReadLocators(Z)}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let Q=[];for(let X of $){let J=this.extractLocatorFromResultEntry(X);if(J)Q.push(J)}return this.dedupeReadLocators(Q)}let Z=this.extractLocatorFromResultEntry($);return Z?[Z]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(!Q)return;return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let Z=$,Q=this.extractPath(Z);if(Q)return{path:Q,startLine:this.extractLineNumber(Z.start_line),endLine:this.extractLineNumber(Z.end_line)};if(typeof Z.query==="string"&&Z.query.length>0)return this.parseReadQuery(Z.query);return}extractPath($){let Z=[$.path,$.file_path,$.filePath];for(let Q of Z)if(typeof Q==="string"&&Q.length>0)return Q;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let Z=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!Z)return{path:$,startLine:null,endLine:null};return{path:Z[1],startLine:Number(Z[2]),endLine:Z[3]==="EOF"?null:Number(Z[3])}}dedupeReadLocators($){let Z=new Map;for(let Q of $)Z.set(this.toReadLocatorKey(Q),Q);return Array.from(Z.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,Z){let Q=this.latestFullContentOwnerByPathCache.get($.path);if(Q&&Q!==Z)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==Z}replaceOutdatedReadContent($,Z){let Q=new Set(Z.map((W)=>this.toReadLocatorKey(W))),X=new Set(Z.map((W)=>W.path));if(typeof $==="string")return this.replaceOutdatedInString($,Q)??N2;let J=0;for(let W of $)if(W.type==="text")J+=this.countOutdatedImageEntries(W.text,Q);return $.map((W)=>{if(W.type==="file"){if(!X.has(W.path))return W;return{...W,content:N2}}if(W.type==="image"){if(J===0)return W;return J-=1,{type:"text",text:N2}}if(b$(W))return this.replaceOutdatedReadEntry(W,Q);if(W.type!=="text")return W;let j=this.replaceOutdatedInString(W.text,Q);if(j===null)return{...W,text:N2};return j===W.text?W:{...W,text:j}})}countOutdatedImageEntries($,Z){let Q;try{Q=JSON.parse($)}catch{return 0}let X=Array.isArray(Q)?Q:[Q],J=0;for(let W of X){if(!W||typeof W!=="object")continue;let j=W,Y=this.extractLocatorFromResultEntry(j);if(!Y)continue;if(!Z.has(this.toReadLocatorKey(Y)))continue;if(j.result==="Successfully read image"||j.content==="Successfully read image")J+=1}return J}replaceOutdatedInString($,Z){let Q;try{Q=JSON.parse($)}catch{return null}let X=Array.isArray(Q)?Q.map((J)=>this.replaceOutdatedReadEntry(J,Z)):this.replaceOutdatedReadEntry(Q,Z);return JSON.stringify(X)}replaceOutdatedReadEntry($,Z){if(!$||typeof $!=="object")return $;let Q=this.extractLocatorFromResultEntry($);if(!Q||!Z.has(this.toReadLocatorKey(Q)))return $;let X={...$};if(typeof X.result==="string")X.result=N2;else if(typeof X.content==="string")X.content=N2;else X.result=N2;return X}isReadTool($){return!!$&&qP.has($)}resolveToolName($){let Z=this.toolNameByIdCache.get($.tool_use_id);if(Z!==void 0)return Z;return typeof $.name==="string"&&$.name.length>0?$.name.toLowerCase():void 0}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((Z)=>{if(Z.type==="file"){let Q=this.truncateMiddle(Z.content);return Q===Z.content?Z:{...Z,content:Q}}if(Z.type==="text"){let Q=this.truncateMiddle(Z.text);return Q===Z.text?Z:{...Z,text:Q}}if(b$(Z))return this.truncateNestedStrings(Z);return Z})}truncateNestedStrings($){if(typeof $==="string")return this.truncateMiddle($);if(Array.isArray($)){let Z=!1,Q=$.map((X)=>{let J=this.truncateNestedStrings(X);if(J!==X)Z=!0;return J});return Z?Q:$}if($!==null&&typeof $==="object"){if(OX($))return $;let Z=!1,Q={};for(let[X,J]of Object.entries($)){let W=this.truncateNestedStrings(J);if(W!==J)Z=!0;Q[X]=W}return Z?Q:$}return $}truncateMiddle($){return R6($,this.maxToolResultChars,iG)}truncateAssistantText($){if(this.hasRepeatedToolCallMarkup($))return R6($,this.maxAssistantToolMarkupChars,TP);return R6($,this.maxAssistantTextChars,AP)}hasRepeatedToolCallMarkup($){if($.length<=this.maxAssistantToolMarkupChars)return!1;let Z=0;for(let Q of $.matchAll(EP))if(Z+=1,Z>=NP)return!0;return!1}truncateToTotalTextBudget($){let Z=this.countMessageTextBytes($);if(Z<=this.maxTotalTextBytes)return $;let Q=$.map((J)=>{if(!Array.isArray(J.content))return{...J};return{...J,content:J.content.map((W)=>PP(W))}}),X=this.collectTruncationCandidates(Q);for(let J of X){if(Z<=this.maxTotalTextBytes)break;let W=J.byteLength;if(W<=J.minBytes)continue;let j=Z-this.maxTotalTextBytes,Y=Math.max(J.minBytes,W-j),V=CP(J.get(),Y,J.makeMarker);J.set(V),Z-=W-L0(V)}return Q}countMessageTextBytes($){let Z=0;for(let Q of $){if(typeof Q.content==="string"){Z+=L0(Q.content);continue}for(let X of Q.content)if(X.type==="text")Z+=L0(X.text);else if(X.type==="thinking")Z+=L0(X.thinking);else if(X.type==="file")Z+=L0(X.content);else if(X.type==="tool_use")Z+=$7(X.input);else if(X.type==="tool_result"){if(typeof X.content==="string")Z+=L0(X.content);else for(let J of X.content)if(J.type==="text")Z+=L0(J.text);else if(J.type==="file")Z+=L0(J.content);else if(b$(J))Z+=$7(J)}}return Z}collectTruncationCandidates($){let Z=[],Q=[];for(let X of $){if(X.role==="assistant"&&typeof X.content==="string"){Z.push({byteLength:L0(X.content),minBytes:lG,makeMarker:rG,get:()=>X.content,set:(J)=>{X.content=J}});continue}if(!Array.isArray(X.content))continue;for(let J of X.content){if(J.type==="tool_use"){Z7(J.input,Q);continue}if(X.role==="assistant"&&J.type==="text"){Z.push({byteLength:L0(J.text),minBytes:lG,makeMarker:rG,get:()=>J.text,set:(W)=>{J.text=W}});continue}if(J.type!=="tool_result")continue;if(typeof J.content==="string"){Z.push({byteLength:L0(J.content),minBytes:p8,makeMarker:i8,get:()=>J.content,set:(W)=>{J.content=W}});continue}for(let W of J.content)if(W.type==="text")Z.push({byteLength:L0(W.text),minBytes:p8,makeMarker:i8,get:()=>W.text,set:(j)=>{W.text=j}});else if(W.type==="file")Z.push({byteLength:L0(W.content),minBytes:p8,makeMarker:i8,get:()=>W.content,set:(j)=>{W.content=j}});else if(b$(W))Z7(W,Z)}}return Z.sort((X,J)=>J.byteLength-X.byteLength),Q.sort((X,J)=>J.byteLength-X.byteLength),[...Z,...Q]}applyMediaBudget($){let Z=this.resolveMediaBudget();if(Z.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&Z.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&Z.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return $;let Q=GP(),X=!1,J=$.map((W)=>{if(!Array.isArray(W.content))return W;let j=!1,Y=W.content.map((V)=>{let B=this.applyMediaBudgetToBlock(V,Z,Q);if(B!==V)j=!0;return B});if(!j)return W;return X=!0,{...W,content:Y}});return X?J:$}resolveMediaBudget(){return HP(this.mediaBudget)}applyMediaBudgetToBlock($,Z,Q){if(_X($))return this.limitImageContent($,Z,Q);if($.type!=="tool_result"||typeof $.content==="string")return $;let X=!1,J=$.content.map((W)=>{let j=this.applyMediaBudgetToToolResultEntry(W,Z,Q);if(j!==W)X=!0;return j});return X?{...$,content:J}:$}applyMediaBudgetToToolResultEntry($,Z,Q){if(_X($))return this.limitImageContent($,Z,Q);if(b$($))return this.limitNestedMedia($,Z,Q);return $}limitNestedMedia($,Z,Q){if(_X($)){let X=this.limitImageContent($,Z,Q);return X.type==="text"?X.text:X}if(Array.isArray($)){let X=!1,J=$.map((W)=>{let j=this.limitNestedMedia(W,Z,Q);if(j!==W)X=!0;return j});return X?J:$}if($!==null&&typeof $==="object"){let X=!1,J={};for(let[W,j]of Object.entries($)){let Y=this.limitNestedMedia(j,Z,Q);if(Y!==j)X=!0;J[W]=Y}return X?J:$}return $}limitImageContent($,Z,Q){if(!sG($))return{type:"text",text:uG};let X=UP($.mediaType,$.data,{maxImageEncodedBytes:Z.maxImageEncodedBytes,maxImageDecodedBytes:Z.maxImageDecodedBytes,maxTotalMediaBytes:Z.maxTotalMediaBytes},Q);if(!X.ok)return{type:"text",text:uG};return{...$,data:X.base64,mediaType:X.mediaType}}}var aG=String.raw`[\|\uFF5C]`,EP=new RegExp(String.raw`<\s*(?:${aG}\s*)?DSML\s*(?:${aG}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function L0($){return Buffer.byteLength($,"utf8")}function nG($){if($===void 0)return;let Z=Number.parseInt($,10);return Number.isFinite(Z)&&Z>0?Z:void 0}function MP($){if($===void 0)return;let Z=$.trim().toLowerCase();if(Z==="infinity"||Z==="disable")return Number.POSITIVE_INFINITY;let Q=Number.parseInt($,10);return Number.isFinite(Q)&&Q>=0?Q:void 0}function l8($,Z){return typeof $==="number"&&Number.isFinite($)&&$>0?Math.floor($):Z}function RP($,Z){if(typeof $!=="number"||Number.isNaN($)||$<0)return Z;return Number.isFinite($)?Math.floor($):$}function R6($,Z,Q){if($.length<=Z)return $;let X=Q($.length-Z),J=Math.max(0,Math.floor((Z-X.length)/2)),W=Math.max(0,$.length-J*2),j=Q(W),Y=Math.max(0,Math.floor((Z-j.length)/2)),V=$.slice(0,Y),B=Y>0?$.slice(-Y):"";return`${V}${j}${B}`}function CP($,Z,Q){if(L0($)<=Z)return $;let X=0,J=$.length,W=R6($,0,Q);while(X<=J){let j=X+J>>>1,Y=R6($,j,Q);if(L0(Y)<=Z)W=Y,X=j+1;else J=j-1}return W}function PP($){if($.type==="tool_use")return{...$,input:Q7($.input)};if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((Z)=>b$(Z)?Q7(Z):{...Z})}}function b$($){if($===null||typeof $!=="object")return!1;let Z=$.type;return Z!=="text"&&Z!=="image"&&Z!=="file"}function _X($){return $!==null&&typeof $==="object"&&$.type==="image"}function sG($){return $!==null&&typeof $==="object"&&$.type==="image"&&typeof $.data==="string"&&typeof $.mediaType==="string"}function OX($){return sG($)}function $7($){if(typeof $==="string")return L0($);if(Array.isArray($)){let Z=0;for(let Q of $)Z+=$7(Q);return Z}if($!==null&&typeof $==="object"){if(OX($))return 0;let Z=0;for(let Q of Object.values($))Z+=$7(Q);return Z}return 0}function Z7($,Z){if(Array.isArray($)){$.forEach((Q,X)=>{if(typeof Q==="string")Z.push({byteLength:L0(Q),minBytes:p8,makeMarker:i8,get:()=>$[X],set:(J)=>{$[X]=J}});else Z7(Q,Z)});return}if($!==null&&typeof $==="object"){if(OX($))return;let Q=$;for(let X of Object.keys(Q)){let J=Q[X];if(typeof J==="string")Z.push({byteLength:L0(J),minBytes:p8,makeMarker:i8,get:()=>Q[X],set:(W)=>{Q[X]=W}});else Z7(J,Z)}}}function Q7($){if(Array.isArray($))return $.map(Q7);if($!==null&&typeof $==="object"){let Z={};for(let[Q,X]of Object.entries($))Z[Q]=Q7(X);return Z}return $}function NX(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class qX{messages=[];conversationId=NX();sessionStarted=!1;constructor($){if(($?.length??0)>0)this.restore($??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage($){this.messages.push($)}appendMessages($){if($.length===0)return;this.messages.push(...$)}replaceMessages($){this.messages=[...$]}resetForRun(){this.messages=[],this.conversationId=NX(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=NX(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}var k$="0.0.79";var q2={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:k$,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json && bun run ./scripts/verify-runtime-build-id.ts",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:compaction":"bun --conditions=development run scripts/compact-session.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/ws":"^8.18.1","posthog-node":"^5.8.0"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};function eG($){let{agentConfig:Z}=$,Q=fP(Z),X=wP(Z),J=$.hooks,W=SP(Z.maxParallelToolCalls);return{distinctId:Z.distinctId,clientName:Z.extensionContext?.client?.name,clientVersion:Z.extensionContext?.client?.version,clineCoreVersion:k$,sessionId:$.sessionId??Z.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??Z.systemPrompt,messageModelInfo:X,model:$.model,modelOptions:Q,modelTools:Z.modelTools,tools:$.tools,hooks:J,prepareTurn:$.prepareTurn,consumePendingUserMessage:Z.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??Z.logger,telemetry:$.telemetry??Z.telemetry,initialMessages:$.initialMessages,completionPolicy:$.completionPolicy===null?void 0:$.completionPolicy??Z.completionPolicy,maxIterations:Z.maxIterations,toolExecution:W,toolPolicies:Z.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:Z.requestToolApproval}}function fP($){let Z={};if($.thinking!==void 0)Z.thinking=$.thinking;if($.reasoningEffort!==void 0)Z.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)Z.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)Z.maxTokensPerTurn=$.maxTokensPerTurn;if($.temperature!==void 0)Z.temperature=$.temperature;if($.apiTimeoutMs!==void 0)Z.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(Z).length>0?Z:void 0}function wP($){let Z=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:Z}}function SP($){if($===void 0)return;return $>=2?"parallel":"sequential"}function bP($){let Z={};if($.providerId!==void 0)Z.providerId=$.providerId;if($.modelId!==void 0)Z.modelId=$.modelId;if($.apiKey!==void 0)Z.apiKey=$.apiKey;if($.baseUrl!==void 0)Z.baseUrl=$.baseUrl;if($.headers!==void 0)Z.headers=$.headers;if($.providerConfig!==void 0)Z.providerConfig=$.providerConfig;if($.thinking===!1)return Z.thinking=!1,Z.reasoningEffort=null,Z.thinkingBudgetTokens=null,Z;if($.thinking===!0)Z.thinking=!0,Z.reasoningEffort=$.reasoningEffort??null,Z.thinkingBudgetTokens=null;else if($.reasoningEffort!==void 0)Z.thinking=!0,Z.reasoningEffort=$.reasoningEffort;if(typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0,Z.thinkingBudgetTokens=Math.trunc($.thinkingBudgetTokens);return Z}function C6($){let Z={...$},Q=Object.hasOwn($,"thinking"),X=Object.hasOwn($,"thinkingBudgetTokens");if($.thinking===!1||$.thinking===null)return Z.reasoningEffort=void 0,Z.thinkingBudgetTokens=void 0,Z;if(!Q&&X&&typeof $.thinkingBudgetTokens==="number"&&Number.isFinite($.thinkingBudgetTokens)&&$.thinkingBudgetTokens>0)Z.thinking=!0;return Z}function kP(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function xP($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function AX($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(AX);let Z={};for(let Q of Object.keys($).sort())Z[Q]=AX($[Q]);return Z}function yP($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(AX($))}catch{return String($)}}function IP($,Z,Q,X){if(Z===$.lastToolName&&Q===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=Z,$.lastToolSignature=Q,{softWarning:$.consecutiveIdenticalCount===X.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=X.hardThreshold}}var $H={softThreshold:3,hardThreshold:5};class TX{config;state=kP();constructor($){this.config={softThreshold:$?.softThreshold??$H.softThreshold,hardThreshold:$?.hardThreshold??$H.hardThreshold}}inspect($){let Z=yP($.input),Q=IP(this.state,$.name,Z,this.config);if(Q.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(Q.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){xP(this.state)}}class EX{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let Z=this.options.maxConsecutiveMistakes,Q=$.forceAtLimit&&Z?Z:this.consecutiveMistakes+1;this.consecutiveMistakes=Q;let X=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(X),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:Q,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!Z||Q<Z)return{action:"continue"};let J={iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details};this.options.onLimitTelemetry?.(J);let W=await vP(J,this.options.onLimitReached);if(W.action==="continue"){let j=W.guidance?.trim();if(j)this.options.appendRecoveryNotice(j,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:j}}return{action:"stop",reason:W.reason?.trim()||void 0,message:hP({iteration:$.iteration,consecutiveMistakes:Q,maxConsecutiveMistakes:Z,reason:$.reason,details:$.details,stopReason:W.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function hP($){let Z=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],Q=$.details?.trim();if(Q)Z.push(`Error: ${Q}`);let X=$.stopReason?.trim();if(X)Z.push(`Decision: ${X}`);return Z.push("Session state was preserved. Send a new prompt to resume from the latest state."),Z.join(" ")}async function vP($,Z){if(!Z)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await Z($)}catch(Q){return{action:"stop",reason:Q instanceof Error?Q.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function gP($){switch($){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return $;default:return}}function mP($){let Z=$.content.filter((Q)=>Q.type==="text");if(Z.length===0)return;return Z.map((Q)=>Q.text).join("")}function cP($){let Z=$.content.filter((Q)=>Q.type==="reasoning");if(Z.length===0)return;return{reasoning:Z.map((Q)=>Q.text).join(""),redacted:Z.some((Q)=>Q.redacted===!0)}}function uP($){return $.content.find((Z)=>Z.type==="tool-result")}function dP($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function lP($){if(!$||$.isError!==!0)return;if(typeof $.output==="string")return $.output;if($.output instanceof Error)return $.output.message;try{return JSON.stringify($.output)}catch{return String($.output)}}class MX{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-media":return[{type:"content_end",contentType:"media",media:$.media}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:gP($.metadata?.reason),metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,errorClass:$.errorClass,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let Z=[],Q=mP($);if(Q!==void 0)Z.push({type:"content_end",contentType:"text",text:Q});let X=cP($);if(X!==void 0)Z.push({type:"content_end",contentType:"reasoning",reasoning:X.reasoning});return Z}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input,execution:$.toolCall.execution}]}translateToolFinished($){let Z=this.toolStartedAt.get($.toolCall.toolCallId),Q=Z===void 0?void 0:Date.now()-Z;this.toolStartedAt.delete($.toolCall.toolCallId);let X=uP($.message),J=X?.output,W=lP(X);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:J,error:W,durationMs:Q,execution:$.toolCall.execution}]}translateUsage($){let Z=$.inputTokens-this.lastUsage.inputTokens,Q=$.outputTokens-this.lastUsage.outputTokens,X=$.cacheReadTokens-this.lastUsage.cacheReadTokens,J=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,W=this.lastUsage.totalCost??0,Y=($.totalCost??0)-W;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,Z),outputTokens:Math.max(0,Q),cacheReadTokens:X===0?void 0:Math.max(0,X),cacheWriteTokens:J===0?void 0:Math.max(0,J),cost:Y===0?void 0:Y,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let Z={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:dP($.status),text:$.outputText,iterations:$.iterations,usage:Z}]}}var Zf="session_run_in_progress";class WH extends Error{agentId;code=Zf;constructor($){super(`SessionRuntime.shutdown called while a run is in progress${$?` (agentId=${$})`:""}`);this.agentId=$;this.name="SessionRunInProgressError"}}function Qf($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function Xf($){let Q=(typeof $.content==="function"?await $.content():$.content).trim();return Q.length>0?Q:void 0}function Jf($,Z){let Q=$.trim(),X=Z.map((J)=>J.trim()).filter(Boolean).join(`
191
191
 
192
192
  `);if(Q&&X)return`${Q}
193
193
 
@@ -501,9 +501,9 @@ ${JSON.stringify(X,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
501
501
  `)[0]?.trim())}function m$($){if(!$)return;let Z={...$},Q=S2(typeof Z.title==="string"?Z.title:void 0);if(Q)Z.title=Q;else delete Z.title;return Object.keys(Z).length>0?Z:void 0}function R4($){let Z=m$($.metadata)??{},Q=$.title!==void 0?S2($.title):RJ($.prompt);if(Q)Z.title=Q;return Object.keys(Z).length>0?Z:void 0}function CJ($){let Z=Y6($.metadata),Q={source:$.source,mode:Z?.mode??"user",sessionId:$.sessionId,...$.parentSessionId?{parentThreadId:$.parentSessionId}:{},...$.agentId?{subagent:$.agentId}:{},...Z?.version?{version:Z.version}:{},...Z?.trigger?{trigger:Z.trigger}:{}};if(E4($.sessionId))return{agent:"teammate",sessionId:$.sessionId,taskType:"team",origin:Q};if(f7($.sessionId))return{agent:"subagent",sessionId:$.sessionId,taskType:"subagent_task",origin:Q};return{agent:"lead",sessionId:$.sessionId,origin:Q}}function PJ($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},origin:$.context.origin,messages:w7($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function NF($,Z,Q){hb(gb($),{recursive:!0}),vb($,`${JSON.stringify(PJ({updatedAt:Z,context:Q,messages:[]}),null,2)}
502
502
  `,"utf8")}function qF($,Z){return Z1.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:Z?.endedAt??$.endedAt??void 0,exit_code:Z?.exitCode??$.exitCode??void 0,status:Z?.status??$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName??void 0,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt??void 0,metadata:Z?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function AF($,Z,Q){let X=0;while(!0){let J=await $();if(J===void 0)return{updated:!1};let W=await Z(J);if(typeof W==="object"&&W!==null&&"updated"in W&&W.updated===!1){if(X+=1,X>=Q)return W;continue}return W}}import{existsSync as lb}from"node:fs";import{readFile as pb}from"node:fs/promises";class C4{listeners=new Set;subscribe($,Z){let Q={listener:$,sessionId:Z?.sessionId?.trim()||void 0};return this.listeners.add(Q),()=>{this.listeners.delete(Q)}}emit($){let Z=$.payload.sessionId?.trim();for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==Z)continue;Q.listener($)}}get size(){return this.listeners.size}}async function c$($){let Z=$?.trim();if(!Z||!lb(Z))return[];try{let Q=(await pb(Z,"utf8")).trim();if(!Q)return[];let X=JSON.parse(Q);if(Array.isArray(X))return X;if(X&&typeof X==="object"&&!Array.isArray(X)){let J=X.messages;if(Array.isArray(J))return J}return[]}catch{return[]}}function fJ($){return $?{...$}:void 0}async function TF($,Z){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await Z.queueSpawnRequest($);let X=await Z.upsertSubagentSessionFromHook($);if(!X)return;await Z.appendSubagentHookAudit(X,$),await Z.applySubagentStatus(X,$)}function P4($){if(typeof $!=="string")return;let Z=$.trim();return Z.length>0?Z:void 0}function U1($){let Z=P4($);if(!Z)return;return Z.toLowerCase()==="unknown"?void 0:Z}function b7($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function nb($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function SJ($){let Z=$??200;return Number.isFinite(Z)?Math.max(0,Math.floor(Z)):200}function ob($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function sb($){return $.isSubagent!==!0&&!P4($.parentSessionId)}function tb($){let Z=$.match(/\d{13,}/g);if(!Z||Z.length===0)return 0;let Q=0;for(let X of Z){let J=Number.parseInt(X,10);if(Number.isFinite(J)&&J>Q)Q=J}return Q}function bJ($){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 eb($){let Z=SJ($);if(Z===0)return[];let Q=CF(),J=(await ib(Q,{withFileTypes:!0}).catch(()=>[])).filter((j)=>j.isDirectory()).map((j)=>({entry:j,recency:tb(j.name.trim())})).sort((j,Y)=>Y.recency-j.recency||Y.entry.name.localeCompare(j.entry.name));return(await Promise.all(J.map(async({entry:j})=>{let Y=j.name.trim();if(!Y)return;let V=RF(Q,Y,`${Y}.json`),B=await MF(V,"utf8").catch(()=>{return});if(!B)return;let K;try{K=JSON.parse(B)}catch{return}let G=Z1.safeParse(K);if(!G.success)return;return bJ(G.data)}))).filter((j)=>Boolean(j)).sort((j,Y)=>Y.startedAt.localeCompare(j.startedAt)).slice(0,Z)}async function $k($,Z,Q){let X=SJ(Z);if(X===0)return await $.listSessions(0),[];let J=Q.includeSubagents?X:ob(X),W=await $.listSessions(J);return(Q.includeSubagents?W:W.filter(sb)).slice(0,X)}function Zk($){if(typeof $==="string")return $.trim();let Z=[];for(let Q of $){if(!Q||typeof Q!=="object")continue;let X=Q;if(X.type!=="text")continue;let J=X.text?.trim();if(J)Z.push(J)}return Z.join(`
503
503
  `).trim()}function EF($){return $.replace(/\s+/g," ").trim()}function Qk($,Z){if($.length<=Z)return $;return`${$.slice(0,Math.max(0,Z-3)).trimEnd()}...`}function Xk($){for(let Z of["user","assistant"])for(let Q of $){if(Q.role!==Z)continue;let X=EF(Zk(Q.content));if(!X)continue;let J=Z==="user"?EF(rb(X)):X,W=ab(J.split(`
504
- `)[0]??J);return Qk(W,50)}return}function Jk($){let Z=0;for(let Q of $)Z+=b7(Q.metrics?.cost)??0;return Z}function Wk($){let Z,Q;for(let X=$.length-1;X>=0;X-=1){let J=$[X];if(!Z)Z=U1(J.modelInfo?.provider);if(!Q)Q=U1(J.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function jk($){return U1($?.provider)??U1($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function Yk($){return U1($?.model)??U1($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function wJ($,Z){let Q=nb($.metadata),X=P4(Z?.title)??P4(Q?.title),J=b7(Z?.totalCost)??b7(Q?.totalCost),W=Q||X!==void 0||J!==void 0?{...Q??{},...X!==void 0?{title:X}:{},...J!==void 0?{totalCost:J}:{}}:void 0;return{...$,provider:U1(Z?.provider)??U1($.provider)??jk(Q)??"",model:U1(Z?.model)??U1($.model)??Yk(Q)??"",metadata:W}}function Vk($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function Bk($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!Vk(Q)}async function Kk($,Z){return await Promise.all(Z.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let X=await $.readSessionMessages(Q.sessionId);return Bk(Q,X)?{...Q,status:"idle"}:Q}))}async function Gk($,Z){return await Promise.all(Z.map(async(Q)=>{let X=wJ(Q),J=Boolean(P4(X.metadata?.title)),W=Boolean(U1(X.provider)),j=Boolean(U1(X.model)),Y=b7(X.metadata?.totalCost),V=Y!==void 0&&Y>0;if(J&&W&&j&&V)return X;let B=await $.readSessionMessages(Q.sessionId);if(B.length===0)return X;let K=Wk(B),G=Jk(B);return wJ(Q,{title:J?void 0:Xk(B),provider:W?void 0:K.provider,model:j?void 0:K.model,totalCost:V||G<=0?void 0:G})}))}async function kJ($,Z={}){let Q=SJ(Z.limit),X=Z.includeSubagents===!0,J=await $k($,Q,{includeSubagents:X}),W=Z.includeManifestFallback===!0&&J.length<Q?await eb(Math.min(Math.max(Q*2,100),500)):[],j=new Map;for(let B of[...J,...W]){if(j.has(B.sessionId))continue;j.set(B.sessionId,B)}let Y=W.length===0?J:Array.from(j.values()).sort((B,K)=>K.startedAt.localeCompare(B.startedAt)).slice(0,Q),V=await Kk($,Y);if(Z.hydrate===!1)return V.map((B)=>wJ(B));return await Gk($,V)}async function Hk($){let Z=$.trim();if(!Z)return;let Q=RF(CF(),Z,`${Z}.json`),X=await MF(Q,"utf8").catch(()=>{return});if(!X)return;try{let J=Z1.safeParse(JSON.parse(X));return J.success?J.data.messages_path:void 0}catch{return}}async function Uk($,Z={}){let Q=new Map;return await kJ({listSessions:async(J)=>{let W=await $.listSessions(J);Q.clear();for(let j of W)Q.set(j.sessionId,j);return W.map(M4)},readSessionMessages:async(J)=>{let W=Q.get(J)?.messagesPath??await Hk(J);return await c$(W)}},Z)}import{captureSdkError as g_}from"@cline/shared";import{createSessionId as Ex,isHubProtocolCompatible as Mx,resolveClineBuildEnv as Rx,resolveHubCommandTimeoutMs as Cx}from"@cline/shared";import{spawn as ik}from"node:child_process";import{closeSync as rk,mkdirSync as ak,openSync as nk,readFileSync as ok,unlinkSync as sk}from"node:fs";import{basename as tk,dirname as ek,join as $x}from"node:path";import{fileURLToPath as Zx}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as Qx,isHubDaemonProcess as lF,resolveClineBuildEnv as pF,withResolvedClineBuildEnv as Xx}from"@cline/shared";import{createHash as Fk,randomBytes as kF}from"node:crypto";import{existsSync as Lk}from"node:fs";import{mkdir as yJ,open as PF,readFile as xF,rename as Dk,rm as k7,writeFile as _k}from"node:fs/promises";import{dirname as yF,join as IJ}from"node:path";import{isHubProtocolCompatible as zk}from"@cline/shared";import{resolveClineDataDir as f4,resolveClineDir as U20}from"@cline/shared/storage";var Ok="CLINE_HUB_DISCOVERY_PATH",Nk="CLINE_HUB_BUILD_ID",qk="CLINE_HUB_BUILD_EPOCH_MS",Ak=30000,Tk=15000,fF=100;function Ek($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function Mk($){return Fk("sha256").update($).digest("hex").slice(0,12)}function Rk($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(Z){return Z instanceof Error&&"code"in Z?String(Z.code)==="EPERM":!1}}function IF(){return kF(32).toString("hex")}function wF($){return new Promise((Z)=>setTimeout(Z,$))}function Ck($){return`${$}.lock`}async function Pk($){try{let Z=JSON.parse(await xF(IJ($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function xJ($){await k7($,{recursive:!0,force:!0}).catch(()=>{return})}function h1(){let $=process.env[Nk]?.trim();if($)return $;return"sdk-v1-4b1d84f053ef14f36b0769606e03a68098d0ffbaf85112a093f24f519f4531a5".trim()||`source-${String(q2.version)}`}function hJ(){let $=Number(process.env[qk]);if(Number.isFinite($)&&$>0)return $;return Number.isFinite(1787443036902)?1787443036902:void 0}function w4($,Z=h1()){let Q=zk($);if(!Q.compatible)return Q;let X=$.buildId?.trim();if(!X)return{compatible:!1,reason:"missing_build"};if(X!==Z)return{compatible:!1,reason:"build_mismatch"};return{compatible:!0}}function SF($){return typeof $==="number"&&Number.isFinite($)&&$>0?$:void 0}function bF($){let Z=$?.trim().split(/[-+]/,1)[0];if(!Z)return;let Q=Z.split(".").map((X)=>Number(X));if(Q.length===0||Q.some((X)=>!Number.isInteger(X)||X<0))return;return Q}function fk($,Z){for(let Q=0;Q<Math.max($.length,Z.length);Q++){let X=$[Q]??0,J=Z[Q]??0;if(X!==J)return X<J?-1:1}return 0}function vJ($,Z){let Q=$.buildId?.trim(),X=Z.buildId?.trim();if(Q&&X&&Q===X)return 0;let J=SF($.buildEpochMs),W=SF(Z.buildEpochMs);if(J!==void 0&&W!==void 0&&J!==W)return J<W?-1:1;let j=bF($.coreVersion),Y=bF(Z.coreVersion);if(j&&Y){let V=fk(j,Y);if(V!==0)return V}if(Q&&X&&Q!==X)return Q<X?-1:1;return 0}function gJ(){return{buildId:h1(),buildEpochMs:hJ(),coreVersion:String(q2.version)}}function c6($,Z){let Q=Z?.self??gJ(),X=w4($,Q.buildId??"");if(X.compatible)return!0;if(X.reason!=="build_mismatch"&&X.reason!=="missing_build")return!1;return vJ(Q,$)<=0}function b2($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${Mk($)}`,Q=process.env[Ok]?.trim()||IJ(f4(),"locks","hub","owners",`${Ek(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function L20($=`hub-${Date.now().toString(36)}`){return b2($)}async function x0($){try{let Z=JSON.parse(await xF($,"utf8"));if(typeof Z.hubId!=="string"||typeof Z.protocolVersion!=="string"||typeof Z.authToken!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string"||typeof Z.startedAt!=="string"||typeof Z.updatedAt!=="string")return;return{hubId:Z.hubId,protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,buildEpochMs:typeof Z.buildEpochMs==="number"?Z.buildEpochMs:void 0,authToken:Z.authToken,host:Z.host,port:Z.port,url:Z.url,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:Z.startedAt,updatedAt:Z.updatedAt}}catch{return}}async function x7($,Z){await mJ($,async()=>{let Q=yF($);await yJ(Q,{recursive:!0});let X=`${$}.${process.pid}.${kF(6).toString("hex")}.tmp`,J;try{J=await PF(X,"wx",384),await J.writeFile(`${JSON.stringify(Z,null,2)}
504
+ `)[0]??J);return Qk(W,50)}return}function Jk($){let Z=0;for(let Q of $)Z+=b7(Q.metrics?.cost)??0;return Z}function Wk($){let Z,Q;for(let X=$.length-1;X>=0;X-=1){let J=$[X];if(!Z)Z=U1(J.modelInfo?.provider);if(!Q)Q=U1(J.modelInfo?.id);if(Z&&Q)break}return{provider:Z,model:Q}}function jk($){return U1($?.provider)??U1($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function Yk($){return U1($?.model)??U1($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function wJ($,Z){let Q=nb($.metadata),X=P4(Z?.title)??P4(Q?.title),J=b7(Z?.totalCost)??b7(Q?.totalCost),W=Q||X!==void 0||J!==void 0?{...Q??{},...X!==void 0?{title:X}:{},...J!==void 0?{totalCost:J}:{}}:void 0;return{...$,provider:U1(Z?.provider)??U1($.provider)??jk(Q)??"",model:U1(Z?.model)??U1($.model)??Yk(Q)??"",metadata:W}}function Vk($){let Z=$.content;if(!Array.isArray(Z))return!1;return Z.some((Q)=>!!Q&&typeof Q==="object"&&Q.type==="tool-call")}function Bk($,Z){if($.status!=="running"||$.interactive!==!0)return!1;let Q=Z.at(-1);return Q?.role==="assistant"&&!Vk(Q)}async function Kk($,Z){return await Promise.all(Z.map(async(Q)=>{if(Q.status!=="running"||Q.interactive!==!0)return Q;let X=await $.readSessionMessages(Q.sessionId);return Bk(Q,X)?{...Q,status:"idle"}:Q}))}async function Gk($,Z){return await Promise.all(Z.map(async(Q)=>{let X=wJ(Q),J=Boolean(P4(X.metadata?.title)),W=Boolean(U1(X.provider)),j=Boolean(U1(X.model)),Y=b7(X.metadata?.totalCost),V=Y!==void 0&&Y>0;if(J&&W&&j&&V)return X;let B=await $.readSessionMessages(Q.sessionId);if(B.length===0)return X;let K=Wk(B),G=Jk(B);return wJ(Q,{title:J?void 0:Xk(B),provider:W?void 0:K.provider,model:j?void 0:K.model,totalCost:V||G<=0?void 0:G})}))}async function kJ($,Z={}){let Q=SJ(Z.limit),X=Z.includeSubagents===!0,J=await $k($,Q,{includeSubagents:X}),W=Z.includeManifestFallback===!0&&J.length<Q?await eb(Math.min(Math.max(Q*2,100),500)):[],j=new Map;for(let B of[...J,...W]){if(j.has(B.sessionId))continue;j.set(B.sessionId,B)}let Y=W.length===0?J:Array.from(j.values()).sort((B,K)=>K.startedAt.localeCompare(B.startedAt)).slice(0,Q),V=await Kk($,Y);if(Z.hydrate===!1)return V.map((B)=>wJ(B));return await Gk($,V)}async function Hk($){let Z=$.trim();if(!Z)return;let Q=RF(CF(),Z,`${Z}.json`),X=await MF(Q,"utf8").catch(()=>{return});if(!X)return;try{let J=Z1.safeParse(JSON.parse(X));return J.success?J.data.messages_path:void 0}catch{return}}async function Uk($,Z={}){let Q=new Map;return await kJ({listSessions:async(J)=>{let W=await $.listSessions(J);Q.clear();for(let j of W)Q.set(j.sessionId,j);return W.map(M4)},readSessionMessages:async(J)=>{let W=Q.get(J)?.messagesPath??await Hk(J);return await c$(W)}},Z)}import{captureSdkError as g_}from"@cline/shared";import{createSessionId as Ex,isHubProtocolCompatible as Mx,resolveClineBuildEnv as Rx,resolveHubCommandTimeoutMs as Cx}from"@cline/shared";import{spawn as ik}from"node:child_process";import{closeSync as rk,mkdirSync as ak,openSync as nk,readFileSync as ok,unlinkSync as sk}from"node:fs";import{basename as tk,dirname as ek,join as $x}from"node:path";import{fileURLToPath as Zx}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as Qx,isHubDaemonProcess as lF,resolveClineBuildEnv as pF,withResolvedClineBuildEnv as Xx}from"@cline/shared";import{createHash as Fk,randomBytes as kF}from"node:crypto";import{existsSync as Lk}from"node:fs";import{mkdir as yJ,open as PF,readFile as xF,rename as Dk,rm as k7,writeFile as _k}from"node:fs/promises";import{dirname as yF,join as IJ}from"node:path";import{isHubProtocolCompatible as zk}from"@cline/shared";import{resolveClineDataDir as f4,resolveClineDir as L20}from"@cline/shared/storage";var Ok="CLINE_HUB_DISCOVERY_PATH",Nk="CLINE_HUB_BUILD_ID",qk="CLINE_HUB_BUILD_EPOCH_MS",Ak=30000,Tk=15000,fF=100;function Ek($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function Mk($){return Fk("sha256").update($).digest("hex").slice(0,12)}function Rk($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(Z){return Z instanceof Error&&"code"in Z?String(Z.code)==="EPERM":!1}}function IF(){return kF(32).toString("hex")}function wF($){return new Promise((Z)=>setTimeout(Z,$))}function Ck($){return`${$}.lock`}async function Pk($){try{let Z=JSON.parse(await xF(IJ($,"owner.json"),"utf8"));if(typeof Z.pid!=="number"||typeof Z.acquiredAt!=="string")return;return{pid:Z.pid,acquiredAt:Z.acquiredAt}}catch{return}}async function xJ($){await k7($,{recursive:!0,force:!0}).catch(()=>{return})}function h1(){let $=process.env[Nk]?.trim();if($)return $;return"sdk-v1-6a421dae68d376a32dd63d44ec21b5cbe4419ab1b8c1f09ca8dffc3f7832cf62".trim()||`source-${String(q2.version)}`}function hJ(){let $=Number(process.env[qk]);if(Number.isFinite($)&&$>0)return $;return Number.isFinite(1787612400373)?1787612400373:void 0}function w4($,Z=h1()){let Q=zk($);if(!Q.compatible)return Q;let X=$.buildId?.trim();if(!X)return{compatible:!1,reason:"missing_build"};if(X!==Z)return{compatible:!1,reason:"build_mismatch"};return{compatible:!0}}function SF($){return typeof $==="number"&&Number.isFinite($)&&$>0?$:void 0}function bF($){let Z=$?.trim().split(/[-+]/,1)[0];if(!Z)return;let Q=Z.split(".").map((X)=>Number(X));if(Q.length===0||Q.some((X)=>!Number.isInteger(X)||X<0))return;return Q}function fk($,Z){for(let Q=0;Q<Math.max($.length,Z.length);Q++){let X=$[Q]??0,J=Z[Q]??0;if(X!==J)return X<J?-1:1}return 0}function vJ($,Z){let Q=$.buildId?.trim(),X=Z.buildId?.trim();if(Q&&X&&Q===X)return 0;let J=SF($.buildEpochMs),W=SF(Z.buildEpochMs);if(J!==void 0&&W!==void 0&&J!==W)return J<W?-1:1;let j=bF($.coreVersion),Y=bF(Z.coreVersion);if(j&&Y){let V=fk(j,Y);if(V!==0)return V}if(Q&&X&&Q!==X)return Q<X?-1:1;return 0}function gJ(){return{buildId:h1(),buildEpochMs:hJ(),coreVersion:String(q2.version)}}function c6($,Z){let Q=Z?.self??gJ(),X=w4($,Q.buildId??"");if(X.compatible)return!0;if(X.reason!=="build_mismatch"&&X.reason!=="missing_build")return!1;return vJ(Q,$)<=0}function b2($=process.argv[1]?.trim()||process.cwd()){let Z=`hub-${Mk($)}`,Q=process.env[Ok]?.trim()||IJ(f4(),"locks","hub","owners",`${Ek(Z)}.json`);return{ownerId:Z,discoveryPath:Q}}function _20($=`hub-${Date.now().toString(36)}`){return b2($)}async function x0($){try{let Z=JSON.parse(await xF($,"utf8"));if(typeof Z.hubId!=="string"||typeof Z.protocolVersion!=="string"||typeof Z.authToken!=="string"||typeof Z.host!=="string"||typeof Z.port!=="number"||typeof Z.url!=="string"||typeof Z.startedAt!=="string"||typeof Z.updatedAt!=="string")return;return{hubId:Z.hubId,protocolVersion:Z.protocolVersion,minClientProtocolVersion:typeof Z.minClientProtocolVersion==="string"?Z.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof Z.maxClientProtocolVersion==="string"?Z.maxClientProtocolVersion:void 0,capabilities:Array.isArray(Z.capabilities)?Z.capabilities.filter((Q)=>typeof Q==="string"):void 0,coreVersion:typeof Z.coreVersion==="string"?Z.coreVersion:void 0,buildId:typeof Z.buildId==="string"?Z.buildId:void 0,buildEpochMs:typeof Z.buildEpochMs==="number"?Z.buildEpochMs:void 0,authToken:Z.authToken,host:Z.host,port:Z.port,url:Z.url,pid:typeof Z.pid==="number"?Z.pid:void 0,startedAt:Z.startedAt,updatedAt:Z.updatedAt}}catch{return}}async function x7($,Z){await mJ($,async()=>{let Q=yF($);await yJ(Q,{recursive:!0});let X=`${$}.${process.pid}.${kF(6).toString("hex")}.tmp`,J;try{J=await PF(X,"wx",384),await J.writeFile(`${JSON.stringify(Z,null,2)}
505
505
  `,{encoding:"utf8"}),await J.sync(),await J.close(),J=void 0,await Dk(X,$);let W;try{W=await PF(Q,"r"),await W.sync()}catch{}finally{await W?.close().catch(()=>{return})}}catch(W){throw await J?.close().catch(()=>{return}),await k7(X,{force:!0}).catch(()=>{return}),W}})}async function X$($){await mJ($,async()=>{await k7($,{force:!0}).catch(()=>{return})})}async function hF($,Z){return await mJ($,async()=>{if((await x0($))?.hubId!==Z)return!1;return await k7($,{force:!0}),!0})}async function vF($,Z,Q){let X=Ck($);await yJ(yF(X),{recursive:!0});let J=Date.now()+Tk;while(!0){try{await yJ(X,{recursive:!1})}catch(W){if((W instanceof Error&&"code"in W?String(W.code):"")!=="EEXIST")throw W;let Y=await Pk(X);if(!Y){if(Date.now()>=J){await xJ(X);continue}await wF(fF);continue}let V=Date.now()-Date.parse(Y.acquiredAt);if(!Rk(Y.pid)||V>Ak){await xJ(X);continue}if(Date.now()>=J)throw Error(`Timed out waiting for hub ${Z} lock ${X}`);await wF(fF);continue}try{return await _k(IJ(X,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
506
- `,"utf8"),await Q()}finally{await xJ(X)}}}function mJ($,Z){return vF(`${$}.mutation`,"discovery mutation",Z)}function y7($,Z){return vF($,"startup",Z)}async function J$($,Z){try{let Q=await fetch(Z?.authToken?wk($):gF($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let X=await Q.json();if(typeof X.protocolVersion!=="string"||typeof X.host!=="string"||typeof X.port!=="number"||typeof X.url!=="string")return;return{protocolVersion:X.protocolVersion,minClientProtocolVersion:typeof X.minClientProtocolVersion==="string"?X.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof X.maxClientProtocolVersion==="string"?X.maxClientProtocolVersion:void 0,capabilities:Array.isArray(X.capabilities)?X.capabilities.filter((J)=>typeof J==="string"):void 0,coreVersion:typeof X.coreVersion==="string"?X.coreVersion:void 0,buildId:typeof X.buildId==="string"?X.buildId:void 0,buildEpochMs:typeof X.buildEpochMs==="number"?X.buildEpochMs:void 0,host:X.host,port:X.port,url:X.url,hubId:typeof X.hubId==="string"?X.hubId:void 0,authToken:typeof X.authToken==="string"?X.authToken:void 0,pid:typeof X.pid==="number"?X.pid:void 0,startedAt:typeof X.startedAt==="string"?X.startedAt:void 0,updatedAt:typeof X.updatedAt==="string"?X.updatedAt:void 0}}catch{return}}function W$($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function gF($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function wk($){let Z=new URL(gF($));return Z.pathname="/status",Z.toString()}function D20($){return Lk($)}import{CLINE_HUB_DEV_PORT as Sk,CLINE_HUB_PORT as bk,resolveClineBuildEnv as kk}from"@cline/shared";var xk="CLINE_HUB_HOST",yk="CLINE_HUB_PORT",Ik="CLINE_HUB_PATHNAME",hk="127.0.0.1",vk=bk,gk="/hub";function mF($){return kk($)==="development"?Sk:vk}function mk($={}){return($.env??process.env)[xk]?.trim()||hk}function I7($={}){let Q=($.env??process.env)[yk]?.trim();if(!Q)return mF($);let X=Number.parseInt(Q,10);if(!Number.isInteger(X)||X<1||X>65535)return mF($);return X}function ck($={}){return($.env??process.env)[Ik]?.trim()||gk}function k2($={},Z={}){return{host:$.host??mk(Z),port:$.port??I7(Z),pathname:$.pathname??ck(Z)}}import{join as uk}from"node:path";var dk="shared:cline",lk="CLINE_HUB_DISCOVERY_PATH",pk="hub-production";function T20($){let Z=h$($.trim());return b2(`workspace:${Z||$.trim()}`)}function P1($=dk){return b2(`${$}@${h1()}`)}function v1(){return{ownerId:pk,discoveryPath:process.env[lk]?.trim()||uk(f4(),"locks","hub","production.json")}}var Jx=8000,Wx=200,cF=3000,jx=100,Yx=[100,250,500,1000,2000],Vx="--cline-hub-daemon",Bx=3,Kx=60000,dJ=new Map,x20={resetRetireAttempts(){dJ.clear()}};function Gx($,Z=Date.now()){let Q=dJ.get($);if(!Q||Z-Q.windowStartedAt>Kx)return dJ.set($,{count:1,windowStartedAt:Z}),!0;return Q.count+=1,Q.count<=Bx}function Hx($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function Ux(){try{let $=$x(f4(),"logs","hub-daemon.log");return ak(ek($),{recursive:!0}),{fd:nk($,"a"),logPath:$}}catch{return}}function Fx(){return pF()==="production"?v1():P1()}function S4($){return c6($)}function Lx($){try{let Z=JSON.parse(ok(`${$}.superseded`,"utf8"));return{url:typeof Z.url==="string"?Z.url:void 0,authToken:typeof Z.authToken==="string"?Z.authToken:void 0,pid:typeof Z.pid==="number"?Z.pid:void 0}}catch{return}}function cJ($){try{sk(`${$}.superseded`)}catch{}}function uF($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function b4($,Z){try{return await J$($,{authToken:Z})}catch{return}}async function dF($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await b4($))?.url)return!0;await new Promise((J)=>setTimeout(J,jx))}return!1}async function k4($,Z){if(!Gx($.url))return!1;await rF($.url,$.authToken,"retired by newer install").catch(()=>!1),await iJ($.url,$.authToken).catch(()=>!1);let Q=await dF($.url,cF);if(!Q&&$.pid&&Dx($.pid)){try{process.kill($.pid,"SIGTERM")}catch{}Q=await dF($.url,cF)}if(Q)await X$(Z).catch(()=>{return});return Q}function Dx($){try{return process.kill($,0),!0}catch(Z){return Z?.code==="EPERM"}}async function lJ($){try{return!await h7($.url,$.authToken)}catch{return!1}}async function uJ($,Z){if(S4($))return"reusable";if(await lJ($))return"deferred_busy";return await k4($,Z)?"retired":"failed"}async function _x($){if(pF()!=="production")return;let Z=P1();if(Z.discoveryPath===$.discoveryPath)return;let Q=await x0(Z.discoveryPath);if(Q?.url)await k4(Q,Z.discoveryPath);else await X$(Z.discoveryPath).catch(()=>{return})}function zx(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return Zx(new URL(`./entry.${$}`,import.meta.url))}function Ox($,Z){let Q=zx(),X=process.execPath?.trim();if(!X)throw Error("unable to resolve runtime executable for hub daemon");let J=tk(X).toLowerCase().includes("bun"),W=Q.startsWith("/$bunfs/"),j=J&&Q.toLowerCase().endsWith(".ts"),Y=W?[Vx]:[...j?["--conditions=development"]:[],Q];return{launcher:X,args:[...Y,"--cwd",$,...Hx(Z)],cwd:$,env:{...Xx(process.env),CLINE_NO_INTERACTIVE:"1",[Qx]:"1"}}}function Nx($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Q="message"in $?$.message:void 0;return typeof Q==="string"&&Q.includes("ETXTBSY")}function qx($,Z={}){if(lF())return;let Q=Ox($,Z),X=Ux();try{ik(Q.launcher,Q.args,{detached:!0,stdio:X?["ignore",X.fd,X.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(X)rk(X.fd)}}async function Ax($,Z={}){for(let Q=0;;Q++)try{qx($,Z);return}catch(X){let J=Yx[Q];if(!Nx(X)||J===void 0)throw X;await new Promise((W)=>setTimeout(W,J))}}function iF($,Z={}){if(lF())return;pJ($,Z).catch(()=>{})}async function Tx($,Z,Q={}){let X=Q.host!==void 0||Q.port!==void 0||Q.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=k2(Q),W=W$(J.host,J.port,J.pathname),j=(F)=>{if(!X)u6(F.url,F.authToken);return F};await _x($).catch(()=>{return});let Y=await x0($.discoveryPath),V=Y?.url?void 0:Lx($.discoveryPath),B=!1;if(Y?.url){let F=Y.authToken;if(!F)B=!0,await k4(Y,$.discoveryPath);else{let L=await b4(Y.url,F);if(L?.url&&S4(L)&&await F1(L.url,{authToken:F}))return cJ($.discoveryPath),j({url:L.url,authToken:F});if(L?.url){if(await uJ({...L,authToken:F},$.discoveryPath)==="deferred_busy"&&await F1(L.url,{authToken:F}))return j({url:L.url,authToken:F})}else await X$($.discoveryPath).catch(()=>{return})}}let K=await b4(W);if(K?.url){let F=uF(K,Y??V,W);if(S4(K)){let D=[K.authToken,Y?.authToken,V?.authToken].filter((_)=>typeof _==="string"&&_.trim().length>0);for(let _ of D){if(!await F1(K.url,{authToken:_}))continue;let O={hubId:K.hubId??`repaired-${K.port}`,protocolVersion:K.protocolVersion,minClientProtocolVersion:K.minClientProtocolVersion,maxClientProtocolVersion:K.maxClientProtocolVersion,capabilities:K.capabilities,coreVersion:K.coreVersion,buildId:K.buildId,authToken:_,host:K.host,port:K.port,url:K.url,pid:K.pid??Y?.pid??V?.pid,startedAt:K.startedAt??new Date().toISOString(),updatedAt:new Date().toISOString()};try{await x7($.discoveryPath,O)}catch{}return cJ($.discoveryPath),j({url:K.url,authToken:_})}throw Error(`A compatible Cline Hub is already running at ${W}, but its discovery record is missing or unreadable and no usable auth token is available. Run 'cline doctor fix' to repair local hub discovery.${B?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`)}let L=await uJ(F,$.discoveryPath);if(L==="deferred_busy"){for(let D of[F.authToken,Y?.authToken].filter((z)=>typeof z==="string"&&z.trim().length>0))if(await F1(K.url,{authToken:D}))return j({url:K.url,authToken:D});if(Q.allowPortFallback!==!0&&J.port!==0)throw Error(`An older Cline Hub is running at ${W} and is still serving active sessions, so it was not replaced, but no usable auth token is available to attach to it. Finish those sessions, or run 'cline doctor fix' to stop the hub.`)}if(L==="failed"&&Q.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is already running at ${W} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let H=Q.allowPortFallback===!0&&J.port!==0?{...J,port:0}:J;await Ax(Z,H);let U=Date.now()+Jx;while(Date.now()<U){let F=await x0($.discoveryPath);if(F?.url&&F.authToken){let D=await b4(F.url,F.authToken);if(D?.url&&S4(D)&&await F1(D.url,{authToken:F.authToken}))return cJ($.discoveryPath),j({url:D.url,authToken:F.authToken})}let L=await b4(W);if(L?.url&&!S4(L)){let D=uF(L,F??V,W),z=await uJ(D,$.discoveryPath);if(z==="deferred_busy"&&F?.authToken&&await F1(L.url,{authToken:F.authToken}))return j({url:L.url,authToken:F.authToken});if(z==="failed"&&Q.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is still running at ${W} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((D)=>setTimeout(D,Wx))}throw Error("Timed out waiting for detached hub startup.")}async function pJ($,Z={}){let Q=Fx();return await y7(Q.discoveryPath,async()=>Tx(Q,$,Z))}function sJ(){return Rx()==="production"?v1():P1()}function Px(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function sF($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return sF($.data);return String($)}function fx($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function aF($){let Z=$,Q=fx(Z.reason);return new L1("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:aJ,{closeCode:Z.code,closeReason:Q||void 0})}function wx($,Z){if($ instanceof L1)return $;if($ instanceof Error)return new L1("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new L1("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new L1("hub_connect_failed",Q);let X=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new L1("hub_connect_failed",X?`Failed to connect to hub at ${Z.toString()} (${X} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var rJ="*",nF=8000,Sx="cline-hub-auth.",tF=new Map,eF=new Set,bx=3000,kx=3000,xx=100,aJ="Hub connection closed",yx=250,Ix=5000,oF=0.5;class L1 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function hx($){return $ instanceof L1}class v7 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function $L($,Z){return $ instanceof v7&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function tJ($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=eJ($.toString());return Q?tF.get(Q):void 0}function vx($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function eJ($){if(!vx($))return;let Z=new URL(d6($));return Z.search="",Z.hash="",Z.toString()}function nJ($){let Z=eJ($);return!!Z&&eF.has(Z)}function u6($,Z){let Q=eJ($);if(Q){if(eF.add(Q),Z?.trim())tF.set(Q,Z)}return $}class j${options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;lastEventSequenceByKey=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new L1("hub_connection_closed",aJ);sawSocketClose=!1;registered=!1;capabilities;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url,this.capabilities=[...$.capabilities??[]]}getClientId(){return this.clientId}getUrl(){return this.currentUrl}isConnected(){return this.socket?.readyState===1&&this.registered}getConnectionError(){return this.isConnected()?null:this.lastCloseError}async updateCapabilities($){if(this.capabilities=$.map((Z)=>({...Z})),!this.registered)return;await this.command("client.update",{capabilities:this.capabilities})}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),Z=this.options.authToken?.trim()||tJ($);$.hash="";let X=new(Px())($.toString(),Z?[`${Sx}${Z}`]:void 0);this.socket=X;let J=!1;this.connectPromise=new Promise((W,j)=>{let Y=!1,V=setTimeout(()=>{if(Y)return;Y=!0,J=!0,this.lastCloseError=new L1("hub_connect_timeout",`Timed out connecting to hub after ${nF}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{X.close()}catch{}j(this.lastCloseError)},nF);X.addEventListener("open",()=>{if(Y)return;Y=!0,clearTimeout(V),W()}),X.addEventListener("error",(B)=>{if(Y)return;Y=!0,clearTimeout(V),this.lastCloseError=wx(B,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)}),X.addEventListener("close",(B)=>{if(Y)return;if(Y=!0,clearTimeout(V),!J)this.lastCloseError=aF(B),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)})}),X.addEventListener("message",(W)=>{this.handleFrame(JSON.parse(sF(W)))}),X.addEventListener("close",(W)=>{if(this.socket!==X)return;if(!J)this.lastCloseError=aF(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",capabilities:this.capabilities,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($,Z){let Q=Z?.sessionId?.trim()||void 0,X={listener:$,sessionId:Q};return this.listeners.add(X),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(X))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,X){let J=0,W=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,X)}catch(j){if(!W||J>=1||!await this.recoverLocalHubTransport(j))throw j;J+=1}}async commandOnce($,Z,Q,X){await this.connect();let J=Ex("hubreq_"),W=Cx($,X?.timeoutMs),j=new Promise((V,B)=>{let K=W===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;B(new v7($,"hub_command_timeout",`Hub command ${$} timed out after ${W}ms (hub=${this.currentUrl}, requestId=${J}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},W);this.pendingReplies.set(J,{resolve:(G)=>{if(K)clearTimeout(K);V(G)},reject:(G)=>{if(K)clearTimeout(K);B(G)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:J,clientId:this.clientId,sessionId:Q,timeoutMs:W,payload:Z}})}catch(V){throw this.pendingReplies.delete(J),V}let Y=await j;if(!Y.ok){if(Y.error?.code===U4){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new P2(V,Y.error.message)}throw new v7($,Y.error?.code,Y.error?.message??`Hub command ${$} failed`)}return Y}async recoverLocalHubTransport($){if(!nJ(this.currentUrl)||!hx($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await x4({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!Z)return!1;return this.currentUrl=Z,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(yx*2**this.reconnectAttempt,Ix),Z=Math.round($*(1-oF)+Math.random()*$*oF);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},Z)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!nJ(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await x4({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if($){this.currentUrl=$,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let $=this.socket;if(this.closedByClient=!0,this.clearReconnectTimer(),this.registered=!1,!$)return;this.lastCloseError=new L1("hub_connection_closed",aJ),this.sawSocketClose=!1;for(let Z of this.pendingReplies.values())Z.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new L1("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,Z){let Q=$==="stream.subscribe"?this.lastEventSequenceByKey.get(this.subscriptionKeyForSessionId(Z)):void 0;this.sendFrame({kind:$,clientId:this.clientId,...Z?{sessionId:Z}:{},...Q!==void 0?{sinceSequence:Q}:{}})}adjustSubscriptionCount($,Z){let Q=this.subscriptionKeyForSessionId($),X=(this.subscriptionCounts.get(Q)??0)+Z;if(X<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(Z<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,X),Z>0&&X===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??rJ}subscriptionSessionIdFromKey($){return $===rJ?void 0:$}handleFrame($){switch($.kind){case"reply":{let Z=$.envelope.requestId;if(!Z)return;let Q=this.pendingReplies.get(Z);if(!Q)return;this.pendingReplies.delete(Z),Q.resolve($.envelope);return}case"event":{let Z=$.envelope.sequence;if(typeof Z==="number"){let Q=$.envelope.sessionId?.trim();for(let X of[rJ,Q]){if(!X||!this.subscriptionCounts.has(X))continue;let J=this.lastEventSequenceByKey.get(X)??0;if(Z>J)this.lastEventSequenceByKey.set(X,Z)}}for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==$.envelope.sessionId?.trim())continue;Q.listener($.envelope)}return}case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function d6($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function F1($,Z){let Q=new j$({url:$,authToken:Z?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function oJ($,Z){let Q=d6($),X=await J$(Q,{authToken:Z?.authToken});if(!X)return{status:"unreachable",url:Q};if(Z?.requireCurrentBuild){let J=h1(),W=w4(X,J);if(!W.compatible&&!c6(X))return{status:W.reason==="unsupported_protocol"?"protocol_mismatch":"build_mismatch",url:Q}}else if(!Mx(X).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await F1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function gx($){let Z=Date.now()+kx;while(Date.now()<Z){if(!(await J$($).catch(()=>{return}))?.url)return!0;await new Promise((X)=>setTimeout(X,xx))}return!1}function mx($,Z){try{return d6($)===d6(Z)}catch{return!1}}function cx($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let X=Q;return Array.isArray(X.participants)&&X.participants.length>0})}async function h7($,Z,Q){let X=new j$({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let J=await X.command("session.list",{limit:500},void 0,{timeoutMs:bx});return!cx(J.payload)}catch{return!1}finally{await X.dispose().catch(()=>{return})}}async function ux($,Z){let Q=`${$.discoveryPath}.superseded`,X=await x0(Q);if(!X?.url||!X.authToken)return;let J=await oJ(X.url,{authToken:X.authToken});if(J.status!=="compatible")return;if(await h7(J.url,X.authToken,Z))return;return u6(J.url,X.authToken)}async function $W($={}){if($.endpoint?.trim()){let J=await oJ($.endpoint);return J.status==="compatible"?J.url:void 0}let Z=sJ(),Q=await x0(Z.discoveryPath);if(!Q?.url)return await ux(Z,$);let X=await oJ(Q.url,{authToken:Q.authToken,requireCurrentBuild:!0});if(X.status==="compatible")return u6(X.url,Q.authToken);if(X.status==="protocol_mismatch")await X$(Z.discoveryPath).catch(()=>{return});return}async function x4($={}){let Z=await $W($);if(Z&&await F1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;try{return(await pJ($.workspaceRoot??process.cwd())).url}catch{return}}async function rF($,Z,Q,X){let J=new URL($),W=Z?.trim()||tJ(J);if(J.protocol==="ws:")J.protocol="http:";else if(J.protocol==="wss:")J.protocol="https:";if(J.pathname="/drain",J.hash="",Q)J.searchParams.set("reason",Q);if(X?.off)J.searchParams.set("off","1");return(await fetch(J,{method:"POST",headers:W?{authorization:`Bearer ${W}`}:void 0})).ok}async function iJ($,Z){let Q=new URL($),X=Z?.trim()||tJ(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:X?{authorization:`Bearer ${X}`}:void 0})).ok}async function dx($=sJ()){let Z=await x0($.discoveryPath);if(!Z?.url)return!1;try{if(await iJ(Z.url,Z.authToken))return!0}catch{}return!1}async function ZL($){if(!nJ($.url))return;let Z=sJ(),Q=await x0(Z.discoveryPath);if(!Q?.url||!mx(Q.url,$.url))return;if(!await h7(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await dx())return;if(!await gx(Q.url))return;return await X$(Z.discoveryPath).catch(()=>{return}),await x4({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{resolveProviderRequestHeaders as sx}from"@cline/llms";import{captureSdkError as XW,createSessionId as YL,HUB_CHECKPOINT_CAPABILITY as tx,HUB_COMPACTION_CAPABILITY as ex,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as $y,HUB_HOOK_CAPABILITY_PREFIX as Zy,HUB_MISTAKE_LIMIT_CAPABILITY as Qy,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Xy,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Jy,isGeneratedMedia as Wy,isHubToolExecutorName as jy}from"@cline/shared";import{createHash as lx}from"node:crypto";import{formatDisplayUserInput as QL}from"@cline/shared";import{z as g1}from"zod";function px($){if(!$||typeof $!=="object"||Array.isArray($))return!1;let Z=$;if(Z.role!=="user"&&Z.role!=="assistant")return!1;return typeof Z.content==="string"||Array.isArray(Z.content)}var ix=g1.custom(px),g7=g1.object({version:g1.literal(1),updated_at:g1.string().datetime(),conversation_id:g1.string().min(1).optional(),source_message_count:g1.number().int().nonnegative(),source_prefix_hash:g1.string().min(1).optional(),source_last_message_key:g1.string().min(1).optional(),messages:g1.array(ix),system_prompt:g1.string().optional()});function ZW($){return JSON.parse(JSON.stringify($))}function XL($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:QL($.content)};return{...$,content:$.content.map((Z)=>Z.type==="text"?{...Z,text:QL(Z.text)}:Z)}}function JL($){if($.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function rx($){let Z=XL($);return JL(Z.role),[["role",Z.role],["content",Z.content],["agent",Z.agent??null],["sessionId",Z.sessionId??null],["metadata",Z.metadata??null],["modelInfo",Z.modelInfo??null],["metrics",Z.metrics??null]]}function WL($){if(!$)return"";let Z=XL($);if(typeof Z.id==="string"&&Z.id.trim())return`id:${Z.id.trim()}`;if(JL(Z.role),typeof Z.ts==="number"&&Number.isFinite(Z.ts))return`ts:${Z.role}:${Z.ts}`;return`content:${Z.role}:${JSON.stringify(Z.content)}`}function jL($,Z=$.length){let Q=lx("sha256");Q.update(`cline-session-compaction-source-v2
506
+ `,"utf8"),await Q()}finally{await xJ(X)}}}function mJ($,Z){return vF(`${$}.mutation`,"discovery mutation",Z)}function y7($,Z){return vF($,"startup",Z)}async function J$($,Z){try{let Q=await fetch(Z?.authToken?wk($):gF($),{headers:Z?.authToken?{authorization:`Bearer ${Z.authToken}`}:void 0});if(!Q.ok)return;let X=await Q.json();if(typeof X.protocolVersion!=="string"||typeof X.host!=="string"||typeof X.port!=="number"||typeof X.url!=="string")return;return{protocolVersion:X.protocolVersion,minClientProtocolVersion:typeof X.minClientProtocolVersion==="string"?X.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof X.maxClientProtocolVersion==="string"?X.maxClientProtocolVersion:void 0,capabilities:Array.isArray(X.capabilities)?X.capabilities.filter((J)=>typeof J==="string"):void 0,coreVersion:typeof X.coreVersion==="string"?X.coreVersion:void 0,buildId:typeof X.buildId==="string"?X.buildId:void 0,buildEpochMs:typeof X.buildEpochMs==="number"?X.buildEpochMs:void 0,host:X.host,port:X.port,url:X.url,hubId:typeof X.hubId==="string"?X.hubId:void 0,authToken:typeof X.authToken==="string"?X.authToken:void 0,pid:typeof X.pid==="number"?X.pid:void 0,startedAt:typeof X.startedAt==="string"?X.startedAt:void 0,updatedAt:typeof X.updatedAt==="string"?X.updatedAt:void 0}}catch{return}}function W$($,Z,Q="/hub"){return new URL(`ws://${$}:${Z}${Q}`).toString()}function gF($){let Z=new URL($);return Z.protocol=Z.protocol==="wss:"?"https:":"http:",Z.pathname="/health",Z.search="",Z.toString()}function wk($){let Z=new URL(gF($));return Z.pathname="/status",Z.toString()}function z20($){return Lk($)}import{CLINE_HUB_DEV_PORT as Sk,CLINE_HUB_PORT as bk,resolveClineBuildEnv as kk}from"@cline/shared";var xk="CLINE_HUB_HOST",yk="CLINE_HUB_PORT",Ik="CLINE_HUB_PATHNAME",hk="127.0.0.1",vk=bk,gk="/hub";function mF($){return kk($)==="development"?Sk:vk}function mk($={}){return($.env??process.env)[xk]?.trim()||hk}function I7($={}){let Q=($.env??process.env)[yk]?.trim();if(!Q)return mF($);let X=Number.parseInt(Q,10);if(!Number.isInteger(X)||X<1||X>65535)return mF($);return X}function ck($={}){return($.env??process.env)[Ik]?.trim()||gk}function k2($={},Z={}){return{host:$.host??mk(Z),port:$.port??I7(Z),pathname:$.pathname??ck(Z)}}import{join as uk}from"node:path";var dk="shared:cline",lk="CLINE_HUB_DISCOVERY_PATH",pk="hub-production";function M20($){let Z=h$($.trim());return b2(`workspace:${Z||$.trim()}`)}function P1($=dk){return b2(`${$}@${h1()}`)}function v1(){return{ownerId:pk,discoveryPath:process.env[lk]?.trim()||uk(f4(),"locks","hub","production.json")}}var Jx=8000,Wx=200,cF=3000,jx=100,Yx=[100,250,500,1000,2000],Vx="--cline-hub-daemon",Bx=3,Kx=60000,dJ=new Map,I20={resetRetireAttempts(){dJ.clear()}};function Gx($,Z=Date.now()){let Q=dJ.get($);if(!Q||Z-Q.windowStartedAt>Kx)return dJ.set($,{count:1,windowStartedAt:Z}),!0;return Q.count+=1,Q.count<=Bx}function Hx($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function Ux(){try{let $=$x(f4(),"logs","hub-daemon.log");return ak(ek($),{recursive:!0}),{fd:nk($,"a"),logPath:$}}catch{return}}function Fx(){return pF()==="production"?v1():P1()}function S4($){return c6($)}function Lx($){try{let Z=JSON.parse(ok(`${$}.superseded`,"utf8"));return{url:typeof Z.url==="string"?Z.url:void 0,authToken:typeof Z.authToken==="string"?Z.authToken:void 0,pid:typeof Z.pid==="number"?Z.pid:void 0}}catch{return}}function cJ($){try{sk(`${$}.superseded`)}catch{}}function uF($,Z,Q){if(!Z||Z.url!==Q)return $;return{...$,authToken:$.authToken??Z.authToken,pid:$.pid??Z.pid}}async function b4($,Z){try{return await J$($,{authToken:Z})}catch{return}}async function dF($,Z){let Q=Date.now()+Z;while(Date.now()<Q){if(!(await b4($))?.url)return!0;await new Promise((J)=>setTimeout(J,jx))}return!1}async function k4($,Z){if(!Gx($.url))return!1;await rF($.url,$.authToken,"retired by newer install").catch(()=>!1),await iJ($.url,$.authToken).catch(()=>!1);let Q=await dF($.url,cF);if(!Q&&$.pid&&Dx($.pid)){try{process.kill($.pid,"SIGTERM")}catch{}Q=await dF($.url,cF)}if(Q)await X$(Z).catch(()=>{return});return Q}function Dx($){try{return process.kill($,0),!0}catch(Z){return Z?.code==="EPERM"}}async function lJ($){try{return!await h7($.url,$.authToken)}catch{return!1}}async function uJ($,Z){if(S4($))return"reusable";if(await lJ($))return"deferred_busy";return await k4($,Z)?"retired":"failed"}async function _x($){if(pF()!=="production")return;let Z=P1();if(Z.discoveryPath===$.discoveryPath)return;let Q=await x0(Z.discoveryPath);if(Q?.url)await k4(Q,Z.discoveryPath);else await X$(Z.discoveryPath).catch(()=>{return})}function zx(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return Zx(new URL(`./entry.${$}`,import.meta.url))}function Ox($,Z){let Q=zx(),X=process.execPath?.trim();if(!X)throw Error("unable to resolve runtime executable for hub daemon");let J=tk(X).toLowerCase().includes("bun"),W=Q.startsWith("/$bunfs/"),j=J&&Q.toLowerCase().endsWith(".ts"),Y=W?[Vx]:[...j?["--conditions=development"]:[],Q];return{launcher:X,args:[...Y,"--cwd",$,...Hx(Z)],cwd:$,env:{...Xx(process.env),CLINE_NO_INTERACTIVE:"1",[Qx]:"1"}}}function Nx($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let Q="message"in $?$.message:void 0;return typeof Q==="string"&&Q.includes("ETXTBSY")}function qx($,Z={}){if(lF())return;let Q=Ox($,Z),X=Ux();try{ik(Q.launcher,Q.args,{detached:!0,stdio:X?["ignore",X.fd,X.fd]:"ignore",env:Q.env,cwd:Q.cwd,windowsHide:!0}).unref()}finally{if(X)rk(X.fd)}}async function Ax($,Z={}){for(let Q=0;;Q++)try{qx($,Z);return}catch(X){let J=Yx[Q];if(!Nx(X)||J===void 0)throw X;await new Promise((W)=>setTimeout(W,J))}}function iF($,Z={}){if(lF())return;pJ($,Z).catch(()=>{})}async function Tx($,Z,Q={}){let X=Q.host!==void 0||Q.port!==void 0||Q.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=k2(Q),W=W$(J.host,J.port,J.pathname),j=(F)=>{if(!X)u6(F.url,F.authToken);return F};await _x($).catch(()=>{return});let Y=await x0($.discoveryPath),V=Y?.url?void 0:Lx($.discoveryPath),B=!1;if(Y?.url){let F=Y.authToken;if(!F)B=!0,await k4(Y,$.discoveryPath);else{let L=await b4(Y.url,F);if(L?.url&&S4(L)&&await F1(L.url,{authToken:F}))return cJ($.discoveryPath),j({url:L.url,authToken:F});if(L?.url){if(await uJ({...L,authToken:F},$.discoveryPath)==="deferred_busy"&&await F1(L.url,{authToken:F}))return j({url:L.url,authToken:F})}else await X$($.discoveryPath).catch(()=>{return})}}let K=await b4(W);if(K?.url){let F=uF(K,Y??V,W);if(S4(K)){let D=[K.authToken,Y?.authToken,V?.authToken].filter((_)=>typeof _==="string"&&_.trim().length>0);for(let _ of D){if(!await F1(K.url,{authToken:_}))continue;let O={hubId:K.hubId??`repaired-${K.port}`,protocolVersion:K.protocolVersion,minClientProtocolVersion:K.minClientProtocolVersion,maxClientProtocolVersion:K.maxClientProtocolVersion,capabilities:K.capabilities,coreVersion:K.coreVersion,buildId:K.buildId,authToken:_,host:K.host,port:K.port,url:K.url,pid:K.pid??Y?.pid??V?.pid,startedAt:K.startedAt??new Date().toISOString(),updatedAt:new Date().toISOString()};try{await x7($.discoveryPath,O)}catch{}return cJ($.discoveryPath),j({url:K.url,authToken:_})}throw Error(`A compatible Cline Hub is already running at ${W}, but its discovery record is missing or unreadable and no usable auth token is available. Run 'cline doctor fix' to repair local hub discovery.${B?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`)}let L=await uJ(F,$.discoveryPath);if(L==="deferred_busy"){for(let D of[F.authToken,Y?.authToken].filter((z)=>typeof z==="string"&&z.trim().length>0))if(await F1(K.url,{authToken:D}))return j({url:K.url,authToken:D});if(Q.allowPortFallback!==!0&&J.port!==0)throw Error(`An older Cline Hub is running at ${W} and is still serving active sessions, so it was not replaced, but no usable auth token is available to attach to it. Finish those sessions, or run 'cline doctor fix' to stop the hub.`)}if(L==="failed"&&Q.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is already running at ${W} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let H=Q.allowPortFallback===!0&&J.port!==0?{...J,port:0}:J;await Ax(Z,H);let U=Date.now()+Jx;while(Date.now()<U){let F=await x0($.discoveryPath);if(F?.url&&F.authToken){let D=await b4(F.url,F.authToken);if(D?.url&&S4(D)&&await F1(D.url,{authToken:F.authToken}))return cJ($.discoveryPath),j({url:D.url,authToken:F.authToken})}let L=await b4(W);if(L?.url&&!S4(L)){let D=uF(L,F??V,W),z=await uJ(D,$.discoveryPath);if(z==="deferred_busy"&&F?.authToken&&await F1(L.url,{authToken:F.authToken}))return j({url:L.url,authToken:F.authToken});if(z==="failed"&&Q.allowPortFallback!==!0&&J.port!==0)throw Error(`An incompatible Cline Hub is still running at ${W} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((D)=>setTimeout(D,Wx))}throw Error("Timed out waiting for detached hub startup.")}async function pJ($,Z={}){let Q=Fx();return await y7(Q.discoveryPath,async()=>Tx(Q,$,Z))}function sJ(){return Rx()==="production"?v1():P1()}function Px(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function sF($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return sF($.data);return String($)}function fx($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function aF($){let Z=$,Q=fx(Z.reason);return new L1("hub_connection_closed",Z.code||Q?`Hub connection closed (code=${Z.code??0}${Q?`, reason=${Q}`:""})`:aJ,{closeCode:Z.code,closeReason:Q||void 0})}function wx($,Z){if($ instanceof L1)return $;if($ instanceof Error)return new L1("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new L1("hub_connect_failed",$.error.message);let Q=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(Q)return new L1("hub_connect_failed",Q);let X=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new L1("hub_connect_failed",X?`Failed to connect to hub at ${Z.toString()} (${X} event before socket open).`:`Failed to connect to hub at ${Z.toString()}.`)}var rJ="*",nF=8000,Sx="cline-hub-auth.",tF=new Map,eF=new Set,bx=3000,kx=3000,xx=100,aJ="Hub connection closed",yx=250,Ix=5000,oF=0.5;class L1 extends Error{code;details;constructor($,Z,Q){super(Z);this.code=$;this.details=Q;this.name="HubTransportError"}}function hx($){return $ instanceof L1}class v7 extends Error{command;code;constructor($,Z,Q){super(Q);this.command=$;this.code=Z;this.name="HubCommandError"}}function $L($,Z){return $ instanceof v7&&$.code==="hub_command_timeout"&&(Z===void 0||$.command===Z)}function tJ($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=eJ($.toString());return Q?tF.get(Q):void 0}function vx($){try{let Q=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return Q==="localhost"||Q==="127.0.0.1"||Q==="::1"}catch{return!1}}function eJ($){if(!vx($))return;let Z=new URL(d6($));return Z.search="",Z.hash="",Z.toString()}function nJ($){let Z=eJ($);return!!Z&&eF.has(Z)}function u6($,Z){let Q=eJ($);if(Q){if(eF.add(Q),Z?.trim())tF.set(Q,Z)}return $}class j${options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;lastEventSequenceByKey=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new L1("hub_connection_closed",aJ);sawSocketClose=!1;registered=!1;capabilities;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.url,this.capabilities=[...$.capabilities??[]]}getClientId(){return this.clientId}getUrl(){return this.currentUrl}isConnected(){return this.socket?.readyState===1&&this.registered}getConnectionError(){return this.isConnected()?null:this.lastCloseError}async updateCapabilities($){if(this.capabilities=$.map((Z)=>({...Z})),!this.registered)return;await this.command("client.update",{capabilities:this.capabilities})}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let $=new URL(this.currentUrl),Z=this.options.authToken?.trim()||tJ($);$.hash="";let X=new(Px())($.toString(),Z?[`${Sx}${Z}`]:void 0);this.socket=X;let J=!1;this.connectPromise=new Promise((W,j)=>{let Y=!1,V=setTimeout(()=>{if(Y)return;Y=!0,J=!0,this.lastCloseError=new L1("hub_connect_timeout",`Timed out connecting to hub after ${nF}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{X.close()}catch{}j(this.lastCloseError)},nF);X.addEventListener("open",()=>{if(Y)return;Y=!0,clearTimeout(V),W()}),X.addEventListener("error",(B)=>{if(Y)return;Y=!0,clearTimeout(V),this.lastCloseError=wx(B,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)}),X.addEventListener("close",(B)=>{if(Y)return;if(Y=!0,clearTimeout(V),!J)this.lastCloseError=aF(B),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)})}),X.addEventListener("message",(W)=>{this.handleFrame(JSON.parse(sF(W)))}),X.addEventListener("close",(W)=>{if(this.socket!==X)return;if(!J)this.lastCloseError=aF(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",capabilities:this.capabilities,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($,Z){let Q=Z?.sessionId?.trim()||void 0,X={listener:$,sessionId:Q};return this.listeners.add(X),this.adjustSubscriptionCount(Q,1),()=>{if(!this.listeners.delete(X))return;this.adjustSubscriptionCount(Q,-1)}}async command($,Z,Q,X){let J=0,W=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,Z,Q,X)}catch(j){if(!W||J>=1||!await this.recoverLocalHubTransport(j))throw j;J+=1}}async commandOnce($,Z,Q,X){await this.connect();let J=Ex("hubreq_"),W=Cx($,X?.timeoutMs),j=new Promise((V,B)=>{let K=W===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(J))return;B(new v7($,"hub_command_timeout",`Hub command ${$} timed out after ${W}ms (hub=${this.currentUrl}, requestId=${J}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},W);this.pendingReplies.set(J,{resolve:(G)=>{if(K)clearTimeout(K);V(G)},reject:(G)=>{if(K)clearTimeout(K);B(G)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:J,clientId:this.clientId,sessionId:Q,timeoutMs:W,payload:Z}})}catch(V){throw this.pendingReplies.delete(J),V}let Y=await j;if(!Y.ok){if(Y.error?.code===U4){let V=Q??(typeof Z?.sessionId==="string"?Z.sessionId:void 0);throw new P2(V,Y.error.message)}throw new v7($,Y.error?.code,Y.error?.message??`Hub command ${$} failed`)}return Y}async recoverLocalHubTransport($){if(!nJ(this.currentUrl)||!hx($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let Z=await x4({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!Z)return!1;return this.currentUrl=Z,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let $=Math.min(yx*2**this.reconnectAttempt,Ix),Z=Math.round($*(1-oF)+Math.random()*$*oF);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},Z)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!nJ(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await x4({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if($){this.currentUrl=$,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let $=this.socket;if(this.closedByClient=!0,this.clearReconnectTimer(),this.registered=!1,!$)return;this.lastCloseError=new L1("hub_connection_closed",aJ),this.sawSocketClose=!1;for(let Z of this.pendingReplies.values())Z.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new L1("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,Z){let Q=$==="stream.subscribe"?this.lastEventSequenceByKey.get(this.subscriptionKeyForSessionId(Z)):void 0;this.sendFrame({kind:$,clientId:this.clientId,...Z?{sessionId:Z}:{},...Q!==void 0?{sinceSequence:Q}:{}})}adjustSubscriptionCount($,Z){let Q=this.subscriptionKeyForSessionId($),X=(this.subscriptionCounts.get(Q)??0)+Z;if(X<=0){if(this.subscriptionCounts.delete(Q),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(Z<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(Q,X),Z>0&&X===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??rJ}subscriptionSessionIdFromKey($){return $===rJ?void 0:$}handleFrame($){switch($.kind){case"reply":{let Z=$.envelope.requestId;if(!Z)return;let Q=this.pendingReplies.get(Z);if(!Q)return;this.pendingReplies.delete(Z),Q.resolve($.envelope);return}case"event":{let Z=$.envelope.sequence;if(typeof Z==="number"){let Q=$.envelope.sessionId?.trim();for(let X of[rJ,Q]){if(!X||!this.subscriptionCounts.has(X))continue;let J=this.lastEventSequenceByKey.get(X)??0;if(Z>J)this.lastEventSequenceByKey.set(X,Z)}}for(let Q of this.listeners){if(Q.sessionId&&Q.sessionId!==$.envelope.sessionId?.trim())continue;Q.listener($.envelope)}return}case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function d6($){let Z=new URL($);if(Z.protocol==="http:")Z.protocol="ws:";else if(Z.protocol==="https:")Z.protocol="wss:";return Z.toString()}async function F1($,Z){let Q=new j$({url:$,authToken:Z?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd});try{return await Q.connect(),!0}catch{return!1}finally{Q.close()}}async function oJ($,Z){let Q=d6($),X=await J$(Q,{authToken:Z?.authToken});if(!X)return{status:"unreachable",url:Q};if(Z?.requireCurrentBuild){let J=h1(),W=w4(X,J);if(!W.compatible&&!c6(X))return{status:W.reason==="unsupported_protocol"?"protocol_mismatch":"build_mismatch",url:Q}}else if(!Mx(X).compatible)return{status:"protocol_mismatch",url:Q};if(Z?.verifyConnection===!0&&!await F1(Q,{workspaceRoot:Z.workspaceRoot,cwd:Z.cwd,authToken:Z.authToken}))return{status:"unreachable",url:Q};return{status:"compatible",url:Q}}async function gx($){let Z=Date.now()+kx;while(Date.now()<Z){if(!(await J$($).catch(()=>{return}))?.url)return!0;await new Promise((X)=>setTimeout(X,xx))}return!1}function mx($,Z){try{return d6($)===d6(Z)}catch{return!1}}function cx($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((Q)=>{if(!Q||typeof Q!=="object")return!1;let X=Q;return Array.isArray(X.participants)&&X.participants.length>0})}async function h7($,Z,Q){let X=new j$({url:$,authToken:Z,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:Q?.workspaceRoot,cwd:Q?.cwd});try{let J=await X.command("session.list",{limit:500},void 0,{timeoutMs:bx});return!cx(J.payload)}catch{return!1}finally{await X.dispose().catch(()=>{return})}}async function ux($,Z){let Q=`${$.discoveryPath}.superseded`,X=await x0(Q);if(!X?.url||!X.authToken)return;let J=await oJ(X.url,{authToken:X.authToken});if(J.status!=="compatible")return;if(await h7(J.url,X.authToken,Z))return;return u6(J.url,X.authToken)}async function $W($={}){if($.endpoint?.trim()){let J=await oJ($.endpoint);return J.status==="compatible"?J.url:void 0}let Z=sJ(),Q=await x0(Z.discoveryPath);if(!Q?.url)return await ux(Z,$);let X=await oJ(Q.url,{authToken:Q.authToken,requireCurrentBuild:!0});if(X.status==="compatible")return u6(X.url,Q.authToken);if(X.status==="protocol_mismatch")await X$(Z.discoveryPath).catch(()=>{return});return}async function x4($={}){let Z=await $W($);if(Z&&await F1(Z,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return Z;if($.endpoint?.trim())return;try{return(await pJ($.workspaceRoot??process.cwd())).url}catch{return}}async function rF($,Z,Q,X){let J=new URL($),W=Z?.trim()||tJ(J);if(J.protocol==="ws:")J.protocol="http:";else if(J.protocol==="wss:")J.protocol="https:";if(J.pathname="/drain",J.hash="",Q)J.searchParams.set("reason",Q);if(X?.off)J.searchParams.set("off","1");return(await fetch(J,{method:"POST",headers:W?{authorization:`Bearer ${W}`}:void 0})).ok}async function iJ($,Z){let Q=new URL($),X=Z?.trim()||tJ(Q);if(Q.protocol==="ws:")Q.protocol="http:";else if(Q.protocol==="wss:")Q.protocol="https:";return Q.pathname="/shutdown",Q.hash="",(await fetch(Q,{method:"POST",headers:X?{authorization:`Bearer ${X}`}:void 0})).ok}async function dx($=sJ()){let Z=await x0($.discoveryPath);if(!Z?.url)return!1;try{if(await iJ(Z.url,Z.authToken))return!0}catch{}return!1}async function ZL($){if(!nJ($.url))return;let Z=sJ(),Q=await x0(Z.discoveryPath);if(!Q?.url||!mx(Q.url,$.url))return;if(!await h7(Q.url,Q.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await dx())return;if(!await gx(Q.url))return;return await X$(Z.discoveryPath).catch(()=>{return}),await x4({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}import{resolveProviderRequestHeaders as sx}from"@cline/llms";import{captureSdkError as XW,createSessionId as YL,HUB_CHECKPOINT_CAPABILITY as tx,HUB_COMPACTION_CAPABILITY as ex,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as $y,HUB_HOOK_CAPABILITY_PREFIX as Zy,HUB_MISTAKE_LIMIT_CAPABILITY as Qy,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Xy,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Jy,isGeneratedMedia as Wy,isHubToolExecutorName as jy}from"@cline/shared";import{createHash as lx}from"node:crypto";import{formatDisplayUserInput as QL}from"@cline/shared";import{z as g1}from"zod";function px($){if(!$||typeof $!=="object"||Array.isArray($))return!1;let Z=$;if(Z.role!=="user"&&Z.role!=="assistant")return!1;return typeof Z.content==="string"||Array.isArray(Z.content)}var ix=g1.custom(px),g7=g1.object({version:g1.literal(1),updated_at:g1.string().datetime(),conversation_id:g1.string().min(1).optional(),source_message_count:g1.number().int().nonnegative(),source_prefix_hash:g1.string().min(1).optional(),source_last_message_key:g1.string().min(1).optional(),messages:g1.array(ix),system_prompt:g1.string().optional()});function ZW($){return JSON.parse(JSON.stringify($))}function XL($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:QL($.content)};return{...$,content:$.content.map((Z)=>Z.type==="text"?{...Z,text:QL(Z.text)}:Z)}}function JL($){if($.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function rx($){let Z=XL($);return JL(Z.role),[["role",Z.role],["content",Z.content],["agent",Z.agent??null],["sessionId",Z.sessionId??null],["metadata",Z.metadata??null],["modelInfo",Z.modelInfo??null],["metrics",Z.metrics??null]]}function WL($){if(!$)return"";let Z=XL($);if(typeof Z.id==="string"&&Z.id.trim())return`id:${Z.id.trim()}`;if(JL(Z.role),typeof Z.ts==="number"&&Number.isFinite(Z.ts))return`ts:${Z.role}:${Z.ts}`;return`content:${Z.role}:${JSON.stringify(Z.content)}`}function jL($,Z=$.length){let Q=lx("sha256");Q.update(`cline-session-compaction-source-v2
507
507
  `),Q.update(`${Z}
508
508
  `);for(let X of $.slice(0,Z))Q.update(JSON.stringify(rx(X))),Q.update(`
509
509
  `);return`sha256:${Q.digest("hex")}`}function m7($){let Z=$.sourceMessages.at(-1),Q=WL(Z);return g7.parse({version:1,updated_at:$.updatedAt??new Date().toISOString(),...$.conversationId?.trim()?{conversation_id:$.conversationId.trim()}:{},source_message_count:$.sourceMessages.length,source_prefix_hash:jL($.sourceMessages),...Q?{source_last_message_key:Q}:{},messages:ZW($.compactedMessages),...$.systemPrompt!==void 0?{system_prompt:$.systemPrompt}:{}})}function l6($,Z){if(!($.source_message_count<=Z.length))return;let X=!!$.source_prefix_hash&&jL(Z,$.source_message_count)===$.source_prefix_hash,J=Z[$.source_message_count-1],W=!$.source_prefix_hash&&$.source_message_count>0&&!!$.source_last_message_key&&WL(J)===$.source_last_message_key;if(!(X||W))return;return[...ZW($.messages),...ZW(Z.slice($.source_message_count))]}function Y$($){let Z=g7.safeParse($);return Z.success?Z.data:void 0}function ax($){return $?JSON.parse(JSON.stringify($)):void 0}function nx($){return $?JSON.parse(JSON.stringify($)):void 0}function ox($){let Z=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,X=(Array.isArray(Z?.history)?Z.history:[]).filter((j)=>!!j&&typeof j==="object"&&!Array.isArray(j)).flatMap((j)=>{let Y=typeof j.ref==="string"?j.ref.trim():"",V=Number(j.createdAt),B=Number(j.runCount);if(!Y||!Number.isFinite(V)||!Number.isInteger(B))return[];return[{ref:Y,createdAt:V,runCount:B,...j.kind==="stash"||j.kind==="commit"?{kind:j.kind}:{}}]}),J=X.at(-1),W=$?.checkpointEnabled===!0?!0:void 0;if(!W&&X.length===0)return;return{...W?{enabled:W}:{},...J?{latest:J}:{},history:X}}function u$($){let{session:Z}=$,Q=ax(Z.metadata);return{version:1,sessionId:Z.sessionId,source:Z.source,status:Z.status,createdAt:Z.startedAt,updatedAt:Z.updatedAt,endedAt:Z.endedAt??null,exitCode:Z.exitCode??null,interactive:Z.interactive,workspace:{cwd:Z.cwd,root:Z.workspaceRoot},model:{providerId:Z.provider,modelId:Z.model},capabilities:{enableTools:Z.enableTools,enableSpawn:Z.enableSpawn,enableTeams:Z.enableTeams},lineage:{...Z.parentSessionId?{parentSessionId:Z.parentSessionId}:{},...Z.parentAgentId?{parentAgentId:Z.parentAgentId}:{},...Z.agentId?{agentId:Z.agentId}:{},...Z.conversationId?{conversationId:Z.conversationId}:{},isSubagent:Z.isSubagent},...Z.teamName?{team:{name:Z.teamName}}:{},...Z.prompt?{prompt:Z.prompt}:{},...Q?{metadata:Q}:{},...Z.messagesPath?{artifacts:{messagesPath:Z.messagesPath}}:{},...$.messages?{messages:nx($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let X=ox(Q);return X?{checkpoint:X}:{}})()}}function QW($){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 p6($){if(!$)return;return JSON.parse(JSON.stringify($))}var Yy=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function VL($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function BL($){if(!$)return;let{userInstructionService:Z,...Q}=$;return JSON.parse(JSON.stringify(Q))}function KL($,Z){let Q={...$.config,sessionId:Z},X=sx({providerId:$.config.providerId,sessionId:Z,source:$.source,defaultSource:Z0.CORE,client:{name:$.localRuntime?.extensionContext?.client?.name,version:$.localRuntime?.extensionContext?.client?.version,versionHeaderFallback:$.config.headers?.["X-CLIENT-VERSION"],platform:$.localRuntime?.extensionContext?.client?.platform,platformVersion:$.localRuntime?.extensionContext?.client?.platformVersion,isMultiRoot:$.localRuntime?.extensionContext?.client?.isMultiRoot},coreVersion:k$,openAiCodex:{accessToken:$.config.apiKey,userAgentVersion:process.env.npm_package_version},headers:{config:$.config.headers}});if(X)Q.headers=X;return Q}function _L($){return k0($.sessionMetadata,{mode:$.mode,version:$.localRuntime?.extensionContext?.client?.version})}function GL($){return{..._L($),source:$.source??Z0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0}}function HL($){let Z=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{sessionId:typeof Z.sessionId==="string"?Z.sessionId:void 0,agentId:typeof Z.agentId==="string"?Z.agentId:"",conversationId:typeof Z.conversationId==="string"?Z.conversationId:"",runId:typeof Z.runId==="string"?Z.runId:void 0,iteration:typeof Z.iteration==="number"?Z.iteration:0,toolCallId:typeof Z.toolCallId==="string"?Z.toolCallId:void 0,metadata:Z.metadata&&typeof Z.metadata==="object"&&!Array.isArray(Z.metadata)?Z.metadata:void 0}}function x2($,Z,Q){$.manifest.push(Z),$.handlers.set(Z.capabilityName,Q)}function UL($,Z){let Q={manifest:[],handlers:new Map};for(let J of Object.keys(Z.toolExecutors??{}).filter(jy)){let W=Z.toolExecutors?.[J];if(typeof W!=="function")continue;x2(Q,{kind:"toolExecutor",executor:J,capabilityName:`${Xy}${J}`},async({payload:j,abortSignal:Y,progress:V})=>{let B=Array.isArray(j.args)?[...j.args]:[],K={...HL(j.context),signal:Y,emitUpdate:(G)=>{V({update:G})}};return{result:await W(...B,K)}})}for(let J of $?.extraTools??[])x2(Q,{kind:"tool",name:J.name,description:J.description,inputSchema:p6(J.inputSchema)??{},...J.lifecycle?{lifecycle:p6(J.lifecycle)}:{},capabilityName:`${$y}${J.name}`},async({payload:W,abortSignal:j,progress:Y})=>{let V={...HL(W.context),signal:j};return{result:await J.execute(W.input,{...V,emitUpdate:(K)=>{Y({update:K})}})}});let X=$?.hooks;if(X)for(let J of Yy){let W=X[J];if(typeof W!=="function")continue;x2(Q,{kind:"hook",name:J,capabilityName:`${Zy}${J}`},async({payload:j})=>({control:await W(j.context)}))}if($?.compaction?.compact){let J=$.compaction.compact;x2(Q,{kind:"compaction",capabilityName:ex,config:VL($.compaction)},async({payload:W})=>({result:await J(W.context)}))}if($?.checkpoint?.createCheckpoint){let J=$.checkpoint.createCheckpoint;x2(Q,{kind:"checkpoint",capabilityName:tx,config:VL($.checkpoint)},async({payload:W})=>({result:await J(W.context)}))}if($?.onConsecutiveMistakeLimitReached){let J=$.onConsecutiveMistakeLimitReached;x2(Q,{kind:"mistakeLimit",capabilityName:Qy},async({payload:W})=>({result:await J(W.context)}))}if($?.userInstructionService){let J=$.userInstructionService;x2(Q,{kind:"userInstructionService",capabilityName:Jy},async()=>{return await J.start().catch(()=>{}),{snapshot:{records:{skill:J.listRecords("skill"),rule:J.listRecords("rule"),workflow:J.listRecords("workflow")},runtimeCommands:J.listRuntimeCommands()}}})}return Q}function zL($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let Z=$.message;if(typeof Z==="string"&&Z.trim())return Z.trim()}return}function Vy($){return zL($)??"Capability request was cancelled."}function By($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function Ky($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function Gy($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=typeof Z.inputTokens==="number"?Z.inputTokens:void 0,X=typeof Z.outputTokens==="number"?Z.outputTokens:void 0;if(Q===void 0||X===void 0)return;return{inputTokens:Q,outputTokens:X,cacheReadTokens:typeof Z.cacheReadTokens==="number"?Z.cacheReadTokens:0,cacheWriteTokens:typeof Z.cacheWriteTokens==="number"?Z.cacheWriteTokens:0,totalCost:typeof Z.totalCost==="number"?Z.totalCost:0}}function FL($){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 JW($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function d$($,Z){return JW($?.[Z])??0}function Hy($){let Z=$?.delta&&typeof $.delta==="object"?$.delta:void 0,Q=$?.totals&&typeof $.totals==="object"?$.totals:void 0,X=$?.agent&&typeof $.agent==="object"?$.agent:void 0,J=X?.teamRole==="teammate"||X?.teamRole==="lead"?X.teamRole:void 0;return{event:{type:"usage",agentId:typeof X?.agentId==="string"?X.agentId:void 0,conversationId:typeof X?.conversationId==="string"?X.conversationId:void 0,parentAgentId:typeof X?.parentAgentId==="string"?X.parentAgentId:void 0,inputTokens:d$(Z,"inputTokens"),outputTokens:d$(Z,"outputTokens"),cacheReadTokens:d$(Z,"cacheReadTokens"),cacheWriteTokens:d$(Z,"cacheWriteTokens"),cost:JW(Z?.totalCost),totalInputTokens:d$(Q,"inputTokens"),totalOutputTokens:d$(Q,"outputTokens"),totalCacheReadTokens:d$(Q,"cacheReadTokens"),totalCacheWriteTokens:d$(Q,"cacheWriteTokens"),totalCost:JW(Q?.totalCost)},teamAgentId:typeof X?.teamAgentId==="string"?X.teamAgentId:void 0,teamRole:J}}function Uy($){let Z=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,Q=$?.reason??Z?.finishReason,X=Ky(Q)?Q:Q==="failed"?"error":"completed",J=Gy($?.usage??Z?.usage);return{type:"done",reason:X,text:typeof $?.text==="string"?$.text:typeof Z?.text==="string"?Z.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof Z?.iterations==="number"?Z.iterations:0,usage:J}}function y2($,Z){return $.error?.message??`hub command failed: ${Z}`}function y4($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function OL($){let Z=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof Z?.parentSessionId==="string"?Z.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof Z?.agentId==="string"?Z.agentId:void 0),parentAgentId:typeof Z?.parentAgentId==="string"?Z.parentAgentId:void 0,conversationId:typeof Z?.conversationId==="string"?Z.conversationId:void 0,isSubagent:typeof Z?.isSubagent==="boolean"?Z.isSubagent:!1,source:typeof Z?.source==="string"?Z.source:Z0.CORE,pid:typeof Z?.pid==="number"?Z.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:y4($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:y4($.status)==="completed"?0:y4($.status)==="failed"?1:void 0,status:y4($.status),interactive:Z?.interactive===!0,provider:typeof Z?.provider==="string"?Z.provider:"hub",model:typeof Z?.model==="string"?Z.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof Z?.teamName==="string"?Z.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??Z?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??Z?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??Z?.enableTeams===!0,prompt:typeof Z?.prompt==="string"?Z.prompt:void 0,metadata:Z,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof Z?.messagesPath==="string"?Z.messagesPath:void 0,hookPath:typeof Z?.hookPath==="string"?Z.hookPath:void 0}}function l$($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$;return Z.version===1&&typeof Z.sessionId==="string"?JSON.parse(JSON.stringify(Z)):void 0}function Fy($){let Z=l$($?.snapshot);if(Z)return QW(Z);let Q=$?.session;return Q?OL(Q):void 0}function LL($,Z,Q){let X=Q?.workspaceRoot?.trim()||Z.config.workspaceRoot?.trim()||Z.config.cwd?.trim();if(!X)throw Error("Hub runtime did not return a resolved workspace path.");let J=Q?.cwd?.trim()||Z.config.cwd?.trim()||X;return Z1.parse({version:1,session_id:$,source:Z.source??Z0.CORE,pid:process.pid,started_at:new Date(Q?.createdAt??Date.now()).toISOString(),status:y4(Q?.status),interactive:Z.interactive===!0,provider:Z.config.providerId,model:Z.config.modelId,cwd:J,workspace_root:X,team_name:Z.config.teamName,enable_tools:Z.config.enableTools,enable_spawn:Z.config.enableSpawnAgent,enable_teams:Z.config.enableAgentTeams,prompt:Z.prompt?.trim()||void 0,metadata:_L(Z)})}function DL($,Z){return Z1.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??Z.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class I2{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new C4;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,Z){this.clientContext=Z,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:Z?.workspaceRoot,cwd:Z?.cwd},this.defaultCapabilities=o0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(Q)=>this.requestPendingPromptsList(Q),update:(Q)=>this.requestPendingPromptUpdate(Q),delete:(Q)=>this.requestPendingPromptDelete(Q)},this.client=this.createClient($.url)}createClient($){return new j$({...this.clientOptions,url:$})}async replaceClient($){let Z=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(Z.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!$L($,"session.create"))return!1;let Z=await ZL({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!Z)return!1;return await this.replaceClient(Z),!0}registerPlannedSession($,Z,Q){if(this.sessionCapabilities.set($,Z),Q.size>0)this.sessionClientContributionHandlers.set($,Q);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let Z=this.resolveCapabilities($),Q=UL($.localRuntime,Z),X=$.config.sessionId?.trim()||YL(),J=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:p6(KL($,X)),metadata:GL($),runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:p6($.toolPolicies),initialMessages:$.initialMessages,...$.initialCompactionState?{initialCompactionState:$.initialCompactionState}:{}});this.registerPlannedSession(X,Z,Q.handlers);let W;try{W=await J()}catch(K){if(this.cleanupPlannedSession(X),await this.recoverLocalHubStartupDeadlock(K)){this.registerPlannedSession(X,Z,Q.handlers);try{W=await J()}catch(G){throw this.cleanupPlannedSession(X),G}}else throw K}let j=l$(W.payload?.snapshot),Y=W.payload?.session,V=(j?.sessionId??Y?.sessionId)?.trim();if(!V)throw this.cleanupPlannedSession(X),Error("Hub runtime did not return a session id.");let B;try{B=j?DL(j,$):LL(V,$,Y)}catch(K){throw this.cleanupPlannedSession(X),K}if(V!==X)this.cleanupPlannedSession(X),this.registerPlannedSession(V,Z,Q.handlers);return{sessionId:V,manifest:B,manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.start)throw Error("start is required when restore.messages is true");let X=$.start,J=X?this.resolveCapabilities(X):void 0,W=X?UL(X.localRuntime,J??{}):{manifest:[],handlers:new Map},j,Y;if(X)j=X.config.sessionId?.trim()||YL(),Y=KL(X,j);if(j&&J)this.sessionCapabilities.set(j,J);if(j&&W.handlers.size>0)this.sessionClientContributionHandlers.set(j,W.handlers),this.ensureSessionSubscription(j);let V;try{V=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...X?{workspaceRoot:X.config.workspaceRoot?.trim()||X.config.cwd,cwd:X.config.cwd??$.cwd,sessionConfig:p6(Y),metadata:GL(X),runtimeOptions:{...W.manifest.length>0?{clientContributions:W.manifest}:{},...X.localRuntime?.configExtensions?{configExtensions:X.localRuntime.configExtensions}:{}},toolPolicies:p6(X.toolPolicies),...X.initialCompactionState?{initialCompactionState:X.initialCompactionState}:{}}:{}},Z)}catch(F){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw F}if(!V.ok){let F=typeof V.payload?.error==="string"?V.payload.error:"session.restore failed";if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error(F)}let B=l$(V.payload?.snapshot),K=V.payload?.session,G=(B?.sessionId??K?.sessionId)?.trim();if(Q&&!G){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error("Hub checkpoint restore returned no session id")}if(G&&j&&G!==j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);if(G&&J)this.sessionCapabilities.set(G,J);if(G&&W.handlers.size>0)this.sessionClientContributionHandlers.set(G,W.handlers);if(G)this.ensureSessionSubscription(G);let H=Array.isArray(V.payload?.messages)?V.payload.messages:void 0,U=V.payload?.checkpoint;if(!U){if(G)this.cleanupPlannedSession(G);else if(j)this.cleanupPlannedSession(j);throw Error("Hub checkpoint restore returned no checkpoint")}try{return{sessionId:G,startResult:G?{sessionId:G,manifest:B?DL(B,X??{}):LL(G,X??{},K),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:H,checkpoint:U}}catch(F){if(G)this.cleanupPlannedSession(G);else if(j)this.cleanupPlannedSession(j);throw F}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,updated:Z.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let Z=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(Z.payload?.prompts)?Z.payload.prompts:[],prompt:Z.payload?.prompt,removed:Z.payload?.removed===!0}}async getAccumulatedUsage($){let Z=await this.client.command("session.get",{includeSnapshot:!0},$),Q=l$(Z.payload?.snapshot);if(Q){let j=Q.usage?{...Q.usage}:void 0,Y=Q.aggregateUsage?{...Q.aggregateUsage}:void 0;return j||Y?{usage:j,aggregateUsage:Y}:void 0}let X=Z.payload?.session,J=FL(X?.usage),W=FL(X?.aggregateUsage);return J||W?{usage:J,aggregateUsage:W}:void 0}async abort($,Z){await this.client.command("run.abort",{sessionId:$,reason:zL(Z)},$)}async proceedWhileRunning($,Z){let Q=await this.client.command("run.proceed_while_running",{sessionId:$,...Z?{toolCallId:Z}:{}},$);return typeof Q.payload?.detachedCount==="number"?Q.payload.detachedCount:0}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,Z]of this.sessionSubscriptions){Z();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(I$(Q))return;throw Q}return Fy(Z.payload)}async listSessions($=100){let Z=await this.client.command("session.list",{limit:$}),Q=Array.isArray(Z.payload?.snapshots)?Z.payload.snapshots.flatMap((J)=>{let W=l$(J);return W?[QW(W)]:[]}):[];if(Q.length>0)return Q;return(Z.payload?.sessions??[]).map(OL)}async listSettings($){let Z=await this.client.command("settings.list",BL($));if(!Z.ok)throw Error(y2(Z,"settings.list"));return Z.payload?.snapshot}async toggleSetting($){let Z=await this.client.command("settings.toggle",BL($));if(!Z.ok)throw Error(y2(Z,"settings.toggle"));return{snapshot:Z.payload?.snapshot,changedTypes:Array.isArray(Z.payload?.changedTypes)?Z.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,Z){let Q={...Z.metadata??{}};if(typeof Z.prompt==="string")Q.prompt=Z.prompt;if(typeof Z.title==="string")Q.title=Z.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:Q})).ok}}async updateSessionConnection($,Z){let Q=$.trim();if(!Q)return;let X=await this.client.command("session.update_connection",{sessionId:Q,updates:Z},Q);if(!X.ok)throw Error(y2(X,"session.update_connection"))}async updateSessionCompactionState($,Z){let Q=$.trim();if(!Q)return{updated:!1};let X=await this.client.command("session.compaction.update",{sessionId:Q,state:Z},Q);if(!X.ok)XW(this.telemetry,{component:"core",operation:"hub.runtime_host.update_session_compaction_state",error:Error(y2(X,"session.compaction.update")),severity:"warn",handled:!0,context:{command:"session.compaction.update",sessionId:Q,errorCode:X.error?.code}});return{updated:X.ok&&X.payload?.updated===!0}}async readSessionCompactionState($){let Z=$.trim();if(!Z)return;let Q=await this.client.command("session.compaction.get",{sessionId:Z},Z);if(!Q.ok)throw Error(y2(Q,"session.compaction.get"));return Y$(Q.payload?.state)}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw XW(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(y2(Q,"session.messages")),severity:Q.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:Z,errorCode:Q.error?.code,runtimeAddress:this.runtimeAddress}}),Error(y2(Q,"session.messages"));let X=Q.payload?.messages;return Array.isArray(X)?X:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,Z){return this.events.subscribe($,Z)}ensureSessionSubscription($){let Z=$.trim();if(!Z||this.sessionSubscriptions.has(Z))return;let Q=this.client.subscribe((X)=>{this.handleHubEvent(X)},{sessionId:Z});this.sessionSubscriptions.set(Z,typeof Q==="function"?Q:()=>{})}disposeSessionSubscription($){let Z=$.trim();if(!Z)return;this.sessionSubscriptions.get(Z)?.(),this.sessionSubscriptions.delete(Z),this.agentDoneEmittedForCurrentRunBySession.delete(Z)}resolveCapabilities($){return o0(this.defaultCapabilities,$.capabilities)??{}}emitToolCallContentStart($){this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:{type:"content_start",contentType:"tool",toolCallId:$.toolCallId,toolName:$.toolName,input:$.toolInput}}})}emitAgentDoneIfNeeded($){if(this.agentDoneEmittedForCurrentRunBySession.has($.sessionId))return;this.agentDoneEmittedForCurrentRunBySession.add($.sessionId),this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:Uy($.payload)}})}handleHubEvent($){let Z=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",Q,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((Q)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",Q,$)});return}if(!Z)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(Z);let Q=l$($.payload?.snapshot),X=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});this.events.emit({type:"status",payload:{sessionId:Z,status:X?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"session.notice":{let Q=$.payload?.noticeType,X=$.payload?.displayRole,J=$.payload?.reason,W=$.payload?.agent&&typeof $.payload.agent==="object"?$.payload.agent:void 0,j=W?.teamRole==="lead"||W?.teamRole==="teammate"?W.teamRole:void 0;this.events.emit({type:"agent_event",payload:{sessionId:Z,...j?{teamRole:j}:{},...typeof W?.teamAgentId==="string"?{teamAgentId:W.teamAgentId}:{},event:{type:"notice",...typeof W?.agentId==="string"?{agentId:W.agentId}:{},...typeof W?.conversationId==="string"?{conversationId:W.conversationId}:{},...typeof W?.parentAgentId==="string"?{parentAgentId:W.parentAgentId}:{},noticeType:Q==="recovery"||Q==="stop"?Q:"status",message:typeof $.payload?.message==="string"?$.payload.message:"",...X==="system"||X==="status"?{displayRole:X}:{},...typeof J==="string"?{reason:J}:{},...$.payload?.metadata&&typeof $.payload.metadata==="object"?{metadata:$.payload.metadata}:{}}}});return}case"assistant.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"";if(!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"text",text:Q}}});return}case"assistant.media":{let Q=$.payload?.media&&typeof $.payload.media==="object"&&!Array.isArray($.payload.media)?$.payload.media:void 0;if(!Wy(Q))return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"media",media:Q}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let Q=typeof $.payload?.text==="string"?$.payload.text:"",X=$.payload?.redacted===!0;if(!Q&&!X)return;this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_start",contentType:"reasoning",reasoning:Q,redacted:X}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:Z,payload:$.payload});return}case"usage.updated":{let Q=Hy($.payload);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:Q.event,teamAgentId:Q.teamAgentId,teamRole:Q.teamRole}});return}case"tool.started":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q&&this.pendingApprovalToolCallIds.delete(Q))return;this.emitToolCallContentStart({sessionId:Z,toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.updated":{this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_update",contentType:"tool",toolCallId:typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,update:$.payload?.update}}});return}case"tool.finished":{let Q=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(Q)this.pendingApprovalToolCallIds.delete(Q);this.events.emit({type:"agent_event",payload:{sessionId:Z,event:{type:"content_end",contentType:"tool",toolCallId:Q,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let Q=l$($.payload?.snapshot),X=$.payload?.session;if(Q)this.events.emit({type:"session_snapshot",payload:{sessionId:Z,snapshot:Q}});let J=X?.status??Q?.status;if(J)this.events.emit({type:"status",payload:{sessionId:Z,status:J}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:Z,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let Q=$.payload?.prompt;if(!Q)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:Z,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}});return}case"run.completed":case"run.failed":case"run.aborted":{let Q=l$($.payload?.snapshot),X=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:Z,payload:{...$.payload,reason:X}}),Q?.interactive===!0&&P0(Q.status))return;this.events.emit({type:"ended",payload:{sessionId:Z,reason:X,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,Z,Q){try{XW(this.telemetry,{component:"core",operation:$,error:Z,severity:"warn",handled:!0,context:{event:Q.event,sessionId:Q.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let Z=$.sessionId?.trim();if(!Z)return;let Q=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(Q&&Q!==this.client.getClientId())return;let X=typeof $.payload?.requestId==="string"?$.payload.requestId:"",J=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!X)return;let W=this.sessionClientContributionHandlers.get(Z)?.get(J);if(!W){await this.client.command("capability.respond",{requestId:X,ok:!1,error:`No client contribution handler registered for capability ${J} in session ${Z}.`},Z).catch(()=>{});return}let j=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},Y=new AbortController;this.activeCapabilityAbortControllers.set(X,Y);let V=(B)=>{this.client.command("capability.progress",{requestId:X,payload:B},Z).catch((K)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",K,$)})};try{let B=await W({payload:j,abortSignal:Y.signal,progress:V});if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:X,ok:!0,payload:B},Z)}catch(B){if(Y.signal.aborted)return;await this.client.command("capability.respond",{requestId:X,ok:!1,error:B instanceof Error?B.message:String(B)},Z)}finally{this.activeCapabilityAbortControllers.delete(X)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let Z=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!Z)return;let Q=this.activeCapabilityAbortControllers.get(Z);if(!Q)return;Q.abort(Vy($.payload.error))}async handleApprovalRequested($){let Z=$.sessionId?.trim();if(!Z)return;let Q=this.sessionCapabilities.get(Z)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!Q)return;let X=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",W=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!X||!J||!W)return;let j=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},Y=By($.payload?.inputJson);this.pendingApprovalToolCallIds.add(J),this.emitToolCallContentStart({sessionId:Z,toolCallId:J,toolName:W,toolInput:Y});let V=await Promise.resolve(Q({sessionId:Z,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:Z,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:J,toolName:W,input:Y,policy:j})).catch((B)=>({approved:!1,reason:B instanceof Error?B.message:`Tool approval request failed: ${String(B)}`}));await this.client.command("approval.respond",{approvalId:X,approved:V.approved,reason:V.reason},Z).catch(()=>{})}}class c7 extends I2{constructor($){super({url:d6($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}import{existsSync as Ly,mkdirSync as Dy}from"node:fs";import{join as _y}from"node:path";import{asBool as I4,asOptionalString as m1,asString as c1,ensureSessionSchema as zy,loadSqliteDb as Oy,nowIso as u7,toBoolInt as h4}from"@cline/shared/db";import{resolveDbDataDir as Ny}from"@cline/shared/storage";class p${sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??Ny()}init(){this.getRawDb()}ensureSessionsDir(){if(!Ly(this.sessionsDirPath))Dy(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return _y(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=Oy(this.sessionDbPath());return zy($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,Z=[]){return this.getRawDb().prepare($).run(...Z)}queryOne($,Z=[]){return this.getRawDb().prepare($).get(...Z)??void 0}queryAll($,Z=[]){return this.getRawDb().prepare($).all(...Z)}create($){let Z=u7();this.run(`INSERT OR REPLACE INTO sessions (
@@ -524,7 +524,7 @@ ${JSON.stringify(X,null,2)}`}startClaimLeaseHeartbeat($){let Z=Math.max(1000,Mat
524
524
  `;if(yL(vL(J),{recursive:!0}),IL(J,j,"utf8"),!this.messagesArtifactUploader)return;try{await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:J,contents:j,row:X})}catch(Y){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:Y})}}resolveCompactionPath($){let{manifest:Z}=this.readManifestFile($);return Z?.compaction_path?.trim()||this.artifacts.sessionCompactionPath($)}updateCompactionPath($,Z){let Q=this.readManifestFile($);if(!Q.manifest)return;if(Q.manifest.compaction_path===Z)return;this.writeSessionManifest(Q.path,{...Q.manifest,compaction_path:Z})}async readSessionCompactionState($){let Z=this.resolveCompactionPath($);try{return Y$(JSON.parse(await hL(Z,"utf8")))}catch(Q){if(KI(Q))return;this.logger?.debug("Ignoring invalid session compaction state",{sessionId:$,path:Z,error:Q,recovery:"Canonical history is unchanged; deleting the sidecar is safe."});return}}async persistSessionCompactionState($,Z){let Q=this.resolveCompactionPath($),X=g7.parse(Z);await xL(Q,`${JSON.stringify(X,null,2)}
525
525
  `),this.updateCompactionPath($,Q)}async deleteSessionCompactionState($){await YI(this.resolveCompactionPath($),{force:!0}),this.updateCompactionPath($,void 0)}appendStaleSessionHookLog($,Z,Q,X,J){let j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??VI(BI(),"hooks.jsonl");JI(j,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:X,sessionId:Z,pid:Q,source:J})}
526
526
  `,"utf8")}}import{appendFileSync as HI}from"node:fs";import{join as UI}from"node:path";import{resolveRootSessionId as gL}from"@cline/shared";import{ensureHookLogDir as FI}from"@cline/shared/storage";import{z as HW}from"zod";var LI=HW.looseObject({task:HW.string().optional(),systemPrompt:HW.string().optional()});class l7{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,Z,Q,X){this.adapter=$;this.manifestStore=Z;this.toPersistedMessages=Q;this.heartbeatLogIntervalMs=X}teamTaskQueueKey($,Z){return`${$}::${Z}`}activeTeamTaskSessionId($,Z){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,Z))?.at(-1)}buildSubsessionRow($,Z){let Q=Y6($.metadata);return{sessionId:Z.sessionId,source:$.source,pid:process.ppid,startedAt:Z.startedAt,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:!1,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:Z.parentSessionId,parentAgentId:Z.parentAgentId,agentId:Z.agentId,conversationId:Z.conversationId??null,isSubagent:!0,prompt:Z.prompt,metadata:R4({metadata:k0(void 0,{mode:Z.mode,version:Q?.version}),prompt:Z.prompt}),hookPath:"",messagesPath:Z.messagesPath,updatedAt:Z.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let Z=gL($.sessionContext);if(!Z)return;let Q=LI.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:Z,parentAgentId:$.agent_id,task:Q.success?Q.data.task:void 0,systemPrompt:Q.success?Q.data.systemPrompt:void 0})}async upsertSubagentSession($){let Z=$.rootSessionId;if(!Z)return;let Q=await this.adapter.getSession(Z);if(!Q)return;let X=P7(Z,$.agentId),J=await this.adapter.getSession(X),W=U0(),j=this.manifestStore.artifacts.subagentArtifactPaths(X,$.agentId,this.activeTeamTaskSessionId(Z,$.parentAgentId)),Y=$.prompt??J?.prompt??void 0;if(!Y)Y=await this.adapter.claimSpawnRequest(Z,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!J){let V=this.buildSubsessionRow(Q,{sessionId:X,mode:"subagent",parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:Y,startedAt:W,...j});return await this.adapter.upsertSession(V),this.manifestStore.initializeMessagesFile(V,j.messagesPath,W),X}return await this.adapter.updateSession({sessionId:X,setRunning:!0,parentSessionId:Z,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:J.prompt??Y??null,metadata:R4({metadata:k0(J.metadata,{mode:"subagent",version:Y6(Q.metadata)?.version}),prompt:J.prompt??Y??null}),expectedStatusLock:J.statusLock}),X}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let Z=gL($.sessionContext);if(!Z)return;if($.hookName==="session_shutdown"){let Q=P7(Z,$.agent_id);return await this.adapter.getSession(Q)?Q:void 0}return await this.upsertSubagentSession({agentId:$.agent_id,parentAgentId:$.parent_agent_id,conversationId:$.taskId,rootSessionId:Z})}async applySubagentStatus($,Z){await this.applySubagentStatusBySessionId($,TJ(Z))}async applySubagentStatusBySessionId($,Z){let Q=await this.adapter.getSession($);if(!Q)return;let X=P0(Z)?null:U0(),J=P0(Z)?null:Z==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:Z,endedAt:X,exitCode:J,expectedStatusLock:Q.statusLock})}async applyStatusToRunningChildSessions($,Z){if(!$)return;let Q=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let X of Q)await this.applySubagentStatusBySessionId(X.sessionId,Z)}async onTeamTaskStart($,Z,Q){let X=await this.adapter.getSession($);if(!X)return;let J=AJ($,Z),W=U0(),{messagesPath:j}=this.manifestStore.artifacts.subagentArtifactPaths(J,Z),Y=this.buildSubsessionRow(X,{sessionId:J,mode:"team",parentSessionId:$,parentAgentId:"lead",agentId:Z,prompt:Q||`Team task for ${Z}`,startedAt:W,messagesPath:j});await this.adapter.upsertSession(Y),this.manifestStore.initializeMessagesFile(Y,j,W);let V=this.teamTaskQueueKey($,Z),B=this.teamTaskSessionsByAgent.get(V)??[];B.push(J),this.teamTaskSessionsByAgent.set(V,B)}async onTeamTaskEnd($,Z,Q,X,J,W){let j=this.teamTaskQueueKey($,Z),Y=this.teamTaskSessionsByAgent.get(j);if(!Y||Y.length===0)return;let V=Y.shift();if(Y.length===0)this.teamTaskSessionsByAgent.delete(j);if(!V)return;let B=J?.messages??W,K=this.toPersistedMessages(B,J,W);if(K)await this.manifestStore.persistSessionMessages(V,K);await this.applySubagentStatusBySessionId(V,Q),this.teamTaskLastHeartbeatBySession.delete(V),this.teamTaskLastProgressLineBySession.delete(V)}async onTeamTaskProgress($,Z,Q,X){let J=this.teamTaskQueueKey($,Z),W=this.teamTaskSessionsByAgent.get(J)?.[0];if(!W)return;let j=Q.trim();if(!j)return;let Y=X?.kind??"progress";if(Y==="heartbeat"){let B=Date.now(),K=this.teamTaskLastHeartbeatBySession.get(W)??0;if(B-K<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(W,B)}let V=Y==="heartbeat"?"[progress] heartbeat":Y==="text"?`[progress] text: ${j}`:`[progress] ${j}`;if(this.teamTaskLastProgressLineBySession.get(W)===V)return;this.teamTaskLastProgressLineBySession.set(W,V)}async handleSubAgentStart($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;await this.applySubagentStatusBySessionId(Q,"running")}async handleSubAgentEnd($,Z){let Q=await this.upsertSubagentSession({agentId:Z.subAgentId,parentAgentId:Z.parentAgentId,conversationId:Z.conversationId,prompt:Z.input.task,rootSessionId:$});if(!Q)return;if(Z.error){await this.applySubagentStatusBySessionId(Q,"failed");return}let X=this.toPersistedMessages(Z.agentResult?.messages,Z.agentResult);if(X)await this.manifestStore.persistSessionMessages(Q,X);let J=Z.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(Q,J==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let Q=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??UI(FI(),"hooks.jsonl");HI(Q,`${JSON.stringify({ts:U0(),...$})}
527
- `,"utf8")}}import{formatUserInputBlock as hI}from"@cline/shared";import{existsSync as DI,readdirSync as _I,readFileSync as zI}from"node:fs";import{basename as mL,extname as OI,join as NI}from"node:path";import{stripUtf8Bom as qI}from"@cline/shared";import{resolveAgentConfigSearchPaths as AI}from"@cline/shared/storage";import uL from"yaml";import{z as s0}from"zod";var dL=s0.object({name:s0.string().trim().min(1),description:s0.string().trim().min(1),tools:s0.union([s0.string(),s0.array(s0.string())]).optional(),skills:s0.union([s0.string(),s0.array(s0.string())]).optional(),providerId:s0.string().trim().min(1).optional(),modelId:s0.string().trim().min(1).optional(),maxIterations:s0.number().int().positive().optional()});function TI($){$=qI($);let Z=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!Z)throw Error("Missing YAML frontmatter block in agent config file.");let Q=Z[0].length,X=/^---[^\S\r\n]*(?:\r?\n|$)/gm;X.lastIndex=Q;let J,W=Array.from($.matchAll(X)).filter((j)=>j.index>=Q);for(let j of W){let Y=j.index,V=$.slice(Q,Y);try{let B=uL.parse(V);if(!B||typeof B!=="object"||Array.isArray(B))continue;dL.parse(B);let K=$.slice(Y+j[0].length);J={frontmatter:V,body:K}}catch{}}if(J)return J;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function cL($){if($===void 0)return;let Z=Array.isArray($)?$:$.split(",");return Array.from(new Set(Z.map((Q)=>Q.trim()).filter((Q)=>Q.length>0)))}function EI($){return $.trim().toLowerCase()}function MI($){let Z=OI($).toLowerCase();return Z===".yml"||Z===".yaml"}function UW($,Z={}){let{frontmatter:Q,body:X}=TI($),J=uL.parse(Q);if(!J||typeof J!=="object"||Array.isArray(J))throw Error("Agent config frontmatter must be a YAML mapping.");let W=dL.parse(J),j=X.trim();if(!j)throw Error("Missing system prompt body in agent config file.");return{name:W.name,description:W.description,tools:cL(W.tools),skills:cL(W.skills),providerId:W.providerId,modelId:W.modelId,maxIterations:W.maxIterations,systemPrompt:j,path:Z.path}}function p7($){let Z=$.searchPaths??AI($.workspaceRoot),Q=new Map,X=[];for(let W of Z.filter(Boolean)){if(!DI(W))continue;let j;try{j=_I(W,{withFileTypes:!0})}catch(Y){X.push({path:W,error:Y instanceof Error?Y:Error(String(Y))});continue}for(let Y of j){if(!Y.isFile()||!MI(Y.name))continue;let V=NI(W,Y.name);try{let B=zI(V,"utf8"),K=UW(B,{path:V}),G=EI(K.name);if(!Q.has(G))Q.set(G,K)}catch(B){X.push({path:V,error:B instanceof Error?B:Error(String(B))})}}}return{configs:Array.from(Q.values()).sort((W,j)=>(W.path?mL(W.path):W.name).localeCompare(j.path?mL(j.path):j.name)),errors:X}}import{createTool as RI,zodToJsonSchema as CI}from"@cline/shared";import{z as lL}from"zod";var FW="subagent_",i7=64,PI=lL.object({prompt:lL.string().trim().min(1).describe("Task for the subagent to perform")});function fI($){let Z="",Q=!0;for(let X of $.trim().toLowerCase()){let J=X.charCodeAt(0);if(!(J>=97&&J<=122||J>=48&&J<=57||X==="_")||X==="_"){if(!Q)Z+="_",Q=!0;continue}Z+=X,Q=!1}return Q?Z.slice(0,-1):Z}function wI($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z^=$.charCodeAt(Q),Z=Math.imul(Z,16777619);return(Z>>>0).toString(36)}function LW($){let Z=fI($)||"agent",Q=wI($).slice(0,6),X=`${FW}${Z}`;if(X.length<=i7)return X;let J=i7-FW.length-Q.length-1,W=Z.slice(0,Math.max(1,J));return`${FW}${W}_${Q}`.slice(0,i7)}function DW($){let Z=new Set,Q=[];for(let X of[...$].sort((J,W)=>J.name.localeCompare(W.name))){let J=LW(X.name),W=J,j=2;while(Z.has(W)){let Y=`_${j++}`,V=Math.max(1,i7-Y.length);W=`${J.slice(0,V)}${Y}`}Z.add(W),Q.push({toolName:W,config:X})}return Q}function SI($,Z){return{...$,providerId:Z.providerId??$.providerId,modelId:Z.modelId??$.modelId,maxIterations:Z.maxIterations??$.maxIterations}}function r7($){return DW($.agents).map(({toolName:Z,config:Q})=>{return RI({name:Z,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:CI(PI),execute:async(J,W)=>{let j=$.configProvider.getRuntimeConfig(),Y=P6(SI(j,Q)),V=$.createSubAgentTools?await $.createSubAgentTools(Q,J,W):[],B=f6({kind:"subagent",prompt:Q.systemPrompt,configProvider:Y,tools:V,maxIterations:Q.maxIterations,parentAgentId:W.agentId,abortSignal:W.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),K=B.getAgentId(),G=B.getConversationId(),H=W.agentId,U={systemPrompt:Q.systemPrompt,task:J.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:K,conversationId:G,parentAgentId:H,input:U})}catch{}try{let F=await B.run(J.prompt),L={text:F.text,iterations:F.iterations,finishReason:F.finishReason,usage:{inputTokens:F.usage.inputTokens,outputTokens:F.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:K,conversationId:G,parentAgentId:H,input:U,result:L,agentResult:F})}catch{}return L}catch(F){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:K,conversationId:G,parentAgentId:H,input:U,error:F instanceof Error?F:Error(String(F))})}catch{}throw F}},timeoutMs:300000,retryable:!1})})}function u1(){return new Date().toISOString()}function pL($,Z){if(Z<=0)return 0;return Math.round($/Z*100)}function bI($,Z){let Q=new Set;for(let J of Z)if(J.status==="reviewed")Q.add(`${J.outcomeId}:${J.section}`);let X=new Set;for(let J of $){if(J.status==="finalized")continue;for(let W of J.requiredSections)if(!Q.has(`${J.id}:${W}`))X.add(`${J.id}:${W}`)}return[...X].sort((J,W)=>J.localeCompare(W))}function a7($,Z){let Q={idle:0,running:0,stopped:0},X={pending:0,in_progress:0,blocked:0,completed:0},J={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},W={draft:0,in_review:0,finalized:0},j={draft:0,reviewed:0,rejected:0},Y=0,V=0;for(let D of Z.members)if(Q[D.status]+=1,D.role==="lead")Y+=1;else V+=1;let B=[],K=[],G=Z.tasks.filter((D)=>D.status==="completed").length,H=new Map(Z.tasks.map((D)=>[D.id,D]));for(let D of Z.tasks){if(X[D.status]+=1,D.status==="blocked"){B.push(D.id);continue}if(D.status!=="pending")continue;if(D.dependsOn.every((_)=>{return H.get(_)?.status==="completed"}))K.push(D.id)}let U=[],F,L=0;for(let D of Z.runs){if(J[D.status]+=1,D.status==="queued"||D.status==="running")U.push(D.id);let z=D.startedAt.getTime();if(z>=L)L=z,F=D.id}for(let D of Z.outcomes)W[D.status]+=1;for(let D of Z.outcomeFragments)j[D.status]+=1;return{teamName:$,updatedAt:u1(),members:{total:Z.members.length,byStatus:Q,leadCount:Y,teammateCount:V},tasks:{total:Z.tasks.length,byStatus:X,blockedTaskIds:B,readyTaskIds:K,completionPct:pL(G,Z.tasks.length)},runs:{total:Z.runs.length,byStatus:J,activeRunIds:U,latestRunId:F},outcomes:{total:Z.outcomes.length,byStatus:W,finalizedPct:pL(W.finalized,Z.outcomes.length),missingRequiredSections:bI(Z.outcomes,Z.outcomeFragments)},fragments:{total:Z.outcomeFragments.length,byStatus:j}}}function n7($){let{event:Z}=$;switch(Z.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:u1(),taskId:Z.task.id,agentId:Z.task.assignee??Z.task.createdBy};case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:u1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:u1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:u1(),outcomeId:Z.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:u1(),outcomeId:Z.fragment.outcomeId,fragmentId:Z.fragment.id,agentId:Z.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:u1(),taskId:Z.message.taskId,agentId:Z.message.fromAgentId,message:Z.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:u1(),taskId:Z.entry.taskId,agentId:Z.entry.agentId,message:Z.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:u1(),agentId:Z.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:u1()}}import{sanitizeFileName as kI,TeamMessageType as u}from"@cline/shared";import{nanoid as xI}from"nanoid";import{TeamMessageType as q80}from"@cline/shared";function _W($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function iL($,Z){return $?.status==="stopped"&&_W(Z)}var yI=600000,rL="recovered_queued";function II($){return`This is an automatic recovery of interrupted team run ${$.id}. The previous process stopped before completion. Continue the task safely, inspect the current workspace state before making changes, and avoid duplicating completed work.
527
+ `,"utf8")}}import{formatUserInputBlock as hI}from"@cline/shared";import{existsSync as DI,readdirSync as _I,readFileSync as zI}from"node:fs";import{basename as mL,extname as OI,join as NI}from"node:path";import{stripUtf8Bom as qI}from"@cline/shared";import{resolveAgentConfigSearchPaths as AI}from"@cline/shared/storage";import uL from"yaml";import{z as s0}from"zod";var dL=s0.object({name:s0.string().trim().min(1),description:s0.string().trim().min(1),tools:s0.union([s0.string(),s0.array(s0.string())]).optional(),skills:s0.union([s0.string(),s0.array(s0.string())]).optional(),providerId:s0.string().trim().min(1).optional(),modelId:s0.string().trim().min(1).optional(),maxIterations:s0.number().int().positive().optional()});function TI($){$=qI($);let Z=$.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!Z)throw Error("Missing YAML frontmatter block in agent config file.");let Q=Z[0].length,X=/^---[^\S\r\n]*(?:\r?\n|$)/gm;X.lastIndex=Q;let J,W=Array.from($.matchAll(X)).filter((j)=>j.index>=Q);for(let j of W){let Y=j.index,V=$.slice(Q,Y);try{let B=uL.parse(V);if(!B||typeof B!=="object"||Array.isArray(B))continue;dL.parse(B);let K=$.slice(Y+j[0].length);J={frontmatter:V,body:K}}catch{}}if(J)return J;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function cL($){if($===void 0)return;let Z=Array.isArray($)?$:$.split(",");return Array.from(new Set(Z.map((Q)=>Q.trim()).filter((Q)=>Q.length>0)))}function EI($){return $.trim().toLowerCase()}function MI($){let Z=OI($).toLowerCase();return Z===".yml"||Z===".yaml"}function UW($,Z={}){let{frontmatter:Q,body:X}=TI($),J=uL.parse(Q);if(!J||typeof J!=="object"||Array.isArray(J))throw Error("Agent config frontmatter must be a YAML mapping.");let W=dL.parse(J),j=X.trim();if(!j)throw Error("Missing system prompt body in agent config file.");return{name:W.name,description:W.description,tools:cL(W.tools),skills:cL(W.skills),providerId:W.providerId,modelId:W.modelId,maxIterations:W.maxIterations,systemPrompt:j,path:Z.path}}function p7($){let Z=$.searchPaths??AI($.workspaceRoot),Q=new Map,X=[];for(let W of Z.filter(Boolean)){if(!DI(W))continue;let j;try{j=_I(W,{withFileTypes:!0})}catch(Y){X.push({path:W,error:Y instanceof Error?Y:Error(String(Y))});continue}for(let Y of j){if(!Y.isFile()||!MI(Y.name))continue;let V=NI(W,Y.name);try{let B=zI(V,"utf8"),K=UW(B,{path:V}),G=EI(K.name);if(!Q.has(G))Q.set(G,K)}catch(B){X.push({path:V,error:B instanceof Error?B:Error(String(B))})}}}return{configs:Array.from(Q.values()).sort((W,j)=>(W.path?mL(W.path):W.name).localeCompare(j.path?mL(j.path):j.name)),errors:X}}import{createTool as RI,zodToJsonSchema as CI}from"@cline/shared";import{z as lL}from"zod";var FW="subagent_",i7=64,PI=lL.object({prompt:lL.string().trim().min(1).describe("Task for the subagent to perform")});function fI($){let Z="",Q=!0;for(let X of $.trim().toLowerCase()){let J=X.charCodeAt(0);if(!(J>=97&&J<=122||J>=48&&J<=57||X==="_")||X==="_"){if(!Q)Z+="_",Q=!0;continue}Z+=X,Q=!1}return Q?Z.slice(0,-1):Z}function wI($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z^=$.charCodeAt(Q),Z=Math.imul(Z,16777619);return(Z>>>0).toString(36)}function LW($){let Z=fI($)||"agent",Q=wI($).slice(0,6),X=`${FW}${Z}`;if(X.length<=i7)return X;let J=i7-FW.length-Q.length-1,W=Z.slice(0,Math.max(1,J));return`${FW}${W}_${Q}`.slice(0,i7)}function DW($){let Z=new Set,Q=[];for(let X of[...$].sort((J,W)=>J.name.localeCompare(W.name))){let J=LW(X.name),W=J,j=2;while(Z.has(W)){let Y=`_${j++}`,V=Math.max(1,i7-Y.length);W=`${J.slice(0,V)}${Y}`}Z.add(W),Q.push({toolName:W,config:X})}return Q}function SI($,Z){return{...$,providerId:Z.providerId??$.providerId,modelId:Z.modelId??$.modelId,maxIterations:Z.maxIterations??$.maxIterations}}function r7($){return DW($.agents).map(({toolName:Z,config:Q})=>{return RI({name:Z,description:`Use the "${Q.name}" subagent: ${Q.description}`,inputSchema:CI(PI),execute:async(J,W)=>{let j=$.configProvider.getRuntimeConfig(),Y=P6(SI(j,Q)),V=$.createSubAgentTools?await $.createSubAgentTools(Q,J,W):[],B=f6({kind:"subagent",prompt:Q.systemPrompt,configProvider:Y,tools:V,maxIterations:Q.maxIterations,parentAgentId:W.agentId,abortSignal:W.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),K=B.getAgentId(),G=B.getConversationId(),H=W.agentId,U={systemPrompt:Q.systemPrompt,task:J.prompt};if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:K,conversationId:G,parentAgentId:H,input:U})}catch{}try{let F=await B.run(J.prompt),L={text:F.text,iterations:F.iterations,finishReason:F.finishReason,usage:{inputTokens:F.usage.inputTokens,outputTokens:F.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:K,conversationId:G,parentAgentId:H,input:U,result:L,agentResult:F})}catch{}return L}catch(F){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:K,conversationId:G,parentAgentId:H,input:U,error:F instanceof Error?F:Error(String(F))})}catch{}throw F}},timeoutMs:300000,retryable:!1})})}function u1(){return new Date().toISOString()}function pL($,Z){if(Z<=0)return 0;return Math.round($/Z*100)}function bI($,Z){let Q=new Set;for(let J of Z)if(J.status==="reviewed")Q.add(`${J.outcomeId}:${J.section}`);let X=new Set;for(let J of $){if(J.status==="finalized")continue;for(let W of J.requiredSections)if(!Q.has(`${J.id}:${W}`))X.add(`${J.id}:${W}`)}return[...X].sort((J,W)=>J.localeCompare(W))}function a7($,Z){let Q={idle:0,running:0,stopped:0},X={pending:0,in_progress:0,blocked:0,completed:0},J={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},W={draft:0,in_review:0,finalized:0},j={draft:0,reviewed:0,rejected:0},Y=0,V=0;for(let D of Z.members)if(Q[D.status]+=1,D.role==="lead")Y+=1;else V+=1;let B=[],K=[],G=Z.tasks.filter((D)=>D.status==="completed").length,H=new Map(Z.tasks.map((D)=>[D.id,D]));for(let D of Z.tasks){if(X[D.status]+=1,D.status==="blocked"){B.push(D.id);continue}if(D.status!=="pending")continue;if(D.dependsOn.every((_)=>{return H.get(_)?.status==="completed"}))K.push(D.id)}let U=[],F,L=0;for(let D of Z.runs){if(J[D.status]+=1,D.status==="queued"||D.status==="running")U.push(D.id);let z=D.startedAt.getTime();if(z>=L)L=z,F=D.id}for(let D of Z.outcomes)W[D.status]+=1;for(let D of Z.outcomeFragments)j[D.status]+=1;return{teamName:$,updatedAt:u1(),members:{total:Z.members.length,byStatus:Q,leadCount:Y,teammateCount:V},tasks:{total:Z.tasks.length,byStatus:X,blockedTaskIds:B,readyTaskIds:K,completionPct:pL(G,Z.tasks.length)},runs:{total:Z.runs.length,byStatus:J,activeRunIds:U,latestRunId:F},outcomes:{total:Z.outcomes.length,byStatus:W,finalizedPct:pL(W.finalized,Z.outcomes.length),missingRequiredSections:bI(Z.outcomes,Z.outcomeFragments)},fragments:{total:Z.outcomeFragments.length,byStatus:j}}}function n7($){let{event:Z}=$;switch(Z.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:u1(),taskId:Z.task.id,agentId:Z.task.assignee??Z.task.createdBy};case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:u1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:u1(),runId:Z.run.id,taskId:Z.run.taskId,agentId:Z.run.agentId,message:Z.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:u1(),outcomeId:Z.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:u1(),outcomeId:Z.fragment.outcomeId,fragmentId:Z.fragment.id,agentId:Z.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:u1(),taskId:Z.message.taskId,agentId:Z.message.fromAgentId,message:Z.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:u1(),taskId:Z.entry.taskId,agentId:Z.entry.agentId,message:Z.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:u1(),agentId:Z.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:Z.type,ts:u1()}}import{sanitizeFileName as kI,TeamMessageType as u}from"@cline/shared";import{nanoid as xI}from"nanoid";import{TeamMessageType as T80}from"@cline/shared";function _W($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function iL($,Z){return $?.status==="stopped"&&_W(Z)}var yI=600000,rL="recovered_queued";function II($){return`This is an automatic recovery of interrupted team run ${$.id}. The previous process stopped before completion. Continue the task safely, inspect the current workspace state before making changes, and avoid duplicating completed work.
528
528
 
529
529
  ${$.message}`}class zW{agents=new Map;configs=new Map;onTeamEvent;constructor($,Z){if(this.onTeamEvent=Z,$)for(let[Q,X]of Object.entries($))this.addAgent(Q,X)}addAgent($,Z){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let Q={...Z,onEvent:(J)=>{Z.onEvent?.(J),this.emitEvent({type:u.AgentEvent,agentId:$,event:J})}},X=new x$(Q);if(Q.onEvent)X.subscribeEvents(Q.onEvent);this.agents.set($,X),this.configs.set($,Z)}removeAgent($){return this.configs.delete($),this.agents.delete($)}getAgent($){return this.agents.get($)}getAgentIds(){return Array.from(this.agents.keys())}get size(){return this.agents.size}async routeTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:u.TaskStart,agentId:$,message:Z});try{let X=await Q.run(Z);return this.emitEvent({type:u.TaskEnd,agentId:$,result:X}),X}catch(X){let J=X instanceof Error?X:Error(String(X));throw this.emitEvent({type:u.TaskEnd,agentId:$,error:J,messages:Q.getMessages()}),X}}async continueTo($,Z){let Q=this.agents.get($);if(!Q)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:u.TaskStart,agentId:$,message:Z});try{let X=await Q.continue(Z);return this.emitEvent({type:u.TaskEnd,agentId:$,result:X}),X}catch(X){let J=X instanceof Error?X:Error(String(X));throw this.emitEvent({type:u.TaskEnd,agentId:$,error:J,messages:Q.getMessages()}),X}}async runParallel($){let Z=$.map(async(Q)=>{let X=this.agents.get(Q.agentId);if(!X)return{agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata};this.emitEvent({type:u.TaskStart,agentId:Q.agentId,message:Q.message});try{let J=await X.run(Q.message);return this.emitEvent({type:u.TaskEnd,agentId:Q.agentId,result:J}),{agentId:Q.agentId,result:J,metadata:Q.metadata}}catch(J){let W=J instanceof Error?J:Error(String(J));return this.emitEvent({type:u.TaskEnd,agentId:Q.agentId,error:W,messages:X.getMessages()}),{agentId:Q.agentId,result:void 0,error:W,metadata:Q.metadata}}});return Promise.all(Z)}async runSequential($){let Z=[];for(let Q of $){let X=this.agents.get(Q.agentId);if(!X){Z.push({agentId:Q.agentId,result:void 0,error:Error(`Agent "${Q.agentId}" not found in team`),metadata:Q.metadata});continue}this.emitEvent({type:u.TaskStart,agentId:Q.agentId,message:Q.message});try{let J=await X.run(Q.message);this.emitEvent({type:u.TaskEnd,agentId:Q.agentId,result:J}),Z.push({agentId:Q.agentId,result:J,metadata:Q.metadata})}catch(J){let W=J instanceof Error?J:Error(String(J));this.emitEvent({type:u.TaskEnd,agentId:Q.agentId,error:W,messages:X.getMessages()}),Z.push({agentId:Q.agentId,result:void 0,error:W,metadata:Q.metadata})}}return Z}async runPipeline($,Z,Q){let X=[],J=Z;for(let W of $){let j=this.agents.get(W);if(!j){X.push({agentId:W,result:void 0,error:Error(`Agent "${W}" not found in team`)});break}this.emitEvent({type:u.TaskStart,agentId:W,message:J});try{let Y=await j.run(J);this.emitEvent({type:u.TaskEnd,agentId:W,result:Y}),X.push({agentId:W,result:Y});let V=$.indexOf(W)+1;if(V<$.length){let B=$[V];J=Q?Q(Y,B):`Previous agent output:
530
530
  ${Y.text}
@@ -587,7 +587,7 @@ ${J}`,$.config.mode)}function d4($,Z){return hI($,Z==="plan"?"plan":Z==="yolo"?"
587
587
  metadata_json, transcript_path, hook_path, messages_path, updated_at
588
588
  ) 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,U0()])}}import{readdirSync as Pm}from"node:fs";import{homedir as fm}from"node:os";import{isAbsolute as wm,join as Ej,resolve as Mj}from"node:path";import{captureSdkError as q1,createSessionId as Sm,isLikelyAuthError as bm,normalizeUserInput as km}from"@cline/shared";import{setHomeDirIfUnset as xm}from"@cline/shared/storage";_0();import{estimateRequestInputTokens as kh}from"@cline/shared";import{createHandlerAsync as Oh}from"@cline/llms";function rI($){switch($){case"agentic_summary":case"basic_compaction_projection":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!0,dropThinkingBlocks:!0};case"normal_provider_request":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!1,dropThinkingBlocks:!1}}}function ZD($){return $.map((Z)=>({...Z,content:Array.isArray(Z.content)?Z.content.map((Q)=>({...Q})):Z.content,...Z.metadata?{metadata:{...Z.metadata}}:{}}))}function d1($){try{return JSON.stringify($).length}catch{return String($).length}}function t7($,Z){return $.reduce((Q,X)=>Q+Z(X),0)}function WD($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((Z)=>Z.type==="tool_result")}function e7($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q.role==="user"&&!WD(Q))return Z}return-1}function aI($){for(let Z=0;Z<$.length;Z+=1){let Q=$[Z];if(Q.role==="user"&&!WD(Q))return Z}return-1}function bW($){let Z=new Set;if(!Array.isArray($.content))return Z;for(let Q of $.content)if(Q.type==="tool_use")Z.add(Q.id);else if(Q.type==="tool_result")Z.add(Q.tool_use_id);return Z}function nI($){let Z=new Map;for(let Q=0;Q<$.length;Q+=1)for(let X of bW($[Q])){let J=Z.get(X);if(J)J.add(Q);else Z.set(X,new Set([Q]))}return Z}function SW($){let Z=new Set;for(let Q of $){if(!Array.isArray(Q.content))continue;for(let X of Q.content)if(X.type==="tool_result")Z.add(X.tool_use_id)}for(let Q=$.length-1;Q>=0;Q-=1){let X=$[Q];if(!Array.isArray(X.content))continue;if(X.content.some((J)=>J.type==="tool_use"&&!Z.has(J.id)))return Q}return $.length}function oI($,Z){let Q=nI($),X=new Set,J=[Z];while(J.length>0){let W=J.shift();if(W===void 0||X.has(W))continue;X.add(W);for(let j of bW($[W]))for(let Y of Q.get(j)??[])if(!X.has(Y))J.push(Y)}return X}function sI($){return $.type==="image"||$.type==="media"||$.type==="redacted_thinking"}function tI($){return $.type==="image"}function eI($,Z,Q){if(Z.dropThinkingBlocks&&$.type==="thinking")return!0;return Z.dropUnsafeOutsideLiveTail&&!Q&&sI($)}function QD($,Z,Q,X="over_budget"){let J=[],W=[];for(let j=0;j<$.length;j+=1){let Y=$[j];if(Array.isArray(Y.content)&&Y.content.length===0){Q.push({kind:"dropped_message",path:{messageIndex:Z[j]},reason:X,originalSize:d1(Y),finalSize:0});continue}J.push(Y),W.push(Z[j])}return{messages:J,originalIndexes:W}}function $h($,Z,Q,X,J,W){return $.map((j,Y)=>{if(!Array.isArray(j.content))return j;let V=!1,B=Y===X||Y>=J,K=j.content.flatMap((G,H)=>{if(eI(G,W,B))return V=!0,Q.push({kind:"dropped_block",path:{messageIndex:Z[Y],blockIndex:H},reason:"unsafe_to_truncate",originalSize:d1(G),finalSize:0}),[];if(G.type==="tool_result"&&Array.isArray(G.content)){let U=G.content.filter((F)=>{if(W.dropUnsafeOutsideLiveTail&&!B&&tI(F))return!1;return!0});if(U.length!==G.content.length){V=!0;let F={...G,content:U};return Q.push({kind:"dropped_block",path:{messageIndex:Z[Y],blockIndex:H},reason:"unsafe_to_truncate",originalSize:d1(G),finalSize:d1(F)}),[F]}}return[G]});return V?{...j,content:K}:j})}function Zh($,Z,Q){return $.map((X,J)=>{if(!Array.isArray(X.content))return X;let W=!1,j=X.content.filter((Y,V)=>{if(Y.type!=="thinking")return!0;return W=!0,Q.push({kind:"dropped_block",path:{messageIndex:Z[J],blockIndex:V},reason:"unsafe_to_truncate",originalSize:d1(Y),finalSize:0}),!1});return W?{...X,content:j}:X})}function a6($,Z){if(Z<=0)return"";if($.length<=Z)return $;if(Z<=16)return $.slice(0,Math.max(1,Z));let Q=`
589
589
  ...[truncated ${$.length-Z} chars]`,X=Math.max(1,Z-Q.length),J=`
590
- ...[truncated ${$.length-X} chars]`;return`${$.slice(0,X)}${J}`}function XD($,Z){if(typeof $==="string")return a6($,Z);let Q=Z;return $.map((X)=>{if(Q<=0){if(X.type==="text")return{...X,text:""};if(X.type==="file")return{...X,content:""};return X}if(X.type==="text"){let J=a6(X.text,Q);return Q-=J.length,{...X,text:J}}if(X.type==="file"){let J=a6(X.content,Q);return Q-=J.length,{...X,content:J}}return X})}function Qh($){if(typeof $==="string")return $.length;return $.reduce((Z,Q)=>{if(Q.type==="text")return Z+Q.text.length;if(Q.type==="file")return Z+Q.content.length;return Z},0)}function Xh($,Z){if(typeof $.content==="string")return{...$,content:a6($.content,Z)};let Q=Z;return{...$,content:$.content.map((X)=>{if(Q<=0){if(X.type==="text")return{...X,text:""};if(X.type==="file")return{...X,content:""};if(X.type==="tool_result")return{...X,content:XD(X.content,0)};return X}if(X.type==="text"){let J=a6(X.text,Q);return Q-=J.length,{...X,text:J}}if(X.type==="file"){let J=a6(X.content,Q);return Q-=J.length,{...X,content:J}}if(X.type==="tool_result"){let J=XD(X.content,Q);return Q-=Qh(J),{...X,content:J}}return X})}}function Jh($){if(typeof $.content==="string")return $.content.length>0;return $.content.some((Z)=>Z.type==="text"||Z.type==="file"||Z.type==="tool_result")}function Wh($,Z,Q){return{messages:$.filter((X,J)=>!Q.has(J)),originalIndexes:Z.filter((X,J)=>!Q.has(J))}}function jh($,Z){if(Z<0)return!1;for(let Q of $)if(Q>=Z)return!0;return!1}function JD($,Z){return Z>=0&&$.has(Z)}function l4($){let Z=[],Q=[],X=rI($.policyIntent);if($.targetTokens<=0)return{status:"failed",messages:ZD($.messages),actions:Z,liveTailHandling:"preserved_out_of_band",estimatedTokens:t7($.messages,$.estimateMessageTokens),warnings:[{code:"budget_impossible",message:"Target budget must be greater than zero."}]};let J=ZD($.messages),W=J.map((B,K)=>K);if(X.dropThinkingBlocks){let B=QD(Zh(J,W,Z),W,Z,"unsafe_to_truncate");J=B.messages,W=B.originalIndexes}let j=X.protectLatestTypedUser?e7(J):-1,Y=X.protectLiveTailFromDrop?SW(J):J.length;if(X.dropUnsafeOutsideLiveTail){let B=QD($h(J,W,Z,j,Y,X),W,Z);J=B.messages,W=B.originalIndexes}let V=t7(J,$.estimateMessageTokens);if(V<=$.targetTokens)return{status:"ok",messages:J,actions:Z,liveTailHandling:Z.length>0?"included_degraded":"included_verbatim",estimatedTokens:V,warnings:Q};for(let B=J.length-1;B>=0&&V>$.targetTokens;B-=1){let K=e7(J);if(B===K)continue;if(X.protectLiveTailFromDrop&&B>=SW(J))continue;if(!Jh(J[B]))continue;let G=d1(J[B]),H=Math.max(1,G/Math.max(1,$.estimateMessageTokens(J[B]))),U=Math.max(16,Math.floor($.targetTokens*H/Math.max(1,J.length)));J[B]=Xh(J[B],U),Z.push({kind:"truncated_text",path:{messageIndex:W[B]},reason:"over_budget",originalSize:G,finalSize:d1(J[B])}),V=t7(J,$.estimateMessageTokens)}for(let B=0;B<J.length&&V>$.targetTokens;){let K=aI(J),G=e7(J),H=X.protectLiveTailFromDrop?SW(J):J.length;if(B===K||B===G){Z.push({kind:"preserved",path:{messageIndex:W[B]},reason:"protected_live_tail",originalSize:d1(J[B]),finalSize:d1(J[B])}),B+=1;continue}let U=oI(J,B);if(JD(U,K)){B+=1;continue}if(JD(U,G)){B+=1;continue}if(jh(U,H)){B+=1;continue}for(let L of U)Z.push({kind:"dropped_message",path:{messageIndex:W[L]},reason:U.size>1||bW(J[L]).size>0?"tool_pair_boundary":"over_budget",originalSize:d1(J[L]),finalSize:0});let F=Wh(J,W,U);J=F.messages,W=F.originalIndexes,V=t7(J,$.estimateMessageTokens)}if(V>$.targetTokens)return Q.push({code:"budget_unachievable_with_protections",message:"Projection could not reach budget without violating protected content."}),{status:"failed",messages:J,actions:Z,liveTailHandling:"included_degraded",estimatedTokens:V,warnings:Q};return{status:"ok",messages:J,actions:Z,liveTailHandling:Z.length>0?"included_degraded":"included_verbatim",estimatedTokens:V,warnings:Q}}import{CHARS_PER_TOKEN as U40,estimateTokens as ZZ}from"@cline/shared";var BD=128000,Yh=0.9,g2=0.9,KD=0.7,GD=20000,jD=4096,YD=2000,HD=2000;function $Z($){return typeof $==="number"&&Number.isFinite($)&&$>0}function a4($){let Z=$Z($.contextWindow)?$.contextWindow:void 0,Q=$Z($.maxInputTokens)?$.maxInputTokens:void 0;if(Q!==void 0)return Z===void 0?Q:Math.min(Q,Z);return Z===void 0?void 0:Z*Yh}function r4($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
590
+ ...[truncated ${$.length-X} chars]`;return`${$.slice(0,X)}${J}`}function XD($,Z){if(typeof $==="string")return a6($,Z);let Q=Z;return $.map((X)=>{if(Q<=0){if(X.type==="text")return{...X,text:""};if(X.type==="file")return{...X,content:""};return X}if(X.type==="text"){let J=a6(X.text,Q);return Q-=J.length,{...X,text:J}}if(X.type==="file"){let J=a6(X.content,Q);return Q-=J.length,{...X,content:J}}return X})}function Qh($){if(typeof $==="string")return $.length;return $.reduce((Z,Q)=>{if(Q.type==="text")return Z+Q.text.length;if(Q.type==="file")return Z+Q.content.length;return Z},0)}function Xh($,Z){if(typeof $.content==="string")return{...$,content:a6($.content,Z)};let Q=Z;return{...$,content:$.content.map((X)=>{if(Q<=0){if(X.type==="text")return{...X,text:""};if(X.type==="file")return{...X,content:""};if(X.type==="tool_result")return{...X,content:XD(X.content,0)};return X}if(X.type==="text"){let J=a6(X.text,Q);return Q-=J.length,{...X,text:J}}if(X.type==="file"){let J=a6(X.content,Q);return Q-=J.length,{...X,content:J}}if(X.type==="tool_result"){let J=XD(X.content,Q);return Q-=Qh(J),{...X,content:J}}return X})}}function Jh($){if(typeof $.content==="string")return $.content.length>0;return $.content.some((Z)=>Z.type==="text"||Z.type==="file"||Z.type==="tool_result")}function Wh($,Z,Q){return{messages:$.filter((X,J)=>!Q.has(J)),originalIndexes:Z.filter((X,J)=>!Q.has(J))}}function jh($,Z){if(Z<0)return!1;for(let Q of $)if(Q>=Z)return!0;return!1}function JD($,Z){return Z>=0&&$.has(Z)}function l4($){let Z=[],Q=[],X=rI($.policyIntent);if($.targetTokens<=0)return{status:"failed",messages:ZD($.messages),actions:Z,liveTailHandling:"preserved_out_of_band",estimatedTokens:t7($.messages,$.estimateMessageTokens),warnings:[{code:"budget_impossible",message:"Target budget must be greater than zero."}]};let J=ZD($.messages),W=J.map((B,K)=>K);if(X.dropThinkingBlocks){let B=QD(Zh(J,W,Z),W,Z,"unsafe_to_truncate");J=B.messages,W=B.originalIndexes}let j=X.protectLatestTypedUser?e7(J):-1,Y=X.protectLiveTailFromDrop?SW(J):J.length;if(X.dropUnsafeOutsideLiveTail){let B=QD($h(J,W,Z,j,Y,X),W,Z);J=B.messages,W=B.originalIndexes}let V=t7(J,$.estimateMessageTokens);if(V<=$.targetTokens)return{status:"ok",messages:J,actions:Z,liveTailHandling:Z.length>0?"included_degraded":"included_verbatim",estimatedTokens:V,warnings:Q};for(let B=J.length-1;B>=0&&V>$.targetTokens;B-=1){let K=e7(J);if(B===K)continue;if(X.protectLiveTailFromDrop&&B>=SW(J))continue;if(!Jh(J[B]))continue;let G=d1(J[B]),H=Math.max(1,G/Math.max(1,$.estimateMessageTokens(J[B]))),U=Math.max(16,Math.floor($.targetTokens*H/Math.max(1,J.length)));J[B]=Xh(J[B],U),Z.push({kind:"truncated_text",path:{messageIndex:W[B]},reason:"over_budget",originalSize:G,finalSize:d1(J[B])}),V=t7(J,$.estimateMessageTokens)}for(let B=0;B<J.length&&V>$.targetTokens;){let K=aI(J),G=e7(J),H=X.protectLiveTailFromDrop?SW(J):J.length;if(B===K||B===G){Z.push({kind:"preserved",path:{messageIndex:W[B]},reason:"protected_live_tail",originalSize:d1(J[B]),finalSize:d1(J[B])}),B+=1;continue}let U=oI(J,B);if(JD(U,K)){B+=1;continue}if(JD(U,G)){B+=1;continue}if(jh(U,H)){B+=1;continue}for(let L of U)Z.push({kind:"dropped_message",path:{messageIndex:W[L]},reason:U.size>1||bW(J[L]).size>0?"tool_pair_boundary":"over_budget",originalSize:d1(J[L]),finalSize:0});let F=Wh(J,W,U);J=F.messages,W=F.originalIndexes,V=t7(J,$.estimateMessageTokens)}if(V>$.targetTokens)return Q.push({code:"budget_unachievable_with_protections",message:"Projection could not reach budget without violating protected content."}),{status:"failed",messages:J,actions:Z,liveTailHandling:"included_degraded",estimatedTokens:V,warnings:Q};return{status:"ok",messages:J,actions:Z,liveTailHandling:Z.length>0?"included_degraded":"included_verbatim",estimatedTokens:V,warnings:Q}}import{CHARS_PER_TOKEN as L40,estimateTokens as ZZ}from"@cline/shared";var BD=128000,Yh=0.9,g2=0.9,KD=0.7,GD=20000,jD=4096,YD=2000,HD=2000;function $Z($){return typeof $==="number"&&Number.isFinite($)&&$>0}function a4($){let Z=$Z($.contextWindow)?$.contextWindow:void 0,Q=$Z($.maxInputTokens)?$.maxInputTokens:void 0;if(Q!==void 0)return Z===void 0?Q:Math.min(Q,Z);return Z===void 0?void 0:Z*Yh}function r4($,Z){if($.length<=Z)return $;return`${$.slice(0,Z)}
591
591
  ...[truncated ${$.length-Z} chars]`}function Vh($){let Z=Bh($);if(typeof Z==="string")return Z;return Z.map((Q)=>{switch(Q.type){case"text":return Q.text;case"file":return`<file path="${Q.path}">
592
592
  ${Q.content}
593
593
  </file>`;case"image":return`[image:${Q.mediaType}]`;default:return""}}).join(`
@@ -643,14 +643,14 @@ ${Z.join(`
643
643
  ---
644
644
  `)}`:"";return{type:"text",text:`<SYSTEM_NOTICE>
645
645
  Earlier context was compacted. Summary of your actions after the request above:
646
- ${zD($)}${Q}</SYSTEM_NOTICE>`}}function QZ($,Z){if(typeof $.content==="string")return $.content.trim()?[{type:"text",text:$.content}]:[];if(Z)return[...$.content];return $.content.filter((Q)=>Q.type!=="file"&&Q.type!=="image")}function Ch($,Z){let Q=new Map;Z.forEach((B,K)=>{if(B.id)Q.set(B.id,K)});let X=(B)=>B.id?Q.get(B.id):void 0,J=new Set;for(let B=Z.length-1;B>=0&&J.size<Rh;B-=1)if(ED(Z[B]))J.add(B);let W=(B,K)=>{let G=[];for(let H=B;H<K;H+=1){if(!J.has(H))continue;let U=ED(Z[H]);if(U)G.push(U)}return G},j=-1;for(let B=$.length-1;B>=0;B-=1)if(B$($[B])){j=B;break}let Y=[],V=0;while(V<$.length){if(!B$($[V])){let G=X($[V]);Y.push({message:$[V],firstOriginalIndex:G,lastOriginalIndex:G,isTypedUser:!1}),V+=1;continue}let B=V;while(B+1<$.length&&B$($[B+1]))B+=1;let K=$[V];if(B>V){let G=[],H=0;for(let U=V;U<=B;U+=1){if(H+=i$($[U]),U>V){let F=X($[U-1]),L=X($[U]);if(F!==void 0&&L!==void 0&&L>F+1){let D=hW(Z.slice(F+1,L)),z=W(F+1,L);if(IW(D)||z.length>0)G.push(MD(D,z))}}G.push(...QZ($[U],U===j))}K={...$[V],content:G,metadata:{...$[V].metadata,userRunSpan:H}}}else{let G=QZ(K,V===j);if(Array.isArray(K.content)&&G.length!==K.content.length)K={...K,content:G}}Y.push({message:K,firstOriginalIndex:X($[V]),lastOriginalIndex:X($[B]),isTypedUser:!0}),V=B+1}for(let B=0;B<Y.length;B+=1){let K=Y[B];if(!K.isTypedUser||K.lastOriginalIndex===void 0)continue;let G=Y[B+1],H=G?G.firstOriginalIndex:Z.length;if(H===void 0||H<=K.lastOriginalIndex+1)continue;let U=hW(Z.slice(K.lastOriginalIndex+1,H)),F=W(K.lastOriginalIndex+1,H);if(!IW(U)&&F.length===0)continue;K.message={...K.message,content:[...QZ(K.message,!0),MD(U,F)]}}return Y.map((B)=>B.message)}function RD($){if(!$.metrics)return $;let{metrics:Z,...Q}=$;return Q}function Ph($){let Z=!1,Q={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,cost:0};for(let X of $){let J=X.metrics;if(!J)continue;Z=!0,Q.inputTokens+=J.inputTokens??0,Q.outputTokens+=J.outputTokens??0,Q.cacheReadTokens+=J.cacheReadTokens??0,Q.cacheWriteTokens+=J.cacheWriteTokens??0,Q.cost+=J.cost??0}return Z?Q:void 0}function fh($,Z){if(!$)return Z;if(!Z)return $;return{inputTokens:$.inputTokens+Z.inputTokens,outputTokens:$.outputTokens+Z.outputTokens,cacheReadTokens:$.cacheReadTokens+Z.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens+Z.cacheWriteTokens,cost:$.cost+Z.cost}}function wh($){let Z=$?.metadata;if(!Z||Z.kind!=="compaction")return{messagesRemoved:0,usageBefore:void 0};let Q=Z.usageBefore;return{messagesRemoved:typeof Z.messagesRemoved==="number"?Z.messagesRemoved:0,usageBefore:Q&&typeof Q==="object"?{inputTokens:Q.inputTokens??0,outputTokens:Q.outputTokens??0,cacheReadTokens:Q.cacheReadTokens??0,cacheWriteTokens:Q.cacheWriteTokens??0,cost:Q.cost??0}:void 0}}var CD="preserved";function PD($){return $.metadata?.compaction===CD}function Sh($){if(PD($))return $;return{...$,metadata:{...$.metadata,compaction:CD}}}function bh($){if(typeof $.content==="string")return $.content.trim()?$:void 0;let Z=$.content.filter((Q)=>Q.type!=="thinking"&&Q.type!=="redacted_thinking");if(!Z.some((Q)=>Q.type==="text"&&Q.text.trim()))return;return{...$,content:Z}}function fD($){let Z=$.context.messages,Q=$.estimateMessageTokens;if(Z.length<2)return;let X=Math.max(1,Math.min($.context.budget.messages.targetTokens,$.context.budget.messages.triggerTokens)),J=[];for(let N=0;N<Z.length;N+=1)if(B$(Z[N]))J.push(N);let W=new Map;for(let N of J){let T=Eh(Z[N]);if(T)W.set(N,T)}if(W.size===0)return;let j=J[J.length-1],Y=0;for(let[N,T]of W)Y+=Q({...T,content:QZ(T,N===j)});let V=new Set;for(let N=0;N<Z.length;N+=1){if(W.has(N))continue;if(PD(Z[N]))V.add(N),Y+=Q(Z[N])}let B=new Set;{let N=Z.length,T=0;for(let M=Z.length-1;M>j;M-=1){if(V.has(M))break;let d=Q(Z[M]);if(Y+T+d>X)break;T+=d,N=M}while(N<Z.length&&Z[N].role!=="assistant")N+=1;for(let M=N;M<Z.length;M+=1)B.add(M),Y+=Q(Z[M])}let K=new Map;for(let N=J.length-2;N>=0;N-=1){let T=J[N]+1,M=J[N+1];for(let d=M-1;d>=T;d-=1){let b=Z[d];if(V.has(d))break;if(b.role!=="assistant")continue;if(Array.isArray(b.content)&&b.content.some((E)=>E.type==="tool_use"))continue;let S=bh(b);if(S){let E=Q(S);if(Y+E<=X)K.set(d,S),Y+=E}break}}let G=[];for(let N=0;N<Z.length;N+=1){let T=W.get(N);if(T){G.push(T);continue}if(V.has(N)||B.has(N)){G.push(Z[N]);continue}let M=K.get(N);if(M)G.push(M)}let H=TD(Z,$.estimateMessageTokens),U=Math.min(Math.max(X,Y),Math.max(1,$.context.budget.messages.triggerTokens)),F=l4({messages:G,targetTokens:U,policyIntent:"basic_compaction_projection",estimateMessageTokens:$.estimateMessageTokens});if(F.status==="failed")$.logger?.debug("Basic compaction returned best-effort projection",{budgetWarnings:F.warnings.map((N)=>N.code),projectedTokens:F.estimatedTokens,targetTokens:X,maxInputTokens:$.context.budget.request.maxInputTokens});let L=Ch(F.messages,Z);if(!Mh(Z,L))return;let D=wh(L[0]),z=fh(D.usageBefore,Ph(Z)),_={kind:"compaction",reason:$.context.mode==="manual"?"manual_compaction":$.context.mode==="overflow_recovery"?"overflow_recovery_compaction":"auto_compaction",displayRole:"system",messagesRemoved:D.messagesRemoved+(Z.length-L.length),...z?{usageBefore:z}:{}},O=L.map((N,T)=>{if(T===0&&B$(N))return RD({...N,metadata:{...N.metadata,..._,userRunSpan:i$(N)}});return RD(B$(N)?N:Sh(N))}),A=TD(O,$.estimateMessageTokens),q=F.actions.filter((N)=>N.reason==="over_budget"||N.reason==="tool_pair_boundary").length;return $.logger?.debug("Performed basic compaction",{messagesBefore:Z.length,messagesAfter:O.length,messagesRemoved:Z.length-O.length,tokensBefore:H,tokensAfter:A,budgetStatus:F.status,budgetActions:q,budgetWarnings:F.warnings.map((N)=>N.code),targetTokens:X,maxInputTokens:$.context.budget.request.maxInputTokens}),{messages:O,budget:{policyIntent:"basic_compaction_projection",actionCount:q,warningCount:F.warnings.length,liveTailHandling:F.liveTailHandling}}}var xh=0.5;function wD($,Z){if(Z.aborted)return!0;return $ instanceof Error&&($.name==="AbortError"||$.name==="AgentRuntimeAbortError")}function SD($){return $ instanceof Error?{errorName:$.name,errorMessage:$.message}:{errorMessage:String($)}}function kD($){try{return JSON.stringify($).length}catch{return String($).length}}function yh($){let Z=0,Q=0,X=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let W of J.content){if(W.type!=="tool_result")continue;let j=kD(W.content);Z+=1,Q+=j,X=Math.max(X,j)}}return{toolResultCount:Z,toolResultSerializedChars:Q,maxToolResultSerializedChars:X}}var mW={basic:({context:$,estimateMessageTokens:Z,logger:Q})=>fD({context:$,estimateMessageTokens:Z,logger:Q}),agentic:({context:$,providerConfig:Z,compaction:Q,estimateMessageTokens:X,logger:J})=>AD({context:$,providerConfig:Z,summarizer:Q?.summarizer,preserveRecentTokens:Math.min(Q?.preserveRecentTokens??GD,$.budget.messages.targetTokens),estimateMessageTokens:X,logger:J})};function Ih($){let Z=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,Z));return Math.max(1,Math.floor(Math.min($.messageTriggerTokens,$.messageInputTokens*Q)))}function hh($){let Z=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*xh):Math.floor($.triggerTokens*KD),Q=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(Z,$.maxInputTokens,Q))}function bD($,Z){return Math.max(1,Math.floor($-Z))}function vh($){let Z=0,Q=!1;for(let X of $)if(X.role==="user")Q=!0;else if(X.role==="assistant"&&Q)Z+=1,Q=!1;return Z}function cW($,Z={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let X=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=LD(),W=Q?.strategy??"agentic",j=mW[W],Y=Z.mode??"auto",V=Q?.compact?"custom":W;return async(B)=>{let K=B.overflowRecovery?"overflow_recovery":Y,G=B.apiMessages.reduce((w,k)=>w+J(k),0),H=kh({systemPrompt:B.systemPrompt,messages:B.apiMessages,tools:B.tools}),U=B.messages.reduce((w,k)=>w+J(k),0),F=Math.max(0,H-G),L=a4({maxInputTokens:B.model.info?.maxInputTokens,contextWindow:B.model.info?.contextWindow})??BD,D=L*g2,z=bD(D,F),_=H>=D;if($.logger?.debug("Context compaction diagnostics",{mode:K,strategy:W,iteration:B.iteration,providerId:$.providerId,modelId:$.modelId,requestInputTokens:H,apiMessageTokens:G,messageInputTokens:U,requestOverheadTokens:F,maxInputTokens:L,requestTriggerTokens:D,messageTriggerTokens:z,thresholdRatio:g2,shouldCompact:_,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:kD(B.apiMessages),...yh(B.apiMessages)}),K==="auto"&&!_)return;let O,A;if(K==="auto")O=hh({maxInputTokens:L,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:D,messagePairCount:vh(B.messages)}),A=bD(O,F);else A=Ih({messageInputTokens:U,messageTriggerTokens:z,manualTargetRatio:Z.manualTargetRatio}),O=F+A;let q={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId,iteration:B.iteration,messages:B.messages,model:B.model,mode:K,abortSignal:B.abortSignal,budget:{request:{inputTokens:H,maxInputTokens:L,triggerTokens:D,targetTokens:O,overheadTokens:F,thresholdRatio:g2,utilizationRatio:L>0?H/L:0},messages:{inputTokens:U,triggerTokens:z,targetTokens:A}}},N=K==="manual"?"manual_compaction":K==="overflow_recovery"?"overflow_recovery_compaction":"auto_compaction",T=K==="manual"?"":K==="overflow_recovery"?"overflow-recovery-":"auto-";B.emitStatusNotice?.(`${T}compacting`,{kind:N,reason:N,phase:"started",iteration:B.iteration,triggerTokens:D,targetTokens:O,maxInputTokens:L,messageTargetTokens:A});let M=B.messages.length,d=Date.now(),b={context:q,providerConfig:{...X,abortSignal:B.abortSignal},compaction:Q,estimateMessageTokens:J,logger:$.logger},S=V,E;if(K==="overflow_recovery"){if(Q?.compact){try{E=await Q.compact(q)}catch(w){if(wD(w,B.abortSignal))throw w;$.logger?.log("Custom compaction failed during overflow recovery; falling back to basic compaction",{severity:"warn",...SD(w)}),E=void 0}if(E?.messages){let w=E.messages.reduce((m,t)=>m+J(t),0);if(!(E.messages.length>0&&w<U&&w<=A))$.logger?.log("Custom compaction did not produce an acceptable overflow-recovery transcript; falling back to basic compaction",{severity:"warn",customMessageCount:E.messages.length,customMessageTokens:w,messageTargetTokens:A}),E=void 0}}if(!E?.messages)S="basic",E=await mW.basic(b)}else if(Q?.compact)E=await Q.compact(q);else try{E=await j(b)}catch(w){if(W!=="agentic"||wD(w,B.abortSignal))throw w;$.logger?.log("Agentic compaction failed; falling back to basic compaction",{severity:"warn",...SD(w)}),S="basic",E=await mW.basic(b)}let I=Date.now()-d,f=$.sessionId??B.conversationId,r={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId??void 0};if(E?.messages){let w=E.messages.reduce((m,t)=>m+J(t),0),k=F+w;if($.logger?.log("Context compaction completed",{severity:"info",strategy:S,maxInputTokens:L,messageInputTokens:U,apiInputTokens:G,requestInputTokens:H,requestOverheadTokens:F,afterMessageTokens:w,afterRequestTokens:k,tokensSaved:H-k,utilizationBefore:`${(H/L*100).toFixed(1)}%`,utilizationAfter:`${(k/L*100).toFixed(1)}%`,thresholdTrigger:`${(g2*100).toFixed(1)}%`,messagesBefore:M,messagesAfter:E.messages.length,messagesRemoved:M-E.messages.length}),B.emitStatusNotice?.(`${T}compacted`,{kind:N,reason:N,phase:"completed",iteration:B.iteration,tokensBefore:H,tokensAfter:k,messagesBefore:M,messagesAfter:E.messages.length,maxInputTokens:L}),gQ($.telemetry,{ulid:f,strategy:S,mode:K,messagesBefore:M,messagesAfter:E.messages.length,messagesRemoved:M-E.messages.length,tokensBefore:H,tokensAfter:k,tokensSaved:H-k,triggerTokens:D,maxInputTokens:L,thresholdRatio:g2,durationMs:I,provider:$.providerId,modelId:$.modelId,...r}),E.budget&&(E.budget.actionCount>0||E.budget.warningCount>0))bV($.telemetry,{ulid:f,strategy:S,mode:K,policyIntent:E.budget.policyIntent,actionCount:E.budget.actionCount,warningCount:E.budget.warningCount,liveTailHandling:E.budget.liveTailHandling,provider:$.providerId,modelId:$.modelId,...r}),B.emitStatusNotice?.("compaction-budget-adjusted",{kind:"compaction_budget_emergency",reason:"compaction_budget_emergency",iteration:B.iteration,policyIntent:E.budget.policyIntent,actionCount:E.budget.actionCount,warningCount:E.budget.warningCount})}else B.emitStatusNotice?.(`${T}compaction-skipped`,{kind:N,reason:N,phase:"skipped",iteration:B.iteration,maxInputTokens:L}),mQ($.telemetry,{ulid:f,strategy:S,mode:K,reason:"no_result",tokensBefore:H,triggerTokens:D,maxInputTokens:L,thresholdRatio:g2,durationMs:I,provider:$.providerId,modelId:$.modelId,...r});return E}}function uW($){return async(Z)=>{let Q=$.getState?.(),X=Q?l6(Q,Z.messages):void 0;if(Q&&X){let W=$.compact?await $.compact({...Z,messages:X,apiMessages:X}):void 0;if(W?.messages){let j=W.systemPrompt??Q.system_prompt,Y=m7({sourceMessages:Z.messages,compactedMessages:W.messages,conversationId:Z.conversationId,systemPrompt:j});return await $.saveState?.(Y,Z.messages),{...W,...j!==void 0?{systemPrompt:j}:{}}}return{messages:X,...W?.systemPrompt!==void 0?{systemPrompt:W.systemPrompt}:Q.system_prompt!==void 0?{systemPrompt:Q.system_prompt}:{}}}let J=$.compact?await $.compact(Z):void 0;if(J?.messages){let W=m7({sourceMessages:Z.messages,compactedMessages:J.messages,conversationId:Z.conversationId,systemPrompt:J.systemPrompt});await $.saveState?.(W,Z.messages)}return J}}_0();function p0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function v0($,Z){return{inputTokens:$.inputTokens+Math.max(0,Z.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,Z.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,Z.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,Z.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,Z.totalCost??0)}}function XZ($){let Z=p0();for(let Q of $)Z=v0(Z,Q);return Z}function n6($){return typeof $==="number"&&Number.isFinite($)?$:0}function JZ($){let Z=p0();for(let Q of $){let X=Q.metrics;if(!X)continue;Z=v0(Z,{inputTokens:n6(X.inputTokens),outputTokens:n6(X.outputTokens),cacheReadTokens:n6(X.cacheReadTokens),cacheWriteTokens:n6(X.cacheWriteTokens),totalCost:n6(X.cost)})}return Z}function gh($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let X=n6(Q.metrics?.inputTokens);return X>0?X:void 0}return}function mh($){if(!$||typeof $!=="object")return;let Z=$,Q=Z.skill??Z.skill_name??Z.skillName;if(typeof Q!=="string")return;let X=Q.trim();return X.length>0?X:void 0}function dW($){if(!$||typeof $!=="object")return{};let Z=$;return{agentId:typeof Z.agentId==="string"?Z.agentId:void 0,conversationId:typeof Z.conversationId==="string"?Z.conversationId:void 0,parentAgentId:typeof Z.parentAgentId==="string"?Z.parentAgentId:void 0}}function K$($){let Z=$.agentId?.trim();if(!Z)return;let Q=$.parentAgentId?.trim()||void 0,X=$.teamRole,J="root";if(X==="teammate")J="team_teammate";else if(X==="lead")J="team_lead";else if(Q)J="subagent";return{agentId:Z,agentKind:J,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Q,createdByAgentId:$.createdByAgentId?.trim()||Q||void 0,isSubagent:Boolean(Q),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:X,teamAgentId:$.teamAgentId?.trim()||void 0}}function ch($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function uh($){let Z=$.cacheWriteTokens??0,Q=$.cacheReadTokens??0;return{tokensIn:Math.max(0,$.inputTokens-Q-Z),tokensOut:$.outputTokens,cacheWriteTokens:Z,cacheReadTokens:Q,totalCost:$.cost}}function dh($){let Z=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of Z){let X=Q?.trim();if(X)return X}return $.isPrimaryAgentEvent?"root":"unknown"}function WZ($,Z,Q){let{sessionId:X,config:J,liveSession:W,emit:j}=$,Y=J.telemetry,V=W?.runtime.teamRuntime,B=Q?.isPrimaryAgentEvent??!0,K=dW(Z),G=K$({agentId:Q?.agentId??K.agentId,conversationId:Q?.conversationId??K.conversationId,parentAgentId:Q?.parentAgentId??K.parentAgentId,createdByAgentId:Q?.createdByAgentId,teamId:Q?.teamId??V?.getTeamId(),teamName:Q?.teamName??V?.getTeamName(),teamRole:Q?.teamRole,teamAgentId:Q?.teamAgentId});if(Z.type==="content_start"&&Z.contentType==="tool"&&Z.toolName==="skills"){let H=mh(Z.input);if(H)SQ(Y,{ulid:X,skillName:H,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:J.providerId,modelId:J.modelId,...G})}if(Z.type==="content_end"&&Z.contentType==="tool"){let H=Z.toolName??"unknown",U=!Z.error;if(a1(Y,{ulid:X,tool:H,autoApproved:void 0,success:U,modelId:J.modelId,provider:J.providerId,...G}),!U&&(H==="editor"||H==="apply_patch"))bQ(Y,{ulid:X,modelId:J.modelId,provider:J.providerId,errorType:Z.error,...G})}if(Z.type==="usage"&&W?.turnUsageBaseline){let H=ch(Z);if(B){W.turnPrimaryUsage=v0(W.turnPrimaryUsage??p0(),H);let F=v0(W.turnUsageBaseline,W.turnPrimaryUsage);$.usageBySession.set(X,F),z8(Y,{ulid:X,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),fQ(Y,{ulid:X,...uh(Z),provider:J.providerId,model:J.modelId,...G})}else{let F=dh({isPrimaryAgentEvent:B,overrides:Q,eventMetadata:K}),L=W.turnUsageByAgent??new Map;W.turnUsageByAgent=L,L.set(F,v0(L.get(F)??p0(),H))}let U=v0(W.turnPrimaryUsage??p0(),XZ(W.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(X,v0(W.turnAggregateUsageBaseline??W.turnUsageBaseline,U))}if(Z.type==="iteration_end"&&B)$.persistMessages(X,W?.agent.getMessages()??[],W?.config.systemPrompt);j({type:"agent_event",payload:{sessionId:X,event:Z,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(B?"lead":void 0):void 0}}),j({type:"chunk",payload:{sessionId:X,stream:"agent",chunk:OF(Z),ts:Date.now()}})}function G$($){return $.workspaceRoot??$.cwd}import{resolveProviderRequestHeaders as wv}from"@cline/llms";import{hasRuntimeConfigExtension as Sv}from"@cline/shared";import{appendFileSync as Uv,readFileSync as Fv}from"node:fs";import{join as Lv}from"node:path";import{augmentNodeCommandForDebug as Dv}from"@cline/shared";import{ensureHookLogDir as uD}from"@cline/shared/storage";function jZ($,Z){if(!Z)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:Z}}import{existsSync as lh,readdirSync as ph}from"node:fs";import{basename as ih,extname as rh,join as ah}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as xD,resolveHooksConfigSearchPaths as nh}from"@cline/shared/storage";function lW($){return nh($)}var YZ;((K)=>{K.TaskStart="TaskStart";K.TaskResume="TaskResume";K.TaskCancel="TaskCancel";K.TaskComplete="TaskComplete";K.TaskError="TaskError";K.PreToolUse="PreToolUse";K.PostToolUse="PostToolUse";K.UserPromptSubmit="UserPromptSubmit";K.PreCompact="PreCompact";K.SessionShutdown="SessionShutdown"})(YZ||={});var pW={["TaskStart"]:"agent_start",["TaskResume"]:"agent_resume",["TaskCancel"]:"agent_abort",["TaskComplete"]:"agent_end",["TaskError"]:"agent_error",["PreToolUse"]:"tool_call",["PostToolUse"]:"tool_result",["UserPromptSubmit"]:"prompt_submit",["PreCompact"]:void 0,["SessionShutdown"]:"session_shutdown"},oh=new Map(Object.values(YZ).map(($)=>[$.toLowerCase(),$])),sh=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function iW($){let Z=rh($).toLowerCase();if(!sh.has(Z))return;let Q=ih($,Z).trim().toLowerCase();return oh.get(Q)}function o6($){let Z=[],Q=new Set,X=lW($).filter((J)=>lh(J));for(let J of X)try{for(let W of ph(J,{withFileTypes:!0})){if(!W.isFile())continue;let j=iW(W.name);if(!j)continue;let Y=ah(J,W.name);if(Q.has(Y))continue;Q.add(Y),Z.push({fileName:j,hookEventName:pW[j],path:Y})}}catch{}return Z.sort((J,W)=>J.path.localeCompare(W.path))}import{HookEventNameSchema as gD,HookEventPayloadSchema as mD,parseHookEventPayload as VZ,resolveHookSessionContext as Xv}from"@cline/shared";import{z as c2}from"zod";import{spawn as th}from"node:child_process";import{augmentNodeCommandForDebug as eh,withResolvedClineBuildEnv as $v}from"@cline/shared";function Zv($){let Z=$.trim();if(!Z)return{};let X=Z.split(`
646
+ ${zD($)}${Q}</SYSTEM_NOTICE>`}}function QZ($,Z){if(typeof $.content==="string")return $.content.trim()?[{type:"text",text:$.content}]:[];if(Z)return[...$.content];return $.content.filter((Q)=>Q.type!=="file"&&Q.type!=="image")}function Ch($,Z){let Q=new Map;Z.forEach((B,K)=>{if(B.id)Q.set(B.id,K)});let X=(B)=>B.id?Q.get(B.id):void 0,J=new Set;for(let B=Z.length-1;B>=0&&J.size<Rh;B-=1)if(ED(Z[B]))J.add(B);let W=(B,K)=>{let G=[];for(let H=B;H<K;H+=1){if(!J.has(H))continue;let U=ED(Z[H]);if(U)G.push(U)}return G},j=-1;for(let B=$.length-1;B>=0;B-=1)if(B$($[B])){j=B;break}let Y=[],V=0;while(V<$.length){if(!B$($[V])){let G=X($[V]);Y.push({message:$[V],firstOriginalIndex:G,lastOriginalIndex:G,isTypedUser:!1}),V+=1;continue}let B=V;while(B+1<$.length&&B$($[B+1]))B+=1;let K=$[V];if(B>V){let G=[],H=0;for(let U=V;U<=B;U+=1){if(H+=i$($[U]),U>V){let F=X($[U-1]),L=X($[U]);if(F!==void 0&&L!==void 0&&L>F+1){let D=hW(Z.slice(F+1,L)),z=W(F+1,L);if(IW(D)||z.length>0)G.push(MD(D,z))}}G.push(...QZ($[U],U===j))}K={...$[V],content:G,metadata:{...$[V].metadata,userRunSpan:H}}}else{let G=QZ(K,V===j);if(Array.isArray(K.content)&&G.length!==K.content.length)K={...K,content:G}}Y.push({message:K,firstOriginalIndex:X($[V]),lastOriginalIndex:X($[B]),isTypedUser:!0}),V=B+1}for(let B=0;B<Y.length;B+=1){let K=Y[B];if(!K.isTypedUser||K.lastOriginalIndex===void 0)continue;let G=Y[B+1],H=G?G.firstOriginalIndex:Z.length;if(H===void 0||H<=K.lastOriginalIndex+1)continue;let U=hW(Z.slice(K.lastOriginalIndex+1,H)),F=W(K.lastOriginalIndex+1,H);if(!IW(U)&&F.length===0)continue;K.message={...K.message,content:[...QZ(K.message,!0),MD(U,F)]}}return Y.map((B)=>B.message)}function RD($){if(!$.metrics)return $;let{metrics:Z,...Q}=$;return Q}function Ph($){let Z=!1,Q={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,cost:0};for(let X of $){let J=X.metrics;if(!J)continue;Z=!0,Q.inputTokens+=J.inputTokens??0,Q.outputTokens+=J.outputTokens??0,Q.cacheReadTokens+=J.cacheReadTokens??0,Q.cacheWriteTokens+=J.cacheWriteTokens??0,Q.cost+=J.cost??0}return Z?Q:void 0}function fh($,Z){if(!$)return Z;if(!Z)return $;return{inputTokens:$.inputTokens+Z.inputTokens,outputTokens:$.outputTokens+Z.outputTokens,cacheReadTokens:$.cacheReadTokens+Z.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens+Z.cacheWriteTokens,cost:$.cost+Z.cost}}function wh($){let Z=$?.metadata;if(!Z||Z.kind!=="compaction")return{messagesRemoved:0,usageBefore:void 0};let Q=Z.usageBefore;return{messagesRemoved:typeof Z.messagesRemoved==="number"?Z.messagesRemoved:0,usageBefore:Q&&typeof Q==="object"?{inputTokens:Q.inputTokens??0,outputTokens:Q.outputTokens??0,cacheReadTokens:Q.cacheReadTokens??0,cacheWriteTokens:Q.cacheWriteTokens??0,cost:Q.cost??0}:void 0}}var CD="preserved";function PD($){return $.metadata?.compaction===CD}function Sh($){if(PD($))return $;return{...$,metadata:{...$.metadata,compaction:CD}}}function bh($){if(typeof $.content==="string")return $.content.trim()?$:void 0;let Z=$.content.filter((Q)=>Q.type!=="thinking"&&Q.type!=="redacted_thinking");if(!Z.some((Q)=>Q.type==="text"&&Q.text.trim()))return;return{...$,content:Z}}function fD($){let Z=$.context.messages,Q=$.estimateMessageTokens;if(Z.length<2)return;let X=Math.max(1,Math.min($.context.budget.messages.targetTokens,$.context.budget.messages.triggerTokens)),J=[];for(let N=0;N<Z.length;N+=1)if(B$(Z[N]))J.push(N);let W=new Map;for(let N of J){let T=Eh(Z[N]);if(T)W.set(N,T)}if(W.size===0)return;let j=J[J.length-1],Y=0;for(let[N,T]of W)Y+=Q({...T,content:QZ(T,N===j)});let V=new Set;for(let N=0;N<Z.length;N+=1){if(W.has(N))continue;if(PD(Z[N]))V.add(N),Y+=Q(Z[N])}let B=new Set;{let N=Z.length,T=0;for(let M=Z.length-1;M>j;M-=1){if(V.has(M))break;let d=Q(Z[M]);if(Y+T+d>X)break;T+=d,N=M}while(N<Z.length&&Z[N].role!=="assistant")N+=1;for(let M=N;M<Z.length;M+=1)B.add(M),Y+=Q(Z[M])}let K=new Map;for(let N=J.length-2;N>=0;N-=1){let T=J[N]+1,M=J[N+1];for(let d=M-1;d>=T;d-=1){let b=Z[d];if(V.has(d))break;if(b.role!=="assistant")continue;if(Array.isArray(b.content)&&b.content.some((E)=>E.type==="tool_use"))continue;let S=bh(b);if(S){let E=Q(S);if(Y+E<=X)K.set(d,S),Y+=E}break}}let G=[];for(let N=0;N<Z.length;N+=1){let T=W.get(N);if(T){G.push(T);continue}if(V.has(N)||B.has(N)){G.push(Z[N]);continue}let M=K.get(N);if(M)G.push(M)}let H=TD(Z,$.estimateMessageTokens),U=Math.min(Math.max(X,Y),Math.max(1,$.context.budget.messages.triggerTokens)),F=l4({messages:G,targetTokens:U,policyIntent:"basic_compaction_projection",estimateMessageTokens:$.estimateMessageTokens});if(F.status==="failed")$.logger?.debug("Basic compaction returned best-effort projection",{budgetWarnings:F.warnings.map((N)=>N.code),projectedTokens:F.estimatedTokens,targetTokens:X,maxInputTokens:$.context.budget.request.maxInputTokens});let L=Ch(F.messages,Z);if(!Mh(Z,L))return;let D=wh(L[0]),z=fh(D.usageBefore,Ph(Z)),_={kind:"compaction",reason:$.context.mode==="manual"?"manual_compaction":$.context.mode==="overflow_recovery"?"overflow_recovery_compaction":"auto_compaction",displayRole:"system",messagesRemoved:D.messagesRemoved+(Z.length-L.length),...z?{usageBefore:z}:{}},O=L.map((N,T)=>{if(T===0&&B$(N))return RD({...N,metadata:{...N.metadata,..._,userRunSpan:i$(N)}});return RD(B$(N)?N:Sh(N))}),A=TD(O,$.estimateMessageTokens),q=F.actions.filter((N)=>N.reason==="over_budget"||N.reason==="tool_pair_boundary").length;return $.logger?.debug("Performed basic compaction",{messagesBefore:Z.length,messagesAfter:O.length,messagesRemoved:Z.length-O.length,tokensBefore:H,tokensAfter:A,budgetStatus:F.status,budgetActions:q,budgetWarnings:F.warnings.map((N)=>N.code),targetTokens:X,maxInputTokens:$.context.budget.request.maxInputTokens}),{messages:O,budget:{policyIntent:"basic_compaction_projection",actionCount:q,warningCount:F.warnings.length,liveTailHandling:F.liveTailHandling}}}var xh=0.5;function wD($,Z){if(Z.aborted)return!0;return $ instanceof Error&&($.name==="AbortError"||$.name==="AgentRuntimeAbortError")}function SD($){return $ instanceof Error?{errorName:$.name,errorMessage:$.message}:{errorMessage:String($)}}function kD($){try{return JSON.stringify($).length}catch{return String($).length}}function yh($){let Z=0,Q=0,X=0;for(let J of $){if(!Array.isArray(J.content))continue;for(let W of J.content){if(W.type!=="tool_result")continue;let j=kD(W.content);Z+=1,Q+=j,X=Math.max(X,j)}}return{toolResultCount:Z,toolResultSerializedChars:Q,maxToolResultSerializedChars:X}}var mW={basic:({context:$,estimateMessageTokens:Z,logger:Q})=>fD({context:$,estimateMessageTokens:Z,logger:Q}),agentic:({context:$,providerConfig:Z,compaction:Q,estimateMessageTokens:X,logger:J})=>AD({context:$,providerConfig:Z,summarizer:Q?.summarizer,preserveRecentTokens:Math.min(Q?.preserveRecentTokens??GD,$.budget.messages.targetTokens),estimateMessageTokens:X,logger:J})};function Ih($){let Z=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,Q=Math.min(0.95,Math.max(0.05,Z));return Math.max(1,Math.floor(Math.min($.messageTriggerTokens,$.messageInputTokens*Q)))}function hh($){let Z=$.messagePairCount>=5&&typeof $.modelMaxTokens==="number"&&Number.isFinite($.modelMaxTokens)&&$.modelMaxTokens<$.maxInputTokens?Math.floor($.maxInputTokens*xh):Math.floor($.triggerTokens*KD),Q=Math.max(1,$.triggerTokens-1);return Math.max(1,Math.min(Z,$.maxInputTokens,Q))}function bD($,Z){return Math.max(1,Math.floor($-Z))}function vh($){let Z=0,Q=!1;for(let X of $)if(X.role==="user")Q=!0;else if(X.role==="assistant"&&Q)Z+=1,Q=!1;return Z}function cW($,Z={}){let Q=$.compaction;if(Q?.enabled!==!0)return;let X=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},J=LD(),W=Q?.strategy??"agentic",j=mW[W],Y=Z.mode??"auto",V=Q?.compact?"custom":W;return async(B)=>{let K=B.overflowRecovery?"overflow_recovery":Y,G=B.apiMessages.reduce((w,k)=>w+J(k),0),H=kh({systemPrompt:B.systemPrompt,messages:B.apiMessages,tools:B.tools}),U=B.messages.reduce((w,k)=>w+J(k),0),F=Math.max(0,H-G),L=a4({maxInputTokens:B.model.info?.maxInputTokens,contextWindow:B.model.info?.contextWindow})??BD,D=L*g2,z=bD(D,F),_=H>=D;if($.logger?.debug("Context compaction diagnostics",{mode:K,strategy:W,iteration:B.iteration,providerId:$.providerId,modelId:$.modelId,requestInputTokens:H,apiMessageTokens:G,messageInputTokens:U,requestOverheadTokens:F,maxInputTokens:L,requestTriggerTokens:D,messageTriggerTokens:z,thresholdRatio:g2,shouldCompact:_,messageCount:B.messages.length,apiMessageCount:B.apiMessages.length,apiMessagesJsonChars:kD(B.apiMessages),...yh(B.apiMessages)}),K==="auto"&&!_)return;let O,A;if(K==="auto")O=hh({maxInputTokens:L,modelMaxTokens:B.model.info?.maxTokens,triggerTokens:D,messagePairCount:vh(B.messages)}),A=bD(O,F);else A=Ih({messageInputTokens:U,messageTriggerTokens:z,manualTargetRatio:Z.manualTargetRatio}),O=F+A;let q={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId,iteration:B.iteration,messages:B.messages,model:B.model,mode:K,abortSignal:B.abortSignal,budget:{request:{inputTokens:H,maxInputTokens:L,triggerTokens:D,targetTokens:O,overheadTokens:F,thresholdRatio:g2,utilizationRatio:L>0?H/L:0},messages:{inputTokens:U,triggerTokens:z,targetTokens:A}}},N=K==="manual"?"manual_compaction":K==="overflow_recovery"?"overflow_recovery_compaction":"auto_compaction",T=K==="manual"?"":K==="overflow_recovery"?"overflow-recovery-":"auto-";B.emitStatusNotice?.(`${T}compacting`,{kind:N,reason:N,phase:"started",iteration:B.iteration,triggerTokens:D,targetTokens:O,maxInputTokens:L,messageTargetTokens:A});let M=B.messages.length,d=Date.now(),b={context:q,providerConfig:{...X,abortSignal:B.abortSignal},compaction:Q,estimateMessageTokens:J,logger:$.logger},S=V,E;if(K==="overflow_recovery"){if(Q?.compact){try{E=await Q.compact(q)}catch(w){if(wD(w,B.abortSignal))throw w;$.logger?.log("Custom compaction failed during overflow recovery; falling back to basic compaction",{severity:"warn",...SD(w)}),E=void 0}if(E?.messages){let w=E.messages.reduce((m,t)=>m+J(t),0);if(!(E.messages.length>0&&w<U&&w<=A))$.logger?.log("Custom compaction did not produce an acceptable overflow-recovery transcript; falling back to basic compaction",{severity:"warn",customMessageCount:E.messages.length,customMessageTokens:w,messageTargetTokens:A}),E=void 0}}if(!E?.messages)S="basic",E=await mW.basic(b)}else if(Q?.compact)E=await Q.compact(q);else try{E=await j(b)}catch(w){if(W!=="agentic"||wD(w,B.abortSignal))throw w;$.logger?.log("Agentic compaction failed; falling back to basic compaction",{severity:"warn",...SD(w)}),S="basic",E=await mW.basic(b)}let I=Date.now()-d,P=$.sessionId??B.conversationId,i={agentId:B.agentId,conversationId:B.conversationId,parentAgentId:B.parentAgentId??void 0};if(E?.messages){let w=E.messages.reduce((m,t)=>m+J(t),0),k=F+w;if($.logger?.log("Context compaction completed",{severity:"info",strategy:S,maxInputTokens:L,messageInputTokens:U,apiInputTokens:G,requestInputTokens:H,requestOverheadTokens:F,afterMessageTokens:w,afterRequestTokens:k,tokensSaved:H-k,utilizationBefore:`${(H/L*100).toFixed(1)}%`,utilizationAfter:`${(k/L*100).toFixed(1)}%`,thresholdTrigger:`${(g2*100).toFixed(1)}%`,messagesBefore:M,messagesAfter:E.messages.length,messagesRemoved:M-E.messages.length}),B.emitStatusNotice?.(`${T}compacted`,{kind:N,reason:N,phase:"completed",iteration:B.iteration,tokensBefore:H,tokensAfter:k,messagesBefore:M,messagesAfter:E.messages.length,maxInputTokens:L}),gQ($.telemetry,{ulid:P,strategy:S,mode:K,messagesBefore:M,messagesAfter:E.messages.length,messagesRemoved:M-E.messages.length,tokensBefore:H,tokensAfter:k,tokensSaved:H-k,triggerTokens:D,maxInputTokens:L,thresholdRatio:g2,durationMs:I,provider:$.providerId,modelId:$.modelId,...i}),E.budget&&(E.budget.actionCount>0||E.budget.warningCount>0))bV($.telemetry,{ulid:P,strategy:S,mode:K,policyIntent:E.budget.policyIntent,actionCount:E.budget.actionCount,warningCount:E.budget.warningCount,liveTailHandling:E.budget.liveTailHandling,provider:$.providerId,modelId:$.modelId,...i}),B.emitStatusNotice?.("compaction-budget-adjusted",{kind:"compaction_budget_emergency",reason:"compaction_budget_emergency",iteration:B.iteration,policyIntent:E.budget.policyIntent,actionCount:E.budget.actionCount,warningCount:E.budget.warningCount})}else B.emitStatusNotice?.(`${T}compaction-skipped`,{kind:N,reason:N,phase:"skipped",iteration:B.iteration,maxInputTokens:L}),mQ($.telemetry,{ulid:P,strategy:S,mode:K,reason:"no_result",tokensBefore:H,triggerTokens:D,maxInputTokens:L,thresholdRatio:g2,durationMs:I,provider:$.providerId,modelId:$.modelId,...i});return E}}function uW($){return async(Z)=>{let Q=$.getState?.(),X=Q?l6(Q,Z.messages):void 0;if(Q&&X){let W=$.compact?await $.compact({...Z,messages:X,apiMessages:X}):void 0;if(W?.messages){let j=W.systemPrompt??Q.system_prompt,Y=m7({sourceMessages:Z.messages,compactedMessages:W.messages,conversationId:Z.conversationId,systemPrompt:j});return await $.saveState?.(Y,Z.messages),{...W,...j!==void 0?{systemPrompt:j}:{}}}return{messages:X,...W?.systemPrompt!==void 0?{systemPrompt:W.systemPrompt}:Q.system_prompt!==void 0?{systemPrompt:Q.system_prompt}:{}}}let J=$.compact?await $.compact(Z):void 0;if(J?.messages){let W=m7({sourceMessages:Z.messages,compactedMessages:J.messages,conversationId:Z.conversationId,systemPrompt:J.systemPrompt});await $.saveState?.(W,Z.messages)}return J}}_0();function p0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function v0($,Z){return{inputTokens:$.inputTokens+Math.max(0,Z.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,Z.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,Z.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,Z.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,Z.totalCost??0)}}function XZ($){let Z=p0();for(let Q of $)Z=v0(Z,Q);return Z}function n6($){return typeof $==="number"&&Number.isFinite($)?$:0}function JZ($){let Z=p0();for(let Q of $){let X=Q.metrics;if(!X)continue;Z=v0(Z,{inputTokens:n6(X.inputTokens),outputTokens:n6(X.outputTokens),cacheReadTokens:n6(X.cacheReadTokens),cacheWriteTokens:n6(X.cacheWriteTokens),totalCost:n6(X.cost)})}return Z}function gh($){for(let Z=$.length-1;Z>=0;Z-=1){let Q=$[Z];if(Q?.role!=="assistant")continue;let X=n6(Q.metrics?.inputTokens);return X>0?X:void 0}return}function mh($){if(!$||typeof $!=="object")return;let Z=$,Q=Z.skill??Z.skill_name??Z.skillName;if(typeof Q!=="string")return;let X=Q.trim();return X.length>0?X:void 0}function dW($){if(!$||typeof $!=="object")return{};let Z=$;return{agentId:typeof Z.agentId==="string"?Z.agentId:void 0,conversationId:typeof Z.conversationId==="string"?Z.conversationId:void 0,parentAgentId:typeof Z.parentAgentId==="string"?Z.parentAgentId:void 0}}function K$($){let Z=$.agentId?.trim();if(!Z)return;let Q=$.parentAgentId?.trim()||void 0,X=$.teamRole,J="root";if(X==="teammate")J="team_teammate";else if(X==="lead")J="team_lead";else if(Q)J="subagent";return{agentId:Z,agentKind:J,conversationId:$.conversationId?.trim()||void 0,parentAgentId:Q,createdByAgentId:$.createdByAgentId?.trim()||Q||void 0,isSubagent:Boolean(Q),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:X,teamAgentId:$.teamAgentId?.trim()||void 0}}function ch($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function uh($){let Z=$.cacheWriteTokens??0,Q=$.cacheReadTokens??0;return{tokensIn:Math.max(0,$.inputTokens-Q-Z),tokensOut:$.outputTokens,cacheWriteTokens:Z,cacheReadTokens:Q,totalCost:$.cost}}function dh($){let Z=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let Q of Z){let X=Q?.trim();if(X)return X}return $.isPrimaryAgentEvent?"root":"unknown"}function WZ($,Z,Q){let{sessionId:X,config:J,liveSession:W,emit:j}=$,Y=J.telemetry,V=W?.runtime.teamRuntime,B=Q?.isPrimaryAgentEvent??!0,K=dW(Z),G=K$({agentId:Q?.agentId??K.agentId,conversationId:Q?.conversationId??K.conversationId,parentAgentId:Q?.parentAgentId??K.parentAgentId,createdByAgentId:Q?.createdByAgentId,teamId:Q?.teamId??V?.getTeamId(),teamName:Q?.teamName??V?.getTeamName(),teamRole:Q?.teamRole,teamAgentId:Q?.teamAgentId});if(Z.type==="content_start"&&Z.contentType==="tool"&&Z.toolName==="skills"){let H=mh(Z.input);if(H)SQ(Y,{ulid:X,skillName:H,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:J.providerId,modelId:J.modelId,...G})}if(Z.type==="content_end"&&Z.contentType==="tool"){let H=Z.toolName??"unknown",U=!Z.error;if(a1(Y,{ulid:X,tool:H,autoApproved:void 0,success:U,modelId:J.modelId,provider:J.providerId,...G}),!U&&(H==="editor"||H==="apply_patch"))bQ(Y,{ulid:X,modelId:J.modelId,provider:J.providerId,errorType:Z.error,...G})}if(Z.type==="usage"&&W?.turnUsageBaseline){let H=ch(Z);if(B){W.turnPrimaryUsage=v0(W.turnPrimaryUsage??p0(),H);let F=v0(W.turnUsageBaseline,W.turnPrimaryUsage);$.usageBySession.set(X,F),z8(Y,{ulid:X,provider:J.providerId,model:J.modelId,source:"assistant",mode:J.mode,...G}),fQ(Y,{ulid:X,...uh(Z),provider:J.providerId,model:J.modelId,...G})}else{let F=dh({isPrimaryAgentEvent:B,overrides:Q,eventMetadata:K}),L=W.turnUsageByAgent??new Map;W.turnUsageByAgent=L,L.set(F,v0(L.get(F)??p0(),H))}let U=v0(W.turnPrimaryUsage??p0(),XZ(W.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(X,v0(W.turnAggregateUsageBaseline??W.turnUsageBaseline,U))}if(Z.type==="iteration_end"&&B)$.persistMessages(X,W?.agent.getMessages()??[],W?.config.systemPrompt);j({type:"agent_event",payload:{sessionId:X,event:Z,teamAgentId:Q?.teamAgentId,teamRole:Q!==void 0?Q.teamRole??(B?"lead":void 0):void 0}}),j({type:"chunk",payload:{sessionId:X,stream:"agent",chunk:OF(Z),ts:Date.now()}})}function G$($){return $.workspaceRoot??$.cwd}import{resolveProviderRequestHeaders as wv}from"@cline/llms";import{hasRuntimeConfigExtension as Sv}from"@cline/shared";import{appendFileSync as Uv,readFileSync as Fv}from"node:fs";import{join as Lv}from"node:path";import{augmentNodeCommandForDebug as Dv}from"@cline/shared";import{ensureHookLogDir as uD}from"@cline/shared/storage";function jZ($,Z){if(!Z)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:Z}}import{existsSync as lh,readdirSync as ph}from"node:fs";import{basename as ih,extname as rh,join as ah}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as xD,resolveHooksConfigSearchPaths as nh}from"@cline/shared/storage";function lW($){return nh($)}var YZ;((K)=>{K.TaskStart="TaskStart";K.TaskResume="TaskResume";K.TaskCancel="TaskCancel";K.TaskComplete="TaskComplete";K.TaskError="TaskError";K.PreToolUse="PreToolUse";K.PostToolUse="PostToolUse";K.UserPromptSubmit="UserPromptSubmit";K.PreCompact="PreCompact";K.SessionShutdown="SessionShutdown"})(YZ||={});var pW={["TaskStart"]:"agent_start",["TaskResume"]:"agent_resume",["TaskCancel"]:"agent_abort",["TaskComplete"]:"agent_end",["TaskError"]:"agent_error",["PreToolUse"]:"tool_call",["PostToolUse"]:"tool_result",["UserPromptSubmit"]:"prompt_submit",["PreCompact"]:void 0,["SessionShutdown"]:"session_shutdown"},oh=new Map(Object.values(YZ).map(($)=>[$.toLowerCase(),$])),sh=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function iW($){let Z=rh($).toLowerCase();if(!sh.has(Z))return;let Q=ih($,Z).trim().toLowerCase();return oh.get(Q)}function o6($){let Z=[],Q=new Set,X=lW($).filter((J)=>lh(J));for(let J of X)try{for(let W of ph(J,{withFileTypes:!0})){if(!W.isFile())continue;let j=iW(W.name);if(!j)continue;let Y=ah(J,W.name);if(Q.has(Y))continue;Q.add(Y),Z.push({fileName:j,hookEventName:pW[j],path:Y})}}catch{}return Z.sort((J,W)=>J.path.localeCompare(W.path))}import{HookEventNameSchema as gD,HookEventPayloadSchema as mD,parseHookEventPayload as VZ,resolveHookSessionContext as Xv}from"@cline/shared";import{z as c2}from"zod";import{spawn as th}from"node:child_process";import{augmentNodeCommandForDebug as eh,withResolvedClineBuildEnv as $v}from"@cline/shared";function Zv($){let Z=$.trim();if(!Z)return{};let X=Z.split(`
647
647
  `).map((W)=>W.trim()).filter(Boolean).filter((W)=>W.startsWith("HOOK_CONTROL\t")).map((W)=>W.slice(13)),J=X.length>0?X[X.length-1]:Z;try{return{parsedJson:JSON.parse(J)}}catch(W){return{parseError:W instanceof Error?W.message:"Failed to parse subprocess stdout JSON"}}}function yD($,Z){let Q=$ instanceof Error?$:Error(String($)),X=Q,J=Z.join(" ");if(X.code==="EACCES"){let j=Error(`Failed to execute hook command "${J}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return j.code=X.code,j}let W=Error(`Failed to execute hook command "${J}": ${Q.message}`);return W.code=X.code,W}async function Qv($,Z){let Q=$.stdin;if(!Q)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((X,J)=>{let W=!1,j=(B)=>{if(W)return;W=!0,B()},Y=(B)=>{let K=B.code;return K==="EPIPE"||K==="EOF"||K==="ERR_STREAM_DESTROYED"},V=(B)=>{if(Y(B)){j(X);return}j(()=>J(B))};Q.on("error",V),Q.once("close",()=>Q.off("error",V)),Q.end(Z,(B)=>{if(B){if(Y(B)){j(X);return}j(()=>J(B));return}j(X)})})}async function m2($,Z){let Q=eh(Z.command,{env:Z.env,debugRole:"hook"});if(!Array.isArray(Q)||Q.length===0)throw Error("runSubprocessEvent requires a non-empty command");let X=!!Z.detached,J=th(Q[0],Q.slice(1),{cwd:Z.cwd,env:$v(Z.env),stdio:X?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:X,windowsHide:!0}),W="",j="",Y=!1,V;if(!X&&(!J.stdout||!J.stderr))throw J.kill("SIGKILL"),Error("runSubprocessEvent failed to create stdout/stderr pipes");J.stdout?.on("data",(G)=>{W+=G.toString()}),J.stderr?.on("data",(G)=>{j+=G.toString()});let B=new Promise((G,H)=>{J.once("spawn",()=>{try{Z.onSpawn?.({command:Q,pid:J.pid??void 0,detached:X})}catch{}G()}),J.once("error",(U)=>H(yD(U,Q)))}),K=new Promise((G,H)=>{J.once("error",(U)=>{if(V)clearTimeout(V);H(yD(U,Q))}),J.once("close",(U)=>{if(V)clearTimeout(V);let{parsedJson:F,parseError:L}=Zv(W);G({exitCode:U,stdout:W,stderr:j,parsedJson:F,parseError:L,timedOut:Y})})});if(X)K.catch(()=>{return});if(!X&&(Z.timeoutMs??0)>0)V=setTimeout(()=>{Y=!0,J.kill("SIGKILL")},Z.timeoutMs);if(await Promise.race([Promise.all([B,Qv(J,JSON.stringify($))]),K]),X){J.unref();return}return await K}var rW=50000;function nW($){if($===void 0||$.length<=rW)return $;return`${$.slice(0,rW)}
648
648
  [hook context truncated: exceeded ${rW} characters]`}var Jv=c2.object({contextModification:c2.string().optional(),cancel:c2.boolean().optional(),review:c2.boolean().optional(),errorMessage:c2.string().optional(),context:c2.string().optional(),overrideInput:c2.unknown().optional()}).passthrough();var Wv=["agent","hook"],ID=120000;async function n4($,Z={}){let Q=Z.command??Wv;return await m2($,{command:Q,cwd:Z.cwd,env:Z.env,detached:Z.detached,timeoutMs:Z.timeoutMs,onSpawn:Z.onSpawn})}function aW($){return $ instanceof Error?$:Error(String($))}function hD($){if(!$||typeof $!=="object")return;let Z=Jv.safeParse($);if(!Z.success)return;let Q=Z.data;if(!(("cancel"in Q)||("review"in Q)||("context"in Q)||("contextModification"in Q)||("overrideInput"in Q)||("errorMessage"in Q)))return;let J=typeof Q.context==="string"?Q.context:typeof Q.contextModification==="string"?Q.contextModification:void 0,W=typeof Q.errorMessage==="string"&&Q.errorMessage.trim().length>0?Q.errorMessage:void 0,j=typeof Q.cancel==="boolean"?Q.cancel:void 0;return{cancel:j,review:typeof Q.review==="boolean"?Q.review:void 0,context:j===!0?void 0:nW(J??W),cancelReason:j===!0?W??J:void 0,overrideInput:Object.hasOwn(Q,"overrideInput")?Q.overrideInput:void 0}}function vD($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,X]of Object.entries($))if(typeof X==="string")Z[Q]=X;else Z[Q]=JSON.stringify(X);return Z}function H$($,Z,Q){let X=Q.env??process.env,J=X.CLINE_USER_ID?.trim()||X.USER?.trim()||"unknown",W=Q.cwd||process.cwd();return{clineVersion:X.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:Z.conversationId,sessionContext:Xv(Q.sessionContext,{hookName:$,conversationId:Z.conversationId,agentId:Z.agentId,parentAgentId:Z.parentAgentId}),workspaceRoots:W?[W]:[],workspaceInfo:Q.workspaceInfo,userId:J,agent_id:Z.agentId,parent_agent_id:Z.parentAgentId}}function jv($){return{name:$.name,message:$.message,stack:$.stack}}function Yv($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function Vv($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function Bv($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function Kv($){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 Gv($){if(!$)return;let Z={};if($.cancel===!0){if(Z.stop=!0,$.cancelReason?.trim())Z.reason=$.cancelReason}else if($.context?.trim())Z.appendContext=$.context;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}function Hv($){if(!$)return;let Z={};if($.cancel===!0){if(Z.stop=!0,$.cancelReason?.trim())Z.reason=$.cancelReason}else if($.context?.trim())Z.appendContext=$.context;return Object.keys(Z).length>0?Z:void 0}async function s6($,Z){try{let Q=await n4($,{command:Z.command,cwd:Z.cwd,env:Z.env,detached:!0,onSpawn:Z.onSpawn});Z.onDispatch?.({payload:$,result:Q,detached:!0})}catch(Q){Z.onDispatchError?.(aW(Q),$)}}function cD($={}){return{hooks:{beforeRun:async(Y)=>{let V=Vv(Y);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let K={...H$("agent_resume",V,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await s6(K,$)}else{let K={...H$("agent_start",V,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await s6(K,$)}return},beforeTool:async(Y)=>{let V={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},B={...H$("tool_call",V,$),hookName:"tool_call",iteration:Y.snapshot.iteration,tool_call:{id:Y.toolCall.toolCallId,name:Y.toolCall.toolName,input:Y.input},preToolUse:{toolName:Y.toolCall.toolName,parameters:vD(Y.input)}};try{let K=await n4(B,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs??ID,onSpawn:$.onSpawn});if($.onDispatch?.({payload:B,result:K,detached:!1}),K?.timedOut)throw Error("tool_call hook command timed out");if(K?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${K.parseError}`);return Gv(hD(K?.parsedJson))}catch(K){$.onDispatchError?.(aW(K),B);return}},afterTool:async(Y)=>{let V=Kv(Y),B={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},K={...H$("tool_result",B,$),hookName:"tool_result",iteration:Y.snapshot.iteration,tool_result:V,postToolUse:{toolName:V.name,parameters:vD(V.input),result:typeof V.output==="string"?V.output:JSON.stringify(V.output),success:!V.error,executionTimeMs:V.durationMs}};try{let G=await n4(K,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs??ID,onSpawn:$.onSpawn});if($.onDispatch?.({payload:K,result:G,detached:!1}),G?.timedOut)throw Error("tool_result hook command timed out");if(G?.parseError)throw Error(`tool_result hook produced invalid control JSON: ${G.parseError}`);return Hv(hD(G?.parsedJson))}catch(G){$.onDispatchError?.(aW(G),K);return}},afterRun:async({snapshot:Y,result:V})=>{let B={agentId:Y.agentId,conversationId:Y.conversationId??Y.runId??Y.agentId,parentAgentId:Y.parentAgentId??null};if(V.status==="completed"){let H={...H$("agent_end",B,$),hookName:"agent_end",iteration:V.iterations,turn:{outputText:V.outputText,status:V.status},taskComplete:{taskMetadata:{}}};await s6(H,$);return}let K=V.status==="aborted"||Yv(V.error?.message)?"agent_abort":"agent_error",G=K==="agent_error"?{...H$(K,B,$),hookName:K,iteration:V.iterations,error:jv(V.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...H$(K,B,$),hookName:K,reason:V.error?.message,taskCancel:{taskMetadata:{}}};await s6(G,$)},onEvent:async(Y)=>{if(Y.type!=="message-added"||Y.message.role!=="user")return;let V={agentId:Y.snapshot.agentId,conversationId:Y.snapshot.conversationId??Y.snapshot.runId??Y.snapshot.agentId,parentAgentId:Y.snapshot.parentAgentId??null},B={...H$("prompt_submit",V,$),hookName:"prompt_submit",userPromptSubmit:{prompt:Bv(Y.message.content),attachments:[]}};await s6(B,$)}},shutdown:async({agentId:Y,conversationId:V,parentAgentId:B,reason:K})=>{let G={...H$("session_shutdown",{agentId:Y,conversationId:V,parentAgentId:B},$),hookName:"session_shutdown",reason:K};await s6(G,$)}}}function BZ($){if(!$||typeof $!=="object")return{};let Z={};for(let[Q,X]of Object.entries($))Z[Q]=typeof X==="string"?X:JSON.stringify(X);return Z}function o4($,Z,Q){let X=Q instanceof Error?`: ${Q.message}`:"",J=`${Z}${X}`;if($){try{$.log(J,{severity:"warn",...Q!==void 0?{error:Q}:{}})}catch{}return}console.warn(J)}function _v($,Z){if(!Z)return $;if(!$)return{...Z};let Q=[$.context,Z.context].filter((W)=>typeof W==="string"&&W.length>0).join(`
649
649
  `),X=[$.cancelReason,Z.cancelReason].filter((W)=>typeof W==="string"&&W.length>0).join(`
650
650
  `),J=[...$.appendMessages??[],...Z.appendMessages??[]];return{cancel:$.cancel===!0||Z.cancel===!0?!0:void 0,review:$.review===!0||Z.review===!0?!0:void 0,context:Q||void 0,cancelReason:X||void 0,overrideInput:Z.overrideInput!==void 0?Z.overrideInput:$.overrideInput,systemPrompt:Z.systemPrompt!==void 0?Z.systemPrompt:$.systemPrompt,appendMessages:J.length>0?J:void 0}}function zv($){if(!$||typeof $!=="object")return;let Z=$,Q=typeof Z.context==="string"?Z.context:typeof Z.contextModification==="string"?Z.contextModification:void 0,X=typeof Z.errorMessage==="string"&&Z.errorMessage.trim().length>0?Z.errorMessage:void 0,J=typeof Z.cancel==="boolean"?Z.cancel:void 0;return{cancel:J,review:typeof Z.review==="boolean"?Z.review:void 0,context:J===!0?void 0:nW(Q??X),cancelReason:J===!0?X??Q:void 0,overrideInput:Object.hasOwn(Z,"overrideInput")?Z.overrideInput:void 0}}function oW($){let Z=String($??"").toLowerCase();return Z.includes("cancel")||Z.includes("abort")||Z.includes("interrupt")}function g0($,Z){let Q=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",X={rootSessionId:Z.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:X,workspaceRoots:Z.workspacePath?[Z.workspacePath]:[],workspaceInfo:Z.workspaceInfo,userId:Q,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}async function sW($,Z){if(Z.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await m2($,Z)}catch(Q){let X=qv(Z.command,process.platform,Q);if(!X)throw Q;return await m2($,{...Z,command:X})}}function Ov($){try{let Q=Fv($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!Q?.startsWith("#!"))return;let X=Q.slice(2).trim();if(!X)return;let J=X.split(/\s+/).filter(Boolean);return J.length>0?J:void 0}catch{return}}function Nv($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function qv($,Z=process.platform,Q){if(Z!=="win32"||!Nv(Q))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function lD($){if($.length===0)return;let[Z,...Q]=$,X=Z.replace(/\\/g,"/").toLowerCase(),J=X.split("/").at(-1)??X;if(J==="env")return lD(Q);if(J==="bash"||J==="sh"||J==="zsh")return[J,...Q];if(J==="python3"||J==="python")return process.platform==="win32"?["py","-3",...Q]:[J,...Q];return $}function Av($){let Z=Ov($);if(Z&&Z.length>0)return[...lD(Z)??Z,$];let Q=$.toLowerCase();if(Q.endsWith(".sh")||Q.endsWith(".bash")||Q.endsWith(".zsh"))return["bash",$];if(Q.endsWith(".js")||Q.endsWith(".mjs")||Q.endsWith(".cjs"))return Dv(["node",$],{debugRole:"hook"});if(Q.endsWith(".ts")||Q.endsWith(".mts")||Q.endsWith(".cts"))return["bun","run",$];if(Q.endsWith(".py"))return process.platform==="win32"?["py","-3",$]:["python3",$];if(Q.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",$];return["bash",$]}function Tv($){let Z={};for(let Q of o6($)){if(!Q.hookEventName)continue;let X=Q.hookEventName,J=Z[X]??[];J.push(Av(Q.path)),Z[X]=J}return Z}async function dD($){let Z;for(let Q of $.commands){let X=Q.join(" ");try{let J=await sW($.payload,{command:Q,cwd:$.cwd,env:process.env,detached:!1,timeoutMs:$.timeoutMs});if(J?.timedOut){o4($.logger,`hook command timed out: ${X}`);continue}if(J?.parseError){o4($.logger,`hook command returned invalid JSON control output: ${X} (${J.parseError})`);continue}Z=_v(Z,zv(J?.parsedJson))}catch(J){o4($.logger,`hook command failed: ${X}`,J)}}return Z}async function t6($){if($.detached){for(let Z of $.commands){let Q=Z.join(" ");sW($.payload,{command:Z,cwd:$.cwd,env:process.env,detached:!0}).catch((X)=>{o4($.logger,`hook command failed: ${Q}`,X)})}return}await Promise.all($.commands.map(async(Z)=>{let Q=Z.join(" ");try{await sW($.payload,{command:Z,cwd:$.cwd,env:process.env,detached:$.detached})}catch(X){o4($.logger,`hook command failed: ${Q}`,X)}}))}function a$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function tW($,Z){return{...a$($.snapshot),userMessage:Z}}function pD($){return{...a$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function iD($){return{...a$($.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 rD($){return $.filter((Z)=>Z.type==="text"&&typeof Z.text==="string").map((Z)=>Z.text).join("")}function Ev($){if(!$)return;let Z={};if($.cancel===!0){if(Z.stop=!0,$.cancelReason?.trim())Z.reason=$.cancelReason}else if($.context?.trim())Z.appendContext=$.context;if($.overrideInput!==void 0)Z.input=$.overrideInput;return Object.keys(Z).length>0?Z:void 0}function Mv($){if(!$)return;let Z={};if($.cancel===!0){if(Z.stop=!0,$.cancelReason?.trim())Z.reason=$.cancelReason}else if($.context?.trim())Z.appendContext=$.context;return Object.keys(Z).length>0?Z:void 0}function KZ($){let Z={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},Q=(X)=>{let J=`${JSON.stringify({ts:new Date().toISOString(),...X})}
651
651
  `,j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??Lv(uD(),"hooks.jsonl");uD(j),Uv(j,J,"utf8")};return{beforeRun:async(X)=>{let J=tW(X,"");Q({...g0(J,Z),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(X)=>{let J=pD(X);Q({...g0(J,Z),hookName:"tool_call",iteration:J.iteration,tool_call:{id:J.call.id,name:J.call.name,input:J.call.input},preToolUse:{toolName:J.call.name,parameters:BZ(J.call.input)}});return},afterTool:async(X)=>{let J=iD(X);Q({...g0(J,Z),hookName:"tool_result",iteration:J.iteration,tool_result:J.record,postToolUse:{toolName:J.record.name,parameters:BZ(J.record.input),result:typeof J.record.output==="string"?J.record.output:JSON.stringify(J.record.output),success:!J.record.error,executionTimeMs:J.record.durationMs}});return},afterRun:async({snapshot:X,result:J})=>{let W=a$(X);if(J.status==="completed"){Q({...g0(W,Z),hookName:"agent_end",iteration:J.iterations,turn:{outputText:J.outputText,status:J.status},taskComplete:{taskMetadata:{}}});return}if(J.status==="aborted"||oW(J.error?.message)){Q({...g0(W,Z),hookName:"agent_abort",reason:J.error?.message,taskCancel:{taskMetadata:{}}});return}if(J.error)Q({...g0(W,Z),hookName:"agent_error",iteration:J.iterations,error:{name:J.error.name,message:J.error.message,stack:J.error.stack}})},onEvent:async(X)=>{if(X.type!=="message-added"||X.message.role!=="user")return;let J=tW({snapshot:X.snapshot},rD(X.message.content));Q({...g0(J,Z),hookName:"prompt_submit",userPromptSubmit:{prompt:J.userMessage,attachments:[]}})}}}function eW($){let Z=Tv($.workspacePath);if(!Object.values(Z).some((G)=>G.length>0))return;let X=async(G,H)=>{let U=Z[H]??[];if(U.length===0)return;await t6({commands:U,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:H==="agent_resume"?{...g0(G,$),hookName:H,taskResume:{taskMetadata:{},previousState:{}}}:{...g0(G,$),hookName:H,taskStart:{taskMetadata:{}}}})},J=async(G)=>{let H=Z.prompt_submit??[];if(H.length>0)await t6({commands:H,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...g0(G,$),hookName:"prompt_submit",userPromptSubmit:{prompt:G.userMessage,attachments:[]}}})},W=async(G)=>{let H=Z.tool_call??[];if(H.length===0)return;return dD({commands:H,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...g0(G,$),hookName:"tool_call",iteration:G.iteration,tool_call:{id:G.call.id,name:G.call.name,input:G.call.input},preToolUse:{toolName:G.call.name,parameters:BZ(G.call.input)}}})},j=async(G)=>{let H=Z.tool_result??[];if(H.length===0)return;return dD({commands:H,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...g0(G,$),hookName:"tool_result",iteration:G.iteration,tool_result:G.record,postToolUse:{toolName:G.record.name,parameters:BZ(G.record.input),result:typeof G.record.output==="string"?G.record.output:JSON.stringify(G.record.output),success:!G.record.error,executionTimeMs:G.record.durationMs}}})},Y=async(G)=>{let H=Z.agent_end??[];if(H.length===0)return;await t6({commands:H,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...g0(G,$),hookName:"agent_end",iteration:G.iteration,turn:G.turn,taskComplete:{taskMetadata:{}}}})},V=async(G)=>{let H=Z.agent_error??[];if(H.length===0)return;await t6({commands:H,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...g0(G,$),hookName:"agent_error",iteration:G.iteration,error:{name:G.error.name,message:G.error.message,stack:G.error.stack}}})},B=async(G)=>{if(oW(G.reason)){let U=Z.agent_abort??[];if(U.length>0)await t6({commands:U,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...g0(G,$),hookName:"agent_abort",reason:G.reason,taskCancel:{taskMetadata:{}}}})}let H=Z.session_shutdown??[];if(H.length===0)return;await t6({commands:H,cwd:$.cwd,logger:$.logger,detached:$.detachAsyncHooks??!0,payload:{...g0(G,$),hookName:"session_shutdown",reason:G.reason}})},K={};if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0||(Z.prompt_submit?.length??0)>0){if((Z.agent_start?.length??0)>0||(Z.agent_resume?.length??0)>0)K.beforeRun=async(G)=>{let H=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await X(a$(G.snapshot),H);return};if((Z.prompt_submit?.length??0)>0)K.onEvent=async(G)=>{if(G.type!=="message-added"||G.message.role!=="user")return;await J(tW({snapshot:G.snapshot},rD(G.message.content)))}}if((Z.tool_call?.length??0)>0)K.beforeTool=async(G)=>{let H=await W(pD(G));return Ev(H)};if((Z.tool_result?.length??0)>0)K.afterTool=async(G)=>{let H=await j(iD(G));return Mv(H)};if((Z.agent_end?.length??0)>0)K.afterRun=async({snapshot:G,result:H})=>{if(H.status!=="completed")return;await Y({...a$(G),iteration:H.iterations,turn:{outputText:H.outputText,status:H.status}})};if((Z.agent_error?.length??0)>0||(Z.agent_abort?.length??0)>0||(Z.session_shutdown?.length??0)>0){let G=K.afterRun;K.afterRun=async(H)=>{await G?.(H);let{snapshot:U,result:F}=H;if(F.status==="aborted"||oW(F.error?.message)){await B({...a$(U),reason:F.error?.message});return}if(F.error)await V({...a$(U),iteration:F.iterations,error:F.error})}}return K}function GZ($){return jZ("core.hook_config_files",eW($))}function u2($,Z){let Q=$.map((X)=>X[Z]).filter((X)=>typeof X==="function");if(Q.length===0)return;return async(X)=>{let J;for(let W of Q){let j=await W(X);if(!j||typeof j!=="object")continue;let Y=j,V=[J?.appendContext,Y.appendContext].filter((B)=>typeof B==="string"&&B.length>0).join(`
652
652
 
653
- `);J={...J??{},...Y,stop:J?.stop===!0||Y.stop===!0?!0:Y.stop,appendContext:V||void 0,options:J?.options||Y.options?{...J?.options??{},...Y.options??{}}:void 0}}return J}}function s4($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:u2(Z,"beforeRun"),afterRun:u2(Z,"afterRun"),beforeModel:u2(Z,"beforeModel"),afterModel:u2(Z,"afterModel"),beforeTool:u2(Z,"beforeTool"),afterTool:u2(Z,"afterTool"),onEvent:u2(Z,"onEvent")}}import{z as _1}from"zod";var t4=W6;var $j=_1.object({providerId:_1.string().min(1),modelId:_1.string().min(1)}),aD=_1.object({voiceInput:$j.optional()}),nD=_1.object({settings:W6,updatedAt:_1.string().datetime(),tokenSource:_1.enum(["manual","oauth","migration"]).default("manual")}),HZ=_1.object({version:_1.literal(1),lastUsedProvider:_1.string().min(1).optional(),modes:aD.default({}),providers:_1.record(_1.string(),nD)});function e6(){return{version:1,modes:{},providers:{}}}M1();import{upsertWorkspaceInfo as Rv,WorkspaceManifestSchema as Zj}from"@cline/shared";class UZ{manifest;listeners=new Set;constructor($){this.manifest=Zj.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await E7($);return this.manifest=Rv(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=h$($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=Zj.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let X=await this.addWorkspacePath(Z);return this.manifest=Zj.parse({...this.manifest,currentWorkspacePath:X.rootPath}),this.emit({type:"workspace_switched",workspace:X}),X}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=h$($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}_0();import{createHash as Cv}from"node:crypto";var oD=new Set,sD=new Set;function Pv($){return Cv("sha256").update($).digest("hex")}function fv($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function tD($){if(!$.telemetry)return;let Z=Pv($.rootPath),Q=$.rootCount??1;if(!oD.has(Z))oD.add(Z),MQ($.telemetry,{root_count:Q,vcs_types:fv($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!sD.has(Z)){sD.add(Z);let X=Error($.initError.message);X.name=$.initError.errorType||"Error",RQ($.telemetry,X,{fallback_to_single_root:!0,workspace_count:Q})}}function bv($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function kv($,Z,Q){if(Z.length>0)for(let W of Z)Q?.log(W.message,{severity:"warn"});if($.length===0)return;let X=$.slice(0,3).map(bv).join("; "),J=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${X}${J}. Use --verbose for more details.`,{severity:"warn"});for(let W of $)Q?.log(`Plugin initialization failed (${W.phase}) for ${W.pluginPath}`,{severity:"warn",stack:W.stack,pluginPath:W.pluginPath,pluginName:W.pluginName})}function xv($){let Z=$?.["X-CLIENT-TYPE"]?.trim();if(!Z)return;let Q=$?.["X-CLIENT-VERSION"]?.trim();return{name:Z,...Q?{version:Q}:{}}}function yv($,Z){let Q=typeof $.thinking==="boolean",X=typeof $.reasoningEffort==="string";if(!Q&&!X)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...X?{effort:$.reasoningEffort}:{}}}function Qj($,Z){return Sv($,Z)}function Iv($,Z,Q,X,J,W){let j=X.getProviderSettings($.providerId),Y=J||j?.modelCatalog?{...J??{},...j?.modelCatalog??{}}:void 0,V=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,B=wv({providerId:$.providerId,sessionId:Z,source:Q,defaultSource:Z0.CLI,client:{name:$.extensionContext?.client?.name,version:$.extensionContext?.client?.version,versionHeaderFallback:$.headers?.["X-CLIENT-VERSION"],platform:$.extensionContext?.client?.platform,platformVersion:$.extensionContext?.client?.platformVersion,isMultiRoot:$.extensionContext?.client?.isMultiRoot},coreVersion:k$,openAiCodex:{accountId:V?.accountId??j?.auth?.accountId,accessToken:V?.accessToken??$.apiKey??j?.auth?.accessToken??j?.apiKey,userAgentVersion:process.env.npm_package_version},headers:{stored:j?.headers,config:$.headers,session:V?.headers}}),K={...j??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??j?.apiKey,baseUrl:$.baseUrl??j?.baseUrl,headers:void 0,reasoning:yv($,j?.reasoning),modelCatalog:Y},G={...o1(K),...V??{}};if(B)G.headers=B;if($.knownModels)G.knownModels=$.knownModels;if($.extensionContext)G.extensionContext=$.extensionContext;let U=$.fetch??G.fetch??W;if(U)G.fetch=U;return G}async function eD($){let{input:Z,sessionId:Q,providerSettingsManager:X,defaultTelemetry:J,defaultLogger:W,defaultCapabilities:j,defaultToolPolicies:Y,defaultFetch:V,onPluginEvent:B,onTeamEvent:K,createSubAgentLifecycleCallbacks:G,createSpawnTool:H,localRuntime:U,readSessionMetadata:F,writeSessionMetadata:L}=$,D=G$(Z.config),{modelCatalogDefaults:z,userInstructionService:_,configExtensions:O,onTeamRestored:A,...q}=U??{},N=Object.keys(q).length>0?q:void 0,{workspaceInfo:T,workspaceMetadata:M,gitState:d,durationMs:b,vcsType:S,initError:E}=await tU(D),I=N?.extensionContext,f=I?.client?void 0:xv(Z.config.headers),r={...I??{},...f?{client:f}:{},workspace:{...T,...I?.workspace??{}},session:{...I?.session??{},sessionId:Q},logger:I?.logger??N?.logger??W,telemetry:I?.telemetry??N?.telemetry??J};tD({telemetry:r.telemetry,rootPath:T.rootPath,workspaceInfo:T,rootCount:1,vcsType:S,durationMs:b,initError:E,featureFlagEnabled:!0});let w=Qj(O,"hooks")?GZ({cwd:Z.config.cwd,workspacePath:D,rootSessionId:Q,logger:N?.logger,workspaceInfo:T}):void 0,k=zF(N?.hooks)?void 0:KZ({rootSessionId:Q,workspacePath:D,workspaceInfo:T}),m=s4([N?.hooks,k]),t;if(Qj(O,"plugins"))try{t=await _9({pluginPaths:N?.pluginPaths,workspacePath:D,cwd:Z.config.cwd,onEvent:B,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:T,session:r.session,client:r.client,user:r.user,logger:r.logger,telemetry:r.telemetry,automation:r.automation}),kv(t.failures,t.warnings,N?.logger)}catch(c0){let W2=c0 instanceof Error?c0.message:String(c0);N?.logger?.log?.(`plugin loading failed; continuing without plugins (${W2})`)}let Y0=MJ(w?[w]:void 0,MJ(N?.extensions,T3(t?.extensions))),X1=Qj(O,"plugins")?M$(t?.pluginPaths??[]):void 0,m0={...Z.config,...N??{},sessionId:Q,hooks:m,extensions:Y0,extensionContext:r,telemetry:r.telemetry,logger:r.logger},i1=Iv(m0,Q,Z.source,X,z,V),J1=s4([m0.hooks,m0.checkpoint?.enabled===!0?wL({cwd:m0.cwd,sessionId:Q,logger:m0.logger,createCheckpoint:m0.checkpoint?.createCheckpoint,readSessionMetadata:F,writeSessionMetadata:L}):void 0]),I0={...m0,providerConfig:i1,workspaceMetadata:M,hooks:J1},r0=Z.toolPolicies??m0.toolPolicies??Y,i=o0(j,Z.capabilities),W1=i?.requestToolApproval,g=i?.toolExecutors,G0=G?.(I0),C0=new UZ({currentWorkspacePath:T.rootPath,workspaces:{[T.rootPath]:T}});return{effectiveInput:Z,config:I0,providerConfig:i1,workspaceMetadata:M,workspaceInfo:T,gitState:d,extensions:Y0,hooks:J1,toolPolicies:r0,requestToolApproval:W1,pluginSandboxShutdown:t?.shutdown,runtimeBuilderInput:{config:I0,hooks:J1,extensions:Y0,onTeamEvent:K,createSpawnTool:H,onTeamRestored:A,onSubAgentEvent:G0?.onSubAgentEvent,onSubAgentStart:G0?.onSubAgentStart,onSubAgentEnd:G0?.onSubAgentEnd,userInstructionService:_,pluginSkillDirectories:X1,configExtensions:O,toolExecutors:g,toolPolicies:r0,workspaceManager:C0,logger:I0.logger,telemetry:I0.telemetry,requestToolApproval:W1}}}import{resolveDocumentsExtensionPath as hv}from"@cline/shared/storage";_0();function $_($,Z,Q,X,J){if(Q)PQ($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});else CQ($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});vv($.telemetry,{workspacePath:X})}function vv($,Z){let Q=hv("Hooks"),X=o6(Z.workspacePath),J=new Map;for(let W of X){let j=W.hookEventName??"unknown",Y=J.get(j)??{global:0,workspace:0};if(W.path===Q||W.path.startsWith(`${Q}/`))Y.global+=1;else Y.workspace+=1;J.set(j,Y)}for(let[W,j]of J.entries())vQ($,W,j.global,j.workspace)}function Z_($,Z){for(let Q of Z.mentions)IQ($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)xQ($,"file",Q.length);for(let Q of Z.ignoredMentions)yQ($,"file","not_found",Q)}import{chmodSync as D_,existsSync as Kj,mkdirSync as wg,readFileSync as Sg,renameSync as bg,rmSync as kg,writeFileSync as xg}from"node:fs";import{basename as __,dirname as Gj}from"node:path";import{resolveProviderSettingsPath as yg}from"@cline/shared/storage";import{existsSync as gv,mkdirSync as mv,readFileSync as cv,renameSync as uv,rmSync as dv,writeFileSync as lv}from"node:fs";import{mkdir as pv,readFile as iv,rename as rv,rm as av,writeFile as nv}from"node:fs/promises";import{dirname as Jj,join as ov}from"node:path";import*as E0 from"@cline/llms";import{ApiFormatSchema as sv,ModelCapabilitySchema as tv,ModelModalitiesSchema as ev,ModelOperationModeSchema as $g,ModelOperationSchema as Zg,ProviderCapabilitySchema as Qg,ProviderClientSchema as Xg,ProviderProtocolSchema as Jg}from"@cline/shared";import{z as Q0}from"zod";var Xj=Q0.number().finite().positive().optional().catch(void 0),e4=Q0.number().finite().nonnegative().optional().catch(void 0),Wg=Q0.object({id:Q0.string().optional(),name:Q0.string().optional(),maxTokens:Xj,contextWindow:Xj,maxInputTokens:Xj,capabilities:Q0.array(tv).optional(),supportsVision:Q0.boolean().optional(),supportsAttachments:Q0.boolean().optional(),supportsReasoning:Q0.boolean().optional(),operation:Zg.optional(),operationModes:Q0.array($g).optional(),modalities:ev.optional(),inputPrice:e4,outputPrice:e4,cacheReadsPrice:e4,cacheWritesPrice:e4,temperature:e4,apiFormat:sv.optional()}).passthrough(),jg=Q0.object({name:Q0.string(),baseUrl:Q0.string(),defaultModelId:Q0.string().optional(),protocol:Jg.optional(),client:Xg.optional(),capabilities:Q0.array(Qg).optional(),modelsSourceUrl:Q0.string().optional()}).passthrough(),Q_=Q0.object({provider:jg.optional(),models:Q0.record(Q0.string(),Wg).optional()}).passthrough(),X_=Q0.object({version:Q0.literal(1),providers:Q0.record(Q0.string(),Q_)}),Yg=Q0.object({version:Q0.literal(1),providers:Q0.record(Q0.string(),Q0.unknown())}),FZ=new Set;function J_($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function n$($){return ov(Jj($.getFilePath()),"models.json")}function LZ(){return{version:1,providers:{}}}function W_($){let Z=Yg.safeParse($);if(!Z.success)return j0("models.json content is not a valid models file envelope; starting from an empty registry"),LZ();let Q={};for(let[X,J]of Object.entries(Z.data.providers)){let W=Q_.safeParse(J);if(W.success)Q[X]=W.data;else j0(`models.json: dropping invalid entry for provider=${X}`)}return{version:1,providers:Q}}function DZ($){if(!gv($))return LZ();try{let Z=cv($,"utf8");return W_(JSON.parse(Z))}catch{j0(`models.json at ${$} exists but is unreadable or invalid JSON; treating as an empty registry`)}return LZ()}async function $8($){try{let Z=await iv($,"utf8");return W_(JSON.parse(Z))}catch(Z){if(Z?.code!=="ENOENT")j0(`models.json at ${$} exists but is unreadable or invalid JSON; treating as an empty registry`)}return LZ()}function Wj($,Z){mv(Jj($),{recursive:!0});let Q=X_.parse(Z),X=`${$}.${process.pid}.tmp`;try{lv(X,`${JSON.stringify(Q,null,2)}
653
+ `);J={...J??{},...Y,stop:J?.stop===!0||Y.stop===!0?!0:Y.stop,appendContext:V||void 0,options:J?.options||Y.options?{...J?.options??{},...Y.options??{}}:void 0}}return J}}function s4($){let Z=$.filter((Q)=>Q!==void 0);if(Z.length===0)return;return{beforeRun:u2(Z,"beforeRun"),afterRun:u2(Z,"afterRun"),beforeModel:u2(Z,"beforeModel"),afterModel:u2(Z,"afterModel"),beforeTool:u2(Z,"beforeTool"),afterTool:u2(Z,"afterTool"),onEvent:u2(Z,"onEvent")}}import{z as _1}from"zod";var t4=W6;var $j=_1.object({providerId:_1.string().min(1),modelId:_1.string().min(1)}),aD=_1.object({voiceInput:$j.optional()}),nD=_1.object({settings:W6,updatedAt:_1.string().datetime(),tokenSource:_1.enum(["manual","oauth","migration"]).default("manual")}),HZ=_1.object({version:_1.literal(1),lastUsedProvider:_1.string().min(1).optional(),modes:aD.default({}),providers:_1.record(_1.string(),nD)});function e6(){return{version:1,modes:{},providers:{}}}M1();import{upsertWorkspaceInfo as Rv,WorkspaceManifestSchema as Zj}from"@cline/shared";class UZ{manifest;listeners=new Set;constructor($){this.manifest=Zj.parse($??{workspaces:{}})}async addWorkspacePath($){let Z=await E7($);return this.manifest=Rv(this.manifest,Z),this.emit({type:"workspace_added",workspace:Z}),Z}async switchWorkspace($){let Z=h$($),Q=this.manifest.workspaces[Z];if(Q)return this.manifest=Zj.parse({...this.manifest,currentWorkspacePath:Z}),this.emit({type:"workspace_switched",workspace:Q}),Q;let X=await this.addWorkspacePath(Z);return this.manifest=Zj.parse({...this.manifest,currentWorkspacePath:X.rootPath}),this.emit({type:"workspace_switched",workspace:X}),X}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let Z=h$($);return this.manifest.workspaces[Z]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let Z of this.listeners)Z($)}}_0();import{createHash as Cv}from"node:crypto";var oD=new Set,sD=new Set;function Pv($){return Cv("sha256").update($).digest("hex")}function fv($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function tD($){if(!$.telemetry)return;let Z=Pv($.rootPath),Q=$.rootCount??1;if(!oD.has(Z))oD.add(Z),MQ($.telemetry,{root_count:Q,vcs_types:fv($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!sD.has(Z)){sD.add(Z);let X=Error($.initError.message);X.name=$.initError.errorType||"Error",RQ($.telemetry,X,{fallback_to_single_root:!0,workspace_count:Q})}}function bv($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function kv($,Z,Q){if(Z.length>0)for(let W of Z)Q?.log(W.message,{severity:"warn"});if($.length===0)return;let X=$.slice(0,3).map(bv).join("; "),J=$.length>3?`; and ${$.length-3} more`:"";Q?.log(`Some plugins failed to initialize. ${X}${J}. Use --verbose for more details.`,{severity:"warn"});for(let W of $)Q?.log(`Plugin initialization failed (${W.phase}) for ${W.pluginPath}`,{severity:"warn",stack:W.stack,pluginPath:W.pluginPath,pluginName:W.pluginName})}function xv($){let Z=$?.["X-CLIENT-TYPE"]?.trim();if(!Z)return;let Q=$?.["X-CLIENT-VERSION"]?.trim();return{name:Z,...Q?{version:Q}:{}}}function yv($,Z){let Q=typeof $.thinking==="boolean",X=typeof $.reasoningEffort==="string";if(!Q&&!X)return Z;return{...Z??{},...Q?{enabled:$.thinking}:{},...X?{effort:$.reasoningEffort}:{}}}function Qj($,Z){return Sv($,Z)}function Iv($,Z,Q,X,J,W){let j=X.getProviderSettings($.providerId),Y=J||j?.modelCatalog?{...J??{},...j?.modelCatalog??{}}:void 0,V=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0,B=wv({providerId:$.providerId,sessionId:Z,source:Q,defaultSource:Z0.CLI,client:{name:$.extensionContext?.client?.name,version:$.extensionContext?.client?.version,versionHeaderFallback:$.headers?.["X-CLIENT-VERSION"],platform:$.extensionContext?.client?.platform,platformVersion:$.extensionContext?.client?.platformVersion,isMultiRoot:$.extensionContext?.client?.isMultiRoot},coreVersion:k$,openAiCodex:{accountId:V?.accountId??j?.auth?.accountId,accessToken:V?.accessToken??$.apiKey??j?.auth?.accessToken??j?.apiKey,userAgentVersion:process.env.npm_package_version},headers:{stored:j?.headers,config:$.headers,session:V?.headers}}),K={...j??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??j?.apiKey,baseUrl:$.baseUrl??j?.baseUrl,headers:void 0,reasoning:yv($,j?.reasoning),modelCatalog:Y},G={...o1(K),...V??{}};if(B)G.headers=B;if($.knownModels)G.knownModels=$.knownModels;if($.extensionContext)G.extensionContext=$.extensionContext;let U=$.fetch??G.fetch??W;if(U)G.fetch=U;return G}async function eD($){let{input:Z,sessionId:Q,providerSettingsManager:X,defaultTelemetry:J,defaultLogger:W,defaultCapabilities:j,defaultToolPolicies:Y,defaultFetch:V,onPluginEvent:B,onTeamEvent:K,createSubAgentLifecycleCallbacks:G,createSpawnTool:H,localRuntime:U,readSessionMetadata:F,writeSessionMetadata:L}=$,D=G$(Z.config),{modelCatalogDefaults:z,userInstructionService:_,configExtensions:O,onTeamRestored:A,...q}=U??{},N=Object.keys(q).length>0?q:void 0,{workspaceInfo:T,workspaceMetadata:M,gitState:d,durationMs:b,vcsType:S,initError:E}=await tU(D),I=N?.extensionContext,P=I?.client?void 0:xv(Z.config.headers),i={...I??{},...P?{client:P}:{},workspace:{...T,...I?.workspace??{}},session:{...I?.session??{},sessionId:Q},logger:I?.logger??N?.logger??W,telemetry:I?.telemetry??N?.telemetry??J};tD({telemetry:i.telemetry,rootPath:T.rootPath,workspaceInfo:T,rootCount:1,vcsType:S,durationMs:b,initError:E,featureFlagEnabled:!0});let w=Qj(O,"hooks")?GZ({cwd:Z.config.cwd,workspacePath:D,rootSessionId:Q,logger:N?.logger,workspaceInfo:T}):void 0,k=zF(N?.hooks)?void 0:KZ({rootSessionId:Q,workspacePath:D,workspaceInfo:T}),m=s4([N?.hooks,k]),t;if(Qj(O,"plugins"))try{t=await _9({pluginPaths:N?.pluginPaths,workspacePath:D,cwd:Z.config.cwd,onEvent:B,providerId:Z.config.providerId,modelId:Z.config.modelId,workspaceInfo:T,session:i.session,client:i.client,user:i.user,logger:i.logger,telemetry:i.telemetry,automation:i.automation}),kv(t.failures,t.warnings,N?.logger)}catch(c0){let W2=c0 instanceof Error?c0.message:String(c0);N?.logger?.log?.(`plugin loading failed; continuing without plugins (${W2})`)}let Y0=MJ(w?[w]:void 0,MJ(N?.extensions,T3(t?.extensions))),X1=Qj(O,"plugins")?M$(t?.pluginPaths??[]):void 0,m0={...Z.config,...N??{},sessionId:Q,hooks:m,extensions:Y0,extensionContext:i,telemetry:i.telemetry,logger:i.logger},i1=Iv(m0,Q,Z.source,X,z,V),J1=s4([m0.hooks,m0.checkpoint?.enabled===!0?wL({cwd:m0.cwd,sessionId:Q,logger:m0.logger,createCheckpoint:m0.checkpoint?.createCheckpoint,readSessionMetadata:F,writeSessionMetadata:L}):void 0]),I0={...m0,providerConfig:i1,workspaceMetadata:M,hooks:J1},r0=Z.toolPolicies??m0.toolPolicies??Y,r=o0(j,Z.capabilities),W1=r?.requestToolApproval,g=r?.toolExecutors,G0=G?.(I0),C0=new UZ({currentWorkspacePath:T.rootPath,workspaces:{[T.rootPath]:T}});return{effectiveInput:Z,config:I0,providerConfig:i1,workspaceMetadata:M,workspaceInfo:T,gitState:d,extensions:Y0,hooks:J1,toolPolicies:r0,requestToolApproval:W1,pluginSandboxShutdown:t?.shutdown,runtimeBuilderInput:{config:I0,hooks:J1,extensions:Y0,onTeamEvent:K,createSpawnTool:H,onTeamRestored:A,onSubAgentEvent:G0?.onSubAgentEvent,onSubAgentStart:G0?.onSubAgentStart,onSubAgentEnd:G0?.onSubAgentEnd,userInstructionService:_,pluginSkillDirectories:X1,configExtensions:O,toolExecutors:g,toolPolicies:r0,workspaceManager:C0,logger:I0.logger,telemetry:I0.telemetry,requestToolApproval:W1}}}import{resolveDocumentsExtensionPath as hv}from"@cline/shared/storage";_0();function $_($,Z,Q,X,J){if(Q)PQ($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});else CQ($.telemetry,{ulid:Z,apiProvider:$.providerId,...J});vv($.telemetry,{workspacePath:X})}function vv($,Z){let Q=hv("Hooks"),X=o6(Z.workspacePath),J=new Map;for(let W of X){let j=W.hookEventName??"unknown",Y=J.get(j)??{global:0,workspace:0};if(W.path===Q||W.path.startsWith(`${Q}/`))Y.global+=1;else Y.workspace+=1;J.set(j,Y)}for(let[W,j]of J.entries())vQ($,W,j.global,j.workspace)}function Z_($,Z){for(let Q of Z.mentions)IQ($,Q,Z.matchedFiles.includes(Q)?1:0,"file",!Z.matchedFiles.includes(Q));for(let Q of Z.matchedFiles)xQ($,"file",Q.length);for(let Q of Z.ignoredMentions)yQ($,"file","not_found",Q)}import{chmodSync as D_,existsSync as Kj,mkdirSync as wg,readFileSync as Sg,renameSync as bg,rmSync as kg,writeFileSync as xg}from"node:fs";import{basename as __,dirname as Gj}from"node:path";import{resolveProviderSettingsPath as yg}from"@cline/shared/storage";import{existsSync as gv,mkdirSync as mv,readFileSync as cv,renameSync as uv,rmSync as dv,writeFileSync as lv}from"node:fs";import{mkdir as pv,readFile as iv,rename as rv,rm as av,writeFile as nv}from"node:fs/promises";import{dirname as Jj,join as ov}from"node:path";import*as E0 from"@cline/llms";import{ApiFormatSchema as sv,ModelCapabilitySchema as tv,ModelModalitiesSchema as ev,ModelOperationModeSchema as $g,ModelOperationSchema as Zg,ProviderCapabilitySchema as Qg,ProviderClientSchema as Xg,ProviderProtocolSchema as Jg}from"@cline/shared";import{z as Q0}from"zod";var Xj=Q0.number().finite().positive().optional().catch(void 0),e4=Q0.number().finite().nonnegative().optional().catch(void 0),Wg=Q0.object({id:Q0.string().optional(),name:Q0.string().optional(),maxTokens:Xj,contextWindow:Xj,maxInputTokens:Xj,capabilities:Q0.array(tv).optional(),supportsVision:Q0.boolean().optional(),supportsAttachments:Q0.boolean().optional(),supportsReasoning:Q0.boolean().optional(),operation:Zg.optional(),operationModes:Q0.array($g).optional(),modalities:ev.optional(),inputPrice:e4,outputPrice:e4,cacheReadsPrice:e4,cacheWritesPrice:e4,temperature:e4,apiFormat:sv.optional()}).passthrough(),jg=Q0.object({name:Q0.string(),baseUrl:Q0.string(),defaultModelId:Q0.string().optional(),protocol:Jg.optional(),client:Xg.optional(),capabilities:Q0.array(Qg).optional(),modelsSourceUrl:Q0.string().optional()}).passthrough(),Q_=Q0.object({provider:jg.optional(),models:Q0.record(Q0.string(),Wg).optional()}).passthrough(),X_=Q0.object({version:Q0.literal(1),providers:Q0.record(Q0.string(),Q_)}),Yg=Q0.object({version:Q0.literal(1),providers:Q0.record(Q0.string(),Q0.unknown())}),FZ=new Set;function J_($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function n$($){return ov(Jj($.getFilePath()),"models.json")}function LZ(){return{version:1,providers:{}}}function W_($){let Z=Yg.safeParse($);if(!Z.success)return j0("models.json content is not a valid models file envelope; starting from an empty registry"),LZ();let Q={};for(let[X,J]of Object.entries(Z.data.providers)){let W=Q_.safeParse(J);if(W.success)Q[X]=W.data;else j0(`models.json: dropping invalid entry for provider=${X}`)}return{version:1,providers:Q}}function DZ($){if(!gv($))return LZ();try{let Z=cv($,"utf8");return W_(JSON.parse(Z))}catch{j0(`models.json at ${$} exists but is unreadable or invalid JSON; treating as an empty registry`)}return LZ()}async function $8($){try{let Z=await iv($,"utf8");return W_(JSON.parse(Z))}catch(Z){if(Z?.code!=="ENOENT")j0(`models.json at ${$} exists but is unreadable or invalid JSON; treating as an empty registry`)}return LZ()}function Wj($,Z){mv(Jj($),{recursive:!0});let Q=X_.parse(Z),X=`${$}.${process.pid}.tmp`;try{lv(X,`${JSON.stringify(Q,null,2)}
654
654
  `,"utf8"),uv(X,$)}catch(J){throw dv(X,{force:!0}),J}}async function _Z($,Z){await pv(Jj($),{recursive:!0});let Q=X_.parse(Z),X=`${$}.${process.pid}.tmp`;try{await nv(X,`${JSON.stringify(Q,null,2)}
655
655
  `,"utf8"),await rv(X,$)}catch(J){throw await av(X,{force:!0}).catch(()=>{}),J}}function j_($,Z){return{id:$,name:Z.name??$,...Z.description?{description:Z.description}:{},operation:Z.operation,...Z.contextWindow!==void 0?{contextWindow:Z.contextWindow}:{},supportsAttachments:Z.capabilities?.includes("files"),supportsVision:Z.capabilities?.includes("images"),supportsReasoning:Z.capabilities?.includes("reasoning")||Z.thinkingConfig!=null,operationModes:Z.operationModes,inputModalities:Z.modalities?.input,outputModalities:Z.modalities?.output}}function Y_($){if(!$||$.length===0)return;let Z=new Set;if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("tools"))Z.add("tools");return Z.size>0?[...Z]:void 0}function V_($){let Z=new Set;if(!$||$.length===0)return[...Z];if($.includes("streaming"))Z.add("streaming");if($.includes("tools"))Z.add("tools");if($.includes("reasoning"))Z.add("reasoning");if($.includes("prompt-cache"))Z.add("prompt-cache");if($.includes("vision"))Z.add("images"),Z.add("files");return[...Z]}function Vg($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function B_($,Z){return $??Z??"openai-chat"}function K_($,Z,Q){return $??Q??(Z==="openai-responses"?"openai":"openai-compatible")}function G_($,Z,Q,X=!1){let J=new Set(Z?.capabilities??Q??[]);if(Z?.supportsVision!==void 0)if(Z.supportsVision)J.add("images");else J.delete("images");if(Z?.supportsAttachments!==void 0)if(Z.supportsAttachments)J.add("files");else J.delete("files");if(Z?.supportsReasoning!==void 0)if(Z.supportsReasoning)J.add("reasoning");else J.delete("reasoning");if(!X&&J.size>0&&(Z?.operation===void 0||Z.operation==="language"))J.add("tools");let W=Z?.apiFormat,j=Z?.inputPrice!==void 0||Z?.outputPrice!==void 0||Z?.cacheReadsPrice!==void 0||Z?.cacheWritesPrice!==void 0;return{id:$,name:Z?.name??$,...Z?.maxTokens!==void 0?{maxTokens:Z.maxTokens}:{},...Z?.contextWindow!==void 0?{contextWindow:Z.contextWindow}:{},...Z?.maxInputTokens!==void 0?{maxInputTokens:Z.maxInputTokens}:{},...J.size>0?{capabilities:[...J]}:{},...Z?.temperature!==void 0?{temperature:Z.temperature}:{},...W!==void 0?{apiFormat:W}:{},...Z?.operation!==void 0?{operation:Z.operation}:{},...Z?.operationModes!==void 0?{operationModes:Z.operationModes}:{},...Z?.modalities!==void 0?{modalities:Z.modalities}:{},...j?{pricing:{...Z?.inputPrice!==void 0?{input:Z.inputPrice}:{},...Z?.outputPrice!==void 0?{output:Z.outputPrice}:{},...Z?.cacheReadsPrice!==void 0?{cacheRead:Z.cacheReadsPrice}:{},...Z?.cacheWritesPrice!==void 0?{cacheWrite:Z.cacheWritesPrice}:{}}}:{}}}function Bg($,Z){let Q=H_($);for(let[X,J]of Object.entries(Z??{})){let W=J.id?.trim()||X.trim();if(!W)continue;let j=Q[W]?.capabilities,Y=j&&J.capabilities?{...J,capabilities:[...new Set([...j,...J.capabilities])]}:J;E0.registerModel($,W,G_(W,Y,j,j!==void 0))}}function Kg($,Z,Q){return{...Z??{},id:$,name:Z?.name??$,capabilities:Z?.capabilities??Q}}function H_($){return Object.assign({},...E0.resolveProviderModelCatalogKeys($).map((Q)=>E0.getGeneratedModelsForProvider(Q)))}function Gg($){let Z=$.provider.trim();if(!Z||E0.isBuiltInProviderId(Z))return;let Q=$.baseUrl?.trim();if(!Q)return;let X=E0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z],J=H_(Z),W=V_($.capabilities),j=W.length>0?W:void 0,Y=$.model?.trim(),V={...J,...X?.models??{}};if(Y)V[Y]=Kg(Y,V[Y],j);let B=Object.keys(V).filter(Boolean),K=Y||B[0];if(!K)return;let G=B_($.protocol,X?.provider.protocol),H=K_($.client,G,X?.provider.client);E0.registerProvider({provider:{id:Z,name:X?.provider.name??J_(Z),description:X?.provider.description,protocol:G,client:H,baseUrl:Q,modelsSourceUrl:X?.provider.modelsSourceUrl,defaultModelId:K,capabilities:Y_($.capabilities)??X?.provider.capabilities,source:"file"},models:V})}function zZ($){for(let Z of Object.values($.providers))Gg(Z.settings)}function Z8($,Z){let Q=Z.models??{};if(!Vg(Z.provider)){Bg($,Q);return}let X=V_(Z.provider.capabilities),J=Object.entries(Q).map(([B,K])=>({id:K.id?.trim()||B.trim(),model:K})).filter(({id:B})=>B.length>0),W=Z.provider.defaultModelId?.trim()||J[0]?.id||"default",j=B_(Z.provider.protocol,void 0),Y=K_(Z.provider.client,j,void 0),V=Object.fromEntries(J.map(({id:B,model:K})=>[B,{...G_(B,K,X.length>0?X:void 0),status:"active"}]));E0.registerProvider({provider:{id:$,name:Z.provider.name.trim()||J_($),protocol:j,client:Y,baseUrl:Z.provider.baseUrl,modelsSourceUrl:Z.provider.modelsSourceUrl,defaultModelId:W,capabilities:Y_(Z.provider.capabilities),source:"file"},models:V})}function Hg($,Z,Q){let X=Q?.models??{},J=new Set;for(let[Y,V]of Object.entries(Z?.models??{})){if(Object.hasOwn(X,Y))continue;let B=V.id?.trim()||Y.trim();if(B)J.add(B),E0.unregisterModel($,B)}if(!Q)return;let W=E0.getProviderCollectionSync($);Z8($,Q);let j=E0.getProviderCollectionSync($);if(W&&j&&j!==W){let Y=Object.fromEntries(Object.entries(W.models).filter(([V])=>!J.has(V)));E0.registerProvider({...j,models:{...Y,...j.models}})}}function jj($){let Z=n$($);if(FZ.has(Z))return;let Q=DZ(Z);for(let[X,J]of Object.entries(Q.providers))Z8(X,J);FZ.add(Z)}async function U_($){let Z=n$($);if(FZ.has(Z))return;let Q=await $8(Z);for(let[X,J]of Object.entries(Q.providers))Z8(X,J);FZ.add(Z)}import{existsSync as Ug,readFileSync as Fg}from"node:fs";import{dirname as Lg,join as Yj}from"node:path";import*as z1 from"@cline/llms";import{ReasoningLevelSchema as Dg}from"@cline/shared";import{resolveClineDataDir as _g}from"@cline/shared/storage";var OZ="openai",zg=z1.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,Og=128000;function L_($){let Z=$?.trim();if(!Z)return;try{let Q=JSON.parse(Z);if(!Q)return;let X=typeof Q.expiresAt==="number"&&Number.isFinite(Q.expiresAt)?Q.expiresAt<10000000000?Q.expiresAt*1000:Q.expiresAt:void 0;return{accessToken:Q.idToken,refreshToken:Q.refreshToken,expiresAt:X,accountId:Q.userInfo?.id}}catch{return}}function C($){let Z=$?.trim();return Z?Z:void 0}function Ng($){return $==="credentials"?"iam":$}function F_($){if(!Ug($))return;try{let Z=Fg($,"utf8"),Q=JSON.parse(Z);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return}function qg($){let Z=$.dataDir??_g(),Q=$.globalStatePath??Yj(Z,"globalState.json"),X=$.secretsPath??Yj(Z,"secrets.json"),J=F_(Q),W=F_(X);if(!J&&!W)return;return{globalState:J??{},secrets:W??{}}}function Vj($){return z1.normalizeProviderId($)}function NZ($){if($===OZ)return $;return z1.normalizeProviderId($)}function Ag($,Z,Q,X){let J=Q==="plan"?"planMode":"actMode",W=Z===X?C(Q==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,Y={openrouter:`${J}OpenRouterModelId`,cline:`${J}ClineModelId`,openai:`${J}OpenAiModelId`,ollama:`${J}OllamaModelId`,lmstudio:`${J}LmStudioModelId`,litellm:`${J}LiteLlmModelId`,requesty:`${J}RequestyModelId`,together:`${J}TogetherModelId`,fireworks:`${J}FireworksModelId`,sapaicore:`${J}SapAiCoreModelId`,groq:`${J}GroqModelId`,baseten:`${J}BasetenModelId`,huggingface:`${J}HuggingFaceModelId`,"huawei-cloud-maas":`${J}HuaweiCloudMaasModelId`,oca:`${J}OcaModelId`,aihubmix:`${J}AihubmixModelId`,hicap:`${J}HicapModelId`,nousResearch:`${J}NousResearchModelId`,"vercel-ai-gateway":`${J}VercelAiGatewayModelId`}[Z];return(Y?C(typeof $[Y]==="string"?$[Y]:void 0):void 0)??W}function Tg($,Z,Q){let X=Q==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,J=[...Z==="oca"?[$.actModeOcaReasoningEffort,$.planModeOcaReasoningEffort]:[],...Z==="gemini"?[$.geminiActModeThinkingLevel,$.geminiPlanModeThinkingLevel]:[],$.actModeReasoningEffort,$.planModeReasoningEffort].map(C).find(Boolean),W=Dg.safeParse(J),j=W.success?W.data:void 0,Y=typeof X==="number"&&Number.isInteger(X)&&X>0?X:void 0;if(!j&&Y===void 0)return;return{...j?{effort:j}:{},...Y!==void 0?{budgetTokens:Y}:{}}}function Eg($){let Z=$["openai-codex-oauth-credentials"];if(!Z)return;try{let Q=JSON.parse(Z),X=C(Q.access_token),J=C(Q.refresh_token),W=C(Q.accountId);if(!X&&!J&&!W)return;return{...X?{apiKey:X}:{},auth:{...X?{accessToken:X}:{},...J?{refreshToken:J}:{},...W?{accountId:W}:{}}}}catch{return}}function Mg($){let Z=z1.getGeneratedModelsForProvider($),Q=z1.getProviderCollectionSync($),X=Q?.provider.defaultModelId;if(X&&(Z[X]||Q?.models?.[X]))return X;return Object.keys(Z)[0]??void 0}function Rg($,Z){if(!Z||$!=="cline")return Z;let Q=z1.getProviderCollectionSync($)?.models;if(!Q)return Z;if(Q[Z])return Z;for(let X of z1.VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES){if(!Z.startsWith(X.aliasPrefix))continue;let J=`${X.canonicalPrefix}${Z.slice(X.aliasPrefix.length)}`;if(Q[J])return J}return}function Cg($,Z,Q,X){let J=Vj($),W=C(X==="plan"?Z.planModeApiProvider:Z.actModeApiProvider),j=W?NZ(W):void 0,Y=Rg(J,Ag(Z,$,X,j))??Mg(J),V=Tg(Z,J,X),B=typeof Z.requestTimeoutMs==="number"&&Number.isInteger(Z.requestTimeoutMs)&&Z.requestTimeoutMs>0?Z.requestTimeoutMs:void 0,K={anthropic:Q.apiKey,cline:Q.clineApiKey,openai:Q.openAiApiKey,"openai-native":Q.openAiNativeApiKey,openrouter:Q.openRouterApiKey,bedrock:Q.awsBedrockApiKey,gemini:Q.geminiApiKey,ollama:Q.ollamaApiKey,deepseek:Q.deepSeekApiKey,requesty:Q.requestyApiKey,together:Q.togetherApiKey,fireworks:Q.fireworksApiKey,qwen:Q.qwenApiKey,doubao:Q.doubaoApiKey,mistral:Q.mistralApiKey,litellm:Q.liteLlmApiKey,asksage:Q.asksageApiKey,xai:Q.xaiApiKey,moonshot:Q.moonshotApiKey,zai:Q.zaiApiKey,huggingface:Q.huggingFaceApiKey,nebius:Q.nebiusApiKey,sambanova:Q.sambanovaApiKey,cerebras:Q.cerebrasApiKey,groq:Q.groqApiKey,"huawei-cloud-maas":Q.huaweiCloudMaasApiKey,baseten:Q.basetenApiKey,"vercel-ai-gateway":Q.vercelAiGatewayApiKey,dify:Q.difyApiKey,minimax:Q.minimaxApiKey,hicap:Q.hicapApiKey,aihubmix:Q.aihubmixApiKey,nousResearch:Q.nousResearchApiKey,oca:Q.ocaApiKey},G={};if($==="openai-codex")Object.assign(G,Eg(Q));if($==="cline")try{let _=C(Q["cline:clineAccountId"]);if(_)G.auth={...G.auth??{},...L_(_)}}catch{}if($===OZ&&Z.openAiHeaders)G.headers=Z.openAiHeaders;if($==="bedrock"){let _=Ng(Z.awsAuthentication),O=_==="profile"||Z.awsUseProfile===!0;G.aws={accessKey:C(Q.awsAccessKey),secretKey:C(Q.awsSecretKey),sessionToken:C(Q.awsSessionToken),region:C(Z.awsRegion),authentication:_,profile:O?C(Z.awsProfile):void 0,usePromptCache:Z.awsBedrockUsePromptCache,useCrossRegionInference:Z.awsUseCrossRegionInference,useGlobalInference:Z.awsUseGlobalInference,endpoint:C(Z.awsBedrockEndpoint),customModelBaseId:C(X==="plan"?Z.planModeAwsBedrockCustomModelBaseId:Z.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")G.gcp={projectId:C(Z.vertexProjectId),region:C(Z.vertexRegion)};if($===OZ&&(Z.azureApiVersion||Z.azureIdentity!==void 0))G.azure={apiVersion:C(Z.azureApiVersion),useIdentity:Z.azureIdentity};if($==="sapaicore"){let _=Z.sapAiCoreUseOrchestrationMode??!0;G.sap={clientId:C(Q.sapAiCoreClientId),clientSecret:C(Q.sapAiCoreClientSecret),tokenUrl:C(Z.sapAiCoreTokenUrl),resourceGroup:C(Z.sapAiResourceGroup),deploymentId:_?void 0:C(X==="plan"?Z.planModeSapAiCoreDeploymentId:Z.actModeSapAiCoreDeploymentId),useOrchestrationMode:_}}if($==="oca"){G.oca={mode:Z.ocaMode};let _=C(Q.ocaRefreshToken);if(_)G.auth={...G.auth??{},refreshToken:_}}if($==="qwen")G.apiLine=Z.qwenApiLine;if($==="moonshot")G.apiLine=Z.moonshotApiLine;if($==="zai")G.apiLine=Z.zaiApiLine;if($==="minimax")G.apiLine=Z.minimaxApiLine;let H={anthropic:Z.anthropicBaseUrl,openai:Z.openAiBaseUrl,ollama:Z.ollamaBaseUrl,lmstudio:Z.lmStudioBaseUrl,litellm:Z.liteLlmBaseUrl,gemini:Z.geminiBaseUrl,requesty:Z.requestyBaseUrl,asksage:Z.asksageApiUrl,dify:Z.difyBaseUrl,oca:Z.ocaBaseUrl,aihubmix:Z.aihubmixBaseUrl,sapaicore:Z.sapAiCoreBaseUrl},U=C(K[$]),F=C(H[$]),L={provider:J,...U?{apiKey:U}:{},...Y?{model:Y}:{},...F?{baseUrl:F}:{},...V?{reasoning:V}:{},...B?{timeout:B}:{},...G},D=t4.safeParse(L);if(!D.success)return;return Object.keys(L).filter((_)=>_!=="provider").length>0?D.data:void 0}function $5($){return typeof $==="number"&&Number.isFinite($)&&$>0?$:void 0}function Pg($,Z,Q){if($!==zg)return;if(!Z.baseUrl||!Z.model)return;let X=$5(Q?.contextWindow)??Og,J=$5(Q?.maxTokens),W=$5(Q?.inputPrice),j=$5(Q?.outputPrice),Y=$5(Q?.temperature),V=["streaming","tools"];if(Q?.supportsImages!==!1)V.push("images");if(Q?.supportsPromptCache===!0)V.push("prompt-cache");return{provider:{name:"OpenAI Compatible",baseUrl:Z.baseUrl,defaultModelId:Z.model},models:{[Z.model]:{id:Z.model,name:Z.model,contextWindow:X,maxInputTokens:X,capabilities:V,...J!==void 0?{maxTokens:J}:{},...W!==void 0?{inputPrice:W}:{},...j!==void 0?{outputPrice:j}:{},...Y!==void 0?{temperature:Y}:{}}}}}function fg($,Z){let Q=new Set;for(let J of[$.actModeApiProvider,$.planModeApiProvider]){let W=C(J);if(W)Q.add(NZ(W))}if(C(Z.apiKey))Q.add("anthropic");if(C(Z.openRouterApiKey))Q.add("openrouter");if(C(Z.openAiApiKey))Q.add(OZ);if(C(Z.openAiNativeApiKey))Q.add("openai-native");if(C(Z["openai-codex-oauth-credentials"]))Q.add("openai-codex");if(C(Z.geminiApiKey))Q.add("gemini");if(C(Z.ollamaApiKey))Q.add("ollama");if(C(Z.deepSeekApiKey))Q.add("deepseek");if(C(Z.requestyApiKey))Q.add("requesty");if(C(Z.togetherApiKey))Q.add("together");if(C(Z.fireworksApiKey))Q.add("fireworks");if(C(Z.qwenApiKey))Q.add("qwen");if(C(Z.doubaoApiKey))Q.add("doubao");if(C(Z.mistralApiKey))Q.add("mistral");if(C(Z.liteLlmApiKey))Q.add("litellm");if(C(Z.asksageApiKey))Q.add("asksage");if(C(Z.xaiApiKey))Q.add("xai");if(C(Z.moonshotApiKey))Q.add("moonshot");if(C(Z.zaiApiKey))Q.add("zai");if(C(Z.huggingFaceApiKey))Q.add("huggingface");if(C(Z.nebiusApiKey))Q.add("nebius");if(C(Z.sambanovaApiKey))Q.add("sambanova");if(C(Z.cerebrasApiKey))Q.add("cerebras");if(C(Z.groqApiKey))Q.add("groq");if(C(Z.huaweiCloudMaasApiKey))Q.add("huawei-cloud-maas");if(C(Z.basetenApiKey))Q.add("baseten");if(C(Z.vercelAiGatewayApiKey))Q.add("vercel-ai-gateway");if(C(Z.difyApiKey))Q.add("dify");if(C(Z.minimaxApiKey))Q.add("minimax");if(C(Z.hicapApiKey))Q.add("hicap");if(C(Z.aihubmixApiKey))Q.add("aihubmix");if(C(Z.nousResearchApiKey))Q.add("nousResearch");if(C(Z.awsAccessKey)||C(Z.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||C($.awsProfile))Q.add("bedrock");if(C($.vertexProjectId)||C($.vertexRegion))Q.add("vertex");if(C(Z.clineApiKey))Q.add("cline");let X=L_(C(Z["cline:clineAccountId"]));if(X?.accessToken||X?.refreshToken||X?.accountId)Q.add("cline");if(C(Z.ocaApiKey))Q.add("oca");if(C(Z.sapAiCoreClientId)||C(Z.sapAiCoreClientSecret)||C($.sapAiCoreTokenUrl)||C($.sapAiCoreBaseUrl)||C($.sapAiResourceGroup)||$.sapAiCoreUseOrchestrationMode!==void 0)Q.add("sapaicore");return Q}function Bj($){let Z=$.providerSettingsManager.read(),Q=qg($);if(!Q)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let{globalState:X,secrets:J}=Q,W=X.mode==="plan"?"plan":"act",j=W==="plan"?"act":"plan",Y=C(W==="plan"?X.planModeApiProvider:X.actModeApiProvider),V=Y?NZ(Y):void 0,B=C(W==="plan"?X.actModeApiProvider:X.planModeApiProvider),K=B?NZ(B):void 0,G=fg(X,J),H=e6();H.providers={...Z.providers},H.lastUsedProvider=Z.lastUsedProvider;let U=new Date().toISOString(),F=0,L=Yj(Lg($.providerSettingsManager.getFilePath()),"models.json"),D=DZ(L),z=0;for(let A of G){let q=Vj(A);if(H.providers[q])continue;let N=A!==V&&A===K?j:W,T=Cg(A,X,J,N);if(!T)continue;H.providers[q]={settings:T,updatedAt:U,tokenSource:"migration"},F+=1;let M=Pg(q,T,N==="plan"?X.planModeOpenAiModelInfo:X.actModeOpenAiModelInfo);if(M&&!D.providers[q])D.providers[q]=M,z+=1}if(F===0&&z===0)return{migrated:!1,providerCount:Object.keys(Z.providers).length,lastUsedProvider:Z.lastUsedProvider};let _=C(W==="plan"?X.planModeApiProvider:X.actModeApiProvider),O=_?Vj(_):void 0;if(H.lastUsedProvider=Z.lastUsedProvider??(O&&H.providers[O]?O:Object.keys(H.providers)[0]),$.providerSettingsManager.write(H),z>0)Wj(L,D);return{migrated:F>0||z>0,providerCount:Object.keys(H.providers).length,lastUsedProvider:H.lastUsedProvider}}function Ig(){return new Date().toISOString()}var hg="cline",vg="cline-pass";function gg($){if(__($)!=="providers.json")return;let Z=Gj($);if(__(Z)!=="settings")return;return Gj(Z)}class o${filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??yg(),this.dataDir=$.dataDir??gg(this.filePath),this.dataDir||!$.filePath)Bj({providerSettingsManager:this,dataDir:this.dataDir});if(jj(this),zZ(this.read()),Kj(this.filePath))try{D_(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!Kj(this.filePath))return e6();try{let $=Sg(this.filePath,"utf8"),Z=JSON.parse($),Q=HZ.safeParse(Z);if(Q.success){zZ(Q.data);let X=Q.data.providers.cline?.settings?.auth;return j0(`providers.read providers=[${Object.keys(Q.data.providers).join(",")}] lastUsed=${Q.data.lastUsedProvider??"none"} clineAuthPresent=${!!X?.accessToken} clineAccessTokenHash=${a0(X?.accessToken)} clineRefreshTokenHash=${a0(X?.refreshToken)}`),Q.data}}catch{}return e6()}write($){let Z=HZ.parse($),Q=Gj(this.filePath);if(!Kj(Q))wg(Q,{recursive:!0,mode:448});let X=`${this.filePath}.${process.pid}.tmp`;try{xg(X,`${JSON.stringify(Z,null,2)}
656
656
  `,{encoding:"utf8",mode:384}),bg(X,this.filePath)}catch(J){throw kg(X,{force:!0}),J}try{D_(this.filePath,384)}catch{}zZ(Z)}saveProviderSettings($,Z={}){let Q=t4.parse($),X=this.read(),J=Q.provider,W=Z.setLastUsed!==!1,j=X.providers[J],Y=Z.tokenSource??j?.tokenSource??"manual",V={...X,providers:{...X.providers,[J]:{settings:Q,updatedAt:Ig(),tokenSource:Y}},lastUsedProvider:W?J:X.lastUsedProvider};this.write(V);let B=X.providers.cline?.settings?.auth,K=Q.provider==="cline"?Q.auth:V.providers.cline?.settings?.auth,G=!!B?.accessToken&&!K?.accessToken;return j0(`providers.save providerId=${J} tokenSource=${Y} clineAuthWasPresent=${!!B?.accessToken} clineAuthIsPresent=${!!K?.accessToken} authDropped=${G}`),V}resolveProviderSettings($,Z){let Q=$.providers[Z]?.settings,J=b0(Z)?.storageProviderId;if(!J||J===Z)return Q;let W=$.providers[J]?.settings;if(!W)return Q;return t4.parse({...W.auth?{auth:W.auth}:{},...W.apiKey?{apiKey:W.apiKey}:{},...W.baseUrl?{baseUrl:W.baseUrl}:{},...Q??{},provider:Z})}getProviderSettings($){let Z=this.read();return this.resolveProviderSettings(Z,$)}getVoiceInputSettings(){return this.read().modes.voiceInput}setVoiceInputSettings($){let Z=this.read();if($)Z.modes.voiceInput=$j.parse($);else delete Z.modes.voiceInput;return this.write(Z),Z}resolveLastUsedProviderId($,Z){let Q=$.lastUsedProvider;if(Q===vg&&Z.isClinePassEnabled===!1)return hg;return Q}getLastUsedProviderSettings($={}){let Z=this.read(),Q=this.resolveLastUsedProviderId(Z,$);if(!Q)return;return this.resolveProviderSettings(Z,Q)}getProviderConfig($,Z){let Q=this.getProviderSettings($);if(!Q)return;return o1(Q,Z)}getLastUsedProviderConfig($={}){let Z=this.getLastUsedProviderSettings($);if(!Z)return;return o1(Z,$)}async refreshCatalog(){try{await J6({})}catch{}}}_0();h2();import{execFile as mg}from"node:child_process";import{randomUUID as cg}from"node:crypto";import{promisify as ug}from"node:util";var F0=ug(mg);async function z_($,Z){try{return(await F0("git",["-C",$,"rev-parse","--verify","--quiet",Z],{windowsHide:!0})).stdout.trim()||void 0}catch{return}}async function O_($){if((await F0("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);let Q=(await F0("git",["-C",$,"rev-parse","--verify","HEAD"],{windowsHide:!0})).stdout.trim(),X=await z_($,"refs/stash"),J=cg(),W=`refs/cline/restore-transactions/${J}`;await F0("git",["-C",$,"stash","push","--include-untracked","--message",`cline restore transaction ${J}`],{windowsHide:!0});let j=await z_($,"refs/stash"),Y=j!==void 0&&j!==X;if(Y)try{await F0("git",["-C",$,"update-ref",W,j],{windowsHide:!0}),await F0("git",["-C",$,"stash","drop","stash@{0}"],{windowsHide:!0})}catch(B){try{await F0("git",["-C",$,"reset","--hard",Q],{windowsHide:!0}),await F0("git",["-C",$,"clean","-fd"],{windowsHide:!0}),await F0("git",["-C",$,"stash","apply","--index",j],{windowsHide:!0})}catch(K){throw AggregateError([B,K],"Workspace snapshot and rollback both failed")}throw B}let V=!1;return{async commit(){if(V)return;if(V=!0,!Y)return;await F0("git",["-C",$,"update-ref","-d",W],{windowsHide:!0}).catch(()=>{return})},async rollback(){if(V)return;if(await F0("git",["-C",$,"reset","--hard",Q],{windowsHide:!0}),await F0("git",["-C",$,"clean","-fd"],{windowsHide:!0}),Y)await F0("git",["-C",$,"stash","apply","--index",W],{windowsHide:!0}),await F0("git",["-C",$,"update-ref","-d",W],{windowsHide:!0});V=!0}}}function Z5($){let Z=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(Z?.history)?Z.history:[]).filter((X)=>!!X&&typeof X==="object"&&!Array.isArray(X)).flatMap((X)=>{let J=String(X.ref??"").trim(),W=Number(X.createdAt??0),j=Number(X.runCount??0);if(J.length===0||!Number.isFinite(W)||!Number.isInteger(j)||j<1)return[];let Y=X.kind==="stash"||X.kind==="commit"?X.kind:void 0;return[{ref:J,createdAt:W,runCount:j,...Y?{kind:Y}:{}}]})}function Hj($,Z){let Q=Z5($).filter((J)=>J.runCount<=Z),X=Q.at(-1);return X?{latest:X,history:Q}:void 0}function qZ($,Z){return $.reduce((Q,X)=>{if(X.runCount>Z)return Q;if(!Q||X.runCount>Q.runCount)return X;return Q},void 0)}function N_($,Z){let Q=0;for(let X=0;X<$.length;X+=1){let J=$[X];if(!J)continue;let W=i$(J);if(W<1)continue;let j=Q+1;if(Q+=W,Q===Z)return{index:X,span:W};if(Q>Z)throw Error(`Run ${Z} is folded into a compacted message spanning runs ${j}-${Q}`)}throw Error(`Could not find user message for run ${Z}`)}function dg($,Z){let{index:Q}=N_($,Z);return $.slice(0,Q+1)}function Uj($,Z){let{index:Q,span:X}=N_($,Z);if(X!==1)throw Error(`Cannot fork before run ${Z} because it is folded into a compacted message`);return $.slice(0,Q)}function q_($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=qZ(Z5($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let X=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!X)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:Q,cwd:X,...$.restoreMessages!==!1?{messages:dg($.messages??[],Z)}:{}}}async function lg($,Z){if(Z.kind)return Z.kind;let Q=await F0("git",["-C",$,"show","-s","--format=%P%x00%B",Z.ref],{windowsHide:!0}),X=Q.stdout.indexOf("\x00"),J=X<0?[]:Q.stdout.slice(0,X).trim().split(/\s+/).filter(Boolean),W=X<0?"":Q.stdout.slice(X+1);return J.length>=2&&PL(W)?"stash":"commit"}async function pg($,Z){try{return await F0("git",["-C",$,"cat-file","-e",`${Z}^3^{commit}`],{windowsHide:!0}),!0}catch{return!1}}async function A_($,Z){if((await F0("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);await F0("git",["-C",$,"cat-file","-e",`${Z.ref}^{commit}`],{windowsHide:!0});let X=await lg($,Z),J=X==="commit"?Z.ref:`${Z.ref}^1`;if(await F0("git",["-C",$,"cat-file","-e",`${J}^{commit}`],{windowsHide:!0}),X==="stash")await F0("git",["-C",$,"cat-file","-e",`${Z.ref}^2^{commit}`],{windowsHide:!0});let W=await pg($,Z.ref);if(await F0("git",["-C",$,"reset","--hard",J],{windowsHide:!0}),W)await F0("git",["-C",$,"clean","-fd"],{windowsHide:!0});if(X==="commit")return;await F0("git",["-C",$,"stash","apply",Z.ref],{windowsHide:!0})}class O1 extends Error{code;constructor($,Z){super(Z);this.code=$;this.name="SessionVersioningError"}}function ig($){let Z=$.sessionId.trim();if(!Z)throw new O1("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new O1("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new O1("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new O1("invalid_restore","checkpointRunCount must be a positive integer");return Z}class Q8{async restoreCheckpoint($){let Z=$.restore?.messages!==!1,Q=$.restore?.workspace!==!1,X=ig({sessionId:$.sessionId,restoreMessages:Z,restoreWorkspace:Q,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),J=await $.getSession(X);if(!J)throw new O1("session_not_found",`Session ${X} not found`);let W=Z?await $.readMessages(X):void 0;if(Z&&W?.length===0)throw new O1("session_messages_not_found",`No messages found for session ${X}`);let j=q_({session:J,messages:W,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:Z}),Y=u$({session:J,messages:W}),V,B=[],K,G;if(Z){let{startSession:z,getStartedSessionId:_,cleanupStartedSession:O}=$;if(!$.start||!z||!_||!O)throw new O1("invalid_restore","startSession, getStartedSessionId, and cleanupStartedSession are required when restore.messages is true");G={startSession:z,getStartedSessionId:_,cleanupStartedSession:O},V=Hj(J,$.checkpointRunCount),B=$.restore?.omitCheckpointMessageFromSession?Uj(W??[],$.checkpointRunCount):j.messages??[];let A={sourceSession:J,sourceMessages:W,sourceSnapshot:Y,plan:j,restoredCheckpointMetadata:V,initialMessages:B,restoreMessages:Z,restoreWorkspace:Q,checkpointRunCount:$.checkpointRunCount};K=$.buildStartInput?await $.buildStartInput(A,$.start):$.start}let H=$.applyWorkspaceCheckpoint??A_,U=$.beginWorkspaceRestoreTransaction??($.applyWorkspaceCheckpoint?void 0:O_),F=Q&&U?await U(j.cwd):void 0,L=!1,D;try{if(Q)await H(j.cwd,j.checkpoint);if(!G)return await F?.commit(),L=!0,{checkpoint:j.checkpoint,sourceSnapshot:Y};let z=await G.startSession(K);D={result:z,cleanup:G.cleanupStartedSession};let _=G.getStartedSessionId(z);if(!_)throw new O1("invalid_restore","Restored session did not return a session id");await($.retainCheckpointRefs??fL)(j.cwd,_,V?.history??[]);let O=$.readRestoredSession?await $.readRestoredSession(_):void 0,A=O?u$({session:O,messages:B}):void 0;return await F?.commit(),L=!0,{sessionId:_,startResult:z,messages:j.messages,checkpoint:j.checkpoint,sourceSnapshot:Y,...A?{restoredSnapshot:A}:{}}}catch(z){let _=[];if(D)try{await D.cleanup(D.result)}catch(O){_.push(O)}if(F&&!L)try{await F.rollback()}catch(O){_.push(O)}if(_.length>0)throw AggregateError([z,..._],"Checkpoint restore failed and recovery did not complete");throw z}}}import{supportsModelTool as f_}from"@cline/llms";import{hasRuntimeConfigExtension as jm,resolveMcpTimeoutSeconds as Ym}from"@cline/shared";import{nanoid as Vm}from"nanoid";M1();import{appendFileSync as rg,existsSync as X8,mkdirSync as T_,readdirSync as ag,readFileSync as E_,renameSync as ng,writeFileSync as og}from"node:fs";import{join as Fj}from"node:path";import{resolveTeamDataDir as sg}from"@cline/shared/storage";function M_(){return new Date().toISOString()}function Lj($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function R_($){return{...$,tasks:$.tasks.map((Z)=>({...Z,createdAt:new Date(Z.createdAt),updatedAt:new Date(Z.updatedAt)})),mailbox:$.mailbox.map((Z)=>({...Z,sentAt:new Date(Z.sentAt),readAt:Z.readAt?new Date(Z.readAt):void 0})),missionLog:$.missionLog.map((Z)=>({...Z,ts:new Date(Z.ts)})),runs:($.runs??[]).map((Z)=>({...Z,startedAt:new Date(Z.startedAt),endedAt:Z.endedAt?new Date(Z.endedAt):void 0,nextAttemptAt:Z.nextAttemptAt?new Date(Z.nextAttemptAt):void 0,heartbeatAt:Z.heartbeatAt?new Date(Z.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),finalizedAt:Z.finalizedAt?new Date(Z.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((Z)=>({...Z,createdAt:new Date(Z.createdAt),reviewedAt:Z.reviewedAt?new Date(Z.reviewedAt):void 0}))}}class AZ{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??sg()}init(){this.ensureTeamDir()}listTeamNames(){if(!X8(this.teamDirPath))return[];return ag(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>X8(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let Z=this.readEnvelope($);return Z?.teamState?R_(Z.teamState):void 0}readHistory($,Z=200){let Q=this.historyPath($);if(!X8(Q))return[];return E_(Q,"utf8").split(`
@@ -787,10 +787,10 @@ ${zD($)}${Q}</SYSTEM_NOTICE>`}}function QZ($,Z){if(typeof $.content==="string")r
787
787
  reviewed_by = excluded.reviewed_by,
788
788
  reviewed_at = excluded.reviewed_at,
789
789
  version = team_outcome_fragments.version + 1`,[X,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($,Z){let Q=J8($),X=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[Q]);if(X.length===0)return[];let J=Dj();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
790
- WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,J,Q]),X.map((W)=>W.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function P_($={}){try{let Z=new Q5($);return Z.init(),Z}catch{let Z=new AZ({teamDir:$.teamDir});return Z.init(),Z}}function TZ($,Z){return jm($,Z)}function Bm($,Z){let Q=Z?.["*"]??{},X=Z?.[$]??{};return{...Q,...X}.enabled!==!1}function Km($,Z){return $.filter((Q)=>Bm(Q.name,Z))}function _j($,Z){return T$(Km($,Z))}var Gm={apply_diff:"editor",attempt_completion:"submit_and_exit",bash:"run_commands",execute_command:"run_commands",list_code_definition_names:"search_codebase",list_files:"run_commands",read_file:"read_files",replace_in_file:"editor",search_files:"search_codebase",use_skill:"skills",write_to_file:"editor"};function Hm($){let Z=$.trim().toLowerCase();return Gm[Z]??Z}function Um($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(Hm));if(Z.skills!==void 0)Q.add("skills");return $.filter((X)=>Q.has(X.name))}function w_(){return`team-${Vm(5)}`}function EZ($,Z,Q,X,J,W,j,Y,V,B){let K=k1[S$({mode:Q})],G=d8(Z,X,Q,J??u8);return _j(s8({cwd:$,telemetry:V,executorOptions:{bash:{executionController:B}},...K,enableSkills:!!j,...G,executors:{...j?{skills:j}:{},...Y??{}}}),W)}function Fm($){return EZ($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,Lm,$.toolExecutors).some((Z)=>Z.name==="skills")}var Lm=async()=>"";async function Dm($){let Z=V0();if(!E2({filePath:Z}))return{tools:[]};let Q=new B4({clientFactory:V4({settingsPath:Z})}),X;try{X=await J4(Q,{filePath:Z})}catch(Y){await Q.dispose().catch(()=>{});let V=Y instanceof Error?Y.message:String(Y);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let J=X.filter((Y)=>Y.disabled!==!0),W=await Promise.allSettled(J.map((Y)=>N7({serverName:Y.name,provider:Q,timeoutMs:Ym(Y.timeoutSeconds)*1000}))),j=[];for(let[Y,V]of W.entries())if(V.status==="fulfilled")j.push(...V.value);else{let B=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${J[Y].name}", skipping: ${B}`)}return{tools:j,shutdown:async()=>{await Q.dispose()}}}function _m($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function zm($){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 Om($){let Z=k1[S$({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??Z.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??Z.enableAgentTeams??!0,disableMcpSettingsTools:$.disableMcpSettingsTools===!0,yolo:$.yolo===!0,missionLogIntervalSteps:typeof $.missionLogIntervalSteps==="number"&&Number.isFinite($.missionLogIntervalSteps)?$.missionLogIntervalSteps:3,missionLogIntervalMs:typeof $.missionLogIntervalMs==="number"&&Number.isFinite($.missionLogIntervalMs)?$.missionLogIntervalMs:120000}}class MZ{teamRuntimeEntries=new Map;async build($){let{config:Z,hooks:Q,extensions:X,logger:J,telemetry:W,createSpawnTool:j,onTeamRestored:Y,userInstructionService:V,configExtensions:B,toolExecutors:K}=$,G=$.onTeamEvent??(()=>{}),H=Om(Z),U=[];if(H.enableTools&&E8("web_search")&&f_({providerId:Z.providerId,modelId:Z.modelId},"web_search"))U.push({name:"web_search"});if(H.enableTools&&f_({providerId:Z.providerId,modelId:Z.modelId},"image_generation"))U.push({name:"image_generation",outputFormat:"png"});let F=Z.workspaceRoot??Z.cwd,L=$.toolPolicies??Z.toolPolicies,D=s1(),z=[],_=Z.teamName?.trim()||w_(),O=Z.sessionId?.trim()||_,A=H.enableSpawnAgent?p7({workspaceRoot:F}):{configs:[],errors:[]},q=A.configs.some((a)=>a.skills!==void 0),N=TZ(B,"rules"),T=TZ(B,"skills"),M=T||q,d=TZ(B,"workflows"),b=TZ(B,"plugins"),S=N||T||d,E=!1,I=Boolean(V),f=V,r;for(let a of A.errors)(J??Z.logger)?.log?.(`[agents] Failed to load agent config at ${a.path}: ${a.error.message}`);if(!f&&(S||q))f=b6({skills:M?{workspacePath:F,includePluginSkills:b,pluginSkillDirectories:b?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(f)await f.start().catch(()=>{});let w=H.enableTools&&T&&Boolean(f)&&f?.hasConfiguredSkills(Z.skills)===!0&&Fm({cwd:Z.cwd,providerId:Z.providerId,mode:H.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:L,toolExecutors:K}),k=f&&S?f.createExtension({includeRules:N,includeSkills:T,includeWorkflows:d,registerSkillsTool:w,allowedSkillNames:Z.skills}):void 0,m=H.mode==="plan"&&H.enableTools?JX({telemetry:W??Z.telemetry}):void 0,t=[k,m].filter((a)=>a!==void 0),y0=t.length>0?[...X??Z.extensions??[],...t]:X??Z.extensions;if(H.enableTools){if(z.push(...EZ(Z.cwd,Z.providerId,H.mode,Z.modelId,Z.toolRoutingRules,L,void 0,K,W??Z.telemetry,$.runCommandExecutionController)),!H.disableMcpSettingsTools){let a=await Dm(Z.logger);z.push(...a.tools),r=a.shutdown}}let Y0,X1=H.enableAgentTeams?P_():void 0,m0=X1?.loadRuntime(O),i1=m0?.state,J1=m0?.teammates??[],I0=new Map(J1.map((a)=>[a.agentId,a])),r0=Z.sessionId||_,i,W1=[],g=!1,G0=P6({providerId:Z.providerId,modelId:Z.modelId,distinctId:$.distinctId,sessionId:Z.sessionId,cwd:Z.cwd,apiKey:Z.apiKey??"",baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,reasoningEffort:Z.reasoningEffort,thinkingBudgetTokens:Z.thinkingBudgetTokens,maxTokensPerTurn:Z.maxTokensPerTurn,temperature:Z.temperature,maxIterations:Z.maxIterations,hooks:Q,extensions:y0,logger:J??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(H.enableSpawnAgent){if(A.configs.length>0)z.push(..._j(r7({configProvider:G0,agents:A.configs,createSubAgentTools:(a)=>H.enableTools?Um(EZ(Z.cwd,a.providerId??Z.providerId,H.mode,a.modelId??Z.modelId,Z.toolRoutingRules,L,a.skills!==void 0&&f?.createSkillsExecutor?f.createSkillsExecutor(a.skills):void 0,K,W??Z.telemetry,$.runCommandExecutionController),a):[],hookErrorMode:Z.hookErrorMode,toolPolicies:L,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),L))}if(!this.teamRuntimeEntries.has(r0))this.teamRuntimeEntries.set(r0,{delegatedAgentConfigProvider:G0});let C0=()=>{if(!H.enableAgentTeams)return;let a=this.teamRuntimeEntries.get(r0)??{delegatedAgentConfigProvider:G0};if(this.teamRuntimeEntries.set(r0,a),Y0=a.runtime,!Y0){if(Y0=new c4({teamName:_,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:H.missionLogIntervalSteps,missionLogIntervalMs:H.missionLogIntervalMs,onTeamEvent:(N0)=>{if(G(N0),Y0&&X1){if(N0.type==="teammate_spawned"&&N0.teammate?.rolePrompt){let r1={agentId:N0.agentId,rolePrompt:N0.teammate.rolePrompt,modelId:N0.teammate.modelId,maxIterations:N0.teammate.maxIterations};I0.set(r1.agentId,r1)}if(N0.type==="teammate_shutdown"&&!zm(N0.reason))I0.delete(N0.agentId);X1.handleTeamEvent(O,N0),X1.persistRuntime(O,Y0.exportState(),Array.from(I0.values()))}}}),i1)Y0.hydrateState(i1),g=!0;a.runtime=Y0}if(!E){if(!Y0)return;E=!0;let N0=W7({runtime:Y0,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(i1),restoredTeammates:J1,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(r1)=>{W1=r1,i?.addTools(r1)},createBaseTools:H.enableTools?()=>EZ(Z.cwd,Z.providerId,H.mode,Z.modelId,Z.toolRoutingRules,L,void 0,K,W??Z.telemetry,$.runCommandExecutionController):void 0,teammateConfigProvider:G0});if(g)Y0.recoverActiveRuns("runtime_recovered");if(N0.restoredFromPersistence)Y?.();z.push(...N0.tools)}return Y0};if(H.enableSpawnAgent&&j){let a=j();z.push({...a,execute:async(N0,r1)=>{return C0(),a.execute(N0,r1)}})}if(H.enableAgentTeams)C0();let c0=_j(z,L),W2=c0.some((a)=>a.name==="submit_and_exit"&&a.lifecycle?.completesRun===!0),x5=H.enableAgentTeams?()=>{let a=this.teamRuntimeEntries.get(r0)?.runtime;if(!a)return;let N0=a.listTasks(),r1=N0.some((_$)=>_$.status==="in_progress"||_$.status==="pending"),OV=a.listRuns({}),Pq=OV.some((_$)=>_$.status==="running"||_$.status==="queued");if(r1||Pq){let _$=N0.filter((j1)=>j1.status==="in_progress"||j1.status==="pending").map((j1)=>`${j1.id} (${j1.status}): ${j1.title}`).join(", "),NV=OV.filter((j1)=>j1.status==="running"||j1.status==="queued").map((j1)=>`${j1.id} (${j1.status})`).join(", "),qQ=[];if(_$)qQ.push(`Unfinished tasks: ${_$}`);if(NV)qQ.push(`Active runs: ${NV}`);return`[SYSTEM] You still have team obligations. ${qQ.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,Cq=W2?{requireCompletionTool:!0,...x5?{completionGuard:x5}:{}}:x5?{completionGuard:x5}:void 0;return{tools:c0,modelTools:U,logger:J??Z.logger,telemetry:W??Z.telemetry,teamRuntime:Y0,teamRestoredFromPersistence:Boolean(i1),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(r0)?.delegatedAgentConfigProvider??G0,extensions:y0,completionPolicy:Cq,registerLeadAgent:(a)=>{if(i=a,W1.length>0)a.addTools(T$(W1,[...D]))},shutdown:async(a)=>{if(_m(Y0,a),this.teamRuntimeEntries.delete(r0),await r?.(),!I)f?.stop()}}}}function Nm($,Z){let Q=$?.expiresAt,X=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===X}class X5 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 RZ{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new o$,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=b0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let X=this.refreshInFlight.get(Z);if(X)return X;let J=this.resolveProviderApiKeyInternal($,Z,Q).catch((W)=>{throw W}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,J),J}async resolveProviderApiKeyInternal($,Z,Q){let X=b0($);if(!X)return null;let J=this.providerSettingsManager.getProviderSettings(Z);if(!J)return j0(`oauth.resolve providerId=${$} storageProviderId=${Z} outcome=no_settings`),null;let W=j3($,J);if(!W)return j0(`oauth.resolve providerId=${$} storageProviderId=${Z} outcome=no_credentials`),null;j0(`oauth.resolve.start providerId=${$} storageProviderId=${Z} forceRefresh=${Q} accessTokenHash=${a0(W.access)} refreshTokenHash=${a0(W.refresh)}`);let j=await X.refresh({settings:J,credentials:W,forceRefresh:Q,telemetry:this.telemetry});if(!j)throw j0(`oauth.resolve providerId=${$} outcome=refresh_returned_null`),new X5($);let Y=q8({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:j,setLastUsed:!1,save:!1}),V=!Nm(J.auth,Y.auth);if(V)j0(`oauth.resolve.refreshed providerId=${$} newAccessTokenHash=${a0(j.access)} newRefreshTokenHash=${a0(j.refresh)} savingToDisk=true`),this.providerSettingsManager.saveProviderSettings(Y,{setLastUsed:!1,tokenSource:"oauth"});else j0(`oauth.resolve providerId=${$} outcome=not_refreshed`);return{apiKey:X.getApiKey(Y)??j.access,accountId:j.accountId,refreshed:V}}}import{normalizeUserInput as qm}from"@cline/shared";import{nanoid as Am}from"nanoid";class S_{list($){return $?N1($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),X=$.pendingPrompts.findIndex((V)=>V.id===Q);if(X<0)return{sessionId:Z.sessionId,prompts:N1($),updated:!1};let J=$.pendingPrompts[X];if(!J)return{sessionId:Z.sessionId,prompts:N1($),updated:!1};let W=Z.prompt===void 0?J.prompt:qm(Z.prompt).trim();if(!W)throw Error("prompt cannot be empty");let j=Z.delivery??J.delivery,Y={...J,prompt:W,mode:Z.mode??J.mode,delivery:j};return $.pendingPrompts.splice(X,1),Em($,Y,X,J.delivery),{sessionId:Z.sessionId,prompts:N1($),prompt:CZ(Y),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),X=$.pendingPrompts.findIndex((W)=>W.id===Q);if(X<0)return{sessionId:Z.sessionId,prompts:N1($),removed:!1};let[J]=$.pendingPrompts.splice(X,1);return{sessionId:Z.sessionId,prompts:N1($),prompt:J?CZ(J):void 0,removed:!0}}enqueue($,Z){let{prompt:Q,mode:X,delivery:J,userImages:W,userFiles:j}=Z,Y=$.pendingPrompts.findIndex((V)=>V.prompt===Q);if(Y>=0){let[V]=$.pendingPrompts.splice(Y,1),B={...V,prompt:Q,mode:X??V.mode,userImages:W??V.userImages,userFiles:j??V.userFiles};if(J==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...B,delivery:"steer"});else $.pendingPrompts.push(B)}else{let V={id:`pending_${Date.now()}_${Am(5)}`,prompt:Q,mode:X,delivery:J,userImages:W,userFiles:j};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return N1($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((X)=>X.delivery==="steer");if(Z<0)return{prompts:N1($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:N1($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:N1($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),N1($)}clear($){return $.pendingPrompts.length=0,[]}}class zj{deps;service=new S_;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let Z=this.deps.getSession($.sessionId);if(!Z)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}delete($){let Z=this.deps.getSession($.sessionId);if(!Z)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}enqueue($,Z){let Q=this.deps.getSession($);if(!Q)return;this.service.enqueue(Q,Z),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let Z=this.deps.getSession($);if(!Z)return;let{entry:Q}=this.service.consumeSteer(Z);if(!Q)return;return this.emitPrompts(Z),this.emitSubmitted(Z,Q),Q}discardQueue($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:N1($)}})}scheduleDrain($,Z){if(Z.pendingPrompts.length===0||Z.aborting||Z.drainingPendingPrompts||!Z.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let Z=this.deps.getSession($);if(!Z)return;if(Z.aborting||Z.drainingPendingPrompts)return;if(!Z.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(Z);if(!Q)return;this.emitPrompts(Z),this.emitSubmitted(Z,Q),Z.drainingPendingPrompts=!0;let X=!0;try{let J=await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles});if(Tm(J))X=!1}catch{X=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,X&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=CZ(Z);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}})}}function Tm($){return typeof $==="object"&&$!==null&&"finishReason"in $&&$.finishReason==="error"}function CZ($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function N1($){return $.pendingPrompts.map(CZ)}function Em($,Z,Q,X){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(X==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}_0();class PZ{deps;constructor($){this.deps=$}lastKnownIdentityBySession=new Map;static MAX_IDENTITY_SNAPSHOTS=512;dispatchAgentEvent($,Z,Q){let X=this.deps.getSession($),J={sessionId:$,config:Z,liveSession:X,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},W=dW(Q);if(!!X&&(!W.agentId||W.agentId===Oj(X.agent))){let Y={agentId:Oj(X.agent),conversationId:X.agent.getConversationId(),...X?.runtime.teamRuntime?{teamRole:"lead"}:{}};this.rememberSessionIdentity($,Y),WZ(J,Q,{...Y,isPrimaryAgentEvent:!0});return}WZ(J,Q,{...X?{}:this.lastKnownIdentityBySession.get($),isPrimaryAgentEvent:!1})}rememberSessionIdentity($,Z){if(this.lastKnownIdentityBySession.delete($),this.lastKnownIdentityBySession.set($,Z),this.lastKnownIdentityBySession.size>PZ.MAX_IDENTITY_SNAPSHOTS){let Q=this.lastKnownIdentityBySession.keys().next().value;if(Q!==void 0)this.lastKnownIdentityBySession.delete(Q)}}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(OW(Q,Z),Z.type==="agent_event"){let X={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};WZ(X,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let X=K$({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:Oj(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(X)V2(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...X})}}if(await NW($,Z,this.deps.invokeBackendOptional),Q)qW(Q,$,Z,this.deps.emit)}async handlePluginEvent($,Z,Q,X){if(Z.name==="plugin_log"){this.handlePluginLog($,Z.payload);return}if(Z.name==="plugin_telemetry"){this.handlePluginTelemetry($,Z.payload,X);return}if(Z.name==="automation_event"){let B=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!B)return;let K=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!K)return;await B.ingestEvent(K);return}if(Z.name!=="steer_message"&&Z.name!=="queue_message"&&Z.name!=="pending_prompt")return;let J=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0,W=typeof J?.sessionId==="string"&&J.sessionId.trim().length>0?J.sessionId.trim():$,j=typeof J?.prompt==="string"?J.prompt.trim():"";if(!j)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":J?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(W,{prompt:j,delivery:Y})}handlePluginTelemetry($,Z,Q){let J=this.deps.getSession($)?.config.telemetry??Q;if(!J||!Z||typeof Z!=="object")return;let W=Z,j=typeof W.pluginName==="string"&&W.pluginName?W.pluginName:"unknown";if(W.kind==="event"){let Y=typeof W.event==="string"?W.event.trim():"";if(!Y)return;let V={...W.properties&&typeof W.properties==="object"?W.properties:{},plugin_name:j,session_id:$};if(W.required===!0)J.captureRequired(`plugin.${Y}`,V);else J.capture({event:`plugin.${Y}`,properties:V});return}if(W.kind==="metric"){let Y=typeof W.name==="string"?W.name.trim():"",V=typeof W.value==="number"?W.value:NaN;if(!Y||Number.isNaN(V))return;let B={...W.attributes&&typeof W.attributes==="object"?W.attributes:{},plugin_name:j},K=typeof W.description==="string"?W.description:void 0,G=W.required===!0,H=`plugin.${Y}`;if(W.metric==="counter")J.recordCounter(H,V,B,K,G);else if(W.metric==="histogram")J.recordHistogram(H,V,B,K,G);else if(W.metric==="gauge")J.recordGauge(H,V,B,K,G)}}handlePluginLog($,Z,Q){let X=this.deps.getSession($),J=Q??X?.config.extensionContext?.logger??X?.config.logger;if(!J||!Z||typeof Z!=="object")return;let W=Z,j=typeof W.message==="string"?W.message:"";if(!j)return;let Y=W.metadata&&typeof W.metadata==="object"?{...W.metadata}:{};if(Y.sessionId??=$,typeof W.pluginName==="string"&&W.pluginName)Y.pluginName=W.pluginName;if(W.level==="debug"){J.debug(j,Y);return}if(W.level==="error"){if(J.error)J.error(j,Y);else J.log(j,{...Y,severity:"error"});return}J.log(j,Y)}}function Oj($){return $.getAgentId()}function Nj($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:G$($.config),teamName:$.config.teamName?.trim()||void 0,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,parentSessionId:typeof $.sessionMetadata?.parentSessionId==="string"?$.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof $.sessionMetadata?.parentAgentId==="string"?$.sessionMetadata.parentAgentId:void 0,agentId:typeof $.sessionMetadata?.agentId==="string"?$.sessionMetadata.agentId:void 0,conversationId:typeof $.sessionMetadata?.conversationId==="string"?$.sessionMetadata.conversationId:void 0,isSubagent:typeof $.sessionMetadata?.isSubagent==="boolean"?$.sessionMetadata.isSubagent:!1,prompt:$.pendingPrompt,metadata:$.sessionMetadata,messagesPath:$.artifacts?.messagesPath,updatedAt:$.updatedAt??$.endedAt??$.startedAt}}function qj($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function b_($,Z,...Q){let X=qj($,Z);if(!X)throw Error(`session service method not available: ${Z}`);return Promise.resolve(X.apply($,Q))}async function k_($,Z,...Q){let X=qj($,Z);if(!X)return;await Promise.resolve(X.apply($,Q))}async function x_($,Z,...Q){let X=qj($,Z);if(!X)return;return await Promise.resolve(X.apply($,Q))}M1();_0();function Aj($,Z,Q){return{onSubAgentEvent:(X)=>$.onAgentEvent(Q,Z,X),onSubAgentStart:(X)=>{let J=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(X.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let W=K$({agentId:X.subAgentId,conversationId:X.conversationId,parentAgentId:X.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:X.parentAgentId});if(W)V2(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...W});g5(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:X.parentAgentId,agentId:X.subAgentId,...W}),$.invokeBackendOptional("handleSubAgentStart",Q,X)},onSubAgentEnd:(X)=>{let J=$.getSession(Q)?.runtime.teamRuntime,W=$.subAgentStarts.get(X.subAgentId),j=W?Date.now()-W.startedAt:0,Y=X.result?.text?X.result.text.split(`
791
- `).length:0;g5(Z.telemetry,{event:"ended",ulid:Q,durationMs:j,outputLines:Y,errorMessage:X.error?String(X.error):void 0,agentId:X.subAgentId,parentId:X.parentAgentId,...K$({agentId:X.subAgentId,conversationId:X.conversationId,parentAgentId:X.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:X.parentAgentId})}),$.subAgentStarts.delete(X.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,X)}}}function Tj($,Z,Q,X){let J=Aj($,Z,Q);return w6({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let j=Z.enableTools?s8({cwd:Z.cwd,telemetry:Z.telemetry,...k1[S$({mode:Z.mode})],executors:X}):[];if(Z.enableSpawnAgent)j.push(Tj($,Z,Q,X));return T$(j)},...J})}import{readFile as Mm,stat as Rm}from"node:fs/promises";var Cm=20480000;async function y_($){let Z=await Rm($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>Cm)throw Error("File is too large to read into context.");let Q=await Mm($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var I_=5000,Rj;function ym($,Z){if(Rj)return;Rj=JG().then(()=>{return}).catch((Q)=>{Rj=void 0,$?.error?.("Detached command log recovery failed",{error:Q}),q1(Z,{component:"core",operation:"command.detached_log_recovery",error:Q,severity:"warn",handled:!0})})}function J5($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Im($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=J5(Z.inputTokens),X=J5(Z.outputTokens),J=J5(Z.cacheReadTokens),W=J5(Z.cacheWriteTokens),j=J5(Z.totalCost);if(Q===void 0||X===void 0||J===void 0||W===void 0||j===void 0)return;return{inputTokens:Q,outputTokens:X,cacheReadTokens:J,cacheWriteTokens:W,totalCost:j}}function hm($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}function h_($,Z){if(!Z)return!1;if($.source_message_count!==Z.source_message_count)return $.source_message_count<Z.source_message_count;return Date.parse($.updated_at)<Date.parse(Z.updated_at)}class s${runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;distinctId;defaultLogger;defaultFetch;events=new C4;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new Q8;runCommandExecutionController=new c8;constructor($){let Z=fm();if(Z)xm(Z);let Q=D1($.distinctId);this.distinctId=Q,this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new MZ,this.createAgentInstance=$.createAgent??((X)=>new x$(X)),this.defaultCapabilities=o0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new o$,this.oauthTokenManager=$.oauthTokenManager??new RZ({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultLogger=$.logger,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,ym(this.defaultLogger,this.defaultTelemetry),this.pendingPromptsController=new zj({getSession:(X)=>this.sessions.get(X),emit:(X)=>this.emit(X),send:(X)=>this.runTurn(X)}),this.pendingPrompts={list:async(X)=>this.pendingPromptsController.list(X.sessionId),update:async(X)=>this.pendingPromptsController.update(X),delete:async(X)=>this.pendingPromptsController.delete(X)},this.eventBridge=new PZ({getSession:(X)=>this.sessions.get(X),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(X)=>this.emit(X),persistMessages:(X,J,W)=>{this.invoke("persistSessionMessages",X,J,W).catch((j)=>{let Y=this.sessions.get(X);(Y?.config.logger??this.defaultLogger)?.error?.("Failed to persist session messages from agent event",{sessionId:X,error:j}),q1(Y?.config.telemetry??this.defaultTelemetry,{component:"core",operation:"session.persist_messages_on_agent_event",error:j,severity:"warn",handled:!0,context:{sessionId:X,providerId:Y?.config.providerId,modelId:Y?.config.modelId}})})},enqueuePendingPrompt:(X,J)=>this.pendingPromptsController.enqueue(X,J),invokeBackendOptional:(X,...J)=>this.invokeOptional(X,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.config.sessionId?.trim()??"",Q=Z||Sm(),X=Z.length>0&&($.initialMessages?.length??0)>0&&!$.prompt?.trim(),J=Boolean($.config.cwd?.trim()||$.config.workspaceRoot?.trim()),W=X&&!J?await this.invokeOptionalValue("readSessionManifest",Q):void 0,j=W?{...$.config,cwd:W.cwd,workspaceRoot:W.workspace_root}:await AG($.config);return await this.startResolvedSession({...$,config:j},Q,Z.length>0,W)}async startResolvedSession($,Z,Q,X){let J=$.source??Z0.CLI,W=U0(),j=await this.applyInitialOAuthCredentials($),Y=j.initialMessages??[],V=Y.length>0?JZ(Y):p0(),B=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!B)throw Error("session service method not available: ensureSessionsDir");let K=Ej(B,Z),G=Ej(K,`${Z}.messages.json`),H=Ej(K,`${Z}.json`),U=G$($.config),F=$.interactive===!0&&!j.prompt?.trim(),L=Z1.parse({version:1,session_id:Z,source:J,pid:process.pid,started_at:W,status:F?"idle":"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:U,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:G}),D,z;if(Q&&Y.length>0&&!j.prompt?.trim()){let g=X??await this.invokeOptionalValue("readSessionManifest",Z);if(g)L=g,D={manifestPath:H,messagesPath:g.messages_path||G,compactionPath:g.compaction_path,manifest:g},z=await this.invokeOptionalValue("readSessionCompactionState",Z)}let O=await this.seedAggregateUsageFromArtifacts({initialUsage:V,sessionDir:K,rootMessagesPath:D?.messagesPath??G,manifest:L});this.usageBySession.set(Z,V),this.aggregateUsageBySession.set(Z,O);let A=o0(this.defaultCapabilities,$.capabilities),q=A?.toolExecutors??this.toolExecutors,N=$.localRuntime,T=N?.extensionContext?.logger??N?.logger,M=N?.extensionContext?.automation,d=N?.extensionContext?.telemetry??N?.telemetry??this.defaultTelemetry,b,S={getSession:(g)=>this.sessions.get(g),subAgentStarts:this.subAgentStarts,onAgentEvent:(g,G0,C0)=>this.eventBridge.dispatchAgentEvent(g,G0,C0),invokeBackendOptional:(g,...G0)=>this.invokeOptional(g,...G0)};b=await eD({input:j,localRuntime:$.localRuntime,sessionId:Z,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultLogger:this.defaultLogger,defaultCapabilities:A,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(g)=>{if(g.name==="plugin_log"){this.eventBridge.handlePluginLog(Z,g.payload,T);return}this.eventBridge.handlePluginEvent(Z,g,M,d)},onTeamEvent:(g)=>{this.eventBridge.handleTeamEvent(Z,g),b.config.onTeamEvent?.(g)},createSpawnTool:()=>Tj(S,b.config,Z,q),createSubAgentLifecycleCallbacks:(g)=>Aj(S,g,Z),readSessionMetadata:async()=>(await this.getSession(Z))?.metadata,writeSessionMetadata:async(g)=>{await this.persistSessionMetadata(Z,()=>g)}});let E=k0(JJ({...D?.manifest.metadata??{},...j.sessionMetadata??{}},b.gitState),{mode:j.mode,version:b.config.extensionContext?.client?.version});if(!D)L.metadata=E;let I=await this.runtimeBuilder.build({...b.runtimeBuilderInput,distinctId:this.distinctId,runCommandExecutionController:this.runCommandExecutionController}),f=b.config,r=b.providerConfig;if(I.teamRuntime&&!f.teamName?.trim())f.teamName=I.teamRuntime.getTeamName();let w=async()=>{let g=this.sessions.get(Z);if(!g||!X6(g.config.providerId))return!1;try{return await this.syncOAuthCredentials(g,{forceRefresh:!0}),!0}catch{return!1}};I.delegatedAgentConfigProvider?.updateConnectionDefaults({onAuthError:w});let k=[...I.tools,...f.extraTools??[]],m=I.extensions??b.extensions,t=j.initialCompactionState,y0,Y0=cW(f),X1=t??z,m0=X1?{...X1,conversation_id:X1.conversation_id?.trim()||Z}:void 0,i1=uW({compact:Y0,getState:()=>y0?.compactionState,saveState:async(g,G0)=>{let C0=y0;if(!C0)return;let c0={...g,conversation_id:C0.sessionId};try{if(!(await this.persistActiveSessionCompactionState(C0,c0,G0)).updated)f.logger?.debug?.("Skipped stale session compaction state",{sessionId:C0.sessionId,sourceMessageCount:c0.source_message_count})}catch(W2){f.logger?.error?.("Failed to persist session compaction state",{sessionId:C0.sessionId,error:W2}),q1(f.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:W2,context:{sessionId:C0.sessionId,providerId:f.providerId,modelId:f.modelId}})}}}),J1={distinctId:this.distinctId,sessionId:Z,providerId:r.providerId,modelId:r.modelId,apiKey:r.apiKey,baseUrl:r.baseUrl,headers:r.headers,onAuthError:w,knownModels:r.knownModels,providerConfig:r,thinking:f.thinking,reasoningEffort:f.reasoningEffort??r.reasoningEffort,thinkingBudgetTokens:f.thinkingBudgetTokens,maxTokensPerTurn:f.maxTokensPerTurn,temperature:f.temperature,systemPrompt:f.systemPrompt,maxIterations:f.maxIterations,execution:f.execution,prepareTurn:i1,tools:k,modelTools:I.modelTools,hooks:b.hooks,extensions:m,hookErrorMode:f.hookErrorMode,initialMessages:b.effectiveInput.initialMessages,userFileContentLoader:y_,toolPolicies:b.toolPolicies,requestToolApproval:b.requestToolApproval?async(g)=>{let G0=b.requestToolApproval,C0=this.sessions.get(Z);if(C0)await this.markTurnPending(C0);try{if(!G0)return{approved:!1,reason:"Tool approval callback is not configured."};return await G0(g)}finally{let c0=this.sessions.get(Z);if(c0?.status==="pending")await this.markTurnRunning(c0)}}:void 0,telemetry:f.telemetry,onConsecutiveMistakeLimitReached:f.onConsecutiveMistakeLimitReached,completionPolicy:I.completionPolicy,consumePendingUserMessage:()=>{let g=this.pendingPromptsController.consumeSteer(Z);return g?d4(g.prompt,g.mode??f.mode):void 0},logger:I.logger??f.logger,extensionContext:f.extensionContext,onEvent:(g)=>this.eventBridge.dispatchAgentEvent(Z,f,g)};J1.hooks={...J1.hooks,onEvent:async(g)=>{if(await b.hooks?.onEvent?.(g),g.type!=="assistant-message")return;let G0=this.sessions.get(Z);if(!G0)return;let C0=G0.agent.getMessages();try{await this.invoke("persistSessionMessages",Z,C0,f.systemPrompt)}catch(c0){f.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:Z,error:c0}),q1(f.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:c0,severity:"warn",handled:!0,context:{sessionId:Z,providerId:f.providerId,modelId:f.modelId}})}}};let I0=this.createAgentInstance(J1);if(J1.onEvent)I0.subscribeEvents(J1.onEvent);I.registerLeadAgent?.(I0);let r0=K$({agentId:I0.getAgentId(),conversationId:I0.getConversationId(),teamId:I.teamRuntime?.getTeamId(),teamName:I.teamRuntime?.getTeamName(),teamRole:I.teamRuntime?"lead":void 0});if($_(f,Z,Q,U,r0),r0)V2(f.telemetry,{ulid:Z,modelId:f.modelId,provider:f.providerId,...r0});if(I.teamRuntime)hQ(f.telemetry,{ulid:Z,teamId:I.teamRuntime.getTeamId(),teamName:I.teamRuntime.getTeamName(),leadAgentId:I0.getAgentId(),restoredFromPersistence:I.teamRestoredFromPersistence===!0});let i={sessionId:Z,config:f,sessionMetadata:E,...D?{artifacts:D}:{},source:J,startedAt:D?.manifest.started_at??W,updatedAt:D?.manifest.ended_at??D?.manifest.started_at??W,pendingPrompt:L.prompt,runtime:I,agent:I0,started:!1,status:D?.manifest.status??(F?"idle":"running"),aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,compactionState:m0,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:b.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(y0=i,i.compactionState&&!this.isCompactionStateForSession(i.sessionId,i.compactionState,i))i.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:i.sessionId,conversationId:i.compactionState.conversation_id}),i.compactionState=void 0;if(this.sessions.set(Z,i),D)await this.refreshActiveSessionGitMetadata(i,b.gitState);if(Y.length>0&&!D)try{await this.ensureSessionPersisted(i),await this.invoke("persistSessionMessages",Z,Y,i.config.systemPrompt)}catch(g){i.config.logger?.error?.("Failed to persist seeded session messages at start",{sessionId:Z,error:g}),q1(i.config.telemetry,{component:"core",operation:"session.persist_seeded_messages",error:g,severity:"warn",handled:!0,context:{sessionId:Z,providerId:i.config.providerId,modelId:i.config.modelId}})}this.emitStatus(Z,i.status);let W1;try{if(j.prompt?.trim())if(W1=await this.executeTurn(i,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!i.interactive)await this.finalizeSingleRun(i,W1.finishReason);else await this.completeInteractiveTurn(i,W1.finishReason)}catch(g){if(i.interactive&&i.aborting)W1=await this.completeAbortedInteractiveTurn(i);else{q1(i.config.telemetry,{component:"core",operation:"session.start",error:g,severity:"error",handled:!1,context:{sessionId:i.sessionId,providerId:i.config.providerId,modelId:i.config.modelId}});try{await this.failSession(i)}catch(G0){i.config.logger?.error?.("Session failure cleanup threw",{sessionId:i.sessionId,error:G0})}throw g}}return{sessionId:Z,manifest:L,manifestPath:H,messagesPath:G,result:W1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let X=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...X?{sessionMetadata:X}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,cleanupStartedSession:async(Z)=>{if(!await this.deleteSession(Z.sessionId))throw Error(`Failed to clean up restored session ${Z.sessionId}`)},readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),X=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:X??"immediate"}}),X==="queue"||X==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:X,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,J.finishReason);else await this.completeInteractiveTurn(Z,J.finishReason);if(J.finishReason!=="error")queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)});return J}catch(J){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw q1(Z.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),J}}async getAccumulatedUsage($){let Z=fJ(this.usageBySession.get($)),Q=fJ(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;if(Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,Q.drainingPendingPrompts)this.pendingPromptsController.discardQueue(Q);Q.agent.abort(Z)}async proceedWhileRunning($,Z){return this.runCommandExecutionController.proceedWhileRunning($,Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!P0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!P0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return Nj(Z);let Q=$.trim();if(!Q)return;let X=await this.getRow(Q);if(X)return M4(X);let J=await this.readManifest(Q);return J?bJ(J):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(M4),X=new Set(Q.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(X.has(J.sessionId))continue;Q.unshift(Nj(J))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async updateSessionCompactionState($,Z){let Q=$.trim();if(!Q)return{updated:!1};let X=this.sessions.get(Q),J=X?void 0:await this.getSession(Q);if(!(X??J))return{updated:!1};if(X){let Y=await this.readSessionMessages(Q),V=Z.source_message_count>0&&Y.length>=Z.source_message_count,B=V?Y:void 0;if(V){if(!await this.canPersistCompactionState(Q,Z,X,void 0,Y))return{updated:!1};X.agent.restore(Y)}return await this.persistActiveSessionCompactionState(X,Z,B)}if(!await this.canPersistCompactionState(Q,Z,void 0,J))return{updated:!1};let j=await this.invokeOptionalValue("readSessionCompactionState",Q);if(h_(Z,j))return{updated:!1};return await this.invoke("persistSessionCompactionState",Q,Z),{updated:!0}}async readSessionCompactionState($){let Z=$.trim();if(!Z)return;let Q=this.sessions.get(Z);if(Q)for(;;){let X=Q.compactionStateWriteQueue;if(!X)return Q.compactionState;await X.catch(()=>{return})}return await this.invokeOptionalValue("readSessionCompactionState",Z)}isCompactionStateForSession($,Z,Q,X){let J=Z.conversation_id?.trim();if(!J)return!0;if(J===$)return!0;let W=Q?.agent.getConversationId()?.trim()||X?.conversationId?.trim();return W?J===W:!1}async canPersistCompactionState($,Z,Q,X,J){if(!Z.conversation_id?.trim())return!1;if(!this.isCompactionStateForSession($,Z,Q,X))return!1;let W=J??Q?.agent.getMessages()??await this.readSessionMessages($);return l6(Z,W)!==void 0}async persistActiveSessionCompactionState($,Z,Q){if(!await this.canPersistCompactionState($.sessionId,Z,$,void 0,Q))return{updated:!1};return await this.enqueueCompactionStateWrite($,async()=>{let X=$.compactionState,J=X!==void 0&&l6(X,Q??$.agent.getMessages())!==void 0;if(X&&(J?h_(Z,X):Date.parse(Z.updated_at)<Date.parse(X.updated_at)))return{updated:!1};return await this.invoke("persistSessionCompactionState",$.sessionId,Z),$.compactionState=Z,{updated:!0}})}async enqueueCompactionStateWrite($,Z){let X=($.compactionStateWriteQueue??Promise.resolve()).catch(()=>{return}).then(Z),J=X.then(()=>{return},()=>{return});$.compactionStateWriteQueue=J;try{return await X}finally{if($.compactionStateWriteQueue===J)$.compactionStateWriteQueue=void 0}}async readLiveSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=this.sessions.get(Z);if(Q){let X=Q.agent.getMessages();if(X.length>0)return X}return this.readSessionMessages(Z)}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return c$(Q.messagesPath);let X=await this.readManifest(Z);return c$(X?.messages_path)}async dispatchHookEvent($){await TF($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){await this.updateSessionConnection($,{modelId:Z})}async updateSessionConnection($,Z){let Q=C6(Z),X=this.getSessionOrThrow($);if(Q.providerId!==void 0)X.config.providerId=Q.providerId;if(Q.modelId!==void 0)X.config.modelId=Q.modelId;if(Q.apiKey!==void 0)X.config.apiKey=Q.apiKey;if(Q.baseUrl!==void 0)X.config.baseUrl=Q.baseUrl;if(Q.headers!==void 0)X.config.headers=Q.headers;if(Q.providerConfig!==void 0)X.config.providerConfig=Q.providerConfig;if(Object.hasOwn(Q,"reasoningEffort"))X.config.reasoningEffort=Q.reasoningEffort??void 0;if(Object.hasOwn(Q,"thinkingBudgetTokens"))X.config.thinkingBudgetTokens=Q.thinkingBudgetTokens??void 0;if(Object.hasOwn(Q,"thinking")){if(X.config.thinking=Q.thinking??void 0,Q.thinking===!1||Q.thinking===null)X.config.reasoningEffort=void 0,X.config.thinkingBudgetTokens=void 0}let J={...Q.providerId!==void 0?{providerId:Q.providerId}:{},...Q.modelId!==void 0?{modelId:Q.modelId}:{},...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{},...Q.providerConfig!==void 0?{providerConfig:Q.providerConfig}:{},...Object.hasOwn(Q,"reasoningEffort")?{reasoningEffort:Q.reasoningEffort??void 0}:{},...Object.hasOwn(Q,"thinking")?{thinking:Q.thinking??void 0}:{},...Object.hasOwn(Q,"thinkingBudgetTokens")?{thinkingBudgetTokens:Q.thinkingBudgetTokens??void 0}:{}};if(Q.thinking===!1||Q.thinking===null)J.reasoningEffort=void 0,J.thinkingBudgetTokens=void 0;let W={...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{}};if(X.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults(J),X.agent.updateConnection(Q),X.runtime.teamRuntime?.updateTeammateConnections(W),Q.providerId||Q.modelId)await this.mutateSessionManifest(X,(j)=>{if(Q.providerId)j.provider=Q.providerId;if(Q.modelId)j.model=Q.modelId})}async mutateSessionManifest($,Z){let Q=$.artifacts;if(!Q)return;let X=$.sessionId,W=(this.manifestMutationQueues.get(X)??Promise.resolve()).then(async()=>{let Y=await this.invokeOptionalValue("readSessionManifest",X)??Q.manifest;return Z(Y),Q.manifest=Y,await this.invoke("writeSessionManifest",Q.manifestPath,Y),Y}),j=W.then(()=>{return},()=>{return});this.manifestMutationQueues.set(X,j);try{return await W}finally{if(this.manifestMutationQueues.get(X)===j)this.manifestMutationQueues.delete(X)}}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),X=Q.prompt.trim(),J=Q?.userImages?.length,W=Q?.userFiles?.length;if(!X&&!J&&!W)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=X;if(await this.ensureSessionPersisted($),!$.pendingPrompt){$.pendingPrompt=X;try{await this.invokeOptionalValue("updateSession",{sessionId:$.sessionId,prompt:X})}catch(j){$.config.logger?.log?.("Failed to backfill seeded session prompt",{severity:"warn",sessionId:$.sessionId,error:j})}}await this.refreshActiveSessionGitMetadata($),await this.syncOAuthCredentials($),await this.markTurnRunning($);try{let j=await this.executeAgentTurn($,X,Q.userImages,Q.userFiles);while(AW($,j.finishReason)){let Y=await TW($);if(Y.length===0)break;let V=EW($,Y);j=await this.executeAgentTurn($,V)}return j}finally{await this.refreshActiveSessionGitMetadata($)}}async completeInteractiveTurn($,Z){if(u4($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),X=p0();if($.persistedMessages=Q,$.started=$.started||Q.length>0,Q.length>0)try{await this.ensureSessionPersisted($),await this.invoke("persistSessionMessages",$.sessionId,Q,$.config.systemPrompt)}catch(J){$.config.logger?.error?.("Failed to persist session messages after abort",{sessionId:$.sessionId,error:J}),q1($.config.telemetry,{component:"core",operation:"session.persist_messages_after_abort",error:J,severity:"warn",handled:!0,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}})}return this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:X}),await this.completeInteractiveTurn($,"aborted"),queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),{text:"",usage:X,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,X){let J=$.started||$.agent.getMessages().length>0,W=$.persistedMessages??$.agent.getMessages(),j=this.usageBySession.get($.sessionId)??p0(),Y=this.aggregateUsageBySession.get($.sessionId)??j;$.turnUsageBaseline=j,$.turnAggregateUsageBaseline=Y,$.turnPrimaryUsage=p0(),$.turnUsageByAgent=new Map,wQ($.config.telemetry,$.sessionId,$.config.mode),z8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(Z,Q,X):()=>$.agent.run(Z,Q,X),B=await this.runWithAuthRetry($,V,W);$.started=!0;let K=S7(B.messages,B,W);$.persistedMessages=K;let G=XZ($.turnUsageByAgent?.values()??[]),H=v0(j,B.usage),U=v0(v0(p0(),B.usage),G),F=v0(Y,U);return this.usageBySession.set($.sessionId,H),this.aggregateUsageBySession.set($.sessionId,F),await this.persistSessionMetadata($.sessionId,(L)=>({...L??{},totalCost:H.totalCost,aggregatedAgentsCost:F.totalCost,usage:H,aggregateUsage:F})),await this.invoke("persistSessionMessages",$.sessionId,K,$.config.systemPrompt),this.observeTaskCompletionTool($,B),B}catch(V){q1($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}});try{await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt)}catch(B){$.config.logger?.error?.("Failed to persist session messages after turn error",{sessionId:$.sessionId,error:B})}throw V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((X)=>X.name===A0.SUBMIT_AND_EXIT&&X.error===void 0))return;$.submitAndExitObserved=!0,v5($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,Z){let Q=G$($.config),X=km(Z.prompt).trim();if(!X)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let J=await i9(X,Q);Z_($.config.telemetry,J);let W=d4(J.prompt,Z.mode??$.config.mode),j=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),Y=this.resolveAbsoluteFilePaths(Q,J.matchedFiles),V=Array.from(new Set([...j,...Y]));return{prompt:W,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=G$($.config);if($.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:Z,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt}),$.compactionState){if(!(await this.persistActiveSessionCompactionState($,$.compactionState)).updated)$.compactionState=void 0}}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async refreshActiveSessionGitMetadata($,Z){try{let Q=Z??await sU(G$($.config));if(!Q||!$.artifacts)return;if(nU($.artifacts.manifest.metadata,Q))return;await this.persistSessionMetadata($.sessionId,(X)=>JJ({...X??{},...$.sessionMetadata??{}},Q))}catch(Q){$.config.logger?.debug?.("Failed to refresh session git metadata",{sessionId:$.sessionId,error:Q})}}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,Z){let Q=this.sessions.get($),X=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,J=Z(X?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Q.sessionMetadata=J,Q.artifacts.manifest.metadata=J}async finalizeSingleRun($,Z){if(u4($))return;let Q=Z==="aborted"||$.aborting,X=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":X?"failed":"completed",exitCode:X?1:0,shutdownReason:X?"session_error":"session_complete",endReason:Z})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(Z.status==="completed"&&!$.submitAndExitObserved)v5($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});if(o7($),!$.aborting&&!$.agent.canStartRun())$.aborting=!0,$.agent.abort(Error(Z.shutdownReason));let Q=[],X=(J,W)=>{Q.push(W),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:W,severity:"warn"}),q1($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){await this.refreshActiveSessionGitMetadata($);try{await this.updateStatus($,Z.status,Z.exitCode)}catch(J){X("update_status",J)}}try{await $.agent.shutdown(Z.shutdownReason)}catch(J){X("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(J){X("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){X("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){let Q=[],X=(J,W)=>{Q.push(W),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:W,severity:"warn"}),q1($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};if(!$.aborting&&!$.agent.canStartRun())$.aborting=!0,$.agent.abort(Error(Z));try{await $.agent.shutdown(Z)}catch(J){X("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(J){X("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){X("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let X=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!X.updated)return;let J=await this.mutateSessionManifest($,(W)=>{if(W.status=Z,P0(Z))delete W.ended_at,W.exit_code=null;else W.ended_at=X.endedAt??U0(),W.exit_code=typeof Q==="number"?Q:null});if(!J)return;$.status=Z,$.updatedAt=X.endedAt??U0(),$.endedAt=P0(Z)?null:J.ended_at,$.exitCode=J.exit_code,this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(X){if(!X6($.config.providerId)||!bm(X))throw X;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),Z()}}async syncOAuthCredentials($,Z){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:Z?.forceRefresh})}catch(X){if(X instanceof X5)throw Error(`${X.providerId} requires re-authentication.`);throw X}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new P2($);throw q1(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((X)=>X.trim()).filter((X)=>X.length>0).map((X)=>wm(X)?X:Mj($,X));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return K$({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let Z=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=v0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let X=Mj(Z),J=`${Q}.messages.json`,W;try{W=Pm($)}catch{return p0()}let j=p0();for(let Y of W){if(!Y.endsWith(".messages.json"))continue;if(Y===J)continue;let V=Mj($,Y);if(V===X)continue;let B=await c$(V);if(B.length===0)continue;j=v0(j,JZ(B))}return j}withPersistedAggregateUsageFloor($,Z){let Q=Im(Z.metadata?.aggregateUsage);if(Q)return hm($,Q);let X=Z.metadata?.aggregatedAgentsCost;if(typeof X!=="number"||!Number.isFinite(X)||X<=$.totalCost)return $;return{...$,totalCost:X}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:u$({session:Z,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),I_))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(I_)).find((X)=>X.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return b_(this.sessionService,$,...Z)}invokeOptional($,...Z){return k_(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return x_(this.sessionService,$,...Z)}}function vm($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let Z=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(Z==="local"||Z==="hub"||Z==="remote")return Z;return"auto"}var W5,j5;function gm($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;iF(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function mm($){await $.reconcileDeadSessions?.().catch(()=>{})}function m_($){try{let Z=new p$;return Z.init(),new r$(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),g_($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new PW(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function v_($,Z,Q){return new s$({sessionService:Q??$.sessionService??m_($),capabilities:$.capabilities,logger:$.logger,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function cm($){if(W5)return W5;if(j5)return await j5;return j5=(async()=>{return W5=m_($),await mm(W5),W5})().finally(()=>{j5=void 0}),await j5}async function fZ($){let Z=D1($.distinctId);$.telemetry?.setDistinctId(Z);let Q=vm($);if(Q==="remote"){let X=$.remote?.endpoint?.trim();if(!X)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:X}),new c7({endpoint:X,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let X=$.hub?.endpoint?.trim(),J=X||await x4({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!J)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:J,explicitEndpoint:X||void 0}),new I2({url:J,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Q==="auto"){let X=await $W({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(X){$.logger?.log("Using discovered local hub runtime host",{url:X});let J=new I2({url:X,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await J.connect(),J}catch(W){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:W}),g_($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:W,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return gm(Q,$),$.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),v_($,Z)}return v_($,Z)}import{existsSync as um,mkdirSync as dm,readFileSync as lm,writeFileSync as pm}from"node:fs";import{dirname as im}from"node:path";import{FEATURE_FLAGS as c_,FeatureFlagDefaultValue as Cj}from"@cline/shared";var rm=3600000,am=604800000,u_=1;class Y5{provider;telemetry;logger;cacheTtlMs;cacheFilePath;persistentCacheMaxAgeMs;context;cache=new Map;cacheInfo={updateTime:0,userId:null};constructor($){this.provider=$.provider,this.telemetry=$.telemetry,this.logger=$.logger,this.cacheTtlMs=$.cacheTtlMs??rm,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??am,this.context={...$.context??{}},this.hydrateFromPersistentCache()}setContext($){this.context={...$}}hydrateCache($){this.cacheInfo={updateTime:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload},this.rebuildCacheFromSnapshot($.flagsPayload)}getCacheSnapshot(){return{updateTime:this.cacheInfo.updateTime,userId:this.cacheInfo.userId,flagsPayload:this.cacheInfo.flagsPayload}}async poll($){let Z=$??this.context.userId??null,Q=Date.now();if(Q-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===Z)return}let X=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:Z||null};try{let J=await this.provider.getAllFlagsAndPayloads({flagKeys:c_.length>0?c_:void 0,context:{...this.context,userId:Z}});if(this.cacheInfo.userId!==Z)return;this.cacheInfo.flagsPayload=J,this.rebuildCacheFromSnapshot(J),this.writePersistentCache()}catch(J){if(this.cacheInfo.userId!==Z)return;throw this.cacheInfo=X.updateTime?X:{updateTime:0,userId:null},this.logger?.error?.("Error polling SDK feature flags",{error:J}),J}}hydrateFromPersistentCache(){let $=this.readPersistentCache();if($)this.hydrateCache($)}isFeatureFlagPayload($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every((Z)=>this.isFeatureFlagPayload(Z));if(typeof $==="object")return Object.values($).every((Z)=>this.isFeatureFlagPayload(Z));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=Object.entries($).filter(([,X])=>this.isFeatureFlagPayload(X));if(Z.length===0)return;let Q={};for(let[X,J]of Z)Q[X]=J;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!um(this.cacheFilePath))return;let $=JSON.parse(lm(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==u_||typeof Z.updatedAt!=="number"||!Number.isFinite(Z.updatedAt)||Date.now()-Z.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:Z.updatedAt,userId:Z.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(Z.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(Z.flagsPayload?.featureFlagPayloads)}}}catch($){this.logger?.error?.("Error reading SDK feature flags cache",{error:$});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;dm(im(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:u_,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};pm(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
792
- `,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let Z=new Map;for(let Q of this.getReturnedFlagKeys($)){let X=this.getFeatureFlag(Q);Z.set(Q,X??!1)}this.cache=Z}getFeatureFlag($){try{let Z=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],X=Z??Q??Cj[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==X)this.telemetry?.capture({event:l.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return X}catch(Z){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:Z}),Cj[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??Cj[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,Z){if(process.env.IS_TEST==="true")this.cache.set($,Z)}async dispose(){await this.provider.dispose()}}class V5{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}h2();import{execFile as nm}from"node:child_process";import*as d_ from"node:fs/promises";import*as j8 from"node:path";import{promisify as om}from"node:util";var sm=om(nm),tm=52428800;async function W8($,Z){let{stdout:Q}=await sm("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:tm,encoding:"utf8"});return Q}function Pj($){return $.split("\x00").filter(Boolean)}function l_($,Z){let Q=j8.resolve($,Z),X=j8.relative($,Q);if(X.startsWith("..")||j8.isAbsolute(X))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function em($,Z,Q){try{return await W8($,["show",`${Z}:${Q}`])}catch{try{return await W8($,["show",`${Z}^3:${Q}`])}catch{return""}}}async function $c($,Z){try{return await d_.readFile(l_($,Z),"utf8")}catch{return""}}async function Zc($,Z){try{return Pj(await W8($,["ls-tree","-r","-z","--name-only",`${Z}^3`]))}catch{return[]}}async function Qc($,Z){await W8($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,X,J]=await Promise.all([W8($,["diff","--name-only","-z",Z.ref,"--"]),W8($,["ls-files","--others","--exclude-standard","-z"]),Zc($,Z.ref)]);return[...new Set([...Pj(Q),...Pj(X),...J])].sort((j,Y)=>j.localeCompare(Y))}function p_($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=qZ(Z5($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let X=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!X)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Q,cwd:X}}async function i_($,Z){let Q=await Qc($,Z);return(await Promise.all(Q.map(async(J)=>{let[W,j]=await Promise.all([em($,Z.ref,J),$c($,J)]);return{filePath:l_($,J),leftContent:W,rightContent:j}}))).filter((J)=>J.leftContent!==J.rightContent)}async function fj($){let Z=p_($),Q=await i_(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}var wj="modelToolActivities";function Xc($){if($.role!=="assistant")return[];let Z=$.metadata?.[wj];if(!Array.isArray(Z))return[];let Q=[];for(let X of Z){if(!X||typeof X!=="object"||Array.isArray(X))continue;let J=X,W=typeof J.toolCallId==="string"?J.toolCallId.trim():"",j=typeof J.toolName==="string"?J.toolName.trim():"",Y=J.execution;if(!W||!j||Y!=="client"&&Y!=="provider")continue;Q.push({toolCallId:W,toolName:j,execution:Y,input:J.input,output:J.output,isError:J.isError===!0,hasResult:Object.hasOwn(J,"output")||Object.hasOwn(J,"isError")})}return Q}function Jc($){if(!$||!Object.hasOwn($,wj))return $;let Z={...$};return delete Z[wj],Object.keys(Z).length>0?Z:void 0}function wZ($,Z,Q,X){return{kind:"session_display_message",origin:Q,execution:X,message:$,sourceIndex:Z}}function Sj($){let Z=[];for(let[Q,X]of $.entries()){if(!X||typeof X!=="object"||Array.isArray(X)||X.role!=="user"&&X.role!=="assistant")continue;let J=X,W=Xc(J);if(W.length===0){Z.push(wZ(J,Q,"history"));continue}for(let[j,Y]of W.entries()){let B=(typeof J.id==="string"?J.id.trim():"")||`model_tool_${Y.toolCallId||`history_message_${Q}`}`,K={agent:J.agent,sessionId:J.sessionId,ts:J.ts},G={type:"tool_use",id:Y.toolCallId,name:Y.toolName,input:Y.input??{}};if(Z.push(wZ({...K,id:`${B}_model_tool_${j}_use`,role:"assistant",content:[G],metadata:{userRunSpan:0},modelInfo:J.modelInfo},Q,"model_tool_activity",Y.execution)),Y.hasResult)Z.push(wZ({...K,id:`${B}_model_tool_${j}_result`,role:"user",content:[{type:"tool_result",tool_use_id:Y.toolCallId,name:Y.toolName,content:s9(Y.output),is_error:Y.isError||void 0}],metadata:{userRunSpan:0}},Q,"model_tool_activity",Y.execution))}Z.push(wZ({...J,metadata:Jc(J.metadata)},Q,"history"))}return Z}class bj{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,Z,Q,X,J,W,j,Y,V,B){this.clientName=Z,this.runtimeAddress=Q,this.host=$,this.prepare=X,this.capabilities=J,this.logger=W,this.telemetry=j,this.distinctId=Y,this.featureFlags=V,this.settings=gU($),this.pendingPrompts=mU($),this.automation=new _3(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=B?new A4({workspaceRoot:B.workspaceRoot??process.cwd(),specs:{cronSpecsDir:B.cronSpecsDir??B.cronDir,scope:AB(B.cronScope),workspaceRoot:B.workspaceRoot},runtimeHandlers:TB({host:$,getExtensionContext:()=>Q9({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:B.dbPath,logger:B.logger,pollIntervalMs:B.pollIntervalMs,claimLeaseSeconds:B.claimLeaseSeconds,globalMaxConcurrency:B.globalMaxConcurrency,watcherDebounceMs:B.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((K)=>{if(K.type!=="ended")return;this.disposeSessionBootstrap(K.payload.sessionId)})}static async create($={}){let Z=D1($.distinctId),Q=o0($.capabilities),X={...$,capabilities:Q,distinctId:Z},J=await fZ(X),W=qB($.automation),j=$.featureFlags||new Y5({provider:new V5,telemetry:$.telemetry,logger:$.logger,context:{distinctId:Z,clientName:$.clientName}}),Y=new bj(J,$.clientName,J.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,Z,j,W?{...W,logger:$.logger}:void 0);if(W&&W.autoStart!==!1)await Y.automation.start();return Y}async disposeSessionBootstrap($){let Z=this.activeSessionBootstraps.get($);if(!Z)return;this.activeSessionBootstraps.delete($),await Promise.resolve(Z.dispose?.())}async start($){let Z=cU($),Q=await this.prepare?.(Z);try{let X=Q?await Q.applyToStartSessionInput(Z):Z,J=await this.host.startSession($J(X,{defaultCapabilities:this.capabilities,withExtensionContext:(W)=>Q9({automationService:this.automationService,automation:this.automation,context:W,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Q)if(await this.host.getSession(J.sessionId))this.activeSessionBootstraps.set(J.sessionId,Q);else await Promise.resolve(Q.dispose?.());return uU({input:X,sessionId:J.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),J}catch(X){throw await Promise.resolve(Q?.dispose?.()),X}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let Z=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(Z.map((Q)=>this.disposeSessionBootstrap(Q)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await kJ(this.host,$);list=async($=200,Z={})=>await this.listHistory({...Z,limit:$});delete=async($)=>{let Z=await this.host.deleteSession($);if(Z)await this.disposeSessionBootstrap($);return Z};update=(...$)=>this.host.updateSession(...$);updateSessionCompactionState=(...$)=>this.host.updateSessionCompactionState(...$);readSessionCompactionState=(...$)=>this.host.readSessionCompactionState(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async readDisplayMessages($){return Sj(await this.host.readSessionMessages($))}readLiveMessages=($)=>this.host.readLiveSessionMessages?this.host.readLiveSessionMessages($):this.host.readSessionMessages($);async restore($){let Z=$.start?$J($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>Q9({automationService:this.automationService,automation:this.automation,context:Q,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:$.sessionId,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restore:$.restore,start:Z})}async compareCheckpoint($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=await this.host.getSession(Z);if(!Q)throw Error(`Session ${Z} not found`);return fj({session:Q,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,Z){return this.host.subscribe($,Z)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()};updateSessionConnection=(...$)=>{return this.host.updateSessionConnection?.(...$)??Promise.resolve()}}import{isAbsolute as Wc,relative as jc,resolve as SZ,sep as Yc}from"node:path";import{createSessionId as Vc,readHubScheduleMode as r_}from"@cline/shared";function a_($,Z){if(typeof Z!=="string"||!Z.trim())return;let Q=SZ($.workspaceRoot,Z);if(!o_($.workspaceRoot,Q))throw Error("schedule cwd is outside the client workspace scope");return Q}function o_($,Z){let Q=jc($,Z);return Q!==".."&&!Q.startsWith(`..${Yc}`)&&!Wc(Q)}function A1($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function n_($,Z,Q){return{version:$.version,requestId:$.requestId??Vc("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class bZ{schedules;constructor($){this.schedules=$}async handleCommand($,Z){try{let Q=this.resolveScope(Z);switch($.command){case"schedule.create":return A1($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{},Q))});case"schedule.list":return A1($,{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,workspaceRoot:Q.workspaceRoot})});case"schedule.get":return A1($,{schedule:this.requireScopedSchedule($,Q)});case"schedule.update":return A1($,{schedule:this.schedules.updateSchedule(this.requireScopedSchedule($,Q).scheduleId,this.toUpdateInput($.payload??{},Q))});case"schedule.delete":return A1($,{deleted:this.schedules.deleteSchedule(this.requireScopedSchedule($,Q).scheduleId)});case"schedule.enable":return A1($,{schedule:this.schedules.resumeSchedule(this.requireScopedSchedule($,Q).scheduleId)});case"schedule.disable":return A1($,{schedule:this.schedules.pauseSchedule(this.requireScopedSchedule($,Q).scheduleId)});case"schedule.trigger":return A1($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(this.requireScopedSchedule($,Q).scheduleId):await this.schedules.triggerScheduleNow(this.requireScopedSchedule($,Q).scheduleId)});case"schedule.list_executions":return A1($,{executions:this.listScopedExecutions($,Q)});case"schedule.stats":return A1($,{stats:this.schedules.getScheduleStats(this.requireScopedSchedule($,Q).scheduleId)});case"schedule.active":{let X=this.scopedScheduleIds(Q);return A1($,{executions:this.schedules.getActiveExecutions().filter((J)=>X.has(J.scheduleId))})}case"schedule.upcoming":{let X=this.scopedScheduleIds(Q);return A1($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0).filter((J)=>X.has(J.scheduleId))})}default:return n_($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Q){return n_($,"schedule_command_failed",Q instanceof Error?Q.message:String(Q))}}resolveScope($){let Z=$?.workspaceContext;if(!$?.clientId||!Z?.workspaceRoot?.trim())throw Error("schedule commands require a registered workspace client");let Q=SZ(Z.workspaceRoot),X=SZ(Z.cwd?.trim()||Q);if(!o_(Q,X))throw Error("client cwd is outside its workspace scope");return{workspaceRoot:Q,cwd:X}}requireScopedSchedule($,Z){let Q=String($.payload?.scheduleId??"").trim(),X=Q?this.schedules.getSchedule(Q):void 0;if(!X||SZ(X.workspaceRoot)!==Z.workspaceRoot)throw Error("schedule does not exist in this workspace");return X}scopedScheduleIds($){return new Set(this.schedules.listSchedules({workspaceRoot:$.workspaceRoot}).map((Z)=>Z.scheduleId))}listScopedExecutions($,Z){let Q=typeof $.payload?.scheduleId==="string"?$.payload.scheduleId.trim():void 0;if(Q)this.requireScopedSchedule($,Z);let X=this.scopedScheduleIds(Z);return this.schedules.listScheduleExecutions({scheduleId:Q,status:typeof $.payload?.status==="string"?$.payload.status:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0}).filter((J)=>X.has(J.scheduleId))}toCreateInput($,Z){let Q=r_($,"yolo"),X=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:X,mode:Q,workspaceRoot:Z.workspaceRoot,cwd:a_(Z,$.cwd)??Z.cwd}}toUpdateInput($,Z){let Q=r_($),X=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:X,...Q===void 0?{}:{mode:Q},workspaceRoot:Z.workspaceRoot,...Object.hasOwn($,"cwd")?{cwd:$.cwd===null?Z.workspaceRoot:a_(Z,$.cwd)??Z.cwd}:{}}}}import{ONE_TIME_SCHEDULE_CRON_PATTERN as kZ,ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY as Bc}from"@cline/shared";function xZ($){return $?new Date($).getTime():void 0}function Kc($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function B5($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.triggerKind==="one_off"?kZ:$.scheduleExpr??"",timezone:$.triggerKind==="schedule"?$.timezone:void 0,prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof Z?.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:xZ($.nextRunAt),lastRunAt:xZ($.lastRunAt),createdBy:typeof Z?.__hubScheduleCreatedBy==="string"?Z.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:Z?.__hubRuntimeOptions&&typeof Z.__hubRuntimeOptions==="object"&&!Array.isArray(Z.__hubRuntimeOptions)?Z.__hubRuntimeOptions:void 0,metadata:Kc($)}}function Gc($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function kj($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:xZ($.startedAt),endedAt:xZ($.completedAt),status:Gc($.status),errorMessage:$.error}}class yZ{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new q4({dbPath:$.dbPath}),this.materializer=new L4({store:this.store}),this.runner=new D4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,eventPublisher:$.eventPublisher,workspaceRoot:"",specs:$.specs,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(this.validateScheduleTiming($.cronPattern,$.timezone,$.metadata,!0),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return B5(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?B5(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>B5(Z))}updateSchedule($,Z){let Q=this.store.getHubSchedule($);if(!Q)return;let X=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot,J=Z.enabled??Q.enabled,W=B5(Q),j=Z.cronPattern??W.cronPattern;if(j.trim()===kZ&&typeof Z.timezone==="string"&&Z.timezone.trim())throw Error("timezone is only supported for recurring schedules");if(this.validateScheduleTiming(j,j.trim()===kZ?void 0:Z.timezone===null?void 0:Z.timezone??W.timezone,Z.metadata??W.metadata,J),J&&!X)throw Error("workspaceRoot is required for enabled schedules");let Y=this.store.updateHubSchedule($,{...Z,scheduleId:$});return Y?B5(Y):void 0}validateScheduleTiming($,Z,Q,X){if($.trim()!==kZ){jF($),UJ(Z);return}if(Z?.trim())throw Error("timezone is only supported for recurring schedules");let J=Q?.[Bc];if(typeof J!=="number"||!Number.isFinite(J)||X&&J<=Date.now())throw Error("runAt must be a future timestamp")}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;await this.runner.tick();let Q=this.store.getRun(Z.runId)??Z;return kj(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),kj(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((J)=>{let W=Z??this.store.getSpec(J.specId);if(!W||W.source!=="hub-schedule")return;return kj(J,W.externalId)}).filter((J)=>{if(!J)return!1;return!$.status||J.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,X=0,J=0,W;for(let j of Z){if(j.status==="success"||j.status==="completed")Q+=1;if(!W&&j.status!=="success"&&j.status!=="completed")W=j;if(j.startedAt&&j.endedAt)J+=j.endedAt-j.startedAt,X+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:X>0?J/X/1000:0,lastFailure:W}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let Z=this.store.getSpec($.specId);if(!Z||Z.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:Z.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:Z.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+Z.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let Z={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(Z).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,X)=>String(Q.nextRunAt).localeCompare(String(X.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:X})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:X}))}}_0();import{realpathSync as yj,statSync as Hc}from"node:fs";import{isAbsolute as t_,relative as Uc,sep as e_}from"node:path";import{ONE_TIME_SCHEDULE_CRON_PATTERN as $z,ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY as Zz}from"@cline/shared";import{z as D0}from"zod";var Fc=D0.enum(["create","update","list","get","pause","resume","delete","run_now"]),Lc=D0.object({provider_id:D0.string().min(1),model_id:D0.string().min(1).optional()}),G5=D0.object({operation:Fc,schedule_id:D0.string().min(1).optional(),schedule_type:D0.enum(["once","recurring"]).optional(),name:D0.string().min(1).optional(),prompt:D0.string().min(1).optional(),run_at:D0.string().datetime({offset:!0}).optional(),cron_pattern:D0.string().min(1).optional(),timezone:D0.string().min(1).nullable().optional(),enabled:D0.boolean().optional(),mode:D0.enum(["act","plan","yolo"]).optional(),system_prompt:D0.string().nullable().optional(),max_iterations:D0.number().int().positive().nullable().optional(),timeout_seconds:D0.number().int().positive().nullable().optional(),max_parallel:D0.number().int().positive().max(32).optional(),tags:D0.array(D0.string().min(1)).optional(),model_selection:Lc.optional(),limit:D0.number().int().positive().max(200).optional()});function Y8($,Z,Q,X){if(!Qz.has(Z.operation))return;a1($.telemetry,{ulid:Q.sessionId??Q.conversationId??Q.agentId,tool:`tasks.scheduled.${Z.operation}`,success:X,agentId:Q.agentId})}var Qz=new Set(["create","update","pause","resume","delete","run_now"]);function B8($,Z){let Q=$?.trim();if(!Q)throw Error(`${Z} is required for this operation`);return Q}function Ij($,Z){try{let Q=yj.native($);if(!Hc(Q).isDirectory())throw Error("not a directory");return Q}catch{throw Error(`${Z} does not resolve to an existing safe path`)}}function Dc($,Z){try{return yj.native($)===yj.native(Z)}catch{return!1}}function Xz($,Z,Q){let X=Uc($,Z);if(X===".."||X.startsWith(`..${e_}`)||t_(X))throw Error(`${Q} is outside the workspace scope`)}function Jz($,Z,Q){return Ij(t_(Z)?Z:`${$}${e_}${Z}`,Q)}function _c($){let Z=Ij($.workspaceRoot,"workspaceRoot"),Q=$.cwd?Jz(Z,$.cwd,"cwd"):Z;return Xz(Z,Q,"cwd"),{...$,workspaceRoot:Z,cwd:Q}}function V8($,Z){if(!$)throw Error("schedule does not exist");if(!Dc($.workspaceRoot,Z.workspaceRoot))throw Error("schedule is outside this session's workspace scope");let Q=Ij($.workspaceRoot,"schedule workspaceRoot");if($.cwd){let X=Jz(Q,$.cwd,"schedule cwd");Xz(Q,X,"schedule cwd")}}function s_($){if(!$)return;return{providerId:$.provider_id.trim(),modelId:$.model_id?.trim()||void 0}}function xj($){if(!$)return;return[...new Set($.map((Z)=>Z.trim()).filter(Boolean))]}function Wz($){let Z=Date.parse(B8($,"run_at"));if(!Number.isFinite(Z))throw Error("run_at must be an ISO timestamp");if(Z<=Date.now())throw Error("run_at must be in the future");return Z}function zc($){if($.schedule_type==="once"){if($.cron_pattern)throw Error("cron_pattern cannot be used with a one-time schedule");if($.timezone)throw Error("timezone is encoded in run_at for a one-time schedule");return{cronPattern:$z,metadata:{[Zz]:Wz($.run_at)}}}if($.schedule_type==="recurring"){if($.run_at)throw Error("run_at cannot be used with a recurring schedule");return{cronPattern:B8($.cron_pattern,"cron_pattern"),timezone:$.timezone?.trim()||void 0}}throw Error("schedule_type is required for create")}function Oc($){if($.run_at&&$.cron_pattern)throw Error("run_at and cron_pattern cannot be updated together");if($.schedule_type==="once"||$.run_at){if($.cron_pattern)throw Error("cron_pattern cannot be used with a one-time schedule");if($.timezone)throw Error("timezone is encoded in run_at for a one-time schedule");return{cronPattern:$z,timezone:null,metadata:{[Zz]:Wz($.run_at)}}}if($.schedule_type==="recurring"||$.cron_pattern)return{cronPattern:B8($.cron_pattern,"cron_pattern"),timezone:$.timezone===null?null:$.timezone?.trim()||void 0};return{timezone:$.timezone===null?null:$.timezone?.trim()||void 0}}function K5($){return B8($.schedule_id,"schedule_id")}async function hj($,Z,Q){let X=G5.safeParse(Z);if(!X.success)return{ok:!1,error:{code:"invalid_schedule_input",message:X.error.issues[0]?.message??"Invalid schedule input"}};let J=X.data;try{if(!Q.sessionId)throw Error("tasks requires a Hub session");let W=await $.resolveSessionDefaults(Q.sessionId);if(!W?.workspaceRoot.trim())throw Error("tasks could not resolve the current workspace");let j=_c(W);if(Qz.has(J.operation)&&!j.interactive)throw Error("schedule mutations require an interactive user session");switch(J.operation){case"create":{let Y=$.schedules.createSchedule({name:B8(J.name,"name"),...zc(J),prompt:B8(J.prompt,"prompt"),workspaceRoot:j.workspaceRoot,cwd:j.cwd,modelSelection:s_(J.model_selection)??j.modelSelection,enabled:J.enabled,mode:J.mode??"yolo",systemPrompt:J.system_prompt??void 0,maxIterations:J.max_iterations??void 0,timeoutSeconds:J.timeout_seconds??void 0,maxParallel:J.max_parallel??1,createdBy:`agent:${Q.agentId}`,tags:xj(J.tags)});return $.publish?.("schedule.created",{schedule:Y},Q.sessionId),Y8($,J,Q,!0),{ok:!0,operation:J.operation,schedule:Y}}case"update":{let Y=K5(J);V8($.schedules.getSchedule(Y),j);let V=$.schedules.updateSchedule(Y,{scheduleId:Y,...Oc(J),name:J.name?.trim()||void 0,prompt:J.prompt?.trim()||void 0,modelSelection:s_(J.model_selection),enabled:J.enabled,mode:J.mode,systemPrompt:J.system_prompt,maxIterations:J.max_iterations,timeoutSeconds:J.timeout_seconds,maxParallel:J.max_parallel,tags:xj(J.tags)});if(!V)throw Error("schedule does not exist");return $.publish?.("schedule.updated",{schedule:V},Q.sessionId),Y8($,J,Q,!0),{ok:!0,operation:J.operation,schedule:V}}case"list":{let Y=$.schedules.listSchedules({enabled:J.enabled,tags:xj(J.tags),workspaceRoot:j.workspaceRoot,limit:J.limit??50}).filter((V)=>{try{return V8(V,j),!0}catch{return!1}}).slice(0,J.limit??50);return{ok:!0,operation:J.operation,schedules:Y}}case"get":{let Y=$.schedules.getSchedule(K5(J));return V8(Y,j),{ok:!0,operation:J.operation,schedule:Y}}case"pause":case"resume":{let Y=K5(J);V8($.schedules.getSchedule(Y),j);let V=J.operation==="pause"?$.schedules.pauseSchedule(Y):$.schedules.resumeSchedule(Y);if(!V)throw Error("schedule does not exist");return $.publish?.("schedule.updated",{schedule:V},Q.sessionId),Y8($,J,Q,!0),{ok:!0,operation:J.operation,schedule:V}}case"delete":{let Y=K5(J);V8($.schedules.getSchedule(Y),j);let V=$.schedules.deleteSchedule(Y);if(!V)throw Error("schedule does not exist");return $.publish?.("schedule.deleted",{deleted:V,scheduleId:Y},Q.sessionId),Y8($,J,Q,!0),{ok:!0,operation:J.operation,deleted:V}}case"run_now":{let Y=K5(J);V8($.schedules.getSchedule(Y),j);let V=$.schedules.triggerScheduleNowDetached(Y);if(!V)throw Error("schedule does not exist");return $.publish?.("schedule.triggered",{execution:V},Q.sessionId),Y8($,J,Q,!0),{ok:!0,operation:J.operation,execution:V}}}}catch(W){return Y8($,J,Q,!1),{ok:!1,operation:J.operation,error:{code:"schedule_operation_failed",message:W instanceof Error?W.message:String(W)}}}}gZ();import{createTool as ic,zodToJsonSchema as rc}from"@cline/shared";import{z as G8}from"zod";_0();import{resolve as Vz}from"node:path";import{z as o}from"zod";var Bz=o.enum(["suggestion","follow-up","todo","handoff","idea","reminder"]),uc=o.enum(["pending_approval","approved","in_progress","completed","failed","cancelled","expired"]),Kz=o.union([o.literal(0),o.literal(1),o.literal(2),o.literal(3),o.literal(4),o.literal(5)]),dc=o.object({provider_id:o.string().min(1),model_id:o.string().min(1).optional()}),mZ=o.object({operation:o.enum(["create","update","list","get"]),task_id:o.string().min(1).optional(),expected_revision:o.number().int().positive().optional(),type:Bz.optional(),title:o.string().min(1).optional(),description:o.string().nullable().optional(),instructions:o.string().min(1).optional(),scope:o.enum(["workspace","global"]).optional(),workspace_root:o.string().min(1).nullable().optional(),cwd:o.string().min(1).nullable().optional(),resource_paths:o.array(o.string().min(1)).optional(),priority:Kz.optional(),assignee:o.string().min(1).nullable().optional(),model_selection:dc.nullable().optional(),mode:o.enum(["act","plan","yolo"]).nullable().optional(),system_prompt:o.string().nullable().optional(),max_iterations:o.number().int().positive().nullable().optional(),timeout_seconds:o.number().int().positive().nullable().optional(),available_at:o.string().datetime().optional(),expires_at:o.string().datetime().optional(),automation_eligible:o.boolean().optional(),statuses:o.array(uc).optional(),types:o.array(Bz).optional(),priorities:o.array(Kz).optional(),limit:o.number().int().positive().max(500).optional()}),lc=new Set(["create","update"]);function cj($,Z,Q,X){if(!lc.has(Z.operation))return;a1($.telemetry,{ulid:Q.sessionId??Q.conversationId??Q.agentId,tool:`tasks.todo.${Z.operation}`,success:X,agentId:Q.agentId})}function K8($,Z){let Q=$?.trim();if(!Q)throw Error(`${Z} is required for this operation`);return Q}function Gz($){if($===void 0||$===null)return $;return{providerId:$.provider_id,modelId:$.model_id}}function Uz($,Z){return Vz($)===Vz(Z)}function Hz($,Z){if(!$)throw Error("task does not exist");if(Z.workspaceRoot){if($.scope!=="workspace"||!$.workspaceRoot||!Uz($.workspaceRoot,Z.workspaceRoot))throw Error("task is outside this session's workspace scope");return}if($.scope!=="global")throw Error("task is outside this session's global scope")}function pc($,Z){let Q=Z.workspaceRoot?"workspace":"global";if($.scope&&$.scope!==Q)throw Error(`this session can only manage ${Q} tasks`);if($.workspace_root!==void 0){if(!Z.workspaceRoot||$.workspace_root===null||!Uz($.workspace_root,Z.workspaceRoot))throw Error(`this session can only manage ${Q} tasks`)}return Q}async function Fz($,Z,Q){let X=mZ.safeParse(Z);if(!X.success)return{ok:!1,error:{code:"invalid_task_input",message:X.error.issues[0]?.message??"Invalid task input"}};let J=X.data,W={kind:"agent",id:Q.agentId,agentId:Q.agentId,sessionId:Q.sessionId};try{if(!Q.sessionId)throw Error("tasks requires a Hub session");let j=await $.resolveSessionDefaults(Q.sessionId);if(!j)throw Error("tasks could not resolve the current session");let Y=pc(J,j);switch(J.operation){case"create":{let V={type:K8(J.type,"type"),title:K8(J.title,"title"),description:J.description??void 0,instructions:K8(J.instructions,"instructions"),scope:Y,workspaceRoot:j.workspaceRoot,cwd:Y==="workspace"?(J.cwd??j.cwd)?.trim()||void 0:void 0,resourcePaths:J.resource_paths,priority:J.priority,assignee:J.assignee??void 0,modelSelection:Gz(J.model_selection)??j.modelSelection,mode:J.mode??void 0,systemPrompt:J.system_prompt??void 0,maxIterations:J.max_iterations??void 0,timeoutSeconds:J.timeout_seconds??void 0,availableAt:J.available_at,expiresAt:K8(J.expires_at,"expires_at"),automationEligible:J.automation_eligible,createdBy:W,originSessionId:Q.sessionId,originTaskId:j.originTaskId},B={ok:!0,operation:J.operation,task:await $.manager.createTask(V)};return cj($,J,Q,!0),B}case"update":{let V=K8(J.task_id,"task_id");if(Hz(await $.manager.getTask(V),j),!J.expected_revision)throw Error("expected_revision is required for update");let B={ok:!0,operation:J.operation,task:await $.manager.updateTask({taskId:V,expectedRevision:J.expected_revision,type:J.type,title:J.title,description:J.description,instructions:J.instructions,scope:Y,workspaceRoot:j.workspaceRoot??null,cwd:J.cwd,resourcePaths:J.resource_paths,priority:J.priority,assignee:J.assignee,modelSelection:Gz(J.model_selection),mode:J.mode,systemPrompt:J.system_prompt,maxIterations:J.max_iterations,timeoutSeconds:J.timeout_seconds,availableAt:J.available_at,expiresAt:J.expires_at,automationEligible:J.automation_eligible,updatedBy:W})};return cj($,J,Q,!0),B}case"list":{let V={statuses:J.statuses,types:J.types,scope:Y,workspaceRoot:j.workspaceRoot,priorities:J.priorities,automationEligible:J.automation_eligible,limit:J.limit};return{ok:!0,operation:J.operation,tasks:await $.manager.listTasks(V)}}case"get":{let V=await $.manager.getTask(K8(J.task_id,"task_id"));return Hz(V,j),{ok:!0,operation:J.operation,task:V}}}}catch(j){return cj($,J,Q,!1),{ok:!1,operation:J.operation,error:{code:"task_operation_failed",message:j instanceof Error?j.message:String(j)}}}}var L5="tasks",Lz='# Tasks\n\nUse the `tasks` tool to manage durable Todo items and explicitly requested scheduled agent work.\n\n- Use `kind: "todo"` for meaningful follow-ups, handoffs, ideas, reminders, and other work that should remain visible after this session. This includes useful work you identify and suggest proactively. Agent-created Todos require user approval; Todos created directly by the user are approved immediately. Todo `available_at` controls availability in the list; it never schedules execution.\n- Use `kind: "scheduled"` only when the user explicitly asks Cline to execute work once at a future time or on a recurrence. One-time schedules require an exact future ISO 8601 `run_at` with an offset or Z. Recurring schedules require a five-field `cron_pattern` and may include an IANA `timezone`.\n- "Remind me" is ambiguous: ask whether the user wants a reviewed Todo note or an agent to execute work at that time when intent is unclear.\n- Never create both kinds for the same request unless the user explicitly requests both. Check existing items before creating a likely duplicate.\n- Todo instructions and scheduled prompts must be self-contained. Include the goal, constraints, relevant project context, and expected output.\n- Never approve or start a Todo yourself. Only mutate schedules from an interactive user session, and only update, pause, resume, delete, or run one immediately when the user asks.',ac=mZ.extend({kind:G8.literal("todo")}).strict(),nc=G5.extend({kind:G8.literal("scheduled")}).strict(),Dz=G8.discriminatedUnion("kind",[ac,nc]),oc=G8.object({...G5.shape,...mZ.shape,kind:G8.enum(["todo","scheduled"]),operation:G8.enum(["create","update","list","get","pause","resume","delete","run_now"])}).strict();function uj($){return ic({name:L5,description:'Create and manage reviewed Todo items or explicitly requested scheduled agent work. Use kind "todo" for durable Agenda items that require user or automation approval. Use kind "scheduled" for one-time or recurring autonomous execution. Todo available_at is not an execution timer; schedules use run_at or cron_pattern.',inputSchema:rc(oc),retryable:!1,maxRetries:0,execute:async(Z,Q)=>{let X=Dz.safeParse(Z);if(!X.success)return{ok:!1,kind:typeof Z==="object"&&Z!==null&&"kind"in Z&&(Z.kind==="todo"||Z.kind==="scheduled")?Z.kind:void 0,error:{code:"invalid_tasks_input",message:X.error.issues[0]?.message??"Invalid tasks input"}};if(X.data.kind==="todo")return{kind:"todo",...await Fz($.todo,X.data,Q)};return{kind:"scheduled",...await hj($.scheduled,X.data,Q)}}})}function dj(){return{name:"hub-task-guidance",manifest:{capabilities:["rules"]},setup:($)=>{$.registerRule({id:"hub:task-guidance",content:Lz,whenToolAvailable:L5})}}}import{resolveClineBuildEnv as sc}from"@cline/shared";function tc($,Z){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Q?`Failed to connect to hub at ${Z} (${Q} event before socket open).`:`Failed to connect to hub at ${Z}.`)}var ec="cline-hub-auth.";function $u($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function Zu($,Z){let Q=new URL($),X=new URL(Z);return Q.search="",Q.hash="",X.search="",X.hash="",Q.toString()===X.toString()}function _z(){return sc()==="production"?v1():P1()}async function Qu($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=_z(),X=await x0(Q.discoveryPath);if(X?.url&&Zu($.toString(),X.url))return X.authToken;return}async function Xu($={}){let Z=k2($);if(!$u($)){let Q=_z(),X=await x0(Q.discoveryPath);if(X?.url)return X.url}return W$(Z.host,Z.port,Z.pathname)}async function zz($){return await new Promise((Z,Q)=>{(async()=>{let X=new URL($),J=await Qu(X);X.hash="";let W=new WebSocket(X.toString(),J?[`${ec}${J}`]:void 0),j=new Map,Y=0;W.addEventListener("open",()=>{Z({send(V){let B=V.requestId??`hub-client-${++Y}`;return new Promise((K,G)=>{j.set(B,{resolve:K,reject:G});let H={kind:"command",envelope:{...V,requestId:B}};W.send(JSON.stringify(H))})},close(){W.close()}})}),W.addEventListener("message",(V)=>{let B=JSON.parse(String(V.data));if(B.kind==="reply"&&B.envelope.requestId){let K=j.get(B.envelope.requestId);if(K)j.delete(B.envelope.requestId),K.resolve(B.envelope)}}),W.addEventListener("close",()=>{for(let V of j.values())V.reject(Error("Hub connection closed"));j.clear()}),W.addEventListener("error",(V)=>{Q(tc(V,$))})})().catch(Q)})}async function uQ0($){try{return(await zz($)).close(),!0}catch{return!1}}async function dQ0($,Z){let Q=await Xu($),X=await zz(Q);try{return await X.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{X.close()}}import{existsSync as Ju}from"node:fs";import{isHubDaemonProcess as Wu,resolveClineBuildEnv as ju}from"@cline/shared";var Yu=1e4,Vu="CLINE_HUB_BUILD_WATCH_INTERVAL_MS";function Bu(){let $=Number(process.env[Vu]);return Number.isFinite($)&&$>0?$:Yu}function Ku(){return ju()==="production"?v1():P1()}function Gu($){try{return Ju(`${$}.lock`)}catch{return!1}}async function Hu(){let $=Ku();if(Gu($.discoveryPath))return;let Z=await x0($.discoveryPath).catch(()=>{return});if(!Z?.url)return;let Q=await J$(Z.url).catch(()=>{return});if(!Q?.url)return;let X=h1(),J=w4(Q,X);if(J.compatible)return;let W=(j)=>({url:Q.url,reason:j,hubBuildId:Q.buildId,hubCoreVersion:Q.coreVersion,expectedBuildId:X});if(J.reason==="unsupported_protocol")return W("unsupported_protocol");if(vJ(gJ(),Q)>0)return W("outdated_hub");return W("build_mismatch")}function nQ0($){if(Wu()||process.env.CLINE_HUB_PORT?.trim())return()=>{};let Z=$.intervalMs??Bu(),Q,X,J=!1,W=setInterval(()=>{if(J)return;J=!0,Hu().then((j)=>{if(!j){Q=void 0,X=void 0;return}let Y=`${j.reason}:${j.hubBuildId??""}`;if(Y===Q)return;if(j.reason==="outdated_hub"&&X!==Y){X=Y;return}X=void 0,Q=Y,$.onMismatch(j)}).catch(()=>{return}).finally(()=>{J=!1})},Z);return W.unref?.(),()=>{clearInterval(W)}}function lj($){return $?JSON.parse(JSON.stringify($)):{}}function cZ($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?lj(Z.metadata):void 0;return{sessionId:typeof Z.sessionId==="string"?Z.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,status:typeof Z.status==="string"?Z.status:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function Oz($,Z){return $.error?.message??`hub command failed: ${Z}`}function Uu($){let Z=lj($);if(typeof Z.error==="string"&&Z.error.trim())return{...Z,error:Z.error.trim()};let Q=Z.result&&typeof Z.result==="object"?Z.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...Z,error:Q.text.trim()};let X=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof X?.message==="string"&&X.message.trim())return{...Z,error:X.message.trim()};return Z}function Nz($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function Fu($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error("hub checkpoint restore returned no checkpoint");let Q=Z;if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Q}function Lu($){let Z=lj($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||Nz(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||Nz(Z)||"",eventType:"schedule.execution.failed",payload:Z};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:Z};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:Z};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:Z};case"assistant.media":return{sessionId:Q,eventType:"runtime.chat.media",payload:Z};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:Z};case"session.notice":return{sessionId:Q,eventType:"runtime.chat.notice",payload:Z};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:Z};case"tool.updated":return{sessionId:Q,eventType:"runtime.chat.tool_call_update",payload:Z};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:Z};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:Z};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:Z};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:Uu($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class Du{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new j$({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()}async taskCommand($,Z){return await this.ensureMetadataApplied(),(await this.client.command($,Z)).payload??{}}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession($){await this.ensureMetadataApplied();let Z=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),Q=cZ(Z.payload);if(!Q?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}}}async sendRuntimeSession($,Z,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:Z.prompt,mode:Z.config.mode,attachments:Z.attachments,delivery:Z.delivery,timeoutSeconds:Z.config.timeoutSeconds},$,Q)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(I$(Q))return;throw Q}return cZ(Z.payload)}async readMessages($){let Z=$.trim();if(!Z)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw Error(Oz(Q,"session.messages"));let X=Q.payload?.messages;return Array.isArray(X)?X:[]}async restore($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let X=$.config,J=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...X?{workspaceRoot:X.workspaceRoot,cwd:X.cwd,sessionConfig:{providerId:X.provider,modelId:X.model,apiKey:X.apiKey,cwd:X.cwd??X.workspaceRoot,workspaceRoot:X.workspaceRoot,systemPrompt:X.systemPrompt??"",mode:X.mode??"act",rules:X.rules,maxIterations:X.maxIterations,enableTools:X.enableTools,enableSpawnAgent:X.enableSpawn!==!1,enableAgentTeams:X.enableTeams!==!1,disableMcpSettingsTools:X.disableMcpSettingsTools,missionLogIntervalSteps:X.missionStepInterval,missionLogIntervalMs:X.missionTimeIntervalMs},metadata:{source:X.source??"cli",provider:X.provider,model:X.model,enableTools:X.enableTools,enableSpawn:X.enableSpawn,enableTeams:X.enableTeams,prompt:void 0,interactive:X.interactive!==!1},runtimeOptions:{mode:X.mode,systemPrompt:X.systemPrompt,maxIterations:X.maxIterations,enableTools:X.enableTools,enableSpawn:X.enableSpawn,enableTeams:X.enableTeams,autoApproveTools:X.autoApproveTools,configExtensions:X.configExtensions},modelSelection:{provider:X.provider,model:X.model,apiKey:X.apiKey},toolPolicies:X.toolPolicies}:{}},Z);if(!J.ok)throw Error(Oz(J,"session.restore"));let W=cZ(J.payload);if(Q&&!W?.sessionId)throw Error("hub checkpoint restore returned no session id");let j=Array.isArray(J.payload?.messages)?J.payload.messages:void 0,Y=Fu(J.payload);return{sessionId:W?.sessionId,startResult:W?.sessionId?{sessionId:W.sessionId,manifestPath:"",messagesPath:W.messagesPath??""}:void 0,...j?{messages:j}:{},checkpoint:Y}}async listSessions($){await this.ensureMetadataApplied();let Z=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(Z.payload?.sessions)?Z.payload?.sessions:[]).map((X)=>cZ({session:X})).filter((X)=>Boolean(X?.sessionId))}async deleteSession($,Z=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:Z})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,Z){let Q=new Set(($.sessionIds??[]).map((J)=>J.trim()).filter(Boolean)),X=this.client.subscribe((J)=>{let W=Lu(J);if(!W)return;if(Q.size>0&&!Q.has(W.sessionId))return;Z.onEvent?.(W)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),X}streamTeamProgress($,Z){let Q=this.client.subscribe((X)=>{if(X.event!=="team.progress"||!X.payload)return;Z.onProjection?.(X.payload)});return this.ensureMetadataApplied().catch((X)=>{Z.onError?.(X instanceof Error?X:Error(String(X)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list");return Array.isArray(Z.payload?.schedules)?Z.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,Z){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...Z})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,Z){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:Z});return Array.isArray(Q.payload?.executions)?Q.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(Z.payload?.upcoming)?Z.payload?.upcoming:[]}async createTask($){return(await this.taskCommand("task.create",$)).task}async listTasks($={}){let Z=await this.taskCommand("task.list",$);return Array.isArray(Z.tasks)?Z.tasks:[]}async getTask($){return(await this.taskCommand("task.get",{taskId:$})).task}async updateTask($){return(await this.taskCommand("task.update",$)).task}async approveTask($,Z){return(await this.taskCommand("task.approve",{taskId:$,expectedRevision:Z})).task}async cancelTask($,Z,Q){return(await this.taskCommand("task.cancel",{taskId:$,reason:Q,expectedRevision:Z})).task}async runTask($,Z){return await this.taskCommand("task.run",{taskId:$,expectedRevision:Z})}async getTaskAutomation(){return(await this.taskCommand("task.automation.get",{})).policy}async setTaskAutomation($){return(await this.taskCommand("task.automation.set",{policy:$})).policy}}class _u{client;constructor($){this.client=new j$({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let Z=await this.client.command("session.list",{limit:$});return Array.isArray(Z.payload?.sessions)?Z.payload.sessions:[]}async toggleSetting($){let Z=await this.client.command("settings.toggle",$);if(!Z.ok)throw Error(Z.error?.message??"settings.toggle failed");return Z.payload}subscribeUI($){return this.client.subscribe((Z)=>{switch(Z.event){case"ui.notify":$.onNotify?.(Z.payload);break;case"ui.show_window":$.onShowWindow?.(Z.payload);break;case"hub.client.registered":$.onClientRegistered?.(Z.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(Z.payload??{});break;case"session.created":$.onSessionCreated?.(Z.payload??{});break;case"session.updated":$.onSessionUpdated?.(Z.payload??{});break;case"session.detached":$.onSessionDetached?.(Z.payload??{});break}})}}import{normalizeProviderId as zu}from"@cline/llms";function Ou($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function Nu($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function V30($={}){let Z=async(X)=>X,Q=new s$({sessionService:new r$(new p$),capabilities:{toolExecutors:{submit:Z}},fetch:$.fetch,telemetry:$.telemetry});return{async startSession(X){let J=(X.cwd?.trim()||X.workspaceRoot).trim(),W=await Q.startSession({source:Z0.CORE,mode:"automation",sessionMetadata:k0(void 0,{mode:"automation",trigger:X.source}),interactive:!1,config:{providerId:zu(X.provider),modelId:X.model,apiKey:X.apiKey?.trim()||void 0,cwd:J,workspaceRoot:X.workspaceRoot,systemPrompt:X.systemPrompt??"",mode:Nu(X),maxIterations:X.maxIterations,enableTools:X.enableTools!==!1,enableSpawnAgent:X.enableSpawn!==!1,enableAgentTeams:X.enableTeams!==!1,disableMcpSettingsTools:X.disableMcpSettingsTools,missionLogIntervalSteps:X.missionStepInterval,missionLogIntervalMs:X.missionTimeIntervalMs},toolPolicies:X.toolPolicies??{"*":{autoApprove:X.autoApproveTools!==!1}},localRuntime:{configExtensions:X.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(X,J){let W=await Q.runTurn({sessionId:X,prompt:J.prompt,userImages:J.attachments?.userImages,userFiles:J.attachments?.userFiles?.map((j)=>j.content)});if(!W)throw Error("local hub schedule runtime returned no turn result");return{result:Ou(W)}},async abortSession(X){return await Q.abort(X,Error("hub schedule abort")),{applied:!0}},async stopSession(X){return await Q.stopSession(X),{applied:!0}}}}import{resolveClineBuildEnv as zN}from"@cline/shared";function qu($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
793
- `).trim()||void 0}var qz=120,pj="...";function ij($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=qz)return Z;let Q=qz-Buffer.byteLength(pj,"utf8");if(Q<=0)return pj;let X="";for(let J of Z){if(Buffer.byteLength(X+J,"utf8")>Q)break;X+=J}return`${X}${pj}`}async function Az($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await c$(Q)].reverse().find((V)=>V.role==="assistant"),W=J?qu(J.content):void 0,j=$?.workspaceRoot?.trim()||"workspace",Y=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():j;return{title:`Task completed (${Z})`,body:ij(W&&W.length>0?W:Y.length>0?Y:j),severity:"info"}}import{resolve as hl}from"node:path";import{CLINE_DEFAULT_MODEL_ID as vl,captureSdkError as eZ,createSessionId as MY,HUB_CLIENT_TOOL_APPROVAL_CAPABILITY as gl}from"@cline/shared";import{isChatWorkspacePath as ml}from"@cline/shared/storage";import{existsSync as WY,realpathSync as ru,statSync as au,watch as nu}from"node:fs";import{relative as ou}from"node:path";import{createSessionId as lz,noopBasicLogger as su}from"@cline/shared";import{existsSync as f1,linkSync as bu,lstatSync as sj,mkdirSync as ku,readdirSync as xu,readFileSync as yu,realpathSync as bz,renameSync as Iu,rmSync as kz,writeFileSync as hu}from"node:fs";import{basename as vu,dirname as gu,isAbsolute as ej,join as tj,relative as yz,resolve as xz,sep as mu}from"node:path";import{resolveTaskSpecsDir as cu}from"@cline/shared/storage";import{createHash as Mu}from"node:crypto";import fz from"yaml";import{existsSync as rj,realpathSync as Tz}from"node:fs";import{dirname as Au,isAbsolute as aj,relative as nj,resolve as Mz,sep as Tu}from"node:path";function uZ($){return $?.trim()||void 0}function Rz($,Z){let Q=nj($,Z);return Q===""||!Q.startsWith(`..${Tu}`)&&Q!==".."&&!aj(Q)}function Eu($,Z,Q){if(!rj($))return;let X=Tz($),J=Z;while(!rj(J)){let j=Au(J);if(j===J)break;J=j}if(!rj(J))return;let W=Tz(J);if(!Rz(X,W))throw Error(`${Q} escapes the workspace through a symbolic link`)}function Ez($,Z,Q,X){let J=Mz($,aj(Z)?nj($,Z):Z);if(!Rz($,J)||!X&&J===$)throw Error(`${Q} must stay within the task workspace`);return Eu($,J,Q),J}function t$($){let Z=$.resourcePaths??[];if($.scope==="global"){if(uZ($.workspaceRoot))throw Error("global tasks cannot set workspaceRoot");if(uZ($.cwd))throw Error("global tasks cannot set cwd");if(Z.some((V)=>V.trim()))throw Error("global tasks cannot reference workspace files");return{resourcePaths:[]}}let Q=uZ($.workspaceRoot);if(!Q)throw Error("workspaceRoot is required for workspace tasks");let X=Mz(Q),J=uZ($.cwd),W=J?Ez(X,J,"cwd",!0):void 0,j=[],Y=new Set;for(let V of Z){let B=V.trim();if(!B)throw Error("resourcePaths must contain only non-empty paths");if(aj(B)||B.split(/[\\/]+/u).includes(".."))throw Error("resourcePaths must be workspace-relative without '..'");let K=Ez(X,B,"resourcePaths",!1),G=nj(X,K);if(!Y.has(G))Y.add(G),j.push(G)}return{workspaceRoot:X,cwd:W,resourcePaths:j}}var Ru=new Set(["suggestion","follow-up","todo","handoff","idea","reminder"]),Cu=new Set(["status","instructions","revision","approvedRevision","createdBy","updatedBy","currentRunId","lastRunId","lastSessionId","error","createdAt","updatedAt","completedAt","archivedAt"]),Pu=new Set(["taskId","type","priority","title","description","availableAt","expiresAt","cwd","resourcePaths","assignee","modelSelection","mode","systemPrompt","maxIterations","timeoutSeconds","automationEligible"]);function fu($){let Z=$.replace(/\r\n/g,`
790
+ WHERE team_name = ? AND status IN ('queued', 'running')`,[Z,J,Q]),X.map((W)=>W.run_id)}handleTeamEvent($,Z){this.appendTeamEvent($,Z.type,Z)}}function P_($={}){try{let Z=new Q5($);return Z.init(),Z}catch{let Z=new AZ({teamDir:$.teamDir});return Z.init(),Z}}function TZ($,Z){return jm($,Z)}function Bm($,Z){let Q=Z?.["*"]??{},X=Z?.[$]??{};return{...Q,...X}.enabled!==!1}function Km($,Z){return $.filter((Q)=>Bm(Q.name,Z))}function _j($,Z){return T$(Km($,Z))}var Gm={apply_diff:"editor",attempt_completion:"submit_and_exit",bash:"run_commands",execute_command:"run_commands",list_code_definition_names:"search_codebase",list_files:"run_commands",read_file:"read_files",replace_in_file:"editor",search_files:"search_codebase",use_skill:"skills",write_to_file:"editor"};function Hm($){let Z=$.trim().toLowerCase();return Gm[Z]??Z}function Um($,Z){if(Z.tools===void 0)return $;let Q=new Set(Z.tools.map(Hm));if(Z.skills!==void 0)Q.add("skills");return $.filter((X)=>Q.has(X.name))}function w_(){return`team-${Vm(5)}`}function EZ($,Z,Q,X,J,W,j,Y,V,B){let K=k1[S$({mode:Q})],G=d8(Z,X,Q,J??u8);return _j(s8({cwd:$,telemetry:V,executorOptions:{bash:{executionController:B}},...K,enableSkills:!!j,...G,executors:{...j?{skills:j}:{},...Y??{}}}),W)}function Fm($){return EZ($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,Lm,$.toolExecutors).some((Z)=>Z.name==="skills")}var Lm=async()=>"";async function Dm($){let Z=V0();if(!E2({filePath:Z}))return{tools:[]};let Q=new B4({clientFactory:V4({settingsPath:Z})}),X;try{X=await J4(Q,{filePath:Z})}catch(Y){await Q.dispose().catch(()=>{});let V=Y instanceof Error?Y.message:String(Y);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${V}`),{tools:[]}}let J=X.filter((Y)=>Y.disabled!==!0),W=await Promise.allSettled(J.map((Y)=>N7({serverName:Y.name,provider:Q,timeoutMs:Ym(Y.timeoutSeconds)*1000}))),j=[];for(let[Y,V]of W.entries())if(V.status==="fulfilled")j.push(...V.value);else{let B=V.reason instanceof Error?V.reason.message:String(V.reason);$?.log(`[mcp] Failed to load tools from MCP server "${J[Y].name}", skipping: ${B}`)}return{tools:j,shutdown:async()=>{await Q.dispose()}}}function _m($,Z){if(!$)return;for(let Q of $.getTeammateIds())try{$.shutdownTeammate(Q,Z)}catch{}}function zm($){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 Om($){let Z=k1[S$({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??Z.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??Z.enableAgentTeams??!0,disableMcpSettingsTools:$.disableMcpSettingsTools===!0,yolo:$.yolo===!0,missionLogIntervalSteps:typeof $.missionLogIntervalSteps==="number"&&Number.isFinite($.missionLogIntervalSteps)?$.missionLogIntervalSteps:3,missionLogIntervalMs:typeof $.missionLogIntervalMs==="number"&&Number.isFinite($.missionLogIntervalMs)?$.missionLogIntervalMs:120000}}class MZ{teamRuntimeEntries=new Map;async build($){let{config:Z,hooks:Q,extensions:X,logger:J,telemetry:W,createSpawnTool:j,onTeamRestored:Y,userInstructionService:V,configExtensions:B,toolExecutors:K}=$,G=$.onTeamEvent??(()=>{}),H=Om(Z),U=[];if(H.enableTools&&E8("web_search")&&f_({providerId:Z.providerId,modelId:Z.modelId},"web_search"))U.push({name:"web_search"});if(H.enableTools&&f_({providerId:Z.providerId,modelId:Z.modelId},"image_generation"))U.push({name:"image_generation",outputFormat:"png"});let F=Z.workspaceRoot??Z.cwd,L=$.toolPolicies??Z.toolPolicies,D=s1(),z=[],_=Z.teamName?.trim()||w_(),O=Z.sessionId?.trim()||_,A=H.enableSpawnAgent?p7({workspaceRoot:F}):{configs:[],errors:[]},q=A.configs.some((a)=>a.skills!==void 0),N=TZ(B,"rules"),T=TZ(B,"skills"),M=T||q,d=TZ(B,"workflows"),b=TZ(B,"plugins"),S=N||T||d,E=!1,I=Boolean(V),P=V,i;for(let a of A.errors)(J??Z.logger)?.log?.(`[agents] Failed to load agent config at ${a.path}: ${a.error.message}`);if(!P&&(S||q))P=b6({skills:M?{workspacePath:F,includePluginSkills:b,pluginSkillDirectories:b?$.pluginSkillDirectories:void 0,pluginPaths:Z.pluginPaths,cwd:Z.cwd}:{workspacePath:F},rules:{workspacePath:Z.cwd},workflows:{workspacePath:Z.cwd}});if(P)await P.start().catch(()=>{});let w=H.enableTools&&T&&Boolean(P)&&P?.hasConfiguredSkills(Z.skills)===!0&&Fm({cwd:Z.cwd,providerId:Z.providerId,mode:H.mode,modelId:Z.modelId,toolRoutingRules:Z.toolRoutingRules,toolPolicies:L,toolExecutors:K}),k=P&&S?P.createExtension({includeRules:N,includeSkills:T,includeWorkflows:d,registerSkillsTool:w,allowedSkillNames:Z.skills}):void 0,m=H.mode==="plan"&&H.enableTools?JX({telemetry:W??Z.telemetry}):void 0,t=[k,m].filter((a)=>a!==void 0),y0=t.length>0?[...X??Z.extensions??[],...t]:X??Z.extensions;if(H.enableTools){if(z.push(...EZ(Z.cwd,Z.providerId,H.mode,Z.modelId,Z.toolRoutingRules,L,void 0,K,W??Z.telemetry,$.runCommandExecutionController)),!H.disableMcpSettingsTools){let a=await Dm(Z.logger);z.push(...a.tools),i=a.shutdown}}let Y0,X1=H.enableAgentTeams?P_():void 0,m0=X1?.loadRuntime(O),i1=m0?.state,J1=m0?.teammates??[],I0=new Map(J1.map((a)=>[a.agentId,a])),r0=Z.sessionId||_,r,W1=[],g=!1,G0=P6({providerId:Z.providerId,modelId:Z.modelId,distinctId:$.distinctId,sessionId:Z.sessionId,cwd:Z.cwd,apiKey:Z.apiKey??"",baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,reasoningEffort:Z.reasoningEffort,thinkingBudgetTokens:Z.thinkingBudgetTokens,maxTokensPerTurn:Z.maxTokensPerTurn,temperature:Z.temperature,maxIterations:Z.maxIterations,hooks:Q,extensions:y0,logger:J??Z.logger,telemetry:$.telemetry??Z.telemetry,workspaceMetadata:Z.workspaceMetadata});if(H.enableSpawnAgent){if(A.configs.length>0)z.push(..._j(r7({configProvider:G0,agents:A.configs,createSubAgentTools:(a)=>H.enableTools?Um(EZ(Z.cwd,a.providerId??Z.providerId,H.mode,a.modelId??Z.modelId,Z.toolRoutingRules,L,a.skills!==void 0&&P?.createSkillsExecutor?P.createSkillsExecutor(a.skills):void 0,K,W??Z.telemetry,$.runCommandExecutionController),a):[],hookErrorMode:Z.hookErrorMode,toolPolicies:L,requestToolApproval:$.requestToolApproval,onSubAgentEvent:$.onSubAgentEvent,onSubAgentStart:$.onSubAgentStart,onSubAgentEnd:$.onSubAgentEnd}),L))}if(!this.teamRuntimeEntries.has(r0))this.teamRuntimeEntries.set(r0,{delegatedAgentConfigProvider:G0});let C0=()=>{if(!H.enableAgentTeams)return;let a=this.teamRuntimeEntries.get(r0)??{delegatedAgentConfigProvider:G0};if(this.teamRuntimeEntries.set(r0,a),Y0=a.runtime,!Y0){if(Y0=new c4({teamName:_,leadAgentId:Z.sessionId||"lead",missionLogIntervalSteps:H.missionLogIntervalSteps,missionLogIntervalMs:H.missionLogIntervalMs,onTeamEvent:(N0)=>{if(G(N0),Y0&&X1){if(N0.type==="teammate_spawned"&&N0.teammate?.rolePrompt){let r1={agentId:N0.agentId,rolePrompt:N0.teammate.rolePrompt,modelId:N0.teammate.modelId,maxIterations:N0.teammate.maxIterations};I0.set(r1.agentId,r1)}if(N0.type==="teammate_shutdown"&&!zm(N0.reason))I0.delete(N0.agentId);X1.handleTeamEvent(O,N0),X1.persistRuntime(O,Y0.exportState(),Array.from(I0.values()))}}}),i1)Y0.hydrateState(i1),g=!0;a.runtime=Y0}if(!E){if(!Y0)return;E=!0;let N0=W7({runtime:Y0,leadAgentId:Z.sessionId||"lead",restoredFromPersistence:Boolean(i1),restoredTeammates:J1,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(r1)=>{W1=r1,r?.addTools(r1)},createBaseTools:H.enableTools?()=>EZ(Z.cwd,Z.providerId,H.mode,Z.modelId,Z.toolRoutingRules,L,void 0,K,W??Z.telemetry,$.runCommandExecutionController):void 0,teammateConfigProvider:G0});if(g)Y0.recoverActiveRuns("runtime_recovered");if(N0.restoredFromPersistence)Y?.();z.push(...N0.tools)}return Y0};if(H.enableSpawnAgent&&j){let a=j();z.push({...a,execute:async(N0,r1)=>{return C0(),a.execute(N0,r1)}})}if(H.enableAgentTeams)C0();let c0=_j(z,L),W2=c0.some((a)=>a.name==="submit_and_exit"&&a.lifecycle?.completesRun===!0),x5=H.enableAgentTeams?()=>{let a=this.teamRuntimeEntries.get(r0)?.runtime;if(!a)return;let N0=a.listTasks(),r1=N0.some((_$)=>_$.status==="in_progress"||_$.status==="pending"),OV=a.listRuns({}),Pq=OV.some((_$)=>_$.status==="running"||_$.status==="queued");if(r1||Pq){let _$=N0.filter((j1)=>j1.status==="in_progress"||j1.status==="pending").map((j1)=>`${j1.id} (${j1.status}): ${j1.title}`).join(", "),NV=OV.filter((j1)=>j1.status==="running"||j1.status==="queued").map((j1)=>`${j1.id} (${j1.status})`).join(", "),qQ=[];if(_$)qQ.push(`Unfinished tasks: ${_$}`);if(NV)qQ.push(`Active runs: ${NV}`);return`[SYSTEM] You still have team obligations. ${qQ.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,Cq=W2?{requireCompletionTool:!0,...x5?{completionGuard:x5}:{}}:x5?{completionGuard:x5}:void 0;return{tools:c0,modelTools:U,logger:J??Z.logger,telemetry:W??Z.telemetry,teamRuntime:Y0,teamRestoredFromPersistence:Boolean(i1),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(r0)?.delegatedAgentConfigProvider??G0,extensions:y0,completionPolicy:Cq,registerLeadAgent:(a)=>{if(r=a,W1.length>0)a.addTools(T$(W1,[...D]))},shutdown:async(a)=>{if(_m(Y0,a),this.teamRuntimeEntries.delete(r0),await i?.(),!I)P?.stop()}}}}function Nm($,Z){let Q=$?.expiresAt,X=Z?.expiresAt;return $?.accessToken===Z?.accessToken&&$?.refreshToken===Z?.refreshToken&&$?.accountId===Z?.accountId&&Q===X}class X5 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 RZ{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new o$,this.telemetry=$?.telemetry}async resolveProviderApiKey($){let Z=b0($.providerId);if(!Z)return null;return this.resolveWithSingleFlight(Z.providerId,Z.storageProviderId,$.forceRefresh)}async resolveWithSingleFlight($,Z,Q=!1){let X=this.refreshInFlight.get(Z);if(X)return X;let J=this.resolveProviderApiKeyInternal($,Z,Q).catch((W)=>{throw W}).finally(()=>{this.refreshInFlight.delete(Z)});return this.refreshInFlight.set(Z,J),J}async resolveProviderApiKeyInternal($,Z,Q){let X=b0($);if(!X)return null;let J=this.providerSettingsManager.getProviderSettings(Z);if(!J)return j0(`oauth.resolve providerId=${$} storageProviderId=${Z} outcome=no_settings`),null;let W=j3($,J);if(!W)return j0(`oauth.resolve providerId=${$} storageProviderId=${Z} outcome=no_credentials`),null;j0(`oauth.resolve.start providerId=${$} storageProviderId=${Z} forceRefresh=${Q} accessTokenHash=${a0(W.access)} refreshTokenHash=${a0(W.refresh)}`);let j=await X.refresh({settings:J,credentials:W,forceRefresh:Q,telemetry:this.telemetry});if(!j)throw j0(`oauth.resolve providerId=${$} outcome=refresh_returned_null`),new X5($);let Y=q8({manager:this.providerSettingsManager,providerId:$,settings:J,credentials:j,setLastUsed:!1,save:!1}),V=!Nm(J.auth,Y.auth);if(V)j0(`oauth.resolve.refreshed providerId=${$} newAccessTokenHash=${a0(j.access)} newRefreshTokenHash=${a0(j.refresh)} savingToDisk=true`),this.providerSettingsManager.saveProviderSettings(Y,{setLastUsed:!1,tokenSource:"oauth"});else j0(`oauth.resolve providerId=${$} outcome=not_refreshed`);return{apiKey:X.getApiKey(Y)??j.access,accountId:j.accountId,refreshed:V}}}import{normalizeUserInput as qm}from"@cline/shared";import{nanoid as Am}from"nanoid";class S_{list($){return $?N1($):[]}update($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],updated:!1};let Q=Z.promptId.trim(),X=$.pendingPrompts.findIndex((V)=>V.id===Q);if(X<0)return{sessionId:Z.sessionId,prompts:N1($),updated:!1};let J=$.pendingPrompts[X];if(!J)return{sessionId:Z.sessionId,prompts:N1($),updated:!1};let W=Z.prompt===void 0?J.prompt:qm(Z.prompt).trim();if(!W)throw Error("prompt cannot be empty");let j=Z.delivery??J.delivery,Y={...J,prompt:W,mode:Z.mode??J.mode,delivery:j};return $.pendingPrompts.splice(X,1),Em($,Y,X,J.delivery),{sessionId:Z.sessionId,prompts:N1($),prompt:CZ(Y),updated:!0}}delete($,Z){if(!$)return{sessionId:Z.sessionId,prompts:[],removed:!1};let Q=Z.promptId.trim(),X=$.pendingPrompts.findIndex((W)=>W.id===Q);if(X<0)return{sessionId:Z.sessionId,prompts:N1($),removed:!1};let[J]=$.pendingPrompts.splice(X,1);return{sessionId:Z.sessionId,prompts:N1($),prompt:J?CZ(J):void 0,removed:!0}}enqueue($,Z){let{prompt:Q,mode:X,delivery:J,userImages:W,userFiles:j}=Z,Y=$.pendingPrompts.findIndex((V)=>V.prompt===Q);if(Y>=0){let[V]=$.pendingPrompts.splice(Y,1),B={...V,prompt:Q,mode:X??V.mode,userImages:W??V.userImages,userFiles:j??V.userFiles};if(J==="steer"||V.delivery==="steer")$.pendingPrompts.unshift({...B,delivery:"steer"});else $.pendingPrompts.push(B)}else{let V={id:`pending_${Date.now()}_${Am(5)}`,prompt:Q,mode:X,delivery:J,userImages:W,userFiles:j};if(J==="steer")$.pendingPrompts.unshift(V);else $.pendingPrompts.push(V)}return N1($)}consumeSteer($){let Z=$.pendingPrompts.findIndex((X)=>X.delivery==="steer");if(Z<0)return{prompts:N1($)};let[Q]=$.pendingPrompts.splice(Z,1);return{entry:Q,prompts:N1($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:N1($)}}requeueFront($,Z){return $.pendingPrompts.unshift(Z),N1($)}clear($){return $.pendingPrompts.length=0,[]}}class zj{deps;service=new S_;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let Z=this.deps.getSession($.sessionId);if(!Z)return{sessionId:$.sessionId,prompts:[],updated:!1};let Q=this.service.update(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}delete($){let Z=this.deps.getSession($.sessionId);if(!Z)return{sessionId:$.sessionId,prompts:[],removed:!1};let Q=this.service.delete(Z,$);return this.emitPrompts(Z),this.scheduleDrain($.sessionId,Z),Q}enqueue($,Z){let Q=this.deps.getSession($);if(!Q)return;this.service.enqueue(Q,Z),this.emitPrompts(Q),this.scheduleDrain($,Q)}consumeSteer($){let Z=this.deps.getSession($);if(!Z)return;let{entry:Q}=this.service.consumeSteer(Z);if(!Q)return;return this.emitPrompts(Z),this.emitSubmitted(Z,Q),Q}discardQueue($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:N1($)}})}scheduleDrain($,Z){if(Z.pendingPrompts.length===0||Z.aborting||Z.drainingPendingPrompts||!Z.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let Z=this.deps.getSession($);if(!Z)return;if(Z.aborting||Z.drainingPendingPrompts)return;if(!Z.agent.canStartRun())return;let{entry:Q}=this.service.shiftNext(Z);if(!Q)return;this.emitPrompts(Z),this.emitSubmitted(Z,Q),Z.drainingPendingPrompts=!0;let X=!0;try{let J=await this.deps.send({sessionId:$,prompt:Q.prompt,...Q.mode?{mode:Q.mode}:{},userImages:Q.userImages,userFiles:Q.userFiles});if(Tm(J))X=!1}catch{X=!1,this.service.requeueFront(Z,Q),this.emitPrompts(Z)}finally{if(Z.drainingPendingPrompts=!1,X&&Z.pendingPrompts.length>0&&Z.status!=="failed"&&Z.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,Z){let Q=CZ(Z);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:Q.id,prompt:Q.prompt,delivery:Q.delivery,attachmentCount:Q.attachmentCount,userImages:Q.userImages,userFiles:Q.userFiles}})}}function Tm($){return typeof $==="object"&&$!==null&&"finishReason"in $&&$.finishReason==="error"}function CZ($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0),userImages:$.userImages,userFiles:$.userFiles}}function N1($){return $.pendingPrompts.map(CZ)}function Em($,Z,Q,X){if(Z.delivery==="steer")$.pendingPrompts.unshift(Z);else if(X==="steer")$.pendingPrompts.push(Z);else $.pendingPrompts.splice(Q,0,Z)}_0();class PZ{deps;constructor($){this.deps=$}lastKnownIdentityBySession=new Map;static MAX_IDENTITY_SNAPSHOTS=512;dispatchAgentEvent($,Z,Q){let X=this.deps.getSession($),J={sessionId:$,config:Z,liveSession:X,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},W=dW(Q);if(!!X&&(!W.agentId||W.agentId===Oj(X.agent))){let Y={agentId:Oj(X.agent),conversationId:X.agent.getConversationId(),...X?.runtime.teamRuntime?{teamRole:"lead"}:{}};this.rememberSessionIdentity($,Y),WZ(J,Q,{...Y,isPrimaryAgentEvent:!0});return}WZ(J,Q,{...X?{}:this.lastKnownIdentityBySession.get($),isPrimaryAgentEvent:!1})}rememberSessionIdentity($,Z){if(this.lastKnownIdentityBySession.delete($),this.lastKnownIdentityBySession.set($,Z),this.lastKnownIdentityBySession.size>PZ.MAX_IDENTITY_SNAPSHOTS){let Q=this.lastKnownIdentityBySession.keys().next().value;if(Q!==void 0)this.lastKnownIdentityBySession.delete(Q)}}async handleTeamEvent($,Z){let Q=this.deps.getSession($);if(Q){if(OW(Q,Z),Z.type==="agent_event"){let X={sessionId:$,config:Q.config,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};WZ(X,Z.event,{agentId:Z.agentId,teamRole:"teammate",teamAgentId:Z.agentId,isPrimaryAgentEvent:!1})}if(Z.type==="teammate_spawned"){let X=K$({agentId:Z.teammate.runtimeAgentId??Z.agentId,conversationId:Z.teammate.conversationId,parentAgentId:Z.teammate.parentAgentId,createdByAgentId:Oj(Q.agent),teamId:Q.runtime.teamRuntime?.getTeamId(),teamName:Q.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:Z.agentId});if(X)V2(Q.config.telemetry,{ulid:$,modelId:Z.teammate.modelId??Q.config.modelId,provider:Q.config.providerId,...X})}}if(await NW($,Z,this.deps.invokeBackendOptional),Q)qW(Q,$,Z,this.deps.emit)}async handlePluginEvent($,Z,Q,X){if(Z.name==="plugin_log"){this.handlePluginLog($,Z.payload);return}if(Z.name==="plugin_telemetry"){this.handlePluginTelemetry($,Z.payload,X);return}if(Z.name==="automation_event"){let B=this.deps.getSession($)?.config.extensionContext?.automation??Q;if(!B)return;let K=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0;if(!K)return;await B.ingestEvent(K);return}if(Z.name!=="steer_message"&&Z.name!=="queue_message"&&Z.name!=="pending_prompt")return;let J=Z.payload&&typeof Z.payload==="object"?Z.payload:void 0,W=typeof J?.sessionId==="string"&&J.sessionId.trim().length>0?J.sessionId.trim():$,j=typeof J?.prompt==="string"?J.prompt.trim():"";if(!j)return;let Y=Z.name==="steer_message"?"steer":Z.name==="queue_message"?"queue":J?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(W,{prompt:j,delivery:Y})}handlePluginTelemetry($,Z,Q){let J=this.deps.getSession($)?.config.telemetry??Q;if(!J||!Z||typeof Z!=="object")return;let W=Z,j=typeof W.pluginName==="string"&&W.pluginName?W.pluginName:"unknown";if(W.kind==="event"){let Y=typeof W.event==="string"?W.event.trim():"";if(!Y)return;let V={...W.properties&&typeof W.properties==="object"?W.properties:{},plugin_name:j,session_id:$};if(W.required===!0)J.captureRequired(`plugin.${Y}`,V);else J.capture({event:`plugin.${Y}`,properties:V});return}if(W.kind==="metric"){let Y=typeof W.name==="string"?W.name.trim():"",V=typeof W.value==="number"?W.value:NaN;if(!Y||Number.isNaN(V))return;let B={...W.attributes&&typeof W.attributes==="object"?W.attributes:{},plugin_name:j},K=typeof W.description==="string"?W.description:void 0,G=W.required===!0,H=`plugin.${Y}`;if(W.metric==="counter")J.recordCounter(H,V,B,K,G);else if(W.metric==="histogram")J.recordHistogram(H,V,B,K,G);else if(W.metric==="gauge")J.recordGauge(H,V,B,K,G)}}handlePluginLog($,Z,Q){let X=this.deps.getSession($),J=Q??X?.config.extensionContext?.logger??X?.config.logger;if(!J||!Z||typeof Z!=="object")return;let W=Z,j=typeof W.message==="string"?W.message:"";if(!j)return;let Y=W.metadata&&typeof W.metadata==="object"?{...W.metadata}:{};if(Y.sessionId??=$,typeof W.pluginName==="string"&&W.pluginName)Y.pluginName=W.pluginName;if(W.level==="debug"){J.debug(j,Y);return}if(W.level==="error"){if(J.error)J.error(j,Y);else J.log(j,{...Y,severity:"error"});return}J.log(j,Y)}}function Oj($){return $.getAgentId()}function Nj($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:G$($.config),teamName:$.config.teamName?.trim()||void 0,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,parentSessionId:typeof $.sessionMetadata?.parentSessionId==="string"?$.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof $.sessionMetadata?.parentAgentId==="string"?$.sessionMetadata.parentAgentId:void 0,agentId:typeof $.sessionMetadata?.agentId==="string"?$.sessionMetadata.agentId:void 0,conversationId:typeof $.sessionMetadata?.conversationId==="string"?$.sessionMetadata.conversationId:void 0,isSubagent:typeof $.sessionMetadata?.isSubagent==="boolean"?$.sessionMetadata.isSubagent:!1,prompt:$.pendingPrompt,metadata:$.sessionMetadata,messagesPath:$.artifacts?.messagesPath,updatedAt:$.updatedAt??$.endedAt??$.startedAt}}function qj($,Z){let Q=$[Z];return typeof Q==="function"?Q:null}async function b_($,Z,...Q){let X=qj($,Z);if(!X)throw Error(`session service method not available: ${Z}`);return Promise.resolve(X.apply($,Q))}async function k_($,Z,...Q){let X=qj($,Z);if(!X)return;await Promise.resolve(X.apply($,Q))}async function x_($,Z,...Q){let X=qj($,Z);if(!X)return;return await Promise.resolve(X.apply($,Q))}M1();_0();function Aj($,Z,Q){return{onSubAgentEvent:(X)=>$.onAgentEvent(Q,Z,X),onSubAgentStart:(X)=>{let J=$.getSession(Q)?.runtime.teamRuntime;$.subAgentStarts.set(X.subAgentId,{startedAt:Date.now(),rootSessionId:Q});let W=K$({agentId:X.subAgentId,conversationId:X.conversationId,parentAgentId:X.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:X.parentAgentId});if(W)V2(Z.telemetry,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,...W});g5(Z.telemetry,{event:"started",ulid:Q,durationMs:0,parentId:X.parentAgentId,agentId:X.subAgentId,...W}),$.invokeBackendOptional("handleSubAgentStart",Q,X)},onSubAgentEnd:(X)=>{let J=$.getSession(Q)?.runtime.teamRuntime,W=$.subAgentStarts.get(X.subAgentId),j=W?Date.now()-W.startedAt:0,Y=X.result?.text?X.result.text.split(`
791
+ `).length:0;g5(Z.telemetry,{event:"ended",ulid:Q,durationMs:j,outputLines:Y,errorMessage:X.error?String(X.error):void 0,agentId:X.subAgentId,parentId:X.parentAgentId,...K$({agentId:X.subAgentId,conversationId:X.conversationId,parentAgentId:X.parentAgentId,teamId:J?.getTeamId(),teamName:J?.getTeamName(),createdByAgentId:X.parentAgentId})}),$.subAgentStarts.delete(X.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",Q,X)}}}function Tj($,Z,Q,X){let J=Aj($,Z,Q);return w6({configProvider:{getRuntimeConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:Z.providerId,modelId:Z.modelId,cwd:Z.cwd,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking,maxIterations:Z.maxIterations,hooks:Z.hooks,extensions:Z.extensions,logger:Z.logger,telemetry:Z.telemetry},getConnectionConfig:()=>$.getSession(Q)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:Z.providerId,modelId:Z.modelId,apiKey:Z.apiKey,baseUrl:Z.baseUrl,headers:Z.headers,providerConfig:Z.providerConfig,knownModels:Z.knownModels,thinking:Z.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let j=Z.enableTools?s8({cwd:Z.cwd,telemetry:Z.telemetry,...k1[S$({mode:Z.mode})],executors:X}):[];if(Z.enableSpawnAgent)j.push(Tj($,Z,Q,X));return T$(j)},...J})}import{readFile as Mm,stat as Rm}from"node:fs/promises";var Cm=20480000;async function y_($){let Z=await Rm($);if(!Z.isFile())throw Error("Path is not a file");if(Z.size>Cm)throw Error("File is too large to read into context.");let Q=await Mm($,"utf8");if(Q.includes("\x00"))throw Error("Cannot read binary file into context.");return Q}var I_=5000,Rj;function ym($,Z){if(Rj)return;Rj=JG().then(()=>{return}).catch((Q)=>{Rj=void 0,$?.error?.("Detached command log recovery failed",{error:Q}),q1(Z,{component:"core",operation:"command.detached_log_recovery",error:Q,severity:"warn",handled:!0})})}function J5($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function Im($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=$,Q=J5(Z.inputTokens),X=J5(Z.outputTokens),J=J5(Z.cacheReadTokens),W=J5(Z.cacheWriteTokens),j=J5(Z.totalCost);if(Q===void 0||X===void 0||J===void 0||W===void 0||j===void 0)return;return{inputTokens:Q,outputTokens:X,cacheReadTokens:J,cacheWriteTokens:W,totalCost:j}}function hm($,Z){return{inputTokens:Math.max($.inputTokens,Z.inputTokens),outputTokens:Math.max($.outputTokens,Z.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,Z.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,Z.cacheWriteTokens),totalCost:Math.max($.totalCost,Z.totalCost)}}function h_($,Z){if(!Z)return!1;if($.source_message_count!==Z.source_message_count)return $.source_message_count<Z.source_message_count;return Date.parse($.updated_at)<Date.parse(Z.updated_at)}class s${runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;distinctId;defaultLogger;defaultFetch;events=new C4;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new Q8;runCommandExecutionController=new c8;constructor($){let Z=fm();if(Z)xm(Z);let Q=D1($.distinctId);this.distinctId=Q,this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new MZ,this.createAgentInstance=$.createAgent??((X)=>new x$(X)),this.defaultCapabilities=o0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new o$,this.oauthTokenManager=$.oauthTokenManager??new RZ({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultLogger=$.logger,this.defaultTelemetry?.setDistinctId(Q),this.defaultFetch=$.fetch,ym(this.defaultLogger,this.defaultTelemetry),this.pendingPromptsController=new zj({getSession:(X)=>this.sessions.get(X),emit:(X)=>this.emit(X),send:(X)=>this.runTurn(X)}),this.pendingPrompts={list:async(X)=>this.pendingPromptsController.list(X.sessionId),update:async(X)=>this.pendingPromptsController.update(X),delete:async(X)=>this.pendingPromptsController.delete(X)},this.eventBridge=new PZ({getSession:(X)=>this.sessions.get(X),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(X)=>this.emit(X),persistMessages:(X,J,W)=>{this.invoke("persistSessionMessages",X,J,W).catch((j)=>{let Y=this.sessions.get(X);(Y?.config.logger??this.defaultLogger)?.error?.("Failed to persist session messages from agent event",{sessionId:X,error:j}),q1(Y?.config.telemetry??this.defaultTelemetry,{component:"core",operation:"session.persist_messages_on_agent_event",error:j,severity:"warn",handled:!0,context:{sessionId:X,providerId:Y?.config.providerId,modelId:Y?.config.modelId}})})},enqueuePendingPrompt:(X,J)=>this.pendingPromptsController.enqueue(X,J),invokeBackendOptional:(X,...J)=>this.invokeOptional(X,...J)})}async applyInitialOAuthCredentials($){if($.config.apiKey?.trim())return $;let Z=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId});if(!Z?.apiKey)return $;return{...$,config:{...$.config,apiKey:Z.apiKey}}}async startSession($){let Z=$.config.sessionId?.trim()??"",Q=Z||Sm(),X=Z.length>0&&($.initialMessages?.length??0)>0&&!$.prompt?.trim(),J=Boolean($.config.cwd?.trim()||$.config.workspaceRoot?.trim()),W=X&&!J?await this.invokeOptionalValue("readSessionManifest",Q):void 0,j=W?{...$.config,cwd:W.cwd,workspaceRoot:W.workspace_root}:await AG($.config);return await this.startResolvedSession({...$,config:j},Q,Z.length>0,W)}async startResolvedSession($,Z,Q,X){let J=$.source??Z0.CLI,W=U0(),j=await this.applyInitialOAuthCredentials($),Y=j.initialMessages??[],V=Y.length>0?JZ(Y):p0(),B=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!B)throw Error("session service method not available: ensureSessionsDir");let K=Ej(B,Z),G=Ej(K,`${Z}.messages.json`),H=Ej(K,`${Z}.json`),U=G$($.config),F=$.interactive===!0&&!j.prompt?.trim(),L=Z1.parse({version:1,session_id:Z,source:J,pid:process.pid,started_at:W,status:F?"idle":"running",interactive:$.interactive===!0,provider:j.config.providerId,model:j.config.modelId,cwd:j.config.cwd,workspace_root:U,team_name:j.config.teamName,enable_tools:j.config.enableTools,enable_spawn:j.config.enableSpawnAgent,enable_teams:j.config.enableAgentTeams,prompt:j.prompt?.trim()||void 0,messages_path:G}),D,z;if(Q&&Y.length>0&&!j.prompt?.trim()){let g=X??await this.invokeOptionalValue("readSessionManifest",Z);if(g)L=g,D={manifestPath:H,messagesPath:g.messages_path||G,compactionPath:g.compaction_path,manifest:g},z=await this.invokeOptionalValue("readSessionCompactionState",Z)}let O=await this.seedAggregateUsageFromArtifacts({initialUsage:V,sessionDir:K,rootMessagesPath:D?.messagesPath??G,manifest:L});this.usageBySession.set(Z,V),this.aggregateUsageBySession.set(Z,O);let A=o0(this.defaultCapabilities,$.capabilities),q=A?.toolExecutors??this.toolExecutors,N=$.localRuntime,T=N?.extensionContext?.logger??N?.logger,M=N?.extensionContext?.automation,d=N?.extensionContext?.telemetry??N?.telemetry??this.defaultTelemetry,b,S={getSession:(g)=>this.sessions.get(g),subAgentStarts:this.subAgentStarts,onAgentEvent:(g,G0,C0)=>this.eventBridge.dispatchAgentEvent(g,G0,C0),invokeBackendOptional:(g,...G0)=>this.invokeOptional(g,...G0)};b=await eD({input:j,localRuntime:$.localRuntime,sessionId:Z,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultLogger:this.defaultLogger,defaultCapabilities:A,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(g)=>{if(g.name==="plugin_log"){this.eventBridge.handlePluginLog(Z,g.payload,T);return}this.eventBridge.handlePluginEvent(Z,g,M,d)},onTeamEvent:(g)=>{this.eventBridge.handleTeamEvent(Z,g),b.config.onTeamEvent?.(g)},createSpawnTool:()=>Tj(S,b.config,Z,q),createSubAgentLifecycleCallbacks:(g)=>Aj(S,g,Z),readSessionMetadata:async()=>(await this.getSession(Z))?.metadata,writeSessionMetadata:async(g)=>{await this.persistSessionMetadata(Z,()=>g)}});let E=k0(JJ({...D?.manifest.metadata??{},...j.sessionMetadata??{}},b.gitState),{mode:j.mode,version:b.config.extensionContext?.client?.version});if(!D)L.metadata=E;let I=await this.runtimeBuilder.build({...b.runtimeBuilderInput,distinctId:this.distinctId,runCommandExecutionController:this.runCommandExecutionController}),P=b.config,i=b.providerConfig;if(I.teamRuntime&&!P.teamName?.trim())P.teamName=I.teamRuntime.getTeamName();let w=async()=>{let g=this.sessions.get(Z);if(!g||!X6(g.config.providerId))return!1;try{return await this.syncOAuthCredentials(g,{forceRefresh:!0}),!0}catch{return!1}};I.delegatedAgentConfigProvider?.updateConnectionDefaults({onAuthError:w});let k=[...I.tools,...P.extraTools??[]],m=I.extensions??b.extensions,t=j.initialCompactionState,y0,Y0=cW(P),X1=t??z,m0=X1?{...X1,conversation_id:X1.conversation_id?.trim()||Z}:void 0,i1=uW({compact:Y0,getState:()=>y0?.compactionState,saveState:async(g,G0)=>{let C0=y0;if(!C0)return;let c0={...g,conversation_id:C0.sessionId};try{if(!(await this.persistActiveSessionCompactionState(C0,c0,G0)).updated)P.logger?.debug?.("Skipped stale session compaction state",{sessionId:C0.sessionId,sourceMessageCount:c0.source_message_count})}catch(W2){P.logger?.error?.("Failed to persist session compaction state",{sessionId:C0.sessionId,error:W2}),q1(P.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:W2,context:{sessionId:C0.sessionId,providerId:P.providerId,modelId:P.modelId}})}}}),J1={distinctId:this.distinctId,sessionId:Z,providerId:i.providerId,modelId:i.modelId,apiKey:i.apiKey,baseUrl:i.baseUrl,headers:i.headers,onAuthError:w,knownModels:i.knownModels,providerConfig:i,thinking:P.thinking,reasoningEffort:P.reasoningEffort??i.reasoningEffort,thinkingBudgetTokens:P.thinkingBudgetTokens,maxTokensPerTurn:P.maxTokensPerTurn,temperature:P.temperature,systemPrompt:P.systemPrompt,maxIterations:P.maxIterations,execution:P.execution,prepareTurn:i1,tools:k,modelTools:I.modelTools,hooks:b.hooks,extensions:m,hookErrorMode:P.hookErrorMode,initialMessages:b.effectiveInput.initialMessages,userFileContentLoader:y_,toolPolicies:b.toolPolicies,requestToolApproval:b.requestToolApproval?async(g)=>{let G0=b.requestToolApproval,C0=this.sessions.get(Z);if(C0)await this.markTurnPending(C0);try{if(!G0)return{approved:!1,reason:"Tool approval callback is not configured."};return await G0(g)}finally{let c0=this.sessions.get(Z);if(c0?.status==="pending")await this.markTurnRunning(c0)}}:void 0,telemetry:P.telemetry,onConsecutiveMistakeLimitReached:P.onConsecutiveMistakeLimitReached,completionPolicy:I.completionPolicy,consumePendingUserMessage:()=>{let g=this.pendingPromptsController.consumeSteer(Z);return g?d4(g.prompt,g.mode??P.mode):void 0},logger:I.logger??P.logger,extensionContext:P.extensionContext,onEvent:(g)=>this.eventBridge.dispatchAgentEvent(Z,P,g)};J1.hooks={...J1.hooks,onEvent:async(g)=>{if(await b.hooks?.onEvent?.(g),g.type!=="assistant-message")return;let G0=this.sessions.get(Z);if(!G0)return;let C0=G0.agent.getMessages();try{await this.invoke("persistSessionMessages",Z,C0,P.systemPrompt)}catch(c0){P.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:Z,error:c0}),q1(P.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:c0,severity:"warn",handled:!0,context:{sessionId:Z,providerId:P.providerId,modelId:P.modelId}})}}};let I0=this.createAgentInstance(J1);if(J1.onEvent)I0.subscribeEvents(J1.onEvent);I.registerLeadAgent?.(I0);let r0=K$({agentId:I0.getAgentId(),conversationId:I0.getConversationId(),teamId:I.teamRuntime?.getTeamId(),teamName:I.teamRuntime?.getTeamName(),teamRole:I.teamRuntime?"lead":void 0});if($_(P,Z,Q,U,r0),r0)V2(P.telemetry,{ulid:Z,modelId:P.modelId,provider:P.providerId,...r0});if(I.teamRuntime)hQ(P.telemetry,{ulid:Z,teamId:I.teamRuntime.getTeamId(),teamName:I.teamRuntime.getTeamName(),leadAgentId:I0.getAgentId(),restoredFromPersistence:I.teamRestoredFromPersistence===!0});let r={sessionId:Z,config:P,sessionMetadata:E,...D?{artifacts:D}:{},source:J,startedAt:D?.manifest.started_at??W,updatedAt:D?.manifest.ended_at??D?.manifest.started_at??W,pendingPrompt:L.prompt,runtime:I,agent:I0,started:!1,status:D?.manifest.status??(F?"idle":"running"),aborting:!1,interactive:$.interactive===!0,persistedMessages:Y,compactionState:m0,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:b.pluginSandboxShutdown,submitAndExitObserved:!1,taskCompletedEmitted:!1,lastInteractiveTurnFinishReason:void 0};if(y0=r,r.compactionState&&!this.isCompactionStateForSession(r.sessionId,r.compactionState,r))r.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:r.sessionId,conversationId:r.compactionState.conversation_id}),r.compactionState=void 0;if(this.sessions.set(Z,r),D)await this.refreshActiveSessionGitMetadata(r,b.gitState);if(Y.length>0&&!D)try{await this.ensureSessionPersisted(r),await this.invoke("persistSessionMessages",Z,Y,r.config.systemPrompt)}catch(g){r.config.logger?.error?.("Failed to persist seeded session messages at start",{sessionId:Z,error:g}),q1(r.config.telemetry,{component:"core",operation:"session.persist_seeded_messages",error:g,severity:"warn",handled:!0,context:{sessionId:Z,providerId:r.config.providerId,modelId:r.config.modelId}})}this.emitStatus(Z,r.status);let W1;try{if(j.prompt?.trim())if(W1=await this.executeTurn(r,{prompt:j.prompt,userImages:j.userImages,userFiles:j.userFiles}),!r.interactive)await this.finalizeSingleRun(r,W1.finishReason);else await this.completeInteractiveTurn(r,W1.finishReason)}catch(g){if(r.interactive&&r.aborting)W1=await this.completeAbortedInteractiveTurn(r);else{q1(r.config.telemetry,{component:"core",operation:"session.start",error:g,severity:"error",handled:!1,context:{sessionId:r.sessionId,providerId:r.config.providerId,modelId:r.config.modelId}});try{await this.failSession(r)}catch(G0){r.config.logger?.error?.("Session failure cleanup threw",{sessionId:r.sessionId,error:G0})}throw g}}return{sessionId:Z,manifest:L,manifestPath:H,messagesPath:G,result:W1}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(Z)=>this.getSession(Z),readMessages:(Z)=>this.readSessionMessages(Z),buildStartInput:(Z,Q)=>{let X=Z.restoredCheckpointMetadata?{...Q.sessionMetadata??{},checkpoint:Z.restoredCheckpointMetadata}:Q.sessionMetadata;return{...Q,...X?{sessionMetadata:X}:{},initialMessages:Z.initialMessages}},startSession:(Z)=>this.startSession(Z),getStartedSessionId:(Z)=>Z.sessionId,cleanupStartedSession:async(Z)=>{if(!await this.deleteSession(Z.sessionId))throw Error(`Failed to clean up restored session ${Z.sessionId}`)},readRestoredSession:(Z)=>this.getSession(Z)})}async runTurn($){let Z=this.getSessionOrThrow($.sessionId),Q=Z.agent.canStartRun(),X=$.delivery??(Z.interactive&&!Q?"queue":void 0);if(Z.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:X??"immediate"}}),X==="queue"||X==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:X,userImages:$.userImages,userFiles:$.userFiles});return}try{let J=await this.executeTurn(Z,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!Z.interactive)await this.finalizeSingleRun(Z,J.finishReason);else await this.completeInteractiveTurn(Z,J.finishReason);if(J.finishReason!=="error")queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)});return J}catch(J){if(Z.interactive&&Z.aborting)return await this.completeAbortedInteractiveTurn(Z);throw q1(Z.config.telemetry,{component:"core",operation:"session.submit",error:J,severity:"error",handled:!1,context:{sessionId:Z.sessionId,providerId:Z.config.providerId,modelId:Z.config.modelId}}),await this.failSession(Z),J}}async getAccumulatedUsage($){let Z=fJ(this.usageBySession.get($)),Q=fJ(this.aggregateUsageBySession.get($));return Z||Q?{usage:Z,aggregateUsage:Q}:void 0}async abort($,Z){let Q=this.sessions.get($);if(!Q)return;if(Q.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),Q.aborting=!0,Q.drainingPendingPrompts)this.pendingPromptsController.discardQueue(Q);Q.agent.abort(Z)}async proceedWhileRunning($,Z){return this.runCommandExecutionController.proceedWhileRunning($,Z)}async stopSession($){let Z=this.sessions.get($);if(!Z)return;if(Z.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),Z.interactive&&!P0(Z.status)){await this.releaseSessionRuntime(Z,"session_stop");return}if(Z.interactive&&Z.agent.canStartRun()){await this.shutdownSession(Z,{status:this.resolveInteractiveStopStatus(Z),exitCode:this.resolveInteractiveStopExitCode(Z),shutdownReason:"session_stop",endReason:"stopped"});return}Z.aborting=!0,Z.agent.abort(Error("session_stop")),await this.shutdownSession(Z,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let Z=[...this.sessions.values()];if(Z.length===0)return;await Promise.allSettled(Z.map((Q)=>Q.interactive&&!P0(Q.status)?this.releaseSessionRuntime(Q,$):Q.interactive&&Q.agent.canStartRun()?this.shutdownSession(Q,{status:this.resolveInteractiveStopStatus(Q),exitCode:this.resolveInteractiveStopExitCode(Q),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(Q,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let Z=this.sessions.get($);if(Z)return Nj(Z);let Q=$.trim();if(!Q)return;let X=await this.getRow(Q);if(X)return M4(X);let J=await this.readManifest(Q);return J?bJ(J):void 0}async listSessions($=200){let Q=(await this.listRows($)).map(M4),X=new Set(Q.map((J)=>J.sessionId));for(let J of this.sessions.values()){if(X.has(J.sessionId))continue;Q.unshift(Nj(J))}return Q.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let Z=await this.invoke("deleteSession",$);if(Z.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return Z.deleted}async updateSession($,Z){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:Z.prompt,metadata:Z.metadata,title:Z.title}))?.updated===!0}}async updateSessionCompactionState($,Z){let Q=$.trim();if(!Q)return{updated:!1};let X=this.sessions.get(Q),J=X?void 0:await this.getSession(Q);if(!(X??J))return{updated:!1};if(X){let Y=await this.readSessionMessages(Q),V=Z.source_message_count>0&&Y.length>=Z.source_message_count,B=V?Y:void 0;if(V){if(!await this.canPersistCompactionState(Q,Z,X,void 0,Y))return{updated:!1};X.agent.restore(Y)}return await this.persistActiveSessionCompactionState(X,Z,B)}if(!await this.canPersistCompactionState(Q,Z,void 0,J))return{updated:!1};let j=await this.invokeOptionalValue("readSessionCompactionState",Q);if(h_(Z,j))return{updated:!1};return await this.invoke("persistSessionCompactionState",Q,Z),{updated:!0}}async readSessionCompactionState($){let Z=$.trim();if(!Z)return;let Q=this.sessions.get(Z);if(Q)for(;;){let X=Q.compactionStateWriteQueue;if(!X)return Q.compactionState;await X.catch(()=>{return})}return await this.invokeOptionalValue("readSessionCompactionState",Z)}isCompactionStateForSession($,Z,Q,X){let J=Z.conversation_id?.trim();if(!J)return!0;if(J===$)return!0;let W=Q?.agent.getConversationId()?.trim()||X?.conversationId?.trim();return W?J===W:!1}async canPersistCompactionState($,Z,Q,X,J){if(!Z.conversation_id?.trim())return!1;if(!this.isCompactionStateForSession($,Z,Q,X))return!1;let W=J??Q?.agent.getMessages()??await this.readSessionMessages($);return l6(Z,W)!==void 0}async persistActiveSessionCompactionState($,Z,Q){if(!await this.canPersistCompactionState($.sessionId,Z,$,void 0,Q))return{updated:!1};return await this.enqueueCompactionStateWrite($,async()=>{let X=$.compactionState,J=X!==void 0&&l6(X,Q??$.agent.getMessages())!==void 0;if(X&&(J?h_(Z,X):Date.parse(Z.updated_at)<Date.parse(X.updated_at)))return{updated:!1};return await this.invoke("persistSessionCompactionState",$.sessionId,Z),$.compactionState=Z,{updated:!0}})}async enqueueCompactionStateWrite($,Z){let X=($.compactionStateWriteQueue??Promise.resolve()).catch(()=>{return}).then(Z),J=X.then(()=>{return},()=>{return});$.compactionStateWriteQueue=J;try{return await X}finally{if($.compactionStateWriteQueue===J)$.compactionStateWriteQueue=void 0}}async readLiveSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=this.sessions.get(Z);if(Q){let X=Q.agent.getMessages();if(X.length>0)return X}return this.readSessionMessages(Z)}async readSessionMessages($){let Z=$.trim();if(!Z)return[];let Q=await this.getRow(Z);if(Q?.messagesPath)return c$(Q.messagesPath);let X=await this.readManifest(Z);return c$(X?.messages_path)}async dispatchHookEvent($){await TF($,{queueSpawnRequest:(Z)=>this.invokeOptional("queueSpawnRequest",Z),upsertSubagentSessionFromHook:(Z)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",Z),appendSubagentHookAudit:(Z,Q)=>this.invokeOptional("appendSubagentHookAudit",Z,Q),applySubagentStatus:(Z,Q)=>this.invokeOptional("applySubagentStatus",Z,Q)})}subscribe($,Z){return this.events.subscribe($,Z)}async updateSessionModel($,Z){await this.updateSessionConnection($,{modelId:Z})}async updateSessionConnection($,Z){let Q=C6(Z),X=this.getSessionOrThrow($);if(Q.providerId!==void 0)X.config.providerId=Q.providerId;if(Q.modelId!==void 0)X.config.modelId=Q.modelId;if(Q.apiKey!==void 0)X.config.apiKey=Q.apiKey;if(Q.baseUrl!==void 0)X.config.baseUrl=Q.baseUrl;if(Q.headers!==void 0)X.config.headers=Q.headers;if(Q.providerConfig!==void 0)X.config.providerConfig=Q.providerConfig;if(Object.hasOwn(Q,"reasoningEffort"))X.config.reasoningEffort=Q.reasoningEffort??void 0;if(Object.hasOwn(Q,"thinkingBudgetTokens"))X.config.thinkingBudgetTokens=Q.thinkingBudgetTokens??void 0;if(Object.hasOwn(Q,"thinking")){if(X.config.thinking=Q.thinking??void 0,Q.thinking===!1||Q.thinking===null)X.config.reasoningEffort=void 0,X.config.thinkingBudgetTokens=void 0}let J={...Q.providerId!==void 0?{providerId:Q.providerId}:{},...Q.modelId!==void 0?{modelId:Q.modelId}:{},...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{},...Q.providerConfig!==void 0?{providerConfig:Q.providerConfig}:{},...Object.hasOwn(Q,"reasoningEffort")?{reasoningEffort:Q.reasoningEffort??void 0}:{},...Object.hasOwn(Q,"thinking")?{thinking:Q.thinking??void 0}:{},...Object.hasOwn(Q,"thinkingBudgetTokens")?{thinkingBudgetTokens:Q.thinkingBudgetTokens??void 0}:{}};if(Q.thinking===!1||Q.thinking===null)J.reasoningEffort=void 0,J.thinkingBudgetTokens=void 0;let W={...Q.apiKey!==void 0?{apiKey:Q.apiKey}:{},...Q.baseUrl!==void 0?{baseUrl:Q.baseUrl}:{},...Q.headers!==void 0?{headers:Q.headers}:{}};if(X.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults(J),X.agent.updateConnection(Q),X.runtime.teamRuntime?.updateTeammateConnections(W),Q.providerId||Q.modelId)await this.mutateSessionManifest(X,(j)=>{if(Q.providerId)j.provider=Q.providerId;if(Q.modelId)j.model=Q.modelId})}async mutateSessionManifest($,Z){let Q=$.artifacts;if(!Q)return;let X=$.sessionId,W=(this.manifestMutationQueues.get(X)??Promise.resolve()).then(async()=>{let Y=await this.invokeOptionalValue("readSessionManifest",X)??Q.manifest;return Z(Y),Q.manifest=Y,await this.invoke("writeSessionManifest",Q.manifestPath,Y),Y}),j=W.then(()=>{return},()=>{return});this.manifestMutationQueues.set(X,j);try{return await W}finally{if(this.manifestMutationQueues.get(X)===j)this.manifestMutationQueues.delete(X)}}handlePluginEvent($,Z,Q){return this.eventBridge.handlePluginEvent($,Z,Q)}async executeTurn($,Z){let Q=await this.prepareTurnInput($,Z),X=Q.prompt.trim(),J=Q?.userImages?.length,W=Q?.userFiles?.length;if(!X&&!J&&!W)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=X;if(await this.ensureSessionPersisted($),!$.pendingPrompt){$.pendingPrompt=X;try{await this.invokeOptionalValue("updateSession",{sessionId:$.sessionId,prompt:X})}catch(j){$.config.logger?.log?.("Failed to backfill seeded session prompt",{severity:"warn",sessionId:$.sessionId,error:j})}}await this.refreshActiveSessionGitMetadata($),await this.syncOAuthCredentials($),await this.markTurnRunning($);try{let j=await this.executeAgentTurn($,X,Q.userImages,Q.userFiles);while(AW($,j.finishReason)){let Y=await TW($);if(Y.length===0)break;let V=EW($,Y);j=await this.executeAgentTurn($,V)}return j}finally{await this.refreshActiveSessionGitMetadata($)}}async completeInteractiveTurn($,Z){if(u4($))return;$.lastInteractiveTurnFinishReason=Z,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let Z=$.lastInteractiveTurnFinishReason;if(!Z)return"cancelled";switch(Z){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return Z}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let Z=new Date,Q=$.agent.getMessages(),X=p0();if($.persistedMessages=Q,$.started=$.started||Q.length>0,Q.length>0)try{await this.ensureSessionPersisted($),await this.invoke("persistSessionMessages",$.sessionId,Q,$.config.systemPrompt)}catch(J){$.config.logger?.error?.("Failed to persist session messages after abort",{sessionId:$.sessionId,error:J}),q1($.config.telemetry,{component:"core",operation:"session.persist_messages_after_abort",error:J,severity:"warn",handled:!0,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}})}return this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:X}),await this.completeInteractiveTurn($,"aborted"),queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),{text:"",usage:X,messages:Q,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:Z,endedAt:Z,durationMs:0}}async executeAgentTurn($,Z,Q,X){let J=$.started||$.agent.getMessages().length>0,W=$.persistedMessages??$.agent.getMessages(),j=this.usageBySession.get($.sessionId)??p0(),Y=this.aggregateUsageBySession.get($.sessionId)??j;$.turnUsageBaseline=j,$.turnAggregateUsageBaseline=Y,$.turnPrimaryUsage=p0(),$.turnUsageByAgent=new Map,wQ($.config.telemetry,$.sessionId,$.config.mode),z8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let V=J?()=>$.agent.continue(Z,Q,X):()=>$.agent.run(Z,Q,X),B=await this.runWithAuthRetry($,V,W);$.started=!0;let K=S7(B.messages,B,W);$.persistedMessages=K;let G=XZ($.turnUsageByAgent?.values()??[]),H=v0(j,B.usage),U=v0(v0(p0(),B.usage),G),F=v0(Y,U);return this.usageBySession.set($.sessionId,H),this.aggregateUsageBySession.set($.sessionId,F),await this.persistSessionMetadata($.sessionId,(L)=>({...L??{},totalCost:H.totalCost,aggregatedAgentsCost:F.totalCost,usage:H,aggregateUsage:F})),await this.invoke("persistSessionMessages",$.sessionId,K,$.config.systemPrompt),this.observeTaskCompletionTool($,B),B}catch(V){q1($.config.telemetry,{component:"core",operation:"session.turn",error:V,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}});try{await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt)}catch(B){$.config.logger?.error?.("Failed to persist session messages after turn error",{sessionId:$.sessionId,error:B})}throw V}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,Z){if($.submitAndExitObserved)return;if(!Z.toolCalls.some((X)=>X.name===A0.SUBMIT_AND_EXIT&&X.error===void 0))return;$.submitAndExitObserved=!0,$.taskCompletedEmitted=!0,v5($.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($)})}emitTaskCompletedOnTeardown($,Z){if($.taskCompletedEmitted||$.submitAndExitObserved)return;if(!($.interactive?$.lastInteractiveTurnFinishReason==="completed"&&!$.aborting&&$.agent.canStartRun():Z==="completed"))return;$.taskCompletedEmitted=!0,v5($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,Z){let Q=G$($.config),X=km(Z.prompt).trim();if(!X)return{prompt:"",userImages:Z.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles)};let J=await i9(X,Q);Z_($.config.telemetry,J);let W=d4(J.prompt,Z.mode??$.config.mode),j=this.resolveAbsoluteFilePaths($.config.cwd,Z.userFiles),Y=this.resolveAbsoluteFilePaths(Q,J.matchedFiles),V=Array.from(new Set([...j,...Y]));return{prompt:W,userImages:Z.userImages,userFiles:V.length>0?V:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let Z=G$($.config);if($.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:Z,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt}),$.compactionState){if(!(await this.persistActiveSessionCompactionState($,$.compactionState)).updated)$.compactionState=void 0}}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async refreshActiveSessionGitMetadata($,Z){try{let Q=Z??await sU(G$($.config));if(!Q||!$.artifacts)return;if(nU($.artifacts.manifest.metadata,Q))return;await this.persistSessionMetadata($.sessionId,(X)=>JJ({...X??{},...$.sessionMetadata??{}},Q))}catch(Q){$.config.logger?.debug?.("Failed to refresh session git metadata",{sessionId:$.sessionId,error:Q})}}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,Z){let Q=this.sessions.get($),X=await this.invokeOptionalValue("readSessionManifest",$)??Q?.artifacts?.manifest,J=Z(X?.metadata);if(!Q?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:J}))?.updated===!1)return;Q.sessionMetadata=J,Q.artifacts.manifest.metadata=J}async finalizeSingleRun($,Z){if(u4($))return;let Q=Z==="aborted"||$.aborting,X=Z==="error";await this.shutdownSession($,{status:Q?"cancelled":X?"failed":"completed",exitCode:X?1:0,shutdownReason:X?"session_error":"session_complete",endReason:Z})}async failSession($){$.lastInteractiveTurnFinishReason="error",await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,Z){if(this.emitTaskCompletedOnTeardown($,Z.status),o7($),!$.aborting&&!$.agent.canStartRun())$.aborting=!0,$.agent.abort(Error(Z.shutdownReason));let Q=[],X=(J,W)=>{Q.push(W),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:J,error:W,severity:"warn"}),q1($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,status:Z.status,shutdownReason:Z.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){await this.refreshActiveSessionGitMetadata($);try{await this.updateStatus($,Z.status,Z.exitCode)}catch(J){X("update_status",J)}}try{await $.agent.shutdown(Z.shutdownReason)}catch(J){X("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(Z.shutdownReason))}catch(J){X("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){X("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:Z.endReason,ts:Date.now()}}),Q.length>0&&Z.status==="failed")throw Q[0]}async releaseSessionRuntime($,Z){this.emitTaskCompletedOnTeardown($);let Q=[],X=(J,W)=>{Q.push(W),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:J,error:W,severity:"warn"}),q1($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:J,reason:Z,providerId:$.config.providerId,modelId:$.config.modelId}})};if(!$.aborting&&!$.agent.canStartRun())$.aborting=!0,$.agent.abort(Error(Z));try{await $.agent.shutdown(Z)}catch(J){X("agent_shutdown",J)}try{await Promise.resolve($.runtime.shutdown(Z))}catch(J){X("runtime_shutdown",J)}try{await $.pluginSandboxShutdown?.()}catch(J){X("plugin_sandbox_shutdown",J)}if(this.sessions.delete($.sessionId),Q.length>0)throw Q[0]}async updateStatus($,Z,Q){if(!$.artifacts)return;let X=await this.invoke("updateSessionStatus",$.sessionId,Z,Q);if(!X.updated)return;let J=await this.mutateSessionManifest($,(W)=>{if(W.status=Z,P0(Z))delete W.ended_at,W.exit_code=null;else W.ended_at=X.endedAt??U0(),W.exit_code=typeof Q==="number"?Q:null});if(!J)return;$.status=Z,$.updatedAt=X.endedAt??U0(),$.endedAt=P0(Z)?null:J.ended_at,$.exitCode=J.exit_code,this.emitStatus($.sessionId,Z)}async runWithAuthRetry($,Z,Q){try{return await Z()}catch(X){if(!X6($.config.providerId)||!bm(X))throw X;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(Q),Z()}}async syncOAuthCredentials($,Z){let Q=null;try{Q=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:Z?.forceRefresh})}catch(X){if(X instanceof X5)throw Error(`${X.providerId} requires re-authentication.`);throw X}if(!Q?.apiKey||$.config.apiKey===Q.apiKey)return;$.config.apiKey=Q.apiKey,$.agent.updateConnection({apiKey:Q.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:Q.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:Q.apiKey})}getSessionOrThrow($){let Z=this.sessions.get($);if(!Z){let Q=new P2($);throw q1(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:Q,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),Q}return Z}resolveAbsoluteFilePaths($,Z){if(!Z||Z.length===0)return[];let Q=Z.map((X)=>X.trim()).filter((X)=>X.length>0).map((X)=>wm(X)?X:Mj($,X));return Array.from(new Set(Q))}getSessionAgentTelemetryIdentity($){return K$({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let Z=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),Q=v0($.initialUsage,Z);return this.withPersistedAggregateUsageFloor(Q,$.manifest)}async summarizePersistedTeammateUsage($,Z,Q){let X=Mj(Z),J=`${Q}.messages.json`,W;try{W=Pm($)}catch{return p0()}let j=p0();for(let Y of W){if(!Y.endsWith(".messages.json"))continue;if(Y===J)continue;let V=Mj($,Y);if(V===X)continue;let B=await c$(V);if(B.length===0)continue;j=v0(j,JZ(B))}return j}withPersistedAggregateUsageFloor($,Z){let Q=Im(Z.metadata?.aggregateUsage);if(Q)return hm($,Q);let X=Z.metadata?.aggregatedAgentsCost;if(typeof X!=="number"||!Number.isFinite(X)||X<=$.totalCost)return $;return{...$,totalCost:X}}emitStatus($,Z){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:Z}})}async emitSessionSnapshot($){let Z=await this.getSession($);if(!Z)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:u$({session:Z,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),I_))}async getRow($){let Z=$.trim();if(!Z)return;return(await this.listRows(I_)).find((X)=>X.sessionId===Z)}async readManifest($){let Z=$.trim();if(!Z)return;return await this.invokeOptionalValue("readSessionManifest",Z)}invoke($,...Z){return b_(this.sessionService,$,...Z)}invokeOptional($,...Z){return k_(this.sessionService,$,...Z)}invokeOptionalValue($,...Z){return x_(this.sessionService,$,...Z)}}function vm($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let Z=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(Z==="local"||Z==="hub"||Z==="remote")return Z;return"auto"}var W5,j5;function gm($,Z){if($!=="auto"&&$!=="hub")return;if(Z.hub?.endpoint?.trim())return;iF(Z.hub?.workspaceRoot?.trim()||Z.hub?.cwd?.trim()||process.cwd())}async function mm($){await $.reconcileDeadSessions?.().catch(()=>{})}function m_($){try{let Z=new p$;return Z.init(),new r$(Z,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(Z){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),g_($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:Z,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new PW(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function v_($,Z,Q){return new s$({sessionService:Q??$.sessionService??m_($),capabilities:$.capabilities,logger:$.logger,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:Z,fetch:$.fetch})}async function cm($){if(W5)return W5;if(j5)return await j5;return j5=(async()=>{return W5=m_($),await mm(W5),W5})().finally(()=>{j5=void 0}),await j5}async function fZ($){let Z=D1($.distinctId);$.telemetry?.setDistinctId(Z);let Q=vm($);if(Q==="remote"){let X=$.remote?.endpoint?.trim();if(!X)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:X}),new c7({endpoint:X,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(Q==="hub"){let X=$.hub?.endpoint?.trim(),J=X||await x4({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!J)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:J,explicitEndpoint:X||void 0}),new I2({url:J,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(Q==="auto"){let X=await $W({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(X){$.logger?.log("Using discovered local hub runtime host",{url:X});let J=new I2({url:X,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await J.connect(),J}catch(W){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:W}),g_($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:W,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return gm(Q,$),$.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),v_($,Z)}return v_($,Z)}import{existsSync as um,mkdirSync as dm,readFileSync as lm,writeFileSync as pm}from"node:fs";import{dirname as im}from"node:path";import{FEATURE_FLAGS as c_,FeatureFlagDefaultValue as Cj}from"@cline/shared";var rm=3600000,am=604800000,u_=1;class Y5{provider;telemetry;logger;cacheTtlMs;cacheFilePath;persistentCacheMaxAgeMs;context;cache=new Map;cacheInfo={updateTime:0,userId:null};constructor($){this.provider=$.provider,this.telemetry=$.telemetry,this.logger=$.logger,this.cacheTtlMs=$.cacheTtlMs??rm,this.cacheFilePath=$.cacheFilePath,this.persistentCacheMaxAgeMs=$.persistentCacheMaxAgeMs??am,this.context={...$.context??{}},this.hydrateFromPersistentCache()}setContext($){this.context={...$}}hydrateCache($){this.cacheInfo={updateTime:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload},this.rebuildCacheFromSnapshot($.flagsPayload)}getCacheSnapshot(){return{updateTime:this.cacheInfo.updateTime,userId:this.cacheInfo.userId,flagsPayload:this.cacheInfo.flagsPayload}}async poll($){let Z=$??this.context.userId??null,Q=Date.now();if(Q-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===Z)return}let X=this.cacheInfo;this.cacheInfo={updateTime:Q,userId:Z||null};try{let J=await this.provider.getAllFlagsAndPayloads({flagKeys:c_.length>0?c_:void 0,context:{...this.context,userId:Z}});if(this.cacheInfo.userId!==Z)return;this.cacheInfo.flagsPayload=J,this.rebuildCacheFromSnapshot(J),this.writePersistentCache()}catch(J){if(this.cacheInfo.userId!==Z)return;throw this.cacheInfo=X.updateTime?X:{updateTime:0,userId:null},this.logger?.error?.("Error polling SDK feature flags",{error:J}),J}}hydrateFromPersistentCache(){let $=this.readPersistentCache();if($)this.hydrateCache($)}isFeatureFlagPayload($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every((Z)=>this.isFeatureFlagPayload(Z));if(typeof $==="object")return Object.values($).every((Z)=>this.isFeatureFlagPayload(Z));return!1}readPayloadRecord($){if(!$||typeof $!=="object"||Array.isArray($))return;let Z=Object.entries($).filter(([,X])=>this.isFeatureFlagPayload(X));if(Z.length===0)return;let Q={};for(let[X,J]of Z)Q[X]=J;return Q}readPersistentCache(){try{if(!this.cacheFilePath||!um(this.cacheFilePath))return;let $=JSON.parse(lm(this.cacheFilePath,"utf8"));if(!$||typeof $!=="object")return;let Z=$;if(Z.version!==u_||typeof Z.updatedAt!=="number"||!Number.isFinite(Z.updatedAt)||Date.now()-Z.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:Z.updatedAt,userId:Z.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(Z.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(Z.flagsPayload?.featureFlagPayloads)}}}catch($){this.logger?.error?.("Error reading SDK feature flags cache",{error:$});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;dm(im(this.cacheFilePath),{recursive:!0,mode:448});let $=this.getCacheSnapshot(),Z={version:u_,updatedAt:$.updateTime,userId:$.userId,flagsPayload:$.flagsPayload};pm(this.cacheFilePath,`${JSON.stringify(Z,null,2)}
792
+ `,"utf8")}catch($){this.logger?.error?.("Error writing SDK feature flags cache",{error:$})}}getReturnedFlagKeys($){return[...new Set([...Object.keys($?.featureFlags??{}),...Object.keys($?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot($){let Z=new Map;for(let Q of this.getReturnedFlagKeys($)){let X=this.getFeatureFlag(Q);Z.set(Q,X??!1)}this.cache=Z}getFeatureFlag($){try{let Z=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[$],Q=this.cacheInfo.flagsPayload?.featureFlags?.[$],X=Z??Q??Cj[$]??void 0;if(!this.cache.has($)||this.cache.get($)!==X)this.telemetry?.capture({event:l.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:$,$feature_flag_response:Q}});return X}catch(Z){return this.logger?.error?.(`Error checking SDK feature flag ${$}`,{error:Z}),Cj[$]??!1}}getBooleanFlagEnabled($){return this.cache.get($)===!0}getFlagPayload($){return this.cache.get($)??Cj[$]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test($,Z){if(process.env.IS_TEST==="true")this.cache.set($,Z)}async dispose(){await this.provider.dispose()}}class V5{async getAllFlagsAndPayloads(){return{}}enabled=!1;getSettings(){return{enabled:!1,timeoutMs:1000}}async dispose(){}}h2();import{execFile as nm}from"node:child_process";import*as d_ from"node:fs/promises";import*as j8 from"node:path";import{promisify as om}from"node:util";var sm=om(nm),tm=52428800;async function W8($,Z){let{stdout:Q}=await sm("git",["-C",$,...Z],{windowsHide:!0,maxBuffer:tm,encoding:"utf8"});return Q}function Pj($){return $.split("\x00").filter(Boolean)}function l_($,Z){let Q=j8.resolve($,Z),X=j8.relative($,Q);if(X.startsWith("..")||j8.isAbsolute(X))throw Error(`Checkpoint diff path escapes workspace: ${Z}`);return Q}async function em($,Z,Q){try{return await W8($,["show",`${Z}:${Q}`])}catch{try{return await W8($,["show",`${Z}^3:${Q}`])}catch{return""}}}async function $c($,Z){try{return await d_.readFile(l_($,Z),"utf8")}catch{return""}}async function Zc($,Z){try{return Pj(await W8($,["ls-tree","-r","-z","--name-only",`${Z}^3`]))}catch{return[]}}async function Qc($,Z){await W8($,["cat-file","-e",`${Z.ref}^{tree}`]);let[Q,X,J]=await Promise.all([W8($,["diff","--name-only","-z",Z.ref,"--"]),W8($,["ls-files","--others","--exclude-standard","-z"]),Zc($,Z.ref)]);return[...new Set([...Pj(Q),...Pj(X),...J])].sort((j,Y)=>j.localeCompare(Y))}function p_($){let Z=$.checkpointRunCount;if(!Number.isInteger(Z)||Z<1)throw Error("checkpointRunCount must be a positive integer");let Q=qZ(Z5($.session),Z);if(!Q)throw Error(`No checkpoint found at or before run ${Z} in session ${$.session.sessionId}`);let X=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!X)throw Error("cwd or workspaceRoot is required to compare a checkpoint");return{checkpoint:Q,cwd:X}}async function i_($,Z){let Q=await Qc($,Z);return(await Promise.all(Q.map(async(J)=>{let[W,j]=await Promise.all([em($,Z.ref,J),$c($,J)]);return{filePath:l_($,J),leftContent:W,rightContent:j}}))).filter((J)=>J.leftContent!==J.rightContent)}async function fj($){let Z=p_($),Q=await i_(Z.cwd,Z.checkpoint);return{...Z,diffs:Q}}var wj="modelToolActivities";function Xc($){if($.role!=="assistant")return[];let Z=$.metadata?.[wj];if(!Array.isArray(Z))return[];let Q=[];for(let X of Z){if(!X||typeof X!=="object"||Array.isArray(X))continue;let J=X,W=typeof J.toolCallId==="string"?J.toolCallId.trim():"",j=typeof J.toolName==="string"?J.toolName.trim():"",Y=J.execution;if(!W||!j||Y!=="client"&&Y!=="provider")continue;Q.push({toolCallId:W,toolName:j,execution:Y,input:J.input,output:J.output,isError:J.isError===!0,hasResult:Object.hasOwn(J,"output")||Object.hasOwn(J,"isError")})}return Q}function Jc($){if(!$||!Object.hasOwn($,wj))return $;let Z={...$};return delete Z[wj],Object.keys(Z).length>0?Z:void 0}function wZ($,Z,Q,X){return{kind:"session_display_message",origin:Q,execution:X,message:$,sourceIndex:Z}}function Sj($){let Z=[];for(let[Q,X]of $.entries()){if(!X||typeof X!=="object"||Array.isArray(X)||X.role!=="user"&&X.role!=="assistant")continue;let J=X,W=Xc(J);if(W.length===0){Z.push(wZ(J,Q,"history"));continue}for(let[j,Y]of W.entries()){let B=(typeof J.id==="string"?J.id.trim():"")||`model_tool_${Y.toolCallId||`history_message_${Q}`}`,K={agent:J.agent,sessionId:J.sessionId,ts:J.ts},G={type:"tool_use",id:Y.toolCallId,name:Y.toolName,input:Y.input??{}};if(Z.push(wZ({...K,id:`${B}_model_tool_${j}_use`,role:"assistant",content:[G],metadata:{userRunSpan:0},modelInfo:J.modelInfo},Q,"model_tool_activity",Y.execution)),Y.hasResult)Z.push(wZ({...K,id:`${B}_model_tool_${j}_result`,role:"user",content:[{type:"tool_result",tool_use_id:Y.toolCallId,name:Y.toolName,content:s9(Y.output),is_error:Y.isError||void 0}],metadata:{userRunSpan:0}},Q,"model_tool_activity",Y.execution))}Z.push(wZ({...J,metadata:Jc(J.metadata)},Q,"history"))}return Z}class bj{clientName;runtimeAddress;automation;settings;featureFlags;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,Z,Q,X,J,W,j,Y,V,B){this.clientName=Z,this.runtimeAddress=Q,this.host=$,this.prepare=X,this.capabilities=J,this.logger=W,this.telemetry=j,this.distinctId=Y,this.featureFlags=V,this.settings=gU($),this.pendingPrompts=mU($),this.automation=new _3(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=B?new A4({workspaceRoot:B.workspaceRoot??process.cwd(),specs:{cronSpecsDir:B.cronSpecsDir??B.cronDir,scope:AB(B.cronScope),workspaceRoot:B.workspaceRoot},runtimeHandlers:TB({host:$,getExtensionContext:()=>Q9({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:B.dbPath,logger:B.logger,pollIntervalMs:B.pollIntervalMs,claimLeaseSeconds:B.claimLeaseSeconds,globalMaxConcurrency:B.globalMaxConcurrency,watcherDebounceMs:B.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((K)=>{if(K.type!=="ended")return;this.disposeSessionBootstrap(K.payload.sessionId)})}static async create($={}){let Z=D1($.distinctId),Q=o0($.capabilities),X={...$,capabilities:Q,distinctId:Z},J=await fZ(X),W=qB($.automation),j=$.featureFlags||new Y5({provider:new V5,telemetry:$.telemetry,logger:$.logger,context:{distinctId:Z,clientName:$.clientName}}),Y=new bj(J,$.clientName,J.runtimeAddress,$.prepare,Q,$.logger,$.telemetry,Z,j,W?{...W,logger:$.logger}:void 0);if(W&&W.autoStart!==!1)await Y.automation.start();return Y}async disposeSessionBootstrap($){let Z=this.activeSessionBootstraps.get($);if(!Z)return;this.activeSessionBootstraps.delete($),await Promise.resolve(Z.dispose?.())}async start($){let Z=cU($),Q=await this.prepare?.(Z);try{let X=Q?await Q.applyToStartSessionInput(Z):Z,J=await this.host.startSession($J(X,{defaultCapabilities:this.capabilities,withExtensionContext:(W)=>Q9({automationService:this.automationService,automation:this.automation,context:W,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(Q)if(await this.host.getSession(J.sessionId))this.activeSessionBootstraps.set(J.sessionId,Q);else await Promise.resolve(Q.dispose?.());return uU({input:X,sessionId:J.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),J}catch(X){throw await Promise.resolve(Q?.dispose?.()),X}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let Z=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(Z.map((Q)=>this.disposeSessionBootstrap(Q)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await kJ(this.host,$);list=async($=200,Z={})=>await this.listHistory({...Z,limit:$});delete=async($)=>{let Z=await this.host.deleteSession($);if(Z)await this.disposeSessionBootstrap($);return Z};update=(...$)=>this.host.updateSession(...$);updateSessionCompactionState=(...$)=>this.host.updateSessionCompactionState(...$);readSessionCompactionState=(...$)=>this.host.readSessionCompactionState(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async readDisplayMessages($){return Sj(await this.host.readSessionMessages($))}readLiveMessages=($)=>this.host.readLiveSessionMessages?this.host.readLiveSessionMessages($):this.host.readSessionMessages($);async restore($){let Z=$.start?$J($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>Q9({automationService:this.automationService,automation:this.automation,context:Q,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:$.sessionId,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restore:$.restore,start:Z})}async compareCheckpoint($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=await this.host.getSession(Z);if(!Q)throw Error(`Session ${Z} not found`);return fj({session:Q,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,Z){return this.host.subscribe($,Z)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()};updateSessionConnection=(...$)=>{return this.host.updateSessionConnection?.(...$)??Promise.resolve()}}import{isAbsolute as Wc,relative as jc,resolve as SZ,sep as Yc}from"node:path";import{createSessionId as Vc,readHubScheduleMode as r_}from"@cline/shared";function a_($,Z){if(typeof Z!=="string"||!Z.trim())return;let Q=SZ($.workspaceRoot,Z);if(!o_($.workspaceRoot,Q))throw Error("schedule cwd is outside the client workspace scope");return Q}function o_($,Z){let Q=jc($,Z);return Q!==".."&&!Q.startsWith(`..${Yc}`)&&!Wc(Q)}function A1($,Z){return{version:$.version,requestId:$.requestId,ok:!0,payload:Z}}function n_($,Z,Q){return{version:$.version,requestId:$.requestId??Vc("hubreq_"),ok:!1,error:{code:Z,message:Q}}}class bZ{schedules;constructor($){this.schedules=$}async handleCommand($,Z){try{let Q=this.resolveScope(Z);switch($.command){case"schedule.create":return A1($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{},Q))});case"schedule.list":return A1($,{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,workspaceRoot:Q.workspaceRoot})});case"schedule.get":return A1($,{schedule:this.requireScopedSchedule($,Q)});case"schedule.update":return A1($,{schedule:this.schedules.updateSchedule(this.requireScopedSchedule($,Q).scheduleId,this.toUpdateInput($.payload??{},Q))});case"schedule.delete":return A1($,{deleted:this.schedules.deleteSchedule(this.requireScopedSchedule($,Q).scheduleId)});case"schedule.enable":return A1($,{schedule:this.schedules.resumeSchedule(this.requireScopedSchedule($,Q).scheduleId)});case"schedule.disable":return A1($,{schedule:this.schedules.pauseSchedule(this.requireScopedSchedule($,Q).scheduleId)});case"schedule.trigger":return A1($,{execution:$.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(this.requireScopedSchedule($,Q).scheduleId):await this.schedules.triggerScheduleNow(this.requireScopedSchedule($,Q).scheduleId)});case"schedule.list_executions":return A1($,{executions:this.listScopedExecutions($,Q)});case"schedule.stats":return A1($,{stats:this.schedules.getScheduleStats(this.requireScopedSchedule($,Q).scheduleId)});case"schedule.active":{let X=this.scopedScheduleIds(Q);return A1($,{executions:this.schedules.getActiveExecutions().filter((J)=>X.has(J.scheduleId))})}case"schedule.upcoming":{let X=this.scopedScheduleIds(Q);return A1($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0).filter((J)=>X.has(J.scheduleId))})}default:return n_($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(Q){return n_($,"schedule_command_failed",Q instanceof Error?Q.message:String(Q))}}resolveScope($){let Z=$?.workspaceContext;if(!$?.clientId||!Z?.workspaceRoot?.trim())throw Error("schedule commands require a registered workspace client");let Q=SZ(Z.workspaceRoot),X=SZ(Z.cwd?.trim()||Q);if(!o_(Q,X))throw Error("client cwd is outside its workspace scope");return{workspaceRoot:Q,cwd:X}}requireScopedSchedule($,Z){let Q=String($.payload?.scheduleId??"").trim(),X=Q?this.schedules.getSchedule(Q):void 0;if(!X||SZ(X.workspaceRoot)!==Z.workspaceRoot)throw Error("schedule does not exist in this workspace");return X}scopedScheduleIds($){return new Set(this.schedules.listSchedules({workspaceRoot:$.workspaceRoot}).map((Z)=>Z.scheduleId))}listScopedExecutions($,Z){let Q=typeof $.payload?.scheduleId==="string"?$.payload.scheduleId.trim():void 0;if(Q)this.requireScopedSchedule($,Z);let X=this.scopedScheduleIds(Z);return this.schedules.listScheduleExecutions({scheduleId:Q,status:typeof $.payload?.status==="string"?$.payload.status:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0}).filter((J)=>X.has(J.scheduleId))}toCreateInput($,Z){let Q=r_($,"yolo"),X=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:X,mode:Q,workspaceRoot:Z.workspaceRoot,cwd:a_(Z,$.cwd)??Z.cwd}}toUpdateInput($,Z){let Q=r_($),X=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:X,...Q===void 0?{}:{mode:Q},workspaceRoot:Z.workspaceRoot,...Object.hasOwn($,"cwd")?{cwd:$.cwd===null?Z.workspaceRoot:a_(Z,$.cwd)??Z.cwd}:{}}}}import{ONE_TIME_SCHEDULE_CRON_PATTERN as kZ,ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY as Bc}from"@cline/shared";function xZ($){return $?new Date($).getTime():void 0}function Kc($){let Z=$.metadata?{...$.metadata}:void 0;if(Z)delete Z.__hubScheduleCreatedBy,delete Z.__hubScheduleCwd,delete Z.__hubRuntimeOptions;return Z}function B5($){let Z=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.triggerKind==="one_off"?kZ:$.scheduleExpr??"",timezone:$.triggerKind==="schedule"?$.timezone:void 0,prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof Z?.__hubScheduleCwd==="string"?Z.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:xZ($.nextRunAt),lastRunAt:xZ($.lastRunAt),createdBy:typeof Z?.__hubScheduleCreatedBy==="string"?Z.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:Z?.__hubRuntimeOptions&&typeof Z.__hubRuntimeOptions==="object"&&!Array.isArray(Z.__hubRuntimeOptions)?Z.__hubRuntimeOptions:void 0,metadata:Kc($)}}function Gc($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function kj($,Z){return{executionId:$.runId,scheduleId:Z,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:xZ($.startedAt),endedAt:xZ($.completedAt),status:Gc($.status),errorMessage:$.error}}class yZ{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new q4({dbPath:$.dbPath}),this.materializer=new L4({store:this.store}),this.runner=new D4({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,eventPublisher:$.eventPublisher,workspaceRoot:"",specs:$.specs,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(this.validateScheduleTiming($.cronPattern,$.timezone,$.metadata,!0),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return B5(this.store.createHubSchedule($))}getSchedule($){let Z=this.store.getHubSchedule($);return Z?B5(Z):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((Z)=>B5(Z))}updateSchedule($,Z){let Q=this.store.getHubSchedule($);if(!Q)return;let X=Z.workspaceRoot!==void 0?Z.workspaceRoot.trim():Q.workspaceRoot,J=Z.enabled??Q.enabled,W=B5(Q),j=Z.cronPattern??W.cronPattern;if(j.trim()===kZ&&typeof Z.timezone==="string"&&Z.timezone.trim())throw Error("timezone is only supported for recurring schedules");if(this.validateScheduleTiming(j,j.trim()===kZ?void 0:Z.timezone===null?void 0:Z.timezone??W.timezone,Z.metadata??W.metadata,J),J&&!X)throw Error("workspaceRoot is required for enabled schedules");let Y=this.store.updateHubSchedule($,{...Z,scheduleId:$});return Y?B5(Y):void 0}validateScheduleTiming($,Z,Q,X){if($.trim()!==kZ){jF($),UJ(Z);return}if(Z?.trim())throw Error("timezone is only supported for recurring schedules");let J=Q?.[Bc];if(typeof J!=="number"||!Number.isFinite(J)||X&&J<=Date.now())throw Error("runAt must be a future timestamp")}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;await this.runner.tick();let Q=this.store.getRun(Z.runId)??Z;return kj(Q,$)}triggerScheduleNowDetached($){let Z=this.store.enqueueHubScheduleRun($,"manual");if(!Z)return;return this.runner.tick().catch(()=>{return}),kj(Z,$)}listScheduleExecutions($){let Z=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,Q={specId:Z?.specId,limit:$.limit};return this.store.listRuns(Q).map((J)=>{let W=Z??this.store.getSpec(J.specId);if(!W||W.source!=="hub-schedule")return;return kj(J,W.externalId)}).filter((J)=>{if(!J)return!1;return!$.status||J.status===$.status})}getScheduleStats($){let Z=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(Z.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let Q=0,X=0,J=0,W;for(let j of Z){if(j.status==="success"||j.status==="completed")Q+=1;if(!W&&j.status!=="success"&&j.status!=="completed")W=j;if(j.startedAt&&j.endedAt)J+=j.endedAt-j.startedAt,X+=1}return{totalRuns:Z.length,successRate:Q/Z.length,avgDurationSeconds:X>0?J/X/1000:0,lastFailure:W}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let Z=this.store.getSpec($.specId);if(!Z||Z.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:Z.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:Z.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+Z.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let Z={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(Z).flatMap((Q)=>Q.source==="hub-schedule"&&Q.nextRunAt?[{spec:Q,nextRunAt:Q.nextRunAt}]:[]).sort((Q,X)=>String(Q.nextRunAt).localeCompare(String(X.nextRunAt))).slice(0,$).map(({spec:Q,nextRunAt:X})=>({scheduleId:Q.externalId,name:Q.title,nextRunAt:X}))}}_0();import{realpathSync as yj,statSync as Hc}from"node:fs";import{isAbsolute as t_,relative as Uc,sep as e_}from"node:path";import{ONE_TIME_SCHEDULE_CRON_PATTERN as $z,ONE_TIME_SCHEDULE_RUN_AT_METADATA_KEY as Zz}from"@cline/shared";import{z as D0}from"zod";var Fc=D0.enum(["create","update","list","get","pause","resume","delete","run_now"]),Lc=D0.object({provider_id:D0.string().min(1),model_id:D0.string().min(1).optional()}),G5=D0.object({operation:Fc,schedule_id:D0.string().min(1).optional(),schedule_type:D0.enum(["once","recurring"]).optional(),name:D0.string().min(1).optional(),prompt:D0.string().min(1).optional(),run_at:D0.string().datetime({offset:!0}).optional(),cron_pattern:D0.string().min(1).optional(),timezone:D0.string().min(1).nullable().optional(),enabled:D0.boolean().optional(),mode:D0.enum(["act","plan","yolo"]).optional(),system_prompt:D0.string().nullable().optional(),max_iterations:D0.number().int().positive().nullable().optional(),timeout_seconds:D0.number().int().positive().nullable().optional(),max_parallel:D0.number().int().positive().max(32).optional(),tags:D0.array(D0.string().min(1)).optional(),model_selection:Lc.optional(),limit:D0.number().int().positive().max(200).optional()});function Y8($,Z,Q,X){if(!Qz.has(Z.operation))return;a1($.telemetry,{ulid:Q.sessionId??Q.conversationId??Q.agentId,tool:`tasks.scheduled.${Z.operation}`,success:X,agentId:Q.agentId})}var Qz=new Set(["create","update","pause","resume","delete","run_now"]);function B8($,Z){let Q=$?.trim();if(!Q)throw Error(`${Z} is required for this operation`);return Q}function Ij($,Z){try{let Q=yj.native($);if(!Hc(Q).isDirectory())throw Error("not a directory");return Q}catch{throw Error(`${Z} does not resolve to an existing safe path`)}}function Dc($,Z){try{return yj.native($)===yj.native(Z)}catch{return!1}}function Xz($,Z,Q){let X=Uc($,Z);if(X===".."||X.startsWith(`..${e_}`)||t_(X))throw Error(`${Q} is outside the workspace scope`)}function Jz($,Z,Q){return Ij(t_(Z)?Z:`${$}${e_}${Z}`,Q)}function _c($){let Z=Ij($.workspaceRoot,"workspaceRoot"),Q=$.cwd?Jz(Z,$.cwd,"cwd"):Z;return Xz(Z,Q,"cwd"),{...$,workspaceRoot:Z,cwd:Q}}function V8($,Z){if(!$)throw Error("schedule does not exist");if(!Dc($.workspaceRoot,Z.workspaceRoot))throw Error("schedule is outside this session's workspace scope");let Q=Ij($.workspaceRoot,"schedule workspaceRoot");if($.cwd){let X=Jz(Q,$.cwd,"schedule cwd");Xz(Q,X,"schedule cwd")}}function s_($){if(!$)return;return{providerId:$.provider_id.trim(),modelId:$.model_id?.trim()||void 0}}function xj($){if(!$)return;return[...new Set($.map((Z)=>Z.trim()).filter(Boolean))]}function Wz($){let Z=Date.parse(B8($,"run_at"));if(!Number.isFinite(Z))throw Error("run_at must be an ISO timestamp");if(Z<=Date.now())throw Error("run_at must be in the future");return Z}function zc($){if($.schedule_type==="once"){if($.cron_pattern)throw Error("cron_pattern cannot be used with a one-time schedule");if($.timezone)throw Error("timezone is encoded in run_at for a one-time schedule");return{cronPattern:$z,metadata:{[Zz]:Wz($.run_at)}}}if($.schedule_type==="recurring"){if($.run_at)throw Error("run_at cannot be used with a recurring schedule");return{cronPattern:B8($.cron_pattern,"cron_pattern"),timezone:$.timezone?.trim()||void 0}}throw Error("schedule_type is required for create")}function Oc($){if($.run_at&&$.cron_pattern)throw Error("run_at and cron_pattern cannot be updated together");if($.schedule_type==="once"||$.run_at){if($.cron_pattern)throw Error("cron_pattern cannot be used with a one-time schedule");if($.timezone)throw Error("timezone is encoded in run_at for a one-time schedule");return{cronPattern:$z,timezone:null,metadata:{[Zz]:Wz($.run_at)}}}if($.schedule_type==="recurring"||$.cron_pattern)return{cronPattern:B8($.cron_pattern,"cron_pattern"),timezone:$.timezone===null?null:$.timezone?.trim()||void 0};return{timezone:$.timezone===null?null:$.timezone?.trim()||void 0}}function K5($){return B8($.schedule_id,"schedule_id")}async function hj($,Z,Q){let X=G5.safeParse(Z);if(!X.success)return{ok:!1,error:{code:"invalid_schedule_input",message:X.error.issues[0]?.message??"Invalid schedule input"}};let J=X.data;try{if(!Q.sessionId)throw Error("tasks requires a Hub session");let W=await $.resolveSessionDefaults(Q.sessionId);if(!W?.workspaceRoot.trim())throw Error("tasks could not resolve the current workspace");let j=_c(W);if(Qz.has(J.operation)&&!j.interactive)throw Error("schedule mutations require an interactive user session");switch(J.operation){case"create":{let Y=$.schedules.createSchedule({name:B8(J.name,"name"),...zc(J),prompt:B8(J.prompt,"prompt"),workspaceRoot:j.workspaceRoot,cwd:j.cwd,modelSelection:s_(J.model_selection)??j.modelSelection,enabled:J.enabled,mode:J.mode??"yolo",systemPrompt:J.system_prompt??void 0,maxIterations:J.max_iterations??void 0,timeoutSeconds:J.timeout_seconds??void 0,maxParallel:J.max_parallel??1,createdBy:`agent:${Q.agentId}`,tags:xj(J.tags)});return $.publish?.("schedule.created",{schedule:Y},Q.sessionId),Y8($,J,Q,!0),{ok:!0,operation:J.operation,schedule:Y}}case"update":{let Y=K5(J);V8($.schedules.getSchedule(Y),j);let V=$.schedules.updateSchedule(Y,{scheduleId:Y,...Oc(J),name:J.name?.trim()||void 0,prompt:J.prompt?.trim()||void 0,modelSelection:s_(J.model_selection),enabled:J.enabled,mode:J.mode,systemPrompt:J.system_prompt,maxIterations:J.max_iterations,timeoutSeconds:J.timeout_seconds,maxParallel:J.max_parallel,tags:xj(J.tags)});if(!V)throw Error("schedule does not exist");return $.publish?.("schedule.updated",{schedule:V},Q.sessionId),Y8($,J,Q,!0),{ok:!0,operation:J.operation,schedule:V}}case"list":{let Y=$.schedules.listSchedules({enabled:J.enabled,tags:xj(J.tags),workspaceRoot:j.workspaceRoot,limit:J.limit??50}).filter((V)=>{try{return V8(V,j),!0}catch{return!1}}).slice(0,J.limit??50);return{ok:!0,operation:J.operation,schedules:Y}}case"get":{let Y=$.schedules.getSchedule(K5(J));return V8(Y,j),{ok:!0,operation:J.operation,schedule:Y}}case"pause":case"resume":{let Y=K5(J);V8($.schedules.getSchedule(Y),j);let V=J.operation==="pause"?$.schedules.pauseSchedule(Y):$.schedules.resumeSchedule(Y);if(!V)throw Error("schedule does not exist");return $.publish?.("schedule.updated",{schedule:V},Q.sessionId),Y8($,J,Q,!0),{ok:!0,operation:J.operation,schedule:V}}case"delete":{let Y=K5(J);V8($.schedules.getSchedule(Y),j);let V=$.schedules.deleteSchedule(Y);if(!V)throw Error("schedule does not exist");return $.publish?.("schedule.deleted",{deleted:V,scheduleId:Y},Q.sessionId),Y8($,J,Q,!0),{ok:!0,operation:J.operation,deleted:V}}case"run_now":{let Y=K5(J);V8($.schedules.getSchedule(Y),j);let V=$.schedules.triggerScheduleNowDetached(Y);if(!V)throw Error("schedule does not exist");return $.publish?.("schedule.triggered",{execution:V},Q.sessionId),Y8($,J,Q,!0),{ok:!0,operation:J.operation,execution:V}}}}catch(W){return Y8($,J,Q,!1),{ok:!1,operation:J.operation,error:{code:"schedule_operation_failed",message:W instanceof Error?W.message:String(W)}}}}gZ();import{createTool as ic,zodToJsonSchema as rc}from"@cline/shared";import{z as G8}from"zod";_0();import{resolve as Vz}from"node:path";import{z as o}from"zod";var Bz=o.enum(["suggestion","follow-up","todo","handoff","idea","reminder"]),uc=o.enum(["pending_approval","approved","in_progress","completed","failed","cancelled","expired"]),Kz=o.union([o.literal(0),o.literal(1),o.literal(2),o.literal(3),o.literal(4),o.literal(5)]),dc=o.object({provider_id:o.string().min(1),model_id:o.string().min(1).optional()}),mZ=o.object({operation:o.enum(["create","update","list","get"]),task_id:o.string().min(1).optional(),expected_revision:o.number().int().positive().optional(),type:Bz.optional(),title:o.string().min(1).optional(),description:o.string().nullable().optional(),instructions:o.string().min(1).optional(),scope:o.enum(["workspace","global"]).optional(),workspace_root:o.string().min(1).nullable().optional(),cwd:o.string().min(1).nullable().optional(),resource_paths:o.array(o.string().min(1)).optional(),priority:Kz.optional(),assignee:o.string().min(1).nullable().optional(),model_selection:dc.nullable().optional(),mode:o.enum(["act","plan","yolo"]).nullable().optional(),system_prompt:o.string().nullable().optional(),max_iterations:o.number().int().positive().nullable().optional(),timeout_seconds:o.number().int().positive().nullable().optional(),available_at:o.string().datetime().optional(),expires_at:o.string().datetime().optional(),automation_eligible:o.boolean().optional(),statuses:o.array(uc).optional(),types:o.array(Bz).optional(),priorities:o.array(Kz).optional(),limit:o.number().int().positive().max(500).optional()}),lc=new Set(["create","update"]);function cj($,Z,Q,X){if(!lc.has(Z.operation))return;a1($.telemetry,{ulid:Q.sessionId??Q.conversationId??Q.agentId,tool:`tasks.todo.${Z.operation}`,success:X,agentId:Q.agentId})}function K8($,Z){let Q=$?.trim();if(!Q)throw Error(`${Z} is required for this operation`);return Q}function Gz($){if($===void 0||$===null)return $;return{providerId:$.provider_id,modelId:$.model_id}}function Uz($,Z){return Vz($)===Vz(Z)}function Hz($,Z){if(!$)throw Error("task does not exist");if(Z.workspaceRoot){if($.scope!=="workspace"||!$.workspaceRoot||!Uz($.workspaceRoot,Z.workspaceRoot))throw Error("task is outside this session's workspace scope");return}if($.scope!=="global")throw Error("task is outside this session's global scope")}function pc($,Z){let Q=Z.workspaceRoot?"workspace":"global";if($.scope&&$.scope!==Q)throw Error(`this session can only manage ${Q} tasks`);if($.workspace_root!==void 0){if(!Z.workspaceRoot||$.workspace_root===null||!Uz($.workspace_root,Z.workspaceRoot))throw Error(`this session can only manage ${Q} tasks`)}return Q}async function Fz($,Z,Q){let X=mZ.safeParse(Z);if(!X.success)return{ok:!1,error:{code:"invalid_task_input",message:X.error.issues[0]?.message??"Invalid task input"}};let J=X.data,W={kind:"agent",id:Q.agentId,agentId:Q.agentId,sessionId:Q.sessionId};try{if(!Q.sessionId)throw Error("tasks requires a Hub session");let j=await $.resolveSessionDefaults(Q.sessionId);if(!j)throw Error("tasks could not resolve the current session");let Y=pc(J,j);switch(J.operation){case"create":{let V={type:K8(J.type,"type"),title:K8(J.title,"title"),description:J.description??void 0,instructions:K8(J.instructions,"instructions"),scope:Y,workspaceRoot:j.workspaceRoot,cwd:Y==="workspace"?(J.cwd??j.cwd)?.trim()||void 0:void 0,resourcePaths:J.resource_paths,priority:J.priority,assignee:J.assignee??void 0,modelSelection:Gz(J.model_selection)??j.modelSelection,mode:J.mode??void 0,systemPrompt:J.system_prompt??void 0,maxIterations:J.max_iterations??void 0,timeoutSeconds:J.timeout_seconds??void 0,availableAt:J.available_at,expiresAt:K8(J.expires_at,"expires_at"),automationEligible:J.automation_eligible,createdBy:W,originSessionId:Q.sessionId,originTaskId:j.originTaskId},B={ok:!0,operation:J.operation,task:await $.manager.createTask(V)};return cj($,J,Q,!0),B}case"update":{let V=K8(J.task_id,"task_id");if(Hz(await $.manager.getTask(V),j),!J.expected_revision)throw Error("expected_revision is required for update");let B={ok:!0,operation:J.operation,task:await $.manager.updateTask({taskId:V,expectedRevision:J.expected_revision,type:J.type,title:J.title,description:J.description,instructions:J.instructions,scope:Y,workspaceRoot:j.workspaceRoot??null,cwd:J.cwd,resourcePaths:J.resource_paths,priority:J.priority,assignee:J.assignee,modelSelection:Gz(J.model_selection),mode:J.mode,systemPrompt:J.system_prompt,maxIterations:J.max_iterations,timeoutSeconds:J.timeout_seconds,availableAt:J.available_at,expiresAt:J.expires_at,automationEligible:J.automation_eligible,updatedBy:W})};return cj($,J,Q,!0),B}case"list":{let V={statuses:J.statuses,types:J.types,scope:Y,workspaceRoot:j.workspaceRoot,priorities:J.priorities,automationEligible:J.automation_eligible,limit:J.limit};return{ok:!0,operation:J.operation,tasks:await $.manager.listTasks(V)}}case"get":{let V=await $.manager.getTask(K8(J.task_id,"task_id"));return Hz(V,j),{ok:!0,operation:J.operation,task:V}}}}catch(j){return cj($,J,Q,!1),{ok:!1,operation:J.operation,error:{code:"task_operation_failed",message:j instanceof Error?j.message:String(j)}}}}var L5="tasks",Lz='# Tasks\n\nUse the `tasks` tool to manage durable Todo items and explicitly requested scheduled agent work.\n\n- Use `kind: "todo"` for meaningful follow-ups, handoffs, ideas, reminders, and other work that should remain visible after this session. This includes useful work you identify and suggest proactively. Agent-created Todos require user approval; Todos created directly by the user are approved immediately. Todo `available_at` controls availability in the list; it never schedules execution.\n- Use `kind: "scheduled"` only when the user explicitly asks Cline to execute work once at a future time or on a recurrence. One-time schedules require an exact future ISO 8601 `run_at` with an offset or Z. Recurring schedules require a five-field `cron_pattern` and may include an IANA `timezone`.\n- "Remind me" is ambiguous: ask whether the user wants a reviewed Todo note or an agent to execute work at that time when intent is unclear.\n- Never create both kinds for the same request unless the user explicitly requests both. Check existing items before creating a likely duplicate.\n- Todo instructions and scheduled prompts must be self-contained. Include the goal, constraints, relevant project context, and expected output.\n- Never approve or start a Todo yourself. Only mutate schedules from an interactive user session, and only update, pause, resume, delete, or run one immediately when the user asks.',ac=mZ.extend({kind:G8.literal("todo")}).strict(),nc=G5.extend({kind:G8.literal("scheduled")}).strict(),Dz=G8.discriminatedUnion("kind",[ac,nc]),oc=G8.object({...G5.shape,...mZ.shape,kind:G8.enum(["todo","scheduled"]),operation:G8.enum(["create","update","list","get","pause","resume","delete","run_now"])}).strict();function uj($){return ic({name:L5,description:'Create and manage reviewed Todo items or explicitly requested scheduled agent work. Use kind "todo" for durable Agenda items that require user or automation approval. Use kind "scheduled" for one-time or recurring autonomous execution. Todo available_at is not an execution timer; schedules use run_at or cron_pattern.',inputSchema:rc(oc),retryable:!1,maxRetries:0,execute:async(Z,Q)=>{let X=Dz.safeParse(Z);if(!X.success)return{ok:!1,kind:typeof Z==="object"&&Z!==null&&"kind"in Z&&(Z.kind==="todo"||Z.kind==="scheduled")?Z.kind:void 0,error:{code:"invalid_tasks_input",message:X.error.issues[0]?.message??"Invalid tasks input"}};if(X.data.kind==="todo")return{kind:"todo",...await Fz($.todo,X.data,Q)};return{kind:"scheduled",...await hj($.scheduled,X.data,Q)}}})}function dj(){return{name:"hub-task-guidance",manifest:{capabilities:["rules"]},setup:($)=>{$.registerRule({id:"hub:task-guidance",content:Lz,whenToolAvailable:L5})}}}import{resolveClineBuildEnv as sc}from"@cline/shared";function tc($,Z){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(Q?`Failed to connect to hub at ${Z} (${Q} event before socket open).`:`Failed to connect to hub at ${Z}.`)}var ec="cline-hub-auth.";function $u($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function Zu($,Z){let Q=new URL($),X=new URL(Z);return Q.search="",Q.hash="",X.search="",X.hash="",Q.toString()===X.toString()}function _z(){return sc()==="production"?v1():P1()}async function Qu($){let Z=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),Z)return Z;let Q=_z(),X=await x0(Q.discoveryPath);if(X?.url&&Zu($.toString(),X.url))return X.authToken;return}async function Xu($={}){let Z=k2($);if(!$u($)){let Q=_z(),X=await x0(Q.discoveryPath);if(X?.url)return X.url}return W$(Z.host,Z.port,Z.pathname)}async function zz($){return await new Promise((Z,Q)=>{(async()=>{let X=new URL($),J=await Qu(X);X.hash="";let W=new WebSocket(X.toString(),J?[`${ec}${J}`]:void 0),j=new Map,Y=0;W.addEventListener("open",()=>{Z({send(V){let B=V.requestId??`hub-client-${++Y}`;return new Promise((K,G)=>{j.set(B,{resolve:K,reject:G});let H={kind:"command",envelope:{...V,requestId:B}};W.send(JSON.stringify(H))})},close(){W.close()}})}),W.addEventListener("message",(V)=>{let B=JSON.parse(String(V.data));if(B.kind==="reply"&&B.envelope.requestId){let K=j.get(B.envelope.requestId);if(K)j.delete(B.envelope.requestId),K.resolve(B.envelope)}}),W.addEventListener("close",()=>{for(let V of j.values())V.reject(Error("Hub connection closed"));j.clear()}),W.addEventListener("error",(V)=>{Q(tc(V,$))})})().catch(Q)})}async function lQ0($){try{return(await zz($)).close(),!0}catch{return!1}}async function pQ0($,Z){let Q=await Xu($),X=await zz(Q);try{return await X.send({version:Z.version??"v1",clientId:Z.clientId??"hub-client",...Z})}finally{X.close()}}import{existsSync as Ju}from"node:fs";import{isHubDaemonProcess as Wu,resolveClineBuildEnv as ju}from"@cline/shared";var Yu=1e4,Vu="CLINE_HUB_BUILD_WATCH_INTERVAL_MS";function Bu(){let $=Number(process.env[Vu]);return Number.isFinite($)&&$>0?$:Yu}function Ku(){return ju()==="production"?v1():P1()}function Gu($){try{return Ju(`${$}.lock`)}catch{return!1}}async function Hu(){let $=Ku();if(Gu($.discoveryPath))return;let Z=await x0($.discoveryPath).catch(()=>{return});if(!Z?.url)return;let Q=await J$(Z.url).catch(()=>{return});if(!Q?.url)return;let X=h1(),J=w4(Q,X);if(J.compatible)return;let W=(j)=>({url:Q.url,reason:j,hubBuildId:Q.buildId,hubCoreVersion:Q.coreVersion,expectedBuildId:X});if(J.reason==="unsupported_protocol")return W("unsupported_protocol");if(vJ(gJ(),Q)>0)return W("outdated_hub");return W("build_mismatch")}function sQ0($){if(Wu()||process.env.CLINE_HUB_PORT?.trim())return()=>{};let Z=$.intervalMs??Bu(),Q,X,J=!1,W=setInterval(()=>{if(J)return;J=!0,Hu().then((j)=>{if(!j){Q=void 0,X=void 0;return}let Y=`${j.reason}:${j.hubBuildId??""}`;if(Y===Q)return;if(j.reason==="outdated_hub"&&X!==Y){X=Y;return}X=void 0,Q=Y,$.onMismatch(j)}).catch(()=>{return}).finally(()=>{J=!1})},Z);return W.unref?.(),()=>{clearInterval(W)}}function lj($){return $?JSON.parse(JSON.stringify($)):{}}function cZ($){let Z=$?.session&&typeof $.session==="object"?$.session:void 0;if(!Z)return;let Q=Z.metadata&&typeof Z.metadata==="object"?lj(Z.metadata):void 0;return{sessionId:typeof Z.sessionId==="string"?Z.sessionId:"",parentSessionId:typeof Q?.parentSessionId==="string"?Q.parentSessionId:void 0,status:typeof Z.status==="string"?Z.status:void 0,messagesPath:typeof Q?.messagesPath==="string"?Q.messagesPath:void 0,metadata:Q}}function Oz($,Z){return $.error?.message??`hub command failed: ${Z}`}function Uu($){let Z=lj($);if(typeof Z.error==="string"&&Z.error.trim())return{...Z,error:Z.error.trim()};let Q=Z.result&&typeof Z.result==="object"?Z.result:void 0;if(typeof Q?.text==="string"&&Q.text.trim())return{...Z,error:Q.text.trim()};let X=Q?.error&&typeof Q.error==="object"?Q.error:void 0;if(typeof X?.message==="string"&&X.message.trim())return{...Z,error:X.message.trim()};return Z}function Nz($){let Z=$?.sessionId;return typeof Z==="string"&&Z.trim()?Z.trim():void 0}function Fu($){let Z=$?.checkpoint;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error("hub checkpoint restore returned no checkpoint");let Q=Z;if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return Q}function Lu($){let Z=lj($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||Nz(Z)||"",eventType:"schedule.execution.completed",payload:Z};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||Nz(Z)||"",eventType:"schedule.execution.failed",payload:Z};let Q=$.sessionId?.trim();if(!Q)return;switch($.event){case"iteration.started":return{sessionId:Q,eventType:"runtime.chat.iteration_start",payload:Z};case"iteration.finished":return{sessionId:Q,eventType:"runtime.chat.iteration_end",payload:Z};case"assistant.delta":return{sessionId:Q,eventType:"runtime.chat.text_delta",payload:Z};case"assistant.media":return{sessionId:Q,eventType:"runtime.chat.media",payload:Z};case"usage.updated":return{sessionId:Q,eventType:"runtime.chat.usage",payload:Z};case"session.notice":return{sessionId:Q,eventType:"runtime.chat.notice",payload:Z};case"tool.started":return{sessionId:Q,eventType:"runtime.chat.tool_call_start",payload:Z};case"tool.updated":return{sessionId:Q,eventType:"runtime.chat.tool_call_update",payload:Z};case"tool.finished":return{sessionId:Q,eventType:"runtime.chat.tool_call_end",payload:Z};case"approval.requested":return{sessionId:Q,eventType:"approval.requested",payload:Z};case"run.aborted":return{sessionId:Q,eventType:"runtime.chat.aborted",payload:Z};case"run.failed":return{sessionId:Q,eventType:"runtime.chat.failed",payload:Uu($.payload)};case"run.completed":return{sessionId:Q,eventType:"runtime.chat.completed",payload:Z};default:return}}class Du{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new j$({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()}async taskCommand($,Z){return await this.ensureMetadataApplied(),(await this.client.command($,Z)).payload??{}}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession($){await this.ensureMetadataApplied();let Z=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),Q=cZ(Z.payload);if(!Q?.sessionId)throw Error("hub session create returned no session id");return{sessionId:Q.sessionId,startResult:{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}}}async sendRuntimeSession($,Z,Q){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:Z.prompt,mode:Z.config.mode,attachments:Z.attachments,delivery:Z.delivery,timeoutSeconds:Z.config.timeoutSeconds},$,Q)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let Z;try{Z=await this.client.command("session.get",void 0,$)}catch(Q){if(I$(Q))return;throw Q}return cZ(Z.payload)}async readMessages($){let Z=$.trim();if(!Z)return[];await this.ensureMetadataApplied();let Q=await this.client.command("session.messages",{sessionId:Z},Z);if(!Q.ok)throw Error(Oz(Q,"session.messages"));let X=Q.payload?.messages;return Array.isArray(X)?X:[]}async restore($){let Z=$.sessionId.trim();if(!Z)throw Error("sessionId is required");let Q=$.restore?.messages!==!1;if(Q&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let X=$.config,J=await this.client.command("session.restore",{sessionId:Z,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...X?{workspaceRoot:X.workspaceRoot,cwd:X.cwd,sessionConfig:{providerId:X.provider,modelId:X.model,apiKey:X.apiKey,cwd:X.cwd??X.workspaceRoot,workspaceRoot:X.workspaceRoot,systemPrompt:X.systemPrompt??"",mode:X.mode??"act",rules:X.rules,maxIterations:X.maxIterations,enableTools:X.enableTools,enableSpawnAgent:X.enableSpawn!==!1,enableAgentTeams:X.enableTeams!==!1,disableMcpSettingsTools:X.disableMcpSettingsTools,missionLogIntervalSteps:X.missionStepInterval,missionLogIntervalMs:X.missionTimeIntervalMs},metadata:{source:X.source??"cli",provider:X.provider,model:X.model,enableTools:X.enableTools,enableSpawn:X.enableSpawn,enableTeams:X.enableTeams,prompt:void 0,interactive:X.interactive!==!1},runtimeOptions:{mode:X.mode,systemPrompt:X.systemPrompt,maxIterations:X.maxIterations,enableTools:X.enableTools,enableSpawn:X.enableSpawn,enableTeams:X.enableTeams,autoApproveTools:X.autoApproveTools,configExtensions:X.configExtensions},modelSelection:{provider:X.provider,model:X.model,apiKey:X.apiKey},toolPolicies:X.toolPolicies}:{}},Z);if(!J.ok)throw Error(Oz(J,"session.restore"));let W=cZ(J.payload);if(Q&&!W?.sessionId)throw Error("hub checkpoint restore returned no session id");let j=Array.isArray(J.payload?.messages)?J.payload.messages:void 0,Y=Fu(J.payload);return{sessionId:W?.sessionId,startResult:W?.sessionId?{sessionId:W.sessionId,manifestPath:"",messagesPath:W.messagesPath??""}:void 0,...j?{messages:j}:{},checkpoint:Y}}async listSessions($){await this.ensureMetadataApplied();let Z=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(Z.payload?.sessions)?Z.payload?.sessions:[]).map((X)=>cZ({session:X})).filter((X)=>Boolean(X?.sessionId))}async deleteSession($,Z=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:Z})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,Z){let Q=new Set(($.sessionIds??[]).map((J)=>J.trim()).filter(Boolean)),X=this.client.subscribe((J)=>{let W=Lu(J);if(!W)return;if(Q.size>0&&!Q.has(W.sessionId))return;Z.onEvent?.(W)});return this.ensureMetadataApplied().catch((J)=>{Z.onError?.(J instanceof Error?J:Error(String(J)))}),X}streamTeamProgress($,Z){let Q=this.client.subscribe((X)=>{if(X.event!=="team.progress"||!X.payload)return;Z.onProjection?.(X.payload)});return this.ensureMetadataApplied().catch((X)=>{Z.onError?.(X instanceof Error?X:Error(String(X)))}),Q}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.list");return Array.isArray(Z.payload?.schedules)?Z.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,Z){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...Z})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,Z){await this.ensureMetadataApplied();let Q=await this.client.command("schedule.list_executions",{scheduleId:$,limit:Z});return Array.isArray(Q.payload?.executions)?Q.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let Z=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(Z.payload?.upcoming)?Z.payload?.upcoming:[]}async createTask($){return(await this.taskCommand("task.create",$)).task}async listTasks($={}){let Z=await this.taskCommand("task.list",$);return Array.isArray(Z.tasks)?Z.tasks:[]}async getTask($){return(await this.taskCommand("task.get",{taskId:$})).task}async updateTask($){return(await this.taskCommand("task.update",$)).task}async approveTask($,Z){return(await this.taskCommand("task.approve",{taskId:$,expectedRevision:Z})).task}async cancelTask($,Z,Q){return(await this.taskCommand("task.cancel",{taskId:$,reason:Q,expectedRevision:Z})).task}async runTask($,Z){return await this.taskCommand("task.run",{taskId:$,expectedRevision:Z})}async getTaskAutomation(){return(await this.taskCommand("task.automation.get",{})).policy}async setTaskAutomation($){return(await this.taskCommand("task.automation.set",{policy:$})).policy}}class _u{client;constructor($){this.client=new j$({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let Z=await this.client.command("session.list",{limit:$});return Array.isArray(Z.payload?.sessions)?Z.payload.sessions:[]}async toggleSetting($){let Z=await this.client.command("settings.toggle",$);if(!Z.ok)throw Error(Z.error?.message??"settings.toggle failed");return Z.payload}subscribeUI($){return this.client.subscribe((Z)=>{switch(Z.event){case"ui.notify":$.onNotify?.(Z.payload);break;case"ui.show_window":$.onShowWindow?.(Z.payload);break;case"hub.client.registered":$.onClientRegistered?.(Z.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(Z.payload??{});break;case"session.created":$.onSessionCreated?.(Z.payload??{});break;case"session.updated":$.onSessionUpdated?.(Z.payload??{});break;case"session.detached":$.onSessionDetached?.(Z.payload??{});break}})}}import{normalizeProviderId as zu}from"@cline/llms";function Ou($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((Z)=>({name:Z.name,input:Z.input,output:Z.output,error:Z.error,durationMs:Z.durationMs}))}}function Nu($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function K30($={}){let Z=async(X)=>X,Q=new s$({sessionService:new r$(new p$),capabilities:{toolExecutors:{submit:Z}},fetch:$.fetch,telemetry:$.telemetry});return{async startSession(X){let J=(X.cwd?.trim()||X.workspaceRoot).trim(),W=await Q.startSession({source:Z0.CORE,mode:"automation",sessionMetadata:k0(void 0,{mode:"automation",trigger:X.source}),interactive:!1,config:{providerId:zu(X.provider),modelId:X.model,apiKey:X.apiKey?.trim()||void 0,cwd:J,workspaceRoot:X.workspaceRoot,systemPrompt:X.systemPrompt??"",mode:Nu(X),maxIterations:X.maxIterations,enableTools:X.enableTools!==!1,enableSpawnAgent:X.enableSpawn!==!1,enableAgentTeams:X.enableTeams!==!1,disableMcpSettingsTools:X.disableMcpSettingsTools,missionLogIntervalSteps:X.missionStepInterval,missionLogIntervalMs:X.missionTimeIntervalMs},toolPolicies:X.toolPolicies??{"*":{autoApprove:X.autoApproveTools!==!1}},localRuntime:{configExtensions:X.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(X,J){let W=await Q.runTurn({sessionId:X,prompt:J.prompt,userImages:J.attachments?.userImages,userFiles:J.attachments?.userFiles?.map((j)=>j.content)});if(!W)throw Error("local hub schedule runtime returned no turn result");return{result:Ou(W)}},async abortSession(X){return await Q.abort(X,Error("hub schedule abort")),{applied:!0}},async stopSession(X){return await Q.stopSession(X),{applied:!0}}}}import{resolveClineBuildEnv as zN}from"@cline/shared";function qu($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.map((Q)=>{if(Q&&typeof Q==="object"&&"type"in Q&&Q.type==="text"&&"text"in Q&&typeof Q.text==="string")return Q.text.trim();return""}).filter(Boolean).join(`
793
+ `).trim()||void 0}var qz=120,pj="...";function ij($){let Z=$.trim();if(!Z)return"";if(Buffer.byteLength(Z,"utf8")<=qz)return Z;let Q=qz-Buffer.byteLength(pj,"utf8");if(Q<=0)return pj;let X="";for(let J of Z){if(Buffer.byteLength(X+J,"utf8")>Q)break;X+=J}return`${X}${pj}`}async function Az($){let Z=$?.sessionId?.trim()||"unknown",Q=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,J=[...await c$(Q)].reverse().find((V)=>V.role==="assistant"),W=J?qu(J.content):void 0,j=$?.workspaceRoot?.trim()||"workspace",Y=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():j;return{title:`Task completed (${Z})`,body:ij(W&&W.length>0?W:Y.length>0?Y:j),severity:"info"}}import{resolve as gl}from"node:path";import{CLINE_DEFAULT_MODEL_ID as ml,captureSdkError as eZ,createSessionId as MY,HUB_CLIENT_TOOL_APPROVAL_CAPABILITY as cl}from"@cline/shared";import{isChatWorkspacePath as ul}from"@cline/shared/storage";import{existsSync as WY,realpathSync as ru,statSync as au,watch as nu}from"node:fs";import{relative as ou}from"node:path";import{createSessionId as lz,noopBasicLogger as su}from"@cline/shared";import{existsSync as f1,linkSync as bu,lstatSync as sj,mkdirSync as ku,readdirSync as xu,readFileSync as yu,realpathSync as bz,renameSync as Iu,rmSync as kz,writeFileSync as hu}from"node:fs";import{basename as vu,dirname as gu,isAbsolute as ej,join as tj,relative as yz,resolve as xz,sep as mu}from"node:path";import{resolveTaskSpecsDir as cu}from"@cline/shared/storage";import{createHash as Mu}from"node:crypto";import fz from"yaml";import{existsSync as rj,realpathSync as Tz}from"node:fs";import{dirname as Au,isAbsolute as aj,relative as nj,resolve as Mz,sep as Tu}from"node:path";function uZ($){return $?.trim()||void 0}function Rz($,Z){let Q=nj($,Z);return Q===""||!Q.startsWith(`..${Tu}`)&&Q!==".."&&!aj(Q)}function Eu($,Z,Q){if(!rj($))return;let X=Tz($),J=Z;while(!rj(J)){let j=Au(J);if(j===J)break;J=j}if(!rj(J))return;let W=Tz(J);if(!Rz(X,W))throw Error(`${Q} escapes the workspace through a symbolic link`)}function Ez($,Z,Q,X){let J=Mz($,aj(Z)?nj($,Z):Z);if(!Rz($,J)||!X&&J===$)throw Error(`${Q} must stay within the task workspace`);return Eu($,J,Q),J}function t$($){let Z=$.resourcePaths??[];if($.scope==="global"){if(uZ($.workspaceRoot))throw Error("global tasks cannot set workspaceRoot");if(uZ($.cwd))throw Error("global tasks cannot set cwd");if(Z.some((V)=>V.trim()))throw Error("global tasks cannot reference workspace files");return{resourcePaths:[]}}let Q=uZ($.workspaceRoot);if(!Q)throw Error("workspaceRoot is required for workspace tasks");let X=Mz(Q),J=uZ($.cwd),W=J?Ez(X,J,"cwd",!0):void 0,j=[],Y=new Set;for(let V of Z){let B=V.trim();if(!B)throw Error("resourcePaths must contain only non-empty paths");if(aj(B)||B.split(/[\\/]+/u).includes(".."))throw Error("resourcePaths must be workspace-relative without '..'");let K=Ez(X,B,"resourcePaths",!1),G=nj(X,K);if(!Y.has(G))Y.add(G),j.push(G)}return{workspaceRoot:X,cwd:W,resourcePaths:j}}var Ru=new Set(["suggestion","follow-up","todo","handoff","idea","reminder"]),Cu=new Set(["status","instructions","revision","approvedRevision","createdBy","updatedBy","currentRunId","lastRunId","lastSessionId","error","createdAt","updatedAt","completedAt","archivedAt"]),Pu=new Set(["taskId","type","priority","title","description","availableAt","expiresAt","cwd","resourcePaths","assignee","modelSelection","mode","systemPrompt","maxIterations","timeoutSeconds","automationEligible"]);function fu($){let Z=$.replace(/\r\n/g,`
794
794
  `);if(!Z.startsWith(`---
795
795
  `))return{body:Z};let Q=Z.slice(4),X=Q.indexOf(`
796
796
  ---`);if(X===-1)return{body:Z};let J=Q.slice(X+4);if(J.startsWith(`
@@ -955,7 +955,7 @@ ${$.instructions.trim()}
955
955
  ${Z.length?`WHERE ${Z.join(" AND ")}`:""}
956
956
  ORDER BY accepted_seq DESC LIMIT ?;`).all(...Q).map(R5)}recoverOnStartup(){let $=this.db.prepare("SELECT * FROM hub_runs WHERE state = 'running' ORDER BY accepted_seq;").all().map(R5);this.db.prepare(`UPDATE hub_runs SET state = 'interrupted', ended_at = ?,
957
957
  error = 'Hub daemon exited before the run finished.'
958
- WHERE state = 'running';`).run(Date.now());let Z=this.db.prepare("SELECT * FROM hub_runs WHERE state = 'queued' ORDER BY accepted_seq;").all().map(R5);return this.db.prepare("DELETE FROM hub_runs WHERE ended_at IS NOT NULL AND ended_at < ?;").run(Date.now()-Vl),{interrupted:$.map((Q)=>({...Q,state:"interrupted"})),requeued:Z}}close(){if(this.closed)return;this.closed=!0,this.db.close?.()}}function R5($){let Z={};try{let Q=JSON.parse(String($.input_json));if(Q&&typeof Q==="object"&&!Array.isArray(Q))Z=Q}catch{}return{runId:String($.run_id),sessionId:String($.session_id),state:String($.state),input:Z,clientId:typeof $.client_id==="string"?$.client_id:void 0,acceptedAt:Number($.accepted_at),startedAt:$.started_at===null?void 0:Number($.started_at),endedAt:$.ended_at===null?void 0:Number($.ended_at),error:typeof $.error==="string"?$.error:void 0}}var Kl="hub_draining",Gl=new Set(["session.create","session.restore","session.fork","run.start","session.send_input","run.enqueue"]);function MO($){return Gl.has($)}function RO($){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Kl,message:"Hub is draining and refuses new mutating work; retry once a hub is serving again.",details:{retryable:!0}}}}class _Y{ctx;queue;activeSessions=new Set;constructor($,Z){this.ctx=$;this.queue=Z}pump($){if(this.activeSessions.has($))return;this.activeSessions.add($),this.drainSession($).catch((Z)=>{p("error","run.queue.pump_failed",{sessionId:$,error:Z})}).finally(()=>{if(this.activeSessions.delete($),this.queue.nextQueued($))this.pump($)})}async drainSession($){for(;;){let Z=this.queue.nextQueued($);if(!Z)return;this.queue.markRunning(Z.runId),await this.execute(Z)}}async execute($){let Z={version:"v1",command:"run.start",requestId:$.runId,clientId:$.clientId,sessionId:$.sessionId,payload:{...$.input,sessionId:$.sessionId}};try{let Q=await M5(this.ctx,Z);if(Q.ok){let X=Q.payload?.result?.finishReason;this.queue.markTerminal($.runId,X==="aborted"?"aborted":X==="error"||X==="failed"?"failed":"completed",X==="error"?"Run finished with an error.":void 0)}else this.queue.markTerminal($.runId,"failed",Q.error?.message??"Run failed.")}catch(Q){this.queue.markTerminal($.runId,"failed",Q instanceof Error?Q.message:String(Q))}}}function CO($,Z,Q,X){let J=O0(Z);if(!J)return h(Z,"invalid_session_id","run.enqueue requires a sessionId");let W=Z.payload&&typeof Z.payload==="object"?Z.payload:{};if(!(typeof W.prompt==="string"?W.prompt:typeof W.input==="string"?W.input:"").trim())return h(Z,"invalid_session_input","run.enqueue requires a prompt string");let Y;try{Y=Q.admit(J,W,Z.clientId?.trim()||void 0)}catch(V){if(V instanceof oZ)return{version:Z.version,requestId:Z.requestId,ok:!1,error:{code:"run_admission_rejected",message:V.message,details:{retryable:!0}}};throw V}return $.publish($.buildEvent("run.enqueued",{runId:Y.runId,acceptedAt:Y.acceptedAt,queuePosition:Y.queuePosition,...Z.clientId?{clientId:Z.clientId}:{}},J)),X.pump(J),x(Z,{...Y})}function PO($,Z){let Q=O0($)||void 0,X=typeof $.payload?.limit==="number"&&Number.isFinite($.payload.limit)&&$.payload.limit>0?Math.floor($.payload.limit):void 0;return x($,{runs:Z.list({sessionId:Q,limit:X}).map((J)=>({runId:J.runId,sessionId:J.sessionId,state:J.state,acceptedAt:J.acceptedAt,startedAt:J.startedAt,endedAt:J.endedAt,error:J.error}))})}async function fO($,Z){switch(Z.type){case"chunk":return;case"agent_event":await Hl($,Z);return;case"hook":if(Z.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:Z.payload.toolName},Z.payload.sessionId));else if(Z.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:Z.payload.toolName},Z.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:Z.payload.sessionId,summary:Z.payload.summary,lastEvent:Z.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,Z.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:Z.payload.sessionId,prompts:Z.payload.prompts},Z.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:Z.payload.id,prompt:Z.payload.prompt,delivery:Z.payload.delivery,attachmentCount:Z.payload.attachmentCount,userImages:Z.payload.userImages,userFiles:Z.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:Z.payload.sessionId,prompt:Q},Z.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:Z.payload.sessionId,snapshot:Z.payload.snapshot},Z.payload.sessionId));return;case"status":{let[Q,X]=await Promise.all([i0($,Z.payload.sessionId),t0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...X?{snapshot:X}:{}},Z.payload.sessionId));return}case"ended":await Fl($,Z);return;default:return}}async function Hl($,Z){let{sessionId:Q,event:X}=Z.payload;if(X.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:X.iteration},Q));return}if(X.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:X.iteration,hadToolCalls:X.hadToolCalls,toolCallCount:X.toolCallCount},Q));return}if(X.type==="content_start"){if(X.contentType==="text"&&typeof X.text==="string"&&X.text.length>0){$.publish($.buildEvent("assistant.delta",{text:X.text},Q));return}if(X.contentType==="reasoning"){if(X.redacted&&!X.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof X.reasoning==="string"&&X.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:X.reasoning,redacted:X.redacted===!0},Q));return}if(X.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:X.toolCallId,toolName:X.toolName,input:X.input},Q));return}}if(X.type==="content_update"&&X.contentType==="tool"){$.publish($.buildEvent("tool.updated",{toolCallId:X.toolCallId,toolName:X.toolName,update:X.update},Q));return}if(X.type==="content_end"){switch(X.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:X.text},Q));break;case"media":if(X.media)$.publish($.buildEvent("assistant.media",{media:X.media},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:X.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:X.toolCallId,toolName:X.toolName,output:X.output,error:X.error},Q));break}return}if(X.type==="notice"){$.publish($.buildEvent("session.notice",{sessionId:Q,message:X.message,noticeType:X.noticeType,...X.displayRole?{displayRole:X.displayRole}:{},...X.reason?{reason:X.reason}:{},...X.metadata?{metadata:X.metadata}:{},agent:{kind:Z.payload.teamRole==="teammate"?"teammate":X.parentAgentId?"subagent":"lead",agentId:X.agentId,conversationId:X.conversationId,parentAgentId:X.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(X.type==="usage"){let J;try{J=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{J=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:X.inputTokens,outputTokens:X.outputTokens,cacheReadTokens:X.cacheReadTokens??0,cacheWriteTokens:X.cacheWriteTokens??0,totalCost:X.cost??0},totals:{inputTokens:X.totalInputTokens,outputTokens:X.totalOutputTokens,cacheReadTokens:X.totalCacheReadTokens??0,cacheWriteTokens:X.totalCacheWriteTokens??0,totalCost:X.totalCost??0},usage:J?.usage,aggregateUsage:J?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":X.parentAgentId?"subagent":"lead",agentId:X.agentId,conversationId:X.conversationId,parentAgentId:X.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(X.type==="done"){$.publish($.buildEvent("agent.done",{reason:X.reason,text:X.text,iterations:X.iterations,usage:X.usage},Q));return}if(X.type==="error")await Ul($,Z)}async function Ul($,Z){let{sessionId:Q,event:X}=Z.payload;if(X.type!=="error"||X.recoverable)return;if(X.parentAgentId||Z.payload.teamRole==="teammate")return;if(($.activeRpcTurnCountBySession.get(Q)??0)>0)return;let J=X.error instanceof Error?X.error.message:String(X.error),W=await t0($,Q);$.publish($.buildEvent("run.failed",{reason:"error",...J?{error:J,text:J}:{},...W?{snapshot:W}:{}},Q))}async function Fl($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),X=Q===Z.payload.reason||Q==="run.start.reply";if(X)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[J,W]=await Promise.all([i0($,Z.payload.sessionId),t0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let j=await Az(J);$.publish($.buildEvent("ui.notify",j,Z.payload.sessionId))}if(X)return;$.publish($.buildEvent(Z.payload.reason==="aborted"?"run.aborted":Z.payload.reason==="error"||Z.payload.reason==="failed"?"run.failed":"run.completed",{reason:Z.payload.reason,...W?{snapshot:W}:{}},Z.payload.sessionId))}import{createSessionId as xO,parseRuntimeConfigExtensions as yO,ReasoningEffortSchema as El}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as XJ0,HUB_COMPACTION_CAPABILITY as JJ0,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as WJ0,HUB_HOOK_CAPABILITY_PREFIX as jJ0,HUB_MISTAKE_LIMIT_CAPABILITY as YJ0,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as VJ0,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as BJ0,isHubToolExecutorName as Ll}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as LJ0,HUB_COMPACTION_CAPABILITY as DJ0,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as _J0,HUB_HOOK_CAPABILITY_PREFIX as zJ0,HUB_MISTAKE_LIMIT_CAPABILITY as OJ0,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as NJ0,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as qJ0}from"@cline/shared";var Dl=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function n2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function _l($,Z){let Q=typeof $.name==="string"?$.name.trim():"",X=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",W=n2($.inputSchema);if(!Q||!X||!W||!J||Z.has(J))return;return Z.add(J),{kind:"tool",capabilityName:J,name:Q,description:X,inputSchema:W,...n2($.lifecycle)?{lifecycle:n2($.lifecycle)}:{}}}function OY($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let X of $){if(!X||typeof X!=="object"||Array.isArray(X))continue;let J=X,W=J.kind,j=typeof J.capabilityName==="string"?J.capabilityName.trim():"";if(!j||Q.has(j))continue;if(W==="tool"){let Y=_l(J,Q);if(Y)Z.push(Y);continue}if(W==="toolExecutor"){let Y=J.executor;if(!Ll(Y))continue;Q.add(j),Z.push({kind:"toolExecutor",capabilityName:j,executor:Y});continue}if(W==="hook"){let Y=typeof J.name==="string"?J.name.trim():"";if(!Y)continue;Q.add(j),Z.push({kind:"hook",capabilityName:j,name:Y});continue}if(W==="compaction"){Q.add(j),Z.push({kind:"compaction",capabilityName:j,...n2(J.config)?{config:n2(J.config)}:{}});continue}if(W==="checkpoint"){Q.add(j),Z.push({kind:"checkpoint",capabilityName:j,...n2(J.config)?{config:n2(J.config)}:{}});continue}if(W==="mistakeLimit"){Q.add(j),Z.push({kind:"mistakeLimit",capabilityName:j});continue}if(W==="userInstructionService")Q.add(j),Z.push({kind:"userInstructionService",capabilityName:j})}return Z}function SO($){let Z=$.metadata?{...$.metadata}:void 0;return{sessionId:$.sessionId,agentId:$.agentId,conversationId:$.conversationId,runId:$.runId,iteration:$.iteration,toolCallId:$.toolCallId,metadata:Z&&Object.keys(Z).length>0?Z:void 0}}function bO($){return Object.hasOwn($,"update")?$.update:$}function C5($){return $.trim().replace(/^\/+/,"").toLowerCase()}function zl($){let Z=($??[]).map(C5).filter(Boolean);return Z.length>0?new Set(Z):void 0}function Ol($,Z,Q){if(!Q)return!0;let X=C5($),J=C5(Z),W=X.includes(":")?X.split(":").at(-1)??X:X,j=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(X)||Q.has(J)||Q.has(W)||Q.has(j)}function zY($,Z){let Q=zl(Z);return $.records.skill.map((X)=>({id:X.id,name:X.item.name,description:"description"in X.item&&typeof X.item.description==="string"?X.item.description:void 0,disabled:X.item.disabled===!0,skill:X.item})).filter((X)=>Ol(X.id,X.name,Q))}function wO($,Z){let Q=async(X,J)=>{let W=C5(X),Y=zY($,Z).filter((H)=>H.id===W||C5(H.name)===W||H.id.endsWith(`:${W}`)).filter((H)=>!H.disabled);if(Y.length!==1)return Y.length>1?`Skill "${X}" is ambiguous. Use one of: ${Y.map((H)=>H.id).join(", ")}`:`Skill "${X}" not found.`;let V=Y[0].skill,B=J?.trim(),K=B?`
958
+ WHERE state = 'running';`).run(Date.now());let Z=this.db.prepare("SELECT * FROM hub_runs WHERE state = 'queued' ORDER BY accepted_seq;").all().map(R5);return this.db.prepare("DELETE FROM hub_runs WHERE ended_at IS NOT NULL AND ended_at < ?;").run(Date.now()-Vl),{interrupted:$.map((Q)=>({...Q,state:"interrupted"})),requeued:Z}}close(){if(this.closed)return;this.closed=!0,this.db.close?.()}}function R5($){let Z={};try{let Q=JSON.parse(String($.input_json));if(Q&&typeof Q==="object"&&!Array.isArray(Q))Z=Q}catch{}return{runId:String($.run_id),sessionId:String($.session_id),state:String($.state),input:Z,clientId:typeof $.client_id==="string"?$.client_id:void 0,acceptedAt:Number($.accepted_at),startedAt:$.started_at===null?void 0:Number($.started_at),endedAt:$.ended_at===null?void 0:Number($.ended_at),error:typeof $.error==="string"?$.error:void 0}}var Kl="hub_draining",Gl=new Set(["session.create","session.restore","session.fork","run.start","session.send_input","run.enqueue"]);function MO($){return Gl.has($)}function RO($){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:Kl,message:"Hub is draining and refuses new mutating work; retry once a hub is serving again.",details:{retryable:!0}}}}class _Y{ctx;queue;activeSessions=new Set;constructor($,Z){this.ctx=$;this.queue=Z}pump($){if(this.activeSessions.has($))return;this.activeSessions.add($),this.drainSession($).catch((Z)=>{p("error","run.queue.pump_failed",{sessionId:$,error:Z})}).finally(()=>{if(this.activeSessions.delete($),this.queue.nextQueued($))this.pump($)})}async drainSession($){for(;;){let Z=this.queue.nextQueued($);if(!Z)return;this.queue.markRunning(Z.runId),await this.execute(Z)}}async execute($){let Z={version:"v1",command:"run.start",requestId:$.runId,clientId:$.clientId,sessionId:$.sessionId,payload:{...$.input,sessionId:$.sessionId}};try{let Q=await M5(this.ctx,Z);if(Q.ok){let X=Q.payload?.result?.finishReason;this.queue.markTerminal($.runId,X==="aborted"?"aborted":X==="error"||X==="failed"?"failed":"completed",X==="error"?"Run finished with an error.":void 0)}else this.queue.markTerminal($.runId,"failed",Q.error?.message??"Run failed.")}catch(Q){this.queue.markTerminal($.runId,"failed",Q instanceof Error?Q.message:String(Q))}}}function CO($,Z,Q,X){let J=O0(Z);if(!J)return h(Z,"invalid_session_id","run.enqueue requires a sessionId");let W=Z.payload&&typeof Z.payload==="object"?Z.payload:{};if(!(typeof W.prompt==="string"?W.prompt:typeof W.input==="string"?W.input:"").trim())return h(Z,"invalid_session_input","run.enqueue requires a prompt string");let Y;try{Y=Q.admit(J,W,Z.clientId?.trim()||void 0)}catch(V){if(V instanceof oZ)return{version:Z.version,requestId:Z.requestId,ok:!1,error:{code:"run_admission_rejected",message:V.message,details:{retryable:!0}}};throw V}return $.publish($.buildEvent("run.enqueued",{runId:Y.runId,acceptedAt:Y.acceptedAt,queuePosition:Y.queuePosition,...Z.clientId?{clientId:Z.clientId}:{}},J)),X.pump(J),x(Z,{...Y})}function PO($,Z){let Q=O0($)||void 0,X=typeof $.payload?.limit==="number"&&Number.isFinite($.payload.limit)&&$.payload.limit>0?Math.floor($.payload.limit):void 0;return x($,{runs:Z.list({sessionId:Q,limit:X}).map((J)=>({runId:J.runId,sessionId:J.sessionId,state:J.state,acceptedAt:J.acceptedAt,startedAt:J.startedAt,endedAt:J.endedAt,error:J.error}))})}async function fO($,Z){switch(Z.type){case"chunk":return;case"agent_event":await Hl($,Z);return;case"hook":if(Z.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:Z.payload.toolName},Z.payload.sessionId));else if(Z.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:Z.payload.toolName},Z.payload.sessionId));return;case"team_progress":{let Q={type:"team_progress_projection",version:1,sessionId:Z.payload.sessionId,summary:Z.payload.summary,lastEvent:Z.payload.lifecycle};$.publish($.buildEvent("team.progress",Q,Z.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:Z.payload.sessionId,prompts:Z.payload.prompts},Z.payload.sessionId));return;case"pending_prompt_submitted":{let Q={id:Z.payload.id,prompt:Z.payload.prompt,delivery:Z.payload.delivery,attachmentCount:Z.payload.attachmentCount,userImages:Z.payload.userImages,userFiles:Z.payload.userFiles};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:Z.payload.sessionId,prompt:Q},Z.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:Z.payload.sessionId,snapshot:Z.payload.snapshot},Z.payload.sessionId));return;case"status":{let[Q,X]=await Promise.all([i0($,Z.payload.sessionId),t0($,Z.payload.sessionId)]);if(Q)$.publish($.buildEvent("session.updated",{session:Q,...X?{snapshot:X}:{}},Z.payload.sessionId));return}case"ended":await Fl($,Z);return;default:return}}async function Hl($,Z){let{sessionId:Q,event:X}=Z.payload;if(X.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:X.iteration},Q));return}if(X.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:X.iteration,hadToolCalls:X.hadToolCalls,toolCallCount:X.toolCallCount},Q));return}if(X.type==="content_start"){if(X.contentType==="text"&&typeof X.text==="string"&&X.text.length>0){$.publish($.buildEvent("assistant.delta",{text:X.text},Q));return}if(X.contentType==="reasoning"){if(X.redacted&&!X.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},Q));return}if(typeof X.reasoning==="string"&&X.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:X.reasoning,redacted:X.redacted===!0},Q));return}if(X.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:X.toolCallId,toolName:X.toolName,input:X.input},Q));return}}if(X.type==="content_update"&&X.contentType==="tool"){$.publish($.buildEvent("tool.updated",{toolCallId:X.toolCallId,toolName:X.toolName,update:X.update},Q));return}if(X.type==="content_end"){switch(X.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:X.text},Q));break;case"media":if(X.media)$.publish($.buildEvent("assistant.media",{media:X.media},Q));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:X.reasoning},Q));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:X.toolCallId,toolName:X.toolName,output:X.output,error:X.error},Q));break}return}if(X.type==="notice"){$.publish($.buildEvent("session.notice",{sessionId:Q,message:X.message,noticeType:X.noticeType,...X.displayRole?{displayRole:X.displayRole}:{},...X.reason?{reason:X.reason}:{},...X.metadata?{metadata:X.metadata}:{},agent:{kind:Z.payload.teamRole==="teammate"?"teammate":X.parentAgentId?"subagent":"lead",agentId:X.agentId,conversationId:X.conversationId,parentAgentId:X.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(X.type==="usage"){let J;try{J=await $.sessionHost.getAccumulatedUsage?.(Q)}catch{J=void 0}$.publish($.buildEvent("usage.updated",{sessionId:Q,delta:{inputTokens:X.inputTokens,outputTokens:X.outputTokens,cacheReadTokens:X.cacheReadTokens??0,cacheWriteTokens:X.cacheWriteTokens??0,totalCost:X.cost??0},totals:{inputTokens:X.totalInputTokens,outputTokens:X.totalOutputTokens,cacheReadTokens:X.totalCacheReadTokens??0,cacheWriteTokens:X.totalCacheWriteTokens??0,totalCost:X.totalCost??0},usage:J?.usage,aggregateUsage:J?.aggregateUsage,agent:{kind:Z.payload.teamRole==="teammate"?"teammate":X.parentAgentId?"subagent":"lead",agentId:X.agentId,conversationId:X.conversationId,parentAgentId:X.parentAgentId,teamAgentId:Z.payload.teamAgentId,teamRole:Z.payload.teamRole}},Q));return}if(X.type==="done"){$.publish($.buildEvent("agent.done",{reason:X.reason,text:X.text,iterations:X.iterations,usage:X.usage},Q));return}if(X.type==="error")await Ul($,Z)}async function Ul($,Z){let{sessionId:Q,event:X}=Z.payload;if(X.type!=="error"||X.recoverable)return;if(X.parentAgentId||Z.payload.teamRole==="teammate")return;if(($.activeRpcTurnCountBySession.get(Q)??0)>0)return;let J=X.error instanceof Error?X.error.message:String(X.error),W=await t0($,Q);$.publish($.buildEvent("run.failed",{reason:"error",...J?{error:J,text:J}:{},...W?{snapshot:W}:{}},Q))}async function Fl($,Z){let Q=$.suppressNextTerminalEventBySession.get(Z.payload.sessionId),X=Q===Z.payload.reason||Q==="run.start.reply";if(X)$.suppressNextTerminalEventBySession.delete(Z.payload.sessionId);let[J,W]=await Promise.all([i0($,Z.payload.sessionId),t0($,Z.payload.sessionId)]);if(Z.payload.reason==="completed"){let j=await Az(J);$.publish($.buildEvent("ui.notify",j,Z.payload.sessionId))}if(X)return;$.publish($.buildEvent(Z.payload.reason==="aborted"?"run.aborted":Z.payload.reason==="error"||Z.payload.reason==="failed"?"run.failed":"run.completed",{reason:Z.payload.reason,...W?{snapshot:W}:{}},Z.payload.sessionId))}import{createSessionId as xO,parseRuntimeConfigExtensions as yO,ReasoningEffortSchema as El}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as WJ0,HUB_COMPACTION_CAPABILITY as jJ0,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as YJ0,HUB_HOOK_CAPABILITY_PREFIX as VJ0,HUB_MISTAKE_LIMIT_CAPABILITY as BJ0,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as KJ0,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as GJ0,isHubToolExecutorName as Ll}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as _J0,HUB_COMPACTION_CAPABILITY as zJ0,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as OJ0,HUB_HOOK_CAPABILITY_PREFIX as NJ0,HUB_MISTAKE_LIMIT_CAPABILITY as qJ0,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as AJ0,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as TJ0}from"@cline/shared";var Dl=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function n2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function _l($,Z){let Q=typeof $.name==="string"?$.name.trim():"",X=typeof $.description==="string"?$.description:"",J=typeof $.capabilityName==="string"?$.capabilityName.trim():"",W=n2($.inputSchema);if(!Q||!X||!W||!J||Z.has(J))return;return Z.add(J),{kind:"tool",capabilityName:J,name:Q,description:X,inputSchema:W,...n2($.lifecycle)?{lifecycle:n2($.lifecycle)}:{}}}function OY($){if(!Array.isArray($))return[];let Z=[],Q=new Set;for(let X of $){if(!X||typeof X!=="object"||Array.isArray(X))continue;let J=X,W=J.kind,j=typeof J.capabilityName==="string"?J.capabilityName.trim():"";if(!j||Q.has(j))continue;if(W==="tool"){let Y=_l(J,Q);if(Y)Z.push(Y);continue}if(W==="toolExecutor"){let Y=J.executor;if(!Ll(Y))continue;Q.add(j),Z.push({kind:"toolExecutor",capabilityName:j,executor:Y});continue}if(W==="hook"){let Y=typeof J.name==="string"?J.name.trim():"";if(!Y)continue;Q.add(j),Z.push({kind:"hook",capabilityName:j,name:Y});continue}if(W==="compaction"){Q.add(j),Z.push({kind:"compaction",capabilityName:j,...n2(J.config)?{config:n2(J.config)}:{}});continue}if(W==="checkpoint"){Q.add(j),Z.push({kind:"checkpoint",capabilityName:j,...n2(J.config)?{config:n2(J.config)}:{}});continue}if(W==="mistakeLimit"){Q.add(j),Z.push({kind:"mistakeLimit",capabilityName:j});continue}if(W==="userInstructionService")Q.add(j),Z.push({kind:"userInstructionService",capabilityName:j})}return Z}function SO($){let Z=$.metadata?{...$.metadata}:void 0;return{sessionId:$.sessionId,agentId:$.agentId,conversationId:$.conversationId,runId:$.runId,iteration:$.iteration,toolCallId:$.toolCallId,metadata:Z&&Object.keys(Z).length>0?Z:void 0}}function bO($){return Object.hasOwn($,"update")?$.update:$}function C5($){return $.trim().replace(/^\/+/,"").toLowerCase()}function zl($){let Z=($??[]).map(C5).filter(Boolean);return Z.length>0?new Set(Z):void 0}function Ol($,Z,Q){if(!Q)return!0;let X=C5($),J=C5(Z),W=X.includes(":")?X.split(":").at(-1)??X:X,j=J.includes(":")?J.split(":").at(-1)??J:J;return Q.has(X)||Q.has(J)||Q.has(W)||Q.has(j)}function zY($,Z){let Q=zl(Z);return $.records.skill.map((X)=>({id:X.id,name:X.item.name,description:"description"in X.item&&typeof X.item.description==="string"?X.item.description:void 0,disabled:X.item.disabled===!0,skill:X.item})).filter((X)=>Ol(X.id,X.name,Q))}function wO($,Z){let Q=async(X,J)=>{let W=C5(X),Y=zY($,Z).filter((H)=>H.id===W||C5(H.name)===W||H.id.endsWith(`:${W}`)).filter((H)=>!H.disabled);if(Y.length!==1)return Y.length>1?`Skill "${X}" is ambiguous. Use one of: ${Y.map((H)=>H.id).join(", ")}`:`Skill "${X}" not found.`;let V=Y[0].skill,B=J?.trim(),K=B?`
959
959
  <command-args>${B}</command-args>`:"",G=V.description?.trim()?`Description: ${V.description.trim()}
960
960
 
961
961
  `:"";return`<command-name>${V.name}</command-name>${K}
@@ -963,7 +963,7 @@ ${$.instructions.trim()}
963
963
  ${G}${V.instructions}
964
964
  </command-instructions>`};return Object.defineProperty(Q,"configuredSkills",{get:()=>zY($,Z).map(({skill:X,...J})=>J),enumerable:!0}),Q}function Nl($,Z,Q,X){let J={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},W=async()=>{let j=await X($,Q.capabilityName,{},Z);if(j?.snapshot)J=j.snapshot};return{start:W,stop:()=>{},refreshType:async()=>{await W()},listRecords:(j)=>[...J.records[j]],listRuntimeCommands:()=>[...J.runtimeCommands],resolveRuntimeSlashCommand:(j,Y)=>{if(!j.startsWith("/")||j.length<2)return j;let B=j.match(/^\/(\S+)/)?.[1];if(!B)return j;let K=F6(B),G=J.runtimeCommands.find((H)=>F6(H.name)===K);if(!G)return j;if(G.kind==="skill"&&Y?.expandSkillCommands===!1)return j;return`${G.instructions}${j.slice(B.length+1)}`},hasConfiguredSkills:(j)=>zY(J,j).some((Y)=>!Y.disabled),createSkillsExecutor:(j)=>wO(J,j),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((Y)=>Boolean(Y))},setup(Y){if(j.includeRules)Y.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>T9(J.records.rule.map((V)=>V.item).filter((V)=>V.disabled!==!0))});if(j.registerSkillsTool)Y.registerTool(A6(wO(J,j.allowedSkillNames)));for(let V of J.runtimeCommands.filter((B)=>B.kind==="skill"&&j.includeSkills||B.kind==="workflow"&&j.includeWorkflows))Y.registerCommand({name:V.name,description:V.description,handler:(B)=>{let K=B.trim();return K?`${V.instructions}
965
965
 
966
- ${K}`:V.instructions}})}})}}function ql($,Z,Q,X){let J=Q.map((W)=>[W.executor,async(...j)=>{let Y=j.at(-1),V=j.slice(0,-1);return(await X($,W.capabilityName,{executor:W.executor,args:V,context:SO(Y)},Z,Y.emitUpdate?(K)=>{Y.emitUpdate?.(bO(K))}:void 0))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function Al($,Z,Q,X){if(Q.length===0)return;return Q.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema,lifecycle:J.lifecycle,async execute(W,j){return(await X($,J.capabilityName,{toolName:J.name,input:W,context:SO(j)},Z,j.emitUpdate?(V)=>{j.emitUpdate?.(bO(V))}:void 0))?.result}}))}function Tl($,Z,Q,X){let J=new Map(Q.map((j)=>[j.name,j])),W={};for(let j of Dl){let Y=J.get(j);if(!Y)continue;W[j]=async(V)=>{return(await X($,Y.capabilityName,{context:V},Z))?.control}}return Object.keys(W).length>0?W:void 0}function NY($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),X=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),W=$.contributions.find((V)=>V.kind==="checkpoint"),j=$.contributions.find((V)=>V.kind==="mistakeLimit"),Y=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:ql($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...X.length>0?{hooks:Tl($.sessionId,$.targetClientId,X,$.requestCapability)}:{},...Q.length>0?{extraTools:Al($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...J?{compaction:{...$.sessionConfig?.compaction??{},...J.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,J.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...W?{checkpoint:{...$.sessionConfig?.checkpoint??{},...W.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...j?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:V},$.targetClientId))?.result}}:{},...Y?{userInstructionService:Nl($.sessionId,$.targetClientId,Y,$.requestCapability)}:{}}}}var kO="hubCapabilityOwnerClientId";function IO($,Z,Q){let X=j7(Q);return $.filter((J)=>(Z!=="yolo"||J.name!==L5)&&o8(J.name,X))}function sZ($){return typeof $==="string"&&$.trim().length>0?$.trim():void 0}function Ml($){if($===null)return null;let Z=El.safeParse($);return Z.success?Z.data:void 0}function Rl($){let Z=$2($)??{},Q={},X=sZ(Z.providerId);if(X)Q.providerId=X;let J=sZ(Z.modelId);if(J)Q.modelId=J;let W=sZ(Z.apiKey);if(W!==void 0)Q.apiKey=W;let j=sZ(Z.baseUrl);if(j!==void 0)Q.baseUrl=j;if(Z.headers&&typeof Z.headers==="object")Q.headers=Z.headers;if(Z.providerConfig&&typeof Z.providerConfig==="object")Q.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"thinking")){if(typeof Z.thinking==="boolean"||Z.thinking===null)Q.thinking=Z.thinking}if(Object.hasOwn(Z,"reasoningEffort")){let Y=Ml(Z.reasoningEffort);if(Y!==void 0)Q.reasoningEffort=Y}if(Object.hasOwn(Z,"thinkingBudgetTokens")){if(typeof Z.thinkingBudgetTokens==="number"&&Number.isFinite(Z.thinkingBudgetTokens)&&Z.thinkingBudgetTokens>0)Q.thinkingBudgetTokens=Math.trunc(Z.thinkingBudgetTokens);else if(Z.thinkingBudgetTokens===null)Q.thinkingBudgetTokens=null}return C6(Q)}function Cl($,Z){return $.sessionState.get(Z)?.createdByClientId}function Pl($){if(!$||!("autoApproveTools"in $)&&!(kO in $))return $;let Z={...$};return delete Z[kO],delete Z.autoApproveTools,Z}function hO($,Z){let Q=$2($),X=$2(Q?.["*"]);if(typeof X?.autoApprove==="boolean")return X.autoApprove;return Z.autoApproveTools===!0}function vO($){let Z=Cl($.ctx,$.sessionId);if(!Z)return h($.envelope,"session_wrong_client",`Session ${$.sessionId} has no owner`);if(Z!==$.clientId)return h($.envelope,"session_wrong_client",`Session ${$.sessionId} is owned by ${Z}`);return}async function qY($,Z,Q){let X=performance.now(),J={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};p("info","session.create.begin",J);let W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},j=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{},Y=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0,V=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{},B=Y$(W.initialCompactionState);if(typeof Y?.mode==="string")j.mode=Y.mode;else if(typeof V.mode==="string")j.mode=V.mode;if(typeof Y?.systemPrompt==="string")j.systemPrompt=Y.systemPrompt;else if(typeof V.systemPrompt==="string")j.systemPrompt=V.systemPrompt;if(Y?.checkpoint?.enabled===!0)j.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)j.checkpointEnabled=!0;j.autoApproveTools=hO(W.toolPolicies,V);let K=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},G=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():void 0,H=Z.clientId?.trim()||"hub-client",U=OY(V.clientContributions);p("info","session.create.contributions_parsed",{...J,clientId:H,workspaceRoot:G,cwd:typeof W.cwd==="string"?W.cwd:void 0,contributionCount:U.length});let L=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||xO(),D=yO(V.configExtensions);p("info","session.create.runtime_build.begin",{...J,sessionId:L,configExtensionCount:D?.length??0});let z=NY({sessionId:L,targetClientId:H,contributions:U,sessionConfig:Y,requestCapability:$.requestCapability});p("info","session.create.start_session.begin",{...J,sessionId:L,provider:Y?.providerId??(typeof K.provider==="string"?K.provider:typeof j.provider==="string"?j.provider:"hub"),model:Y?.modelId??(typeof K.model==="string"?K.model:typeof j.model==="string"?j.model:"hub")});let _=Y?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),O=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,initialCompactionState:B,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:D,...z.localRuntime,extensions:[...$.sessionExtensions??[],...z.localRuntime.extensions??[]],extraTools:IO([...$.sessionTools??[],...z.localRuntime.extraTools??[]],_,typeof j.source==="string"?j.source:void 0)},capabilities:{toolExecutors:z.toolExecutors,requestToolApproval:Q},config:{...Y??{},sessionId:L,providerId:Y?.providerId??(typeof K.provider==="string"?K.provider:typeof j.provider==="string"?j.provider:"hub"),modelId:Y?.modelId??(typeof K.model==="string"?K.model:typeof j.model==="string"?j.model:"hub"),apiKey:Y?.apiKey??(typeof K.apiKey==="string"?K.apiKey:void 0),cwd:Y?.cwd??(typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():G),workspaceRoot:Y?.workspaceRoot??G,systemPrompt:Y?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:_,maxIterations:Y?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:Y?.enableTools??V.enableTools!==!1,enableSpawnAgent:Y?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:Y?.enableAgentTeams??V.enableTeams!==!1,checkpoint:Y?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:Y?.teamName??(typeof j.teamName==="string"?j.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});p("info","session.create.start_session.end",{...J,sessionId:O.sessionId,elapsedMs:Math.round(performance.now()-X),hasImmediateResult:!!O.result}),YY($,O.sessionId,H,"creator",{interactive:j.interactive!==!1}),p("info","session.create.read_records.begin",{...J,sessionId:O.sessionId});let[A,q]=await Promise.all([i0($,O.sessionId),t0($,O.sessionId)]);if(p("info","session.create.read_records.end",{...J,sessionId:O.sessionId,hasSession:!!A,hasSnapshot:!!q,elapsedMs:Math.round(performance.now()-X)}),A)$.publish($.buildEvent("session.created",{session:A,...q?{snapshot:q}:{}},O.sessionId));return p("info","session.create.reply",{...J,sessionId:O.sessionId,elapsedMs:Math.round(performance.now()-X)}),x(Z,{session:A,...q?{snapshot:q}:{}})}async function gO($,Z,Q){let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof X.sessionId==="string"?X.sessionId.trim():Z.sessionId?.trim()||"",W=X.checkpointRunCount;if(!J)return h(Z,"invalid_restore","session.restore requires a session id");let j=X.restore&&typeof X.restore==="object"?X.restore:{},Y=j.messages!==!1;if(typeof W!=="number")return h(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0;if(Y&&!V)return h(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let B=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{},K=Y$(X.initialCompactionState),G=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{};if(typeof V?.mode==="string")G.mode=V.mode;else if(typeof B.mode==="string")G.mode=B.mode;if(typeof V?.systemPrompt==="string")G.systemPrompt=V.systemPrompt;else if(typeof B.systemPrompt==="string")G.systemPrompt=B.systemPrompt;if(V?.checkpoint?.enabled===!0)G.checkpointEnabled=!0;else if(B.checkpointEnabled===!0)G.checkpointEnabled=!0;G.autoApproveTools=hO(X.toolPolicies,B);let H=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},U=Z.clientId?.trim()||"hub-client",F=OY(B.clientContributions),D=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||xO(),z=yO(B.configExtensions),_=NY({sessionId:D,targetClientId:U,contributions:F,sessionConfig:V,requestCapability:$.requestCapability}),A=await new Q8().restoreCheckpoint({sessionId:J,checkpointRunCount:W,restore:{messages:j.messages,workspace:j.workspace,omitCheckpointMessageFromSession:j.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(M)=>$.sessionHost.getSession(M),readMessages:(M)=>$.sessionHost.readSessionMessages(M),buildStartInput:(M)=>{if(M.restoredCheckpointMetadata)G.checkpoint=M.restoredCheckpointMetadata;let d=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():M.sourceSession.workspaceRoot||M.sourceSession.cwd,b=V?.mode??(B.mode==="plan"||B.mode==="yolo"?B.mode:"act");return{source:typeof G.source==="string"?G.source:void 0,interactive:G.interactive!==!1,sessionMetadata:{...G,restoredFromSessionId:J,restoredCheckpointRunCount:W},initialMessages:M.initialMessages,initialCompactionState:K,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:z,..._.localRuntime,extensions:[...$.sessionExtensions??[],..._.localRuntime.extensions??[]],extraTools:IO([...$.sessionTools??[],..._.localRuntime.extraTools??[]],b,typeof G.source==="string"?G.source:void 0)},capabilities:{toolExecutors:_.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:D,providerId:V?.providerId??(typeof H.provider==="string"?H.provider:M.sourceSession.provider),modelId:V?.modelId??(typeof H.model==="string"?H.model:M.sourceSession.model),apiKey:V?.apiKey??(typeof H.apiKey==="string"?H.apiKey:""),cwd:V?.cwd??M.plan.cwd,workspaceRoot:V?.workspaceRoot??d,systemPrompt:V?.systemPrompt??(typeof B.systemPrompt==="string"?B.systemPrompt:""),mode:b,maxIterations:V?.maxIterations??(typeof B.maxIterations==="number"?B.maxIterations:void 0),enableTools:V?.enableTools??B.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??B.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??B.enableTeams!==!1,checkpoint:V?.checkpoint??(B.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof G.teamName==="string"?G.teamName:void 0)},toolPolicies:X.toolPolicies&&typeof X.toolPolicies==="object"&&!Array.isArray(X.toolPolicies)?JSON.parse(JSON.stringify(X.toolPolicies)):B.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(M)=>$.sessionHost.startSession(M),getStartedSessionId:(M)=>M.sessionId,cleanupStartedSession:async(M)=>{if(!await $.sessionHost.deleteSession(M.sessionId))throw Error(`Failed to clean up restored session ${M.sessionId}`)},readRestoredSession:(M)=>$.sessionHost.getSession(M)});if(!Y)return x(Z,{checkpoint:A.checkpoint});let q=A.startResult;if(!q)return h(Z,"restore_failed","Checkpoint restore did not start a session");YY($,q.sessionId,U,"creator",{interactive:G.interactive!==!1});let[N,T]=await Promise.all([i0($,q.sessionId),t0($,q.sessionId)]);if(N)$.publish($.buildEvent("session.created",{session:N,...T?{snapshot:T}:{}},q.sessionId));return x(Z,{session:N,...T?{snapshot:T}:{},messages:A.messages??[],checkpoint:A.checkpoint})}catch(V){if(V instanceof O1)return h(Z,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return h(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function mO($,Z){let Q=O0(Z);if(!Q)return h(Z,"invalid_session_attach","session.attach requires a session id");let X=await i0($,Q);if(!X)return h(Z,"session_not_found",`Unknown session: ${Q}`);nz($,Q,Z.clientId?.trim()||"hub-client","participant");let J=await i0($,Q);return $.publish($.buildEvent("session.attached",{session:J??X},Q)),x(Z,{session:J??X})}async function cO($,Z){let Q=O0(Z);if(!Q)return h(Z,"invalid_session_detach","session.detach requires a session id");let X=Z.clientId?.trim()||"hub-client",J=$.sessionState.get(Q);if(J){if(J.participants.delete(X),J.createdByClientId===X)J.createdByClientId=void 0;if(J.participants.size===0)$.sessionState.delete(Q)}Z2($,(Y)=>Y.sessionId===Q&&Y.targetClientId===X,`Capability owner client ${X} detached before request was resolved.`);let[W,j]=await Promise.all([i0($,Q),t0($,Q)]);return $.publish($.buildEvent("session.detached",W?{session:W,...j?{snapshot:j}:{},clientId:X}:{clientId:X},Q)),x(Z)}async function uO($,Z){let Q=O0(Z),X=Z.payload?.includeSnapshot===!0,[J,W]=await Promise.all([i0($,Q),X?t0($,Q):Promise.resolve(void 0)]);return J?x(Z,{session:J,...W?{snapshot:W}:{}}):h(Z,"session_not_found",`Unknown session: ${Q}`)}async function dO($,Z){let Q=O0(Z);if(!Q)return h(Z,"invalid_session_id","session.messages requires a session id");if(!await i0($,Q))return h(Z,"session_not_found",`Unknown session: ${Q}`);let J=await $.sessionHost.readSessionMessages(Q);return x(Z,{sessionId:Q,messages:J})}async function lO($,Z){let Q=O0(Z);if(!Q)return h(Z,"invalid_session_id","session.compaction.get requires a session id");if(!await i0($,Q))return h(Z,"session_not_found",`Unknown session: ${Q}`);let J=Z.clientId?.trim()||"hub-client",W=vO({sessionId:Q,ctx:$,clientId:J,envelope:Z});if(W)return W;let j=await $.sessionHost.readSessionCompactionState(Q);return x(Z,{sessionId:Q,state:j})}async function pO($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,J=(await $.sessionHost.listSessions(Q)).map((W)=>iZ(W,$.sessionState.get(W.sessionId)));return x(Z,{sessions:J})}async function iO($,Z){let Q=O0(Z),X=Pl($2(Z.payload?.metadata)),J=await $.sessionHost.updateSession(Q,{metadata:X}),[W,j]=await Promise.all([i0($,Q),t0($,Q)]);if(W)$.publish($.buildEvent("session.updated",{session:W,...j?{snapshot:j}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:J.updated,payload:{updated:J.updated,session:W,...j?{snapshot:j}:{}}}}async function rO($,Z){let Q=O0(Z);if(!Q)return h(Z,"invalid_session_update_connection","session.update_connection requires a session id");let X=$.sessionHost.updateSessionConnection;if(!X)return h(Z,"unsupported_session_update_connection","runtime host does not support session connection updates");let J=$2(Z.payload),W=Rl(J?.updates);return await X.call($.sessionHost,Q,W),x(Z,{sessionId:Q,updated:!0})}async function aO($,Z){let Q=O0(Z);if(!Q)return h(Z,"invalid_session_id","session.compaction.update requires a session id");let X=Z.clientId?.trim()||"hub-client",J=await i0($,Q);if(!J)return h(Z,"session_not_found",`Unknown session: ${Q}`);let W=vO({sessionId:Q,ctx:$,clientId:X,envelope:Z});if(W)return W;let j=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=Y$(j.state);if(!Y)return h(Z,"invalid_compaction_state","session.compaction.update requires a valid compaction state");let V=await $.sessionHost.updateSessionCompactionState(Q,Y),[B,K]=V.updated?await Promise.all([i0($,Q),t0($,Q)]):[J,void 0];if(V.updated)$.publish($.buildEvent("session.updated",{session:B??J,...K?{snapshot:K}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:!0,payload:{updated:V.updated,session:B??J,...K?{snapshot:K}:{}}}}async function nO($,Z){let Q=O0(Z),X=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),x(Z,{deleted:X})}async function oO($,Z){let Q=O0(Z),X=$.sessionHost.pendingPrompts;if(!X)return h(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await X.list({sessionId:Q});return x(Z,{sessionId:Q,prompts:J})}async function sO($,Z){let Q=O0(Z),X=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,W=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,j=$.sessionHost.pendingPrompts;if(!j)return h(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let Y=await j.update({sessionId:Q,promptId:X,prompt:J,delivery:W});return x(Z,Y)}async function tO($,Z){let Q=O0(Z),X=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return h(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await J.delete({sessionId:Q,promptId:X});return x(Z,W)}import{join as fl}from"node:path";import{loadSqliteDb as wl}from"@cline/shared/db";import{resolveDbDataDir as Sl}from"@cline/shared/storage";var bl=604800000,kl=200000;function xl($){let Z=$?.replace(/[^a-zA-Z0-9_-]/g,"-");return fl(Sl(),Z?`hub-events-${Z}.db`:"hub-events.db")}class AY{db;retentionMs;maxRows;closed=!1;constructor($={}){this.db=wl($.dbPath??xl($.ownerId)),this.retentionMs=$.retentionMs??bl,this.maxRows=$.maxRows??kl,this.db.exec("PRAGMA journal_mode = WAL;"),this.db.exec("PRAGMA busy_timeout = 5000;"),this.db.exec(`
966
+ ${K}`:V.instructions}})}})}}function ql($,Z,Q,X){let J=Q.map((W)=>[W.executor,async(...j)=>{let Y=j.at(-1),V=j.slice(0,-1);return(await X($,W.capabilityName,{executor:W.executor,args:V,context:SO(Y)},Z,Y.emitUpdate?(K)=>{Y.emitUpdate?.(bO(K))}:void 0))?.result}]);return J.length>0?Object.fromEntries(J):void 0}function Al($,Z,Q,X){if(Q.length===0)return;return Q.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema,lifecycle:J.lifecycle,async execute(W,j){return(await X($,J.capabilityName,{toolName:J.name,input:W,context:SO(j)},Z,j.emitUpdate?(V)=>{j.emitUpdate?.(bO(V))}:void 0))?.result}}))}function Tl($,Z,Q,X){let J=new Map(Q.map((j)=>[j.name,j])),W={};for(let j of Dl){let Y=J.get(j);if(!Y)continue;W[j]=async(V)=>{return(await X($,Y.capabilityName,{context:V},Z))?.control}}return Object.keys(W).length>0?W:void 0}function NY($){let Z=$.contributions.filter((V)=>V.kind==="toolExecutor"),Q=$.contributions.filter((V)=>V.kind==="tool"),X=$.contributions.filter((V)=>V.kind==="hook"),J=$.contributions.find((V)=>V.kind==="compaction"),W=$.contributions.find((V)=>V.kind==="checkpoint"),j=$.contributions.find((V)=>V.kind==="mistakeLimit"),Y=$.contributions.find((V)=>V.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:ql($.sessionId,$.targetClientId,Z,$.requestCapability),localRuntime:{...X.length>0?{hooks:Tl($.sessionId,$.targetClientId,X,$.requestCapability)}:{},...Q.length>0?{extraTools:Al($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...J?{compaction:{...$.sessionConfig?.compaction??{},...J.config,compact:async(V)=>{return(await $.requestCapability($.sessionId,J.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...W?{checkpoint:{...$.sessionConfig?.checkpoint??{},...W.config,createCheckpoint:async(V)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:V},$.targetClientId))?.result}}}:{},...j?{onConsecutiveMistakeLimitReached:async(V)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:V},$.targetClientId))?.result}}:{},...Y?{userInstructionService:Nl($.sessionId,$.targetClientId,Y,$.requestCapability)}:{}}}}var kO="hubCapabilityOwnerClientId";function IO($,Z,Q){let X=j7(Q);return $.filter((J)=>(Z!=="yolo"||J.name!==L5)&&o8(J.name,X))}function sZ($){return typeof $==="string"&&$.trim().length>0?$.trim():void 0}function Ml($){if($===null)return null;let Z=El.safeParse($);return Z.success?Z.data:void 0}function Rl($){let Z=$2($)??{},Q={},X=sZ(Z.providerId);if(X)Q.providerId=X;let J=sZ(Z.modelId);if(J)Q.modelId=J;let W=sZ(Z.apiKey);if(W!==void 0)Q.apiKey=W;let j=sZ(Z.baseUrl);if(j!==void 0)Q.baseUrl=j;if(Z.headers&&typeof Z.headers==="object")Q.headers=Z.headers;if(Z.providerConfig&&typeof Z.providerConfig==="object")Q.providerConfig=Z.providerConfig;if(Object.hasOwn(Z,"thinking")){if(typeof Z.thinking==="boolean"||Z.thinking===null)Q.thinking=Z.thinking}if(Object.hasOwn(Z,"reasoningEffort")){let Y=Ml(Z.reasoningEffort);if(Y!==void 0)Q.reasoningEffort=Y}if(Object.hasOwn(Z,"thinkingBudgetTokens")){if(typeof Z.thinkingBudgetTokens==="number"&&Number.isFinite(Z.thinkingBudgetTokens)&&Z.thinkingBudgetTokens>0)Q.thinkingBudgetTokens=Math.trunc(Z.thinkingBudgetTokens);else if(Z.thinkingBudgetTokens===null)Q.thinkingBudgetTokens=null}return C6(Q)}function Cl($,Z){return $.sessionState.get(Z)?.createdByClientId}function Pl($){if(!$||!("autoApproveTools"in $)&&!(kO in $))return $;let Z={...$};return delete Z[kO],delete Z.autoApproveTools,Z}function hO($,Z){let Q=$2($),X=$2(Q?.["*"]);if(typeof X?.autoApprove==="boolean")return X.autoApprove;return Z.autoApproveTools===!0}function vO($){let Z=Cl($.ctx,$.sessionId);if(!Z)return h($.envelope,"session_wrong_client",`Session ${$.sessionId} has no owner`);if(Z!==$.clientId)return h($.envelope,"session_wrong_client",`Session ${$.sessionId} is owned by ${Z}`);return}async function qY($,Z,Q){let X=performance.now(),J={command:Z.command,requestId:Z.requestId,clientId:Z.clientId,sessionId:Z.sessionId};p("info","session.create.begin",J);let W=Z.payload&&typeof Z.payload==="object"?Z.payload:{},j=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{},Y=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0,V=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{},B=Y$(W.initialCompactionState);if(typeof Y?.mode==="string")j.mode=Y.mode;else if(typeof V.mode==="string")j.mode=V.mode;if(typeof Y?.systemPrompt==="string")j.systemPrompt=Y.systemPrompt;else if(typeof V.systemPrompt==="string")j.systemPrompt=V.systemPrompt;if(Y?.checkpoint?.enabled===!0)j.checkpointEnabled=!0;else if(V.checkpointEnabled===!0)j.checkpointEnabled=!0;j.autoApproveTools=hO(W.toolPolicies,V);let K=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},G=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():void 0,H=Z.clientId?.trim()||"hub-client",U=OY(V.clientContributions);p("info","session.create.contributions_parsed",{...J,clientId:H,workspaceRoot:G,cwd:typeof W.cwd==="string"?W.cwd:void 0,contributionCount:U.length});let L=(typeof Y?.sessionId==="string"?Y.sessionId.trim():"")||xO(),D=yO(V.configExtensions);p("info","session.create.runtime_build.begin",{...J,sessionId:L,configExtensionCount:D?.length??0});let z=NY({sessionId:L,targetClientId:H,contributions:U,sessionConfig:Y,requestCapability:$.requestCapability});p("info","session.create.start_session.begin",{...J,sessionId:L,provider:Y?.providerId??(typeof K.provider==="string"?K.provider:typeof j.provider==="string"?j.provider:"hub"),model:Y?.modelId??(typeof K.model==="string"?K.model:typeof j.model==="string"?j.model:"hub")});let _=Y?.mode??(V.mode==="plan"||V.mode==="yolo"?V.mode:"act"),O=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,initialCompactionState:B,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:D,...z.localRuntime,extensions:[...$.sessionExtensions??[],...z.localRuntime.extensions??[]],extraTools:IO([...$.sessionTools??[],...z.localRuntime.extraTools??[]],_,typeof j.source==="string"?j.source:void 0)},capabilities:{toolExecutors:z.toolExecutors,requestToolApproval:Q},config:{...Y??{},sessionId:L,providerId:Y?.providerId??(typeof K.provider==="string"?K.provider:typeof j.provider==="string"?j.provider:"hub"),modelId:Y?.modelId??(typeof K.model==="string"?K.model:typeof j.model==="string"?j.model:"hub"),apiKey:Y?.apiKey??(typeof K.apiKey==="string"?K.apiKey:void 0),cwd:Y?.cwd??(typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():G),workspaceRoot:Y?.workspaceRoot??G,systemPrompt:Y?.systemPrompt??(typeof V.systemPrompt==="string"?V.systemPrompt:""),mode:_,maxIterations:Y?.maxIterations??(typeof V.maxIterations==="number"?V.maxIterations:void 0),enableTools:Y?.enableTools??V.enableTools!==!1,enableSpawnAgent:Y?.enableSpawnAgent??V.enableSpawn!==!1,enableAgentTeams:Y?.enableAgentTeams??V.enableTeams!==!1,checkpoint:Y?.checkpoint??(V.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:Y?.teamName??(typeof j.teamName==="string"?j.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):V.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});p("info","session.create.start_session.end",{...J,sessionId:O.sessionId,elapsedMs:Math.round(performance.now()-X),hasImmediateResult:!!O.result}),YY($,O.sessionId,H,"creator",{interactive:j.interactive!==!1}),p("info","session.create.read_records.begin",{...J,sessionId:O.sessionId});let[A,q]=await Promise.all([i0($,O.sessionId),t0($,O.sessionId)]);if(p("info","session.create.read_records.end",{...J,sessionId:O.sessionId,hasSession:!!A,hasSnapshot:!!q,elapsedMs:Math.round(performance.now()-X)}),A)$.publish($.buildEvent("session.created",{session:A,...q?{snapshot:q}:{}},O.sessionId));return p("info","session.create.reply",{...J,sessionId:O.sessionId,elapsedMs:Math.round(performance.now()-X)}),x(Z,{session:A,...q?{snapshot:q}:{}})}async function gO($,Z,Q){let X=Z.payload&&typeof Z.payload==="object"?Z.payload:{},J=typeof X.sessionId==="string"?X.sessionId.trim():Z.sessionId?.trim()||"",W=X.checkpointRunCount;if(!J)return h(Z,"invalid_restore","session.restore requires a session id");let j=X.restore&&typeof X.restore==="object"?X.restore:{},Y=j.messages!==!1;if(typeof W!=="number")return h(Z,"invalid_restore","checkpointRunCount must be a positive integer");try{let V=X.sessionConfig&&typeof X.sessionConfig==="object"?JSON.parse(JSON.stringify(X.sessionConfig)):void 0;if(Y&&!V)return h(Z,"invalid_restore","sessionConfig is required when restore.messages is true");let B=X.runtimeOptions&&typeof X.runtimeOptions==="object"?X.runtimeOptions:{},K=Y$(X.initialCompactionState),G=X.metadata&&typeof X.metadata==="object"?JSON.parse(JSON.stringify(X.metadata)):{};if(typeof V?.mode==="string")G.mode=V.mode;else if(typeof B.mode==="string")G.mode=B.mode;if(typeof V?.systemPrompt==="string")G.systemPrompt=V.systemPrompt;else if(typeof B.systemPrompt==="string")G.systemPrompt=B.systemPrompt;if(V?.checkpoint?.enabled===!0)G.checkpointEnabled=!0;else if(B.checkpointEnabled===!0)G.checkpointEnabled=!0;G.autoApproveTools=hO(X.toolPolicies,B);let H=X.modelSelection&&typeof X.modelSelection==="object"?X.modelSelection:{},U=Z.clientId?.trim()||"hub-client",F=OY(B.clientContributions),D=(typeof V?.sessionId==="string"?V.sessionId.trim():"")||xO(),z=yO(B.configExtensions),_=NY({sessionId:D,targetClientId:U,contributions:F,sessionConfig:V,requestCapability:$.requestCapability}),A=await new Q8().restoreCheckpoint({sessionId:J,checkpointRunCount:W,restore:{messages:j.messages,workspace:j.workspace,omitCheckpointMessageFromSession:j.omitCheckpointMessageFromSession===!0},start:V,cwd:typeof V?.cwd==="string"&&V.cwd.trim()||typeof V?.workspaceRoot==="string"&&V.workspaceRoot.trim()||void 0,getSession:(M)=>$.sessionHost.getSession(M),readMessages:(M)=>$.sessionHost.readSessionMessages(M),buildStartInput:(M)=>{if(M.restoredCheckpointMetadata)G.checkpoint=M.restoredCheckpointMetadata;let d=typeof X.workspaceRoot==="string"&&X.workspaceRoot.trim()?X.workspaceRoot.trim():typeof X.cwd==="string"&&X.cwd.trim()?X.cwd.trim():M.sourceSession.workspaceRoot||M.sourceSession.cwd,b=V?.mode??(B.mode==="plan"||B.mode==="yolo"?B.mode:"act");return{source:typeof G.source==="string"?G.source:void 0,interactive:G.interactive!==!1,sessionMetadata:{...G,restoredFromSessionId:J,restoredCheckpointRunCount:W},initialMessages:M.initialMessages,initialCompactionState:K,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:z,..._.localRuntime,extensions:[...$.sessionExtensions??[],..._.localRuntime.extensions??[]],extraTools:IO([...$.sessionTools??[],..._.localRuntime.extraTools??[]],b,typeof G.source==="string"?G.source:void 0)},capabilities:{toolExecutors:_.toolExecutors,requestToolApproval:Q},config:{...V??{},sessionId:D,providerId:V?.providerId??(typeof H.provider==="string"?H.provider:M.sourceSession.provider),modelId:V?.modelId??(typeof H.model==="string"?H.model:M.sourceSession.model),apiKey:V?.apiKey??(typeof H.apiKey==="string"?H.apiKey:""),cwd:V?.cwd??M.plan.cwd,workspaceRoot:V?.workspaceRoot??d,systemPrompt:V?.systemPrompt??(typeof B.systemPrompt==="string"?B.systemPrompt:""),mode:b,maxIterations:V?.maxIterations??(typeof B.maxIterations==="number"?B.maxIterations:void 0),enableTools:V?.enableTools??B.enableTools!==!1,enableSpawnAgent:V?.enableSpawnAgent??B.enableSpawn!==!1,enableAgentTeams:V?.enableAgentTeams??B.enableTeams!==!1,checkpoint:V?.checkpoint??(B.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:V?.teamName??(typeof G.teamName==="string"?G.teamName:void 0)},toolPolicies:X.toolPolicies&&typeof X.toolPolicies==="object"&&!Array.isArray(X.toolPolicies)?JSON.parse(JSON.stringify(X.toolPolicies)):B.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(M)=>$.sessionHost.startSession(M),getStartedSessionId:(M)=>M.sessionId,cleanupStartedSession:async(M)=>{if(!await $.sessionHost.deleteSession(M.sessionId))throw Error(`Failed to clean up restored session ${M.sessionId}`)},readRestoredSession:(M)=>$.sessionHost.getSession(M)});if(!Y)return x(Z,{checkpoint:A.checkpoint});let q=A.startResult;if(!q)return h(Z,"restore_failed","Checkpoint restore did not start a session");YY($,q.sessionId,U,"creator",{interactive:G.interactive!==!1});let[N,T]=await Promise.all([i0($,q.sessionId),t0($,q.sessionId)]);if(N)$.publish($.buildEvent("session.created",{session:N,...T?{snapshot:T}:{}},q.sessionId));return x(Z,{session:N,...T?{snapshot:T}:{},messages:A.messages??[],checkpoint:A.checkpoint})}catch(V){if(V instanceof O1)return h(Z,V.code,V.code==="session_not_found"?`Unknown session: ${J}`:V.message);return h(Z,"restore_failed",V instanceof Error?V.message:String(V))}}async function mO($,Z){let Q=O0(Z);if(!Q)return h(Z,"invalid_session_attach","session.attach requires a session id");let X=await i0($,Q);if(!X)return h(Z,"session_not_found",`Unknown session: ${Q}`);nz($,Q,Z.clientId?.trim()||"hub-client","participant");let J=await i0($,Q);return $.publish($.buildEvent("session.attached",{session:J??X},Q)),x(Z,{session:J??X})}async function cO($,Z){let Q=O0(Z);if(!Q)return h(Z,"invalid_session_detach","session.detach requires a session id");let X=Z.clientId?.trim()||"hub-client",J=$.sessionState.get(Q);if(J){if(J.participants.delete(X),J.createdByClientId===X)J.createdByClientId=void 0;if(J.participants.size===0)$.sessionState.delete(Q)}Z2($,(Y)=>Y.sessionId===Q&&Y.targetClientId===X,`Capability owner client ${X} detached before request was resolved.`);let[W,j]=await Promise.all([i0($,Q),t0($,Q)]);return $.publish($.buildEvent("session.detached",W?{session:W,...j?{snapshot:j}:{},clientId:X}:{clientId:X},Q)),x(Z)}async function uO($,Z){let Q=O0(Z),X=Z.payload?.includeSnapshot===!0,[J,W]=await Promise.all([i0($,Q),X?t0($,Q):Promise.resolve(void 0)]);return J?x(Z,{session:J,...W?{snapshot:W}:{}}):h(Z,"session_not_found",`Unknown session: ${Q}`)}async function dO($,Z){let Q=O0(Z);if(!Q)return h(Z,"invalid_session_id","session.messages requires a session id");if(!await i0($,Q))return h(Z,"session_not_found",`Unknown session: ${Q}`);let J=await $.sessionHost.readSessionMessages(Q);return x(Z,{sessionId:Q,messages:J})}async function lO($,Z){let Q=O0(Z);if(!Q)return h(Z,"invalid_session_id","session.compaction.get requires a session id");if(!await i0($,Q))return h(Z,"session_not_found",`Unknown session: ${Q}`);let J=Z.clientId?.trim()||"hub-client",W=vO({sessionId:Q,ctx:$,clientId:J,envelope:Z});if(W)return W;let j=await $.sessionHost.readSessionCompactionState(Q);return x(Z,{sessionId:Q,state:j})}async function pO($,Z){let Q=typeof Z.payload?.limit==="number"?Z.payload.limit:200,J=(await $.sessionHost.listSessions(Q)).map((W)=>iZ(W,$.sessionState.get(W.sessionId)));return x(Z,{sessions:J})}async function iO($,Z){let Q=O0(Z),X=Pl($2(Z.payload?.metadata)),J=await $.sessionHost.updateSession(Q,{metadata:X}),[W,j]=await Promise.all([i0($,Q),t0($,Q)]);if(W)$.publish($.buildEvent("session.updated",{session:W,...j?{snapshot:j}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:J.updated,payload:{updated:J.updated,session:W,...j?{snapshot:j}:{}}}}async function rO($,Z){let Q=O0(Z);if(!Q)return h(Z,"invalid_session_update_connection","session.update_connection requires a session id");let X=$.sessionHost.updateSessionConnection;if(!X)return h(Z,"unsupported_session_update_connection","runtime host does not support session connection updates");let J=$2(Z.payload),W=Rl(J?.updates);return await X.call($.sessionHost,Q,W),x(Z,{sessionId:Q,updated:!0})}async function aO($,Z){let Q=O0(Z);if(!Q)return h(Z,"invalid_session_id","session.compaction.update requires a session id");let X=Z.clientId?.trim()||"hub-client",J=await i0($,Q);if(!J)return h(Z,"session_not_found",`Unknown session: ${Q}`);let W=vO({sessionId:Q,ctx:$,clientId:X,envelope:Z});if(W)return W;let j=Z.payload&&typeof Z.payload==="object"?Z.payload:{},Y=Y$(j.state);if(!Y)return h(Z,"invalid_compaction_state","session.compaction.update requires a valid compaction state");let V=await $.sessionHost.updateSessionCompactionState(Q,Y),[B,K]=V.updated?await Promise.all([i0($,Q),t0($,Q)]):[J,void 0];if(V.updated)$.publish($.buildEvent("session.updated",{session:B??J,...K?{snapshot:K}:{}},Q));return{version:Z.version,requestId:Z.requestId,ok:!0,payload:{updated:V.updated,session:B??J,...K?{snapshot:K}:{}}}}async function nO($,Z){let Q=O0(Z),X=await $.sessionHost.deleteSession(Q);return $.sessionState.delete(Q),x(Z,{deleted:X})}async function oO($,Z){let Q=O0(Z),X=$.sessionHost.pendingPrompts;if(!X)return h(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let J=await X.list({sessionId:Q});return x(Z,{sessionId:Q,prompts:J})}async function sO($,Z){let Q=O0(Z),X=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=typeof Z.payload?.prompt==="string"?Z.payload.prompt:void 0,W=Z.payload?.delivery==="queue"||Z.payload?.delivery==="steer"?Z.payload.delivery:void 0,j=$.sessionHost.pendingPrompts;if(!j)return h(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let Y=await j.update({sessionId:Q,promptId:X,prompt:J,delivery:W});return x(Z,Y)}async function tO($,Z){let Q=O0(Z),X=typeof Z.payload?.promptId==="string"?Z.payload.promptId.trim():"",J=$.sessionHost.pendingPrompts;if(!J)return h(Z,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await J.delete({sessionId:Q,promptId:X});return x(Z,W)}import{join as fl}from"node:path";import{loadSqliteDb as wl}from"@cline/shared/db";import{resolveDbDataDir as Sl}from"@cline/shared/storage";var bl=604800000,kl=200000,xl=67108864,yl=16777216;function Il($){let Z=$?.replace(/[^a-zA-Z0-9_-]/g,"-");return fl(Sl(),Z?`hub-events-${Z}.db`:"hub-events.db")}class AY{db;retentionMs;maxRows;maxTotalBytes;appendedBytesSincePrune=0;closed=!1;constructor($={}){this.db=wl($.dbPath??Il($.ownerId)),this.retentionMs=$.retentionMs??bl,this.maxRows=$.maxRows??kl,this.maxTotalBytes=$.maxTotalBytes??xl,this.db.exec("PRAGMA journal_mode = WAL;"),this.db.exec("PRAGMA busy_timeout = 5000;"),this.db.exec(`
967
967
  CREATE TABLE IF NOT EXISTS hub_events (
968
968
  sequence INTEGER PRIMARY KEY AUTOINCREMENT,
969
969
  event TEXT NOT NULL,
@@ -975,15 +975,23 @@ ${K}`:V.instructions}})}})}}function ql($,Z,Q,X){let J=Q.map((W)=>[W.executor,as
975
975
  ON hub_events(session_id, sequence);
976
976
  CREATE INDEX IF NOT EXISTS idx_hub_events_created
977
977
  ON hub_events(created_at);
978
- `)}append($){if(this.closed)return $;let Z=$.timestamp??Date.now(),X=this.db.prepare(`INSERT INTO hub_events (event, session_id, envelope_json, created_at)
979
- VALUES (?, ?, ?, ?);`).run($.event,$.sessionId??null,JSON.stringify($),Z)?.lastInsertRowid,J=typeof X==="number"||typeof X==="bigint"?Number(X):this.lastSequence();return{...$,sequence:J}}listAfter($,Z,Q){if(this.closed)return[];let X=["sequence > ?"],J=[$];if(Z.sessionId)X.push("session_id = ?"),J.push(Z.sessionId);return J.push(Q),this.db.prepare(`SELECT sequence, envelope_json FROM hub_events
980
- WHERE ${X.join(" AND ")} ORDER BY sequence LIMIT ?;`).all(...J).flatMap((W)=>{try{return[{...JSON.parse(String(W.envelope_json)),sequence:Number(W.sequence)}]}catch{return[]}})}lastSequence(){if(this.closed)return 0;let $=this.db.prepare("SELECT MAX(sequence) AS sequence FROM hub_events;").get();return Number($?.sequence??0)}prune($=Date.now()){if(this.closed)return;this.db.prepare("DELETE FROM hub_events WHERE created_at < ?;").run($-this.retentionMs),this.db.prepare(`DELETE FROM hub_events WHERE sequence <= (
978
+ `)}append($){if(this.closed)return $;let Z=$.timestamp??Date.now(),Q=JSON.stringify($),J=this.db.prepare(`INSERT INTO hub_events (event, session_id, envelope_json, created_at)
979
+ VALUES (?, ?, ?, ?);`).run($.event,$.sessionId??null,Q,Z)?.lastInsertRowid,W=typeof J==="number"||typeof J==="bigint"?Number(J):this.lastSequence();if(this.appendedBytesSincePrune+=Buffer.byteLength(Q),this.appendedBytesSincePrune>=yl)this.appendedBytesSincePrune=0,this.prune();return{...$,sequence:W}}listAfter($,Z,Q){if(this.closed)return[];let X=["sequence > ?"],J=[$];if(Z.sessionId)X.push("session_id = ?"),J.push(Z.sessionId);return J.push(Q),this.db.prepare(`SELECT sequence, envelope_json FROM hub_events
980
+ WHERE ${X.join(" AND ")} ORDER BY sequence LIMIT ?;`).all(...J).flatMap((W)=>{try{return[{...JSON.parse(String(W.envelope_json)),sequence:Number(W.sequence)}]}catch{return[]}})}lastSequence(){if(this.closed)return 0;let $=this.db.prepare("SELECT MAX(sequence) AS sequence FROM hub_events;").get();return Number($?.sequence??0)}prune($=Date.now()){if(this.closed)return;if(this.db.prepare("DELETE FROM hub_events WHERE created_at < ?;").run($-this.retentionMs),this.db.prepare(`DELETE FROM hub_events WHERE sequence <= (
981
981
  SELECT sequence FROM hub_events ORDER BY sequence DESC
982
982
  LIMIT 1 OFFSET ?
983
- );`).run(this.maxRows)}close(){if(this.closed)return;this.closed=!0,this.db.close?.()}}function eO($){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}}import{resolve as $N}from"node:path";var yl=new Set(["task.create","task.list","task.get","task.update","task.approve","task.cancel","task.run","task.automation.get","task.automation.set"]);function ZN($){return yl.has($)}function Il($){return $.payload&&typeof $.payload==="object"?$.payload:{}}function tZ($){return typeof $.taskId==="string"?$.taskId.trim():""}function TY($){let Z=$.expectedRevision;if(typeof Z!=="number"||!Number.isInteger(Z)||Z<1)throw Error("expectedRevision must be a positive integer");return Z}class EY{tasks;constructor($){this.tasks=$}async handleCommand($,Z){let Q=Il($),X={kind:"user",id:$.clientId?.trim()||"hub-client",clientId:$.clientId?.trim()||void 0};try{let J=this.resolveWorkspace(Z);switch($.command){case"task.create":{let W=await this.tasks.createTask({...Q,scope:"workspace",workspaceRoot:J,cwd:J,requiresApproval:!1,createdBy:X});return x($,{task:W})}case"task.list":{let W=Q,[j,Y]=await Promise.all([this.tasks.listTasks({...W,scope:"workspace",workspaceRoot:J}),this.tasks.listTasks({...W,scope:"global",workspaceRoot:void 0})]);return x($,{tasks:[...j,...Y]})}case"task.get":{let W=await this.requireScopedTask(Q,J);return x($,{task:W})}case"task.update":{let W=await this.requireScopedTask(Q,J),j=await this.tasks.updateTask({...Q,scope:W.scope,workspaceRoot:W.workspaceRoot??null,cwd:W.cwd??null,updatedBy:X});return x($,{task:j})}case"task.approve":return await this.requireScopedTask(Q,J),x($,{task:await this.tasks.approveTask(tZ(Q),X,TY(Q))});case"task.cancel":return await this.requireScopedTask(Q,J),x($,{task:await this.tasks.cancelTask(tZ(Q),X,TY(Q),typeof Q.reason==="string"?Q.reason:void 0)});case"task.run":{await this.requireScopedTask(Q,J);let W=await this.tasks.runTask(tZ(Q),X,TY(Q),$.clientId);return x($,W)}case"task.automation.get":return x($,{policy:await this.tasks.getAutomationPolicy(J)});case"task.automation.set":{let W=Q.policy&&typeof Q.policy==="object"&&!Array.isArray(Q.policy)?Q.policy:void 0;if(!W)throw Error("task.automation.set requires a policy object");return x($,{policy:await this.tasks.setAutomationPolicy({...W,scopeKey:J},X)})}default:return h($,"unsupported_command",`Unsupported agenda task command: ${$.command}`)}}catch(J){return h($,"task_command_failed",J instanceof Error?J.message:String(J))}}resolveWorkspace($){let Z=$?.workspaceContext?.workspaceRoot?.trim();if(!$?.clientId||!Z)throw Error("task commands require a Hub-authorized workspace");return $N(Z)}async requireScopedTask($,Z){let Q=await this.tasks.getTask(tZ($));if(!Q||Q.scope==="workspace"&&(!Q.workspaceRoot||$N(Q.workspaceRoot)!==Z))throw Error("task does not exist in this workspace");return Q}}var cl=new Set(["skills","workflows","rules","plugins","tools","mcp"]);function RY($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function P5($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="string")throw Error(`settings payload '${Z}' must be a string.`);return Q}function ul($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="boolean")throw Error(`settings payload '${Z}' must be a boolean.`);return Q}function QN($){if($===void 0)return{};if(!RY($))throw Error("settings.list payload must be an object.");return{cwd:P5($,"cwd"),workspaceRoot:P5($,"workspaceRoot"),availabilityContext:RY($.availabilityContext)?$.availabilityContext:void 0}}function dl($){if(!RY($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!cl.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, plugins, tools, mcp.");return{...QN($),type:Z,id:P5($,"id"),path:P5($,"path"),name:P5($,"name"),enabled:ul($,"enabled")}}class $Q{options;clients=new Map;listeners=new Map;sessionState=new Map;pendingApprovals=new Map;pendingCapabilityRequests=new Map;suppressNextTerminalEventBySession=new Map;activeRpcTurnCountBySession=new Map;schedules;scheduleCommands;tasks;taskCommands;sessionTools=[];sessionExtensions=[];settings;cronService;sessionHost;hubId=MY("hub_");ctx;eventLog;eventLogPruneTimer;runQueue;runExecutor;draining=!1;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new s$({sessionService:new r$(new p$),fetch:$.fetch,logger:$.logger,telemetry:$.telemetry}),this.ctx={isDraining:()=>this.draining,clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,activeRpcTurnCountBySession:this.activeRpcTurnCountBySession,telemetry:$.telemetry,sessionTools:this.sessionTools,sessionExtensions:this.sessionExtensions,sessionHost:this.sessionHost,publish:(Z)=>this.publish(Z),buildEvent:S1,requestCapability:(Z,Q,X,J,W)=>ez(this.ctx,Z,Q,X,J,W)},this.tasks=new jY({...$.taskOptions,runtime:{isInteractiveClientAvailable:()=>[...this.clients.values()].some((Z)=>Z.capabilities.some((Q)=>Q.name===gl)),startSession:(Z,Q,X,J)=>this.startAgendaTaskSession(Z,Q,X,J?.unattended===!0),runSession:(Z,Q,X)=>this.runAgendaTaskSession(Z,Q,X),abortSession:async(Z,Q)=>{await this.sessionHost.abort(Z,Q)}},logger:$.taskOptions?.logger??$.logger,publish:(Z,Q,X)=>{this.publish(S1(Z,Q,X))}}),this.taskCommands=new EY(this.tasks),this.schedules=new yZ({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let X=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!X)return;this.publish(S1(X,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new bZ(this.schedules),this.sessionTools.push(uj({todo:{manager:this.tasks,telemetry:$.telemetry,resolveSessionDefaults:async(Z)=>{let Q=await this.sessionHost.getSession(Z);if(!Q)return;let X=!ml(Q.workspaceRoot)?Q.workspaceRoot:void 0;return{workspaceRoot:X,cwd:X?Q.cwd:void 0,modelSelection:{providerId:Q.provider,modelId:Q.model},originTaskId:typeof Q.metadata?.agendaTaskId==="string"?Q.metadata.agendaTaskId:void 0}}},scheduled:{schedules:this.schedules,telemetry:$.telemetry,publish:(Z,Q,X)=>{this.publish(S1(Z,Q,X))},resolveSessionDefaults:async(Z)=>{let Q=await this.sessionHost.getSession(Z);if(!Q)return;return{workspaceRoot:Q.workspaceRoot,cwd:Q.cwd,modelSelection:{providerId:Q.provider,modelId:Q.model},interactive:Q.interactive}}}})),this.sessionExtensions.push(dj()),this.settings=$.settingsService??new g6,$.cronOptions)this.cronService=new A4({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{fO(this.ctx,Z).catch((Q)=>{N5("session event handling failed",Q),eZ(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Q,severity:"error",handled:!0,context:{eventType:Z.type,sessionId:Z.payload.sessionId}})})})}async startAgendaTaskSession($,Z,Q,X=!1){let W=($.originSessionId?await this.sessionHost.getSession($.originSessionId):void 0)?.metadata?.autoApproveTools===!0,j=X||W,Y=$.modelSelection?.providerId?.trim()||"cline",V=$.modelSelection?.modelId?.trim()||(Y==="cline"?vl:""),B=k0({title:$.title,agendaTaskId:$.taskId,agendaTaskRunId:Z.runId,agendaTaskAssignee:$.assignee,interactive:!X,source:Z0.CORE},{mode:"task",trigger:"agenda_task"}),K=Q?.trim()||"agenda-task-manager",G=await qY(this.ctx,{version:"v1",command:"session.create",requestId:MY("task_session_"),clientId:K,payload:{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:Y,modelId:V,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",maxIterations:$.maxIterations,enableTools:!0,enableSpawnAgent:!0,enableAgentTeams:!0},metadata:B,runtimeOptions:{mode:$.mode??"act",maxIterations:$.maxIterations,enableTools:!0,enableSpawn:!0,enableTeams:!0},toolPolicies:{"*":{autoApprove:j,enabled:!0}}}},(L)=>rZ(this.ctx,L));if(!G.ok)throw Error(G.error?.message??"failed to create task session");let H=G.payload?.session,U=G.payload?.snapshot,F=typeof U?.sessionId==="string"?U.sessionId:typeof H?.sessionId==="string"?H.sessionId:"";if(!F)throw Error("task session did not return a session id");return{sessionId:F}}async runAgendaTaskSession($,Z,Q){let X=Z.resourcePaths.length?`
983
+ );`).run(this.maxRows),this.fileSizeBytes()>this.maxTotalBytes){this.db.prepare(`DELETE FROM hub_events WHERE sequence <= (
984
+ SELECT sequence FROM (
985
+ SELECT sequence, SUM(LENGTH(CAST(envelope_json AS BLOB))) OVER (
986
+ ORDER BY sequence DESC
987
+ ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
988
+ ) AS newer_bytes FROM hub_events
989
+ )
990
+ WHERE newer_bytes > ? ORDER BY sequence DESC LIMIT 1
991
+ );`).run(Math.floor(this.maxTotalBytes/2));try{this.db.exec("VACUUM;")}catch{}}}fileSizeBytes(){let $=(Z)=>Number(this.db.prepare(`PRAGMA ${Z};`).get()?.[Z]??0);return $("page_count")*$("page_size")}close(){if(this.closed)return;this.closed=!0,this.db.close?.()}}function eO($){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}}import{resolve as $N}from"node:path";var hl=new Set(["task.create","task.list","task.get","task.update","task.approve","task.cancel","task.run","task.automation.get","task.automation.set"]);function ZN($){return hl.has($)}function vl($){return $.payload&&typeof $.payload==="object"?$.payload:{}}function tZ($){return typeof $.taskId==="string"?$.taskId.trim():""}function TY($){let Z=$.expectedRevision;if(typeof Z!=="number"||!Number.isInteger(Z)||Z<1)throw Error("expectedRevision must be a positive integer");return Z}class EY{tasks;constructor($){this.tasks=$}async handleCommand($,Z){let Q=vl($),X={kind:"user",id:$.clientId?.trim()||"hub-client",clientId:$.clientId?.trim()||void 0};try{let J=this.resolveWorkspace(Z);switch($.command){case"task.create":{let W=await this.tasks.createTask({...Q,scope:"workspace",workspaceRoot:J,cwd:J,requiresApproval:!1,createdBy:X});return x($,{task:W})}case"task.list":{let W=Q,[j,Y]=await Promise.all([this.tasks.listTasks({...W,scope:"workspace",workspaceRoot:J}),this.tasks.listTasks({...W,scope:"global",workspaceRoot:void 0})]);return x($,{tasks:[...j,...Y]})}case"task.get":{let W=await this.requireScopedTask(Q,J);return x($,{task:W})}case"task.update":{let W=await this.requireScopedTask(Q,J),j=await this.tasks.updateTask({...Q,scope:W.scope,workspaceRoot:W.workspaceRoot??null,cwd:W.cwd??null,updatedBy:X});return x($,{task:j})}case"task.approve":return await this.requireScopedTask(Q,J),x($,{task:await this.tasks.approveTask(tZ(Q),X,TY(Q))});case"task.cancel":return await this.requireScopedTask(Q,J),x($,{task:await this.tasks.cancelTask(tZ(Q),X,TY(Q),typeof Q.reason==="string"?Q.reason:void 0)});case"task.run":{await this.requireScopedTask(Q,J);let W=await this.tasks.runTask(tZ(Q),X,TY(Q),$.clientId);return x($,W)}case"task.automation.get":return x($,{policy:await this.tasks.getAutomationPolicy(J)});case"task.automation.set":{let W=Q.policy&&typeof Q.policy==="object"&&!Array.isArray(Q.policy)?Q.policy:void 0;if(!W)throw Error("task.automation.set requires a policy object");return x($,{policy:await this.tasks.setAutomationPolicy({...W,scopeKey:J},X)})}default:return h($,"unsupported_command",`Unsupported agenda task command: ${$.command}`)}}catch(J){return h($,"task_command_failed",J instanceof Error?J.message:String(J))}}resolveWorkspace($){let Z=$?.workspaceContext?.workspaceRoot?.trim();if(!$?.clientId||!Z)throw Error("task commands require a Hub-authorized workspace");return $N(Z)}async requireScopedTask($,Z){let Q=await this.tasks.getTask(tZ($));if(!Q||Q.scope==="workspace"&&(!Q.workspaceRoot||$N(Q.workspaceRoot)!==Z))throw Error("task does not exist in this workspace");return Q}}var dl=new Set(["skills","workflows","rules","plugins","tools","mcp"]);function RY($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function P5($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="string")throw Error(`settings payload '${Z}' must be a string.`);return Q}function ll($,Z){let Q=$[Z];if(Q===void 0)return;if(typeof Q!=="boolean")throw Error(`settings payload '${Z}' must be a boolean.`);return Q}function QN($){if($===void 0)return{};if(!RY($))throw Error("settings.list payload must be an object.");return{cwd:P5($,"cwd"),workspaceRoot:P5($,"workspaceRoot"),availabilityContext:RY($.availabilityContext)?$.availabilityContext:void 0}}function pl($){if(!RY($))throw Error("settings.toggle payload must be an object.");let{type:Z}=$;if(typeof Z!=="string"||!dl.has(Z))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, plugins, tools, mcp.");return{...QN($),type:Z,id:P5($,"id"),path:P5($,"path"),name:P5($,"name"),enabled:ll($,"enabled")}}class $Q{options;clients=new Map;listeners=new Map;sessionState=new Map;pendingApprovals=new Map;pendingCapabilityRequests=new Map;suppressNextTerminalEventBySession=new Map;activeRpcTurnCountBySession=new Map;schedules;scheduleCommands;tasks;taskCommands;sessionTools=[];sessionExtensions=[];settings;cronService;sessionHost;hubId=MY("hub_");ctx;eventLog;eventLogPruneTimer;runQueue;runExecutor;draining=!1;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new s$({sessionService:new r$(new p$),fetch:$.fetch,logger:$.logger,telemetry:$.telemetry}),this.ctx={isDraining:()=>this.draining,clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,activeRpcTurnCountBySession:this.activeRpcTurnCountBySession,telemetry:$.telemetry,sessionTools:this.sessionTools,sessionExtensions:this.sessionExtensions,sessionHost:this.sessionHost,publish:(Z)=>this.publish(Z),buildEvent:S1,requestCapability:(Z,Q,X,J,W)=>ez(this.ctx,Z,Q,X,J,W)},this.tasks=new jY({...$.taskOptions,runtime:{isInteractiveClientAvailable:()=>[...this.clients.values()].some((Z)=>Z.capabilities.some((Q)=>Q.name===cl)),startSession:(Z,Q,X,J)=>this.startAgendaTaskSession(Z,Q,X,J?.unattended===!0),runSession:(Z,Q,X)=>this.runAgendaTaskSession(Z,Q,X),abortSession:async(Z,Q)=>{await this.sessionHost.abort(Z,Q)}},logger:$.taskOptions?.logger??$.logger,publish:(Z,Q,X)=>{this.publish(S1(Z,Q,X))}}),this.taskCommands=new EY(this.tasks),this.schedules=new yZ({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(Z,Q)=>{let X=Z==="schedule.execution.completed"?"schedule.execution_completed":Z==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!X)return;this.publish(S1(X,Q&&typeof Q==="object"?Q:void 0))}}),this.scheduleCommands=new bZ(this.schedules),this.sessionTools.push(uj({todo:{manager:this.tasks,telemetry:$.telemetry,resolveSessionDefaults:async(Z)=>{let Q=await this.sessionHost.getSession(Z);if(!Q)return;let X=!ul(Q.workspaceRoot)?Q.workspaceRoot:void 0;return{workspaceRoot:X,cwd:X?Q.cwd:void 0,modelSelection:{providerId:Q.provider,modelId:Q.model},originTaskId:typeof Q.metadata?.agendaTaskId==="string"?Q.metadata.agendaTaskId:void 0}}},scheduled:{schedules:this.schedules,telemetry:$.telemetry,publish:(Z,Q,X)=>{this.publish(S1(Z,Q,X))},resolveSessionDefaults:async(Z)=>{let Q=await this.sessionHost.getSession(Z);if(!Q)return;return{workspaceRoot:Q.workspaceRoot,cwd:Q.cwd,modelSelection:{providerId:Q.provider,modelId:Q.model},interactive:Q.interactive}}}})),this.sessionExtensions.push(dj()),this.settings=$.settingsService??new g6,$.cronOptions)this.cronService=new A4({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((Z)=>{fO(this.ctx,Z).catch((Q)=>{N5("session event handling failed",Q),eZ(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:Q,severity:"error",handled:!0,context:{eventType:Z.type,sessionId:Z.payload.sessionId}})})})}async startAgendaTaskSession($,Z,Q,X=!1){let W=($.originSessionId?await this.sessionHost.getSession($.originSessionId):void 0)?.metadata?.autoApproveTools===!0,j=X||W,Y=$.modelSelection?.providerId?.trim()||"cline",V=$.modelSelection?.modelId?.trim()||(Y==="cline"?ml:""),B=k0({title:$.title,agendaTaskId:$.taskId,agendaTaskRunId:Z.runId,agendaTaskAssignee:$.assignee,interactive:!X,source:Z0.CORE},{mode:"task",trigger:"agenda_task"}),K=Q?.trim()||"agenda-task-manager",G=await qY(this.ctx,{version:"v1",command:"session.create",requestId:MY("task_session_"),clientId:K,payload:{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:Y,modelId:V,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",maxIterations:$.maxIterations,enableTools:!0,enableSpawnAgent:!0,enableAgentTeams:!0},metadata:B,runtimeOptions:{mode:$.mode??"act",maxIterations:$.maxIterations,enableTools:!0,enableSpawn:!0,enableTeams:!0},toolPolicies:{"*":{autoApprove:j,enabled:!0}}}},(L)=>rZ(this.ctx,L));if(!G.ok)throw Error(G.error?.message??"failed to create task session");let H=G.payload?.session,U=G.payload?.snapshot,F=typeof U?.sessionId==="string"?U.sessionId:typeof H?.sessionId==="string"?H.sessionId:"";if(!F)throw Error("task session did not return a session id");return{sessionId:F}}async runAgendaTaskSession($,Z,Q){let X=Z.resourcePaths.length?`
984
992
 
985
993
  Relevant resources (paths are relative to workspace root ${Z.workspaceRoot}):
986
- ${Z.resourcePaths.map((K)=>`- ${K} (absolute: ${hl(Z.workspaceRoot??Z.cwd??"",K)})`).join(`
994
+ ${Z.resourcePaths.map((K)=>`- ${K} (absolute: ${gl(Z.workspaceRoot??Z.cwd??"",K)})`).join(`
987
995
  `)}`:"",J=Z.assignee?`
988
996
  Assigned agent: ${Z.assignee}. If a configured agent or subagent with this name is available, delegate the work to it and oversee completion; otherwise execute it directly and mention the fallback in the summary.`:"",W=`Execute this approved agenda task.
989
997
 
@@ -991,33 +999,33 @@ Title: ${Z.title}
991
999
  Type: ${Z.type}
992
1000
  Priority: P${Z.priority}${J}
993
1001
 
994
- ${Z.instructions}${X}`,j=await M5(this.ctx,{version:"v1",command:"run.start",requestId:MY("task_run_"),clientId:Q.requestedByClientId??"agenda-task-manager",sessionId:$,payload:{sessionId:$,input:W,mode:Z.mode??"act",timeoutSeconds:Z.timeoutSeconds}});if(!j.ok)return{status:"failed",error:j.error?.message??"task session run failed"};let Y=j.payload?.result,V=typeof Y?.finishReason==="string"?Y.finishReason:void 0,B=typeof Y?.text==="string"&&Y.text.trim()?Y.text.trim():void 0;if(V==="completed")return{status:"completed",summary:B};if(V==="aborted")return{status:"cancelled",summary:B};return{status:"failed",summary:B,error:B??(V?`Task session ended with ${V}`:"Task session did not return a completion result")}}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.tasks.start(),await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}this.startEventLog(),this.startRunQueue()}startEventLog(){if(this.options.eventLog===!1||this.eventLog)return;try{let $=new AY({ownerId:this.options.owner?.ownerId,...this.options.eventLog??{}});$.prune(),this.eventLog=$,this.eventLogPruneTimer=setInterval(()=>{try{$.prune()}catch{}},3600000),this.eventLogPruneTimer.unref?.()}catch($){p("error","event_log.start_failed",{error:$})}}startRunQueue(){if(this.options.runQueue===!1||this.runQueue)return;try{this.runQueue=new DY({ownerId:this.options.owner?.ownerId,...this.options.runQueue??{}}),this.runExecutor=new _Y(this.ctx,this.runQueue);let $=this.runQueue.recoverOnStartup();for(let Q of $.interrupted)this.publish(S1("run.interrupted",{runId:Q.runId,error:Q.error,reason:"hub_restart"},Q.sessionId));let Z=new Set($.requeued.map((Q)=>Q.sessionId));for(let Q of Z)this.runExecutor.pump(Q);if($.interrupted.length>0||$.requeued.length>0)p("info","run.queue.recovered",{interrupted:$.interrupted.length,requeued:$.requeued.length})}catch($){p("error","run.queue.start_failed",{error:$})}}async stop(){if(this.eventLogPruneTimer)clearInterval(this.eventLogPruneTimer),this.eventLogPruneTimer=void 0;for(let $ of this.pendingApprovals.keys())VY(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(Z2(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.tasks.dispose(),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",$)}this.eventLog?.close(),this.eventLog=void 0,this.runQueue?.close(),this.runQueue=void 0,this.runExecutor=void 0}async handleCommand($,Z){try{let Q=$.clientId?.trim(),X=Z===void 0?this.options.workspaceRoot?.trim()&&Q?{clientId:Q,workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.workspaceRoot}}:void 0:Z??void 0,J=await this.dispatchCommand($,X);return this.captureFailedReply($,J),J}catch(Q){throw eZ(this.options.telemetry,{component:"core",operation:"hub.command",error:Q,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),Q}}async dispatchCommand($,Z){if(this.draining&&MO($.command))return RO($);if(ZN($.command))return await this.taskCommands.handleCommand($,Z);switch($.command){case"client.register":{let Q=XO(this.ctx,$);return this.tasks.notifyAutomationReadinessChanged(),Q}case"client.update":{let Q=JO(this.ctx,$);return this.tasks.notifyAutomationReadinessChanged(),Q}case"client.unregister":{let Q=WO(this.ctx,$,(X)=>{this.listeners.delete(X),this.detachClientFromSessions(X)});return this.tasks.notifyAutomationReadinessChanged(),Q}case"client.list":return jO(this.ctx,$);case"session.create":return await qY(this.ctx,$,(Q)=>rZ(this.ctx,Q));case"session.restore":return await gO(this.ctx,$,(Q)=>rZ(this.ctx,Q));case"session.attach":return await mO(this.ctx,$);case"session.detach":return await cO(this.ctx,$);case"session.get":return await uO(this.ctx,$);case"session.messages":return await dO(this.ctx,$);case"session.compaction.get":return await lO(this.ctx,$);case"session.list":return await pO(this.ctx,$);case"session.update":return await iO(this.ctx,$);case"session.update_connection":return await rO(this.ctx,$);case"session.compaction.update":return await aO(this.ctx,$);case"session.pending_prompts":return await oO(this.ctx,$);case"session.update_pending_prompt":return await sO(this.ctx,$);case"session.remove_pending_prompt":return await tO(this.ctx,$);case"session.delete":return await nO(this.ctx,$);case"session.hook":return await EO(this.ctx,$);case"run.start":case"session.send_input":return await M5(this.ctx,$);case"run.enqueue":{if(!this.runQueue||!this.runExecutor)return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"run_queue_unavailable",message:"This hub has no durable run queue; use run.start instead."}};return CO(this.ctx,$,this.runQueue,this.runExecutor)}case"run.list":{if(!this.runQueue)return x($,{runs:[]});return PO($,this.runQueue)}case"hub.drain":return this.handleHubDrain($);case"hub.status":return this.handleHubStatus($);case"run.abort":return await AO(this.ctx,$);case"run.proceed_while_running":return await TO(this.ctx,$);case"capability.request":return await ZO(this.ctx,$);case"approval.respond":return await sz(this.ctx,$);case"capability.respond":return QO(this.ctx,$);case"capability.progress":return $O(this.ctx,$);case"ui.notify":return this.publish(S1("ui.notify",$.payload??{})),x($);case"ui.show_window":return this.publish(S1("ui.show_window",$.payload??{})),x($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"connector.channels":case"connector.configure":case"connector.delete_config":case"connector.start":case"connector.stop":case"connector.supervised":return await NO(this.ctx,$);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let Q=await this.scheduleCommands.handleCommand($,Z);if(Q.ok){let X=eO($.command);if(X)this.publish(S1(X,Q.payload))}return Q}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!ll(Z.error.code))return;eZ(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(Z.error.message),severity:Z.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:Z.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let Z=await this.settings.list(QN($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:Z instanceof Error?Z.message:String(Z)}}}}async handleSettingsToggle($){try{let Z=await this.settings.toggle(dl($.payload));return this.publish(S1("settings.changed",{types:Z.changedTypes,snapshot:Z.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z.snapshot,changedTypes:Z.changedTypes}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:Z instanceof Error?Z.message:String(Z)}}}}handleHubDrain($){let Z=$.payload?.draining!==!1,Q=typeof $.payload?.reason==="string"?$.payload.reason:void 0;if(this.draining!==Z)this.draining=Z,this.publish(S1("hub.drain_changed",{draining:this.draining,...Q?{reason:Q}:{}})),p("info","hub.drain_changed",{draining:this.draining,reason:Q});return x($,this.describeStatus())}handleHubStatus($){return x($,this.describeStatus())}describeStatus(){let $=0;for(let Z of this.activeRpcTurnCountBySession.values())$+=Z;return{hubId:this.hubId,draining:this.draining,activeRpcTurns:$,pendingRuns:this.runQueue?.countPending()??0,eventLog:this.eventLog?{lastSequence:this.eventLog.lastSequence()}:void 0,idle:$===0&&(this.runQueue?.countPending()??0)===0}}isDraining(){return this.draining}replayEventsAfter($,Z){if(!this.eventLog)return[];return this.eventLog.listAfter($,{sessionId:Z.sessionId},Z.limit)}lastEventSequence(){return this.eventLog?.lastSequence()??0}subscribe($,Z,Q){let X=this.listeners.get($)??new Set,J={sessionId:Q?.sessionId,listener:Z};X.add(J),this.listeners.set($,X);let W=oz(this.ctx,Q?.sessionId);if(W.length>0)queueMicrotask(()=>{if(!this.listeners.get($)?.has(J))return;for(let Y of W)try{J.listener(Y)}catch(V){N5("listener threw while re-issuing pending approval",V)}});return()=>{let j=this.listeners.get($);if(!j)return;if(j.delete(J),j.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries()){if(Q.participants.delete($),Q.createdByClientId===$)Q.createdByClientId=void 0;if(Q.participants.size===0)this.sessionState.delete(Z)}Z2(this.ctx,(Z)=>Z.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){if(this.eventLog)try{$=this.eventLog.append($)}catch(Z){N5(`event log append failed for ${$.event}`,Z)}for(let Z of this.listeners.values())for(let Q of Z){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(X){N5(`listener threw while publishing ${$.event}`,X),eZ(this.options.telemetry,{component:"core",operation:"hub.publish",error:X,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function ll($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as jp}from"node:crypto";import Yp from"node:http";import{URL as w5}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as SY,HUB_CAPABILITIES as Vp,MAX_CLIENT_HUB_PROTOCOL_VERSION as YN,MIN_CLIENT_HUB_PROTOCOL_VERSION as VN}from"@cline/shared";import{WebSocketServer as Bp}from"ws";import{chmodSync as pl,existsSync as il,mkdirSync as rl}from"node:fs";import{dirname as al}from"node:path";import{loadSqliteDb as nl}from"@cline/shared/db";var OW0=3;class XN extends Error{lockFile;constructor($){super(`Hub instance lock is held by a live Hub: ${$}. Connect to the running Hub or diagnose it; never replace it.`);this.name="HubLockHeldError",this.lockFile=$}}function JN($){return $ instanceof Error&&$.name==="HubLockHeldError"}function WN($){return`${$}.instance.lock`}class U8{db;lockFile;constructor($,Z){this.lockFile=$,this.db=Z}get held(){return this.db!==void 0}release(){let $=this.db;if(!$)return;this.db=void 0;try{$.exec("ROLLBACK;")}catch{}$.close?.()}static acquire($){let Z=!1,Q;try{rl(al($),{recursive:!0}),Z=il($),Q=nl($)}catch{return new U8($,void 0)}try{Q.exec("PRAGMA busy_timeout = 0;"),Q.exec("BEGIN EXCLUSIVE;")}catch(X){if(Q.close?.(),ol(X))throw new XN($);return new U8($,void 0)}if(!Z)try{pl($,384)}catch{}return new U8($,Q)}}function ol($){let Z=$ instanceof Error?$.message:String($),Q=$?.code;return Q==="SQLITE_BUSY"||Q==="SQLITE_LOCKED"||Z.includes("SQLITE_BUSY")||Z.includes("SQLITE_LOCKED")||Z.includes("database is locked")}import{isAbsolute as sl,relative as tl,resolve as CY,sep as el}from"node:path";import{captureSdkError as jN,HUB_COMMAND_SLOW_LOG_MS as $p,resolveHubCommandTimeoutMs as Zp,safeJsonParse as Qp}from"@cline/shared";var Xp=200,Jp=1000;function PY($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function f5($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}function Wp($,Z,Q=!1){let X=$.envelope.payload??{},J=$.envelope.clientId?.trim(),W=X.clientId?.trim()||J;if(!W||J&&W!==J)throw Error("Registration clientId must match the command connection");let j=X.workspaceContext?.workspaceRoot?.trim(),Y=Q?j||Z?.trim():Z?.trim();if(!Y)return{clientId:W};let V=CY(Y);if(!Q&&j&&CY(j)!==V)throw Error("Registration workspace must match the Hub-authorized workspace");let B=CY(X.workspaceContext?.cwd?.trim()||V),K=tl(V,B);if(K===".."||K.startsWith(`..${el}`)||sl(K))throw Error("Registration cwd must be inside its workspace");return{clientId:W,workspaceContext:{workspaceRoot:V,cwd:B}}}class fY{transport;telemetry;workspaceRoot;constructor($,Z,Q){this.transport=$;this.telemetry=Z;this.workspaceRoot=Q}attach($,Z={}){let Q=new Map,X=new Set,J,W=!1,j=(K)=>{try{$.send(JSON.stringify(K))}catch(G){console.error(`[hub] failed to send websocket frame: ${G instanceof Error?G.stack||G.message:String(G)}`)}},Y=(K)=>{j({kind:"event",envelope:K})},V=async(K)=>{try{let G=JSON.parse(K.data);switch(G.kind){case"command":{let H;if(J&&G.envelope.command==="client.register"){j({kind:"reply",envelope:f5(G,"client_already_registered","This connection already owns a registered client.")});break}if(J&&G.envelope.clientId?.trim()!==J.clientId){j({kind:"reply",envelope:f5(G,"client_authority_mismatch","Command clientId does not belong to this connection.")});break}if(G.envelope.command==="client.register")try{H=Wp(G,this.workspaceRoot,Z.allowRegisteredWorkspace)}catch(T){j({kind:"reply",envelope:f5(G,"invalid_client_registration",T instanceof Error?T.message:String(T))});break}let U=performance.now(),F=!1,L=PY(G);p("info","command.start",L);let D=setTimeout(()=>{if(F)return;p("warn","command.slow",{...L,elapsedMs:Math.round(performance.now()-U)})},$p),z=this.transport.command(G.envelope,J??null);z.then((T)=>{if(!F)return;p(T.ok?"warn":"error","command.late_end",{...L,elapsedMs:Math.round(performance.now()-U),ok:T.ok,errorCode:T.error?.code,errorMessage:T.error?.message})},(T)=>{if(!F)return;p("error","command.late_error",{...L,elapsedMs:Math.round(performance.now()-U),error:T})});let _=!1,O,A,q=Zp(G.envelope.command,G.envelope.timeoutMs);try{A=q===null?await z:await Promise.race([z,new Promise((T)=>{O=setTimeout(()=>{_=!0,jN(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${G.envelope.command} did not complete within ${q}ms.`),severity:"error",handled:!0,context:{...L,timeoutMs:q}}),T(f5(G,"hub_command_timeout",`Hub command ${G.envelope.command} did not complete within ${q}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${G.envelope.requestId}.`))},q)})])}catch(T){if(clearTimeout(D),O)clearTimeout(O);throw T}if(F=_,clearTimeout(D),O)clearTimeout(O);let N=Math.round(performance.now()-U);if(_)p("error","command.timeout",{...L,durationMs:N,timeoutMs:q});else p(A.ok?"info":"warn","command.end",{...L,durationMs:N,ok:A.ok,errorCode:A.error?.code,errorMessage:A.error?.message});if(G.envelope.command==="client.register"&&A.ok){if(H)X.add(H.clientId),J=H}else if(G.envelope.command==="client.unregister"&&A.ok){let T=G.envelope.clientId?.trim();if(T)X.delete(T),J=void 0}j({kind:"reply",envelope:A});break}case"stream.subscribe":{let H=`${G.clientId}:${G.sessionId??"*"}`;if(Q.has(H))break;let U=typeof G.sinceSequence==="number"&&Number.isFinite(G.sinceSequence)&&G.sinceSequence>=0?Math.floor(G.sinceSequence):void 0;if(U===void 0||typeof this.transport.replayEventsAfter!=="function"){let q=await this.transport.subscribe(G.clientId,Y,{sessionId:G.sessionId});Q.set(H,q);break}let F=!1,L=U,D=[],z=new Set,_=(q)=>{if(typeof q.sequence==="number"){if(q.sequence<=L)return;L=q.sequence}if(q.eventId&&z){if(z.has(q.eventId))return;z.add(q.eventId)}Y(q)},O=(q)=>{if(!F){D.push(q);return}_(q)},A=await this.transport.subscribe(G.clientId,O,{sessionId:G.sessionId});Q.set(H,A);try{let q=0;while(!W&&q<Jp){let N=L,T=this.transport.replayEventsAfter(L,{sessionId:G.sessionId,limit:Xp});if(T.length===0)break;for(let M of T)_(M);if(L<=N)break;q+=1,await new Promise((M)=>setTimeout(M,0))}}finally{F=!0;for(let q of D)_(q);D.length=0,z=void 0}break}case"stream.unsubscribe":{let H=`${G.clientId}:${G.sessionId??"*"}`;Q.get(H)?.(),Q.delete(H);break}case"reply":case"event":break}}catch(G){let H=typeof K.data==="string"?Qp(K.data):void 0;if(!H||H.kind!=="command"){p("error","rejected malformed websocket frame",{error:G});return}p("error","command.error",{...PY(H),error:G}),jN(this.telemetry,{component:"core",operation:"hub.websocket_command",error:G,severity:"error",handled:!0,context:PY(H)}),j({kind:"reply",envelope:f5(H,"command_failed",G instanceof Error?G.message:"Unknown hub error")})}},B=()=>{if(W)return;W=!0;for(let K of Q.values())K();Q.clear();for(let K of X)this.transport.command({version:"v1",command:"client.unregister",clientId:K});X.clear(),$.removeEventListener("message",V),$.removeEventListener("close",B)};return $.addEventListener("message",V),$.addEventListener("close",B),B}}class wY{transport;constructor($){this.transport=$}command($,Z){return this.transport.handleCommand($,Z)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}replayEventsAfter($,Z){return this.transport.replayEventsAfter?.($,Z)??[]}}function Kp($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();return String($)}function Gp($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(X)=>{Q({data:Kp(X)})});return}$.on("close",Q)},removeEventListener(){}}}function Hp($){try{$.write(`HTTP/1.1 400 Bad Request\r
1002
+ ${Z.instructions}${X}`,j=await M5(this.ctx,{version:"v1",command:"run.start",requestId:MY("task_run_"),clientId:Q.requestedByClientId??"agenda-task-manager",sessionId:$,payload:{sessionId:$,input:W,mode:Z.mode??"act",timeoutSeconds:Z.timeoutSeconds}});if(!j.ok)return{status:"failed",error:j.error?.message??"task session run failed"};let Y=j.payload?.result,V=typeof Y?.finishReason==="string"?Y.finishReason:void 0,B=typeof Y?.text==="string"&&Y.text.trim()?Y.text.trim():void 0;if(V==="completed")return{status:"completed",summary:B};if(V==="aborted")return{status:"cancelled",summary:B};return{status:"failed",summary:B,error:B??(V?`Task session ended with ${V}`:"Task session did not return a completion result")}}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.tasks.start(),await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}this.startEventLog(),this.startRunQueue()}startEventLog(){if(this.options.eventLog===!1||this.eventLog)return;try{let $=new AY({ownerId:this.options.owner?.ownerId,...this.options.eventLog??{}});$.prune(),this.eventLog=$,this.eventLogPruneTimer=setInterval(()=>{try{$.prune()}catch{}},3600000),this.eventLogPruneTimer.unref?.()}catch($){p("error","event_log.start_failed",{error:$})}}startRunQueue(){if(this.options.runQueue===!1||this.runQueue)return;try{this.runQueue=new DY({ownerId:this.options.owner?.ownerId,...this.options.runQueue??{}}),this.runExecutor=new _Y(this.ctx,this.runQueue);let $=this.runQueue.recoverOnStartup();for(let Q of $.interrupted)this.publish(S1("run.interrupted",{runId:Q.runId,error:Q.error,reason:"hub_restart"},Q.sessionId));let Z=new Set($.requeued.map((Q)=>Q.sessionId));for(let Q of Z)this.runExecutor.pump(Q);if($.interrupted.length>0||$.requeued.length>0)p("info","run.queue.recovered",{interrupted:$.interrupted.length,requeued:$.requeued.length})}catch($){p("error","run.queue.start_failed",{error:$})}}async stop(){if(this.eventLogPruneTimer)clearInterval(this.eventLogPruneTimer),this.eventLogPruneTimer=void 0;for(let $ of this.pendingApprovals.keys())VY(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(Z2(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.tasks.dispose(),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",$)}this.eventLog?.close(),this.eventLog=void 0,this.runQueue?.close(),this.runQueue=void 0,this.runExecutor=void 0}async handleCommand($,Z){try{let Q=$.clientId?.trim(),X=Z===void 0?this.options.workspaceRoot?.trim()&&Q?{clientId:Q,workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.workspaceRoot}}:void 0:Z??void 0,J=await this.dispatchCommand($,X);return this.captureFailedReply($,J),J}catch(Q){throw eZ(this.options.telemetry,{component:"core",operation:"hub.command",error:Q,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),Q}}async dispatchCommand($,Z){if(this.draining&&MO($.command))return RO($);if(ZN($.command))return await this.taskCommands.handleCommand($,Z);switch($.command){case"client.register":{let Q=XO(this.ctx,$);return this.tasks.notifyAutomationReadinessChanged(),Q}case"client.update":{let Q=JO(this.ctx,$);return this.tasks.notifyAutomationReadinessChanged(),Q}case"client.unregister":{let Q=WO(this.ctx,$,(X)=>{this.listeners.delete(X),this.detachClientFromSessions(X)});return this.tasks.notifyAutomationReadinessChanged(),Q}case"client.list":return jO(this.ctx,$);case"session.create":return await qY(this.ctx,$,(Q)=>rZ(this.ctx,Q));case"session.restore":return await gO(this.ctx,$,(Q)=>rZ(this.ctx,Q));case"session.attach":return await mO(this.ctx,$);case"session.detach":return await cO(this.ctx,$);case"session.get":return await uO(this.ctx,$);case"session.messages":return await dO(this.ctx,$);case"session.compaction.get":return await lO(this.ctx,$);case"session.list":return await pO(this.ctx,$);case"session.update":return await iO(this.ctx,$);case"session.update_connection":return await rO(this.ctx,$);case"session.compaction.update":return await aO(this.ctx,$);case"session.pending_prompts":return await oO(this.ctx,$);case"session.update_pending_prompt":return await sO(this.ctx,$);case"session.remove_pending_prompt":return await tO(this.ctx,$);case"session.delete":return await nO(this.ctx,$);case"session.hook":return await EO(this.ctx,$);case"run.start":case"session.send_input":return await M5(this.ctx,$);case"run.enqueue":{if(!this.runQueue||!this.runExecutor)return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"run_queue_unavailable",message:"This hub has no durable run queue; use run.start instead."}};return CO(this.ctx,$,this.runQueue,this.runExecutor)}case"run.list":{if(!this.runQueue)return x($,{runs:[]});return PO($,this.runQueue)}case"hub.drain":return this.handleHubDrain($);case"hub.status":return this.handleHubStatus($);case"run.abort":return await AO(this.ctx,$);case"run.proceed_while_running":return await TO(this.ctx,$);case"capability.request":return await ZO(this.ctx,$);case"approval.respond":return await sz(this.ctx,$);case"capability.respond":return QO(this.ctx,$);case"capability.progress":return $O(this.ctx,$);case"ui.notify":return this.publish(S1("ui.notify",$.payload??{})),x($);case"ui.show_window":return this.publish(S1("ui.show_window",$.payload??{})),x($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"connector.channels":case"connector.configure":case"connector.delete_config":case"connector.start":case"connector.stop":case"connector.supervised":return await NO(this.ctx,$);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let Q=await this.scheduleCommands.handleCommand($,Z);if(Q.ok){let X=eO($.command);if(X)this.publish(S1(X,Q.payload))}return Q}}}captureFailedReply($,Z){if(Z.ok||!Z.error||!il(Z.error.code))return;eZ(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(Z.error.message),severity:Z.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:Z.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let Z=await this.settings.list(QN($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:Z instanceof Error?Z.message:String(Z)}}}}async handleSettingsToggle($){try{let Z=await this.settings.toggle(pl($.payload));return this.publish(S1("settings.changed",{types:Z.changedTypes,snapshot:Z.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:Z.snapshot,changedTypes:Z.changedTypes}}}catch(Z){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:Z instanceof Error?Z.message:String(Z)}}}}handleHubDrain($){let Z=$.payload?.draining!==!1,Q=typeof $.payload?.reason==="string"?$.payload.reason:void 0;if(this.draining!==Z)this.draining=Z,this.publish(S1("hub.drain_changed",{draining:this.draining,...Q?{reason:Q}:{}})),p("info","hub.drain_changed",{draining:this.draining,reason:Q});return x($,this.describeStatus())}handleHubStatus($){return x($,this.describeStatus())}describeStatus(){let $=0;for(let Z of this.activeRpcTurnCountBySession.values())$+=Z;return{hubId:this.hubId,draining:this.draining,activeRpcTurns:$,pendingRuns:this.runQueue?.countPending()??0,eventLog:this.eventLog?{lastSequence:this.eventLog.lastSequence()}:void 0,idle:$===0&&(this.runQueue?.countPending()??0)===0}}isDraining(){return this.draining}replayEventsAfter($,Z){if(!this.eventLog)return[];return this.eventLog.listAfter($,{sessionId:Z.sessionId},Z.limit)}lastEventSequence(){return this.eventLog?.lastSequence()??0}subscribe($,Z,Q){let X=this.listeners.get($)??new Set,J={sessionId:Q?.sessionId,listener:Z};X.add(J),this.listeners.set($,X);let W=oz(this.ctx,Q?.sessionId);if(W.length>0)queueMicrotask(()=>{if(!this.listeners.get($)?.has(J))return;for(let Y of W)try{J.listener(Y)}catch(V){N5("listener threw while re-issuing pending approval",V)}});return()=>{let j=this.listeners.get($);if(!j)return;if(j.delete(J),j.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[Z,Q]of this.sessionState.entries()){if(Q.participants.delete($),Q.createdByClientId===$)Q.createdByClientId=void 0;if(Q.participants.size===0)this.sessionState.delete(Z)}Z2(this.ctx,(Z)=>Z.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){if(this.eventLog)try{$=this.eventLog.append($)}catch(Z){N5(`event log append failed for ${$.event}`,Z)}for(let Z of this.listeners.values())for(let Q of Z){if(Q.sessionId&&Q.sessionId!==$.sessionId)continue;try{Q.listener($)}catch(X){N5(`listener threw while publishing ${$.event}`,X),eZ(this.options.telemetry,{component:"core",operation:"hub.publish",error:X,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function il($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as Vp}from"node:crypto";import Bp from"node:http";import{URL as w5}from"node:url";import{CURRENT_HUB_PROTOCOL_VERSION as SY,HUB_CAPABILITIES as Kp,MAX_CLIENT_HUB_PROTOCOL_VERSION as YN,MIN_CLIENT_HUB_PROTOCOL_VERSION as VN}from"@cline/shared";import{WebSocketServer as Gp}from"ws";import{chmodSync as rl,existsSync as al,mkdirSync as nl}from"node:fs";import{dirname as ol}from"node:path";import{loadSqliteDb as sl}from"@cline/shared/db";var qW0=3;class XN extends Error{lockFile;constructor($){super(`Hub instance lock is held by a live Hub: ${$}. Connect to the running Hub or diagnose it; never replace it.`);this.name="HubLockHeldError",this.lockFile=$}}function JN($){return $ instanceof Error&&$.name==="HubLockHeldError"}function WN($){return`${$}.instance.lock`}class U8{db;lockFile;constructor($,Z){this.lockFile=$,this.db=Z}get held(){return this.db!==void 0}release(){let $=this.db;if(!$)return;this.db=void 0;try{$.exec("ROLLBACK;")}catch{}$.close?.()}static acquire($){let Z=!1,Q;try{nl(ol($),{recursive:!0}),Z=al($),Q=sl($)}catch{return new U8($,void 0)}try{Q.exec("PRAGMA busy_timeout = 0;"),Q.exec("BEGIN EXCLUSIVE;")}catch(X){if(Q.close?.(),tl(X))throw new XN($);return new U8($,void 0)}if(!Z)try{rl($,384)}catch{}return new U8($,Q)}}function tl($){let Z=$ instanceof Error?$.message:String($),Q=$?.code;return Q==="SQLITE_BUSY"||Q==="SQLITE_LOCKED"||Z.includes("SQLITE_BUSY")||Z.includes("SQLITE_LOCKED")||Z.includes("database is locked")}import{isAbsolute as el,relative as $p,resolve as CY,sep as Zp}from"node:path";import{captureSdkError as jN,HUB_COMMAND_SLOW_LOG_MS as Qp,resolveHubCommandTimeoutMs as Xp,safeJsonParse as Jp}from"@cline/shared";var Wp=200,jp=1000;function PY($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function f5($,Z,Q){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:Z,message:Q}}}function Yp($,Z,Q=!1){let X=$.envelope.payload??{},J=$.envelope.clientId?.trim(),W=X.clientId?.trim()||J;if(!W||J&&W!==J)throw Error("Registration clientId must match the command connection");let j=X.workspaceContext?.workspaceRoot?.trim(),Y=Q?j||Z?.trim():Z?.trim();if(!Y)return{clientId:W};let V=CY(Y);if(!Q&&j&&CY(j)!==V)throw Error("Registration workspace must match the Hub-authorized workspace");let B=CY(X.workspaceContext?.cwd?.trim()||V),K=$p(V,B);if(K===".."||K.startsWith(`..${Zp}`)||el(K))throw Error("Registration cwd must be inside its workspace");return{clientId:W,workspaceContext:{workspaceRoot:V,cwd:B}}}class fY{transport;telemetry;workspaceRoot;constructor($,Z,Q){this.transport=$;this.telemetry=Z;this.workspaceRoot=Q}attach($,Z={}){let Q=new Map,X=new Set,J,W=!1,j=(K)=>{try{$.send(JSON.stringify(K))}catch(G){console.error(`[hub] failed to send websocket frame: ${G instanceof Error?G.stack||G.message:String(G)}`)}},Y=(K)=>{j({kind:"event",envelope:K})},V=async(K)=>{try{let G=JSON.parse(K.data);switch(G.kind){case"command":{let H;if(J&&G.envelope.command==="client.register"){j({kind:"reply",envelope:f5(G,"client_already_registered","This connection already owns a registered client.")});break}if(J&&G.envelope.clientId?.trim()!==J.clientId){j({kind:"reply",envelope:f5(G,"client_authority_mismatch","Command clientId does not belong to this connection.")});break}if(G.envelope.command==="client.register")try{H=Yp(G,this.workspaceRoot,Z.allowRegisteredWorkspace)}catch(T){j({kind:"reply",envelope:f5(G,"invalid_client_registration",T instanceof Error?T.message:String(T))});break}let U=performance.now(),F=!1,L=PY(G);p("info","command.start",L);let D=setTimeout(()=>{if(F)return;p("warn","command.slow",{...L,elapsedMs:Math.round(performance.now()-U)})},Qp),z=this.transport.command(G.envelope,J??null);z.then((T)=>{if(!F)return;p(T.ok?"warn":"error","command.late_end",{...L,elapsedMs:Math.round(performance.now()-U),ok:T.ok,errorCode:T.error?.code,errorMessage:T.error?.message})},(T)=>{if(!F)return;p("error","command.late_error",{...L,elapsedMs:Math.round(performance.now()-U),error:T})});let _=!1,O,A,q=Xp(G.envelope.command,G.envelope.timeoutMs);try{A=q===null?await z:await Promise.race([z,new Promise((T)=>{O=setTimeout(()=>{_=!0,jN(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${G.envelope.command} did not complete within ${q}ms.`),severity:"error",handled:!0,context:{...L,timeoutMs:q}}),T(f5(G,"hub_command_timeout",`Hub command ${G.envelope.command} did not complete within ${q}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${G.envelope.requestId}.`))},q)})])}catch(T){if(clearTimeout(D),O)clearTimeout(O);throw T}if(F=_,clearTimeout(D),O)clearTimeout(O);let N=Math.round(performance.now()-U);if(_)p("error","command.timeout",{...L,durationMs:N,timeoutMs:q});else p(A.ok?"info":"warn","command.end",{...L,durationMs:N,ok:A.ok,errorCode:A.error?.code,errorMessage:A.error?.message});if(G.envelope.command==="client.register"&&A.ok){if(H)X.add(H.clientId),J=H}else if(G.envelope.command==="client.unregister"&&A.ok){let T=G.envelope.clientId?.trim();if(T)X.delete(T),J=void 0}j({kind:"reply",envelope:A});break}case"stream.subscribe":{let H=`${G.clientId}:${G.sessionId??"*"}`;if(Q.has(H))break;let U=typeof G.sinceSequence==="number"&&Number.isFinite(G.sinceSequence)&&G.sinceSequence>=0?Math.floor(G.sinceSequence):void 0;if(U===void 0||typeof this.transport.replayEventsAfter!=="function"){let q=await this.transport.subscribe(G.clientId,Y,{sessionId:G.sessionId});Q.set(H,q);break}let F=!1,L=U,D=[],z=new Set,_=(q)=>{if(typeof q.sequence==="number"){if(q.sequence<=L)return;L=q.sequence}if(q.eventId&&z){if(z.has(q.eventId))return;z.add(q.eventId)}Y(q)},O=(q)=>{if(!F){D.push(q);return}_(q)},A=await this.transport.subscribe(G.clientId,O,{sessionId:G.sessionId});Q.set(H,A);try{let q=0;while(!W&&q<jp){let N=L,T=this.transport.replayEventsAfter(L,{sessionId:G.sessionId,limit:Wp});if(T.length===0)break;for(let M of T)_(M);if(L<=N)break;q+=1,await new Promise((M)=>setTimeout(M,0))}}finally{F=!0;for(let q of D)_(q);D.length=0,z=void 0}break}case"stream.unsubscribe":{let H=`${G.clientId}:${G.sessionId??"*"}`;Q.get(H)?.(),Q.delete(H);break}case"reply":case"event":break}}catch(G){let H=typeof K.data==="string"?Jp(K.data):void 0;if(!H||H.kind!=="command"){p("error","rejected malformed websocket frame",{error:G});return}p("error","command.error",{...PY(H),error:G}),jN(this.telemetry,{component:"core",operation:"hub.websocket_command",error:G,severity:"error",handled:!0,context:PY(H)}),j({kind:"reply",envelope:f5(H,"command_failed",G instanceof Error?G.message:"Unknown hub error")})}},B=()=>{if(W)return;W=!0;for(let K of Q.values())K();Q.clear();for(let K of X)this.transport.command({version:"v1",command:"client.unregister",clientId:K});X.clear(),$.removeEventListener("message",V),$.removeEventListener("close",B)};return $.addEventListener("message",V),$.addEventListener("close",B),B}}class wY{transport;constructor($){this.transport=$}command($,Z){return this.transport.handleCommand($,Z)}subscribe($,Z,Q){return this.transport.subscribe($,Z,Q)}replayEventsAfter($,Z){return this.transport.replayEventsAfter?.($,Z)??[]}}function Hp($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((Z)=>Buffer.from(Z))).toString();return String($)}function Up($){return{send(Z){$.send(Z)},addEventListener(Z,Q){if(Z==="message"){$.on("message",(X)=>{Q({data:Hp(X)})});return}$.on("close",Q)},removeEventListener(){}}}function Fp($){try{$.write(`HTTP/1.1 400 Bad Request\r
995
1003
  Connection: close\r
996
1004
  Content-Length: 0\r
997
1005
  \r
998
- `),$.end()}catch{$.destroy()}}function Up($){try{$.write(`HTTP/1.1 401 Unauthorized\r
1006
+ `),$.end()}catch{$.destroy()}}function Lp($){try{$.write(`HTTP/1.1 401 Unauthorized\r
999
1007
  Connection: close\r
1000
1008
  Content-Length: 0\r
1001
1009
  \r
1002
- `),$.end()}catch{$.destroy()}}function Fp($){try{$.write(`HTTP/1.1 503 Service Unavailable\r
1010
+ `),$.end()}catch{$.destroy()}}function Dp($){try{$.write(`HTTP/1.1 503 Service Unavailable\r
1003
1011
  Connection: close\r
1004
1012
  Content-Length: 0\r
1005
1013
  \r
1006
- `),$.end()}catch{$.destroy()}}function ZQ($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),X=Buffer.from(Z,"utf8");return Q.length===X.length&&jp(Q,X)}function BN($,Z){let Q=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,X=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",J=`Failed to start hub server on ${Z.host}:${Z.port}${Z.pathname}: ${X}`,W=Error(Q?`${J} (${Q})`:J);if(Q)$.code=Q,W.code=Q;if($ instanceof Error&&$.stack)W.stack=`${W.name}: ${W.message}
1007
- Caused by: ${$.stack}`;return W}function Lp($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}function KN($,Z,Q,X){try{let J=new w5($),W=new w5(W$(Z,Q===0?1:Q,X));return J.protocol===W.protocol&&J.hostname===W.hostname&&J.pathname===W.pathname&&(Q===0||J.port===W.port)}catch{return!1}}function GN($,Z,Q){return Error(`Hub owner ${$} is already running at ${Z}; refusing a second endpoint at ${Q}`)}var U$=new Map,HN="cline-hub-auth.",Dp=30000,UN=2000,_p=3000,zp=100;async function FN($,Z){let Q;try{return await Promise.race([$.then(()=>!0,()=>!0),new Promise((X)=>{Q=setTimeout(()=>X(!1),Z)})])}finally{if(Q)clearTimeout(Q)}}function kY($){return Array.isArray($)?$.join(","):$??""}function LN($){return $===32||$===9}function bY($){let Z=kY($).trim(),Q="bearer";if(Z.length<=6||Z.slice(0,6).toLowerCase()!=="bearer"||!LN(Z.charCodeAt(6)))return null;let X=7;while(X<Z.length&&LN(Z.charCodeAt(X)))X+=1;return Z.slice(X).trim()||null}function Op($){for(let Z of kY($).split(",")){let Q=Z.trim();if(Q.startsWith(HN))return Q.slice(HN.length).trim()||null}return null}function DN($){let Z=$.trim().toLowerCase();return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"||Z==="[::1]"}function Np($){let Z=kY($).trim();if(!Z)return!1;try{return DN(new w5(Z).hostname)}catch{return!1}}async function xY($){let Z=$.owner??b2(),Q=$.host??"127.0.0.1",X=$.pathname??"/hub",W=$.port??I7(),j=W,Y=W$(Q,W,X),V=h1(),B=hJ(),K=IF(),G=U8.acquire(WN(Z.discoveryPath));if(!G.held)p("warn","instance_lock.unavailable",{lockFile:G.lockFile});let H;try{H=new $Q({...$,owner:Z}),await H.start()}catch(S){throw G.release(),S}let U=H.getHubId(),F=new fY(new wY(H),$.telemetry,$.workspaceRoot),L=new Set,D=new Date().toISOString(),z={protocolVersion:SY,minClientProtocolVersion:VN,maxClientProtocolVersion:YN,capabilities:Vp,coreVersion:q2.version,buildId:V,buildEpochMs:B,pid:process.pid,startedAt:D},_=new Set,O,A,q,N=!1,T=()=>{if(A)return A;if(q){let w=U$.get(Z.discoveryPath);if(w?.server===q)w.state="closing"}if(O)clearInterval(O),O=void 0;let S=new Promise((w,k)=>{b.close((m)=>{if(m){k(m);return}w()})}),E=new Promise((w,k)=>{d.close((m)=>{if(m){k(m);return}w()})}),I=Promise.resolve().then(()=>H.stop()),f=I.then(async()=>{await hF(Z.discoveryPath,U)}),r=(async()=>{let k=(await Promise.allSettled([S,E,I,f])).flatMap((m)=>m.status==="rejected"?[m.reason]:[]);if(k.length>0)throw AggregateError(k,"hub server close failed")})().finally(()=>{if(U$.get(Z.discoveryPath)?.server===q)U$.delete(Z.discoveryPath);G.release()});A={transportStopped:I,closed:r};for(let w of _)w.terminate?.();_.clear();for(let w of L)w();return L.clear(),A},M=()=>T().closed,d=Yp.createServer((S,E)=>{if(!N){E.statusCode=503,E.end("Starting");return}if((S.url??"/")==="/health"){let f=JSON.stringify({ok:!0,protocolVersion:z.protocolVersion,minClientProtocolVersion:z.minClientProtocolVersion,maxClientProtocolVersion:z.maxClientProtocolVersion,coreVersion:z.coreVersion,buildId:z.buildId,buildEpochMs:z.buildEpochMs,draining:H.isDraining(),host:Q,port:j,url:Y});E.statusCode=200,E.setHeader("content-type","application/json"),E.end(f);return}if((S.url??"/")==="/status"){if(!ZQ(bY(S.headers.authorization),K)){E.statusCode=401,E.end("Unauthorized");return}let f=JSON.stringify({hubId:U,...z,authToken:K,host:Q,port:j,url:Y,updatedAt:new Date().toISOString()});E.statusCode=200,E.setHeader("content-type","application/json"),E.end(f);return}if((S.url??"/")==="/version"){E.statusCode=200,E.setHeader("content-type","application/json"),E.end(JSON.stringify(z));return}let I=new w5(S.url??"/",`http://${Q}:${j}`);if(I.pathname==="/drain"&&S.method==="POST"){if(!ZQ(bY(S.headers.authorization),K)){E.statusCode=401,E.end("Unauthorized");return}let f=I.searchParams.get("off")===null;H.handleCommand({version:SY,command:"hub.drain",payload:{draining:f,reason:I.searchParams.get("reason")??"authenticated HTTP drain request"}}).then((r)=>{E.statusCode=r.ok?200:500,E.setHeader("content-type","application/json"),E.end(JSON.stringify(r.payload??{ok:r.ok}))},()=>{E.statusCode=500,E.end("Drain failed")});return}if(I.pathname==="/shutdown"&&S.method==="POST"){if(!ZQ(bY(S.headers.authorization),K)){E.statusCode=401,E.end("Unauthorized");return}E.statusCode=202,E.setHeader("content-type","application/json"),E.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{try{Promise.resolve($.onShutdownRequested?.()).catch(()=>{return})}catch{}finally{M().catch(()=>{return})}});return}E.statusCode=404,E.end("Not found")}),b=new Bp({noServer:!0});O=setInterval(()=>{for(let S of _){if(S.isAlive===!1){try{S.terminate?.()}catch{}_.delete(S);continue}S.isAlive=!1;try{S.ping?.()}catch{try{S.terminate?.()}catch{}_.delete(S)}}},Dp),d.on("upgrade",(S,E,I)=>{if(!N){Fp(E);return}if(new w5(S.url??"/",`http://${Q}:${j}`).pathname!==X){E.destroy();return}let r=ZQ(Op(S.headers["sec-websocket-protocol"]),K);if(!(r||DN(Q)&&Np(S.headers.origin))){Up(E);return}try{b.handleUpgrade(S,E,I,(k)=>{let m=k;m.isAlive=!0,m.on("pong",()=>{m.isAlive=!0}),_.add(m);let t=F.attach(Gp(k),{allowRegisteredWorkspace:r});L.add(t),k.once("close",()=>{_.delete(m),t(),L.delete(t)})})}catch{Hp(E)}});try{await new Promise((S,E)=>{d.once("error",(I)=>{E(BN(I,{host:Q,port:W,pathname:X}))}),d.listen(W,Q,()=>{let I=d.address();if(!I||typeof I==="string"){E(BN(Error("Failed to resolve hub port"),{host:Q,port:W,pathname:X}));return}j=I.port,Y=W$(Q,j,X),S()})})}catch(S){if(O)clearInterval(O),O=void 0;throw await FN(Promise.resolve().then(()=>H.stop()),UN),G.release(),S}try{await x7(Z.discoveryPath,{hubId:U,protocolVersion:SY,minClientProtocolVersion:VN,maxClientProtocolVersion:YN,capabilities:[...z.capabilities],coreVersion:q2.version,buildId:V,buildEpochMs:B,authToken:K,host:Q,port:j,url:Y,pid:process.pid,startedAt:D,updatedAt:D}),N=!0}catch(S){if(!await FN(T().closed,UN))try{d.closeAllConnections(),d.unref()}catch{}throw S}return q={host:Q,port:j,url:Y,authToken:K,beginClose:T,close:M},q}async function _N($){let Z=$.owner??b2(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),X=$.host??"127.0.0.1",J=$.port??I7(),W=$.pathname??"/hub",j=W$(X,J,W),Y=Z.discoveryPath,V=(K)=>{if(!Q)u6(K.url,K.authToken);return K},B=U$.get(Y);if(B){let K=await B.promise;if(B.state==="closing"){if(await K.beginClose().closed.catch(()=>{return}),U$.get(Y)===B)U$.delete(Y)}else if(KN(K.url,X,J,W)||$.allowPortFallback===!0)return V({server:K,url:K.url,authToken:K.authToken,action:"reuse"});else throw GN(Z.ownerId,K.url,j)}return await y7(Z.discoveryPath,async()=>{let K=await x0(Z.discoveryPath);if(K?.url){let U=await J$(K.url,{authToken:K.authToken});if(U?.url&&c6(U)&&await F1(U.url,{authToken:K.authToken})){if(KN(K.url,X,J,W)||$.allowPortFallback===!0)return V({url:U.url,authToken:K.authToken,action:"reuse"});throw GN(Z.ownerId,K.url,j)}if(U?.url){let F={url:U.url,authToken:K.authToken,pid:U.pid??K.pid};if(await lJ(F)){if(await F1(U.url,{authToken:K.authToken}))return V({url:U.url,authToken:K.authToken,action:"reuse"})}else await k4(F,Z.discoveryPath)}else await X$(Z.discoveryPath)}let G=async(U)=>{let F=xY({...U,owner:Z}),L={promise:F,state:"starting"};U$.set(Y,L);try{let D=await F;return L.server=D,L.state="open",V({server:D,url:D.url,authToken:D.authToken,action:"started"})}catch(D){if(U$.get(Y)===L)U$.delete(Y);throw D}},H=Date.now()+_p;for(;;)try{return await G($)}catch(U){if(JN(U)&&Date.now()<H){await new Promise((F)=>setTimeout(F,zp));continue}if(!$.allowPortFallback||!Lp(U))throw U;return await G({...$,port:0})}})}function ON(){return zN()==="production"?v1():P1()}function qp($){return zN()!=="production"&&!$}async function eW0($){let Z=k2({host:$.host,port:$.port,pathname:$.pathname});return await xY({...$,...Z,owner:ON()})}async function $j0($){let Z=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=k2({host:$.host,port:$.port,pathname:$.pathname});return await _N({...$,...Q,allowPortFallback:$.allowPortFallback??qp(Z),owner:ON()})}QQ();import{buildRemoteConfigSessionBlobUploadMetadata as qN,clearRemoteConfigSessionBlobUpload as Ap,createClineTelemetryServiceConfig as Tp,createSessionId as Ep,createRemoteConfigSessionMessagesArtifactUploader as Mp,prepareRemoteConfigRuntime as Rp,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as AN,readRemoteConfigSessionBlobUploadMetadata as Cp,registerRemoteConfigSessionBlobUpload as TN}from"@cline/shared";function Pp($,Z){let Q=$.telemetry||Z.telemetryService?{...Z.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return d2(Tp(Q)).telemetry}function fp(){let $=Mp();return{async uploadMessagesFile(Z){await $.uploadMessagesFile(Z)}}}async function wp($){let Z=await Rp($),Q=Pp(Z,$),X=[Z.pluginDefinition],J=Z.claims?.subject,W=qN(Z.bundle?.remoteConfig,J),j;return{prepared:Z,extensions:X,telemetry:Q,applyToStartSessionInput(Y){let V=Y.config.extensions??[],B=Y.config.telemetry,K=W?Y.config.sessionId?.trim()||Ep():Y.config.sessionId;if(K&&W)j=K;let G=K&&W?TN(K,Z.bundle?.remoteConfig,J):void 0,H=G?{...Y.sessionMetadata??{},[AN]:G}:Y.sessionMetadata;return{...Y,...H?{sessionMetadata:H}:{},config:{...Y.config,...K?{sessionId:K}:{},extensions:[...V,...X],telemetry:Q??B}}},async dispose(){if(j)Ap(j)}}}import{mkdir as Sp,readFile as bp,unlink as kp,writeFile as xp}from"node:fs/promises";import{join as EN}from"node:path";function yp($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function Ip($){return new Promise((Z)=>setTimeout(Z,$))}async function yY($){try{await kp($)}catch{}}async function hp($,Z={}){let Q=Z.approvalDir?.trim(),X=Z.sessionId?.trim();if(!Q||!X)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await Sp(Q,{recursive:!0});let J=yp(`${$.toolCallId}`),W=EN(Q,`${X}.request.${J}.json`),j=EN(Q,`${X}.decision.${J}.json`),Y=Z.nowIso??(()=>new Date().toISOString());await xp(W,`${JSON.stringify({requestId:J,sessionId:X,createdAt:Y(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
1008
- `,"utf8");let V=Z.timeoutMs??300000,B=Z.pollIntervalMs??200,K=Date.now();while(Date.now()-K<V){try{let G=await bp(j,"utf8"),H=JSON.parse(G),U={approved:H.approved===!0,reason:typeof H.reason==="string"?H.reason:void 0};return await Promise.all([yY(j),yY(W)]),U}catch{}await Ip(B)}return await yY(W),{approved:!1,reason:"Tool approval request timed out"}}import{spawn as vp}from"node:child_process";import{readConnectorCliLaunchSpec as gp}from"@cline/shared";var mp=15000;async function cp($,Z,Q={}){let X="launchSpec"in Q?Q.launchSpec:gp();if(!X)throw Error("connector CLI launch information is unavailable");let J=Q.spawnProcess??vp,W=Q.timeoutMs??mp;await new Promise((j,Y)=>{let V=!1,B,K=(U)=>{if(V)return;if(V=!0,B)clearTimeout(B);if(U)Y(U);else j()},G;try{G=J(X.launcher,[...X.connectArgsPrefix,"--cleanup-instance",Z,$],{cwd:X.cwd,env:T5(),stdio:["ignore","ignore","pipe"],windowsHide:!0})}catch(U){K(U instanceof Error?U:Error(String(U)));return}let H="";G.stderr?.setEncoding("utf8"),G.stderr?.on("data",(U)=>{H+=String(U)}),B=setTimeout(()=>{try{G.kill("SIGKILL")}catch{}K(Error(`cleanup timed out after ${W}ms`))},W),B.unref?.(),G.once("error",(U)=>{K(U instanceof Error?U:Error(String(U)))}),G.once("close",(U)=>{if(U===0||U===null){K();return}K(Error(`cleanup exited with code ${U}${H.trim()?`: ${H.trim()}`:""}`))})})}M1();import{spawn as Pi}from"node:child_process";import{existsSync as xN,rmSync as fi}from"node:fs";import{homedir as wi,platform as Si}from"node:os";import{dirname as bi,join as kN}from"node:path";import{resolveClineDir as ki,resolveMcpSettingsPath as xi}from"@cline/shared/storage";function up($){let Z=($??"stdio").trim();if(Z==="http"||Z==="streamable-http")return"streamableHttp";if(Z==="stdio"||Z==="sse"||Z==="streamableHttp")return Z;throw Error(`Unsupported MCP transport "${Z}". Expected stdio, sse, http, streamable-http, or streamableHttp.`)}function dp($){let Z;try{Z=new URL($)}catch{throw Error(`Invalid MCP server URL: ${$}`)}if(Z.protocol!=="http:"&&Z.protocol!=="https:")throw Error(`Invalid MCP server URL: ${$} (only http and https are supported)`)}function lp($){let Z=$.indexOf(":");if(Z<=0)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);let Q=$.slice(0,Z).trim(),X=$.slice(Z+1).trim();if(!Q||!X)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);if(!/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(Q))throw Error(`Invalid MCP header name "${Q}".`);return[Q,X]}function pp($){let Z=$.indexOf("<");return Z>=0&&$.indexOf(">",Z+1)>Z+1}function MN($){let Z=[...$.headers??[]],Q=[],X=$.transport,J=$.targetArgs??[];for(let W=0;W<J.length;W++){let j=J[W];if($.parseTransport&&j==="--transport"){let Y=J[W+1];if(!Y)throw Error("--transport requires a value");X=Y,W++;continue}if($.parseTransport&&j?.startsWith("--transport=")){X=j.slice(12);continue}if(j==="--header"){let Y=J[W+1];if(!Y)throw Error("--header requires a value");Z.push(Y),W++;continue}if(j?.startsWith("--header=")){Z.push(j.slice(9));continue}Q.push(j)}return{headers:Z,targetArgs:Q,transport:X}}function ip($){if($.length===0)return{warnings:[]};let Z={},Q=[];for(let X of $){let[J,W]=lp(X);if(Z[J]=W,pp(W))Q.push(`Header "${J}" looks like it contains a placeholder. Update it in MCP settings before using this server.`)}return{headers:Z,warnings:Q}}function RN($){let Z=$.name.trim();if(!Z)throw Error("MCP server name is required");let{headers:Q,targetArgs:X,transport:J}=MN({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),W=up(J),{headers:j,warnings:Y}=ip(Q);if(W==="stdio"){if(Q.length>0)throw Error("Stdio MCP installs do not support request headers.");let[B,...K]=X;if(!B?.trim())throw Error("Stdio MCP install requires a command after the server name, for example: cline mcp install fs --yes -- npx -y @modelcontextprotocol/server-filesystem /tmp");let G=V7({type:W,command:B,args:K.length>0?K:void 0});return{name:Z,transport:G,warnings:Y}}if(X.length!==1)throw Error("Remote MCP install requires exactly one URL argument after the server name.");let V=X[0]?.trim()??"";return dp(V),{name:Z,transport:j?{type:W,url:V,headers:j}:{type:W,url:V},warnings:Y}}function IY($){let[Z,...Q]=$;if(!Z)throw Error("Marketplace MCP install args must start with a server name.");return{name:Z,...MN({parseTransport:!0,targetArgs:Q})}}function rp($,Z,Q){x1(Q,(X)=>{let J=X.mcpServers,W=J&&typeof J==="object"&&!Array.isArray(J)?{...J}:{};W[$]={transport:Z},X.mcpServers=W})}function ap($){let{name:Z,transport:Q,warnings:X}=RN($);return rp(Z,Q,$.settingsPath??V0()),{name:Z,status:"installed",transport:Q,warnings:X}}function np($,Z){return x1(Z,(Q)=>{let X=Q.mcpServers,J=X&&typeof X==="object"&&!Array.isArray(X)?X:{};if(!Object.hasOwn(J,$))throw Error(`MCP server "${$}" is not installed.`);return delete J[$],Q.mcpServers=J,!0})}function op($){let Z=$.name.trim();if(!Z)throw Error("MCP server name is required");let Q=$.settingsPath??V0();return np(Z,Q),{name:Z,status:"uninstalled"}}M1();import{existsSync as L8,readdirSync as ji,readFileSync as Yi,rmdirSync as Vi,rmSync as Bi,statSync as Ki}from"node:fs";import{basename as E1,dirname as Q2,extname as Gi,isAbsolute as Hi,join as F$,relative as Ui,resolve as F8,sep as uY}from"node:path";import{discoverPluginModulePaths as Fi,resolvePluginConfigSearchPaths as Li}from"@cline/shared/storage";import{existsSync as sp,mkdirSync as tp,readFileSync as ep,writeFileSync as $i}from"node:fs";import{dirname as PN,isAbsolute as Zi,relative as Qi,resolve as CN}from"node:path";function o2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function XQ($,Z){let Q=Qi(CN($),CN(Z));return Q===""||!Q.startsWith("..")&&!Zi(Q)}function hY($){if(!sp($))return{mcpServers:{}};try{let Z=JSON.parse(ep($,"utf8"));if(o2(Z))return Z}catch(Z){throw Error(`Invalid MCP settings at "${$}": ${Z instanceof Error?Z.message:String(Z)}`)}throw Error(`Invalid MCP settings at "${$}": expected an object`)}function vY($){if(o2($.mcpServers))return{...$.mcpServers};return{}}function gY($,Z,Q){tp(PN($),{recursive:!0}),$i($,`${JSON.stringify({...Z,mcpServers:Q},null,2)}
1009
- `,"utf8")}function fN($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))]}}function WQ($){if(!o2($))return;let Z=$.metadata;return o2(Z)?Z:void 0}function JQ($,Z){let Q=WQ($);if(!Q||Q.source!=="plugin")return!1;let X=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,J=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&X===Z.pluginName){if(!Z.pluginPath||J===Z.pluginPath)return!0}if(J&&Z.pluginPath&&(J===Z.pluginPath||XQ(Z.pluginPath,J)||XQ(J,Z.pluginPath)))return!0;if(X&&Z.pluginNames?.some((W)=>W===X))return!0;if(J&&Z.pluginPaths?.some((W)=>J===W||XQ(W,J)||XQ(J,W)))return!0;return!1}function Xi($){let Z=o2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:PN($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function Ji($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await G6({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],X=[],J=(Z.failures??[]).map((W)=>({pluginPath:W.pluginPath,pluginName:W.pluginName,message:W.message}));for(let W of Z.extensions??[]){let j=W.__clinePluginPath;if(!j)continue;if(!W.setup){Q.push({pluginName:W.name,pluginPath:j});continue}let Y=[],V={registerTool:(B)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(B)=>{if(!W.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');Y.push(B)}};try{await W.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(B){J.push({pluginPath:j,pluginName:W.name,message:B instanceof Error?B.message:String(B)});continue}Q.push({pluginName:W.name,pluginPath:j});for(let B of Y)X.push({pluginName:W.name,pluginPath:j,server:{...B,metadata:{...B.metadata??{},source:"plugin",pluginName:W.name,pluginPath:j}}})}return{plugins:Q,servers:X,failures:J}}finally{await Z.shutdown().catch(()=>{})}}async function mY($){let Z=$.settingsPath??V0(),Q={mutations:[],failures:[]},X;try{X=await Ji($)}catch(B){for(let K of $.pluginPaths)Q.failures.push({pluginPath:K,message:B instanceof Error?B.message:String(B)});return Q}Q.failures.push(...X.failures);let J;try{J=hY(Z)}catch(B){for(let K of $.pluginPaths)Q.failures.push({pluginPath:K,message:B instanceof Error?B.message:String(B)});return Q}let W=vY(J),j=new Map,Y=new Map;for(let B of X.plugins)j.set(B.pluginPath,new Set),Y.set(B.pluginPath,B.pluginName);let V=rX(X.servers.map((B)=>({server:B.server,owner:B,ownerLabel:B.pluginName})));for(let B of V){let K=B.owner;if(!j.has(K.pluginPath))j.set(K.pluginPath,new Set);if(B.name)j.get(K.pluginPath)?.add(B.name);if(!B.registration){Q.mutations.push({name:B.name,pluginName:K.pluginName,pluginPath:K.pluginPath,action:"skipped",reason:B.loadError??"invalid MCP server registration"});continue}let G=W[B.registration.name];if(G!==void 0){if(!JQ(G,{pluginName:K.pluginName,pluginPath:K.pluginPath})){Q.mutations.push({name:B.registration.name,pluginName:K.pluginName,pluginPath:K.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}W[B.registration.name]=Xi({registration:B.registration,pluginName:K.pluginName,pluginPath:K.pluginPath,existing:o2(G)?G:void 0}),Q.mutations.push({name:B.registration.name,pluginName:K.pluginName,pluginPath:K.pluginPath,action:G===void 0?"created":"updated"})}for(let[B,K]of Object.entries(W)){let G=WQ(K),H=typeof G?.pluginPath==="string"?G.pluginPath:"",U=j.get(H);if(U&&JQ(K,{pluginPath:H})&&!U.has(B))delete W[B],Q.mutations.push({name:B,pluginName:typeof G?.pluginName==="string"?G.pluginName:Y.get(H)??"plugin",pluginPath:H,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((B)=>B.action!=="skipped"))try{gY(Z,J,W)}catch(B){for(let K of $.pluginPaths)Q.failures.push({pluginPath:K,message:B instanceof Error?B.message:String(B)})}return Q}function Wi($){let Z=$.settingsPath??V0(),Q;try{Q=hY(Z)}catch{return[]}let X=vY(Q),J=fN($),W=[];for(let[j,Y]of Object.entries(X)){if(!o2(Y)||!JQ(Y,J))continue;let V=WQ(Y);X[j]={...Y,disabled:!0},W.push({name:j,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(W.length>0)gY(Z,Q,X);return W}function cY($){let Z=$.settingsPath??V0(),Q;try{Q=hY(Z)}catch{return[]}let X=vY(Q),J=fN($),W=[];for(let[j,Y]of Object.entries(X)){if(!JQ(Y,J))continue;let V=WQ(Y);delete X[j],W.push({name:j,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(W.length>0)gY(Z,Q,X);return W}var rY="_installed",Di="package",_i=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function dY($){return $.trim().toLowerCase()}function b1($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function zi($){return $.replace(/-[0-9a-f]{12}$/i,"")}function lY($){let Z=Gi($);return Z?$.slice(0,-Z.length):$}function pY($){if(!L8($))return;try{let Z=JSON.parse(Yi($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function aY($,Z){let Q=Ui(Z,$);return Q===""||!Q.startsWith("..")&&!Hi(Q)}function wN($){let Q=F8($).split(uY),X=Q.lastIndexOf(rY);if(X<0)return;let J=Q[X+1];if(!J)return;let W=_i.get(J)??1,j=X+2+W;if(Q.length<j)return;let Y=Q.slice(0,j).join(uY)||uY;return L8(Y)?Y:void 0}function jQ($){try{return ji($,{withFileTypes:!0})}catch{return[]}}function Oi($){let Z=F$($,rY);if(!L8(Z))return[];let Q=[];for(let X of jQ(Z)){if(!X.isDirectory())continue;let J=F$(Z,X.name);if(X.name==="git"){for(let W of jQ(J)){if(!W.isDirectory())continue;let j=F$(J,W.name);for(let Y of jQ(j))if(Y.isDirectory())Q.push(F$(j,Y.name))}continue}for(let W of jQ(J))if(W.isDirectory())Q.push(F$(J,W.name))}return Q.sort((X,J)=>X.localeCompare(J))}function SN($){try{return Fi($)}catch{return[]}}function iY($){let Z=SN($),Q=new Set;b1(Q,E1($)),b1(Q,zi(E1($))),b1(Q,pY(F$($,"package.json"))),b1(Q,pY(F$($,Di,"package.json")));for(let X of Z)b1(Q,E1(X)),b1(Q,lY(E1(X)));return{installPath:$,entryPaths:Z,names:[...Q].sort((X,J)=>X.localeCompare(J)),installed:!0}}function Ni($,Z){let Q=F8($),X=Z.find((j)=>aY(Q,j));if(!X)return;let J=Q2(Q);while(J!==X&&J!==Q2(J)){if(L8(F$(J,"package.json")))return J;J=Q2(J)}let W=E1(Q);if((W==="index.ts"||W==="index.js")&&Q2(Q)!==X)return Q2(Q);return Q}function bN($,Z){let Q=Ni($,Z);if(!Q)return;let X=new Set;return b1(X,E1($)),b1(X,lY(E1($))),b1(X,E1(Q)),b1(X,lY(E1(Q))),b1(X,pY(F$(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...X].sort((J,W)=>J.localeCompare(W)),installed:!1}}function qi($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return Li(Z).filter((Q)=>L8(Q))}function Ai($){let Z=new Map;for(let Q of $){for(let X of Oi(Q))Z.set(X,iY(X));for(let X of SN(Q)){let J=wN(X);if(J){if(!Z.has(J))Z.set(J,iY(J));continue}let W=bN(X,$);if(W)Z.set(W.installPath,W)}}return[...Z.values()].sort((Q,X)=>Q.installPath.localeCompare(X.installPath))}function Ti($,Z){let Q=dY(Z);if(!Q)return!1;if(dY($.installPath)===Q)return!0;return $.names.some((X)=>dY(X)===Q)}function Ei($,Z,Q){let X=F8($);for(let W of Z){if(aY(X,W.installPath))return W;if(W.entryPaths.some((j)=>F8(j)===X))return W}let J=wN(X);if(J)return iY(J);if(L8(X))return bN(X,Q);return}function Mi($){let Z=W0(),Q=Z.disabledPlugins;if(!Q?.length)return;let X=Q.filter((J)=>{let W=F8(J);if(aY(W,$.installPath))return!1;return!$.entryPaths.some((j)=>F8(j)===W)});if(X.length===Q.length)return;d0({...Z,disabledPlugins:X})}function Ri($){let Z=Q2($);while(Z!==Q2(Z)&&E1(Z)!==rY){try{Vi(Z)}catch{return}Z=Q2(Z)}}function Ci($){return`${$.names[0]??E1($.installPath)} at ${$.installPath}`}async function nY($){let Z=qi($),Q=Ai(Z),X=$.path?.trim(),J=$.name?.trim(),W;if(X){if(W=Ei(X,Q,Z),!W)throw Error(`No plugin found at ${X}`)}else{if(!J)throw Error("plugin uninstall requires a plugin name");let Y=Q.filter((V)=>Ti(V,J));if(Y.length===0)throw Error(`No plugin found matching "${J}"`);if(Y.length>1)throw Error(`Multiple plugins match "${J}": ${Y.map(Ci).join(", ")}`);W=Y[0]}let j=Ki(W.installPath,{throwIfNoEntry:!1});if(!j)throw Error(`Plugin install path does not exist: ${W.installPath}`);if(cY({pluginPaths:[W.installPath,...W.entryPaths],pluginNames:W.names}),Bi(W.installPath,{recursive:j.isDirectory(),force:!0}),Mi(W),W.installed)Ri(W.installPath);return{name:J||W.names[0]||E1(W.installPath),installPath:W.installPath,removedPaths:[W.installPath],entryPaths:W.entryPaths}}var oY=120000,S5=12000,yi=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,Ii=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,hi=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,vi=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function sY($){return $.install?.args??[]}function gi(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||wi()}function mi($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function ci($){return mi($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function yN($){return $.split(/\r?\n/).map((Z)=>{if(!yi.test(Z))return Z;return Z.replace(Ii,"$1[redacted]").replace(hi,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(vi,"$1 [redacted]").replace(/((?:^|[^\w])(?:api\s+key|access\s+token|refresh\s+token|auth(?:orization)?\s+token|secret|password|credential)\s+(?:is\s+)?)(\S+)/gi,"$1[redacted]")}).join(`
1010
- `).slice(-S5)}function ui($){let Z=yN([$.stdout,$.stderr].filter(Boolean).join(`
1011
- `)).trim();return Z.length>0?Z:void 0}function di($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function li($,Z){return[$,...Z].map((Q)=>di(yN(Q).trim())).join(" ")}var pi=async($,Z)=>new Promise((Q,X)=>{let J=!1,W=!1,j=Pi($,Z,{env:process.env,shell:Si()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),Y="",V="",B=setTimeout(()=>{if(!J)j.kill("SIGKILL")},oY+5000),K=setTimeout(()=>{W=!0,V+=`
1012
- Timed out after ${oY/1000}s.`,j.kill("SIGTERM")},oY);B.unref?.(),K.unref?.(),j.stdout?.on("data",(G)=>{if(Y+=String(G),Y.length>S5*2)Y=Y.slice(-S5)}),j.stderr?.on("data",(G)=>{if(V+=String(G),V.length>S5*2)V=V.slice(-S5)}),j.once("error",(G)=>{clearTimeout(K),clearTimeout(B),X(G)}),j.once("close",(G,H)=>{J=!0,clearTimeout(K),clearTimeout(B),Q({exitCode:W?124:G??(H==="SIGINT"?130:1),stdout:Y,stderr:V})})});function ii($){return`${$.type}:${$.id}`}function tY($){let Z=sY($);if(Z.length===0)throw Error("Marketplace install args are required.");return IY(Z).name}function IN($,Z={}){let Q=tY($),X=Z.mcpSettingsPath??xi(),J=x1(X,(W)=>{let j=W.mcpServers&&typeof W.mcpServers==="object"&&!Array.isArray(W.mcpServers)?W.mcpServers:{},Y=Object.hasOwn(j,Q);if(Y)delete j[Q];return W.mcpServers=j,Y});return{name:Q,deleted:J}}function eY($){let Z=new Set,Q=(J)=>{let W=ci(J??"");if(W&&W!=="skill")Z.add(W)};Q($.id),Q($.name);let X=sY($);for(let J=0;J<X.length;J++){let W=X[J];if((W==="--skill"||W==="-s")&&X[J+1]){Q(X[J+1]),J++;continue}let j=W.split("@").at(1);if(j)Q(j)}return[...Z]}function $V($){return[kN(ki(),"skills",$,"SKILL.md"),kN(gi(),".agents","skills",$,"SKILL.md")].filter((Z,Q,X)=>X.indexOf(Z)===Q)}function ZV($){if($.type!=="skill")return;return eY($).find((Z)=>$V(Z).some((Q)=>xN(Q)))}function hN($){return ZV($)!==void 0}function ri($){let Z=[];if($.type!=="skill")return Z;for(let Q of eY($))for(let X of $V(Q)){if(!xN(X))continue;let J=bi(X);fi(J,{recursive:!0,force:!0}),Z.push(J)}return Z}async function vN($,Z={}){let Q=ZV($);if(!Q)return{id:$.id,type:"skill",status:"uninstalled",message:`${$.name??$.id} is not installed.`};let X="npx",J=["-y","skills@latest","remove",Q,"-g","-y"],W=li(X,J),j=Z.spawnCommand??pi,Y;try{Y=await j(X,J)}catch(K){throw Error(`Failed to start ${$.name??$.id} uninstall command:
1014
+ `),$.end()}catch{$.destroy()}}function ZQ($,Z){if(!$||!Z)return!1;let Q=Buffer.from($,"utf8"),X=Buffer.from(Z,"utf8");return Q.length===X.length&&Vp(Q,X)}function BN($,Z){let Q=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,X=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",J=`Failed to start hub server on ${Z.host}:${Z.port}${Z.pathname}: ${X}`,W=Error(Q?`${J} (${Q})`:J);if(Q)$.code=Q,W.code=Q;if($ instanceof Error&&$.stack)W.stack=`${W.name}: ${W.message}
1015
+ Caused by: ${$.stack}`;return W}function _p($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}function KN($,Z,Q,X){try{let J=new w5($),W=new w5(W$(Z,Q===0?1:Q,X));return J.protocol===W.protocol&&J.hostname===W.hostname&&J.pathname===W.pathname&&(Q===0||J.port===W.port)}catch{return!1}}function GN($,Z,Q){return Error(`Hub owner ${$} is already running at ${Z}; refusing a second endpoint at ${Q}`)}var U$=new Map,HN="cline-hub-auth.",zp=30000,UN=2000,Op=3000,Np=100;async function FN($,Z){let Q;try{return await Promise.race([$.then(()=>!0,()=>!0),new Promise((X)=>{Q=setTimeout(()=>X(!1),Z)})])}finally{if(Q)clearTimeout(Q)}}function kY($){return Array.isArray($)?$.join(","):$??""}function LN($){return $===32||$===9}function bY($){let Z=kY($).trim(),Q="bearer";if(Z.length<=6||Z.slice(0,6).toLowerCase()!=="bearer"||!LN(Z.charCodeAt(6)))return null;let X=7;while(X<Z.length&&LN(Z.charCodeAt(X)))X+=1;return Z.slice(X).trim()||null}function qp($){for(let Z of kY($).split(",")){let Q=Z.trim();if(Q.startsWith(HN))return Q.slice(HN.length).trim()||null}return null}function DN($){let Z=$.trim().toLowerCase();return Z==="localhost"||Z==="127.0.0.1"||Z==="::1"||Z==="[::1]"}function Ap($){let Z=kY($).trim();if(!Z)return!1;try{return DN(new w5(Z).hostname)}catch{return!1}}async function xY($){let Z=$.owner??b2(),Q=$.host??"127.0.0.1",X=$.pathname??"/hub",W=$.port??I7(),j=W,Y=W$(Q,W,X),V=h1(),B=hJ(),K=IF(),G=U8.acquire(WN(Z.discoveryPath));if(!G.held)p("warn","instance_lock.unavailable",{lockFile:G.lockFile});let H;try{H=new $Q({...$,owner:Z}),await H.start()}catch(S){throw G.release(),S}let U=H.getHubId(),F=new fY(new wY(H),$.telemetry,$.workspaceRoot),L=new Set,D=new Date().toISOString(),z={protocolVersion:SY,minClientProtocolVersion:VN,maxClientProtocolVersion:YN,capabilities:Kp,coreVersion:q2.version,buildId:V,buildEpochMs:B,pid:process.pid,startedAt:D},_=new Set,O,A,q,N=!1,T=()=>{if(A)return A;if(q){let w=U$.get(Z.discoveryPath);if(w?.server===q)w.state="closing"}if(O)clearInterval(O),O=void 0;let S=new Promise((w,k)=>{b.close((m)=>{if(m){k(m);return}w()})}),E=new Promise((w,k)=>{d.close((m)=>{if(m){k(m);return}w()})}),I=Promise.resolve().then(()=>H.stop()),P=I.then(async()=>{await hF(Z.discoveryPath,U)}),i=(async()=>{let k=(await Promise.allSettled([S,E,I,P])).flatMap((m)=>m.status==="rejected"?[m.reason]:[]);if(k.length>0)throw AggregateError(k,"hub server close failed")})().finally(()=>{if(U$.get(Z.discoveryPath)?.server===q)U$.delete(Z.discoveryPath);G.release()});A={transportStopped:I,closed:i};for(let w of _)w.terminate?.();_.clear();for(let w of L)w();return L.clear(),A},M=()=>T().closed,d=Bp.createServer((S,E)=>{if(!N){E.statusCode=503,E.end("Starting");return}if((S.url??"/")==="/health"){let P=JSON.stringify({ok:!0,protocolVersion:z.protocolVersion,minClientProtocolVersion:z.minClientProtocolVersion,maxClientProtocolVersion:z.maxClientProtocolVersion,coreVersion:z.coreVersion,buildId:z.buildId,buildEpochMs:z.buildEpochMs,draining:H.isDraining(),host:Q,port:j,url:Y});E.statusCode=200,E.setHeader("content-type","application/json"),E.end(P);return}if((S.url??"/")==="/status"){if(!ZQ(bY(S.headers.authorization),K)){E.statusCode=401,E.end("Unauthorized");return}let P=JSON.stringify({hubId:U,...z,authToken:K,host:Q,port:j,url:Y,updatedAt:new Date().toISOString()});E.statusCode=200,E.setHeader("content-type","application/json"),E.end(P);return}if((S.url??"/")==="/version"){E.statusCode=200,E.setHeader("content-type","application/json"),E.end(JSON.stringify(z));return}let I=new w5(S.url??"/",`http://${Q}:${j}`);if(I.pathname==="/drain"&&S.method==="POST"){if(!ZQ(bY(S.headers.authorization),K)){E.statusCode=401,E.end("Unauthorized");return}let P=I.searchParams.get("off")===null;H.handleCommand({version:SY,command:"hub.drain",payload:{draining:P,reason:I.searchParams.get("reason")??"authenticated HTTP drain request"}}).then((i)=>{E.statusCode=i.ok?200:500,E.setHeader("content-type","application/json"),E.end(JSON.stringify(i.payload??{ok:i.ok}))},()=>{E.statusCode=500,E.end("Drain failed")});return}if(I.pathname==="/shutdown"&&S.method==="POST"){if(!ZQ(bY(S.headers.authorization),K)){E.statusCode=401,E.end("Unauthorized");return}let P=!1,i=()=>{if(P)return;P=!0;try{Promise.resolve($.onShutdownRequested?.()).catch(()=>{return})}catch{}finally{M().catch(()=>{return})}};E.statusCode=202,E.setHeader("content-type","application/json"),E.setHeader("connection","close");let w=setTimeout(i,1000);w.unref?.(),E.end(JSON.stringify({ok:!0}),()=>{setImmediate(()=>{clearTimeout(w),i()})});return}E.statusCode=404,E.end("Not found")}),b=new Gp({noServer:!0});O=setInterval(()=>{for(let S of _){if(S.isAlive===!1){try{S.terminate?.()}catch{}_.delete(S);continue}S.isAlive=!1;try{S.ping?.()}catch{try{S.terminate?.()}catch{}_.delete(S)}}},zp),d.on("upgrade",(S,E,I)=>{if(!N){Dp(E);return}if(new w5(S.url??"/",`http://${Q}:${j}`).pathname!==X){E.destroy();return}let i=ZQ(qp(S.headers["sec-websocket-protocol"]),K);if(!(i||DN(Q)&&Ap(S.headers.origin))){Lp(E);return}try{b.handleUpgrade(S,E,I,(k)=>{let m=k;m.isAlive=!0,m.on("pong",()=>{m.isAlive=!0}),_.add(m);let t=F.attach(Up(k),{allowRegisteredWorkspace:i});L.add(t),k.once("close",()=>{_.delete(m),t(),L.delete(t)})})}catch{Fp(E)}});try{await new Promise((S,E)=>{d.once("error",(I)=>{E(BN(I,{host:Q,port:W,pathname:X}))}),d.listen(W,Q,()=>{let I=d.address();if(!I||typeof I==="string"){E(BN(Error("Failed to resolve hub port"),{host:Q,port:W,pathname:X}));return}j=I.port,Y=W$(Q,j,X),S()})})}catch(S){if(O)clearInterval(O),O=void 0;throw await FN(Promise.resolve().then(()=>H.stop()),UN),G.release(),S}try{await x7(Z.discoveryPath,{hubId:U,protocolVersion:SY,minClientProtocolVersion:VN,maxClientProtocolVersion:YN,capabilities:[...z.capabilities],coreVersion:q2.version,buildId:V,buildEpochMs:B,authToken:K,host:Q,port:j,url:Y,pid:process.pid,startedAt:D,updatedAt:D}),N=!0}catch(S){if(!await FN(T().closed,UN))try{d.closeAllConnections(),d.unref()}catch{}throw S}return q={host:Q,port:j,url:Y,authToken:K,beginClose:T,close:M},q}async function _N($){let Z=$.owner??b2(),Q=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),X=$.host??"127.0.0.1",J=$.port??I7(),W=$.pathname??"/hub",j=W$(X,J,W),Y=Z.discoveryPath,V=(K)=>{if(!Q)u6(K.url,K.authToken);return K},B=U$.get(Y);if(B){let K=await B.promise;if(B.state==="closing"){if(await K.beginClose().closed.catch(()=>{return}),U$.get(Y)===B)U$.delete(Y)}else if(KN(K.url,X,J,W)||$.allowPortFallback===!0)return V({server:K,url:K.url,authToken:K.authToken,action:"reuse"});else throw GN(Z.ownerId,K.url,j)}return await y7(Z.discoveryPath,async()=>{let K=await x0(Z.discoveryPath);if(K?.url){let U=await J$(K.url,{authToken:K.authToken});if(U?.url&&c6(U)&&await F1(U.url,{authToken:K.authToken})){if(KN(K.url,X,J,W)||$.allowPortFallback===!0)return V({url:U.url,authToken:K.authToken,action:"reuse"});throw GN(Z.ownerId,K.url,j)}if(U?.url){let F={url:U.url,authToken:K.authToken,pid:U.pid??K.pid};if(await lJ(F)){if(await F1(U.url,{authToken:K.authToken}))return V({url:U.url,authToken:K.authToken,action:"reuse"})}else await k4(F,Z.discoveryPath)}else await X$(Z.discoveryPath)}let G=async(U)=>{let F=xY({...U,owner:Z}),L={promise:F,state:"starting"};U$.set(Y,L);try{let D=await F;return L.server=D,L.state="open",V({server:D,url:D.url,authToken:D.authToken,action:"started"})}catch(D){if(U$.get(Y)===L)U$.delete(Y);throw D}},H=Date.now()+Op;for(;;)try{return await G($)}catch(U){if(JN(U)&&Date.now()<H){await new Promise((F)=>setTimeout(F,Np));continue}if(!$.allowPortFallback||!_p(U))throw U;return await G({...$,port:0})}})}function ON(){return zN()==="production"?v1():P1()}function Tp($){return zN()!=="production"&&!$}async function Zj0($){let Z=k2({host:$.host,port:$.port,pathname:$.pathname});return await xY({...$,...Z,owner:ON()})}async function Qj0($){let Z=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=k2({host:$.host,port:$.port,pathname:$.pathname});return await _N({...$,...Q,allowPortFallback:$.allowPortFallback??Tp(Z),owner:ON()})}QQ();import{buildRemoteConfigSessionBlobUploadMetadata as qN,clearRemoteConfigSessionBlobUpload as Ep,createClineTelemetryServiceConfig as Mp,createSessionId as Rp,createRemoteConfigSessionMessagesArtifactUploader as Cp,prepareRemoteConfigRuntime as Pp,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as AN,readRemoteConfigSessionBlobUploadMetadata as fp,registerRemoteConfigSessionBlobUpload as TN}from"@cline/shared";function wp($,Z){let Q=$.telemetry||Z.telemetryService?{...Z.telemetryService??{},...$.telemetry??{}}:void 0;if(!Q)return;return d2(Mp(Q)).telemetry}function Sp(){let $=Cp();return{async uploadMessagesFile(Z){await $.uploadMessagesFile(Z)}}}async function bp($){let Z=await Pp($),Q=wp(Z,$),X=[Z.pluginDefinition],J=Z.claims?.subject,W=qN(Z.bundle?.remoteConfig,J),j;return{prepared:Z,extensions:X,telemetry:Q,applyToStartSessionInput(Y){let V=Y.config.extensions??[],B=Y.config.telemetry,K=W?Y.config.sessionId?.trim()||Rp():Y.config.sessionId;if(K&&W)j=K;let G=K&&W?TN(K,Z.bundle?.remoteConfig,J):void 0,H=G?{...Y.sessionMetadata??{},[AN]:G}:Y.sessionMetadata;return{...Y,...H?{sessionMetadata:H}:{},config:{...Y.config,...K?{sessionId:K}:{},extensions:[...V,...X],telemetry:Q??B}}},async dispose(){if(j)Ep(j)}}}import{mkdir as kp,readFile as xp,unlink as yp,writeFile as Ip}from"node:fs/promises";import{join as EN}from"node:path";function hp($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function vp($){return new Promise((Z)=>setTimeout(Z,$))}async function yY($){try{await yp($)}catch{}}async function gp($,Z={}){let Q=Z.approvalDir?.trim(),X=Z.sessionId?.trim();if(!Q||!X)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await kp(Q,{recursive:!0});let J=hp(`${$.toolCallId}`),W=EN(Q,`${X}.request.${J}.json`),j=EN(Q,`${X}.decision.${J}.json`),Y=Z.nowIso??(()=>new Date().toISOString());await Ip(W,`${JSON.stringify({requestId:J,sessionId:X,createdAt:Y(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
1016
+ `,"utf8");let V=Z.timeoutMs??300000,B=Z.pollIntervalMs??200,K=Date.now();while(Date.now()-K<V){try{let G=await xp(j,"utf8"),H=JSON.parse(G),U={approved:H.approved===!0,reason:typeof H.reason==="string"?H.reason:void 0};return await Promise.all([yY(j),yY(W)]),U}catch{}await vp(B)}return await yY(W),{approved:!1,reason:"Tool approval request timed out"}}import{spawn as mp}from"node:child_process";import{readConnectorCliLaunchSpec as cp}from"@cline/shared";var up=15000;async function dp($,Z,Q={}){let X="launchSpec"in Q?Q.launchSpec:cp();if(!X)throw Error("connector CLI launch information is unavailable");let J=Q.spawnProcess??mp,W=Q.timeoutMs??up;await new Promise((j,Y)=>{let V=!1,B,K=(U)=>{if(V)return;if(V=!0,B)clearTimeout(B);if(U)Y(U);else j()},G;try{G=J(X.launcher,[...X.connectArgsPrefix,"--cleanup-instance",Z,$],{cwd:X.cwd,env:T5(),stdio:["ignore","ignore","pipe"],windowsHide:!0})}catch(U){K(U instanceof Error?U:Error(String(U)));return}let H="";G.stderr?.setEncoding("utf8"),G.stderr?.on("data",(U)=>{H+=String(U)}),B=setTimeout(()=>{try{G.kill("SIGKILL")}catch{}K(Error(`cleanup timed out after ${W}ms`))},W),B.unref?.(),G.once("error",(U)=>{K(U instanceof Error?U:Error(String(U)))}),G.once("close",(U)=>{if(U===0||U===null){K();return}K(Error(`cleanup exited with code ${U}${H.trim()?`: ${H.trim()}`:""}`))})})}M1();import{spawn as wi}from"node:child_process";import{existsSync as xN,rmSync as Si}from"node:fs";import{homedir as bi,platform as ki}from"node:os";import{dirname as xi,join as kN}from"node:path";import{resolveClineDir as yi,resolveMcpSettingsPath as Ii}from"@cline/shared/storage";function lp($){let Z=($??"stdio").trim();if(Z==="http"||Z==="streamable-http")return"streamableHttp";if(Z==="stdio"||Z==="sse"||Z==="streamableHttp")return Z;throw Error(`Unsupported MCP transport "${Z}". Expected stdio, sse, http, streamable-http, or streamableHttp.`)}function pp($){let Z;try{Z=new URL($)}catch{throw Error(`Invalid MCP server URL: ${$}`)}if(Z.protocol!=="http:"&&Z.protocol!=="https:")throw Error(`Invalid MCP server URL: ${$} (only http and https are supported)`)}function ip($){let Z=$.indexOf(":");if(Z<=0)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);let Q=$.slice(0,Z).trim(),X=$.slice(Z+1).trim();if(!Q||!X)throw Error(`Invalid MCP header "${$}". Expected "Header-Name: header value".`);if(!/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(Q))throw Error(`Invalid MCP header name "${Q}".`);return[Q,X]}function rp($){let Z=$.indexOf("<");return Z>=0&&$.indexOf(">",Z+1)>Z+1}function MN($){let Z=[...$.headers??[]],Q=[],X=$.transport,J=$.targetArgs??[];for(let W=0;W<J.length;W++){let j=J[W];if($.parseTransport&&j==="--transport"){let Y=J[W+1];if(!Y)throw Error("--transport requires a value");X=Y,W++;continue}if($.parseTransport&&j?.startsWith("--transport=")){X=j.slice(12);continue}if(j==="--header"){let Y=J[W+1];if(!Y)throw Error("--header requires a value");Z.push(Y),W++;continue}if(j?.startsWith("--header=")){Z.push(j.slice(9));continue}Q.push(j)}return{headers:Z,targetArgs:Q,transport:X}}function ap($){if($.length===0)return{warnings:[]};let Z={},Q=[];for(let X of $){let[J,W]=ip(X);if(Z[J]=W,rp(W))Q.push(`Header "${J}" looks like it contains a placeholder. Update it in MCP settings before using this server.`)}return{headers:Z,warnings:Q}}function RN($){let Z=$.name.trim();if(!Z)throw Error("MCP server name is required");let{headers:Q,targetArgs:X,transport:J}=MN({headers:$.headers,targetArgs:$.targetArgs,transport:$.transport}),W=lp(J),{headers:j,warnings:Y}=ap(Q);if(W==="stdio"){if(Q.length>0)throw Error("Stdio MCP installs do not support request headers.");let[B,...K]=X;if(!B?.trim())throw Error("Stdio MCP install requires a command after the server name, for example: cline mcp install fs --yes -- npx -y @modelcontextprotocol/server-filesystem /tmp");let G=V7({type:W,command:B,args:K.length>0?K:void 0});return{name:Z,transport:G,warnings:Y}}if(X.length!==1)throw Error("Remote MCP install requires exactly one URL argument after the server name.");let V=X[0]?.trim()??"";return pp(V),{name:Z,transport:j?{type:W,url:V,headers:j}:{type:W,url:V},warnings:Y}}function IY($){let[Z,...Q]=$;if(!Z)throw Error("Marketplace MCP install args must start with a server name.");return{name:Z,...MN({parseTransport:!0,targetArgs:Q})}}function np($,Z,Q){x1(Q,(X)=>{let J=X.mcpServers,W=J&&typeof J==="object"&&!Array.isArray(J)?{...J}:{};W[$]={transport:Z},X.mcpServers=W})}function op($){let{name:Z,transport:Q,warnings:X}=RN($);return np(Z,Q,$.settingsPath??V0()),{name:Z,status:"installed",transport:Q,warnings:X}}function sp($,Z){return x1(Z,(Q)=>{let X=Q.mcpServers,J=X&&typeof X==="object"&&!Array.isArray(X)?X:{};if(!Object.hasOwn(J,$))throw Error(`MCP server "${$}" is not installed.`);return delete J[$],Q.mcpServers=J,!0})}function tp($){let Z=$.name.trim();if(!Z)throw Error("MCP server name is required");let Q=$.settingsPath??V0();return sp(Z,Q),{name:Z,status:"uninstalled"}}M1();import{existsSync as L8,readdirSync as Vi,readFileSync as Bi,rmdirSync as Ki,rmSync as Gi,statSync as Hi}from"node:fs";import{basename as E1,dirname as Q2,extname as Ui,isAbsolute as Fi,join as F$,relative as Li,resolve as F8,sep as uY}from"node:path";import{discoverPluginModulePaths as Di,resolvePluginConfigSearchPaths as _i}from"@cline/shared/storage";import{existsSync as ep,mkdirSync as $i,readFileSync as Zi,writeFileSync as Qi}from"node:fs";import{dirname as PN,isAbsolute as Xi,relative as Ji,resolve as CN}from"node:path";function o2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function XQ($,Z){let Q=Ji(CN($),CN(Z));return Q===""||!Q.startsWith("..")&&!Xi(Q)}function hY($){if(!ep($))return{mcpServers:{}};try{let Z=JSON.parse(Zi($,"utf8"));if(o2(Z))return Z}catch(Z){throw Error(`Invalid MCP settings at "${$}": ${Z instanceof Error?Z.message:String(Z)}`)}throw Error(`Invalid MCP settings at "${$}": expected an object`)}function vY($){if(o2($.mcpServers))return{...$.mcpServers};return{}}function gY($,Z,Q){$i(PN($),{recursive:!0}),Qi($,`${JSON.stringify({...Z,mcpServers:Q},null,2)}
1017
+ `,"utf8")}function fN($){return{pluginPaths:[...new Set(($.pluginPaths??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))],pluginNames:[...new Set(($.pluginNames??[]).map((Z)=>Z.trim()).filter((Z)=>Z.length>0))]}}function WQ($){if(!o2($))return;let Z=$.metadata;return o2(Z)?Z:void 0}function JQ($,Z){let Q=WQ($);if(!Q||Q.source!=="plugin")return!1;let X=typeof Q.pluginName==="string"?Q.pluginName:typeof Q.plugin==="string"?Q.plugin:void 0,J=typeof Q.pluginPath==="string"?Q.pluginPath:void 0;if(Z.pluginName&&X===Z.pluginName){if(!Z.pluginPath||J===Z.pluginPath)return!0}if(J&&Z.pluginPath&&(J===Z.pluginPath||XQ(Z.pluginPath,J)||XQ(J,Z.pluginPath)))return!0;if(X&&Z.pluginNames?.some((W)=>W===X))return!0;if(J&&Z.pluginPaths?.some((W)=>J===W||XQ(W,J)||XQ(J,W)))return!0;return!1}function Wi($){let Z=o2($.existing?.oauth)?{oauth:$.existing.oauth}:{};return{transport:$.registration.transport.type==="stdio"&&$.registration.transport.cwd===void 0?{...$.registration.transport,cwd:PN($.pluginPath)}:$.registration.transport,...$.disabled?{disabled:!0}:{},...Z,metadata:{...$.registration.metadata??{},source:"plugin",pluginName:$.pluginName,pluginPath:$.pluginPath}}}async function ji($){if($.pluginPaths.length===0)return{plugins:[],servers:[],failures:[]};let Z=await G6({pluginPaths:[...$.pluginPaths],cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0});try{let Q=[],X=[],J=(Z.failures??[]).map((W)=>({pluginPath:W.pluginPath,pluginName:W.pluginName,message:W.message}));for(let W of Z.extensions??[]){let j=W.__clinePluginPath;if(!j)continue;if(!W.setup){Q.push({pluginName:W.name,pluginPath:j});continue}let Y=[],V={registerTool:(B)=>{},registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{},registerMcpServer:(B)=>{if(!W.manifest.capabilities.includes("mcp"))throw Error('registerMcpServer requires the "mcp" capability');Y.push(B)}};try{await W.setup(V,{workspaceInfo:$.workspacePath?{rootPath:$.workspacePath}:void 0})}catch(B){J.push({pluginPath:j,pluginName:W.name,message:B instanceof Error?B.message:String(B)});continue}Q.push({pluginName:W.name,pluginPath:j});for(let B of Y)X.push({pluginName:W.name,pluginPath:j,server:{...B,metadata:{...B.metadata??{},source:"plugin",pluginName:W.name,pluginPath:j}}})}return{plugins:Q,servers:X,failures:J}}finally{await Z.shutdown().catch(()=>{})}}async function mY($){let Z=$.settingsPath??V0(),Q={mutations:[],failures:[]},X;try{X=await ji($)}catch(B){for(let K of $.pluginPaths)Q.failures.push({pluginPath:K,message:B instanceof Error?B.message:String(B)});return Q}Q.failures.push(...X.failures);let J;try{J=hY(Z)}catch(B){for(let K of $.pluginPaths)Q.failures.push({pluginPath:K,message:B instanceof Error?B.message:String(B)});return Q}let W=vY(J),j=new Map,Y=new Map;for(let B of X.plugins)j.set(B.pluginPath,new Set),Y.set(B.pluginPath,B.pluginName);let V=rX(X.servers.map((B)=>({server:B.server,owner:B,ownerLabel:B.pluginName})));for(let B of V){let K=B.owner;if(!j.has(K.pluginPath))j.set(K.pluginPath,new Set);if(B.name)j.get(K.pluginPath)?.add(B.name);if(!B.registration){Q.mutations.push({name:B.name,pluginName:K.pluginName,pluginPath:K.pluginPath,action:"skipped",reason:B.loadError??"invalid MCP server registration"});continue}let G=W[B.registration.name];if(G!==void 0){if(!JQ(G,{pluginName:K.pluginName,pluginPath:K.pluginPath})){Q.mutations.push({name:B.registration.name,pluginName:K.pluginName,pluginPath:K.pluginPath,action:"skipped",reason:"MCP server name is already configured"});continue}}W[B.registration.name]=Wi({registration:B.registration,pluginName:K.pluginName,pluginPath:K.pluginPath,existing:o2(G)?G:void 0}),Q.mutations.push({name:B.registration.name,pluginName:K.pluginName,pluginPath:K.pluginPath,action:G===void 0?"created":"updated"})}for(let[B,K]of Object.entries(W)){let G=WQ(K),H=typeof G?.pluginPath==="string"?G.pluginPath:"",U=j.get(H);if(U&&JQ(K,{pluginPath:H})&&!U.has(B))delete W[B],Q.mutations.push({name:B,pluginName:typeof G?.pluginName==="string"?G.pluginName:Y.get(H)??"plugin",pluginPath:H,action:"removed",reason:"plugin no longer declares this MCP server"})}if(Q.mutations.some((B)=>B.action!=="skipped"))try{gY(Z,J,W)}catch(B){for(let K of $.pluginPaths)Q.failures.push({pluginPath:K,message:B instanceof Error?B.message:String(B)})}return Q}function Yi($){let Z=$.settingsPath??V0(),Q;try{Q=hY(Z)}catch{return[]}let X=vY(Q),J=fN($),W=[];for(let[j,Y]of Object.entries(X)){if(!o2(Y)||!JQ(Y,J))continue;let V=WQ(Y);X[j]={...Y,disabled:!0},W.push({name:j,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"disabled"})}if(W.length>0)gY(Z,Q,X);return W}function cY($){let Z=$.settingsPath??V0(),Q;try{Q=hY(Z)}catch{return[]}let X=vY(Q),J=fN($),W=[];for(let[j,Y]of Object.entries(X)){if(!JQ(Y,J))continue;let V=WQ(Y);delete X[j],W.push({name:j,pluginName:typeof V?.pluginName==="string"?V.pluginName:"plugin",pluginPath:typeof V?.pluginPath==="string"?V.pluginPath:"",action:"removed"})}if(W.length>0)gY(Z,Q,X);return W}var rY="_installed",zi="package",Oi=new Map([["git",2],["local",1],["npm",1],["official",1],["remote",1]]);function dY($){return $.trim().toLowerCase()}function b1($,Z){let Q=Z?.trim();if(!Q)return;$.add(Q)}function Ni($){return $.replace(/-[0-9a-f]{12}$/i,"")}function lY($){let Z=Ui($);return Z?$.slice(0,-Z.length):$}function pY($){if(!L8($))return;try{let Z=JSON.parse(Bi($,"utf8"));return typeof Z.name==="string"?Z.name.trim():void 0}catch{return}}function aY($,Z){let Q=Li(Z,$);return Q===""||!Q.startsWith("..")&&!Fi(Q)}function wN($){let Q=F8($).split(uY),X=Q.lastIndexOf(rY);if(X<0)return;let J=Q[X+1];if(!J)return;let W=Oi.get(J)??1,j=X+2+W;if(Q.length<j)return;let Y=Q.slice(0,j).join(uY)||uY;return L8(Y)?Y:void 0}function jQ($){try{return Vi($,{withFileTypes:!0})}catch{return[]}}function qi($){let Z=F$($,rY);if(!L8(Z))return[];let Q=[];for(let X of jQ(Z)){if(!X.isDirectory())continue;let J=F$(Z,X.name);if(X.name==="git"){for(let W of jQ(J)){if(!W.isDirectory())continue;let j=F$(J,W.name);for(let Y of jQ(j))if(Y.isDirectory())Q.push(F$(j,Y.name))}continue}for(let W of jQ(J))if(W.isDirectory())Q.push(F$(J,W.name))}return Q.sort((X,J)=>X.localeCompare(J))}function SN($){try{return Di($)}catch{return[]}}function iY($){let Z=SN($),Q=new Set;b1(Q,E1($)),b1(Q,Ni(E1($))),b1(Q,pY(F$($,"package.json"))),b1(Q,pY(F$($,zi,"package.json")));for(let X of Z)b1(Q,E1(X)),b1(Q,lY(E1(X)));return{installPath:$,entryPaths:Z,names:[...Q].sort((X,J)=>X.localeCompare(J)),installed:!0}}function Ai($,Z){let Q=F8($),X=Z.find((j)=>aY(Q,j));if(!X)return;let J=Q2(Q);while(J!==X&&J!==Q2(J)){if(L8(F$(J,"package.json")))return J;J=Q2(J)}let W=E1(Q);if((W==="index.ts"||W==="index.js")&&Q2(Q)!==X)return Q2(Q);return Q}function bN($,Z){let Q=Ai($,Z);if(!Q)return;let X=new Set;return b1(X,E1($)),b1(X,lY(E1($))),b1(X,E1(Q)),b1(X,lY(E1(Q))),b1(X,pY(F$(Q,"package.json"))),{installPath:Q,entryPaths:[$],names:[...X].sort((J,W)=>J.localeCompare(W)),installed:!1}}function Ti($){let Z=$.workspaceRoot?.trim()||$.cwd?.trim()||process.cwd();return _i(Z).filter((Q)=>L8(Q))}function Ei($){let Z=new Map;for(let Q of $){for(let X of qi(Q))Z.set(X,iY(X));for(let X of SN(Q)){let J=wN(X);if(J){if(!Z.has(J))Z.set(J,iY(J));continue}let W=bN(X,$);if(W)Z.set(W.installPath,W)}}return[...Z.values()].sort((Q,X)=>Q.installPath.localeCompare(X.installPath))}function Mi($,Z){let Q=dY(Z);if(!Q)return!1;if(dY($.installPath)===Q)return!0;return $.names.some((X)=>dY(X)===Q)}function Ri($,Z,Q){let X=F8($);for(let W of Z){if(aY(X,W.installPath))return W;if(W.entryPaths.some((j)=>F8(j)===X))return W}let J=wN(X);if(J)return iY(J);if(L8(X))return bN(X,Q);return}function Ci($){let Z=W0(),Q=Z.disabledPlugins;if(!Q?.length)return;let X=Q.filter((J)=>{let W=F8(J);if(aY(W,$.installPath))return!1;return!$.entryPaths.some((j)=>F8(j)===W)});if(X.length===Q.length)return;d0({...Z,disabledPlugins:X})}function Pi($){let Z=Q2($);while(Z!==Q2(Z)&&E1(Z)!==rY){try{Ki(Z)}catch{return}Z=Q2(Z)}}function fi($){return`${$.names[0]??E1($.installPath)} at ${$.installPath}`}async function nY($){let Z=Ti($),Q=Ei(Z),X=$.path?.trim(),J=$.name?.trim(),W;if(X){if(W=Ri(X,Q,Z),!W)throw Error(`No plugin found at ${X}`)}else{if(!J)throw Error("plugin uninstall requires a plugin name");let Y=Q.filter((V)=>Mi(V,J));if(Y.length===0)throw Error(`No plugin found matching "${J}"`);if(Y.length>1)throw Error(`Multiple plugins match "${J}": ${Y.map(fi).join(", ")}`);W=Y[0]}let j=Hi(W.installPath,{throwIfNoEntry:!1});if(!j)throw Error(`Plugin install path does not exist: ${W.installPath}`);if(cY({pluginPaths:[W.installPath,...W.entryPaths],pluginNames:W.names}),Gi(W.installPath,{recursive:j.isDirectory(),force:!0}),Ci(W),W.installed)Pi(W.installPath);return{name:J||W.names[0]||E1(W.installPath),installPath:W.installPath,removedPaths:[W.installPath],entryPaths:W.entryPaths}}var oY=120000,S5=12000,hi=/(api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|authorization|credential)/i,vi=/((?:^|[^\w])(?:[a-z0-9_]*?(?:api[_ -]?key|access[_ -]?token|refresh[_ -]?token|auth(?:orization)?[_ -]?token|token|secret|password|credential)[a-z0-9_]*)\s*[:=]\s*)(.+)$/gi,gi=/((?:^|[^\w])authorization\s*[:=]\s*)bearer\s+([^\s,"'}\]]+)/gi,mi=/((?:^|[^\w])authorization\s*[:=])(?!\s*bearer\b)\s*(.+)$/gi;function sY($){return $.install?.args??[]}function ci(){return process.env.HOME?.trim()||process.env.USERPROFILE?.trim()||bi()}function ui($){let Z=0,Q=$.length;while(Z<Q&&($[Z]==="."||$[Z]==="-"))Z++;while(Q>Z&&($[Q-1]==="."||$[Q-1]==="-"))Q--;return $.slice(Z,Q)}function di($){return ui($.toLowerCase().replace(/[^a-z0-9._]+/g,"-")).slice(0,255)||"skill"}function yN($){return $.split(/\r?\n/).map((Z)=>{if(!hi.test(Z))return Z;return Z.replace(vi,"$1[redacted]").replace(gi,"$1Bearer [redacted]").replace(/\b(Bearer)\s+(?!\[redacted\])([^\s,"'}\]]+)/gi,"$1 [redacted]").replace(mi,"$1 [redacted]").replace(/((?:^|[^\w])(?:api\s+key|access\s+token|refresh\s+token|auth(?:orization)?\s+token|secret|password|credential)\s+(?:is\s+)?)(\S+)/gi,"$1[redacted]")}).join(`
1018
+ `).slice(-S5)}function li($){let Z=yN([$.stdout,$.stderr].filter(Boolean).join(`
1019
+ `)).trim();return Z.length>0?Z:void 0}function pi($){if($==="")return'""';if(/^[a-zA-Z0-9_./:=@%+,-]+$/.test($))return $;return JSON.stringify($)}function ii($,Z){return[$,...Z].map((Q)=>pi(yN(Q).trim())).join(" ")}var ri=async($,Z)=>new Promise((Q,X)=>{let J=!1,W=!1,j=wi($,Z,{env:process.env,shell:ki()==="win32",stdio:["ignore","pipe","pipe"],windowsHide:!0}),Y="",V="",B=setTimeout(()=>{if(!J)j.kill("SIGKILL")},oY+5000),K=setTimeout(()=>{W=!0,V+=`
1020
+ Timed out after ${oY/1000}s.`,j.kill("SIGTERM")},oY);B.unref?.(),K.unref?.(),j.stdout?.on("data",(G)=>{if(Y+=String(G),Y.length>S5*2)Y=Y.slice(-S5)}),j.stderr?.on("data",(G)=>{if(V+=String(G),V.length>S5*2)V=V.slice(-S5)}),j.once("error",(G)=>{clearTimeout(K),clearTimeout(B),X(G)}),j.once("close",(G,H)=>{J=!0,clearTimeout(K),clearTimeout(B),Q({exitCode:W?124:G??(H==="SIGINT"?130:1),stdout:Y,stderr:V})})});function ai($){return`${$.type}:${$.id}`}function tY($){let Z=sY($);if(Z.length===0)throw Error("Marketplace install args are required.");return IY(Z).name}function IN($,Z={}){let Q=tY($),X=Z.mcpSettingsPath??Ii(),J=x1(X,(W)=>{let j=W.mcpServers&&typeof W.mcpServers==="object"&&!Array.isArray(W.mcpServers)?W.mcpServers:{},Y=Object.hasOwn(j,Q);if(Y)delete j[Q];return W.mcpServers=j,Y});return{name:Q,deleted:J}}function eY($){let Z=new Set,Q=(J)=>{let W=di(J??"");if(W&&W!=="skill")Z.add(W)};Q($.id),Q($.name);let X=sY($);for(let J=0;J<X.length;J++){let W=X[J];if((W==="--skill"||W==="-s")&&X[J+1]){Q(X[J+1]),J++;continue}let j=W.split("@").at(1);if(j)Q(j)}return[...Z]}function $V($){return[kN(yi(),"skills",$,"SKILL.md"),kN(ci(),".agents","skills",$,"SKILL.md")].filter((Z,Q,X)=>X.indexOf(Z)===Q)}function ZV($){if($.type!=="skill")return;return eY($).find((Z)=>$V(Z).some((Q)=>xN(Q)))}function hN($){return ZV($)!==void 0}function ni($){let Z=[];if($.type!=="skill")return Z;for(let Q of eY($))for(let X of $V(Q)){if(!xN(X))continue;let J=xi(X);Si(J,{recursive:!0,force:!0}),Z.push(J)}return Z}async function vN($,Z={}){let Q=ZV($);if(!Q)return{id:$.id,type:"skill",status:"uninstalled",message:`${$.name??$.id} is not installed.`};let X="npx",J=["-y","skills@latest","remove",Q,"-g","-y"],W=ii(X,J),j=Z.spawnCommand??ri,Y;try{Y=await j(X,J)}catch(K){throw Error(`Failed to start ${$.name??$.id} uninstall command:
1013
1021
  ${W}
1014
- ${K instanceof Error?K.message:String(K)}`)}let V=ui(Y);if(Y.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${Y.exitCode}.
1022
+ ${K instanceof Error?K.message:String(K)}`)}let V=li(Y);if(Y.exitCode!==0)throw Error(`${$.name??$.id} uninstall failed with exit code ${Y.exitCode}.
1015
1023
  Command:
1016
1024
  ${W}${V?`
1017
1025
 
1018
- ${V}`:""}`);let B=ri($);if(hN($))throw Error(`Skill uninstall completed, but ${$.name??$.id} is still present in Cline's global skills directories.`);return{id:$.id,type:"skill",status:"uninstalled",message:`Uninstalled ${$.name??$.id}.`,output:[V,...B.map((K)=>`Removed: ${K}`)].filter(Boolean).join(`
1026
+ ${V}`:""}`);let B=ni($);if(hN($))throw Error(`Skill uninstall completed, but ${$.name??$.id} is still present in Cline's global skills directories.`);return{id:$.id,type:"skill",status:"uninstalled",message:`Uninstalled ${$.name??$.id}.`,output:[V,...B.map((K)=>`Removed: ${K}`)].filter(Boolean).join(`
1019
1027
  `)||void 0}}async function gN($,Z={}){let[Q]=sY($),X=Q?.trim()||$.id;if(!X)throw Error("Plugin marketplace uninstalls require a plugin name.");let J=await nY({name:X,workspaceRoot:Z.workspaceRoot});return{id:$.id,type:"plugin",status:"uninstalled",message:`Uninstalled ${$.name??J.name??$.id}.`,output:[`Path: ${J.installPath}`,...J.removedPaths.map((W)=>`Removed: ${W}`)].join(`
1020
- `)}}async function ai($,Z={}){if($.type==="mcp"){let Q=tY($);if(Z.deleteMcpServer)await Z.deleteMcpServer(Q);else IN($,Z);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Q??$.id}.`}}if($.type==="skill")return vN($,Z);if($.type==="plugin")return gN($,Z);throw Error(`Unsupported marketplace entry type: ${$.type}`)}import{spawn as ni}from"node:child_process";import{createHash as oi}from"node:crypto";import{existsSync as p1,mkdirSync as JV,readdirSync as si,readFileSync as ti,renameSync as YQ,rmSync as KQ,statSync as WV}from"node:fs";import{cp as XV,mkdir as rN,writeFile as GQ}from"node:fs/promises";import{homedir as mN}from"node:os";import{basename as D$,dirname as cN,extname as ei,join as X0,relative as aN,resolve as X2,sep as $r}from"node:path";import{isPluginModulePath as BQ,resolveClineDir as Zr,resolvePluginModuleEntries as Qr}from"@cline/shared/storage";var D8="_installed",HQ="package",Xr="https://github.com/cline/plugins.git",uN=30000,VQ=10485760,dN="@cline/",Jr=["dependencies","devDependencies","optionalDependencies","peerDependencies"],Wr={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function UQ($){if($==="~")return mN();if($.startsWith("~/"))return X0(mN(),$.slice(2));return $}function nN($){return $.split($r).join("/")}function s2($){return oi("sha256").update($).digest("hex").slice(0,12)}function jr($){let Z=0;while(Z<$.length&&$[Z]==="-")Z++;let Q=$.length;while(Q>Z&&$[Q-1]==="-")Q--;return $.slice(Z,Q)}function L$($){let Z="",Q=!1,X=$.startsWith("@")?$.slice(1):$;for(let W of X.slice(0,256)){if(W>="a"&&W<="z"||W>="A"&&W<="Z"||W>="0"&&W<="9"||W==="."||W==="_"||W==="-")Z+=W,Q=W==="-";else if(!Q)Z+="-",Q=!0;if(Z.length>=80)break}return jr(Z)||"plugin"}function oN($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function Yr($){return $?.trim()||Xr}function lN($){let Q=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Q?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Q[1]}}function Vr($){if($.startsWith(".")||$.startsWith("/")||$==="~"||$.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test($))return!1;let[Z,...Q]=$.split("/");return!!Z&&Q.length>=2&&Z.includes(".")&&!Z.startsWith(".")&&!Z.endsWith(".")}function Br($){let Z=$.match(/^git@([^:]+):(.+)$/);if(Z){let j=Z[2]??"",Y=j.indexOf("@");if(Y<0)return{repo:$};return{repo:`git@${Z[1]}:${j.slice(0,Y)}`,ref:j.slice(Y+1)||void 0}}if($.includes("://"))try{let j=new URL($),Y=j.pathname.replace(/^\/+/,""),V=Y.indexOf("@");if(V<0)return{repo:$};return j.pathname=`/${Y.slice(0,V)}`,{repo:j.toString().replace(/\/$/,""),ref:Y.slice(V+1)||void 0}}catch{return{repo:$}}let Q=$.indexOf("/");if(Q<0)return{repo:$};let X=$.slice(0,Q),J=$.slice(Q+1),W=J.indexOf("@");if(W<0)return{repo:$};return{repo:`${X}/${J.slice(0,W)}`,ref:J.slice(W+1)||void 0}}function Kr($){try{return decodeURIComponent($)}catch{return $}}function Gr($){return D$(Kr($))||"plugin"}function Hr($){let Z=$.split("/").filter(Boolean);return Z.length>=5&&(Z[2]==="blob"||Z[2]==="raw")}function pN($){if(!/^https?:\/\//i.test($))return null;let Z;try{Z=new URL($)}catch{return null}let Q=Z.hostname.toLowerCase(),X=Gr(Z.pathname),J=BQ(X),W=(Q==="github.com"||Q==="www.github.com")&&Hr(Z.pathname);if(Z.protocol!=="https:"){if(W||Q==="raw.githubusercontent.com"||J)throw Error(`Remote plugin file URLs must use https: ${$}`);return null}if(Q==="github.com"||Q==="www.github.com"){let j=Z.pathname.split("/").filter(Boolean);if(!W)return null;if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:`https://raw.githubusercontent.com/${[j[0],j[1],...j.slice(3)].join("/")}`,filename:X}}if(Q==="raw.githubusercontent.com"){if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:Z.toString(),filename:X}}if(!J)return null;return{type:"remote",url:Z.toString(),filename:X}}function iN($,Z={}){let Q=$.trim(),X=Q.startsWith("git:")&&!Q.startsWith("git://"),J=X?Q.slice(4).trim():Q;if(!Z.force&&!X&&!/^(https?|ssh|git):\/\//i.test(J))return null;let{repo:W,ref:j}=Br(J),Y="",V="";if(W.startsWith("git@")){let G=W.match(/^git@([^:]+):(.+)$/);Y=G?.[1]??"",V=G?.[2]??""}else if(/^(https?|ssh|git):\/\//i.test(W)){let G=new URL(W);Y=G.hostname,V=G.pathname.replace(/^\/+/,"")}else{let G=W.indexOf("/");if(G<0)return null;Y=W.slice(0,G),V=W.slice(G+1)}let B=V.replace(/\.git$/,"").replace(/^\/+/,"");if(!Y||!B||B.split("/").length<2)return null;return{type:"git",repo:W.startsWith("git@")||/^(https?|ssh|git):\/\//i.test(W)?W:`https://${W}`,ref:j,host:Y,path:B}}function sN($,Z){let Q=$.trim();if(!Q)throw Error("plugin install requires a source");if(Z==="npm"){let j=Q.startsWith("npm:")?Q.slice(4).trim():Q,{name:Y}=lN(j);return{type:"npm",spec:j,name:Y}}if(Z==="git"){let j=iN(Q,{force:!0});if(!j)throw Error(`Invalid git plugin source: ${$}`);return j}if(Z==="local")return{type:"local",path:$};if(Z==="remote"){let j=pN(Q);if(!j)throw Error(`Invalid remote plugin source: ${$}`);return j}if(Q.startsWith("npm:")){let j=Q.slice(4).trim(),{name:Y}=lN(j);return{type:"npm",spec:j,name:Y}}if(Q.startsWith(".")||Q.startsWith("/")||Q==="~"||Q.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test(Q))return{type:"local",path:$};let J=pN(Q);if(J)return J;let W=iN(Q);if(W)return W;if(oN(Q))return{type:"official",slug:Q};if(Vr(Q))throw Error(`Unrecognized plugin source "${$}". Use --git for hostname-style repositories or pass an explicit local path such as ./github.com/owner/repo.`);return{type:"local",path:$}}function Ur($){return $?X0($,".cline","plugins"):X0(Zr(),"plugins")}function Fr($,Z,Q){if(Z.type==="npm")return X0($,D8,"npm",`${L$(Z.name)}-${s2(Q)}`);if(Z.type==="git")return X0($,D8,"git",L$(Z.host),`${L$(Z.path)}-${s2(Q)}`);if(Z.type==="remote")return X0($,D8,"remote",`${L$(Z.filename)}-${s2(Q)}`);if(Z.type==="official")return X0($,D8,"official",`${L$(Z.slug)}-${s2(Q)}`);return X0($,D8,"local",`${L$(D$(UQ(Z.path)))}-${s2(Q)}`)}function Lr($,Z,Q){if($.type==="npm")return`npm:${$.spec}`;if($.type==="git")return`git:${$.repo}${$.ref?`#${$.ref}`:""}`;if($.type==="remote")return`remote:${$.url}`;if($.type==="official")return`official:${Q}#plugins/${$.slug}`;return`local:${X2(Z,UQ($.path))}`}function Dr($,Z){if($.type==="npm")return $.name;if($.type==="git")return L$(D$($.path));if($.type==="remote")return L$(D$($.filename,ei($.filename)));if($.type==="official")return $.slug;return L$(D$(X2(Z,UQ($.path))))}async function _8($,Z,Q={}){await new Promise((X,J)=>{let W=ni($,Z,{cwd:Q.cwd,stdio:["ignore","ignore","pipe"],env:process.env,windowsHide:!0}),j="";W.stderr.on("data",(Y)=>{j+=String(Y)}),W.on("error",J),W.on("close",(Y)=>{if(Y===0){X();return}let V=j.trim();J(Error(`${$} ${Z.join(" ")} failed with exit code ${Y}${V?`: ${V}`:""}`))})})}function tN($){let Z=X0($,"package.json");if(!p1(Z))return null;try{return JSON.parse(ti(Z,"utf8"))}catch{return null}}function _r($){let Z=$?.cline?.plugins;if(!Array.isArray(Z))return[];return Z.flatMap((Q)=>{if(typeof Q==="string")return[Q];return Q.paths??[]})}async function zr($){let Z=X0($,"package.json"),Q=tN($);if(!Q)return;let X=!1;for(let J of Jr){let W=Q[J];if(!W||typeof W!=="object")continue;for(let j of Object.keys(W)){if(!j.startsWith(dN))continue;delete W[j],delete Q.peerDependenciesMeta?.[j],X=!0}if(Object.keys(W).length===0)delete Q[J]}if(Q.peerDependenciesMeta){for(let J of Object.keys(Q.peerDependenciesMeta)){if(!J.startsWith(dN))continue;delete Q.peerDependenciesMeta[J],X=!0}if(Object.keys(Q.peerDependenciesMeta).length===0)delete Q.peerDependenciesMeta}if(!X)return;await GQ(Z,`${JSON.stringify(Q,null,2)}
1021
- `,"utf8")}function Or($,Z){let Q=X0($,"node_modules","@cline");if(!p1(Q))return;for(let X of $q(Q)){if(`@cline/${X.name}`===Z)continue;KQ(X0(Q,X.name),{recursive:!0,force:!0})}}function eN($){let Z=_r(tN($)).map((W)=>X2($,W)).filter((W)=>p1(W)&&WV(W).isFile()&&BQ(W));if(Z.length>0)return Z;let Q=Qr($);if(Q?.length)return Q;let X=[],J=[$];while(J.length>0){let W=J.pop();if(!W)continue;for(let j of $q(W)){let Y=X0(W,j.name);if(j.name==="node_modules"||j.name===".git")continue;if(j.isDirectory()){J.push(Y);continue}if(j.isFile()&&!j.name.startsWith(".")&&BQ(Y))X.push(Y)}}return X.sort((W,j)=>W.localeCompare(j))}function $q($){try{return si($,{withFileTypes:!0})}catch{return[]}}function Nr($,Z){let Q=eN(Z);if(Q.length===0)throw Error(`No plugin entry files found in ${Z}`);return Q.map((X)=>`./${nN(aN($,X))}`)}async function qr($,Z,Q){let X=Nr($,Z);return await GQ(X0($,"package.json"),JSON.stringify({...Wr,name:Q,cline:{plugins:[{paths:X}]}},null,2),"utf8"),X}async function Ar($,Z,Q){let X=X0(Z,HQ);return await rN(X,{recursive:!0}),await GQ(X0(X,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await _8(Q,["install",$.spec,"--prefix",X,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),Or(X,$.name),X0(X,"node_modules",$.name)}async function jV($,Z){if(!p1(X0($,"package.json")))return;await zr($),await _8(Z,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function Tr($,Z,Q){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let X=X0(Z,HQ),J=["clone","--filter=blob:none"];if($.ref)J.push("--branch",$.ref);J.push("--",$.repo,X);try{await _8("git",J)}catch(W){if(!$.ref)throw W;await _8("git",["clone","--filter=blob:none","--",$.repo,X]),await _8("git",["checkout","--detach",$.ref],{cwd:X})}return await jV(X,Q),X}async function Er($,Z,Q,X){let J=X0(Z,"repo");await _8("git",["clone","--filter=blob:none","--depth","1","--",X,J]);let W=X0(J,"plugins",$.slug);if(!p1(W)||!WV(W).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${X}`);let j=X0(Z,HQ);return await XV(W,j,{recursive:!0,filter:(Y)=>{let V=D$(Y);return V!==".git"&&V!=="node_modules"}}),KQ(J,{recursive:!0,force:!0}),await jV(j,Q),j}function QV($){return Error(`Remote plugin file from ${$} exceeds the ${VQ} byte limit`)}function Mr($){let Z=$.headers.get("content-length");if(!Z)return;let Q=Number(Z);if(!Number.isFinite(Q)||Q<0)return;return Q}async function Rr($,Z){let Q=Mr($);if(Q!==void 0&&Q>VQ)throw QV(Z);if(!$.body){let j=Buffer.from(await $.text(),"utf8");if(j.byteLength>VQ)throw QV(Z);return j}let X=$.body.getReader(),J=[],W=0;try{while(!0){let{done:j,value:Y}=await X.read();if(j)break;let V=Buffer.from(Y);if(W+=V.byteLength,W>VQ)throw await X.cancel().catch(()=>{return}),QV(Z);J.push(V)}return Buffer.concat(J,W)}finally{X.releaseLock()}}async function Cr($,Z){let Q=new AbortController,X=setTimeout(()=>{Q.abort()},uN);try{let J=await fetch($.url,{signal:Q.signal});if(!J.ok){let j=J.statusText?` ${J.statusText}`:"";throw Error(`Failed to download plugin file from ${$.url}: ${J.status}${j}`)}let W=await Rr(J,$.url);return JV(Z,{recursive:!0}),await GQ(X0(Z,$.filename),W),Z}catch(J){if(J instanceof Error&&J.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${uN}ms`);throw J}finally{clearTimeout(X)}}async function Pr($,Z,Q,X){let J=X2(Q,UQ($.path));if(!p1(J))throw Error(`Plugin source path does not exist: ${J}`);let W=WV(J);if(W.isFile()){if(!BQ(J))throw Error(`Plugin file must be .js or .ts: ${J}`);JV(Z,{recursive:!0});let Y=X0(Z,D$(J));return await XV(J,Y),Z}if(!W.isDirectory())throw Error(`Plugin source must be a file or directory: ${J}`);let j=X0(Z,HQ);return await XV(J,j,{recursive:!0,filter:(Y)=>{let V=D$(Y);return V!==".git"&&V!=="node_modules"}}),await jV(j,X),j}function fr($,Z){if(p1($)&&!Z)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function wr($,Z,Q){if(JV(cN(Z),{recursive:!0}),!p1(Z)){YQ($,Z);return}if(!Q)throw Error(`Plugin is already installed at ${Z}. Use --force to replace it.`);let X=X0(cN(Z),`.replace-${D$(Z)}-${Date.now()}-${process.pid}-${s2(`${Z}:${Math.random()}`)}`);YQ(Z,X);try{YQ($,Z)}catch(J){if(!p1(Z)&&p1(X))YQ(X,Z);throw J}try{KQ(X,{recursive:!0,force:!0})}catch{}}function Sr($){let Z=$.transport;if(Z.type==="stdio")return!1;return Z.headers!==void 0&&Object.keys(Z.headers).length>0}function br($){let Z=$.oauth?.tokens?.access_token;return typeof Z==="string"&&Z.trim().length>0}function kr($){let Z=$.metadata;if(!Z||Z.source!=="plugin"||typeof Z.pluginName!=="string"||typeof Z.pluginPath!=="string")return;return{pluginName:Z.pluginName,pluginPath:Z.pluginPath}}function Zq($){let Z=new Set($.pluginPaths.map((J)=>X2(J)));if(Z.size===0)return[];let Q;try{Q=y1({filePath:$.settingsPath??V0()})}catch{return[]}let X=[];for(let J of Q){let W=kr(J);if(!W||!Z.has(X2(W.pluginPath)))continue;let j=J.transport.type;if(j==="stdio")continue;if(Sr(J)||br(J))continue;X.push({name:J.name,pluginName:W.pluginName,pluginPath:W.pluginPath,transportType:j,lastError:J.oauth?.lastError})}return X.sort((J,W)=>J.name.localeCompare(W.name))}async function xr($){let Z=$.source.trim(),Q=sN(Z,$.sourceType),X=$.cwd?.trim(),J=X?X2(X):process.cwd(),W=Ur(X?J:void 0),j=Yr($.officialPluginsRepo),Y=Lr(Q,J,j),V=Fr(W,Q,Y),B=Dr(Q,J),K=X0(W,D8,".tmp"),G=X0(K,`${Date.now()}-${process.pid}-${s2(`${Z}:${Math.random()}`)}`),H=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),U=$.force===!0;fr(V,U),await rN(K,{recursive:!0});let F;try{if(Q.type==="npm")F=await Ar(Q,G,H);else if(Q.type==="git")F=await Tr(Q,G,H);else if(Q.type==="official")F=await Er(Q,G,H,j);else if(Q.type==="remote")F=await Cr(Q,G);else F=await Pr(Q,G,J,H);let L=(Q.type==="local"||Q.type==="remote")&&F===G?eN(G).map((_)=>`./${nN(aN(G,_))}`):await qr(G,F,B);if(L.length===0)throw Error(`No plugin entry files found for ${Z}`);wr(G,V,U);let D={source:Z,installPath:V,entryPaths:L.map((_)=>X2(V,_)),mcpSyncFailures:[],mcpOAuthCandidates:[]},z=await mY({pluginPaths:D.entryPaths,cwd:J,workspacePath:J});return D.mcpSyncFailures=z.failures,D.mcpOAuthCandidates=Zq({pluginPaths:D.entryPaths}),D}catch(L){throw KQ(G,{recursive:!0,force:!0}),L}}import*as R0 from"@cline/llms";import{VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES as yr}from"@cline/llms";import{getClineEnvironmentConfig as Ir}from"@cline/shared";var hr=5000,BV={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}],clinePass:[]};function LQ($){return{recommended:$.recommended.map((Z)=>({...Z,tags:[...Z.tags]})),free:$.free.map((Z)=>({...Z,tags:[...Z.tags]})),clinePass:$.clinePass.map((Z)=>({...Z,tags:[...Z.tags]}))}}function YV($){if(!$||typeof $!=="object")return null;let Z=$;if(typeof Z.id!=="string"||Z.id.length===0)return null;return{id:Z.id,name:typeof Z.name==="string"&&Z.name.length>0?Z.name:Z.id,description:typeof Z.description==="string"?Z.description:"",tags:Array.isArray(Z.tags)?Z.tags.filter((Q)=>typeof Q==="string"):[]}}function vr($){if(!$||typeof $!=="object")return null;let Z=$,Q=Array.isArray(Z.recommended)?Z.recommended:[],X=Array.isArray(Z.free)?Z.free:[],J=Array.isArray(Z.clinePass)?Z.clinePass:[],W=Q.map(YV).filter((V)=>V!==null),j=X.map(YV).filter((V)=>V!==null),Y=J.map(YV).filter((V)=>V!==null);if(W.length===0&&j.length===0&&Y.length===0)return null;return{recommended:W,free:j,clinePass:Y}}function gr($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=Ir().apiBaseUrl;try{return($.providerSettingsManager??new o$).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function mr($,Z,Q){let X=new AbortController,J=setTimeout(()=>X.abort(),Q);try{return await $(Z,{signal:X.signal})}finally{clearTimeout(J)}}function VV($){return $.replace(/\s*\(free\)\s*$/i,"").replace(/:free$/i,"").trim()}function Xq($){let Z=[$];for(let Q of yr)if($.startsWith(Q.canonicalPrefix))Z.push(`${Q.aliasPrefix}${$.slice(Q.canonicalPrefix.length)}`);else if($.startsWith(Q.aliasPrefix))Z.push(`${Q.canonicalPrefix}${$.slice(Q.aliasPrefix.length)}`);return Z}function cr($,Z){for(let J of Z)for(let W of Xq($.id)){let j=J?.[W]?.name?.trim();if(j)return VV(j)}let Q=$.name?.trim();if(Q&&Q!==$.id)return VV(Q);let X=$.id.split("/").at(-1)??$.id;return VV(X)}async function ur($,Z){let Q;try{return await Promise.race([$(),new Promise((X)=>{Q=setTimeout(()=>X(void 0),Z)})])}catch{return}finally{clearTimeout(Q)}}async function dr($,Z,Q){let X=await ur(Z,Q),J=(W,j)=>W.map((Y)=>({...Y,name:cr(Y,j)}));return{recommended:J($.recommended,[X?.openrouter]),free:J($.free,[X?.cline,X?.openrouter]),clinePass:J($.clinePass,[X?.["cline-pass"]])}}async function Jq($={}){let Z=$.timeoutMs??hr,Q=Date.now()+Z;try{let X=gr($),J=$.fetchImpl??fetch,W=await mr(J,`${X}/api/v1/ai/cline/recommended-models`,Z);if(!W.ok)throw Error(`HTTP ${W.status}`);let j=await W.json(),Y=vr(j);if(Y)return await dr(Y,$.catalogLoader??J6,Math.max(0,Q-Date.now()))}catch{}return LQ(BV)}var lr=300000,J2=null,b5=null,FQ=0;async function KV($={}){if(J2&&J2.expiresAt>Date.now())return LQ(J2.data);if(b5)return b5;let Z=FQ,Q=Jq($).then((X)=>{if(Z===FQ)J2={data:X,expiresAt:Date.now()+lr};return X}).finally(()=>{if(Z===FQ)b5=null});return b5=Q,Q}function GV(){if(J2&&J2.expiresAt>Date.now())return LQ(J2.data);return LQ(BV)}function pr(){FQ+=1,J2=null,b5=null}var ir={cline:[{tier:"recommended",select:($)=>$.recommended},{tier:"free",select:($)=>$.free}],"cline-pass":[{tier:"subscribed",select:($)=>$.clinePass},{tier:"free",select:($)=>$.free}]};function Qq($){return $.split("/").at(-1)??$}function DQ($,Z,Q){let X=ir[$];if(!X)return Z;let J=new Map,W=new Map;for(let B of X)B.select(Q).forEach((K,G)=>{let H={entry:K,tier:B.tier,rank:G};for(let L of Xq(K.id))if(!J.has(L))J.set(L,H);let U=Qq(K.id),F=W.get(U);if(F===void 0)W.set(U,H);else if(F!==null&&F.entry.id!==K.id)W.set(U,null)});if(J.size===0)return Z;let j=new Set;for(let B of Z){let K=J.get(B.id);if(K)j.add(K.entry.id)}let Y=new Set,V=(B)=>{let K=J.get(B.id);if(K)return K;let G=W.get(Qq(B.id));if(!G||j.has(G.entry.id)||Y.has(G.entry.id))return;return Y.add(G.entry.id),G};return Z.map((B)=>{let K=V(B);if(!K)return B;return{...B,description:K.entry.description.trim()||B.description,featured:{tier:K.tier,rank:K.rank,tags:[...K.entry.tags]}}})}var rr="cline",FV="cline-pass";function ar($){return $.apiKey??$.auth?.apiKey}function nr($){return($.auth?.accessToken?.trim()??"").length>0}function jq($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function or($){let Z=$.split(/\s+/).filter(Boolean);if(Z.length===0)return"?";if(Z.length===1)return Z[0].slice(0,2).toUpperCase();return`${Z[0][0]}${Z[1][0]}`.toUpperCase()}function sr($){let Z=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let X of $)Q=Q*31+X.charCodeAt(0)>>>0;return Z[Q%Z.length]}function k5($){return $.operation==="transcription"}function Yq($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>j_(Z,Q))}async function tr($,Z){let Q=await R0.getModelsForProvider($),X=$===FV;if(!Z&&!X)return Q;let J=await U3($,{loadLatestOnInit:X,loadPrivateOnAuth:!0,failOnError:!1},Z);if($==="litellm"&&J?.knownModels)return J.knownModels;if(X&&J?.knownModels)return J.knownModels;return J?.knownModels?{...Q,...J.knownModels}:Q}function HV($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function er($){if(!$?.length)return;return[...new Set($)]}function $a($,Z){return er([...$??[],...Z??[]])}function Za($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function Qa($){if(!$||typeof $!=="object")return!1;let Z=$;return typeof Z.path==="string"&&Z.path.trim().length>0&&typeof Z.label==="string"&&Z.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(Z.type))}function Xa($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(Qa)}var _Q={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},Wq={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function Ja($){if(!$)return[_Q];if($.source!=="system")return $.baseUrl?[_Q,Wq]:[_Q];let Z=[];if($.env?.length)Z.push(_Q);if($.baseUrl)Z.push(Wq);return Z}function Wa($,Z){return Z.split(".").reduce((Q,X)=>{if(!Q||typeof Q!=="object")return;return Q[X]},$)}function ja($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function Ya($,Z,Q){if(!$?.length)return;let X={};for(let J of $){let j=ja(J.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:Wa(Z,J.path))??J.defaultValue;if(j!==void 0)X[J.path]=j}return X}function Vq($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function UV($,Z){let Q=Z?.includes("vision")??!1,X=Z?.includes("reasoning")??!1;return Object.fromEntries($.map((J)=>[J,{id:J,name:J,supportsVision:Q,supportsAttachments:Q,supportsReasoning:X}]))}async function Bq($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await r5($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function Kq($,Z){let Q=$.read(),X=!1;if(Q.providers[Z])delete Q.providers[Z],X=!0;if(Q.lastUsedProvider===Z)delete Q.lastUsedProvider,X=!0;if(Q.modes.voiceInput?.providerId===Z)delete Q.modes.voiceInput,X=!0;if(X)$.write(Q);R0.unregisterProvider(Z)}async function Va($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let X=Z.baseUrl.trim(),J=Z.apiKey?.trim()??"";if(!X&&!J){let F=n$($);if((await $8(F)).providers[Q]){let D=await Hq($,{providerId:Q});return{providerId:Q,settingsPath:D.settingsPath,modelsPath:D.modelsPath,modelsCount:0}}return Kq($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:F,modelsCount:0}}if(R0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let W=Z.name.trim();if(!W)throw Error("name is required");if(!X)throw Error("baseUrl is required");let j=HV(Z.models),Y=Z.modelsSourceUrl?.trim(),V=await Bq({providerId:Q,explicitModels:j,modelsSourceUrl:Y,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let B=Z.defaultModelId?.trim()&&V.includes(Z.defaultModelId.trim())?Z.defaultModelId.trim():V[0],K=Z.capabilities?.length?[...new Set(Z.capabilities)]:void 0,G=Vq(Z.headers);$.saveProviderSettings({provider:Q,apiKey:J||void 0,baseUrl:X,headers:G,timeout:Z.timeoutMs,model:B,protocol:Z.protocol,client:Z.client},{setLastUsed:!1});let H=n$($),U=await $8(H);return U.providers[Q]={provider:{name:W,baseUrl:X,defaultModelId:B,protocol:Z.protocol,client:Z.client,capabilities:K,modelsSourceUrl:Y},models:UV(V,K)},await _Z(H,U),Z8(Q,U.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:H,modelsCount:V.length}}async function Gq($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let X=n$($),J=await $8(X),W=J.providers[Q];if(!W){let A=$.getProviderSettings(Q),N=R0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider;if(!A)throw Error(`provider "${Q}" does not exist`);let T=Z.modelsSourceUrl?.trim(),M=HV(Z.models)[0]??A.model?.trim();if(!M&&!T)throw Error(`provider "${Q}" cannot be updated because no model is configured`);W={provider:{name:Z.name?.trim()||N?.name||jq(Q),baseUrl:Z.baseUrl?.trim()??A.baseUrl?.trim()??N?.baseUrl?.trim()??"",defaultModelId:M??N?.defaultModelId,protocol:A.protocol??N?.protocol,client:A.client??N?.client,capabilities:A.capabilities??N?.capabilities,modelsSourceUrl:N?.modelsSourceUrl},models:M?UV([M],A.capabilities):{}}}if(!W.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let j=Z.name?.trim()??W.provider.name.trim();if(!j)throw Error("name is required");let Y=Z.baseUrl?.trim()??W.provider.baseUrl.trim();if(!Y)throw Error("baseUrl is required");let V=Z.capabilities===void 0?W.provider.capabilities:Z.capabilities===null?void 0:[...new Set(Z.capabilities)],B=Z.protocol===void 0?W.provider.protocol:Z.protocol??void 0,K=Z.client===void 0?W.provider.client:Z.client??void 0,G=HV(Z.models),H=Z.modelsSourceUrl===void 0?W.provider.modelsSourceUrl:Z.modelsSourceUrl?.trim()||void 0,U=Z.models!==void 0||Z.modelsSourceUrl!==void 0&&!!H,F=Object.keys(W.models??{}).map((A)=>A.trim()).filter(Boolean),L=await Bq({providerId:Q,explicitModels:G,modelsSourceUrl:H,fallbackModelIds:F,shouldRecompute:U});if(L.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let D=Z.defaultModelId===void 0?W.provider.defaultModelId?.trim():Z.defaultModelId?.trim(),z=D&&L.includes(D)?D:L[0],O={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:Y,model:z};if(B)O.protocol=B;else delete O.protocol;if(K)O.client=K;else delete O.client;if(Z.apiKey!==void 0){let A=Z.apiKey?.trim()??"";if(A)O.apiKey=A;else delete O.apiKey}if(Z.headers!==void 0){let A=Vq(Z.headers);if(A)O.headers=A;else delete O.headers}if(Z.timeoutMs!==void 0)if(typeof Z.timeoutMs==="number")O.timeout=Z.timeoutMs;else delete O.timeout;return $.saveProviderSettings(O,{setLastUsed:!1}),J.providers[Q]={provider:{name:j,baseUrl:Y,defaultModelId:z,protocol:B,client:K,capabilities:V,modelsSourceUrl:H},models:UV(L,V)},await _Z(X,J),Z8(Q,J.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:X,modelsCount:L.length}}async function Hq($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let X=n$($),J=await $8(X);if(!J.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete J.providers[Q],await _Z(X,J),R0.unregisterProvider(Q),Kq($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:X}}function Ba($,Z,Q={}){let X=Z.trim();if(!X)throw Error("providerId is required");let J=$.read().providers[X]?.settings;return $.saveProviderSettings({...J??{},provider:X},{setLastUsed:!1,tokenSource:Q.tokenSource}),{providerId:X,enabled:!0,settingsPath:$.getFilePath()}}async function Ka($,Z={}){let Q=$.read(),X=R0.getProviderIds(),J=GV(),W=await Promise.all(X.map(async(G)=>{let[H,U]=await Promise.all([R0.getProvider(G),R0.getModelsForProvider(G)]),F=DQ(G,Yq(U),J),L=Q.providers[G]?.settings,D=$.getProviderSettings(G),z=H?.name??jq(G),_=$a(H?.capabilities,D?.capabilities),O=Xa(H?.metadata)??Ja(H);return{provider:{id:G,name:z,models:F.length,color:sr(G),letter:or(z),enabled:Boolean(L),apiKey:D?ar(D):void 0,oauthAccessTokenPresent:D?nr(D):void 0,baseUrl:D?.baseUrl??H?.baseUrl,defaultModelId:H?.defaultModelId,protocol:D?.protocol??H?.protocol,client:D?.client??H?.client,capabilities:_,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:O,configValues:Ya(O,D,H),modelList:F},rank:Za(H?.metadata)}}));W.sort((G,H)=>{if(G.rank!==H.rank)return G.rank-H.rank;return G.provider.name.localeCompare(H.provider.name)||G.provider.id.localeCompare(H.provider.id)});let j=W.map((G)=>G.provider);if(Z.isClinePassEnabled!==!0)j=j.filter((G)=>G.id!==FV);let Y=$.getVoiceInputSettings(),B=(Y?j.find((G)=>G.id===Y.providerId&&G.enabled):void 0)?.modelList?.find((G)=>G.id===Y?.modelId&&k5(G)),K=Y&&B?Y:void 0;return{providers:j,settingsPath:$.getFilePath(),voiceInput:K}}async function OQ($,Z){let Q=$.trim(),X=await tr(Q,Z),J=Yq(X);if(Q===rr||Q===FV)J=DQ(Q,J,await KV());return{providerId:Q,models:J}}async function Uq($,Z){let Q=Z.providerId.trim(),X=Z.modelId.trim(),J=$.getProviderConfig(Q,{includeKnownModels:!1});if(!J)throw Error(`Transcription provider "${Q}" is not configured in providers.json`);let{models:W}=await OQ(Q,J),j=W.find((Y)=>Y.id===X);if(!j||!k5(j))throw Error(`Model "${X}" is not a dedicated audio-to-text transcription model`);if(j.operationModes?.includes("streaming"))throw Error(`Model "${X}" requires streaming transcription and cannot transcribe a completed recording`);return R0.transcribeAudio({providerConfig:J,modelId:X,audio:Z.audio,mediaType:Z.mediaType,abortSignal:Z.abortSignal})}async function Ga($,Z){if(!Z)return $.setVoiceInputSettings(void 0),{settingsPath:$.getFilePath()};let Q=Z.providerId.trim(),X=Z.modelId.trim();if(!Q||!X)throw Error("Voice input provider and model are required");if(!$.read().providers[Q])throw Error(`Voice input provider "${Q}" must be enabled and configured`);let W=$.getProviderConfig(Q,{includeKnownModels:!1}),{models:j}=await OQ(Q,W),Y=j.find((B)=>B.id===X);if(!Y||!k5(Y))throw Error(`Model "${X}" is not a dedicated audio-to-text transcription model`);let V={providerId:Q,modelId:X};return $.setVoiceInputSettings(V),{settingsPath:$.getFilePath(),voiceInput:V}}async function Ha($,Z){let Q=$.getVoiceInputSettings();if(!Q)throw Error("Configure a voice input provider and model in Settings");return Uq($,{...Q,audio:Z.audio,mediaType:Z.mediaType,abortSignal:Z.abortSignal})}async function Ua($,Z={}){let Q=$.getVoiceInputSettings();if(!Q)throw Error("Configure a voice input provider and model in Settings");let X=$.getProviderConfig(Q.providerId,{includeKnownModels:!1});if(!X)throw Error(`Transcription provider "${Q.providerId}" is not configured in providers.json`);let{models:J}=await OQ(Q.providerId,X),W=J.find((j)=>j.id===Q.modelId);if(!W||!k5(W)||!W.operationModes?.includes("streaming"))throw Error(`Model "${Q.modelId}" does not support streaming transcription`);return R0.createStreamingAudioTranscriptionSession({providerConfig:X,modelId:Q.modelId,expiresAfterSeconds:Z.expiresAfterSeconds,abortSignal:Z.abortSignal})}function zQ($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function Fq($,Z){if(!zQ(Z))return zQ($)?{...$}:void 0;let Q=zQ($)?{...$}:{};for(let[X,J]of Object.entries(Z)){if(J==null||J===""){delete Q[X];continue}if(zQ(J)){let W=Fq(Q[X],J);if(W&&Object.keys(W).length>0)Q[X]=W;else delete Q[X];continue}Q[X]=J}return Object.keys(Q).length>0?Q:void 0}function Fa($,Z){let Q=Z.providerId.trim();if(Z.enabled===!1){let W=$.read();if(delete W.providers[Q],W.lastUsedProvider===Q)delete W.lastUsedProvider;if(W.modes.voiceInput?.providerId===Q)delete W.modes.voiceInput;return $.write(W),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let J={...$.getProviderSettings(Q)??{},provider:Q};for(let W of["apiKey","baseUrl","model","region"])if(Object.hasOwn(Z,W)&&typeof Z[W]==="string")if(Z[W].trim().length===0)delete J[W];else J[W]=Z[W];for(let W of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(Z,W))J[W]=Z[W];for(let W of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(Z,W)&&Z[W]!=null){let j=Fq(J[W],Z[W]);if(j)J[W]=j;else delete J[W]}return $.saveProviderSettings(J,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function La($,Z){let Q=Z.trim(),X=$.getProviderSettings(Q),W=R0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,j=X?.baseUrl?.trim()||W?.baseUrl?.trim(),Y=a5(j,W?.baseUrl,W?.modelsSourceUrl);if(!X||!W||!j||!Y)return{providerId:Q,refreshed:!1};let V=await Gq($,{providerId:Q,name:W.name,baseUrl:j,apiKey:X.apiKey,headers:X.headers??null,timeoutMs:X.timeout??null,modelsSourceUrl:Y,protocol:X.protocol??W.protocol??null,client:X.client??W.client??null,capabilities:X.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:V.modelsCount}}function Da($){let Z=$.trim().toLowerCase(),Q=b0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function _a($,Z,Q,X){let J=b0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let W=y5({onPrompt:async(j)=>j.defaultValue??"",openUrl:Q,onOpenUrlError:({error:j})=>{throw j instanceof Error?j:Error(String(j))}});return J.login({settings:Z,callbacks:W,telemetry:X})}function za($,Z,Q,X,J){return q8({manager:$,providerId:Z,settings:Q,credentials:X,setLastUsed:J?.setLastUsed})}async function Oa($,Z,Q,X){let J=y5({onPrompt:async(W)=>W.defaultValue??"",openUrl:Q,onOpenUrlError:({error:W})=>{throw W instanceof Error?W:Error(String(W))}});return W3($,Z,{callbacks:J,telemetry:X})}function Na($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}import*as NQ from"@cline/llms";var qa=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],Aa={"openai-compatible":{description:"For Azure AI Foundry deployments, use a Base URL ending at /openai/deployments/<deployment> and set the Azure API version.",fields:{azureApiVersion:{label:"Azure API Version (optional)",placeholder:"2025-01-01-preview",note:"Required for Azure AI Foundry deployment URLs.",optional:!0}}},vertex:{mode:"replace",description:"Vertex AI can use Google Cloud Application Default Credentials with a project/region. An API key is optional for supported Gemini models.",fields:{gcpProjectId:{label:"Google Cloud Project ID",placeholder:"my-gcp-project"},gcpRegion:{label:"Google Cloud Region",placeholder:"us-central1",defaultValue:"us-central1"},apiKey:{label:"API Key (optional)",placeholder:"Leave blank to use Google Cloud credentials",optional:!0}}},bedrock:{mode:"replace",description:"AWS region is required for Bedrock. It can be auto-filled from AWS_REGION, AWS_DEFAULT_REGION, or ~/.aws/config.",fields:{awsRegion:{label:"AWS Region",placeholder:"us-east-1"},apiKey:{label:"AWS Bedrock API Key (optional)",placeholder:"Leave blank to use AWS profile/default chain",optional:!0},awsProfile:{label:"AWS Profile Name (optional)",placeholder:"default",optional:!0}}},ollama:{fields:{apiKey:{note:"Keep empty if no API key for local inference."}}},sapaicore:{mode:"replace",description:"SAP AI Core uses OAuth client credentials and an AI Core API URL, not a generic API key.",fields:{baseUrl:{label:"AI Core Base URL",placeholder:"https://api.ai.<region>.aws.ml.hana.ondemand.com"},sapClientId:{label:"Client ID",placeholder:"sb-...|xsuaa_std!b..."},sapClientSecret:{label:"Client Secret",placeholder:"SAP AI Core client secret"},sapTokenUrl:{label:"Token URL",placeholder:"https://<subdomain>.authentication.sap.hana.ondemand.com"},sapResourceGroup:{label:"Resource Group",placeholder:"default",optional:!0},sapDeploymentId:{label:"Deployment ID",placeholder:"SAP AI Core deployment id",optional:!0}}}};function Ta($,Z){let Q={};for(let X of qa){let J=$[X],W=Z[X];if(J||W)Q[X]={...J,...W}}return Q}function Ea($){let Z=Aa[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:Ta($.fields,Z.fields)}}var Ma=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function Ra($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return Ma.has($)}function Ca($){let Z=NQ.normalizeProviderId($);if(X6(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=NQ.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:Z,authMethod:"local",fields:{}};let X=Q?.provider.baseUrl,J={apiKey:{}};if(Ra(Z,Q))J.baseUrl={defaultValue:X};return Ea({providerId:Z,authMethod:"api-key",fields:J})}QQ();_0();gZ();import{appendFileSync as Pa,existsSync as LV,mkdirSync as fa,readFileSync as wa,renameSync as Sa,unlinkSync as ba,writeFileSync as ka}from"node:fs";import{join as DV}from"node:path";import{resolveTeamDataDir as xa}from"@cline/shared/storage";function ya($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class Lq{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=ya($.teamName),Q=$.baseDir?.trim()||xa();this.dirPath=DV(Q,Z),this.statePath=DV(this.dirPath,"state.json"),this.taskHistoryPath=DV(this.dirPath,"task-history.jsonl")}loadState(){if(!LV(this.statePath))return;try{let $=wa(this.statePath,"utf8"),Z=JSON.parse($);if(Z.version!==1||!Z.teamState)return;for(let Q of Z.teammates??[])this.teammateSpecs.set(Q.agentId,Q);return eL(Z.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec($){this.teammateSpecs.set($.agentId,$)}removeTeammateSpec($){this.teammateSpecs.delete($)}persist($){if(!this.hasPersistableState($)){this.clearPersistedState();return}this.ensureDir();let Z={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Q=`${this.statePath}.tmp`;ka(Q,`${JSON.stringify(Z,null,2)}
1022
- `,"utf8"),Sa(Q,this.statePath)}appendTaskHistory($){let Z={};switch($.type){case"team_task_updated":Z=$.task;break;case"team_message":Z={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":Z={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":Z={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":Z={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":Z={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),Pa(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:Z})}
1023
- `,"utf8")}ensureDir(){if(!LV(this.dirPath))fa(this.dirPath,{recursive:!0})}hasPersistableState($){let Z=$.exportState();if(this.teammateSpecs.size>0)return!0;if(Z.members.some((Q)=>Q.role==="teammate"))return!0;return Z.tasks.length>0||Z.mailbox.length>0||Z.missionLog.length>0}clearPersistedState(){if(LV(this.statePath))ba(this.statePath)}}import{z as v}from"zod";var Dq=v.object({workspaceRoot:v.string().min(1),cwd:v.string().optional(),provider:v.string().min(1),model:v.string().min(1),mode:v.enum(["act","plan"]).default("act"),apiKey:v.string(),systemPrompt:v.string().optional(),rules:v.string().optional(),maxIterations:v.number().int().positive().optional(),enableTools:v.boolean(),enableSpawn:v.boolean().optional(),enableTeams:v.boolean().optional(),autoApproveTools:v.boolean().optional(),missionStepInterval:v.number().int().positive().optional(),missionTimeIntervalMs:v.number().int().positive().optional()}),_q=v.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),zq=v.enum(["user","assistant","tool","system","status","error"]),Oq=v.object({id:v.string().min(1),mediaType:v.enum(["image/png","image/jpeg","image/gif","image/webp"]),data:v.string().min(1)}),Nq=v.object({id:v.string().min(1),sessionId:v.string().nullable(),role:zq,content:v.string(),images:v.array(Oq).optional(),createdAt:v.number().int().nonnegative(),meta:v.object({stream:v.enum(["stdout","stderr"]).optional(),toolName:v.string().optional(),iteration:v.number().int().nonnegative().optional(),agentId:v.string().optional(),conversationId:v.string().optional(),hookEventName:v.string().optional(),inputTokens:v.number().int().nonnegative().optional(),outputTokens:v.number().int().nonnegative().optional(),checkpoint:v.object({ref:v.string(),createdAt:v.number().int().nonnegative(),runCount:v.number().int().positive(),kind:v.enum(["stash","commit"]).optional()}).optional()}).optional()}),qq=v.object({toolCalls:v.number().int().nonnegative(),tokensIn:v.number().int().nonnegative(),tokensOut:v.number().int().nonnegative()}),Ia=v.object({sessionId:v.string().nullable(),status:_q,config:Dq,messages:v.array(Nq),rawTranscript:v.string(),error:v.string().nullable(),summary:qq});var ha=k$;import{Agent as QK0,createAgentRuntime as XK0}from"@cline/agents";import{readFile as va}from"node:fs/promises";import ga from"node:path";function ma($){return $}async function ca($){let Z=ga.resolve($),Q=await va(Z,"utf8"),X;try{X=JSON.parse(Q)}catch(J){let W=J instanceof Error?J.message:String(J);throw Error(`Failed to parse JSON config at "${Z}": ${W}`)}return ua(X,Z)}function ua($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let X=$.providers;if(!Array.isArray(X))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!X.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}import{BUILT_IN_PROVIDER_IDS as Eq,createHandler as pa,createHandlerAsync as ia,getProviderCollection as ra,hasProvider as Mq,registerAsyncHandler as aa,registerHandler as na,registerModel as oa,registerProvider as Rq}from"@cline/llms";function Aq($){return $?{...$}:{}}function da($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function la($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function Tq($){let Z=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:Z,defaultModel:$.collection.provider.defaultModelId,modelCount:Z.length}}class _V{providers=new Map;register($){la($.id,$.models);let Z=$.defaultModel??$.models[0];if(!Z)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(Z))throw Error(`Default model "${Z}" is not included in configured models for "${$.id}".`);let Q=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Q?.models??[],...$.models]),defaultModel:Z,defaults:{...Q?.defaults??{},...Aq($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:da($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...Aq($.settings)}})}registerModel($,Z){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([Z]),defaultModel:Z,defaults:{}});return}Q.models.add(Z)}createHandlerConfig($){let Z=this.require($.providerId),Q=$.modelId??Z.defaultModel;if(!Z.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...Z.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,Z){return this.providers.get($)?.models.has(Z)??!1}require($){let Z=this.providers.get($);if(!Z)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return Z}}class zV{configuredProviders=new _V;constructor($){this.applyConfig($)}createHandler($){return pa(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return ia(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(Rq($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)na($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)aa($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let Z=$.exposeModels??Object.keys($.models),Q=$.defaultModel??Z[0];if(!Q)throw Error(`Provider "${$.id}" must define a default model.`);Rq({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Q,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:Z,defaultModel:Q,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){oa($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...Eq]}async getBuiltInProviders(){return(await Promise.all(Eq.map((Z)=>ra(Z)))).filter((Z)=>Z!==void 0).map((Z)=>Tq({collection:Z}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,Z){return this.configuredProviders.hasModel($,Z)}applyConfig($){for(let Z of $.providers)this.configuredProviders.registerSelectionConfig(Z);for(let Z of $.models??[])this.registerModel(Z);for(let Z of $.customProviders??[])this.registerProvider(Z);for(let Z of this.configuredProviders.list()){let Q=Mq(Z.id),X=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,J=typeof X==="string"&&Mq(X);if(!Q&&!J)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function sa($){return new zV($)}vj();async function nY0(){return Promise.resolve().then(() => (QQ(),NN))}export{Wj as writeModelsFileSync,x7 as writeHubDiscovery,d0 as writeGlobalSettings,y7 as withHubStartupLock,nQ0 as watchManagedHubBuildMismatch,F1 as verifyHubConnection,x1 as updateMcpSettingsFileSync,G7 as updateMcpSettingsFile,X4 as updateMcpServerOAuthStateAsync,cX as updateMcpServerOAuthState,Gq as updateLocalProvider,nY as uninstallPlugin,op as uninstallMcpServer,vN as uninstallMarketplaceSkill,gN as uninstallMarketplacePlugin,IN as uninstallMarketplaceMcpServerFromSettings,ai as uninstallMarketplaceEntry,ij as truncateNotificationBody,I8 as truncateCommandOutput,Uj as trimMessagesBeforeUserRun,Uq as transcribeLocalAudio,Ha as transcribeConfiguredVoiceInput,N3 as toggleDisabledTool,n7 as toTeamProgressLifecycleEvent,o1 as toProviderConfig,wk as toHubStatusUrl,gF as toHubHealthUrl,iW as toHookConfigFileName,Hg as syncStoredProviderRegistration,mY as syncPluginMcpServersToSettings,JZ as summarizeUsageFromMessages,IV0 as stripUtf8Bom,dx as stopLocalHubServerGracefully,n1 as startLocalOAuthServer,xY as startHubWebSocketServer,eW0 as startHubServer,HA as startClineDeviceAuth,eX as splitCoreSessionConfig,Ax as spawnDetachedHubServerWithRetry,qx as spawnDetachedHubServer,UE as setTuiThemeGlobally,FE as setToolAutoApproveGlobally,QE as setTelemetryOptOutGlobally,yq as setSdkLogger,KE as setPlanActModeGlobally,SB as setModelToolEnabledGlobally,Z4 as setMcpServerDisabled,bB as setDisabledTools,q3 as setDisabledPlugin,jE as setCompactionStrategyGlobally,VE as setCompactionModeGlobally,JE as setAutoUpdateEnabledGlobally,xd as setActiveConnectorSupervisor,wz as serializeAgendaTaskSpec,dQ0 as sendHubCommand,j0 as sdkDebug,Ga as saveVoiceInputSettings,q8 as saveProviderOAuthCredentials,Fa as saveLocalProviderSettings,za as saveLocalProviderOAuthCredentials,T4 as sanitizeSessionToken,OB as safeParseSettings,ST as safeCreateProviderConfig,m2 as runSubprocessEvent,n4 as runHook,SH as reviveTeamStateDates,k4 as retireDiscoveredHub,ZL as restartLocalHubIfIdleAfterStartupTimeout,T20 as resolveWorkspaceHubOwnerContext,s3 as resolveWorkflowsConfigSearchPaths,j7 as resolveToolClientType,n3 as resolveSkillsConfigSearchPaths,P1 as resolveSharedHubOwnerContext,cm as resolveSessionBackend,o3 as resolveRulesConfigSearchPaths,U3 as resolveProviderConfig,aA as resolveProviderApiKeyFromSettings,v1 as resolveProductionHubOwnerContext,M$ as resolvePluginSkillDirectoriesFromPaths,w8 as resolvePluginConfigSearchPaths,n$ as resolveModelsRegistryPath,wB as resolveModelToolSettings,yy as resolveMessageDisplayRole,y1 as resolveMcpServerRegistrations,mX as resolveMcpServerRegistration,tY as resolveMarketplaceMcpServerName,Na as resolveLocalClineAuthToken,Xu as resolveHubUrl,Bl as resolveHubRunQueuePath,b2 as resolveHubOwnerContext,WN as resolveHubInstanceLockPath,xl as resolveHubEventLogPath,k2 as resolveHubEndpointOptions,gJ as resolveHubBuildIdentity,h1 as resolveHubBuildId,hJ as resolveHubBuildEpochMs,lW as resolveHooksConfigSearchPaths,s1 as resolveDisabledToolNames,j9 as resolveDisabledPluginPaths,V0 as resolveDefaultMcpSettingsPath,I7 as resolveDefaultHubPort,ck as resolveDefaultHubPathname,mk as resolveDefaultHubHost,vH as resolveCoreSelectedToolIds,D1 as resolveCoreDistinctId,v4 as resolveCoreDeviceId,$W as resolveCompatibleLocalHubUrl,U20 as resolveClineDir,f4 as resolveClineDataDir,_9 as resolveAndLoadAgentPlugins,H2 as resolveAgentPluginPaths,pr as resetClineRecommendedModelsCacheForTests,iJ as requestHubShutdown,rF as requestHubDrain,hp as requestDesktopToolApproval,cY as removePluginMcpServersFromSettings,qd as removePersistedConnectorConnection,u6 as rememberRecoverableLocalHubUrl,TN as registerRemoteConfigSessionBlobUpload,J4 as registerMcpServersFromSettingsFile,xV0 as registerDisposable,La as refreshProviderModelsFromSource,dV as refreshOpenAICodexToken,sV as refreshOcaToken,cV as refreshClineToken,Ad as reconnectPersistedConnectors,HE as readTuiThemeGlobally,GE as readToolAutoApproveGlobally,Lx as readSupersededHubDiscovery,Z5 as readSessionCheckpointHistory,Cp as readRemoteConfigSessionBlobUploadMetadata,BE as readPlanActModeGlobally,DZ as readModelsFileSync,x0 as readHubDiscovery,W0 as readGlobalSettings,WE as readCompactionStrategyGlobally,YE as readCompactionModeGlobally,bY as readBearerToken,Sj as projectSessionMessagesForDisplay,l6 as projectSessionCompactionState,O6 as probeProcessStartTokenAsync,uK as probeProcessStartToken,NU as probeMcpServerConnection,J$ as probeHubServer,uQ0 as probeHubConnection,PG as prewarmFileIndex,iF as prewarmDetachedHubServer,wp as prepareRemoteConfigCoreIntegration,Nd as persistConnectorConnection,GV as peekClineRecommendedModels,a3 as parseWorkflowConfigFromMarkdown,kV0 as parseUserCommandEnvelope,i3 as parseSkillConfigFromMarkdown,zB as parseSettings,Y$ as parseSessionCompactionState,r3 as parseRuleConfigFromMarkdown,sN as parsePluginSource,H7 as parseMcpServerRegistration,IY as parseMcpInstallArgs,VZ as parseHookEventPayload,UW as parseConfiguredAgentConfig,oj as parseAgendaTaskSpec,h$ as normalizeWorkspacePath,bV0 as normalizeUserInput,SV0 as normalizeSdkError,o0 as normalizeRuntimeCapabilities,$9 as normalizeProviderId,Da as normalizeOAuthProvider,d6 as normalizeHubWebSocketUrl,t$ as normalizeAgendaTaskLocation,wV0 as noopBasicLogger,Bj as migrateLegacyProviderSettings,E9 as mergeRulesForSystemPrompt,s4 as mergeAgentHooks,ii as marketplaceEntryKey,Ba as markLocalProviderEnabled,AJ as makeTeamTaskSubSessionId,P7 as makeSubSessionId,oQ as loginOpenAICodex,Q3 as loginOcaOAuth,_a as loginLocalProvider,rQ as loginClineOAuth,W3 as loginAndSaveProviderOAuthCredentials,Oa as loginAndSaveLocalProviderOAuthCredentials,h7 as localHubHasNoActiveSessions,nY0 as loadOpenTelemetryAdapter,$4 as loadMcpSettingsFile,ca as loadLlmsConfigFromFile,p7 as loadConfiguredAgentConfigs,C8 as loadAgentPluginsFromPathsWithDiagnostics,rB as loadAgentPluginsFromPaths,S3 as loadAgentPluginFromPath,Uk as listSessionHistoryFromBackend,q7 as listPluginToolsWithDiagnostics,YS as listPluginTools,uX as listMcpServerOAuthStatuses,Ka as listLocalProviders,o6 as listHookConfigFiles,q5 as listActiveConnectors,Iy as isUserRunMessage,DS as isUnusableSessionError,LE as isToolDisabledGlobally,z3 as isTelemetryOptedOutGlobally,IH as isSkillsToolAvailable,I$ as isSessionNotFoundError,DK as isRuleEnabled,DT as isPrivateModelCatalogProvider,DE as isPluginDisabledGlobally,oN as isOfficialPluginSlug,X6 as isOAuthProvider,E8 as isModelToolEnabledGlobally,hN as isMarketplaceSkillInstalled,c6 as isManagedHubReusable,Np as isLocalHubOrigin,DN as isLocalHubHostName,hx as isHubReconnectableTransportError,JN as isHubLockHeldError,$L as isHubCommandTimeoutError,D20 as isDiscoveryFilePresent,k5 as isDedicatedTranscriptionModel,o8 as isCoreBuiltinToolAvailable,DV0 as isClinePassLimitMessage,LV0 as isClinePassLimitError,FV0 as isClineOrgIndividualInferenceSubscriptionMessage,UV0 as isClineOrgIndividualInferenceSubscriptionError,HV0 as isClineNotSubscribedMessage,GV0 as isClineNotSubscribedError,KV0 as isClineModelNotFoundMessage,BV0 as isClineFreeModelLimitMessage,VV0 as isClineFreeModelLimitError,TV as isClineAccountActionRequest,PT as isBuiltInProviderId,XE as isAutoUpdateEnabledGlobally,xr as installPlugin,ap as installMcpServer,q$ as identifyAccount,lJ as hubHasLiveSessions,a0 as hashSecret,E2 as hasMcpSettingsFile,cx as hasActiveHubSessions,sQ as getValidOpenAICodexCredentials,X3 as getValidOcaCredentials,aQ as getValidClineCredentials,i$ as getUserRunSpan,j3 as getProviderOAuthCredentialsFromSettings,Ca as getProviderConfigFields,YB as getProviderConfig,rA as getProviderAuthStorageId,b0 as getProviderAuthHandler,GR as getProcessStartTokenAsync,KR as getProcessStartToken,YK as getPluginDisplayName,i5 as getPersistedProviderApiKey,aZ as getPersistedConnectorConnection,U7 as getMcpServerOAuthStatus,Q4 as getMcpServerOAuthState,eY as getMarketplaceSkillCandidates,w4 as getManagedHubCompatibility,OQ as getLocalProviderModels,J6 as getLiveModelsCatalog,$V as getGlobalMarketplaceSkillPaths,_2 as getFileIndex,gh as getCurrentContextSize,wX as getCoreHeadlessToolNames,hH as getCoreDefaultEnabledToolIds,S6 as getCoreBuiltinToolCatalog,gH as getCoreAcpToolNames,YV0 as getClinePassSubscriptionUrl,jV0 as getClineOrgIndividualInferenceSubscriptionMessage,WV0 as getClineNotSubscribedMessage,zV0 as getClineDefaultSystemPrompt,KV as getCachedClineRecommendedModels,HY as getActiveConnectorSupervisor,WJ as generateWorkspaceInfoWithDiagnostics,E7 as generateWorkspaceInfo,T9 as formatRulesForSystemPrompt,nA as formatProviderOAuthApiKey,fV0 as formatDisplayUserInput,ZV as findInstalledGlobalMarketplaceSkillName,qZ as findCheckpointForRun,T3 as filterExtensionToolRegistrations,T$ as filterDisabledTools,A3 as filterDisabledPluginPaths,Jq as fetchClineRecommendedModels,JV0 as extractClinePassLimitMessage,XV0 as extractClineFreeModelLimitResetTime,Fz as executeTodoTaskOperation,hj as executeScheduleOperation,EV as executeClineAccountAction,_N as ensureHubWebSocketServer,$j0 as ensureHubServer,pJ as ensureDetachedHubServer,jj as ensureCustomProvidersLoadedSync,U_ as ensureCustomProvidersLoaded,x4 as ensureCompatibleLocalHubUrl,GX as ensureChatWorkspace,Iz as ensureAgendaTaskSchema,i9 as enrichPromptWithMentions,RV0 as emptyWorkspaceManifest,e6 as emptyStoredProviderSettings,S8 as discoverPluginModulePaths,Wi as disablePluginMcpServersInSettings,KY as disableConnectorAutostart,TJ as deriveSubsessionStatus,Hq as deleteLocalProvider,ma as defineLlmsConfig,$X as createWorkflowsConfigDefinition,b6 as createUserInstructionConfigService,kG as createToolPoliciesWithPreset,MV0 as createTool,w_ as createTeamName,uj as createTasksTool,dj as createTasksPromptExtension,cD as createSubprocessHooks,w6 as createSpawnAgentTool,t3 as createSkillsConfigDefinition,VX as createShellTool,h8 as createShellExecutor,fZ as createSessionHost,m7 as createSessionCompactionState,fZ as createRuntimeHost,e3 as createRulesConfigDefinition,Hj as createRestoredCheckpointMetadata,fp as createRemoteConfigSessionMessagesArtifactUploader,wT as createProviderConfig,hZ as createOpenTelemetryTelemetryService,y5 as createOAuthClientCallbacks,N7 as createMcpTools,V30 as createLocalHubScheduleRuntimeHandlers,sa as createLlmsSdk,p0 as createInitialAccumulatedUsage,L20 as createInMemoryHubOwnerContext,W$ as createHubServerUrl,IF as createHubAuthToken,eW as createHookConfigFileHooks,GZ as createHookConfigFileExtension,KZ as createHookAuditHooks,m8 as createEditorExecutor,aX as createDisabledMcpToolPolicy,CU as createDisabledMcpToolPolicies,P6 as createDelegatedAgentConfigProvider,f6 as createDelegatedAgent,xG as createDefaultToolsWithPreset,T6 as createDefaultTools,FX as createDefaultShellExecutor,V4 as createDefaultMcpServerClientFactory,o9 as createDefaultExecutors,H4 as createCoreSettingsService,u$ as createCoreSessionSnapshot,EV0 as createContributionRegistry,cW as createContextCompactionPrepareTurn,d2 as createConfiguredTelemetryService,vZ as createConfiguredTelemetryHandle,Ua as createConfiguredStreamingTranscriptionSession,r7 as createConfiguredAgentTools,uW as createCompactionStateAwarePrepareTurn,TV0 as createClineTelemetryServiceMetadata,AV0 as createClineTelemetryServiceConfig,p_ as createCheckpointComparePlan,s8 as createBuiltinTools,g8 as createApplyPatchExecutor,n8 as createAgentTeamsTools,XK0 as createAgentRuntime,jZ as createAgentHooksExtension,i6 as countUserRunMessages,zz as connectToHub,u9 as computePatchChanges,UA as completeClineDeviceAuth,vJ as compareHubBuilds,fj as compareCheckpointToWorkspace,Zq as collectPluginMcpOAuthCandidates,ET as clearPrivateModelsCatalogCache,TT as clearLiveModelsCatalogCache,hF as clearHubDiscoveryIfOwned,X$ as clearHubDiscovery,cp as cleanupConnectorInstanceViaCli,Hu as checkManagedHubBuildMismatch,aq as captureWorkspacePathResolved,MQ as captureWorkspaceInitialized,RQ as captureWorkspaceInitError,a1 as captureToolUsage,fQ as captureTokenUsage,PQ as captureTaskRestarted,CQ as captureTaskCreated,v5 as captureTaskCompleted,g5 as captureSubagentExecution,SQ as captureSkillUsed,qV0 as captureSdkError,nq as captureProviderConfigured,oq as captureProviderApiError,wQ as captureModeSwitch,kQ as captureMistakeLimitReached,xQ as captureMentionUsed,IQ as captureMentionSearchResults,yQ as captureMentionFailed,vQ as captureHookDiscovery,rq as captureExtensionActivated,bQ as captureDiffEditFailure,z8 as captureConversationTurnEvent,mQ as captureCompactionSkipped,gQ as captureCompactionExecuted,O$ as captureAuthSucceeded,z$ as captureAuthStarted,h5 as captureAuthRefreshSoftFailure,Y2 as captureAuthLoggedOut,N$ as captureAuthFailed,hq as captureAgentUnexpectedReasoningTokens,hQ as captureAgentTeamCreated,V2 as captureAgentCreated,jJ as buildWorkspaceMetadata,a7 as buildTeamProgressSummary,OV0 as buildSdkErrorProperties,qN as buildRemoteConfigSessionBlobUploadMetadata,RN as buildMcpInstallTransport,r8 as buildDelegatedAgentConfig,T5 as buildConnectorChildEnv,bP as buildConnectionUpdate,LW as buildConfiguredAgentToolName,DW as buildConfiguredAgentToolDescriptors,i_ as buildCheckpointWorkspaceDiff,W7 as bootstrapAgentTeams,UU as authorizeMcpServerOAuth,M2 as augmentMcpTimeoutError,DQ as applyClineFeaturedModels,Sz as agendaTaskSpecToCreateInput,Va as addLocalProvider,v0 as accumulateUsageTotals,x20 as __test__,u3 as WORKFLOWS_CONFIG_DIRECTORY_NAME,T8 as UnifiedConfigFileWatcher,k1 as ToolPresets,mZ as TodoTaskInputSchema,U5 as TelemetryService,IZ as TelemetryLoggerSink,Dz as TasksToolInputSchema,J7 as TEAM_TOOL_NAMES,L5 as TASKS_TOOL_NAME,Lz as TASKS_SYSTEM_PROMPT_RULE,B9 as SubprocessSandbox,y8 as StructuredCommandInputSchema,HZ as StoredProviderSettingsSchema,nD as StoredProviderSettingsEntrySchema,aD as StoredProviderModesSchema,Q5 as SqliteTeamStore,p$ as SqliteSessionStore,QY as SqliteAgendaTaskStore,Q8 as SessionVersioningService,O1 as SessionVersioningError,Z0 as SessionSource,P2 as SessionNotFoundError,G5 as ScheduledTaskInputSchema,LB as SapSettingsSchema,FO as STOP_SIGTERM_TIMEOUT_MS,LO as STOP_SIGKILL_TIMEOUT_MS,c3 as SKILLS_CONFIG_DIRECTORY_NAME,D3 as SESSION_STATUSES,U4 as SESSION_NOT_FOUND_ERROR_CODE,yV0 as SDK_ERROR_TELEMETRY_EVENT,RZ as RuntimeOAuthTokenManager,EQ as RpcClineAccountService,c7 as RemoteRuntimeHost,GB as ReasoningSettingsSchema,BK as RULES_CONFIG_DIRECTORY_NAME,GO as RESTART_MAX_DELAY_MS,HO as RESTART_GIVE_UP_AFTER,UO as RESTART_COUNTER_RESET_MS,KO as RESTART_BASE_DELAY_MS,AN as REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY,W6 as ProviderSettingsSchema,o$ as ProviderSettingsManager,VB as ProviderProtocolSchema,L3 as ProviderIdSchema,BB as ProviderClientSchema,v8 as PatchActionType,s as PATCH_MARKERS,F5 as OpenTelemetryProvider,DB as OcaSettingsSchema,H3 as OPENAI_COMPATIBLE_PROVIDERS,X5 as OAuthReauthRequiredError,j$ as NodeHubClient,V5 as NoOpFeatureFlagsProvider,wY as NativeHubTransportAdapter,_B as ModelCatalogSettingsSchema,B7 as McpSettingsUpdateSkippedError,k6 as McpSettingsMutatorPurityError,x6 as McpSettingsLockTimeoutError,y$ as McpOAuthClientChangedError,$$ as MAX_COMMAND_OUTPUT_CHARS,s$ as LocalRuntimeHost,sY0 as Llms,UZ as InMemoryWorkspaceManager,B4 as InMemoryMcpManager,_u as HubUIClient,L1 as HubTransportError,Du as HubSessionClient,$Q as HubServerTransport,yZ as HubScheduleService,bZ as HubScheduleCommandService,I2 as HubRuntimeHost,DY as HubRunQueue,oZ as HubRunAdmissionRejectedError,XN as HubLockHeldError,U8 as HubInstanceLock,AY as HubEventLogStore,v7 as HubCommandError,mD as HookEventPayloadSchema,gD as HookEventNameSchema,YZ as HookConfigFileName,OW0 as HUB_LOCK_HELD_EXIT_CODE,pW as HOOK_CONFIG_FILE_EVENT_MAP,xD as HOOKS_CONFIG_DIRECTORY_NAME,W9 as GlobalSettingsSchema,UB as GcpSettingsSchema,Lq as FileTeamPersistenceStore,Y5 as FeatureFlagsService,PV0 as FeatureFlagDefaultValue,CV0 as FEATURE_FLAGS,BV as FALLBACK_CLINE_RECOMMENDED_MODELS,A0 as DefaultToolNames,MZ as DefaultRuntimeBuilder,zV as DefaultLlmsSdk,WB as DEFAULT_MODELS_CATALOG_URL,iX as DEFAULT_MCP_CONNECT_TIMEOUT_MS,vk as DEFAULT_HUB_PORT,gk as DEFAULT_HUB_PATHNAME,hk as DEFAULT_HUB_HOST,g6 as CoreSettingsService,r$ as CoreSessionService,NV0 as ContributionRegistry,DO as ConnectorSupervisor,D2 as CommandExitError,QV0 as ClinePassLimitError,ZV0 as ClineOrgIndividualInferenceSubscriptionError,$V0 as ClineNotSubscribedError,eY0 as ClineFreeModelLimitError,bj as ClineCore,TQ as ClineAccountService,Ia as ChatViewStateSchema,qq as ChatSummarySchema,_q as ChatSessionStatusSchema,Dq as ChatSessionConfigSchema,Nq as ChatMessageSchema,zq as ChatMessageRoleSchema,Oq as ChatMessageImageSchema,l as CORE_TELEMETRY_EVENTS,ha as CORE_BUILD_VERSION,fY as BrowserWebSocketHubAdapter,CT as BUILT_IN_PROVIDER_IDS,F3 as BUILT_IN_PROVIDER,FB as AzureSettingsSchema,HB as AwsSettingsSchema,KB as AuthSettingsSchema,c4 as AgentTeamsRuntime,zW as AgentTeam,QK0 as Agent,$Y as AgendaTaskSpecFileStore,pZ as AgendaTaskRevisionConflictError,jY as AgendaTaskManager,L6 as ALL_DEFAULT_TOOL_NAMES,GY as ADOPTED_POLL_INTERVAL_MS};
1028
+ `)}}async function oi($,Z={}){if($.type==="mcp"){let Q=tY($);if(Z.deleteMcpServer)await Z.deleteMcpServer(Q);else IN($,Z);return{id:$.id,type:$.type,status:"uninstalled",message:`Uninstalled ${$.name??Q??$.id}.`}}if($.type==="skill")return vN($,Z);if($.type==="plugin")return gN($,Z);throw Error(`Unsupported marketplace entry type: ${$.type}`)}import{spawn as si}from"node:child_process";import{createHash as ti}from"node:crypto";import{existsSync as p1,mkdirSync as JV,readdirSync as ei,readFileSync as $r,renameSync as YQ,rmSync as KQ,statSync as WV}from"node:fs";import{cp as XV,mkdir as rN,writeFile as GQ}from"node:fs/promises";import{homedir as mN}from"node:os";import{basename as D$,dirname as cN,extname as Zr,join as X0,relative as aN,resolve as X2,sep as Qr}from"node:path";import{isPluginModulePath as BQ,resolveClineDir as Xr,resolvePluginModuleEntries as Jr}from"@cline/shared/storage";var D8="_installed",HQ="package",Wr="https://github.com/cline/plugins.git",uN=30000,VQ=10485760,dN="@cline/",jr=["dependencies","devDependencies","optionalDependencies","peerDependencies"],Yr={name:"cline-installed-plugin",private:!0,cline:{plugins:[]}};function UQ($){if($==="~")return mN();if($.startsWith("~/"))return X0(mN(),$.slice(2));return $}function nN($){return $.split(Qr).join("/")}function s2($){return ti("sha256").update($).digest("hex").slice(0,12)}function Vr($){let Z=0;while(Z<$.length&&$[Z]==="-")Z++;let Q=$.length;while(Q>Z&&$[Q-1]==="-")Q--;return $.slice(Z,Q)}function L$($){let Z="",Q=!1,X=$.startsWith("@")?$.slice(1):$;for(let W of X.slice(0,256)){if(W>="a"&&W<="z"||W>="A"&&W<="Z"||W>="0"&&W<="9"||W==="."||W==="_"||W==="-")Z+=W,Q=W==="-";else if(!Q)Z+="-",Q=!0;if(Z.length>=80)break}return Vr(Z)||"plugin"}function oN($){return/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test($.trim())}function Br($){return $?.trim()||Wr}function lN($){let Q=$.trim().match(/^(@?[^@/]+(?:\/[^@/]+)?)(?:@.+)?$/);if(!Q?.[1])throw Error(`Invalid npm plugin source: npm:${$}`);return{name:Q[1]}}function Kr($){if($.startsWith(".")||$.startsWith("/")||$==="~"||$.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test($))return!1;let[Z,...Q]=$.split("/");return!!Z&&Q.length>=2&&Z.includes(".")&&!Z.startsWith(".")&&!Z.endsWith(".")}function Gr($){let Z=$.match(/^git@([^:]+):(.+)$/);if(Z){let j=Z[2]??"",Y=j.indexOf("@");if(Y<0)return{repo:$};return{repo:`git@${Z[1]}:${j.slice(0,Y)}`,ref:j.slice(Y+1)||void 0}}if($.includes("://"))try{let j=new URL($),Y=j.pathname.replace(/^\/+/,""),V=Y.indexOf("@");if(V<0)return{repo:$};return j.pathname=`/${Y.slice(0,V)}`,{repo:j.toString().replace(/\/$/,""),ref:Y.slice(V+1)||void 0}}catch{return{repo:$}}let Q=$.indexOf("/");if(Q<0)return{repo:$};let X=$.slice(0,Q),J=$.slice(Q+1),W=J.indexOf("@");if(W<0)return{repo:$};return{repo:`${X}/${J.slice(0,W)}`,ref:J.slice(W+1)||void 0}}function Hr($){try{return decodeURIComponent($)}catch{return $}}function Ur($){return D$(Hr($))||"plugin"}function Fr($){let Z=$.split("/").filter(Boolean);return Z.length>=5&&(Z[2]==="blob"||Z[2]==="raw")}function pN($){if(!/^https?:\/\//i.test($))return null;let Z;try{Z=new URL($)}catch{return null}let Q=Z.hostname.toLowerCase(),X=Ur(Z.pathname),J=BQ(X),W=(Q==="github.com"||Q==="www.github.com")&&Fr(Z.pathname);if(Z.protocol!=="https:"){if(W||Q==="raw.githubusercontent.com"||J)throw Error(`Remote plugin file URLs must use https: ${$}`);return null}if(Q==="github.com"||Q==="www.github.com"){let j=Z.pathname.split("/").filter(Boolean);if(!W)return null;if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:`https://raw.githubusercontent.com/${[j[0],j[1],...j.slice(3)].join("/")}`,filename:X}}if(Q==="raw.githubusercontent.com"){if(!J)throw Error(`Remote plugin file must be .js or .ts: ${$}`);return{type:"remote",url:Z.toString(),filename:X}}if(!J)return null;return{type:"remote",url:Z.toString(),filename:X}}function iN($,Z={}){let Q=$.trim(),X=Q.startsWith("git:")&&!Q.startsWith("git://"),J=X?Q.slice(4).trim():Q;if(!Z.force&&!X&&!/^(https?|ssh|git):\/\//i.test(J))return null;let{repo:W,ref:j}=Gr(J),Y="",V="";if(W.startsWith("git@")){let G=W.match(/^git@([^:]+):(.+)$/);Y=G?.[1]??"",V=G?.[2]??""}else if(/^(https?|ssh|git):\/\//i.test(W)){let G=new URL(W);Y=G.hostname,V=G.pathname.replace(/^\/+/,"")}else{let G=W.indexOf("/");if(G<0)return null;Y=W.slice(0,G),V=W.slice(G+1)}let B=V.replace(/\.git$/,"").replace(/^\/+/,"");if(!Y||!B||B.split("/").length<2)return null;return{type:"git",repo:W.startsWith("git@")||/^(https?|ssh|git):\/\//i.test(W)?W:`https://${W}`,ref:j,host:Y,path:B}}function sN($,Z){let Q=$.trim();if(!Q)throw Error("plugin install requires a source");if(Z==="npm"){let j=Q.startsWith("npm:")?Q.slice(4).trim():Q,{name:Y}=lN(j);return{type:"npm",spec:j,name:Y}}if(Z==="git"){let j=iN(Q,{force:!0});if(!j)throw Error(`Invalid git plugin source: ${$}`);return j}if(Z==="local")return{type:"local",path:$};if(Z==="remote"){let j=pN(Q);if(!j)throw Error(`Invalid remote plugin source: ${$}`);return j}if(Q.startsWith("npm:")){let j=Q.slice(4).trim(),{name:Y}=lN(j);return{type:"npm",spec:j,name:Y}}if(Q.startsWith(".")||Q.startsWith("/")||Q==="~"||Q.startsWith("~/")||/^[A-Za-z]:[\\/]|^\\\\/.test(Q))return{type:"local",path:$};let J=pN(Q);if(J)return J;let W=iN(Q);if(W)return W;if(oN(Q))return{type:"official",slug:Q};if(Kr(Q))throw Error(`Unrecognized plugin source "${$}". Use --git for hostname-style repositories or pass an explicit local path such as ./github.com/owner/repo.`);return{type:"local",path:$}}function Lr($){return $?X0($,".cline","plugins"):X0(Xr(),"plugins")}function Dr($,Z,Q){if(Z.type==="npm")return X0($,D8,"npm",`${L$(Z.name)}-${s2(Q)}`);if(Z.type==="git")return X0($,D8,"git",L$(Z.host),`${L$(Z.path)}-${s2(Q)}`);if(Z.type==="remote")return X0($,D8,"remote",`${L$(Z.filename)}-${s2(Q)}`);if(Z.type==="official")return X0($,D8,"official",`${L$(Z.slug)}-${s2(Q)}`);return X0($,D8,"local",`${L$(D$(UQ(Z.path)))}-${s2(Q)}`)}function _r($,Z,Q){if($.type==="npm")return`npm:${$.spec}`;if($.type==="git")return`git:${$.repo}${$.ref?`#${$.ref}`:""}`;if($.type==="remote")return`remote:${$.url}`;if($.type==="official")return`official:${Q}#plugins/${$.slug}`;return`local:${X2(Z,UQ($.path))}`}function zr($,Z){if($.type==="npm")return $.name;if($.type==="git")return L$(D$($.path));if($.type==="remote")return L$(D$($.filename,Zr($.filename)));if($.type==="official")return $.slug;return L$(D$(X2(Z,UQ($.path))))}async function _8($,Z,Q={}){await new Promise((X,J)=>{let W=si($,Z,{cwd:Q.cwd,stdio:["ignore","ignore","pipe"],env:process.env,windowsHide:!0}),j="";W.stderr.on("data",(Y)=>{j+=String(Y)}),W.on("error",J),W.on("close",(Y)=>{if(Y===0){X();return}let V=j.trim();J(Error(`${$} ${Z.join(" ")} failed with exit code ${Y}${V?`: ${V}`:""}`))})})}function tN($){let Z=X0($,"package.json");if(!p1(Z))return null;try{return JSON.parse($r(Z,"utf8"))}catch{return null}}function Or($){let Z=$?.cline?.plugins;if(!Array.isArray(Z))return[];return Z.flatMap((Q)=>{if(typeof Q==="string")return[Q];return Q.paths??[]})}async function Nr($){let Z=X0($,"package.json"),Q=tN($);if(!Q)return;let X=!1;for(let J of jr){let W=Q[J];if(!W||typeof W!=="object")continue;for(let j of Object.keys(W)){if(!j.startsWith(dN))continue;delete W[j],delete Q.peerDependenciesMeta?.[j],X=!0}if(Object.keys(W).length===0)delete Q[J]}if(Q.peerDependenciesMeta){for(let J of Object.keys(Q.peerDependenciesMeta)){if(!J.startsWith(dN))continue;delete Q.peerDependenciesMeta[J],X=!0}if(Object.keys(Q.peerDependenciesMeta).length===0)delete Q.peerDependenciesMeta}if(!X)return;await GQ(Z,`${JSON.stringify(Q,null,2)}
1029
+ `,"utf8")}function qr($,Z){let Q=X0($,"node_modules","@cline");if(!p1(Q))return;for(let X of $q(Q)){if(`@cline/${X.name}`===Z)continue;KQ(X0(Q,X.name),{recursive:!0,force:!0})}}function eN($){let Z=Or(tN($)).map((W)=>X2($,W)).filter((W)=>p1(W)&&WV(W).isFile()&&BQ(W));if(Z.length>0)return Z;let Q=Jr($);if(Q?.length)return Q;let X=[],J=[$];while(J.length>0){let W=J.pop();if(!W)continue;for(let j of $q(W)){let Y=X0(W,j.name);if(j.name==="node_modules"||j.name===".git")continue;if(j.isDirectory()){J.push(Y);continue}if(j.isFile()&&!j.name.startsWith(".")&&BQ(Y))X.push(Y)}}return X.sort((W,j)=>W.localeCompare(j))}function $q($){try{return ei($,{withFileTypes:!0})}catch{return[]}}function Ar($,Z){let Q=eN(Z);if(Q.length===0)throw Error(`No plugin entry files found in ${Z}`);return Q.map((X)=>`./${nN(aN($,X))}`)}async function Tr($,Z,Q){let X=Ar($,Z);return await GQ(X0($,"package.json"),JSON.stringify({...Yr,name:Q,cline:{plugins:[{paths:X}]}},null,2),"utf8"),X}async function Er($,Z,Q){let X=X0(Z,HQ);return await rN(X,{recursive:!0}),await GQ(X0(X,"package.json"),JSON.stringify({name:"cline-plugin-install",private:!0},null,2),"utf8"),await _8(Q,["install",$.spec,"--prefix",X,"--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"]),qr(X,$.name),X0(X,"node_modules",$.name)}async function jV($,Z){if(!p1(X0($,"package.json")))return;await Nr($),await _8(Z,["install","--omit=dev","--omit=peer","--legacy-peer-deps","--no-audit","--no-fund","--package-lock=false"],{cwd:$})}async function Mr($,Z,Q){if($.ref?.startsWith("-"))throw Error(`Invalid git ref "${$.ref}".`);let X=X0(Z,HQ),J=["clone","--filter=blob:none"];if($.ref)J.push("--branch",$.ref);J.push("--",$.repo,X);try{await _8("git",J)}catch(W){if(!$.ref)throw W;await _8("git",["clone","--filter=blob:none","--",$.repo,X]),await _8("git",["checkout","--detach",$.ref],{cwd:X})}return await jV(X,Q),X}async function Rr($,Z,Q,X){let J=X0(Z,"repo");await _8("git",["clone","--filter=blob:none","--depth","1","--",X,J]);let W=X0(J,"plugins",$.slug);if(!p1(W)||!WV(W).isDirectory())throw Error(`Official Cline plugin "${$.slug}" was not found at plugins/${$.slug} in ${X}`);let j=X0(Z,HQ);return await XV(W,j,{recursive:!0,filter:(Y)=>{let V=D$(Y);return V!==".git"&&V!=="node_modules"}}),KQ(J,{recursive:!0,force:!0}),await jV(j,Q),j}function QV($){return Error(`Remote plugin file from ${$} exceeds the ${VQ} byte limit`)}function Cr($){let Z=$.headers.get("content-length");if(!Z)return;let Q=Number(Z);if(!Number.isFinite(Q)||Q<0)return;return Q}async function Pr($,Z){let Q=Cr($);if(Q!==void 0&&Q>VQ)throw QV(Z);if(!$.body){let j=Buffer.from(await $.text(),"utf8");if(j.byteLength>VQ)throw QV(Z);return j}let X=$.body.getReader(),J=[],W=0;try{while(!0){let{done:j,value:Y}=await X.read();if(j)break;let V=Buffer.from(Y);if(W+=V.byteLength,W>VQ)throw await X.cancel().catch(()=>{return}),QV(Z);J.push(V)}return Buffer.concat(J,W)}finally{X.releaseLock()}}async function fr($,Z){let Q=new AbortController,X=setTimeout(()=>{Q.abort()},uN);try{let J=await fetch($.url,{signal:Q.signal});if(!J.ok){let j=J.statusText?` ${J.statusText}`:"";throw Error(`Failed to download plugin file from ${$.url}: ${J.status}${j}`)}let W=await Pr(J,$.url);return JV(Z,{recursive:!0}),await GQ(X0(Z,$.filename),W),Z}catch(J){if(J instanceof Error&&J.name==="AbortError")throw Error(`Timed out downloading plugin file from ${$.url} after ${uN}ms`);throw J}finally{clearTimeout(X)}}async function wr($,Z,Q,X){let J=X2(Q,UQ($.path));if(!p1(J))throw Error(`Plugin source path does not exist: ${J}`);let W=WV(J);if(W.isFile()){if(!BQ(J))throw Error(`Plugin file must be .js or .ts: ${J}`);JV(Z,{recursive:!0});let Y=X0(Z,D$(J));return await XV(J,Y),Z}if(!W.isDirectory())throw Error(`Plugin source must be a file or directory: ${J}`);let j=X0(Z,HQ);return await XV(J,j,{recursive:!0,filter:(Y)=>{let V=D$(Y);return V!==".git"&&V!=="node_modules"}}),await jV(j,X),j}function Sr($,Z){if(p1($)&&!Z)throw Error(`Plugin is already installed at ${$}. Use --force to replace it.`)}function br($,Z,Q){if(JV(cN(Z),{recursive:!0}),!p1(Z)){YQ($,Z);return}if(!Q)throw Error(`Plugin is already installed at ${Z}. Use --force to replace it.`);let X=X0(cN(Z),`.replace-${D$(Z)}-${Date.now()}-${process.pid}-${s2(`${Z}:${Math.random()}`)}`);YQ(Z,X);try{YQ($,Z)}catch(J){if(!p1(Z)&&p1(X))YQ(X,Z);throw J}try{KQ(X,{recursive:!0,force:!0})}catch{}}function kr($){let Z=$.transport;if(Z.type==="stdio")return!1;return Z.headers!==void 0&&Object.keys(Z.headers).length>0}function xr($){let Z=$.oauth?.tokens?.access_token;return typeof Z==="string"&&Z.trim().length>0}function yr($){let Z=$.metadata;if(!Z||Z.source!=="plugin"||typeof Z.pluginName!=="string"||typeof Z.pluginPath!=="string")return;return{pluginName:Z.pluginName,pluginPath:Z.pluginPath}}function Zq($){let Z=new Set($.pluginPaths.map((J)=>X2(J)));if(Z.size===0)return[];let Q;try{Q=y1({filePath:$.settingsPath??V0()})}catch{return[]}let X=[];for(let J of Q){let W=yr(J);if(!W||!Z.has(X2(W.pluginPath)))continue;let j=J.transport.type;if(j==="stdio")continue;if(kr(J)||xr(J))continue;X.push({name:J.name,pluginName:W.pluginName,pluginPath:W.pluginPath,transportType:j,lastError:J.oauth?.lastError})}return X.sort((J,W)=>J.name.localeCompare(W.name))}async function Ir($){let Z=$.source.trim(),Q=sN(Z,$.sourceType),X=$.cwd?.trim(),J=X?X2(X):process.cwd(),W=Lr(X?J:void 0),j=Br($.officialPluginsRepo),Y=_r(Q,J,j),V=Dr(W,Q,Y),B=zr(Q,J),K=X0(W,D8,".tmp"),G=X0(K,`${Date.now()}-${process.pid}-${s2(`${Z}:${Math.random()}`)}`),H=$.npmCommand??(process.env.CLINE_NPM_COMMAND?.trim()||"npm"),U=$.force===!0;Sr(V,U),await rN(K,{recursive:!0});let F;try{if(Q.type==="npm")F=await Er(Q,G,H);else if(Q.type==="git")F=await Mr(Q,G,H);else if(Q.type==="official")F=await Rr(Q,G,H,j);else if(Q.type==="remote")F=await fr(Q,G);else F=await wr(Q,G,J,H);let L=(Q.type==="local"||Q.type==="remote")&&F===G?eN(G).map((_)=>`./${nN(aN(G,_))}`):await Tr(G,F,B);if(L.length===0)throw Error(`No plugin entry files found for ${Z}`);br(G,V,U);let D={source:Z,installPath:V,entryPaths:L.map((_)=>X2(V,_)),mcpSyncFailures:[],mcpOAuthCandidates:[]},z=await mY({pluginPaths:D.entryPaths,cwd:J,workspacePath:J});return D.mcpSyncFailures=z.failures,D.mcpOAuthCandidates=Zq({pluginPaths:D.entryPaths}),D}catch(L){throw KQ(G,{recursive:!0,force:!0}),L}}import*as R0 from"@cline/llms";import{VERCEL_OPENROUTER_MODEL_ID_ALIAS_RULES as hr}from"@cline/llms";import{getClineEnvironmentConfig as vr}from"@cline/shared";var gr=5000,BV={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}],clinePass:[]};function LQ($){return{recommended:$.recommended.map((Z)=>({...Z,tags:[...Z.tags]})),free:$.free.map((Z)=>({...Z,tags:[...Z.tags]})),clinePass:$.clinePass.map((Z)=>({...Z,tags:[...Z.tags]}))}}function YV($){if(!$||typeof $!=="object")return null;let Z=$;if(typeof Z.id!=="string"||Z.id.length===0)return null;return{id:Z.id,name:typeof Z.name==="string"&&Z.name.length>0?Z.name:Z.id,description:typeof Z.description==="string"?Z.description:"",tags:Array.isArray(Z.tags)?Z.tags.filter((Q)=>typeof Q==="string"):[]}}function mr($){if(!$||typeof $!=="object")return null;let Z=$,Q=Array.isArray(Z.recommended)?Z.recommended:[],X=Array.isArray(Z.free)?Z.free:[],J=Array.isArray(Z.clinePass)?Z.clinePass:[],W=Q.map(YV).filter((V)=>V!==null),j=X.map(YV).filter((V)=>V!==null),Y=J.map(YV).filter((V)=>V!==null);if(W.length===0&&j.length===0&&Y.length===0)return null;return{recommended:W,free:j,clinePass:Y}}function cr($){let Z=$.baseUrl?.trim();if(Z)return Z;let Q=vr().apiBaseUrl;try{return($.providerSettingsManager??new o$).getProviderSettings("cline")?.baseUrl?.trim()||Q}catch{return Q}}async function ur($,Z,Q){let X=new AbortController,J=setTimeout(()=>X.abort(),Q);try{return await $(Z,{signal:X.signal})}finally{clearTimeout(J)}}function VV($){return $.replace(/\s*\(free\)\s*$/i,"").replace(/:free$/i,"").trim()}function Xq($){let Z=[$];for(let Q of hr)if($.startsWith(Q.canonicalPrefix))Z.push(`${Q.aliasPrefix}${$.slice(Q.canonicalPrefix.length)}`);else if($.startsWith(Q.aliasPrefix))Z.push(`${Q.canonicalPrefix}${$.slice(Q.aliasPrefix.length)}`);return Z}function dr($,Z){for(let J of Z)for(let W of Xq($.id)){let j=J?.[W]?.name?.trim();if(j)return VV(j)}let Q=$.name?.trim();if(Q&&Q!==$.id)return VV(Q);let X=$.id.split("/").at(-1)??$.id;return VV(X)}async function lr($,Z){let Q;try{return await Promise.race([$(),new Promise((X)=>{Q=setTimeout(()=>X(void 0),Z)})])}catch{return}finally{clearTimeout(Q)}}async function pr($,Z,Q){let X=await lr(Z,Q),J=(W,j)=>W.map((Y)=>({...Y,name:dr(Y,j)}));return{recommended:J($.recommended,[X?.openrouter]),free:J($.free,[X?.cline,X?.openrouter]),clinePass:J($.clinePass,[X?.["cline-pass"]])}}async function Jq($={}){let Z=$.timeoutMs??gr,Q=Date.now()+Z;try{let X=cr($),J=$.fetchImpl??fetch,W=await ur(J,`${X}/api/v1/ai/cline/recommended-models`,Z);if(!W.ok)throw Error(`HTTP ${W.status}`);let j=await W.json(),Y=mr(j);if(Y)return await pr(Y,$.catalogLoader??J6,Math.max(0,Q-Date.now()))}catch{}return LQ(BV)}var ir=300000,J2=null,b5=null,FQ=0;async function KV($={}){if(J2&&J2.expiresAt>Date.now())return LQ(J2.data);if(b5)return b5;let Z=FQ,Q=Jq($).then((X)=>{if(Z===FQ)J2={data:X,expiresAt:Date.now()+ir};return X}).finally(()=>{if(Z===FQ)b5=null});return b5=Q,Q}function GV(){if(J2&&J2.expiresAt>Date.now())return LQ(J2.data);return LQ(BV)}function rr(){FQ+=1,J2=null,b5=null}var ar={cline:[{tier:"recommended",select:($)=>$.recommended},{tier:"free",select:($)=>$.free}],"cline-pass":[{tier:"subscribed",select:($)=>$.clinePass},{tier:"free",select:($)=>$.free}]};function Qq($){return $.split("/").at(-1)??$}function DQ($,Z,Q){let X=ar[$];if(!X)return Z;let J=new Map,W=new Map;for(let B of X)B.select(Q).forEach((K,G)=>{let H={entry:K,tier:B.tier,rank:G};for(let L of Xq(K.id))if(!J.has(L))J.set(L,H);let U=Qq(K.id),F=W.get(U);if(F===void 0)W.set(U,H);else if(F!==null&&F.entry.id!==K.id)W.set(U,null)});if(J.size===0)return Z;let j=new Set;for(let B of Z){let K=J.get(B.id);if(K)j.add(K.entry.id)}let Y=new Set,V=(B)=>{let K=J.get(B.id);if(K)return K;let G=W.get(Qq(B.id));if(!G||j.has(G.entry.id)||Y.has(G.entry.id))return;return Y.add(G.entry.id),G};return Z.map((B)=>{let K=V(B);if(!K)return B;return{...B,description:K.entry.description.trim()||B.description,featured:{tier:K.tier,rank:K.rank,tags:[...K.entry.tags]}}})}var nr="cline",FV="cline-pass";function or($){return $.apiKey??$.auth?.apiKey}function sr($){return($.auth?.accessToken?.trim()??"").length>0}function jq($){return $.split(/[-_]/).filter(Boolean).map((Z)=>Z.charAt(0).toUpperCase()+Z.slice(1)).join(" ")}function tr($){let Z=$.split(/\s+/).filter(Boolean);if(Z.length===0)return"?";if(Z.length===1)return Z[0].slice(0,2).toUpperCase();return`${Z[0][0]}${Z[1][0]}`.toUpperCase()}function er($){let Z=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],Q=0;for(let X of $)Q=Q*31+X.charCodeAt(0)>>>0;return Z[Q%Z.length]}function k5($){return $.operation==="transcription"}function Yq($){return Object.entries($).sort(([Z],[Q])=>Z.localeCompare(Q)).map(([Z,Q])=>j_(Z,Q))}async function $a($,Z){let Q=await R0.getModelsForProvider($),X=$===FV;if(!Z&&!X)return Q;let J=await U3($,{loadLatestOnInit:X,loadPrivateOnAuth:!0,failOnError:!1},Z);if($==="litellm"&&J?.knownModels)return J.knownModels;if(X&&J?.knownModels)return J.knownModels;return J?.knownModels?{...Q,...J.knownModels}:Q}function HV($){return[...new Set(($??[]).map((Z)=>Z.trim()).filter(Boolean))]}function Za($){if(!$?.length)return;return[...new Set($)]}function Qa($,Z){return Za([...$??[],...Z??[]])}function Xa($){let Z=$?.popularRank;return typeof Z==="number"&&Number.isFinite(Z)?Z:Number.MAX_SAFE_INTEGER}function Ja($){if(!$||typeof $!=="object")return!1;let Z=$;return typeof Z.path==="string"&&Z.path.trim().length>0&&typeof Z.label==="string"&&Z.label.trim().length>0&&["text","password","url","number","select","boolean"].includes(String(Z.type))}function Wa($){let Z=$?.configFields;if(!Array.isArray(Z))return;return Z.filter(Ja)}var _Q={path:"apiKey",label:"API Key",type:"password",placeholder:"Enter API key...",description:"API key issued by the provider.",secret:!0},Wq={path:"baseUrl",label:"Base URL",type:"url",placeholder:"https://...",description:"Base endpoint used for provider requests."};function ja($){if(!$)return[_Q];if($.source!=="system")return $.baseUrl?[_Q,Wq]:[_Q];let Z=[];if($.env?.length)Z.push(_Q);if($.baseUrl)Z.push(Wq);return Z}function Ya($,Z){return Z.split(".").reduce((Q,X)=>{if(!Q||typeof Q!=="object")return;return Q[X]},$)}function Va($){if(typeof $==="string"||typeof $==="number"||typeof $==="boolean"||$===null)return $;return}function Ba($,Z,Q){if(!$?.length)return;let X={};for(let J of $){let j=Va(J.path==="baseUrl"&&Z?.baseUrl===void 0?Q?.baseUrl:Ya(Z,J.path))??J.defaultValue;if(j!==void 0)X[J.path]=j}return X}function Vq($){let Z=Object.entries($??{}).filter(([Q])=>Q.trim().length>0);return Z.length>0?Object.fromEntries(Z):void 0}function UV($,Z){let Q=Z?.includes("vision")??!1,X=Z?.includes("reasoning")??!1;return Object.fromEntries($.map((J)=>[J,{id:J,name:J,supportsVision:Q,supportsAttachments:Q,supportsReasoning:X}]))}async function Bq($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let Z=$.modelsSourceUrl?await r5($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...Z])]}function Kq($,Z){let Q=$.read(),X=!1;if(Q.providers[Z])delete Q.providers[Z],X=!0;if(Q.lastUsedProvider===Z)delete Q.lastUsedProvider,X=!0;if(Q.modes.voiceInput?.providerId===Z)delete Q.modes.voiceInput,X=!0;if(X)$.write(Q);R0.unregisterProvider(Z)}async function Ka($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let X=Z.baseUrl.trim(),J=Z.apiKey?.trim()??"";if(!X&&!J){let F=n$($);if((await $8(F)).providers[Q]){let D=await Hq($,{providerId:Q});return{providerId:Q,settingsPath:D.settingsPath,modelsPath:D.modelsPath,modelsCount:0}}return Kq($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:F,modelsCount:0}}if(R0.hasProvider(Q))throw Error(`provider "${Q}" already exists`);let W=Z.name.trim();if(!W)throw Error("name is required");if(!X)throw Error("baseUrl is required");let j=HV(Z.models),Y=Z.modelsSourceUrl?.trim(),V=await Bq({providerId:Q,explicitModels:j,modelsSourceUrl:Y,shouldRecompute:!0});if(V.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let B=Z.defaultModelId?.trim()&&V.includes(Z.defaultModelId.trim())?Z.defaultModelId.trim():V[0],K=Z.capabilities?.length?[...new Set(Z.capabilities)]:void 0,G=Vq(Z.headers);$.saveProviderSettings({provider:Q,apiKey:J||void 0,baseUrl:X,headers:G,timeout:Z.timeoutMs,model:B,protocol:Z.protocol,client:Z.client},{setLastUsed:!1});let H=n$($),U=await $8(H);return U.providers[Q]={provider:{name:W,baseUrl:X,defaultModelId:B,protocol:Z.protocol,client:Z.client,capabilities:K,modelsSourceUrl:Y},models:UV(V,K)},await _Z(H,U),Z8(Q,U.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:H,modelsCount:V.length}}async function Gq($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let X=n$($),J=await $8(X),W=J.providers[Q];if(!W){let A=$.getProviderSettings(Q),N=R0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider;if(!A)throw Error(`provider "${Q}" does not exist`);let T=Z.modelsSourceUrl?.trim(),M=HV(Z.models)[0]??A.model?.trim();if(!M&&!T)throw Error(`provider "${Q}" cannot be updated because no model is configured`);W={provider:{name:Z.name?.trim()||N?.name||jq(Q),baseUrl:Z.baseUrl?.trim()??A.baseUrl?.trim()??N?.baseUrl?.trim()??"",defaultModelId:M??N?.defaultModelId,protocol:A.protocol??N?.protocol,client:A.client??N?.client,capabilities:A.capabilities??N?.capabilities,modelsSourceUrl:N?.modelsSourceUrl},models:M?UV([M],A.capabilities):{}}}if(!W.provider)throw Error(`provider "${Q}" cannot be updated because it is a model overlay (no provider metadata)`);let j=Z.name?.trim()??W.provider.name.trim();if(!j)throw Error("name is required");let Y=Z.baseUrl?.trim()??W.provider.baseUrl.trim();if(!Y)throw Error("baseUrl is required");let V=Z.capabilities===void 0?W.provider.capabilities:Z.capabilities===null?void 0:[...new Set(Z.capabilities)],B=Z.protocol===void 0?W.provider.protocol:Z.protocol??void 0,K=Z.client===void 0?W.provider.client:Z.client??void 0,G=HV(Z.models),H=Z.modelsSourceUrl===void 0?W.provider.modelsSourceUrl:Z.modelsSourceUrl?.trim()||void 0,U=Z.models!==void 0||Z.modelsSourceUrl!==void 0&&!!H,F=Object.keys(W.models??{}).map((A)=>A.trim()).filter(Boolean),L=await Bq({providerId:Q,explicitModels:G,modelsSourceUrl:H,fallbackModelIds:F,shouldRecompute:U});if(L.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let D=Z.defaultModelId===void 0?W.provider.defaultModelId?.trim():Z.defaultModelId?.trim(),z=D&&L.includes(D)?D:L[0],O={...$.getProviderSettings(Q)??{},provider:Q,baseUrl:Y,model:z};if(B)O.protocol=B;else delete O.protocol;if(K)O.client=K;else delete O.client;if(Z.apiKey!==void 0){let A=Z.apiKey?.trim()??"";if(A)O.apiKey=A;else delete O.apiKey}if(Z.headers!==void 0){let A=Vq(Z.headers);if(A)O.headers=A;else delete O.headers}if(Z.timeoutMs!==void 0)if(typeof Z.timeoutMs==="number")O.timeout=Z.timeoutMs;else delete O.timeout;return $.saveProviderSettings(O,{setLastUsed:!1}),J.providers[Q]={provider:{name:j,baseUrl:Y,defaultModelId:z,protocol:B,client:K,capabilities:V,modelsSourceUrl:H},models:UV(L,V)},await _Z(X,J),Z8(Q,J.providers[Q]),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:X,modelsCount:L.length}}async function Hq($,Z){let Q=Z.providerId.trim().toLowerCase();if(!Q)throw Error("providerId is required");let X=n$($),J=await $8(X);if(!J.providers[Q])throw Error(`provider "${Q}" does not exist`);return delete J.providers[Q],await _Z(X,J),R0.unregisterProvider(Q),Kq($,Q),{providerId:Q,settingsPath:$.getFilePath(),modelsPath:X}}function Ga($,Z,Q={}){let X=Z.trim();if(!X)throw Error("providerId is required");let J=$.read().providers[X]?.settings;return $.saveProviderSettings({...J??{},provider:X},{setLastUsed:!1,tokenSource:Q.tokenSource}),{providerId:X,enabled:!0,settingsPath:$.getFilePath()}}async function Ha($,Z={}){let Q=$.read(),X=R0.getProviderIds(),J=GV(),W=await Promise.all(X.map(async(G)=>{let[H,U]=await Promise.all([R0.getProvider(G),R0.getModelsForProvider(G)]),F=DQ(G,Yq(U),J),L=Q.providers[G]?.settings,D=$.getProviderSettings(G),z=H?.name??jq(G),_=Qa(H?.capabilities,D?.capabilities),O=Wa(H?.metadata)??ja(H);return{provider:{id:G,name:z,models:F.length,color:er(G),letter:tr(z),enabled:Boolean(L),apiKey:D?or(D):void 0,oauthAccessTokenPresent:D?sr(D):void 0,baseUrl:D?.baseUrl??H?.baseUrl,defaultModelId:H?.defaultModelId,protocol:D?.protocol??H?.protocol,client:D?.client??H?.client,capabilities:_,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",configFields:O,configValues:Ba(O,D,H),modelList:F},rank:Xa(H?.metadata)}}));W.sort((G,H)=>{if(G.rank!==H.rank)return G.rank-H.rank;return G.provider.name.localeCompare(H.provider.name)||G.provider.id.localeCompare(H.provider.id)});let j=W.map((G)=>G.provider);if(Z.isClinePassEnabled!==!0)j=j.filter((G)=>G.id!==FV);let Y=$.getVoiceInputSettings(),B=(Y?j.find((G)=>G.id===Y.providerId&&G.enabled):void 0)?.modelList?.find((G)=>G.id===Y?.modelId&&k5(G)),K=Y&&B?Y:void 0;return{providers:j,settingsPath:$.getFilePath(),voiceInput:K}}async function OQ($,Z){let Q=$.trim(),X=await $a(Q,Z),J=Yq(X);if(Q===nr||Q===FV)J=DQ(Q,J,await KV());return{providerId:Q,models:J}}async function Uq($,Z){let Q=Z.providerId.trim(),X=Z.modelId.trim(),J=$.getProviderConfig(Q,{includeKnownModels:!1});if(!J)throw Error(`Transcription provider "${Q}" is not configured in providers.json`);let{models:W}=await OQ(Q,J),j=W.find((Y)=>Y.id===X);if(!j||!k5(j))throw Error(`Model "${X}" is not a dedicated audio-to-text transcription model`);if(j.operationModes?.includes("streaming"))throw Error(`Model "${X}" requires streaming transcription and cannot transcribe a completed recording`);return R0.transcribeAudio({providerConfig:J,modelId:X,audio:Z.audio,mediaType:Z.mediaType,abortSignal:Z.abortSignal})}async function Ua($,Z){if(!Z)return $.setVoiceInputSettings(void 0),{settingsPath:$.getFilePath()};let Q=Z.providerId.trim(),X=Z.modelId.trim();if(!Q||!X)throw Error("Voice input provider and model are required");if(!$.read().providers[Q])throw Error(`Voice input provider "${Q}" must be enabled and configured`);let W=$.getProviderConfig(Q,{includeKnownModels:!1}),{models:j}=await OQ(Q,W),Y=j.find((B)=>B.id===X);if(!Y||!k5(Y))throw Error(`Model "${X}" is not a dedicated audio-to-text transcription model`);let V={providerId:Q,modelId:X};return $.setVoiceInputSettings(V),{settingsPath:$.getFilePath(),voiceInput:V}}async function Fa($,Z){let Q=$.getVoiceInputSettings();if(!Q)throw Error("Configure a voice input provider and model in Settings");return Uq($,{...Q,audio:Z.audio,mediaType:Z.mediaType,abortSignal:Z.abortSignal})}async function La($,Z={}){let Q=$.getVoiceInputSettings();if(!Q)throw Error("Configure a voice input provider and model in Settings");let X=$.getProviderConfig(Q.providerId,{includeKnownModels:!1});if(!X)throw Error(`Transcription provider "${Q.providerId}" is not configured in providers.json`);let{models:J}=await OQ(Q.providerId,X),W=J.find((j)=>j.id===Q.modelId);if(!W||!k5(W)||!W.operationModes?.includes("streaming"))throw Error(`Model "${Q.modelId}" does not support streaming transcription`);return R0.createStreamingAudioTranscriptionSession({providerConfig:X,modelId:Q.modelId,expiresAfterSeconds:Z.expiresAfterSeconds,abortSignal:Z.abortSignal})}function zQ($){return $!=null&&typeof $==="object"&&!Array.isArray($)}function Fq($,Z){if(!zQ(Z))return zQ($)?{...$}:void 0;let Q=zQ($)?{...$}:{};for(let[X,J]of Object.entries(Z)){if(J==null||J===""){delete Q[X];continue}if(zQ(J)){let W=Fq(Q[X],J);if(W&&Object.keys(W).length>0)Q[X]=W;else delete Q[X];continue}Q[X]=J}return Object.keys(Q).length>0?Q:void 0}function Da($,Z){let Q=Z.providerId.trim();if(Z.enabled===!1){let W=$.read();if(delete W.providers[Q],W.lastUsedProvider===Q)delete W.lastUsedProvider;if(W.modes.voiceInput?.providerId===Q)delete W.modes.voiceInput;return $.write(W),{providerId:Q,enabled:!1,settingsPath:$.getFilePath()}}let J={...$.getProviderSettings(Q)??{},provider:Q};for(let W of["apiKey","baseUrl","model","region"])if(Object.hasOwn(Z,W)&&typeof Z[W]==="string")if(Z[W].trim().length===0)delete J[W];else J[W]=Z[W];for(let W of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(Z,W))J[W]=Z[W];for(let W of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(Z,W)&&Z[W]!=null){let j=Fq(J[W],Z[W]);if(j)J[W]=j;else delete J[W]}return $.saveProviderSettings(J,{setLastUsed:!1}),{providerId:Q,enabled:!0,settingsPath:$.getFilePath()}}async function _a($,Z){let Q=Z.trim(),X=$.getProviderSettings(Q),W=R0.MODEL_COLLECTIONS_BY_PROVIDER_ID[Q]?.provider,j=X?.baseUrl?.trim()||W?.baseUrl?.trim(),Y=a5(j,W?.baseUrl,W?.modelsSourceUrl);if(!X||!W||!j||!Y)return{providerId:Q,refreshed:!1};let V=await Gq($,{providerId:Q,name:W.name,baseUrl:j,apiKey:X.apiKey,headers:X.headers??null,timeoutMs:X.timeout??null,modelsSourceUrl:Y,protocol:X.protocol??W.protocol??null,client:X.client??W.client??null,capabilities:X.capabilities??null});return{providerId:Q,refreshed:!0,modelsCount:V.modelsCount}}function za($){let Z=$.trim().toLowerCase(),Q=b0(Z);if(Q)return Q.providerId;throw Error(`provider "${$}" does not support OAuth login`)}async function Oa($,Z,Q,X){let J=b0($);if(!J)throw Error(`provider "${$}" does not support OAuth login`);let W=y5({onPrompt:async(j)=>j.defaultValue??"",openUrl:Q,onOpenUrlError:({error:j})=>{throw j instanceof Error?j:Error(String(j))}});return J.login({settings:Z,callbacks:W,telemetry:X})}function Na($,Z,Q,X,J){return q8({manager:$,providerId:Z,settings:Q,credentials:X,setLastUsed:J?.setLastUsed})}async function qa($,Z,Q,X){let J=y5({onPrompt:async(W)=>W.defaultValue??"",openUrl:Q,onOpenUrlError:({error:W})=>{throw W instanceof Error?W:Error(String(W))}});return W3($,Z,{callbacks:J,telemetry:X})}function Aa($){let Z=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return Z&&Z.length>0?Z:void 0}import*as NQ from"@cline/llms";var Ta=["apiKey","baseUrl","azureApiVersion","awsRegion","awsProfile","gcpProjectId","gcpRegion","sapClientId","sapClientSecret","sapTokenUrl","sapResourceGroup","sapDeploymentId"],Ea={"openai-compatible":{description:"For Azure AI Foundry deployments, use a Base URL ending at /openai/deployments/<deployment> and set the Azure API version.",fields:{azureApiVersion:{label:"Azure API Version (optional)",placeholder:"2025-01-01-preview",note:"Required for Azure AI Foundry deployment URLs.",optional:!0}}},vertex:{mode:"replace",description:"Vertex AI can use Google Cloud Application Default Credentials with a project/region. An API key is optional for supported Gemini models.",fields:{gcpProjectId:{label:"Google Cloud Project ID",placeholder:"my-gcp-project"},gcpRegion:{label:"Google Cloud Region",placeholder:"us-central1",defaultValue:"us-central1"},apiKey:{label:"API Key (optional)",placeholder:"Leave blank to use Google Cloud credentials",optional:!0}}},bedrock:{mode:"replace",description:"AWS region is required for Bedrock. It can be auto-filled from AWS_REGION, AWS_DEFAULT_REGION, or ~/.aws/config.",fields:{awsRegion:{label:"AWS Region",placeholder:"us-east-1"},apiKey:{label:"AWS Bedrock API Key (optional)",placeholder:"Leave blank to use AWS profile/default chain",optional:!0},awsProfile:{label:"AWS Profile Name (optional)",placeholder:"default",optional:!0}}},ollama:{fields:{apiKey:{note:"Keep empty if no API key for local inference."}}},sapaicore:{mode:"replace",description:"SAP AI Core uses OAuth client credentials and an AI Core API URL, not a generic API key.",fields:{baseUrl:{label:"AI Core Base URL",placeholder:"https://api.ai.<region>.aws.ml.hana.ondemand.com"},sapClientId:{label:"Client ID",placeholder:"sb-...|xsuaa_std!b..."},sapClientSecret:{label:"Client Secret",placeholder:"SAP AI Core client secret"},sapTokenUrl:{label:"Token URL",placeholder:"https://<subdomain>.authentication.sap.hana.ondemand.com"},sapResourceGroup:{label:"Resource Group",placeholder:"default",optional:!0},sapDeploymentId:{label:"Deployment ID",placeholder:"SAP AI Core deployment id",optional:!0}}}};function Ma($,Z){let Q={};for(let X of Ta){let J=$[X],W=Z[X];if(J||W)Q[X]={...J,...W}}return Q}function Ra($){let Z=Ea[$.providerId];if(!Z)return $;return{...$,description:Z.description??$.description,fields:Z.mode==="replace"?Z.fields:Ma($.fields,Z.fields)}}var Ca=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function Pa($,Z){if(!Z?.provider.baseUrl)return!1;if(Z.provider.source!=="system")return!0;return Ca.has($)}function fa($){let Z=NQ.normalizeProviderId($);if(X6(Z))return{providerId:Z,authMethod:"oauth",fields:{}};let Q=NQ.MODEL_COLLECTIONS_BY_PROVIDER_ID[Z];if(Q?.provider.capabilities?.includes("local-auth"))return{providerId:Z,authMethod:"local",fields:{}};let X=Q?.provider.baseUrl,J={apiKey:{}};if(Pa(Z,Q))J.baseUrl={defaultValue:X};return Ra({providerId:Z,authMethod:"api-key",fields:J})}QQ();_0();gZ();import{appendFileSync as wa,existsSync as LV,mkdirSync as Sa,readFileSync as ba,renameSync as ka,unlinkSync as xa,writeFileSync as ya}from"node:fs";import{join as DV}from"node:path";import{resolveTeamDataDir as Ia}from"@cline/shared/storage";function ha($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class Lq{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let Z=ha($.teamName),Q=$.baseDir?.trim()||Ia();this.dirPath=DV(Q,Z),this.statePath=DV(this.dirPath,"state.json"),this.taskHistoryPath=DV(this.dirPath,"task-history.jsonl")}loadState(){if(!LV(this.statePath))return;try{let $=ba(this.statePath,"utf8"),Z=JSON.parse($);if(Z.version!==1||!Z.teamState)return;for(let Q of Z.teammates??[])this.teammateSpecs.set(Q.agentId,Q);return eL(Z.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec($){this.teammateSpecs.set($.agentId,$)}removeTeammateSpec($){this.teammateSpecs.delete($)}persist($){if(!this.hasPersistableState($)){this.clearPersistedState();return}this.ensureDir();let Z={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},Q=`${this.statePath}.tmp`;ya(Q,`${JSON.stringify(Z,null,2)}
1030
+ `,"utf8"),ka(Q,this.statePath)}appendTaskHistory($){let Z={};switch($.type){case"team_task_updated":Z=$.task;break;case"team_message":Z={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":Z={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":Z={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":Z={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":Z={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),wa(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:Z})}
1031
+ `,"utf8")}ensureDir(){if(!LV(this.dirPath))Sa(this.dirPath,{recursive:!0})}hasPersistableState($){let Z=$.exportState();if(this.teammateSpecs.size>0)return!0;if(Z.members.some((Q)=>Q.role==="teammate"))return!0;return Z.tasks.length>0||Z.mailbox.length>0||Z.missionLog.length>0}clearPersistedState(){if(LV(this.statePath))xa(this.statePath)}}import{z as v}from"zod";var Dq=v.object({workspaceRoot:v.string().min(1),cwd:v.string().optional(),provider:v.string().min(1),model:v.string().min(1),mode:v.enum(["act","plan"]).default("act"),apiKey:v.string(),systemPrompt:v.string().optional(),rules:v.string().optional(),maxIterations:v.number().int().positive().optional(),enableTools:v.boolean(),enableSpawn:v.boolean().optional(),enableTeams:v.boolean().optional(),autoApproveTools:v.boolean().optional(),missionStepInterval:v.number().int().positive().optional(),missionTimeIntervalMs:v.number().int().positive().optional()}),_q=v.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),zq=v.enum(["user","assistant","tool","system","status","error"]),Oq=v.object({id:v.string().min(1),mediaType:v.enum(["image/png","image/jpeg","image/gif","image/webp"]),data:v.string().min(1)}),Nq=v.object({id:v.string().min(1),sessionId:v.string().nullable(),role:zq,content:v.string(),images:v.array(Oq).optional(),createdAt:v.number().int().nonnegative(),meta:v.object({stream:v.enum(["stdout","stderr"]).optional(),toolName:v.string().optional(),iteration:v.number().int().nonnegative().optional(),agentId:v.string().optional(),conversationId:v.string().optional(),hookEventName:v.string().optional(),inputTokens:v.number().int().nonnegative().optional(),outputTokens:v.number().int().nonnegative().optional(),checkpoint:v.object({ref:v.string(),createdAt:v.number().int().nonnegative(),runCount:v.number().int().positive(),kind:v.enum(["stash","commit"]).optional()}).optional()}).optional()}),qq=v.object({toolCalls:v.number().int().nonnegative(),tokensIn:v.number().int().nonnegative(),tokensOut:v.number().int().nonnegative()}),va=v.object({sessionId:v.string().nullable(),status:_q,config:Dq,messages:v.array(Nq),rawTranscript:v.string(),error:v.string().nullable(),summary:qq});var ga=k$;import{Agent as JK0,createAgentRuntime as WK0}from"@cline/agents";import{readFile as ma}from"node:fs/promises";import ca from"node:path";function ua($){return $}async function da($){let Z=ca.resolve($),Q=await ma(Z,"utf8"),X;try{X=JSON.parse(Q)}catch(J){let W=J instanceof Error?J.message:String(J);throw Error(`Failed to parse JSON config at "${Z}": ${W}`)}return la(X,Z)}function la($,Z){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${Z}": expected an object.`);let X=$.providers;if(!Array.isArray(X))throw Error(`Invalid llms config in "${Z}": "providers" must be an array.`);if(!X.length)throw Error(`Invalid llms config in "${Z}": "providers" cannot be empty.`);return $}import{BUILT_IN_PROVIDER_IDS as Eq,createHandler as ra,createHandlerAsync as aa,getProviderCollection as na,hasProvider as Mq,registerAsyncHandler as oa,registerHandler as sa,registerModel as ta,registerProvider as Rq}from"@cline/llms";function Aq($){return $?{...$}:{}}function pa($,Z){if($)return $;if(!Z)return;let Q=globalThis.process;if(!Q?.env)return;return Q.env[Z]}function ia($,Z){if(!Z.length)throw Error(`Provider "${$}" must include at least one model.`)}function Tq($){let Z=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:Z,defaultModel:$.collection.provider.defaultModelId,modelCount:Z.length}}class _V{providers=new Map;register($){ia($.id,$.models);let Z=$.defaultModel??$.models[0];if(!Z)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(Z))throw Error(`Default model "${Z}" is not included in configured models for "${$.id}".`);let Q=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...Q?.models??[],...$.models]),defaultModel:Z,defaults:{...Q?.defaults??{},...Aq($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:pa($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...Aq($.settings)}})}registerModel($,Z){let Q=this.providers.get($);if(!Q){this.providers.set($,{id:$,models:new Set([Z]),defaultModel:Z,defaults:{}});return}Q.models.add(Z)}createHandlerConfig($){let Z=this.require($.providerId),Q=$.modelId??Z.defaultModel;if(!Z.models.has(Q))throw Error(`Model "${Q}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:Q,...Z.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,Z){return this.providers.get($)?.models.has(Z)??!1}require($){let Z=this.providers.get($);if(!Z)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return Z}}class zV{configuredProviders=new _V;constructor($){this.applyConfig($)}createHandler($){return ra(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return aa(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(Rq($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)sa($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)oa($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let Z=$.exposeModels??Object.keys($.models),Q=$.defaultModel??Z[0];if(!Q)throw Error(`Provider "${$.id}" must define a default model.`);Rq({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:Q,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:Z,defaultModel:Q,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){ta($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...Eq]}async getBuiltInProviders(){return(await Promise.all(Eq.map((Z)=>na(Z)))).filter((Z)=>Z!==void 0).map((Z)=>Tq({collection:Z}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,Z){return this.configuredProviders.hasModel($,Z)}applyConfig($){for(let Z of $.providers)this.configuredProviders.registerSelectionConfig(Z);for(let Z of $.models??[])this.registerModel(Z);for(let Z of $.customProviders??[])this.registerProvider(Z);for(let Z of this.configuredProviders.list()){let Q=Mq(Z.id),X=this.configuredProviders.createHandlerConfig({providerId:Z.id,modelId:Z.defaultModel}).routingProviderId,J=typeof X==="string"&&Mq(X);if(!Q&&!J)throw Error(`Provider "${Z.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function ea($){return new zV($)}vj();async function sY0(){return Promise.resolve().then(() => (QQ(),NN))}export{Wj as writeModelsFileSync,x7 as writeHubDiscovery,d0 as writeGlobalSettings,y7 as withHubStartupLock,sQ0 as watchManagedHubBuildMismatch,F1 as verifyHubConnection,x1 as updateMcpSettingsFileSync,G7 as updateMcpSettingsFile,X4 as updateMcpServerOAuthStateAsync,cX as updateMcpServerOAuthState,Gq as updateLocalProvider,nY as uninstallPlugin,tp as uninstallMcpServer,vN as uninstallMarketplaceSkill,gN as uninstallMarketplacePlugin,IN as uninstallMarketplaceMcpServerFromSettings,oi as uninstallMarketplaceEntry,ij as truncateNotificationBody,I8 as truncateCommandOutput,Uj as trimMessagesBeforeUserRun,Uq as transcribeLocalAudio,Fa as transcribeConfiguredVoiceInput,N3 as toggleDisabledTool,n7 as toTeamProgressLifecycleEvent,o1 as toProviderConfig,wk as toHubStatusUrl,gF as toHubHealthUrl,iW as toHookConfigFileName,Hg as syncStoredProviderRegistration,mY as syncPluginMcpServersToSettings,JZ as summarizeUsageFromMessages,vV0 as stripUtf8Bom,dx as stopLocalHubServerGracefully,n1 as startLocalOAuthServer,xY as startHubWebSocketServer,Zj0 as startHubServer,HA as startClineDeviceAuth,eX as splitCoreSessionConfig,Ax as spawnDetachedHubServerWithRetry,qx as spawnDetachedHubServer,UE as setTuiThemeGlobally,FE as setToolAutoApproveGlobally,QE as setTelemetryOptOutGlobally,yq as setSdkLogger,KE as setPlanActModeGlobally,SB as setModelToolEnabledGlobally,Z4 as setMcpServerDisabled,bB as setDisabledTools,q3 as setDisabledPlugin,jE as setCompactionStrategyGlobally,VE as setCompactionModeGlobally,JE as setAutoUpdateEnabledGlobally,xd as setActiveConnectorSupervisor,wz as serializeAgendaTaskSpec,pQ0 as sendHubCommand,j0 as sdkDebug,Ua as saveVoiceInputSettings,q8 as saveProviderOAuthCredentials,Da as saveLocalProviderSettings,Na as saveLocalProviderOAuthCredentials,T4 as sanitizeSessionToken,OB as safeParseSettings,ST as safeCreateProviderConfig,m2 as runSubprocessEvent,n4 as runHook,SH as reviveTeamStateDates,k4 as retireDiscoveredHub,ZL as restartLocalHubIfIdleAfterStartupTimeout,M20 as resolveWorkspaceHubOwnerContext,s3 as resolveWorkflowsConfigSearchPaths,j7 as resolveToolClientType,n3 as resolveSkillsConfigSearchPaths,P1 as resolveSharedHubOwnerContext,cm as resolveSessionBackend,o3 as resolveRulesConfigSearchPaths,U3 as resolveProviderConfig,aA as resolveProviderApiKeyFromSettings,v1 as resolveProductionHubOwnerContext,M$ as resolvePluginSkillDirectoriesFromPaths,w8 as resolvePluginConfigSearchPaths,n$ as resolveModelsRegistryPath,wB as resolveModelToolSettings,yy as resolveMessageDisplayRole,y1 as resolveMcpServerRegistrations,mX as resolveMcpServerRegistration,tY as resolveMarketplaceMcpServerName,Aa as resolveLocalClineAuthToken,Xu as resolveHubUrl,Bl as resolveHubRunQueuePath,b2 as resolveHubOwnerContext,WN as resolveHubInstanceLockPath,Il as resolveHubEventLogPath,k2 as resolveHubEndpointOptions,gJ as resolveHubBuildIdentity,h1 as resolveHubBuildId,hJ as resolveHubBuildEpochMs,lW as resolveHooksConfigSearchPaths,s1 as resolveDisabledToolNames,j9 as resolveDisabledPluginPaths,V0 as resolveDefaultMcpSettingsPath,I7 as resolveDefaultHubPort,ck as resolveDefaultHubPathname,mk as resolveDefaultHubHost,vH as resolveCoreSelectedToolIds,D1 as resolveCoreDistinctId,v4 as resolveCoreDeviceId,$W as resolveCompatibleLocalHubUrl,L20 as resolveClineDir,f4 as resolveClineDataDir,_9 as resolveAndLoadAgentPlugins,H2 as resolveAgentPluginPaths,rr as resetClineRecommendedModelsCacheForTests,iJ as requestHubShutdown,rF as requestHubDrain,gp as requestDesktopToolApproval,cY as removePluginMcpServersFromSettings,qd as removePersistedConnectorConnection,u6 as rememberRecoverableLocalHubUrl,TN as registerRemoteConfigSessionBlobUpload,J4 as registerMcpServersFromSettingsFile,IV0 as registerDisposable,_a as refreshProviderModelsFromSource,dV as refreshOpenAICodexToken,sV as refreshOcaToken,cV as refreshClineToken,Ad as reconnectPersistedConnectors,HE as readTuiThemeGlobally,GE as readToolAutoApproveGlobally,Lx as readSupersededHubDiscovery,Z5 as readSessionCheckpointHistory,fp as readRemoteConfigSessionBlobUploadMetadata,BE as readPlanActModeGlobally,DZ as readModelsFileSync,x0 as readHubDiscovery,W0 as readGlobalSettings,WE as readCompactionStrategyGlobally,YE as readCompactionModeGlobally,bY as readBearerToken,Sj as projectSessionMessagesForDisplay,l6 as projectSessionCompactionState,O6 as probeProcessStartTokenAsync,uK as probeProcessStartToken,NU as probeMcpServerConnection,J$ as probeHubServer,lQ0 as probeHubConnection,PG as prewarmFileIndex,iF as prewarmDetachedHubServer,bp as prepareRemoteConfigCoreIntegration,Nd as persistConnectorConnection,GV as peekClineRecommendedModels,a3 as parseWorkflowConfigFromMarkdown,yV0 as parseUserCommandEnvelope,i3 as parseSkillConfigFromMarkdown,zB as parseSettings,Y$ as parseSessionCompactionState,r3 as parseRuleConfigFromMarkdown,sN as parsePluginSource,H7 as parseMcpServerRegistration,IY as parseMcpInstallArgs,VZ as parseHookEventPayload,UW as parseConfiguredAgentConfig,oj as parseAgendaTaskSpec,h$ as normalizeWorkspacePath,xV0 as normalizeUserInput,kV0 as normalizeSdkError,o0 as normalizeRuntimeCapabilities,$9 as normalizeProviderId,za as normalizeOAuthProvider,d6 as normalizeHubWebSocketUrl,t$ as normalizeAgendaTaskLocation,bV0 as noopBasicLogger,Bj as migrateLegacyProviderSettings,E9 as mergeRulesForSystemPrompt,s4 as mergeAgentHooks,ai as marketplaceEntryKey,Ga as markLocalProviderEnabled,AJ as makeTeamTaskSubSessionId,P7 as makeSubSessionId,oQ as loginOpenAICodex,Q3 as loginOcaOAuth,Oa as loginLocalProvider,rQ as loginClineOAuth,W3 as loginAndSaveProviderOAuthCredentials,qa as loginAndSaveLocalProviderOAuthCredentials,h7 as localHubHasNoActiveSessions,sY0 as loadOpenTelemetryAdapter,$4 as loadMcpSettingsFile,da as loadLlmsConfigFromFile,p7 as loadConfiguredAgentConfigs,C8 as loadAgentPluginsFromPathsWithDiagnostics,rB as loadAgentPluginsFromPaths,S3 as loadAgentPluginFromPath,Uk as listSessionHistoryFromBackend,q7 as listPluginToolsWithDiagnostics,YS as listPluginTools,uX as listMcpServerOAuthStatuses,Ha as listLocalProviders,o6 as listHookConfigFiles,q5 as listActiveConnectors,Iy as isUserRunMessage,DS as isUnusableSessionError,LE as isToolDisabledGlobally,z3 as isTelemetryOptedOutGlobally,IH as isSkillsToolAvailable,I$ as isSessionNotFoundError,DK as isRuleEnabled,DT as isPrivateModelCatalogProvider,DE as isPluginDisabledGlobally,oN as isOfficialPluginSlug,X6 as isOAuthProvider,E8 as isModelToolEnabledGlobally,hN as isMarketplaceSkillInstalled,c6 as isManagedHubReusable,Ap as isLocalHubOrigin,DN as isLocalHubHostName,hx as isHubReconnectableTransportError,JN as isHubLockHeldError,$L as isHubCommandTimeoutError,z20 as isDiscoveryFilePresent,k5 as isDedicatedTranscriptionModel,o8 as isCoreBuiltinToolAvailable,zV0 as isClinePassLimitMessage,_V0 as isClinePassLimitError,DV0 as isClineOrgIndividualInferenceSubscriptionMessage,LV0 as isClineOrgIndividualInferenceSubscriptionError,FV0 as isClineNotSubscribedMessage,UV0 as isClineNotSubscribedError,HV0 as isClineModelNotFoundMessage,GV0 as isClineFreeModelLimitMessage,KV0 as isClineFreeModelLimitError,TV as isClineAccountActionRequest,PT as isBuiltInProviderId,XE as isAutoUpdateEnabledGlobally,Ir as installPlugin,op as installMcpServer,q$ as identifyAccount,lJ as hubHasLiveSessions,a0 as hashSecret,E2 as hasMcpSettingsFile,cx as hasActiveHubSessions,sQ as getValidOpenAICodexCredentials,X3 as getValidOcaCredentials,aQ as getValidClineCredentials,i$ as getUserRunSpan,j3 as getProviderOAuthCredentialsFromSettings,fa as getProviderConfigFields,YB as getProviderConfig,rA as getProviderAuthStorageId,b0 as getProviderAuthHandler,GR as getProcessStartTokenAsync,KR as getProcessStartToken,YK as getPluginDisplayName,i5 as getPersistedProviderApiKey,aZ as getPersistedConnectorConnection,U7 as getMcpServerOAuthStatus,Q4 as getMcpServerOAuthState,eY as getMarketplaceSkillCandidates,w4 as getManagedHubCompatibility,OQ as getLocalProviderModels,J6 as getLiveModelsCatalog,$V as getGlobalMarketplaceSkillPaths,_2 as getFileIndex,gh as getCurrentContextSize,wX as getCoreHeadlessToolNames,hH as getCoreDefaultEnabledToolIds,S6 as getCoreBuiltinToolCatalog,gH as getCoreAcpToolNames,BV0 as getClinePassSubscriptionUrl,VV0 as getClineOrgIndividualInferenceSubscriptionMessage,YV0 as getClineNotSubscribedMessage,NV0 as getClineDefaultSystemPrompt,KV as getCachedClineRecommendedModels,HY as getActiveConnectorSupervisor,WJ as generateWorkspaceInfoWithDiagnostics,E7 as generateWorkspaceInfo,T9 as formatRulesForSystemPrompt,nA as formatProviderOAuthApiKey,SV0 as formatDisplayUserInput,ZV as findInstalledGlobalMarketplaceSkillName,qZ as findCheckpointForRun,T3 as filterExtensionToolRegistrations,T$ as filterDisabledTools,A3 as filterDisabledPluginPaths,Jq as fetchClineRecommendedModels,jV0 as extractClinePassLimitMessage,WV0 as extractClineFreeModelLimitResetTime,Fz as executeTodoTaskOperation,hj as executeScheduleOperation,EV as executeClineAccountAction,_N as ensureHubWebSocketServer,Qj0 as ensureHubServer,pJ as ensureDetachedHubServer,jj as ensureCustomProvidersLoadedSync,U_ as ensureCustomProvidersLoaded,x4 as ensureCompatibleLocalHubUrl,GX as ensureChatWorkspace,Iz as ensureAgendaTaskSchema,i9 as enrichPromptWithMentions,PV0 as emptyWorkspaceManifest,e6 as emptyStoredProviderSettings,S8 as discoverPluginModulePaths,Yi as disablePluginMcpServersInSettings,KY as disableConnectorAutostart,TJ as deriveSubsessionStatus,Hq as deleteLocalProvider,ua as defineLlmsConfig,$X as createWorkflowsConfigDefinition,b6 as createUserInstructionConfigService,kG as createToolPoliciesWithPreset,CV0 as createTool,w_ as createTeamName,uj as createTasksTool,dj as createTasksPromptExtension,cD as createSubprocessHooks,w6 as createSpawnAgentTool,t3 as createSkillsConfigDefinition,VX as createShellTool,h8 as createShellExecutor,fZ as createSessionHost,m7 as createSessionCompactionState,fZ as createRuntimeHost,e3 as createRulesConfigDefinition,Hj as createRestoredCheckpointMetadata,Sp as createRemoteConfigSessionMessagesArtifactUploader,wT as createProviderConfig,hZ as createOpenTelemetryTelemetryService,y5 as createOAuthClientCallbacks,N7 as createMcpTools,K30 as createLocalHubScheduleRuntimeHandlers,ea as createLlmsSdk,p0 as createInitialAccumulatedUsage,_20 as createInMemoryHubOwnerContext,W$ as createHubServerUrl,IF as createHubAuthToken,eW as createHookConfigFileHooks,GZ as createHookConfigFileExtension,KZ as createHookAuditHooks,m8 as createEditorExecutor,aX as createDisabledMcpToolPolicy,CU as createDisabledMcpToolPolicies,P6 as createDelegatedAgentConfigProvider,f6 as createDelegatedAgent,xG as createDefaultToolsWithPreset,T6 as createDefaultTools,FX as createDefaultShellExecutor,V4 as createDefaultMcpServerClientFactory,o9 as createDefaultExecutors,H4 as createCoreSettingsService,u$ as createCoreSessionSnapshot,RV0 as createContributionRegistry,cW as createContextCompactionPrepareTurn,d2 as createConfiguredTelemetryService,vZ as createConfiguredTelemetryHandle,La as createConfiguredStreamingTranscriptionSession,r7 as createConfiguredAgentTools,uW as createCompactionStateAwarePrepareTurn,MV0 as createClineTelemetryServiceMetadata,EV0 as createClineTelemetryServiceConfig,p_ as createCheckpointComparePlan,s8 as createBuiltinTools,g8 as createApplyPatchExecutor,n8 as createAgentTeamsTools,WK0 as createAgentRuntime,jZ as createAgentHooksExtension,i6 as countUserRunMessages,zz as connectToHub,u9 as computePatchChanges,UA as completeClineDeviceAuth,vJ as compareHubBuilds,fj as compareCheckpointToWorkspace,Zq as collectPluginMcpOAuthCandidates,ET as clearPrivateModelsCatalogCache,TT as clearLiveModelsCatalogCache,hF as clearHubDiscoveryIfOwned,X$ as clearHubDiscovery,dp as cleanupConnectorInstanceViaCli,Hu as checkManagedHubBuildMismatch,aq as captureWorkspacePathResolved,MQ as captureWorkspaceInitialized,RQ as captureWorkspaceInitError,a1 as captureToolUsage,fQ as captureTokenUsage,PQ as captureTaskRestarted,CQ as captureTaskCreated,v5 as captureTaskCompleted,g5 as captureSubagentExecution,SQ as captureSkillUsed,TV0 as captureSdkError,nq as captureProviderConfigured,oq as captureProviderApiError,wQ as captureModeSwitch,kQ as captureMistakeLimitReached,xQ as captureMentionUsed,IQ as captureMentionSearchResults,yQ as captureMentionFailed,vQ as captureHookDiscovery,rq as captureExtensionActivated,bQ as captureDiffEditFailure,z8 as captureConversationTurnEvent,mQ as captureCompactionSkipped,gQ as captureCompactionExecuted,O$ as captureAuthSucceeded,z$ as captureAuthStarted,h5 as captureAuthRefreshSoftFailure,Y2 as captureAuthLoggedOut,N$ as captureAuthFailed,hq as captureAgentUnexpectedReasoningTokens,hQ as captureAgentTeamCreated,V2 as captureAgentCreated,jJ as buildWorkspaceMetadata,a7 as buildTeamProgressSummary,qV0 as buildSdkErrorProperties,qN as buildRemoteConfigSessionBlobUploadMetadata,RN as buildMcpInstallTransport,r8 as buildDelegatedAgentConfig,T5 as buildConnectorChildEnv,bP as buildConnectionUpdate,LW as buildConfiguredAgentToolName,DW as buildConfiguredAgentToolDescriptors,i_ as buildCheckpointWorkspaceDiff,W7 as bootstrapAgentTeams,UU as authorizeMcpServerOAuth,M2 as augmentMcpTimeoutError,DQ as applyClineFeaturedModels,Sz as agendaTaskSpecToCreateInput,Ka as addLocalProvider,v0 as accumulateUsageTotals,I20 as __test__,u3 as WORKFLOWS_CONFIG_DIRECTORY_NAME,T8 as UnifiedConfigFileWatcher,k1 as ToolPresets,mZ as TodoTaskInputSchema,U5 as TelemetryService,IZ as TelemetryLoggerSink,Dz as TasksToolInputSchema,J7 as TEAM_TOOL_NAMES,L5 as TASKS_TOOL_NAME,Lz as TASKS_SYSTEM_PROMPT_RULE,B9 as SubprocessSandbox,y8 as StructuredCommandInputSchema,HZ as StoredProviderSettingsSchema,nD as StoredProviderSettingsEntrySchema,aD as StoredProviderModesSchema,Q5 as SqliteTeamStore,p$ as SqliteSessionStore,QY as SqliteAgendaTaskStore,Q8 as SessionVersioningService,O1 as SessionVersioningError,Z0 as SessionSource,P2 as SessionNotFoundError,G5 as ScheduledTaskInputSchema,LB as SapSettingsSchema,FO as STOP_SIGTERM_TIMEOUT_MS,LO as STOP_SIGKILL_TIMEOUT_MS,c3 as SKILLS_CONFIG_DIRECTORY_NAME,D3 as SESSION_STATUSES,U4 as SESSION_NOT_FOUND_ERROR_CODE,hV0 as SDK_ERROR_TELEMETRY_EVENT,RZ as RuntimeOAuthTokenManager,EQ as RpcClineAccountService,c7 as RemoteRuntimeHost,GB as ReasoningSettingsSchema,BK as RULES_CONFIG_DIRECTORY_NAME,GO as RESTART_MAX_DELAY_MS,HO as RESTART_GIVE_UP_AFTER,UO as RESTART_COUNTER_RESET_MS,KO as RESTART_BASE_DELAY_MS,AN as REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY,W6 as ProviderSettingsSchema,o$ as ProviderSettingsManager,VB as ProviderProtocolSchema,L3 as ProviderIdSchema,BB as ProviderClientSchema,v8 as PatchActionType,s as PATCH_MARKERS,F5 as OpenTelemetryProvider,DB as OcaSettingsSchema,H3 as OPENAI_COMPATIBLE_PROVIDERS,X5 as OAuthReauthRequiredError,j$ as NodeHubClient,V5 as NoOpFeatureFlagsProvider,wY as NativeHubTransportAdapter,_B as ModelCatalogSettingsSchema,B7 as McpSettingsUpdateSkippedError,k6 as McpSettingsMutatorPurityError,x6 as McpSettingsLockTimeoutError,y$ as McpOAuthClientChangedError,$$ as MAX_COMMAND_OUTPUT_CHARS,s$ as LocalRuntimeHost,eY0 as Llms,UZ as InMemoryWorkspaceManager,B4 as InMemoryMcpManager,_u as HubUIClient,L1 as HubTransportError,Du as HubSessionClient,$Q as HubServerTransport,yZ as HubScheduleService,bZ as HubScheduleCommandService,I2 as HubRuntimeHost,DY as HubRunQueue,oZ as HubRunAdmissionRejectedError,XN as HubLockHeldError,U8 as HubInstanceLock,AY as HubEventLogStore,v7 as HubCommandError,mD as HookEventPayloadSchema,gD as HookEventNameSchema,YZ as HookConfigFileName,qW0 as HUB_LOCK_HELD_EXIT_CODE,pW as HOOK_CONFIG_FILE_EVENT_MAP,xD as HOOKS_CONFIG_DIRECTORY_NAME,W9 as GlobalSettingsSchema,UB as GcpSettingsSchema,Lq as FileTeamPersistenceStore,Y5 as FeatureFlagsService,wV0 as FeatureFlagDefaultValue,fV0 as FEATURE_FLAGS,BV as FALLBACK_CLINE_RECOMMENDED_MODELS,A0 as DefaultToolNames,MZ as DefaultRuntimeBuilder,zV as DefaultLlmsSdk,WB as DEFAULT_MODELS_CATALOG_URL,iX as DEFAULT_MCP_CONNECT_TIMEOUT_MS,vk as DEFAULT_HUB_PORT,gk as DEFAULT_HUB_PATHNAME,hk as DEFAULT_HUB_HOST,g6 as CoreSettingsService,r$ as CoreSessionService,AV0 as ContributionRegistry,DO as ConnectorSupervisor,D2 as CommandExitError,JV0 as ClinePassLimitError,XV0 as ClineOrgIndividualInferenceSubscriptionError,QV0 as ClineNotSubscribedError,ZV0 as ClineFreeModelLimitError,bj as ClineCore,TQ as ClineAccountService,va as ChatViewStateSchema,qq as ChatSummarySchema,_q as ChatSessionStatusSchema,Dq as ChatSessionConfigSchema,Nq as ChatMessageSchema,zq as ChatMessageRoleSchema,Oq as ChatMessageImageSchema,l as CORE_TELEMETRY_EVENTS,ga as CORE_BUILD_VERSION,fY as BrowserWebSocketHubAdapter,CT as BUILT_IN_PROVIDER_IDS,F3 as BUILT_IN_PROVIDER,FB as AzureSettingsSchema,HB as AwsSettingsSchema,KB as AuthSettingsSchema,c4 as AgentTeamsRuntime,zW as AgentTeam,JK0 as Agent,$Y as AgendaTaskSpecFileStore,pZ as AgendaTaskRevisionConflictError,jY as AgendaTaskManager,L6 as ALL_DEFAULT_TOOL_NAMES,GY as ADOPTED_POLL_INTERVAL_MS};